9#include <SDL3/SDL_stdinc.h>
14#include <unordered_map>
25 bool init(
const char* bindHost, Uint16 tcpPort, Uint16 udpPort);
50 const std::uint8_t* data,
59 std::uint32_t serverId,
60 std::uint32_t clientNonce,
65 std::unordered_map<std::uint32_t, ServerRecord>
servers_;
Shared wire helpers for global server browser and NAT assist.
Thin wrapper over SDL3_net's NET_DatagramSocket.
Definition GlobalDirectoryServer.hpp:17
void handleListRequest(const net::UdpReceivedMessage &msg)
Definition GlobalDirectoryServer.cpp:227
void sendRelay(const net::UdpEndpointAddr &dest, const std::uint8_t *payload, std::size_t len)
Definition GlobalDirectoryServer.cpp:353
void handleRelayPayload(const net::UdpReceivedMessage &msg)
Definition GlobalDirectoryServer.cpp:295
std::unordered_map< std::uint64_t, ClientEndpoint > clientsByRelaySession_
Definition GlobalDirectoryServer.hpp:66
void pollUdp()
Definition GlobalDirectoryServer.cpp:110
std::uint32_t nextServerId_
Definition GlobalDirectoryServer.hpp:67
void handlePunchRequest(const net::UdpReceivedMessage &msg, const std::uint8_t *data, std::size_t len)
Definition GlobalDirectoryServer.cpp:242
void pruneExpired()
Definition GlobalDirectoryServer.cpp:127
void handleDirectoryControl(const net::UdpReceivedMessage &msg)
Definition GlobalDirectoryServer.cpp:148
std::atomic< bool > shouldStop_
Definition GlobalDirectoryServer.hpp:68
std::vector< std::uint8_t > relaySecret_
Definition GlobalDirectoryServer.hpp:64
void handleRegistration(const net::UdpReceivedMessage &msg, net::discovery::DirectoryMessage kind, const std::uint8_t *data, std::size_t len)
Definition GlobalDirectoryServer.cpp:172
void stop()
Definition GlobalDirectoryServer.cpp:93
bool validateRelayToken(const net::RelayToken &token, std::uint32_t serverId, std::uint32_t clientNonce, Uint64 nowMs) const
Definition GlobalDirectoryServer.cpp:376
void sendDirectory(const net::UdpEndpointAddr &dest, const std::vector< std::uint8_t > &payload)
Definition GlobalDirectoryServer.cpp:343
bool init(const char *bindHost, Uint16 tcpPort, Uint16 udpPort)
Start the UDP-only directory/relay service.
Definition GlobalDirectoryServer.cpp:79
net::UdpEndpoint udpEndpoint_
Definition GlobalDirectoryServer.hpp:63
std::unordered_map< std::uint32_t, ServerRecord > servers_
Definition GlobalDirectoryServer.hpp:65
net::RelayToken makeRelayToken(std::uint32_t serverId, std::uint32_t clientNonce, Uint64 nowMs) const
Definition GlobalDirectoryServer.cpp:364
void run()
Definition GlobalDirectoryServer.cpp:101
Wraps a NET_DatagramSocket with header-prefixed I/O.
Definition UdpEndpoint.hpp:109
DirectoryMessage
Definition GlobalDiscoveryProtocol.hpp:22
Definition GlobalDirectoryServer.hpp:38
bool relayAuthorized
Definition GlobalDirectoryServer.hpp:42
Uint64 lastSeenMs
Definition GlobalDirectoryServer.hpp:41
net::RelayToken relayToken
Definition GlobalDirectoryServer.hpp:40
net::UdpEndpointAddr endpoint
Definition GlobalDirectoryServer.hpp:39
Definition GlobalDirectoryServer.hpp:31
Uint64 lastSeenMs
Definition GlobalDirectoryServer.hpp:33
net::discovery::ServerInfo info
Definition GlobalDirectoryServer.hpp:32
net::UdpEndpointAddr endpoint
Definition GlobalDirectoryServer.hpp:34
Definition RelayToken.hpp:16
A UDP datagram address (server's view of a remote peer).
Definition UdpEndpoint.hpp:49
One framed UDP message ready to dispatch to upper layers.
Definition UdpEndpoint.hpp:97
Definition GlobalDiscoveryProtocol.hpp:47