|
|
|
|
@ -60,6 +60,7 @@ static const char* cs_msg_name(uint8_t type) {
|
|
|
|
|
case CS_MSG_CHANNEL_JOIN: return "CHANNEL_JOIN"; |
|
|
|
|
case CS_MSG_WELCOME: return "WELCOME"; |
|
|
|
|
case CS_MSG_PEER_UPSERT: return "PEER_UPSERT"; |
|
|
|
|
case CS_MSG_ERROR: return "ERROR"; |
|
|
|
|
case CS_MSG_PEER_REMOVE: return "PEER_REMOVE"; |
|
|
|
|
default: return "???"; |
|
|
|
|
} |
|
|
|
|
@ -327,6 +328,14 @@ static void chat_sync_recv_cb(struct ETCP_CONN* conn, struct ll_entry* entry) {
|
|
|
|
|
case CS_MSG_CHANNEL_JOIN: cs_handle_channel_join(g_cs, peer, ch_id, pl, plen); break; |
|
|
|
|
case CS_MSG_WELCOME: cs_handle_welcome(g_cs, peer, ch_id, pl, plen); break; |
|
|
|
|
case CS_MSG_PEER_UPSERT: cs_handle_peer_upsert(g_cs, peer, ch_id, pl, plen); break; |
|
|
|
|
case CS_MSG_ERROR: { |
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_CONNECTIVITY, "%s: RECV ERROR from=%016llx ch=%s", CS_ID, (unsigned long long)peer, ch_id); |
|
|
|
|
if (g_cs->info_req_timer) { uasync_cancel_timeout(g_cs->inst->ua, g_cs->info_req_timer); g_cs->info_req_timer = NULL; } |
|
|
|
|
uint8_t err[20]; memcpy(err, &peer, 8); int r = CONN_MGR_ERR_NOT_FOUND; memcpy(err + 8, &r, 4); |
|
|
|
|
memcpy(err + 12, &g_cs->pending_invite_ch_id, 8); gui_bridge_post(GUI_EVT_CONNECT_RESULT, err, 20); |
|
|
|
|
g_cs->pending_invite_node_id = 0; g_cs->pending_invite_ch_id = 0; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case CS_MSG_PEER_REMOVE: cs_handle_peer_remove(g_cs, peer, ch_id, pl, plen); break; |
|
|
|
|
default: DEBUG_WARN(DEBUG_CATEGORY_CONNECTIVITY, "%s: UNKNOWN msg type=%02x from=%016llx", CS_ID, type, (unsigned long long)peer); break; |
|
|
|
|
} |
|
|
|
|
@ -370,7 +379,8 @@ static void cs_on_conn_up(struct ETCP_CONN* conn, void* arg) {
|
|
|
|
|
uint64_t peer = conn->peer_node_id; |
|
|
|
|
if (peer == 0 || peer == g_cs->inst->node_id) return; |
|
|
|
|
|
|
|
|
|
if (g_cs->pending_invite_node_id == peer && g_cs->pending_invite_ch_id != 0) { |
|
|
|
|
if (g_cs->pending_invite_ch_id != 0 && !g_cs->info_req_timer) { |
|
|
|
|
g_cs->pending_invite_node_id = peer; |
|
|
|
|
char ch_id_str[64]; |
|
|
|
|
snprintf(ch_id_str, sizeof(ch_id_str), "%llu", |
|
|
|
|
(unsigned long long)g_cs->pending_invite_ch_id); |
|
|
|
|
@ -677,7 +687,8 @@ static void cs_handle_channel_info_req(struct chat_sync* cs, uint64_t peer,
|
|
|
|
|
char name[128]; int is_dm; uint64_t owner; uint8_t x25519[32], ed_pub[32], ch_sig[64]; |
|
|
|
|
if (topo_node_sqlite_channel_get(cs->inst->topo_groups->topo_sqlite_db, |
|
|
|
|
ch_id, name, (int)sizeof(name), &is_dm, &owner, x25519, ed_pub, ch_sig) != 0) { |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_CONNECTIVITY, "%s: CHANNEL_INFO_REQ unknown ch=%s", CS_ID, ch_id); |
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_CONNECTIVITY, "%s: CHANNEL_INFO_REQ unknown ch=%s from=%016llx", CS_ID, ch_id, (unsigned long long)peer); |
|
|
|
|
uint8_t err[1] = { CS_MSG_ERROR }; cs_send(cs, ch_id, peer, err, 1); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
uint64_t myid = cs->inst->node_id; |
|
|
|
|
|