@ -179,12 +179,28 @@ struct stcp_server *stcp_server_listen(struct stcp_link_config *cfg, uint16_t po
ss - > srv = stcp_server_create ( cfg - > inst - > ua , port , & cfg - > inst - > my_keys , cfg - > inst - > my_ed25519_pubkey ,
cfg - > inst , server_accept_cb , ss , NULL , NULL , cfg - > listen_family ) ;
if ( ! ss - > srv ) { u_free ( ss ) ; return NULL ; }
uint16_t bound_port = stcp_server_get_port ( ss - > srv ) ;
if ( ! bound_port ) { stcp_server_destroy ( ss - > srv ) ; u_free ( ss ) ; return NULL ; }
if ( tcp_sock ) {
if ( tcp_sock - > local_addr . ss_family = = AF_INET ) {
( ( struct sockaddr_in * ) & tcp_sock - > local_addr ) - > sin_port = htons ( bound_port ) ;
( ( struct sockaddr_in * ) & tcp_sock - > interface_addr ) - > sin_port = htons ( bound_port ) ;
} else if ( tcp_sock - > local_addr . ss_family = = AF_INET6 ) {
( ( struct sockaddr_in6 * ) & tcp_sock - > local_addr ) - > sin6_port = htons ( bound_port ) ;
( ( struct sockaddr_in6 * ) & tcp_sock - > interface_addr ) - > sin6_port = htons ( bound_port ) ;
}
}
if ( cfg - > reality_enabled & & cfg - > inst & & cfg - > inst - > config )
stcp_server_set_reality ( ss - > srv , & cfg - > inst - > config - > global . reality ) ;
DEBUG_INFO ( DEBUG_CATEGORY_ETCP , " port=%u " , port ) ;
DEBUG_INFO ( DEBUG_CATEGORY_ETCP , " listen requested_port=%u bound_ port=%u" , port , bound_ port) ;
return ss ;
}
uint16_t stcp_link_server_get_port ( const struct stcp_server * ss ) {
if ( ! ss | | ! ss - > srv ) { DEBUG_ERROR ( DEBUG_CATEGORY_ETCP , " stcp link server: missing listener " ) ; return 0 ; }
return stcp_server_get_port ( ss - > srv ) ;
}
void stcp_link_server_destroy ( struct stcp_server * ss ) {
if ( ! ss ) return ;
if ( ss - > srv ) stcp_server_destroy ( ss - > srv ) ;