diff --git a/src/routing_layer/topo_node_sqlite.c b/src/routing_layer/topo_node_sqlite.c index 388b5fd1..aa458e05 100644 --- a/src/routing_layer/topo_node_sqlite.c +++ b/src/routing_layer/topo_node_sqlite.c @@ -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; diff --git a/src/transport_layer/etcp_connections.c b/src/transport_layer/etcp_connections.c index c6fa95e2..959ba225 100644 --- a/src/transport_layer/etcp_connections.c +++ b/src/transport_layer/etcp_connections.c @@ -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) {