Browse Source

chat: инвайтер шлёт CONNECT_RESULT(0) после приёма джойнера

- chat_join_process_request: постить CHAT_EVT_CONNECT_RESULT(result=0) в GUI инвайтера
  (иначе диалог «Пригласить в канал» висел на «ожидание ответа»)
- cs_handle_join_request: снять pending_invite_* и погасить invite_send_timer после join
proxy
evgeny 1 week ago
parent
commit
4f29839de5
  1. 6
      src/chat/chat_join.c
  2. 7
      src/chat/chat_sync.c

6
src/chat/chat_join.c

@ -7,6 +7,7 @@
#include "chat_join.h"
#include "member_sync.h"
#include "chat_event.h"
#include "../utun_instance.h"
#include "../routing_layer/topo_node_sqlite.h"
@ -196,6 +197,11 @@ void chat_join_process_request(struct UTUN_INSTANCE* inst, uint64_t group_id,
CJ_ID, (unsigned long long)m.node_id, ch_id);
}
}
/* уведомить GUI инвайтера об успешном присоединении джойнера */
uint8_t cevt[20]; memcpy(cevt, &m.node_id, 8);
int r = 0; memcpy(cevt + 8, &r, 4);
memcpy(cevt + 12, &group_id, 8);
chat_event_post(inst, CHAT_EVT_CONNECT_RESULT, cevt, 20);
}
DEBUG_INFO(DEBUG_CATEGORY_CHAT_SYNC, "%s: process_request accepted joiner=0x%016llx ch=%s via=0x%016llx key=%016llx — signed by me",

7
src/chat/chat_sync.c

@ -1335,6 +1335,13 @@ static void cs_handle_join_request(struct chat_sync* cs, uint64_t peer,
отправляем JOIN_READY напрямую, если мембер реально добавлен. */
if (topo_node_sqlite_member_in_channel(cs->inst->topo_sqlite_db, ch_id, m.node_id))
cs_send_join_ready(cs, ch_id, m.node_id);
/* join завершён — снять pending-состояние инвайтера и таймер ожидания */
if (cs->pending_invite_ch_id == channel_id && cs->pending_invite_node_id == m.node_id) {
if (cs->invite_send_timer) { uasync_cancel_timeout(cs->inst->ua, cs->invite_send_timer); cs->invite_send_timer = NULL; }
cs->pending_invite_ch_id = 0;
cs->pending_invite_node_id = 0;
cs->pending_invite_is_inviter = 0;
}
} else {
chat_join_forward_request(cs->inst, channel_id, inviter, join_key, &m);
}

Loading…
Cancel
Save