#include <RakPeer.h>
Inheritance diagram for RakPeer:
Public Member Functions | |
RakPeer () | |
Constructor. | |
virtual | ~RakPeer () |
Destructor. | |
bool | Initialize (unsigned short maxConnections, unsigned short localPort, int _threadSleepTimer, const char *forceHostAddress=0) |
Starts the network threads, opens the listen port. You must call this before calling Connect(). Multiple calls while already active are ignored. To call this function again with different settings, you must first call Disconnect(). | |
void | InitializeSecurity (const char *pubKeyE, const char *pubKeyN, const char *privKeyP, const char *privKeyQ) |
void | DisableSecurity (void) |
void | SetMaximumIncomingConnections (unsigned short numberAllowed) |
unsigned short | GetMaximumIncomingConnections (void) const |
void | SetIncomingPassword (const char *passwordData, int passwordDataLength) |
void | GetIncomingPassword (char *passwordData, int *passwordDataLength) |
bool | Connect (const char *host, unsigned short remotePort, char *passwordData, int passwordDataLength) |
Connect to the specified host (ip or domain name) and server port. Calling Connect and not calling SetMaximumIncomingConnections acts as a dedicated client. Calling both acts as a true peer. This is a non-blocking connection. You know the connection is successful when IsConnected() returns true or Receive() gets a message with the type identifier ID_CONNECTION_ACCEPTED. If the connection is not successful, such as a rejected connection or no response then neither of these things will happen. | |
void | Disconnect (unsigned int blockDuration, unsigned char orderingChannel=0) |
Stops the network threads and closes all connections. | |
bool | IsActive (void) const |
bool | GetConnectionList (PlayerID *remoteSystems, unsigned short *numberOfSystems) const |
bool | Send (const char *data, const int length, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast) |
bool | Send (RakNet::BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast) |
Packet * | Receive (void) |
void | DeallocatePacket (Packet *packet) |
unsigned short | GetMaximumNumberOfPeers (void) const |
Return the total number of connections we are allowed. | |
void | RegisterAsRemoteProcedureCall (char *uniqueID, void(*functionPointer)(RPCParameters *rpcParms)) |
void | RegisterClassMemberRPC (char *uniqueID, void *functionPointer) |
void | UnregisterAsRemoteProcedureCall (char *uniqueID) |
bool | RPC (char *uniqueID, const char *data, unsigned int bitLength, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast, bool shiftTimestamp, NetworkID networkID, RakNet::BitStream *replyFromTarget) |
bool | RPC (char *uniqueID, RakNet::BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast, bool shiftTimestamp, NetworkID networkID, RakNet::BitStream *replyFromTarget) |
void | CloseConnection (const PlayerID target, bool sendDisconnectionNotification, unsigned char orderingChannel=0) |
int | GetIndexFromPlayerID (const PlayerID playerId) |
PlayerID | GetPlayerIDFromIndex (int index) |
void | AddToBanList (const char *IP, RakNetTime milliseconds=0) |
void | RemoveFromBanList (const char *IP) |
void | ClearBanList (void) |
Allows all previously banned IPs to connect. | |
bool | IsBanned (const char *IP) |
void | Ping (const PlayerID target) |
void | Ping (const char *host, unsigned short remotePort, bool onlyReplyOnAcceptingConnections) |
int | GetAveragePing (const PlayerID playerId) |
int | GetLastPing (const PlayerID playerId) const |
int | GetLowestPing (const PlayerID playerId) const |
void | SetOccasionalPing (bool doPing) |
RakNet::BitStream * | GetRemoteStaticData (const PlayerID playerId) |
void | SetRemoteStaticData (const PlayerID playerId, const char *data, const int length) |
void | SendStaticData (const PlayerID target) |
void | SetOfflinePingResponse (const char *data, const unsigned int length) |
PlayerID | GetInternalID (void) const |
PlayerID | GetExternalID (const PlayerID target) const |
void | SetTimeoutTime (RakNetTime timeMS, const PlayerID target) |
bool | SetMTUSize (int size) |
int | GetMTUSize (void) const |
unsigned | GetNumberOfAddresses (void) |
Returns the number of IP addresses this system has internally. Get the actual addresses from GetLocalIP(). | |
const char * | GetLocalIP (unsigned int index) |
Returns an IP address at index 0 to GetNumberOfAddresses-1. | |
const char * | PlayerIDToDottedIP (const PlayerID playerId) const |
void | IPToPlayerID (const char *host, unsigned short remotePort, PlayerID *playerId) |
void | AllowConnectionResponseIPMigration (bool allow) |
void | AdvertiseSystem (const char *host, unsigned short remotePort, const char *data, int dataLength) |
void | SetSplitMessageProgressInterval (int interval) |
void | SetUnreliableTimeout (RakNetTime timeoutMS) |
void | SetCompileFrequencyTable (bool doCompile) |
bool | GetOutgoingFrequencyTable (unsigned int outputFrequencyTable[256]) |
bool | GenerateCompressionLayer (unsigned int inputFrequencyTable[256], bool inputLayer) |
bool | DeleteCompressionLayer (bool inputLayer) |
float | GetCompressionRatio (void) const |
float | GetDecompressionRatio (void) const |
void | AttachPlugin (PluginInterface *plugin) |
void | DetachPlugin (PluginInterface *messageHandler) |
void | PushBackPacket (Packet *packet, bool pushAtHead) |
void | SetRouterInterface (RouterInterface *routerInterface) |
For internal use only.
| |
void | RemoveRouterInterface (RouterInterface *routerInterface) |
For internal use only.
| |
void | ApplyNetworkSimulator (double maxSendBPS, unsigned short minExtraPing, unsigned short extraPingVariance) |
bool | IsNetworkSimulatorActive (void) |
RakNetStatisticsStruct *const | GetStatistics (const PlayerID playerId) |
RPCMap * | GetRPCMap (const PlayerID playerId) |
Protected Types | |
enum | { offlinePingResponse_Mutex, NUMBER_OF_RAKPEER_MUTEXES } |
Protected Member Functions | |
Packet * | ReceiveIgnoreRPC (void) |
int | GetIndexFromPlayerID (const PlayerID playerId, bool calledFromNetworkThread) |
bool | SendConnectionRequest (const char *host, unsigned short remotePort, char *passwordData, int passwordDataLength) |
RemoteSystemStruct * | GetRemoteSystemFromPlayerID (const PlayerID playerID, bool calledFromNetworkThread, bool onlyActive) const |
void | ParseConnectionRequestPacket (RakPeer::RemoteSystemStruct *remoteSystem, PlayerID playerId, const char *data, int byteSize) |
Parse out a connection request packet. | |
void | OnConnectionRequest (RakPeer::RemoteSystemStruct *remoteSystem, unsigned char *AESKey, bool setAESKey) |
When we get a connection request from an ip / port, accept it unless full. | |
void | NotifyAndFlagForDisconnect (const PlayerID playerId, bool performImmediate, unsigned char orderingChannel) |
Send a reliable disconnect packet to this player and disconnect them when it is delivered. | |
unsigned short | GetNumberOfRemoteInitiatedConnections (void) const |
Returns how many remote systems initiated a connection to us. | |
RemoteSystemStruct * | AssignPlayerIDToRemoteSystemList (const PlayerID playerId, RemoteSystemStruct::ConnectMode connectionMode) |
Get a free remote system from the list and assign our playerID to it. Should only be called from the update thread - not the user thread. | |
void | ShiftIncomingTimestamp (unsigned char *data, PlayerID playerId) const |
An incoming packet has a timestamp, so adjust it to be relative to this system. | |
RakNetTime | GetBestClockDifferential (const PlayerID playerId) const |
Get the most probably accurate clock differential for a certain player. | |
bool | HandleRPCPacket (const char *data, int length, PlayerID playerId) |
void | HandleRPCReplyPacket (const char *data, int length, PlayerID playerId) |
void | GenerateSYNCookieRandomNumber (void) |
void | SecuredConnectionResponse (const PlayerID playerId) |
void | SecuredConnectionConfirmation (RakPeer::RemoteSystemStruct *remoteSystem, char *data) |
bool | RunUpdateCycle (void) |
bool | AllowIncomingConnections (void) const |
void | SendStaticDataInternal (const PlayerID target, bool performImmediate) |
void | PingInternal (const PlayerID target, bool performImmediate) |
bool | ValidSendTarget (PlayerID playerId, bool broadcast) |
void | CloseConnectionInternal (const PlayerID target, bool sendDisconnectionNotification, bool performImmediate, unsigned char orderingChannel) |
void | SendBuffered (const char *data, int numberOfBitsToSend, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast, RemoteSystemStruct::ConnectMode connectionMode) |
bool | SendImmediate (char *data, int numberOfBitsToSend, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast, bool useCallerDataAllocation, RakNetTimeNS currentTime) |
void | ClearBufferedCommands (void) |
void | ClearRequestedConnectionList (void) |
void | AddPacketToProducer (Packet *p) |
Protected Attributes | |
volatile bool | endThreads |
Set this to true to terminate the Peer thread execution. | |
volatile bool | isMainLoopThreadActive |
true if the peer thread is active. | |
bool | occasionalPing |
*unsigned short | maximumNumberOfPeers |
Store the maximum number of peers allowed to connect. | |
unsigned short | maximumIncomingConnections |
Store the maximum incoming connection allowed. | |
RakNet::BitStream | localStaticData |
localStaticData necessary because we may not have a RemoteSystemStruct representing ourselves in the list | |
RakNet::BitStream | offlinePingResponse |
PlayerID | myPlayerId |
Local Player ID. | |
char | incomingPassword [256] |
unsigned char | incomingPasswordLength |
RemoteSystemStruct * | remoteSystemList |
DataStructures::OrderedList< PlayerID, PlayerIDAndIndex, PlayerIDAndIndexComp > | remoteSystemLookup |
SimpleMutex | rakPeerMutexes [NUMBER_OF_RAKPEER_MUTEXES] |
bool | updateCycleIsRunning |
RunUpdateCycle is not thread safe but we don't need to mutex calls. Just skip calls if it is running already. | |
unsigned int | bytesSentPerSecond |
Data that both the client and the server needs. | |
unsigned int | bytesReceivedPerSecond |
unsigned int | validationInteger |
pthread_t | processPacketsThreadHandle |
pthread_t | recvfromThreadHandle |
SimpleMutex | incomingQueueMutex |
SimpleMutex | banListMutex |
DataStructures::List< BanStruct * > | banList |
DataStructures::List< PluginInterface * > | messageHandlerList |
DataStructures::SingleProducerConsumer< RequestedConnectionStruct > | requestedConnectionList |
unsigned int | frequencyTable [256] |
Compression stuff. | |
HuffmanEncodingTree * | inputTree |
HuffmanEncodingTree * | outputTree |
unsigned int | rawBytesSent |
unsigned int | rawBytesReceived |
unsigned int | compressedBytesSent |
unsigned int | compressedBytesReceived |
DataStructures::SingleProducerConsumer< BufferedCommandStruct > | bufferedCommands |
RPCMap | rpcMap |
int | MTUSize |
bool | trackFrequencyTable |
int | threadSleepTimer |
SOCKET | connectionSocket |
RakNet::BitStream * | replyFromTargetBS |
PlayerID | replyFromTargetPlayer |
bool | replyFromTargetBroadcast |
bool | blockOnRPCReply |
RouterInterface * | router |
double | _maxSendBPS |
unsigned short | _minExtraPing |
unsigned short | _extraPingVariance |
big::RSACrypt< RSA_BIT_SIZE > | rsacrypt |
Encryption and security. | |
big::u32 | publicKeyE |
RSA_BIT_SIZE | publicKeyN |
bool | keysLocallyGenerated |
bool | usingSecurity |
RakNetTime | randomNumberExpirationTime |
unsigned char | newRandomNumber [20] |
unsigned char | oldRandomNumber [20] |
bool | allowConnectionResponseIPMigration |
True to allow connection accepted packets from anyone. False to only allow these packets from servers we requested a connection to. | |
int | splitMessageProgressInterval |
RakNetTime | unreliableTimeout |
DataStructures::SingleProducerConsumer< Packet * > | packetSingleProducerConsumer |
DataStructures::Queue< Packet * > | packetPool |
Friends | |
void | ProcessPortUnreachable (const unsigned int binaryAddress, const unsigned short port, RakPeer *rakPeer) |
void | ProcessNetworkPacket (const unsigned int binaryAddress, const unsigned short port, const char *data, const int length, RakPeer *rakPeer) |
void * | UpdateNetworkLoop (void *arguments) |
Classes | |
struct | BanStruct |
struct | BufferedCommandStruct |
struct | MemoryBlock |
Automatic Variable Synchronization Mechanism automatic variable synchronization takes a primary and secondary identifier The unique primary identifier is the index into the automaticVariableSynchronizationList The unique secondary identifier (UNASSIGNED_NETWORK_ID for none) is in an unsorted list of memory blocks. More... | |
struct | PingAndClockDifferential |
struct | RemoteSystemStruct |
struct | RequestedConnectionStruct |
The primary interface for RakNet, RakPeer contains all major functions for the library. See the individual functions for what the class can do.
|
Bans an IP from connecting. Banned IPs persist between connections but are not saved on shutdown nor loaded on startup. param[in] IP Dotted IP address. Can use * as a wildcard, such as 128.0.0.* will ban all IP addresses starting with 128.0.0
Implements RakPeerInterface. |
|
Sends a one byte message ID_ADVERTISE_SYSTEM to the remote unconnected system. This will tell the remote system our external IP outside the LAN along with some user data.
Implements RakPeerInterface. |
|
Allow or disallow connection responses from any IP. Normally this should be false, but may be necessary when connecting to servers with multiple IP addresses.
Implements RakPeerInterface. Reimplemented in RakClient. |
|
Adds simulated ping and packet loss to the outgoing data flow. To simulate bi-directional ping and packet loss, you should call this on both the sender and the recipient, with half the total ping and maxSendBPS value on each. You can exclude network simulator code with the _RELEASE define to decrease code size
Implements RakPeerInterface. |
|
Get a free remote system from the list and assign our playerID to it. Should only be called from the update thread - not the user thread. Add this player to the lookup tree |
|
Attatches a Plugin interface to run code automatically on message receipt in the Receive call
Implements RakPeerInterface. |
|
Close the connection to another host (if we initiated the connection it will disconnect, if they did it will kick them out).
Implements RakPeerInterface. |
|
Connect to the specified host (ip or domain name) and server port. Calling Connect and not calling SetMaximumIncomingConnections acts as a dedicated client. Calling both acts as a true peer. This is a non-blocking connection. You know the connection is successful when IsConnected() returns true or Receive() gets a message with the type identifier ID_CONNECTION_ACCEPTED. If the connection is not successful, such as a rejected connection or no response then neither of these things will happen.
Implements RakPeerInterface. |
|
Call this to deallocate a message returned by Receive() when you are done handling it.
Implements RakPeerInterface. |
|
Delete the output or input layer as specified. This is not necessary to call and is only valuable for freeing memory.
Implements RakPeerInterface. |
|
Detaches a Plugin interface to run code automatically on message receipt
Implements RakPeerInterface. |
|
Disables all security.
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Stops the network threads and closes all connections.
Implements RakPeerInterface. |
|
This is an optional function to generate the compression layer based on the input frequency table. If you want to use it you should call this twice - once with inputLayer as true and once as false. The frequency table passed here with inputLayer=true should match the frequency table on the recipient with inputLayer=false. Likewise, the frequency table passed here with inputLayer=false should match the frequency table on the recipient with inputLayer=true. Calling this function when there is an existing layer will overwrite the old layer.
Implements RakPeerInterface. |
|
Returns the average of all ping times read for the specific system or -1 if none read yet
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Returns the compression ratio. A low compression ratio is good. Compression is for outgoing data
Implements RakPeerInterface. |
|
Fills the array remoteSystems with the SystemID of all the systems we are connected to
Implements RakPeerInterface. |
|
Returns the decompression ratio. A high decompression ratio is good. Decompression is for incoming data
Implements RakPeerInterface. |
|
Return the unique address identifier that represents you on the the network and is based on your externalIP / port (the IP / port the specified player uses to communicate with you)
Implements RakPeerInterface. |
|
Gets the password passed to SetIncomingPassword
Implements RakPeerInterface. |
|
Given a playerID, returns an index from 0 to the maximum number of players allowed - 1.
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Return the unique address identifier that represents you on the the network and is based on your local IP / port.
Implements RakPeerInterface. |
|
Returns the last ping time read for the specific system or -1 if none read yet
Implements RakPeerInterface. |
|
Returns the lowest ping time read or -1 if none read yet
Implements RakPeerInterface. |
|
Returns the value passed to SetMaximumIncomingConnections()
Implements RakPeerInterface. |
|
Returns the current MTU size
Implements RakPeerInterface. |
|
Returns the frequency of outgoing bytes into output frequency table The purpose is to save to file as either a master frequency table from a sample game session for passing to GenerateCompressionLayer()
Implements RakPeerInterface. |
|
This function is only useful for looping through all systems Given an index, will return a PlayerID.
Implements RakPeerInterface. Reimplemented in RakServer. |
|
All systems have a block of data associated with them, for user use. This block of data can be used to easily specify typical system data that you want to know on connection, such as the player's name.
Implements RakPeerInterface. |
|
Get the reliability layer associated with a playerID.
|
|
Returns a structure containing a large set of network statistics for the specified system. You can map this data to a string using the C style StatisticsToString() function
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Handles an RPC packet. This is sending an RPC request
|
|
Handles an RPC reply packet. This is data returned from an RPC call
|
|
Starts the network threads, opens the listen port. You must call this before calling Connect(). Multiple calls while already active are ignored. To call this function again with different settings, you must first call Disconnect().
Implements RakPeerInterface. |
|
Secures connections though a combination of SHA1, AES128, SYN Cookies, and RSA to prevent connection spoofing, replay attacks, data eavesdropping, packet tampering, and MitM attacks. There is a significant amount of processing and a slight amount of bandwidth overhead for this feature. If you accept connections, you must call this or else secure connections will not be enabled for incoming connections. If you are connecting to another system, you can call this with values for the (e and p,q) public keys before connecting to prevent MitM
Implements RakPeerInterface. |
|
Converts a dotted IP to a playerId
Implements RakPeerInterface. |
|
Returns if the network thread is running
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Returns true or false indicating if a particular IP is banned.
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Returns if you previously called ApplyNetworkSimulator
Implements RakPeerInterface. |
|
Send a ping to the specified unconnected system. The remote system, if it is Initialized, will respond with ID_PONG. The final ping time will be encoded in the following sizeof(RakNetTime) bytes. (Default is 4 bytes - See __GET_TIME_64BIT in NetworkTypes.h
Implements RakPeerInterface. |
|
Send a ping to the specified connected system.
Implements RakPeerInterface. |
|
TODO - depreciate this Returns the dotted IP address for the specified playerId
Implements RakPeerInterface. Reimplemented in RakClient. |
|
Put a message back at the end of the receive queue in case you don't want to deal with it immediately
Implements RakPeerInterface. |
|
Gets a message from the incoming message queue. Use DeallocatePacket() to deallocate the message after you are done with it. User-thread functions, such as RPC calls and the plugin function PluginInterface::Update occur here.
Implements RakPeerInterface. |
|
Allows a previously banned IP to connect. param[in] Dotted IP address. Can use * as a wildcard, such as 128.0.0.* will banAll IP addresses starting with 128.0.0 Implements RakPeerInterface. Reimplemented in RakServer. |
|
Sends a block of data to the specified system that you are connected to. Same as the above version, but takes a BitStream as input.
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Sends a block of data to the specified system that you are connected to. This function only works while the connected
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Sends your static data to the specified system. This is automatically done on connection. You should call this when you change your static data.To send the static data of another system (such as relaying their data) you should do this normally with Send)
Implements RakPeerInterface. |
|
Enables or disables frequency table tracking. This is required to get a frequency table, which is used in GenerateCompressionLayer() This value persists between connect calls and defaults to false (no frequency tracking)
Implements RakPeerInterface. |
|
Sets the password incoming connections must match in the call to Connect (defaults to none). Pass 0 to passwordData to specify no password This is a way to set a low level password for all incoming connections. To selectively reject connections, implement your own scheme using CloseConnection() to remove unwanted connections
Implements RakPeerInterface. |
|
Sets how many incoming connections are allowed. If this is less than the number of players currently connected, no more players will be allowed to connect. If this is greater than the maximum number of peers allowed, it will be reduced to the maximum number of peers allowed. Defaults to 0.
Implements RakPeerInterface. |
|
Set the MTU per datagram. It's important to set this correctly - otherwise packets will be needlessly split, decreasing performance and throughput. Maximum allowed size is MAXIMUM_MTU_SIZE. Too high of a value will cause packets not to arrive at worst and be fragmented at best. Too low of a value will split packets unnecessarily. Recommended size is 1500 sa MTUSize.h
Implements RakPeerInterface. |
|
Ping the remote systems every so often, or not. This is off by default. Can be called anytime.
Implements RakPeerInterface. |
|
Sets the data to send along with a LAN server discovery or offline ping reply. length should be under 400 bytes, as a security measure against flood attacks
Implements RakPeerInterface. Reimplemented in RakServer. |
|
All systems have a block of data associated with them, for user use. This block of data can be used to easily specify typical system data that you want to know on connection, such as the player's name.
Implements RakPeerInterface. |
|
Controls how often to return ID_DOWNLOAD_PROGRESS for large message downloads. ID_DOWNLOAD_PROGRESS is returned to indicate a new partial message chunk, roughly the MTU size, has arrived As it can be slow or cumbersome to get this notification for every chunk, you can set the interval at which it is returned. Defaults to 0 (never return this notification)
Implements RakPeerInterface. |
|
Implements RakPeerInterface. Reimplemented in RakServer. |
|
Set how long to wait before giving up on sending an unreliable message Useful if the network is clogged up. Set to 0 or less to never timeout. Defaults to 0.
Implements RakPeerInterface. |
|
Store the maximum number of peers allowed to connect. Do we occasionally ping the other systems? |
|
This is an array of pointers to RemoteSystemStruct This allows us to preallocate the list when starting, so we don't have to allocate or delete at runtime. Another benefit is that is lets us add and remove active players simply by setting playerId and moving elements in the list by copying pointers variables without affecting running threads, even if they are in the reliability layer |