Browse Source

fix: STCP handshake ordering + invite peer_node_id match + test script

- stcp_server: send handshake response BEFORE on_ready to prevent ETCP INIT data mixing into client recv buffer (crc mismatch)
- conn_mgr: relax peer_node_id match for INVITE_INFO_RESP when peer_node_id==0 (STCP connections)
- chat_tcp_test: remove invalid 'local' outside function
topo_upd
evgeny 2 months ago
parent
commit
937af4c26a
  1. 2
      src/routing_layer/conn_mgr_core.c
  2. 2
      src/transport_layer/stcp_server.c
  3. 1
      tools/chat_tcp_test/run.sh

2
src/routing_layer/conn_mgr_core.c

@ -755,7 +755,7 @@ void cm_handle_invite_info_resp(struct CONN_MGR* mgr, struct ETCP_CONN* conn, co
{ struct TOPO_GROUP* grp = topo_groups_find(mgr->instance->topo_groups, resp->group_id);
if (grp && grp->conn_mgr) {
for (struct cm_invite_pending* p = grp->conn_mgr->invite_list; p; p = p->next)
if (p->state == CM_INVITE_WAIT_INFO && p->node_id == conn->peer_node_id) { inv = p; break; }
if (p->state == CM_INVITE_WAIT_INFO && (!conn->peer_node_id || p->node_id == conn->peer_node_id)) { inv = p; break; }
}
}
if (!inv) { for (struct cm_invite_pending* p = mgr->invite_list; p; p = p->next) if (p->state == CM_INVITE_WAIT_INFO) { inv = p; break; } }

2
src/transport_layer/stcp_server.c

@ -241,8 +241,8 @@ static void finish_client_handshake(struct stcp_conn *c) {
c->state = STCP_STATE_DATA;
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "stcp_server: handshake OK, entering DATA state");
log_dump(DEBUG_LEVEL_ERROR, DEBUG_CATEGORY_DEBUG, "stcp_server FULL RESP", resp, total_resp);
stcp_conn_try_send(c, resp, total_resp); // send handshake response BEFORE on_ready — otherwise ETCP sends INIT data which mixes into client's recv buffer
if (c->on_ready) c->on_ready(c, c->ready_arg);
stcp_conn_try_send(c, resp, total_resp);
}
static void server_conn_read_cb(socket_t sock, void *arg) {

1
tools/chat_tcp_test/run.sh

@ -99,7 +99,6 @@ done
echo "--- Wait members sync ---"
MEM_OK=0
for i in $(seq 1 30); do
local MEM_COUNT
MEM_COUNT=$($CHATCLI --port 15004 members "$CH_ID" 2>/dev/null | python3 -c "import sys,json;print(len(json.load(sys.stdin)))" 2>/dev/null || echo 0)
if [ "$MEM_COUNT" -ge 2 ]; then
echo " members=$MEM_COUNT OK (${i}00ms)"

Loading…
Cancel
Save