Traversal: Autoconfigure TTL to use for probe packet

This commit is contained in:
Floogle
2023-01-12 17:45:49 +01:00
parent 4efa10c170
commit 4f11b0d4c9
9 changed files with 268 additions and 33 deletions

View File

@ -43,7 +43,8 @@ public:
SocketSendError,
ResendTimeout,
};
TraversalClient(ENetHost* netHost, const std::string& server, const u16 port);
TraversalClient(ENetHost* netHost, const std::string& server, const u16 port,
const u16 port_alt = 0);
~TraversalClient();
TraversalHostId GetHostID() const;
@ -79,6 +80,9 @@ private:
void HandlePing();
static int ENET_CALLBACK InterceptCallback(ENetHost* host, ENetEvent* event);
void NewTraversalTest();
void HandleTraversalTest();
ENetHost* m_NetHost;
TraversalHostId m_HostId{};
TraversalInetAddress m_external_address{};
@ -90,7 +94,13 @@ private:
ENetAddress m_ServerAddress{};
std::string m_Server;
u16 m_port;
u16 m_portAlt;
u32 m_PingTime = 0;
ENetSocket m_TestSocket = ENET_SOCKET_NULL;
TraversalRequestId m_TestRequestId = 0;
u8 m_ttl = 2;
bool m_ttlReady = false;
};
extern std::unique_ptr<TraversalClient> g_TraversalClient;
@ -98,6 +108,7 @@ extern std::unique_ptr<TraversalClient> g_TraversalClient;
extern ENet::ENetHostPtr g_MainNetHost;
// Create g_TraversalClient and g_MainNetHost if necessary.
bool EnsureTraversalClient(const std::string& server, u16 server_port, u16 listen_port = 0);
bool EnsureTraversalClient(const std::string& server, u16 server_port, u16 server_port_alt = 0,
u16 listen_port = 0);
void ReleaseTraversalClient();
} // namespace Common