16 #ifndef __RAKNET_SOCKET_2_H
17 #define __RAKNET_SOCKET_2_H
29 #if defined(__APPLE__)
30 #import <CoreFoundation/CoreFoundation.h>
31 #include <sys/socket.h>
32 #include <netinet/in.h>
37 #ifdef TEST_NATIVE_CLIENT_ON_WINDOWS
38 #define __native_client__
39 typedef int PP_Resource;
46 struct RNS2_BerkleyBindParameters;
116 virtual void DeallocRNS2RecvStruct(
RNS2RecvStruct *s,
const char *file,
unsigned int line)=0;
117 virtual RNS2RecvStruct *AllocRNS2RecvStruct(
const char *file,
unsigned int line)=0;
142 static void DomainNameToIP(
const char *domainName,
char ip[65] );
151 #if defined(WINDOWS_STORE_RT)
153 ref class ListenerContext;
161 RNS2_WindowsStore8();
162 ~RNS2_WindowsStore8();
168 static void DomainNameToIP(
const char *domainName,
char ip[65] );
170 static int WinRTInet_Addr(
const char * cp);
172 static int WinRTSetSockOpt(Windows::Networking::Sockets::DatagramSocket ^s,
178 static int WinRTIOCTLSocket(Windows::Networking::Sockets::DatagramSocket ^s,
180 unsigned long *argp);
182 static int WinRTGetSockName(Windows::Networking::Sockets::DatagramSocket ^s,
183 struct sockaddr *name,
186 static RNS2_WindowsStore8 *GetRNS2FromDatagramSocket(Windows::Networking::Sockets::DatagramSocket^ s);
191 Windows::Networking::Sockets::DatagramSocket^ listener;
195 ListenerContext^ listenerContext;
197 #elif defined(__native_client__)
198 struct NativeClientBindParameters
202 const char *forceHostAddress;
204 RNS2EventHandler *eventHandler;
206 class RNS2_NativeClient;
207 struct RNS2_SendParameters_NativeClient :
public RNS2_SendParameters
209 RNS2_NativeClient *socket2;
211 class RNS2_NativeClient :
public RakNetSocket2
215 virtual ~RNS2_NativeClient();
216 RNS2BindResult Bind( NativeClientBindParameters *bindParameters,
const char *file,
unsigned int line );
217 RNS2SendResult Send( RNS2_SendParameters *sendParameters,
const char *file,
unsigned int line );
218 const NativeClientBindParameters *GetBindings(
void)
const;
221 static bool IsPortInUse(
unsigned short port,
const char *hostAddress,
unsigned short addressFamily,
int type );
239 void ProcessBufferedSend(
void);
240 static void SendImmediate(RNS2_SendParameters_NativeClient *sp);
241 static void DeallocSP(RNS2_SendParameters_NativeClient *sp);
242 static RNS2_SendParameters_NativeClient* CloneSP(RNS2_SendParameters *sp, RNS2_NativeClient *socket2,
const char *file,
unsigned int line);
243 static void onRecvFrom(
void* pData,
int32_t dataSize);
244 void IssueReceiveCall(
void);
245 static void onSocketBound(
void* pData,
int32_t dataSize);
246 static void onSendTo(
void* pData,
int32_t dataSize);
247 void BufferSend( RNS2_SendParameters *sendParameters,
const char *file,
unsigned int line );
248 PP_Resource rns2Socket;
249 NativeClientBindParameters binding;
251 SimpleMutex sendInProgressMutex;
261 SimpleMutex bufferedSendsMutex;
263 #else // defined(WINDOWS_STORE_RT)
289 static bool IsPortInUse(
unsigned short port,
const char *hostAddress,
unsigned short addressFamily,
int type );
333 #if defined(__APPLE__)
335 CFSocketRef _cfSocket;
357 #if defined(_WIN32) || defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__)
415 SocketLayerOverride() {}
416 virtual ~SocketLayerOverride() {}
419 virtual int RakNetSendTo(
const char *data,
int length,
const SystemAddress &systemAddress )=0;
423 virtual int RakNetRecvFrom(
char dataOut[
MAXIMUM_MTU_SIZE ], SystemAddress *senderOut,
bool calledFromMainThread )=0;
430 virtual ~RNS2_Windows();
431 RNS2BindResult Bind( RNS2_BerkleyBindParameters *bindParameters,
const char *file,
unsigned int line );
432 RNS2SendResult Send( RNS2_SendParameters *sendParameters,
const char *file,
unsigned int line );
433 void SetSocketLayerOverride(SocketLayerOverride *_slo);
434 SocketLayerOverride* GetSocketLayerOverride(
void);
440 SocketLayerOverride *slo;
459 #endif // #elif !defined(WINDOWS_STORE_RT)
463 #endif // __RAKNET_SOCKET_2_H