• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

SocketLayer.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 #ifndef __SOCKET_LAYER_H
00011 #define __SOCKET_LAYER_H
00012 
00013 #include "RakMemoryOverride.h"
00014 #include "SocketIncludes.h"
00015 #include "RakNetTypes.h"
00016 #include "RakNetSmartPtr.h"
00017 #include "RakNetSocket.h"
00018 #include "Export.h"
00019 #include "MTUSize.h"
00020 #include "RakString.h"
00021 
00022 //#include "ClientContextStruct.h"
00023 
00024 class RakPeer;
00025 
00026 class RAK_DLL_EXPORT SocketLayerOverride
00027 {
00028 public:
00029         SocketLayerOverride() {}
00030         virtual ~SocketLayerOverride() {}
00031 
00033         virtual int RakNetSendTo( SOCKET s, const char *data, int length, SystemAddress systemAddress )=0;
00034 
00036         // Return -1 to use RakNet's normal recvfrom, 0 to abort RakNet's normal recvfrom, and positive to return data
00037         virtual int RakNetRecvFrom( const SOCKET sIn, RakPeer *rakPeerIn, char dataOut[ MAXIMUM_MTU_SIZE ], SystemAddress *senderOut, bool calledFromMainThread )=0;
00038 };
00039 
00040 
00041 // A platform independent implementation of Berkeley sockets, with settings used by RakNet
00042 class SocketLayer
00043 {
00044 
00045 public:
00046         
00048         SocketLayer();
00049         
00050         // Destructor   
00051         ~SocketLayer();
00052         
00053         // Get the singleton instance of the Socket Layer.
00055         static inline SocketLayer* Instance()
00056         {
00057                 return & I;
00058         }
00059 
00060         // Connect a socket to a remote host.
00065         SOCKET Connect( SOCKET writeSocket, unsigned int binaryAddress, unsigned short port );
00066         
00071         SOCKET CreateBoundSocket( unsigned short port, bool blockingSocket, const char *forceHostAddress, unsigned int sleepOn10048 );
00072         SOCKET CreateBoundSocket_PS3Lobby( unsigned short port, bool blockingSocket, const char *forceHostAddress );
00073 
00077         static bool IsPortInUse(unsigned short port, const char *hostAddress=0);
00078 
00079         const char* DomainNameToIP( const char *domainName );
00080         
00084         bool AssociateSocketWithCompletionPortAndRead( SOCKET readSocket, unsigned int binaryAddress, unsigned short port, RakPeer* rakPeer );
00085         
00090         void Write( const SOCKET writeSocket, const char* data, const int length );
00091         
00098         int RecvFrom( const SOCKET s, RakPeer *rakPeer, int *errorCode, RakNetSmartPtr<RakNetSocket> rakNetSocket, unsigned short remotePortRakNetWasStartedOn_PS3 );
00099         // Newer version, for reads from a thread
00100         static void RecvFromBlocking( const SOCKET s, RakPeer *rakPeer, unsigned short remotePortRakNetWasStartedOn_PS3, char *dataOut, int *bytesReadOut, SystemAddress *systemAddressOut, RakNetTimeUS *timeRead );
00101         
00109         void RawRecvFromNonBlocking( const SOCKET s, unsigned short remotePortRakNetWasStartedOn_PS3, char *dataOut, int *bytesReadOut, SystemAddress *systemAddressOut, RakNetTimeUS *timeRead );
00110 
00111 
00116         RakNet::RakString GetSubNetForSocketAndIp(SOCKET inSock, RakNet::RakString inIpString);
00117 
00118 
00121         void SetNonBlocking( SOCKET listenSocket);
00122 
00123 #if !defined(_XBOX) && !defined(_X360)
00124 
00125 
00126 
00127         void GetMyIP( char ipList[ MAXIMUM_NUMBER_OF_INTERNAL_IDS ][ 16 ], unsigned int binaryAddresses[MAXIMUM_NUMBER_OF_INTERNAL_IDS] );
00128 #endif
00129         
00137         int SendTo( SOCKET s, const char *data, int length, const char ip[ 16 ], unsigned short port, unsigned short remotePortRakNetWasStartedOn_PS3 );
00138 
00149         int SendToTTL( SOCKET s, const char *data, int length, const char ip[ 16 ], unsigned short port, int ttl );
00150 
00158         int SendTo( SOCKET s, const char *data, int length, unsigned int binaryAddress, unsigned short port, unsigned short remotePortRakNetWasStartedOn_PS3 );
00159 
00163         static unsigned short GetLocalPort ( SOCKET s );
00164 
00165         static SystemAddress GetSystemAddress ( SOCKET s );
00166 
00167         void SetSocketLayerOverride(SocketLayerOverride *_slo);
00168         SocketLayerOverride* GetSocketLayerOverride(void) const {return slo;}
00169 
00170         int SendTo_PS3Lobby( SOCKET s, const char *data, int length, unsigned int binaryAddress, unsigned short port, unsigned short remotePortRakNetWasStartedOn_PS3 );
00171         int SendTo_360( SOCKET s, const char *data, int length, const char *voiceData, int voiceLength, unsigned int binaryAddress, unsigned short port );
00172         int SendTo_PC( SOCKET s, const char *data, int length, unsigned int binaryAddress, unsigned short port );
00173 
00174 
00175         static void SetDoNotFragment( SOCKET listenSocket, int opt );
00176 private:
00177 
00178 
00179         static SocketLayer I;
00180         void SetSocketOptions( SOCKET listenSocket);
00181         SocketLayerOverride *slo;
00182 };
00183 
00184 #endif
00185 

Generated on Thu Sep 30 2010 01:27:28 for RakNet by  doxygen 1.7.1