|
|
|
|
@ -424,7 +424,7 @@ int chat_join_forward_request(struct UTUN_INSTANCE* inst, uint64_t channel_id,
|
|
|
|
|
const struct join_member_data* m) { |
|
|
|
|
if (!inst || !m || inviter_id == 0) return -1; |
|
|
|
|
|
|
|
|
|
uint8_t mbuf[512]; size_t mlen = 0; |
|
|
|
|
uint8_t mbuf[MS_USERINFO_MAX + 256]; size_t mlen = 0; |
|
|
|
|
if (chat_join_serialize_member(m, mbuf, sizeof(mbuf), &mlen) != 0) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "%s: forward serialize failed", CJ_ID); |
|
|
|
|
return -1; |
|
|
|
|
@ -432,15 +432,18 @@ int chat_join_forward_request(struct UTUN_INSTANCE* inst, uint64_t channel_id,
|
|
|
|
|
|
|
|
|
|
size_t plen = 1 + 8 + mlen; |
|
|
|
|
uint8_t* payload = u_malloc(plen); |
|
|
|
|
if (!payload) return -1; |
|
|
|
|
if (!payload) { DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "%s: forward payload allocation failed bytes=%zu", CJ_ID, plen); return -1; } |
|
|
|
|
payload[0] = JOIN_SUBCMD_REQUEST_FWD; |
|
|
|
|
memcpy(payload + 1, &join_key, 8); |
|
|
|
|
memcpy(payload + 1 + 8, mbuf, mlen); |
|
|
|
|
|
|
|
|
|
struct ll_entry* entry = queue_entry_new(0); |
|
|
|
|
if (!entry) { u_free(payload); return -1; } |
|
|
|
|
if (!entry) { DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "%s: forward entry allocation failed", CJ_ID); u_free(payload); return -1; } |
|
|
|
|
entry->dgram = u_malloc(1 + plen); |
|
|
|
|
if (!entry->dgram) { u_free(payload); queue_entry_free(entry); return -1; } |
|
|
|
|
if (!entry->dgram) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "%s: forward datagram allocation failed bytes=%zu", CJ_ID, plen + 1); |
|
|
|
|
u_free(payload); queue_entry_free(entry); return -1; |
|
|
|
|
} |
|
|
|
|
entry->dgram[0] = ETCP_RT_ID_JOIN; |
|
|
|
|
memcpy(entry->dgram + 1, payload, plen); |
|
|
|
|
entry->len = 1 + (uint16_t)plen; |
|
|
|
|
|