Shadowrun: Awakened 29 September 2011 - Build 871
UDPForwarder.h
Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 #include "NativeFeatureIncludes.h"
00010 #if _RAKNET_SUPPORT_UDPForwarder==1
00011 
00012 #ifndef __UDP_FORWARDER_H
00013 #define __UDP_FORWARDER_H
00014 
00015 #include "Export.h"
00016 #include "DS_Multilist.h"
00017 #include "RakNetTypes.h"
00018 #include "SocketIncludes.h"
00019 #include "UDPProxyCommon.h"
00020 #include "SimpleMutex.h"
00021 #include "RakString.h"
00022 #include "RakThread.h"
00023 #include "DS_Queue.h"
00024 
00025 
00026 #define UDP_FORWARDER_EXECUTE_THREADED
00027 
00028 namespace RakNet
00029 {
00030 
00031 enum UDPForwarderResult
00032 {
00033     UDPFORWARDER_FORWARDING_ALREADY_EXISTS,
00034     UDPFORWARDER_NO_SOCKETS,
00035     UDPFORWARDER_BIND_FAILED,
00036     UDPFORWARDER_INVALID_PARAMETERS,
00037     UDPFORWARDER_SUCCESS,
00038 
00039 };
00040 
00043 class RAK_DLL_EXPORT UDPForwarder
00044 {
00045 public:
00046     UDPForwarder();
00047     ~UDPForwarder();
00048 
00051     void Startup(void);
00052 
00054     void Shutdown(void);
00055 
00058     void Update(void);
00059 
00064     void SetMaxForwardEntries(unsigned short maxEntries);
00065 
00067     int GetMaxForwardEntries(void) const;
00068 
00071     int GetUsedForwardEntries(void) const;
00072 
00082     short socketFamily;
00086     UDPForwarderResult StartForwarding(SystemAddress source, SystemAddress destination, RakNet::TimeMS timeoutOnNoDataMS, const char *forceHostAddress, unsigned short socketFamily,
00087         unsigned short *forwardingPort, SOCKET *forwardingSocket);
00088 
00092     void StopForwarding(SystemAddress source, SystemAddress destination);
00093 
00094     struct SrcAndDest
00095     {
00096         SrcAndDest() {}
00097         SrcAndDest(SystemAddress sa1, SystemAddress sa2)
00098         {
00099             if (sa1 < sa2)
00100             {
00101                 source=sa1;
00102                 dest=sa2;
00103             }
00104             else
00105             {
00106                 source=sa2;
00107                 dest=sa1;
00108             }
00109         }
00110         SystemAddress source;
00111         SystemAddress dest;
00112     };
00113 
00114     struct ForwardEntry
00115     {
00116         ForwardEntry();
00117         ~ForwardEntry();
00118         SrcAndDest srcAndDest;
00119         RakNet::TimeMS timeLastDatagramForwarded;
00120         SOCKET socket;
00121         RakNet::TimeMS timeoutOnNoDataMS;
00122         bool updatedSourcePort, updatedDestPort;
00123         short socketFamily;
00124     };
00125 
00126 
00127     struct ThreadOperation
00128     {
00129         enum {
00130         TO_NONE,
00131         TO_START_FORWARDING,
00132         TO_STOP_FORWARDING,
00133         } operation;
00134 
00135         SystemAddress source;
00136         SystemAddress destination;
00137         RakNet::TimeMS timeoutOnNoDataMS;
00138         RakNet::RakString forceHostAddress;
00139         unsigned short forwardingPort;
00140         SOCKET forwardingSocket;
00141         UDPForwarderResult result;
00142         unsigned short socketFamily;
00143     };
00144     SimpleMutex threadOperationIncomingMutex,threadOperationOutgoingMutex;
00145     DataStructures::Queue<ThreadOperation> threadOperationIncomingQueue;
00146     DataStructures::Queue<ThreadOperation> threadOperationOutgoingQueue;
00147 
00148 #if RAKNET_SUPPORT_IPV6==1
00149     void UpdateThreaded(void);
00150 #endif
00151     void UpdateThreaded_Old(void);
00152     UDPForwarderResult StartForwardingThreaded(SystemAddress source, SystemAddress destination, RakNet::TimeMS timeoutOnNoDataMS, const char *forceHostAddress, unsigned short socketFamily,
00153         unsigned short *forwardingPort, SOCKET *forwardingSocket);
00154     void StopForwardingThreaded(SystemAddress source, SystemAddress destination);
00155 
00156     DataStructures::Multilist<ML_ORDERED_LIST, ForwardEntry*, SrcAndDest> forwardList;
00157     unsigned short maxForwardEntries;
00158 
00159     UDPForwarderResult AddForwardingEntry(SrcAndDest srcAndDest, RakNet::TimeMS timeoutOnNoDataMS, unsigned short *port, const char *forceHostAddress, short socketFamily);
00160 
00161 
00162     bool isRunning, threadRunning;
00163 
00164 
00165 
00166 };
00167 
00168 } // End namespace
00169 
00170 #endif
00171 
00172 #endif // #if _RAKNET_SUPPORT_UDPForwarder==1

Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.

GNU Lesser General Public License 3 Sourceforge.net