From 70a18c8be898128383ba76bbb435c0e222ed5aab Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 11 Sep 2026 11:59:48 +0300 Subject: [PATCH] =?UTF-8?q?etcp:=20=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0=20?= =?UTF-8?q?=E2=80=94=20=D1=83=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20=D0=BC=D1=91?= =?UTF-8?q?=D1=80=D1=82=D0=B2=D1=8B=D0=B9=20peer=5Fid/guard=20reset=5Fid,?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D0=B9=20STCP=5FHS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/transport_layer/etcp.c | 2 +- src/transport_layer/etcp.h | 2 +- src/transport_layer/etcp_connections.c | 8 ++++---- src/transport_layer/stcp.h | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/transport_layer/etcp.c b/src/transport_layer/etcp.c index 18c608f0..773bfb93 100644 --- a/src/transport_layer/etcp.c +++ b/src/transport_layer/etcp.c @@ -639,7 +639,7 @@ void etcp_conn_reinit_id(struct ETCP_CONN* etcp, const char* reason, uint64_t re // Применение чужого reset_id (эпохи ресета пира). Симметрично: // если uid пира изменился — сбрасываем своё состояние (свой uid сохраняем). -void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_id, uint64_t peer_reset_id) { +void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_reset_id) { if (!conn) return; if (peer_reset_id == conn->peer_reset_id) return; // uid пира не изменился conn->peer_reset_id = peer_reset_id; diff --git a/src/transport_layer/etcp.h b/src/transport_layer/etcp.h index 003491c7..6d498408 100644 --- a/src/transport_layer/etcp.h +++ b/src/transport_layer/etcp.h @@ -258,7 +258,7 @@ void etcp_conn_reinit_id(struct ETCP_CONN* etcp, const char* reason, uint64_t re // Фатальный ресет (normalizer desync / bad fragment size): генерит новую эпоху reset_id void etcp_conn_fatal_reinit(struct ETCP_CONN* etcp, const char* reason); // Применение чужого reset_id: при отличии — slave принимает эпоху пира и ресетится, master пересылает свою -void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_id, uint64_t peer_reset_id); +void etcp_conn_apply_peer_reset_id(struct ETCP_CONN* conn, uint64_t peer_reset_id); void etcp_connection_ready(struct ETCP_CONN* etcp);// вызывается когда подключение инициализировано diff --git a/src/transport_layer/etcp_connections.c b/src/transport_layer/etcp_connections.c index 26daec20..cc5ba57f 100644 --- a/src/transport_layer/etcp_connections.c +++ b/src/transport_layer/etcp_connections.c @@ -1072,12 +1072,12 @@ void etcp_link_enter_ready_tcp(struct ETCP_LINK *link) { if (link->tcp_link) { uint8_t peer_gop = stcp_link_get_peer_got_initial_pkt(link->tcp_link); uint64_t peer_rid = stcp_link_get_peer_reset_id(link->tcp_link); - if (etcp->got_initial_pkt == 1 && peer_gop == 0 && peer_rid != etcp->reset_id) { + if (etcp->got_initial_pkt == 1 && peer_gop == 0) { DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] TCP ready: I'm dirty (gop=1) but peer clean (gop=0) → reinit", etcp->log_name); etcp_conn_reinit(etcp, "tcp peer clean"); } - etcp_conn_apply_peer_reset_id(etcp, etcp->peer_node_id, peer_rid); + etcp_conn_apply_peer_reset_id(etcp, peer_rid); 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); @@ -1753,7 +1753,7 @@ static int handle_init_response_client(struct ETCP_SOCKET* e_sock, struct ETCP_D uint64_t server_node_id = be64toh(*(uint64_t*)resp->node_id); uint64_t resp_reset_id = be64toh(*(uint64_t*)resp->reset_id); DEBUG_TRACE(DEBUG_CATEGORY_CONNECTION, "INIT_RESPONSE rid=%016llx", (unsigned long long)resp_reset_id); - etcp_conn_apply_peer_reset_id(link->etcp, server_node_id, resp_reset_id); + etcp_conn_apply_peer_reset_id(link->etcp, resp_reset_id); link->mtu_remote = be16toh(*(uint16_t*)resp->mtu); if (link->mtu_remote > PACKET_DATA_MAX_MTU) link->mtu_remote = PACKET_DATA_MAX_MTU; link->mtu = link->mtu_local < link->mtu_remote ? link->mtu_local : link->mtu_remote; @@ -2280,7 +2280,7 @@ create_new_link: memcpy(conn->peer_ed25519_pubkey, req->ed25519_pubkey, SC_PUBKEY_SIZE); // Применяем эпоху ресета пира ПОСЛЕ всей reinit-логики - etcp_conn_apply_peer_reset_id(conn, peer_id, reset_id); + etcp_conn_apply_peer_reset_id(conn, reset_id); send_init_response(e_sock, pkt, link, conn, req, &addr, send_reset, req_src_ip, req_src_port, pkt_len); return; diff --git a/src/transport_layer/stcp.h b/src/transport_layer/stcp.h index da1c8796..862127c7 100644 --- a/src/transport_layer/stcp.h +++ b/src/transport_layer/stcp.h @@ -28,8 +28,8 @@ typedef void (*stcp_ping_cb)(int success, uint16_t rtt, void *arg); #define STCP_HS_TIMEOUT 50000 // 5s in 0.1ms timebase units #define STCP_CONNECT_TIMEOUT 100000 // 10s in 0.1ms timebase units -#define STCP_HS_CLIENT_MIN (SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_CLIENT) // 40+55=95 -#define STCP_HS_SERVER_MIN (SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_SERVER) // 40+55=95 +#define STCP_HS_CLIENT_MIN (SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_CLIENT) // 40+51=91 +#define STCP_HS_SERVER_MIN (SC_PUBKEY_ENC_SIZE + STCP_HS_ENC_SERVER) // 40+51=91 #define STCP_HS_ENC_CLIENT 51 // ed25519_pubkey(32) + got_initial_pkt(1) + reset_id(8) + padding_size(2) + device_type(1) + keepalive(2) + flags(1) + CRC32(4) #define STCP_HS_ENC_SERVER 51 // ed25519_pubkey(32) + got_initial_pkt(1) + reset_id(8) + padding_size(2) + device_type(1) + keepalive(2) + flags(1) + CRC32(4)