Browse Source

chat_sync: fix join group stall — remove node_id match in cs_on_conn_up, add CS_MSG_ERROR protocol response

chatgui
Evgeny 3 months ago
parent
commit
c3f946fb63
  1. 1
      tools/chatgui/src/joindialog.cpp
  2. 15
      tools/chatgui/transport/chat_sync.c
  3. 1
      tools/chatgui/transport/chat_sync.h

1
tools/chatgui/src/joindialog.cpp

@ -168,6 +168,7 @@ void JoinDialog::onConnectResult(uint64_t nodeId, uint64_t channelId, int result
const char* errMsg = "Unknown error.";
switch (result) {
case -1: errMsg = "Channel not found."; break;
case -3: errMsg = "Connection timed out."; break;
case -4: errMsg = "Peer is unreachable."; break;
case -6: errMsg = "Already connected to this peer."; break;

15
tools/chatgui/transport/chat_sync.c

@ -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;

1
tools/chatgui/transport/chat_sync.h

@ -21,6 +21,7 @@ struct UASYNC;
#define CS_MSG_PUSH 0x04
#define CS_MSG_ACK_PUSH 0x05
#define CS_MSG_SYNC_DONE 0x06
#define CS_MSG_ERROR 0x07
#define CS_MSG_CHANNEL_INFO_REQ 0x09
#define CS_MSG_CHANNEL_INFO_RESP 0x0A
#define CS_MSG_CHANNEL_JOIN 0x0B

Loading…
Cancel
Save