00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __RAK_PEER_INTERFACE_H
00010 #define __RAK_PEER_INTERFACE_H
00011
00012 #include "PacketPriority.h"
00013 #include "RakNetTypes.h"
00014 #include "RakMemoryOverride.h"
00015 #include "Export.h"
00016 #include "DS_List.h"
00017 #include "RakNetSmartPtr.h"
00018 #include "RakNetSocket.h"
00019
00020
00021 namespace RakNet
00022 {
00023 class BitStream;
00024 }
00025 class PluginInterface2;
00026 struct RPCMap;
00027 struct RakNetStatistics;
00028 struct RakNetBandwidth;
00029 class RouterInterface;
00030 class NetworkIDManager;
00031
00035 class RAK_DLL_EXPORT RakPeerInterface
00036 {
00037 public:
00039 virtual ~RakPeerInterface() {}
00040
00041
00054 virtual bool Startup( unsigned short maxConnections, int _threadSleepTimer, SocketDescriptor *socketDescriptors, unsigned socketDescriptorCount, int threadPriority=-99999 )=0;
00055
00065 virtual void InitializeSecurity(const char *pubKeyE, const char *pubKeyN, const char *privKeyP, const char *privKeyQ )=0;
00066
00069 virtual void DisableSecurity( void )=0;
00070
00075 virtual void AddToSecurityExceptionList(const char *ip)=0;
00076
00079 virtual void RemoveFromSecurityExceptionList(const char *ip)=0;
00080
00083 virtual bool IsInSecurityExceptionList(const char *ip)=0;
00084
00090 virtual void SetMaximumIncomingConnections( unsigned short numberAllowed )=0;
00091
00094 virtual unsigned short GetMaximumIncomingConnections( void ) const=0;
00095
00098 virtual unsigned short NumberOfConnections(void) const=0;
00099
00104 virtual void SetIncomingPassword( const char* passwordData, int passwordDataLength )=0;
00105
00109 virtual void GetIncomingPassword( char* passwordData, int *passwordDataLength )=0;
00110
00126 virtual bool Connect( const char* host, unsigned short remotePort, const char *passwordData, int passwordDataLength, unsigned connectionSocketIndex=0, unsigned sendConnectionAttemptCount=12, unsigned timeBetweenSendConnectionAttemptsMS=500, RakNetTime timeoutTime=0 )=0;
00127
00138 virtual bool ConnectWithSocket(const char* host, unsigned short remotePort, const char *passwordData, int passwordDataLength, RakNetSmartPtr<RakNetSocket> socket, unsigned sendConnectionAttemptCount=12, unsigned timeBetweenSendConnectionAttemptsMS=500, RakNetTime timeoutTime=0)=0;
00139
00144
00145
00151 virtual void Shutdown( unsigned int blockDuration, unsigned char orderingChannel=0, PacketPriority disconnectionNotificationPriority=LOW_PRIORITY )=0;
00152
00155 virtual bool IsActive( void ) const=0;
00156
00160 virtual bool GetConnectionList( SystemAddress *remoteSystems, unsigned short *numberOfSystems ) const=0;
00161
00165 virtual uint32_t GetNextSendReceipt(void)=0;
00166
00170 virtual uint32_t IncrementNextSendReceipt(void)=0;
00171
00184 virtual uint32_t Send( const char *data, const int length, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast, uint32_t forceReceipt=0 )=0;
00185
00191 virtual void SendLoopback( const char *data, const int length )=0;
00192
00203 virtual uint32_t Send( const RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast, uint32_t forceReceipt=0 )=0;
00204
00225 virtual uint32_t SendList( const char **data, const int *lengths, const int numParameters, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast, uint32_t forceReceipt=0 )=0;
00226
00233 virtual Packet* Receive( void )=0;
00234
00237 virtual void DeallocatePacket( Packet *packet )=0;
00238
00240
00241 virtual unsigned short GetMaximumNumberOfPeers( void ) const=0;
00242
00243
00249 virtual void RegisterAsRemoteProcedureCall( const char* uniqueID, void ( *functionPointer ) ( RPCParameters *rpcParms ) )=0;
00250
00257 virtual void RegisterClassMemberRPC( const char* uniqueID, void *functionPointer )=0;
00258
00263 virtual void UnregisterAsRemoteProcedureCall( const char* uniqueID )=0;
00264
00269 virtual void SetNetworkIDManager( NetworkIDManager *manager )=0;
00270
00272 virtual NetworkIDManager *GetNetworkIDManager(void) const=0;
00273
00289 virtual bool RPC( const char* uniqueID, const char *data, BitSize_t bitLength, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast, RakNetTime *includedTimestamp, NetworkID networkID, RakNet::BitStream *replyFromTarget )=0;
00290
00308 virtual bool RPC( const char* uniqueID, const RakNet::BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast, RakNetTime *includedTimestamp, NetworkID networkID, RakNet::BitStream *replyFromTarget )=0;
00309
00310
00316 virtual void CloseConnection( const SystemAddress target, bool sendDisconnectionNotification, unsigned char orderingChannel=0, PacketPriority disconnectionNotificationPriority=LOW_PRIORITY )=0;
00317
00321 virtual void CancelConnectionAttempt( const SystemAddress target )=0;
00322
00325 virtual bool IsConnectionAttemptPending( const SystemAddress systemAddress )=0;
00326
00332 virtual bool IsConnected(const AddressOrGUID systemIdentifier, bool includeInProgress=false, bool includeDisconnecting=false)=0;
00333
00337 virtual int GetIndexFromSystemAddress( const SystemAddress systemAddress ) const=0;
00338
00343 virtual SystemAddress GetSystemAddressFromIndex( int index )=0;
00344
00348 virtual RakNetGUID GetGUIDFromIndex( int index )=0;
00349
00354 virtual void GetSystemList(DataStructures::List<SystemAddress> &addresses, DataStructures::List<RakNetGUID> &guids)=0;
00355
00359 virtual void AddToBanList( const char *IP, RakNetTime milliseconds=0 )=0;
00360
00363 virtual void RemoveFromBanList( const char *IP )=0;
00364
00366 virtual void ClearBanList( void )=0;
00367
00371 virtual bool IsBanned( const char *IP )=0;
00372
00376 virtual void SetLimitIPConnectionFrequency(bool b)=0;
00377
00378
00382 virtual void Ping( const SystemAddress target )=0;
00383
00391 virtual bool Ping( const char* host, unsigned short remotePort, bool onlyReplyOnAcceptingConnections, unsigned connectionSocketIndex=0 )=0;
00392
00396 virtual int GetAveragePing( const AddressOrGUID systemIdentifier )=0;
00397
00401 virtual int GetLastPing( const AddressOrGUID systemIdentifier ) const=0;
00402
00406 virtual int GetLowestPing( const AddressOrGUID systemIdentifier ) const=0;
00407
00412 virtual void SetOccasionalPing( bool doPing )=0;
00413
00414
00420 virtual void SetOfflinePingResponse( const char *data, const unsigned int length )=0;
00421
00426 virtual void GetOfflinePingResponse( char **data, unsigned int *length )=0;
00427
00428
00433 virtual SystemAddress GetInternalID( const SystemAddress systemAddress=UNASSIGNED_SYSTEM_ADDRESS, const int index=0 ) const=0;
00434
00438 virtual SystemAddress GetExternalID( const SystemAddress target ) const=0;
00439
00447 virtual const RakNetGUID& GetGuidFromSystemAddress( const SystemAddress input ) const=0;
00448
00454 virtual SystemAddress GetSystemAddressFromGuid( const RakNetGUID input ) const=0;
00455
00460 virtual void SetTimeoutTime( RakNetTime timeMS, const SystemAddress target )=0;
00461
00464 virtual RakNetTime GetTimeoutTime( const SystemAddress target )=0;
00465
00476
00477
00481 virtual int GetMTUSize( const SystemAddress target ) const=0;
00482
00484 virtual unsigned GetNumberOfAddresses( void )=0;
00485
00489 virtual const char* GetLocalIP( unsigned int index )=0;
00490
00494 virtual bool IsLocalIP( const char *ip )=0;
00495
00499 virtual void AllowConnectionResponseIPMigration( bool allow )=0;
00500
00510 virtual bool AdvertiseSystem( const char *host, unsigned short remotePort, const char *data, int dataLength, unsigned connectionSocketIndex=0 )=0;
00511
00517 virtual void SetSplitMessageProgressInterval(int interval)=0;
00518
00521 virtual int GetSplitMessageProgressInterval(void) const=0;
00522
00527 virtual void SetUnreliableTimeout(RakNetTime timeoutMS)=0;
00528
00532 virtual void SendTTL( const char* host, unsigned short remotePort, int ttl, unsigned connectionSocketIndex=0 )=0;
00533
00534
00539 virtual void SetCompileFrequencyTable( bool doCompile )=0;
00540
00547 virtual bool GetOutgoingFrequencyTable( unsigned int outputFrequencyTable[ 256 ] )=0;
00548
00559 virtual bool GenerateCompressionLayer( unsigned int inputFrequencyTable[ 256 ], bool inputLayer )=0;
00560
00565 virtual bool DeleteCompressionLayer( bool inputLayer )=0;
00566
00569 virtual float GetCompressionRatio( void ) const=0;
00570
00573 virtual float GetDecompressionRatio( void ) const=0;
00574
00575
00579 virtual void AttachPlugin( PluginInterface2 *plugin )=0;
00580
00583 virtual void DetachPlugin( PluginInterface2 *messageHandler )=0;
00584
00585
00589 virtual void PushBackPacket( Packet *packet, bool pushAtHead )=0;
00590
00592
00593 virtual void SetRouterInterface( RouterInterface *routerInterface )=0;
00594
00596
00597 virtual void RemoveRouterInterface( RouterInterface *routerInterface )=0;
00598
00603 virtual void ChangeSystemAddress(RakNetGUID guid, SystemAddress systemAddress)=0;
00604
00609 virtual Packet* AllocatePacket(unsigned dataSize)=0;
00610
00616 virtual RakNetSmartPtr<RakNetSocket> GetSocket( const SystemAddress target )=0;
00617
00621 virtual void GetSockets( DataStructures::List<RakNetSmartPtr<RakNetSocket> > &sockets )=0;
00622
00623 virtual void WriteOutOfBandHeader(RakNet::BitStream *bitStream)=0;
00624
00628 virtual void SetUserUpdateThread(void (*_userUpdateThreadPtr)(RakPeerInterface *, void *), void *_userUpdateThreadData)=0;
00629
00630
00639 virtual void ApplyNetworkSimulator( float packetloss, unsigned short minExtraPing, unsigned short extraPingVariance)=0;
00640
00645 virtual void SetPerConnectionOutgoingBandwidthLimit( unsigned maxBitsPerSecond )=0;
00646
00649 virtual bool IsNetworkSimulatorActive( void )=0;
00650
00651
00652
00659 virtual RakNetStatistics * const GetStatistics( const SystemAddress systemAddress, RakNetStatistics *rns=0 )=0;
00660 virtual bool GetStatistics( const int index, RakNetStatistics *rns )=0;
00661
00663 virtual unsigned int GetReceiveBufferSize(void)=0;
00664
00665
00667 virtual char *GetRPCString( const char *data, const BitSize_t bitSize, const SystemAddress systemAddress)=0;
00668
00670 virtual bool SendOutOfBand(const char *host, unsigned short remotePort, const char *data, BitSize_t dataLength, unsigned connectionSocketIndex=0 )=0;
00671
00672 };
00673
00674 #endif