void newMessage(const SecMsgStored& inboxHdr) { // we have to copy it, because it doesn't like constants going into Decrypt SecMsgStored smsgStored = inboxHdr; MessageData msg; QString label; QDateTime sent_datetime; QDateTime received_datetime; uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN; if (SecureMsgDecrypt(false, smsgStored.sAddrTo, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) { label = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(msg.sFromAddress)); sent_datetime .setTime_t(msg.timestamp); received_datetime.setTime_t(smsgStored.timeReceived); std::string sPrefix("im"); SecureMessage* psmsg = (SecureMessage*) &smsgStored.vchMessage[0]; std::vector<unsigned char> vchKey; vchKey.resize(18); memcpy(&vchKey[0], sPrefix.data(), 2); memcpy(&vchKey[2], &psmsg->timestamp, 8); memcpy(&vchKey[10], &smsgStored.vchMessage[SMSG_HDR_LEN], 8); // sample addMessageEntry(MessageTableEntry(vchKey, MessageTableEntry::Received, label, QString::fromStdString(smsgStored.sAddrTo), QString::fromStdString(msg.sFromAddress), sent_datetime, received_datetime, !(smsgStored.status & SMSG_MASK_UNREAD), (char*)&msg.vchMessage[0]), false); } }
void newOutboxMessage(const SecMsgStored& outboxHdr) { SecMsgStored smsgStored = outboxHdr; MessageData msg; QString label; QDateTime sent_datetime; QDateTime received_datetime; uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN; if (SecureMsgDecrypt(false, smsgStored.sAddrOutbox, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) { label = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(smsgStored.sAddrTo)); sent_datetime .setTime_t(msg.timestamp); received_datetime.setTime_t(smsgStored.timeReceived); std::string sPrefix("sm"); SecureMessage* psmsg = (SecureMessage*) &smsgStored.vchMessage[0]; std::vector<unsigned char> vchKey; vchKey.resize(18); memcpy(&vchKey[0], sPrefix.data(), 2); memcpy(&vchKey[2], &psmsg->timestamp, 8); memcpy(&vchKey[10], &smsgStored.vchMessage[SMSG_HDR_LEN], 8); // sample addMessageEntry(MessageTableEntry(vchKey, MessageTableEntry::Sent, label, QString::fromStdString(smsgStored.sAddrTo), QString::fromStdString(msg.sFromAddress), sent_datetime, received_datetime, (char*)&msg.vchMessage[0]), false); } }
void refreshMessageTable() { cachedMessageTable.clear(); if (parent->getWalletModel()->getEncryptionStatus() == WalletModel::Locked) { // -- messages are stored encrypted, can't load them without the private keys return; }; { LOCK(cs_smsgDB); SecMsgDB dbSmsg; if (!dbSmsg.Open("cr+")) //throw runtime_error("Could not open DB."); return; unsigned char chKey[18]; std::vector<unsigned char> vchKey; vchKey.resize(18); SecMsgStored smsgStored; MessageData msg; QString label; QDateTime sent_datetime; QDateTime received_datetime; std::string sPrefix("im"); leveldb::Iterator* it = dbSmsg.pdb->NewIterator(leveldb::ReadOptions()); while (dbSmsg.NextSmesg(it, sPrefix, chKey, smsgStored)) { uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN; if (SecureMsgDecrypt(false, smsgStored.sAddrTo, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) { label = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(msg.sFromAddress)); sent_datetime .setTime_t(msg.timestamp); received_datetime.setTime_t(smsgStored.timeReceived); memcpy(&vchKey[0], chKey, 18); addMessageEntry(MessageTableEntry(vchKey, MessageTableEntry::Received, label, QString::fromStdString(smsgStored.sAddrTo), QString::fromStdString(msg.sFromAddress), sent_datetime, received_datetime, (char*)&msg.vchMessage[0]), true); } }; delete it; sPrefix = "sm"; it = dbSmsg.pdb->NewIterator(leveldb::ReadOptions()); while (dbSmsg.NextSmesg(it, sPrefix, chKey, smsgStored)) { uint32_t nPayload = smsgStored.vchMessage.size() - SMSG_HDR_LEN; if (SecureMsgDecrypt(false, smsgStored.sAddrOutbox, &smsgStored.vchMessage[0], &smsgStored.vchMessage[SMSG_HDR_LEN], nPayload, msg) == 0) { label = parent->getWalletModel()->getAddressTableModel()->labelForAddress(QString::fromStdString(smsgStored.sAddrTo)); sent_datetime .setTime_t(msg.timestamp); received_datetime.setTime_t(smsgStored.timeReceived); memcpy(&vchKey[0], chKey, 18); addMessageEntry(MessageTableEntry(vchKey, MessageTableEntry::Sent, label, QString::fromStdString(smsgStored.sAddrTo), QString::fromStdString(msg.sFromAddress), sent_datetime, received_datetime, (char*)&msg.vchMessage[0]), true); } }; delete it; } }