|
|
|
|
@ -1108,14 +1108,13 @@ void dm_invite_trampoline(void* arg) {
|
|
|
|
|
} |
|
|
|
|
snprintf(conv, sizeof(conv), "%llu", (unsigned long long)dm_derive_conv_id(req->inst->node_id, req->peer_node_id)); |
|
|
|
|
struct dm_conv c; |
|
|
|
|
if (dm_conv_load(dm, conv, &c) != 0 && dm_node_pubkeys(dm, req->peer_node_id, c.peer_x25519, c.peer_ed25519) != 0) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_DM, "invite PM: recipient keys missing peer=%llu", (unsigned long long)req->peer_node_id); |
|
|
|
|
dm_invite_done(req, DM_INVITE_START_ERROR); return; |
|
|
|
|
} |
|
|
|
|
/* dm_start также восстанавливает маршрут через исходную группу для авто-созданной PM. */ |
|
|
|
|
if (dm_start(req->inst, req->peer_node_id, c.peer_x25519, c.peer_ed25519, req->peer_name, req->source_ch_id) != 0) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_DM, "invite PM: conversation failed peer=%llu", (unsigned long long)req->peer_node_id); |
|
|
|
|
dm_invite_done(req, DM_INVITE_START_ERROR); return; |
|
|
|
|
if (dm_conv_load(dm, conv, &c) != 0) { |
|
|
|
|
uint8_t x25519[32], ed25519[32]; |
|
|
|
|
if (dm_node_pubkeys(dm, req->peer_node_id, x25519, ed25519) != 0 || |
|
|
|
|
dm_start(req->inst, req->peer_node_id, x25519, ed25519, req->peer_name, req->source_ch_id) != 0) { |
|
|
|
|
DEBUG_ERROR(DEBUG_CATEGORY_DM, "invite PM: conversation failed peer=%llu", (unsigned long long)req->peer_node_id); |
|
|
|
|
dm_invite_done(req, DM_INVITE_START_ERROR); return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
DEBUG_INFO(DEBUG_CATEGORY_DM, "invite PM: building request=%llu peer=%llu source=%s ch=%s conv=%s", |
|
|
|
|
(unsigned long long)req->request_id, (unsigned long long)req->peer_node_id, req->source_ch_id, channel, conv); |
|
|
|
|
|