if(recv_len<=SC_PUBKEY_SIZE){errorcode=1;DEBUG_ERROR(DEBUG_CATEGORY_ETCP,"etcp_connections_read_callback: packet too small for init, size=%zd",recv_len);gotoec_fr;}
sc_init_ctx(&sc,&e_sock->instance->my_keys);
// printf("[ETCP DEBUG] Extracting peer public key from position %ld, total packet size=%zd\n", recv_len-SC_PUBKEY_SIZE, recv_len);
// printf("[ETCP DEBUG] Last 64 bytes of packet (PUBKEY): ");
if(ack_hdr->code!=ETCP_INIT_REQUEST&&ack_hdr->code!=ETCP_CHANNEL_INIT){errorcode=4;gotoec_fr;}// не init
if(ack_hdr->code!=ETCP_INIT_REQUEST&&ack_hdr->code!=ETCP_CHANNEL_INIT){errorcode=4;DEBUG_ERROR(DEBUG_CATEGORY_ETCP,"etcp_connections_read_callback: not an init packet, code=%02x",ack_hdr->code);gotoec_fr;}// не init
if(memcmp(conn->crypto_ctx.peer_public_key,sc.peer_public_key,SC_PUBKEY_SIZE)){errorcode=5;gotoec_fr;}// коллизия - peer id совпал а ключи разные.
if(memcmp(conn->crypto_ctx.peer_public_key,sc.peer_public_key,SC_PUBKEY_SIZE)){errorcode=5;DEBUG_ERROR(DEBUG_CATEGORY_CRYPTO,"etcp_connections_read_callback: peer key mismatch for node %llu",(unsignedlonglong)peer_id);gotoec_fr;}// коллизия - peer id совпал а ключи разные.
if(!link){if(new_conn)etcp_connection_close(conn);errorcode=66;DEBUG_ERROR(DEBUG_CATEGORY_CONNECTION,"etcp_connections_read_callback: failed to create link for connection");gotoec_fr;}// облом