2023-02-08 04:57:56 -05:00
// Copyright Epic Games, Inc. All Rights Reserved.
2023-02-08 04:18:21 -05:00
# include "SocketsAndroid.h"
FSocketAndroid : : ~ FSocketAndroid ( )
{
ReleaseMulticastLock ( ) ;
}
bool FSocketAndroid : : SetBroadcast ( bool bAllowBroadcast )
{
bool bSucceeded = FSocketBSD : : SetBroadcast ( bAllowBroadcast ) ;
if ( bSucceeded & & bAllowBroadcast & & ! bIsMulticastLockAcquired )
{
AcquireMulticastLock ( ) ;
}
return bSucceeded ;
}
bool FSocketAndroid : : JoinMulticastGroup ( const FInternetAddr & GroupAddress )
{
bool bShouldReleaseLockOnFailure = ! bIsMulticastLockAcquired ;
if ( bShouldReleaseLockOnFailure )
{
AcquireMulticastLock ( ) ;
}
bool bSucceeded = FSocketBSD : : JoinMulticastGroup ( GroupAddress ) ;
if ( ! bSucceeded & & bShouldReleaseLockOnFailure )
{
ReleaseMulticastLock ( ) ;
}
return bSucceeded ;
}
bool FSocketAndroid : : JoinMulticastGroup ( const FInternetAddr & GroupAddress , const FInternetAddr & InterfaceAddress )
{
bool bShouldReleaseLockOnFailure = ! bIsMulticastLockAcquired ;
if ( bShouldReleaseLockOnFailure )
{
AcquireMulticastLock ( ) ;
}
bool bSucceeded = FSocketBSD : : JoinMulticastGroup ( GroupAddress , InterfaceAddress ) ;
if ( ! bSucceeded & & bShouldReleaseLockOnFailure )
{
ReleaseMulticastLock ( ) ;
}
return bSucceeded ;
}
void FSocketAndroid : : AcquireMulticastLock ( )
{
2023-10-03 11:18:54 -04:00
# if USE_ANDROID_JNI
2023-02-08 04:18:21 -05:00
extern bool AndroidThunkCpp_AcquireWifiManagerMulticastLock ( ) ;
if ( AndroidThunkCpp_AcquireWifiManagerMulticastLock ( ) )
{
bIsMulticastLockAcquired = true ;
UE_LOG ( LogSockets , VeryVerbose , TEXT ( " WifiManager.MulticastLock succesfully aquired " ) ) ;
}
else
2023-10-03 11:18:54 -04:00
# endif
2023-02-08 04:18:21 -05:00
{
static bool bAlreadyLoggedFailure = false ;
if ( ! bAlreadyLoggedFailure )
{
bAlreadyLoggedFailure = true ;
UE_LOG ( LogSockets , Warning , TEXT ( " Failed to acquire WifiManager.MulticastLock. Is multicast/broadcast support for Android enabled in AndroidRuntimeSettings? " ) ) ;
}
}
}
void FSocketAndroid : : ReleaseMulticastLock ( )
{
2023-10-03 11:18:54 -04:00
# if USE_ANDROID_JNI
2023-02-08 04:18:21 -05:00
if ( bIsMulticastLockAcquired )
{
UE_LOG ( LogSockets , VeryVerbose , TEXT ( " Releasing WifiManager.MulticastLock " ) ) ;
extern void AndroidThunkCpp_ReleaseWifiManagerMulticastLock ( ) ;
AndroidThunkCpp_ReleaseWifiManagerMulticastLock ( ) ;
bIsMulticastLockAcquired = false ;
}
2023-10-03 11:18:54 -04:00
# endif
2023-02-08 04:18:21 -05:00
}