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

Router2.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #include "NativeFeatureIncludes.h"
00009 #if _RAKNET_SUPPORT_Router2==1
00010 
00011 #ifndef __ROUTER_2_PLUGIN_H
00012 #define __ROUTER_2_PLUGIN_H
00013 
00014 class RakPeerInterface;
00015 #include "RakNetTypes.h"
00016 #include "PluginInterface2.h"
00017 #include "PacketPriority.h"
00018 #include "Export.h"
00019 #include "UDPForwarder.h"
00020 #include "MessageIdentifiers.h"
00021 
00022 namespace RakNet
00023 {
00024 
00025 struct Router2DebugInterface
00026 {
00027         virtual void ShowFailure(const char *message);
00028         virtual void ShowDiagnostic(const char *message);
00029 };
00030 
00035 
00039 class RAK_DLL_EXPORT Router2 : public PluginInterface2
00040 {
00041 public:
00042         Router2();
00043         virtual ~Router2();
00044 
00063         void EstablishRouting(RakNetGUID endpointGuid);
00064 
00067         void SetMaximumForwardingRequests(int max);
00068 
00070         void SetDebugInterface(Router2DebugInterface *_debugInterface);
00071 
00073         Router2DebugInterface *GetDebugInterface(void) const;
00074 
00075         // --------------------------------------------------------------------------------------------
00076         // Packet handling functions
00077         // --------------------------------------------------------------------------------------------
00078         virtual PluginReceiveResult OnReceive(Packet *packet);
00079         virtual void Update(void);
00080         virtual void OnClosedConnection(SystemAddress systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason );
00081         virtual void OnFailedConnectionAttempt(Packet *packet, PI2_FailedConnectionAttemptReason failedConnectionAttemptReason);
00082         virtual void OnNewConnection(SystemAddress systemAddress, RakNetGUID rakNetGUID, bool isIncoming);
00083         virtual void OnRakPeerShutdown(void);
00084 
00085 
00086         enum Router2RequestStates
00087         {
00088                 R2RS_REQUEST_STATE_QUERY_FORWARDING,
00089                 REQUEST_STATE_REQUEST_FORWARDING,
00090         };
00091 
00092         struct ConnectionRequestSystem
00093         {
00094                 RakNetGUID guid;
00095                 int pingToEndpoint;
00096                 unsigned short usedForwardingEntries;
00097         };
00098 
00099         struct ConnnectRequest
00100         {
00101                 ConnnectRequest();
00102                 ~ConnnectRequest();
00103 
00104                 DataStructures::List<ConnectionRequestSystem> connectionRequestSystems;
00105                 Router2RequestStates requestState;
00106                 RakNetTimeMS pingTimeout;
00107                 RakNetGUID endpointGuid;
00108                 RakNetGUID lastRequestedForwardingSystem;
00109                 bool returnConnectionLostOnFailure;
00110                 unsigned int GetGuidIndex(RakNetGUID guid);
00111         };
00112 
00113         unsigned int GetConnectionRequestIndex(RakNetGUID endpointGuid);
00114 
00115         struct MiniPunchRequest
00116         {
00117                 RakNetGUID endpointGuid;
00118                 SystemAddress endpointAddress;
00119                 bool gotReplyFromEndpoint;
00120                 RakNetGUID sourceGuid;
00121                 SystemAddress sourceAddress;
00122                 bool gotReplyFromSource;
00123                 RakNetTimeMS timeout;
00124                 RakNetTimeMS nextAction;
00125                 unsigned short srcToDestPort;
00126                 unsigned short destToSourcePort;
00127                 SOCKET srcToDestSocket;
00128                 SOCKET destToSourceSocket;
00129         };
00130 
00131         struct ForwardedConnection
00132         {
00133                 RakNetGUID endpointGuid;
00134                 RakNetGUID intermediaryGuid;
00135                 SystemAddress intermediaryAddress;
00136                 bool returnConnectionLostOnFailure;
00137         };
00138 
00139 protected:
00140 
00141         bool UpdateForwarding(unsigned int connectionRequestIndex);
00142         void RemoveConnectionRequest(unsigned int connectionRequestIndex);
00143         void RequestForwarding(unsigned int connectionRequestIndex);
00144         void OnQueryForwarding(Packet *packet);
00145         void OnQueryForwardingReply(Packet *packet);
00146         void OnRequestForwarding(Packet *packet);
00147         void OnReroute(Packet *packet);
00148         void OnMiniPunchReply(Packet *packet);
00149         void OnMiniPunchReplyBounce(Packet *packet);
00150         bool OnForwardingSuccess(Packet *packet);
00151         int GetLargestPingAmongConnectedSystems(void) const;
00152         void ReturnToUser(MessageID messageId, RakNetGUID endpointGuid, SystemAddress systemAddress);
00153         bool ConnectInternal(RakNetGUID endpointGuid, bool returnConnectionLostOnFailure);
00154 
00155         UDPForwarder *udpForwarder;
00156         int maximumForwardingRequests;
00157         DataStructures::List<ConnnectRequest*> connectionRequests;
00158         DataStructures::List<MiniPunchRequest> miniPunchesInProgress;
00159         DataStructures::List<ForwardedConnection> forwardedConnectionList;
00160 
00161         void ClearConnectionRequests(void);
00162         void ClearMinipunches(void);
00163         void ClearForwardedConnections(void);
00164         void ClearAll(void);
00165         int ReturnFailureOnCannotForward(RakNetGUID sourceGuid, RakNetGUID endpointGuid);
00166         void SendFailureOnCannotForward(RakNetGUID sourceGuid, RakNetGUID endpointGuid);
00167         void SendForwardingSuccess(RakNetGUID sourceGuid, RakNetGUID endpointGuid, unsigned short sourceToDstPort);
00168         void SendOOBFromRakNetPort(OutOfBandIdentifiers oob, BitStream *extraData, SystemAddress sa);
00169         void SendOOBFromSpecifiedSocket(OutOfBandIdentifiers oob, SystemAddress sa, SOCKET socket);
00170         void SendOOBMessages(MiniPunchRequest *mpr);
00171 
00172         Router2DebugInterface *debugInterface;
00173 };
00174 
00175 }
00176 
00177 #endif
00178 
00179 #endif // _RAKNET_SUPPORT_*

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