00001 #ifndef N2NCTRAVERSAL_H 00002 #define N2NCTRAVERSAL_H 00003 00004 #define TRVERSAL_UDP_HOLE_PUNCHING_CONST 0 00005 #define TRVERSAL_RELAY_CONST 1 00006 #define TRVERSAL_UPNP_CONST 2 00007 #define TRVERSAL_DIRECT 3 00008 00009 #include "nixsys.h" 00010 #include "socket.h" 00011 #include "network.h" 00012 00013 namespace n2nc { 00014 00023 class Traversal{ 00024 public: 00025 /* FIXME adjust acl */ 00026 virtual ~Traversal(); 00028 enum method_t{ 00029 UDP_HOLE_PUNCHING = TRVERSAL_UDP_HOLE_PUNCHING_CONST, 00030 RELAY_CONST = TRVERSAL_RELAY_CONST, 00031 UPNP_CONST = TRVERSAL_UPNP_CONST, 00032 DIRECT = TRVERSAL_DIRECT 00033 }; 00034 00036 virtual net::Socket& doConnect(Network& net) = 0 ; 00038 Traversal& getTraversal(method_t method); 00039 protected: 00040 Traversal(); 00041 00042 }; 00043 00044 }//ns 00045 00046 #endif