|
|
|
|
@ -93,8 +93,6 @@ static void socks_etcp_read_callback(socket_t sock, void* arg) {
|
|
|
|
|
// pubkey пира, создать TCP-линк и поднять его (ready).
|
|
|
|
|
void tcp_server_on_link(struct stcp_link *link, struct ETCP_SOCKET *tcp_sock) { |
|
|
|
|
struct UTUN_INSTANCE *inst = tcp_sock->instance; |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "tcp_server_on_link: link=%p tcp_sock=%p inst=%p inst->ua=%p", |
|
|
|
|
(void*)link, (void*)tcp_sock, (void*)inst, (void*)(inst ? inst->ua : NULL)); |
|
|
|
|
const uint8_t *pubkey = stcp_link_get_peer_pubkey(link); |
|
|
|
|
if (!pubkey) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "tcp_server_on_link: no peer pubkey"); return; } |
|
|
|
|
uint64_t node_id = sc_derive_node_id_from_pubkey(pubkey); |
|
|
|
|
@ -1170,15 +1168,12 @@ void etcp_link_close(struct ETCP_LINK* link) {
|
|
|
|
|
void etcp_link_enter_ready_tcp(struct ETCP_LINK *link) { |
|
|
|
|
if (!link || !link->etcp) return; |
|
|
|
|
struct ETCP_CONN *etcp = link->etcp; |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "enter_ready_tcp: link=%p etcp=%p inst=%p ua=%p conn_state=%d tcp_link=%p", |
|
|
|
|
(void*)link, (void*)etcp, (void*)etcp->instance, (void*)(etcp->instance ? etcp->instance->ua : NULL), |
|
|
|
|
etcp->state, (void*)link->tcp_link); |
|
|
|
|
|
|
|
|
|
/* reinit только при смене reset_id пира — синхронизация через etcp_conn_apply_peer_reset_id */ |
|
|
|
|
if (link->tcp_link) { |
|
|
|
|
uint64_t peer_rid = stcp_link_get_peer_reset_id(link->tcp_link); |
|
|
|
|
etcp_conn_apply_peer_reset_id(etcp, peer_rid); |
|
|
|
|
if (etcp->state == 2) { DEBUG_ERROR(DEBUG_CATEGORY_DEBUG, "enter_ready_tcp: conn DELETED after apply_reset, link=%p", (void*)link); return; } |
|
|
|
|
if (etcp->state == 2) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "enter_ready_tcp: conn DELETED after apply_reset, link=%p", (void*)link); return; } |
|
|
|
|
|
|
|
|
|
link->peer_device_type = stcp_link_get_peer_device_type(link->tcp_link); |
|
|
|
|
{ uint16_t peer_ka = stcp_link_get_peer_keepalive_interval(link->tcp_link); |
|
|
|
|
@ -1194,7 +1189,7 @@ void etcp_link_enter_ready_tcp(struct ETCP_LINK *link) {
|
|
|
|
|
etcp->tcp_link_count++; |
|
|
|
|
if (link->tcp_link) { const uint8_t* ed = stcp_link_get_peer_ed25519_pubkey(link->tcp_link); if (ed) memcpy(etcp->peer_ed25519_pubkey, ed, SC_PUBKEY_SIZE); } |
|
|
|
|
if (etcp->initialized == 0) etcp_conn_ready(etcp); |
|
|
|
|
if (etcp->state == 2) { DEBUG_ERROR(DEBUG_CATEGORY_DEBUG, "enter_ready_tcp: conn DELETED after conn_ready, link=%p", (void*)link); return; } |
|
|
|
|
if (etcp->state == 2) { DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "enter_ready_tcp: conn DELETED after conn_ready, link=%p", (void*)link); return; } |
|
|
|
|
etcp_link_send_keepalive(link); |
|
|
|
|
start_keepalive_timer(link); |
|
|
|
|
loadbalancer_link_ready(link); |
|
|
|
|
|