fix: peer discovery queries include IPv6 (family IN (4,6))
get_public_peers, get_local_peers, get_supernode_peers were filtering na.family=4 only — never found v6 peers. Changed to na.family IN (4,6).
This commit is contained in:
1 parent
25ebad9f52
commit
e2d8f68c9a
2 files changed
+10
-5
No files matched your search
@@ -730,7 +730,7 @@ int topo_node_sqlite_get_public_peers(sqlite3* db, const char* channel_id,
|
||||
(void)channel_id;
|
||||
const char* sql =
|
||||
"SELECT DISTINCT na.node_id FROM node_addresses na"
|
||||
" WHERE na.node_id!=?1 AND na.family=4 AND na.addr_type IN (1,2)"
|
||||
" WHERE na.node_id!=?1 AND na.family IN (4,6) AND na.addr_type IN (1,2)"
|
||||
" AND EXISTS (SELECT 1 FROM nodes n WHERE n.node_id=na.node_id)";
|
||||
sqlite3_stmt* st = NULL;
|
||||
if (sqlite3_prepare_v2(db, sql, -1, &st, NULL) != SQLITE_OK) return -1;
|
||||
@@ -754,7 +754,7 @@ int topo_node_sqlite_get_supernode_peers(sqlite3* db, const char* channel_id,
|
||||
char peers_tbl[80]; peers_table_name(channel_id, peers_tbl, sizeof(peers_tbl));
|
||||
char sql[256]; snprintf(sql, sizeof(sql),
|
||||
"SELECT p.node_id FROM \"%s\" p WHERE p.node_type=4"
|
||||
" AND EXISTS (SELECT 1 FROM node_addresses na WHERE na.node_id=p.node_id AND na.family=4)",
|
||||
" AND EXISTS (SELECT 1 FROM node_addresses na WHERE na.node_id=p.node_id AND na.family IN (4,6))",
|
||||
peers_tbl);
|
||||
sqlite3_stmt* st = NULL;
|
||||
if (sqlite3_prepare_v2(db, sql, -1, &st, NULL) != SQLITE_OK) return -1;
|
||||
@@ -777,7 +777,7 @@ int topo_node_sqlite_get_local_peers(sqlite3* db, const char* channel_id,
|
||||
(void)channel_id;
|
||||
const char* sql =
|
||||
"SELECT DISTINCT na.node_id FROM node_addresses na"
|
||||
" WHERE na.node_id!=?1 AND na.family=4 AND na.addr_type IN (0,3)"
|
||||
" WHERE na.node_id!=?1 AND na.family IN (4,6) AND na.addr_type IN (0,3)"
|
||||
" AND EXISTS (SELECT 1 FROM nodes n WHERE n.node_id=na.node_id)";
|
||||
sqlite3_stmt* st = NULL;
|
||||
if (sqlite3_prepare_v2(db, sql, -1, &st, NULL) != SQLITE_OK) return -1;
|
||||
|
||||
@@ -139,6 +139,10 @@ static void etcp_link_send_init(struct ETCP_LINK* link, uint8_t reset, uint8_t c
|
||||
struct sockaddr_in* sin = (struct sockaddr_in*)&link->conn->interface_addr;
|
||||
memcpy(req->src_ipv4, &sin->sin_addr.s_addr, 4);
|
||||
*(uint16_t*)req->src_port = sin->sin_port;
|
||||
} else if (link->conn && link->conn->interface_addr.ss_family == AF_INET6) {
|
||||
struct sockaddr_in6* sin6 = (struct sockaddr_in6*)&link->conn->interface_addr;
|
||||
memset(req->src_ipv4, 0, 4);
|
||||
*(uint16_t*)req->src_port = sin6->sin6_port;
|
||||
} else {
|
||||
memset(req->src_ipv4, 0, 4);
|
||||
memset(req->src_port, 0, 2);
|
||||
@@ -148,12 +152,13 @@ static void etcp_link_send_init(struct ETCP_LINK* link, uint8_t reset, uint8_t c
|
||||
size_t offset = ETCP_INIT_REQ_SIZE;
|
||||
|
||||
// padding
|
||||
int wire_ov_init = WIRE_OVERHEAD(link->remote_addr.ss_family);
|
||||
int s = rand() % (link->handshake_maxsize - link->handshake_minsize) + link->handshake_minsize;
|
||||
int s_max = (int)(link->mtu) - (int)SC_NONCE_SIZE - 3 - (int)SC_CRC32_SIZE - (int)SC_TAG_SIZE - (int)SC_PUBKEY_ENC_SIZE + (int)UDP_SC_HDR_SIZE;
|
||||
int s_max = (int)(link->mtu) - wire_ov_init;
|
||||
if (s > s_max) s = s_max;
|
||||
if (s < 0) s = 0;
|
||||
|
||||
int to_add=s-offset-UDP_HDR_SIZE - UDP_SC_HDR_SIZE;
|
||||
int to_add = s - offset - wire_ov_init;
|
||||
if (to_add<0) to_add=0;
|
||||
int max_data = PACKET_DATA_SIZE - (int)sizeof(struct ETCP_DGRAM);
|
||||
if (offset + to_add + SC_PUBKEY_ENC_SIZE > max_data) {
|
||||
|
||||
Reference in new issue
Block a user