// DragonX Wallet - HushChat service (implementation). #include "chat_service.h" #include namespace dragonx::chat { ChatService::~ChatService() { clearIdentity(); } void ChatService::setIdentity(const ChatKeyPair& keys) { identity_ = keys; has_identity_ = true; } void ChatService::clearIdentity() { wipeChatKeyPair(identity_); has_identity_ = false; } int ChatService::ingest(const std::vector& metadata, std::int64_t txTimestamp) { if (!has_identity_) return 0; int added = 0; for (const auto& meta : metadata) { ChatMessage message; message.direction = ChatDirection::Incoming; message.txid = meta.txid; message.conversation_id = meta.conversation_id; message.peer_zaddr = meta.reply_zaddr; message.peer_public_key_hex = meta.sender_public_key_hex; message.timestamp = txTimestamp; message.payload_position = meta.payload_position; if (meta.type == HushChatHeaderType::ContactRequest) { message.kind = ChatMessageKind::ContactRequest; message.body = meta.payload_memo; // plaintext request text } else { message.kind = ChatMessageKind::Message; std::string plaintext; const ChatCryptoStatus status = decryptIncoming( identity_, meta.sender_public_key_hex, meta.secretstream_header_hex, meta.payload_memo, plaintext); if (status != ChatCryptoStatus::Ok) continue; // drop undecryptable silently message.body = std::move(plaintext); } if (store_.append(message)) ++added; } return added; } } // namespace dragonx::chat