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

UDPForwarder.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 #ifndef __UDP_FORWARDER_H
00010 #define __UDP_FORWARDER_H
00011 
00012 #include "Export.h"
00013 #include "DS_Multilist.h"
00014 #include "RakNetTypes.h"
00015 #include "SocketIncludes.h"
00016 #include "UDPProxyCommon.h"
00017 #include "SimpleMutex.h"
00018 #include "RakString.h"
00019 #include "RakThread.h"
00020 #include "DS_Queue.h"
00021 
00022 #define UDP_FORWARDER_EXECUTE_THREADED
00023 
00024 namespace RakNet
00025 {
00026 
00027 enum UDPForwarderResult
00028 {
00029         UDPFORWARDER_FORWARDING_ALREADY_EXISTS,
00030         UDPFORWARDER_NO_SOCKETS,
00031         UDPFORWARDER_INVALID_PARAMETERS,
00032         UDPFORWARDER_SUCCESS,
00033 
00034 };
00035 
00038 class RAK_DLL_EXPORT UDPForwarder
00039 {
00040 public:
00041         UDPForwarder();
00042         ~UDPForwarder();
00043 
00046         void Startup(void);
00047 
00049         void Shutdown(void);
00050 
00053         void Update(void);
00054 
00059         void SetMaxForwardEntries(unsigned short maxEntries);
00060 
00062         int GetMaxForwardEntries(void) const;
00063 
00066         int GetUsedForwardEntries(void) const;
00067 
00081         UDPForwarderResult StartForwarding(SystemAddress source, SystemAddress destination, RakNetTimeMS timeoutOnNoDataMS, const char *forceHostAddress,
00082                 unsigned short *srcToDestPort, unsigned short *destToSourcePort, SOCKET *srcToDestSocket, SOCKET *destToSourceSocket);
00083 
00087         void StopForwarding(SystemAddress source, SystemAddress destination);
00088 
00089         struct SrcAndDest
00090         {
00091                 SystemAddress source;
00092                 SystemAddress destination;
00093         };
00094 
00095         struct ForwardEntry
00096         {
00097                 ForwardEntry();
00098                 ~ForwardEntry();
00099                 SrcAndDest srcAndDest;
00100                 RakNetTimeMS timeLastDatagramForwarded;
00101                 SOCKET readSocket;
00102                 SOCKET writeSocket;
00103                 RakNetTimeMS timeoutOnNoDataMS;
00104                 bool updatedSourceAddress;
00105         };
00106 
00107 #ifdef UDP_FORWARDER_EXECUTE_THREADED
00108         struct ThreadOperation
00109         {
00110                 enum {
00111                 TO_NONE,
00112                 TO_START_FORWARDING,
00113                 TO_STOP_FORWARDING,
00114                 } operation;
00115 
00116                 SystemAddress source;
00117                 SystemAddress destination;
00118                 RakNetTimeMS timeoutOnNoDataMS;
00119                 RakNet::RakString forceHostAddress;
00120                 unsigned short srcToDestPort;
00121                 unsigned short destToSourcePort;
00122                 SOCKET srcToDestSocket;
00123                 SOCKET destToSourceSocket;
00124                 UDPForwarderResult result;
00125         };
00126         SimpleMutex threadOperationIncomingMutex,threadOperationOutgoingMutex;
00127         DataStructures::Queue<ThreadOperation> threadOperationIncomingQueue;
00128         DataStructures::Queue<ThreadOperation> threadOperationOutgoingQueue;
00129 #endif
00130         void UpdateThreaded(void);
00131         UDPForwarderResult StartForwardingThreaded(SystemAddress source, SystemAddress destination, RakNetTimeMS timeoutOnNoDataMS, const char *forceHostAddress,
00132                 unsigned short *srcToDestPort, unsigned short *destToSourcePort, SOCKET *srcToDestSocket, SOCKET *destToSourceSocket);
00133         void StopForwardingThreaded(SystemAddress source, SystemAddress destination);
00134 
00135         DataStructures::Multilist<ML_ORDERED_LIST, ForwardEntry*, SrcAndDest> forwardList;
00136         unsigned short maxForwardEntries;
00137 
00138         unsigned short AddForwardingEntry(SrcAndDest srcAndDest, RakNetTimeMS timeoutOnNoDataMS, const char *forceHostAddress);
00139 
00140 
00141         bool isRunning, threadRunning;
00142 
00143 };
00144 
00145 } // End namespace
00146 
00147 #endif

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