invite: add proto field (UDP/TCP/BOTH) to invite link binary format
Format per v4 addr: family(1) + socketId(1) + proto(1) + addr(4) + port(2) = 9 bytes (was 8) Proto values: 0x01=UDP, 0x02=TCP, 0x03=BOTH Affects: invite_link_c.h/c (Android), invite_link.h/cpp (desktop), chat_sync.c, conn_mgr.c, joindialog.cpp, utun_node.cpp
This commit is contained in:
1 parent
5276c1288c
commit
d0cca27edd
23 files changed
+329
-61
No files matched your search
@@ -606,6 +606,7 @@ static void cm_invite_trampoline(void* arg) {
|
||||
const uint8_t* ap = inv->addrs_data;
|
||||
for (int i = 0; i < inv->addr_count; i++) {
|
||||
uint8_t family = *ap++; ap++; /* skip sock_id */
|
||||
uint8_t proto = *ap++; /* read proto */
|
||||
if (family != 4) { ap += 18; continue; }
|
||||
sqlite3_bind_int64(st, 1, (sqlite3_int64)node_id); sqlite3_bind_int(st, 2, 4);
|
||||
sqlite3_bind_blob(st, 3, ap, 4, SQLITE_STATIC); ap += 4;
|
||||
@@ -632,13 +633,13 @@ static void cm_invite_trampoline(void* arg) {
|
||||
ni->node_id = node_id; memcpy(ni->public_key, inv->pubkey, 32);
|
||||
const uint8_t* ap = inv->addrs_data;
|
||||
for (int i = 0; i < inv->addr_count; i++) {
|
||||
uint8_t family = *ap++; ap++; /* skip sock_id */
|
||||
uint8_t family = *ap++; uint8_t sock_id = *ap++; uint8_t proto = *ap++;
|
||||
if (family != 4) { ap += 18; continue; }
|
||||
struct TOPO_ADDR4* a4 = u_calloc(1, sizeof(*a4));
|
||||
if (!a4) break;
|
||||
memcpy(a4->addr, ap, 4); ap += 4;
|
||||
a4->port = ((uint16_t)ap[0] << 8) | ap[1]; ap += 2;
|
||||
a4->type = TOPO_ADDR_NAT; a4->protocol = TOPO_PROTO_UDP;
|
||||
a4->type = TOPO_ADDR_NAT; a4->protocol = proto;
|
||||
a4->next = ni->v4_addrs; ni->v4_addrs = a4;
|
||||
}
|
||||
|
||||
@@ -683,7 +684,7 @@ void chat_sync_connect_from_invite(uint64_t channel_id, uint64_t node_id,
|
||||
inv->node_id = node_id;
|
||||
memcpy(inv->pubkey, pubkey_bin, 32);
|
||||
|
||||
size_t addrs_sz = (size_t)addr_count * 8;
|
||||
size_t addrs_sz = (size_t)addr_count * 9;
|
||||
inv->addrs_data = u_malloc(addrs_sz);
|
||||
if (!inv->addrs_data) { u_free(inv); return; }
|
||||
memcpy(inv->addrs_data, addrs_data, addrs_sz);
|
||||
|
||||
@@ -1355,7 +1355,7 @@ int conn_mgr_connect_from_invite(struct CONN_MGR* mgr, struct TOPO_NODE* ni,
|
||||
struct TOPO_ADDR4* a4 = memory_pool_alloc(groups->v4_addr_pool);
|
||||
if (!a4) continue;
|
||||
memset(a4, 0, sizeof(*a4)); memcpy(a4->addr, src->addr, 4); a4->port = src->port;
|
||||
a4->type = TOPO_ADDR_NAT; a4->protocol = TOPO_PROTO_UDP; a4->socket_id = 0;
|
||||
a4->type = TOPO_ADDR_NAT; a4->protocol = src->protocol; a4->socket_id = 0;
|
||||
a4->next = group_ni->v4_addrs; group_ni->v4_addrs = a4;
|
||||
}
|
||||
if (!group_ni->v4_addrs) { u_free(group_ni); if (cb) cb(CONN_MGR_ERR_NO_ADDRESSES, node_id, cb_arg); return CONN_MGR_ERR_NO_ADDRESSES; }
|
||||
|
||||
Reference in new issue
Block a user