|
|
|
@ -116,7 +116,10 @@ static void on_media_registered(void* arg, int err, const struct media_index_res |
|
|
|
if (!full_data) { DEBUG_ERROR(DEBUG_CATEGORY_DB_SYNC, "%s: data alloc fail", CC_ID); u_free(mctx); return; } |
|
|
|
if (!full_data) { DEBUG_ERROR(DEBUG_CATEGORY_DB_SYNC, "%s: data alloc fail", CC_ID); u_free(mctx); return; } |
|
|
|
|
|
|
|
|
|
|
|
size_t off = 0; |
|
|
|
size_t off = 0; |
|
|
|
if (base_len > 0) { memcpy(full_data + off, mctx->msg_data, base_len); off += base_len; } |
|
|
|
if (base_len > 0) { |
|
|
|
|
|
|
|
char b64[2048]; size_t b64len = b64_encode(mctx->msg_data, base_len, b64, sizeof(b64)); |
|
|
|
|
|
|
|
memcpy(full_data + off, b64, b64len); off += b64len; |
|
|
|
|
|
|
|
} |
|
|
|
off += snprintf(full_data + off, fdcap - off, "|%lld|%lld|%d|", |
|
|
|
off += snprintf(full_data + off, fdcap - off, "|%lld|%lld|%d|", |
|
|
|
(long long)result->file_size, (long long)result->block_size, nb); |
|
|
|
(long long)result->file_size, (long long)result->block_size, nb); |
|
|
|
for (int i = 0; i < 16; i++) off += snprintf(full_data + off, fdcap - off, "%02x", result->media_id[i]); |
|
|
|
for (int i = 0; i < 16; i++) off += snprintf(full_data + off, fdcap - off, "%02x", result->media_id[i]); |
|
|
|
@ -549,6 +552,9 @@ void on_msg_inserted(struct DB_SYNC_INSTANCE* si, uint64_t record_ts, const char |
|
|
|
while (body[bfi] && body[bfi] != '|' && bfi < sizeof(base_filename) - 1) |
|
|
|
while (body[bfi] && body[bfi] != '|' && bfi < sizeof(base_filename) - 1) |
|
|
|
base_filename[bfi++] = body[bfi]; |
|
|
|
base_filename[bfi++] = body[bfi]; |
|
|
|
base_filename[bfi] = '\0'; |
|
|
|
base_filename[bfi] = '\0'; |
|
|
|
|
|
|
|
/* base64-decode display prefix (encoded in on_media_registered) */ |
|
|
|
|
|
|
|
uint8_t dec[256]; int dlen = (int)b64_decode(base_filename, bfi, dec, sizeof(dec)); |
|
|
|
|
|
|
|
if (dlen > 0 && dlen < (int)sizeof(base_filename)) { memcpy(base_filename, dec, (size_t)dlen); base_filename[dlen] = '\0'; } |
|
|
|
if (bfi == 0) snprintf(base_filename, sizeof(base_filename), "file"); |
|
|
|
if (bfi == 0) snprintf(base_filename, sizeof(base_filename), "file"); |
|
|
|
|
|
|
|
|
|
|
|
const uint8_t* sig_field = strstr(data, "\"sig\":\""); |
|
|
|
const uint8_t* sig_field = strstr(data, "\"sig\":\""); |
|
|
|
@ -630,6 +636,8 @@ void chat_core_attachment_download(const char* channel_id, int64_t msg_id) { |
|
|
|
while (body[bfi] && body[bfi] != '|' && bfi < sizeof(base_filename) - 1) |
|
|
|
while (body[bfi] && body[bfi] != '|' && bfi < sizeof(base_filename) - 1) |
|
|
|
base_filename[bfi++] = body[bfi]; |
|
|
|
base_filename[bfi++] = body[bfi]; |
|
|
|
base_filename[bfi] = '\0'; |
|
|
|
base_filename[bfi] = '\0'; |
|
|
|
|
|
|
|
uint8_t dec[256]; int dlen = (int)b64_decode(base_filename, bfi, dec, sizeof(dec)); |
|
|
|
|
|
|
|
if (dlen > 0 && dlen < (int)sizeof(base_filename)) { memcpy(base_filename, dec, (size_t)dlen); base_filename[dlen] = '\0'; } |
|
|
|
if (bfi == 0) snprintf(base_filename, sizeof(base_filename), "file"); |
|
|
|
if (bfi == 0) snprintf(base_filename, sizeof(base_filename), "file"); |
|
|
|
|
|
|
|
|
|
|
|
uint8_t author_sig[64]; memcpy(author_sig, sig_blob, 64); |
|
|
|
uint8_t author_sig[64]; memcpy(author_sig, sig_blob, 64); |
|
|
|
|