|
|
|
|
@ -312,18 +312,26 @@ void chat_core_request_member_list_trampoline(void* arg) {
|
|
|
|
|
|
|
|
|
|
uint8_t* members = NULL; |
|
|
|
|
int count = 0; |
|
|
|
|
if (chat_core_get_member_list(inst, ch_id, &members, &count) != 0 || !members) return; |
|
|
|
|
if (chat_core_get_member_list(inst, ch_id, &members, &count) != 0) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: cannot build list ch=%s", ch_id); return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
size_t ch_len = strlen(ch_id); |
|
|
|
|
size_t evt_sz = 1 + ch_len + 2 + (size_t)count * CHAT_MEMBER_DISPLAY_SIZE; |
|
|
|
|
uint8_t* evt = u_malloc(evt_sz); |
|
|
|
|
if (!evt) { u_free(members); return; } |
|
|
|
|
if (!evt) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: list event allocation failed ch=%s count=%d", ch_id, count); |
|
|
|
|
u_free(members); return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
uint16_t u16cnt = (uint16_t)count; |
|
|
|
|
evt[0] = (uint8_t)ch_len; |
|
|
|
|
memcpy(evt + 1, ch_id, ch_len); |
|
|
|
|
memcpy(evt + 1 + ch_len, &u16cnt, 2); |
|
|
|
|
memcpy(evt + 1 + ch_len + 2, members, (size_t)count * CHAT_MEMBER_DISPLAY_SIZE); |
|
|
|
|
if (count) memcpy(evt + 1 + ch_len + 2, members, (size_t)count * CHAT_MEMBER_DISPLAY_SIZE); |
|
|
|
|
int radios = 0; |
|
|
|
|
for (int i = 0; i < count; i++) radios += !!(members[i * CHAT_MEMBER_DISPLAY_SIZE + 10] & CHAT_MEMBER_FLAG_RADIO); |
|
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_CHAT_SYNC, "chat_member: list ch=%s count=%d radios=%d", ch_id, count, radios); |
|
|
|
|
chat_event_post(inst, CHAT_EVT_MEMBER_LIST, evt, (int)evt_sz); |
|
|
|
|
|
|
|
|
|
u_free(evt); |
|
|
|
|
|