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