Server
Server
#include <icy/turn/server/server.h>class ServerDefined in src/turn/include/icy/turn/server/server.h:126
TURN server RFC 5766 / RFC 6062 implementation. Listens on UDP and/or TCP, authenticates requests via ServerObserver, and manages ServerAllocation objects for each 5-tuple.
List of all members
| Name | Kind | Owner |
|---|---|---|
Server | function | Declared here |
~Server | function | Declared here |
start | function | Declared here |
stop | function | Declared here |
handleRequest | function | Declared here |
handleAuthorizedRequest | function | Declared here |
handleBindingRequest | function | Declared here |
handleAllocateRequest | function | Declared here |
handleConnectionBindRequest | function | Declared here |
respond | function | Declared here |
respondError | function | Declared here |
allocations | function | Declared here |
addAllocation | function | Declared here |
removeAllocation | function | Declared here |
getAllocation | function | Declared here |
getTCPAllocation | function | Declared here |
getTCPSocket | function | Declared here |
releaseTCPSocket | function | Declared here |
observer | function | Declared here |
options | function | Declared here |
udpSocket | function | Declared here |
tcpSocket | function | Declared here |
timer | function | Declared here |
onTCPAcceptConnection | function | Declared here |
onTCPSocketClosed | function | Declared here |
onSocketRecv | function | Declared here |
onTimer | function | Declared here |
scheduleDeferredTCPSocketRelease | function | Declared here |
drainReleasedTCPSockets | function | Declared here |
_mutex | variable | Declared here |
_observer | variable | Declared here |
_options | variable | Declared here |
_udpSocket | variable | Declared here |
_tcpSocket | variable | Declared here |
_tcpSockets | variable | Declared here |
_pendingReleasedTCPSockets | variable | Declared here |
_tcpSocketReleaseScheduled | variable | Declared here |
_allocations | variable | Declared here |
_timer | variable | Declared here |
Public Methods
| Return | Name | Description |
|---|---|---|
Server | ||
void | start virtual | Binds and listens on the configured address, then starts the maintenance timer. |
void | stop virtual | Stops the timer, destroys all allocations, and closes server sockets. |
void | handleRequest | Routes an authenticated request to the appropriate handler based on state. Pending (Authenticating) requests are held until the observer calls back. |
void | handleAuthorizedRequest | Dispatches an already-authorized request to the specific method handler. |
void | handleBindingRequest | Handles a Binding request; responds with XOR-MAPPED-ADDRESS. |
void | handleAllocateRequest | Handles an Allocate request; creates a UDP or TCP ServerAllocation and sends a success response with XOR-RELAYED-ADDRESS and LIFETIME. |
void | handleConnectionBindRequest | Handles a ConnectionBind request by locating the TCPAllocation that owns the given CONNECTION-ID and delegating to it. |
void | respond | Sends a STUN response, signing it with MessageIntegrity if the request had a hash. Routes via UDP or TCP depending on request.transport. |
void | respondError | Constructs and sends an error response with SOFTWARE, REALM, NONCE, and ERROR-CODE. |
std::map< FiveTuple, ServerAllocation * > | allocations const | Returns a snapshot copy of the allocation map for safe iteration. Returned raw pointers are valid only while the server holds the allocations. |
void | addAllocation | Transfers ownership of alloc to the server and notifies the observer. |
void | removeAllocation | Removes alloc from the map and notifies the observer. Called automatically from the ServerAllocation destructor. |
ServerAllocation * | getAllocation | Looks up an allocation by its 5-tuple. |
TCPAllocation * | getTCPAllocation | Finds the TCPAllocation that owns a TCPConnectionPair with the given connection ID. |
net::TCPSocket::Ptr | getTCPSocket | Returns the accepted TCP socket whose peer address matches remoteAddr. |
void | releaseTCPSocket | Removes a TCP control socket from the server's socket list and unregisters callbacks. Called when the socket is handed off to a TCPAllocation (ConnectionBind). |
ServerObserver & | observer | |
const ServerOptions & | options const | |
net::UDPSocket & | udpSocket | |
net::TCPSocket & | tcpSocket | |
Timer & | timer | |
void | onTCPAcceptConnection | Accept callback for the TCP listening socket; registers new connections for STUN message processing. |
bool | onTCPSocketClosed | Close callback for accepted TCP sockets; removes the socket from the list. |
bool | onSocketRecv | Receive callback for both UDP and TCP sockets; parses STUN messages and calls handleRequest() for each one. |
void | onTimer | Periodic maintenance callback; expires and removes stale allocations. |
void | scheduleDeferredTCPSocketRelease | Defers accepted TCP socket removal until after the active callback stack unwinds. |
void | drainReleasedTCPSockets |
Server
Server(ServerObserver & observer, const ServerOptions & options = ServerOptions())Defined in src/turn/include/icy/turn/server/server.h:131
Parameters
observerObserver used for authentication and allocation lifecycle events.optionsServer configuration; defaults to 0.0.0.0:3478 with TCP and UDP enabled.
start
virtual
virtual void start()Defined in src/turn/include/icy/turn/server/server.h:135
Binds and listens on the configured address, then starts the maintenance timer.
stop
virtual
virtual void stop()Defined in src/turn/include/icy/turn/server/server.h:138
Stops the timer, destroys all allocations, and closes server sockets.
handleRequest
void handleRequest(Request & request, AuthenticationState state)Defined in src/turn/include/icy/turn/server/server.h:144
Routes an authenticated request to the appropriate handler based on state. Pending (Authenticating) requests are held until the observer calls back.
Parameters
requestIncoming STUN request.stateResult of the observer's authenticateRequest() call.
handleAuthorizedRequest
void handleAuthorizedRequest(Request & request)Defined in src/turn/include/icy/turn/server/server.h:148
Dispatches an already-authorized request to the specific method handler.
Parameters
requestAuthorized STUN request.
handleBindingRequest
void handleBindingRequest(Request & request)Defined in src/turn/include/icy/turn/server/server.h:152
Handles a Binding request; responds with XOR-MAPPED-ADDRESS.
Parameters
requestIncoming Binding request.
handleAllocateRequest
void handleAllocateRequest(Request & request)Defined in src/turn/include/icy/turn/server/server.h:157
Handles an Allocate request; creates a UDP or TCP ServerAllocation and sends a success response with XOR-RELAYED-ADDRESS and LIFETIME.
Parameters
requestIncoming Allocate request.
handleConnectionBindRequest
void handleConnectionBindRequest(Request & request)Defined in src/turn/include/icy/turn/server/server.h:162
Handles a ConnectionBind request by locating the TCPAllocation that owns the given CONNECTION-ID and delegating to it.
Parameters
requestIncoming ConnectionBind request.
respond
void respond(Request & request, stun::Message & response)Defined in src/turn/include/icy/turn/server/server.h:168
Sends a STUN response, signing it with MessageIntegrity if the request had a hash. Routes via UDP or TCP depending on request.transport.
Parameters
requestThe original request (provides transport and remote address).responseThe response message to send.
respondError
void respondError(Request & request, int errorCode, const char * errorDesc)Defined in src/turn/include/icy/turn/server/server.h:174
Constructs and sends an error response with SOFTWARE, REALM, NONCE, and ERROR-CODE.
Parameters
requestThe original request.errorCodeSTUN error code (e.g. 400, 401, 437).errorDescHuman-readable error description string.
allocations
const
std::map< FiveTuple, ServerAllocation * > allocations() constDefined in src/turn/include/icy/turn/server/server.h:179
Returns a snapshot copy of the allocation map for safe iteration. Returned raw pointers are valid only while the server holds the allocations.
Returns
Map from FiveTuple to raw ServerAllocation pointers.
addAllocation
void addAllocation(std::unique_ptr< ServerAllocation > alloc)Defined in src/turn/include/icy/turn/server/server.h:183
Transfers ownership of alloc to the server and notifies the observer.
Parameters
allocNewly constructed allocation to register.
removeAllocation
void removeAllocation(ServerAllocation * alloc)Defined in src/turn/include/icy/turn/server/server.h:188
Removes alloc from the map and notifies the observer. Called automatically from the ServerAllocation destructor.
Parameters
allocAllocation being destroyed.
getAllocation
ServerAllocation * getAllocation(const FiveTuple & tuple)Defined in src/turn/include/icy/turn/server/server.h:193
Looks up an allocation by its 5-tuple.
Parameters
tupleThe 5-tuple to search for.
Returns
Pointer to the matching allocation, or nullptr if not found.
getTCPAllocation
TCPAllocation * getTCPAllocation(const uint32_t & connectionID)Defined in src/turn/include/icy/turn/server/server.h:198
Finds the TCPAllocation that owns a TCPConnectionPair with the given connection ID.
Parameters
connectionIDTURN CONNECTION-ID to search for.
Returns
Pointer to the owning TCPAllocation, or nullptr if not found.
getTCPSocket
net::TCPSocket::Ptr getTCPSocket(const net::Address & remoteAddr)Defined in src/turn/include/icy/turn/server/server.h:203
Returns the accepted TCP socket whose peer address matches remoteAddr.
Parameters
remoteAddrPeer address to search for.
Returns
Shared pointer to the socket, or empty if not found.
releaseTCPSocket
void releaseTCPSocket(const net::Socket & socket)Defined in src/turn/include/icy/turn/server/server.h:208
Removes a TCP control socket from the server's socket list and unregisters callbacks. Called when the socket is handed off to a TCPAllocation (ConnectionBind).
Parameters
socketThe socket to release.
observer
ServerObserver & observer()Defined in src/turn/include/icy/turn/server/server.h:211
Returns
Reference to the observer provided at construction.
options
const
const ServerOptions & options() constDefined in src/turn/include/icy/turn/server/server.h:214
Returns
Reference to the immutable options struct.
udpSocket
net::UDPSocket & udpSocket()Defined in src/turn/include/icy/turn/server/server.h:217
Returns
Reference to the UDP server socket.
tcpSocket
net::TCPSocket & tcpSocket()Defined in src/turn/include/icy/turn/server/server.h:220
Returns
Reference to the TCP server listening socket.
timer
Timer & timer()Defined in src/turn/include/icy/turn/server/server.h:223
Returns
Reference to the maintenance timer.
onTCPAcceptConnection
void onTCPAcceptConnection(const net::TCPSocket::Ptr & sock)Defined in src/turn/include/icy/turn/server/server.h:228
Accept callback for the TCP listening socket; registers new connections for STUN message processing.
Parameters
sockNewly accepted TCP socket.
onTCPSocketClosed
bool onTCPSocketClosed(net::Socket & socket)Defined in src/turn/include/icy/turn/server/server.h:232
Close callback for accepted TCP sockets; removes the socket from the list.
Parameters
socketThe closed socket.
onSocketRecv
bool onSocketRecv(net::Socket & socket, const MutableBuffer & buffer, const net::Address & peerAddress)Defined in src/turn/include/icy/turn/server/server.h:239
Receive callback for both UDP and TCP sockets; parses STUN messages and calls handleRequest() for each one.
Parameters
socketThe receiving socket.bufferReceived data buffer.peerAddressSource address of the data.
onTimer
void onTimer()Defined in src/turn/include/icy/turn/server/server.h:243
Periodic maintenance callback; expires and removes stale allocations.
scheduleDeferredTCPSocketRelease
void scheduleDeferredTCPSocketRelease()Defined in src/turn/include/icy/turn/server/server.h:246
Defers accepted TCP socket removal until after the active callback stack unwinds.
drainReleasedTCPSockets
void drainReleasedTCPSockets()Defined in src/turn/include/icy/turn/server/server.h:247
Private Attributes
| Return | Name | Description |
|---|---|---|
std::mutex | _mutex | |
ServerObserver & | _observer | |
ServerOptions | _options | |
net::SocketEmitter | _udpSocket | |
net::SocketEmitter | _tcpSocket | |
std::vector< net::SocketEmitter > | _tcpSockets | |
std::unordered_set< const net::Socket * > | _pendingReleasedTCPSockets | |
bool | _tcpSocketReleaseScheduled | |
ServerAllocationMap | _allocations | |
Timer | _timer |
_mutex
std::mutex _mutexDefined in src/turn/include/icy/turn/server/server.h:250
_observer
ServerObserver & _observerDefined in src/turn/include/icy/turn/server/server.h:251
_options
ServerOptions _optionsDefined in src/turn/include/icy/turn/server/server.h:252
_udpSocket
net::SocketEmitter _udpSocketDefined in src/turn/include/icy/turn/server/server.h:253
_tcpSocket
net::SocketEmitter _tcpSocketDefined in src/turn/include/icy/turn/server/server.h:254
_tcpSockets
std::vector< net::SocketEmitter > _tcpSocketsDefined in src/turn/include/icy/turn/server/server.h:255
_pendingReleasedTCPSockets
std::unordered_set< const net::Socket * > _pendingReleasedTCPSocketsDefined in src/turn/include/icy/turn/server/server.h:256
_tcpSocketReleaseScheduled
bool _tcpSocketReleaseScheduled {false}Defined in src/turn/include/icy/turn/server/server.h:257
_allocations
ServerAllocationMap _allocationsDefined in src/turn/include/icy/turn/server/server.h:258
_timer
Timer _timer