![]() |
Shadowrun: Awakened 29 September 2011 - Build 871
|
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.