fix: UDP packet size and addr_type classification
- etcp_connections.h: add WIRE_OVERHEAD, IP_UDP_OVERHEAD_V4/V6, SC_ENCRYPT_OVERHEAD (properly accounts for v6 IP(40)+UDP(8)+SC(3)+CCM tag(16) = 67 vs old UDP_HDR_SIZE=28) - etcp_connections.c etcp_encrypt_send: use WIRE_OVERHEAD instead of UDP_HDR_SIZE - etcp_connections.c send_init_response: clamp padding to max_data = mtu - WIRE_OVERHEAD - chat_core_priv.h: add addr_type_from_ip() classifier - chat_profile.c, chat_sync.c, member_sync.c: use classified addr_type instead of hardcoded 0 - chat_sync.c: skip zero nat_addr in JOIN, fall back to interface_addr - topo_node_sqlite.c, member_sync.c: remove addr_type=0 filter from SELECT/DELETE - chat_profile.c, member_sync.c: DELETE all addresses (not just addr_type=0)
This commit is contained in:
1 parent
5066cff333
commit
25ebad9f52
8 files changed
+128
-55
No files matched your search
@@ -1,7 +1,8 @@
|
||||
#include "member_sync.h"
|
||||
|
||||
#include "../routing_layer/topo_node_sqlite.h"
|
||||
#include "chat_core.h"
|
||||
|
||||
#include "chat_core_priv.h"
|
||||
#include "../utun_instance.h"
|
||||
#include "../../lib/debug_config.h"
|
||||
#include "../../lib/mem.h"
|
||||
@@ -130,7 +131,7 @@ static int _member_update_bucket_hash(void* ctx, const char* ns, uint8_t level,
|
||||
uint8_t addrs[2048]; int addr_off = 0; int addr_count = 0;
|
||||
sqlite3_stmt* as = NULL;
|
||||
sqlite3_prepare_v2(db,
|
||||
"SELECT family, socket_id, protocol, address, port FROM node_addresses WHERE node_id=? AND addr_type=0"
|
||||
"SELECT family, socket_id, protocol, address, port FROM node_addresses WHERE node_id=?"
|
||||
" ORDER BY family, address, port", -1, &as, NULL);
|
||||
if (as) {
|
||||
sqlite3_bind_int64(as, 1, (sqlite3_int64)nid);
|
||||
@@ -205,7 +206,7 @@ static int _member_get_items(void* ctx, const char* ns, uint8_t level,
|
||||
|
||||
sqlite3_stmt* as = NULL;
|
||||
sqlite3_prepare_v2(db,
|
||||
"SELECT family, socket_id, protocol, address, port FROM node_addresses WHERE node_id=? AND addr_type=0"
|
||||
"SELECT family, socket_id, protocol, address, port FROM node_addresses WHERE node_id=?"
|
||||
" ORDER BY family, address, port", -1, &as, NULL);
|
||||
uint8_t addrs[2048]; int addr_off = 0; int addr_count = 0;
|
||||
if (as) {
|
||||
@@ -528,17 +529,17 @@ int member_sync_put(struct UTUN_INSTANCE* inst, const char* ch_id,
|
||||
MS_ID, (unsigned long long)member_id, ch_id, addr_count);
|
||||
sqlite3_exec(db, "BEGIN", NULL, NULL, NULL);
|
||||
sqlite3_stmt* ds = NULL;
|
||||
sqlite3_prepare_v2(db, "DELETE FROM node_addresses WHERE node_id=? AND addr_type=0", -1, &ds, NULL);
|
||||
sqlite3_prepare_v2(db, "DELETE FROM node_addresses WHERE node_id=?", -1, &ds, NULL);
|
||||
if (ds) { sqlite3_bind_int64(ds, 1, (sqlite3_int64)member_id); sqlite3_step(ds);
|
||||
int deleted = sqlite3_changes(db);
|
||||
DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "%s: [ADDR_SYNC] member_sync_put DELETE addr_type=0 node=0x%016llx: %d rows deleted",
|
||||
DEBUG_INFO(DEBUG_CATEGORY_MEMBER_SYNC, "%s: [ADDR_SYNC] member_sync_put DELETE node=0x%016llx: %d rows deleted",
|
||||
MS_ID, (unsigned long long)member_id, deleted);
|
||||
sqlite3_finalize(ds); }
|
||||
|
||||
sqlite3_stmt* as = NULL;
|
||||
sqlite3_prepare_v2(db,
|
||||
"INSERT INTO node_addresses(node_id,family,protocol,address,port,addr_type,socket_id)"
|
||||
" VALUES(?,?,?,?,?,0,?)", -1, &as, NULL);
|
||||
" VALUES(?,?,?,?,?,?,?)", -1, &as, NULL);
|
||||
if (as) {
|
||||
const uint8_t* p = addrs_data;
|
||||
int written = 0;
|
||||
@@ -554,7 +555,8 @@ int member_sync_put(struct UTUN_INSTANCE* inst, const char* ch_id,
|
||||
p += ip_sz;
|
||||
uint16_t port = ((uint16_t)p[0] << 8) | p[1]; p += 2;
|
||||
sqlite3_bind_int(as, 5, port);
|
||||
sqlite3_bind_int(as, 6, (int)sid);
|
||||
sqlite3_bind_int(as, 6, addr_type_from_ip(fam, p - ip_sz - 2));
|
||||
sqlite3_bind_int(as, 7, (int)sid);
|
||||
sqlite3_step(as); sqlite3_reset(as);
|
||||
if (fam == 4) {
|
||||
const uint8_t* ip = p - 6; /* p advanced by ip_sz(4) + port(2) - back to start of ip */
|
||||
|
||||
Reference in new issue
Block a user