|
6 | 6 |
|
7 | 7 | #include "bdap/vgpmessage.h" |
8 | 8 |
|
| 9 | +#include "arith_uint256.h" |
9 | 10 | #include "base58.h" |
10 | 11 | #include "bdap/linkmanager.h" |
11 | 12 | #include "bdap/utils.h" |
|
19 | 20 | #include "script/script.h" |
20 | 21 | #include "streams.h" |
21 | 22 | #include "timedata.h" |
| 23 | +#include "uint256.h" |
22 | 24 | #include "util.h" |
23 | 25 | #include "wallet/wallet.h" |
24 | 26 |
|
25 | 27 | #include <cstdlib> |
26 | 28 |
|
27 | | -static std::map<uint256, CVGPMessage> mapMyVGPMessages; |
28 | | -static CCriticalSection cs_mapMyVGPMessages; |
29 | | -static int nMyMessageCounter = 0; |
30 | | - |
31 | 29 | static std::map<uint256, int64_t> mapRecentMessageLog; |
32 | 30 | static CCriticalSection cs_mapRecentMessageLog; |
33 | 31 | static int nMessageCounter = 0; |
34 | 32 |
|
35 | | -class CMessage |
36 | | -{ |
37 | | -public: |
38 | | - static const int CURRENT_VERSION = 1; |
39 | | - int nMessageVersion; |
40 | | - std::vector<unsigned char> vchMessageType; |
41 | | - std::vector<unsigned char> vchMessage; |
42 | | - std::vector<unsigned char> vchSenderFQDN; |
43 | | - bool fKeepLast; |
44 | | - |
45 | | - CMessage() |
46 | | - { |
47 | | - SetNull(); |
48 | | - } |
49 | | - |
50 | | - CMessage(const int& version, const std::vector<unsigned char>& type, const std::vector<unsigned char>& message, const std::vector<unsigned char>& sender, bool keeplast) |
51 | | - : nMessageVersion(version), vchMessageType(type), vchMessage(message), vchSenderFQDN(sender), fKeepLast(keeplast) {} |
52 | | - |
53 | | - CMessage(const std::vector<unsigned char>& vchData) |
54 | | - { |
55 | | - UnserializeFromData(vchData); |
56 | | - } |
57 | | - |
58 | | - ADD_SERIALIZE_METHODS; |
59 | | - |
60 | | - template <typename Stream, typename Operation> |
61 | | - inline void SerializationOp(Stream& s, Operation ser_action) |
62 | | - { |
63 | | - READWRITE(nMessageVersion); |
64 | | - READWRITE(vchMessageType); |
65 | | - READWRITE(vchMessage); |
66 | | - READWRITE(vchSenderFQDN); |
67 | | - READWRITE(fKeepLast); |
68 | | - } |
69 | | - |
70 | | - void SetNull() |
71 | | - { |
72 | | - nMessageVersion = -1; |
73 | | - vchMessageType.clear(); |
74 | | - vchMessage.clear(); |
75 | | - vchSenderFQDN.clear(); |
76 | | - fKeepLast = false; |
77 | | - } |
78 | | - |
79 | | - inline bool IsNull() const { return (nMessageVersion == -1); } |
80 | | - |
81 | | - inline CMessage operator=(const CMessage& b) |
82 | | - { |
83 | | - nMessageVersion = b.nMessageVersion; |
84 | | - vchMessageType = b.vchMessageType; |
85 | | - vchMessage = b.vchMessage; |
86 | | - vchSenderFQDN = b.vchSenderFQDN; |
87 | | - fKeepLast = b.fKeepLast; |
88 | | - return *this; |
89 | | - } |
90 | | - |
91 | | - void Serialize(std::vector<unsigned char>& vchData); |
92 | | - bool UnserializeFromData(const std::vector<unsigned char>& vchData); |
93 | | -}; |
94 | | - |
95 | 33 | void CMessage::Serialize(std::vector<unsigned char>& vchData) |
96 | 34 | { |
97 | 35 | CDataStream dsMessageData(SER_NETWORK, PROTOCOL_VERSION); |
@@ -529,49 +467,6 @@ bool ReceivedMessage(const uint256& messageHash) |
529 | 467 | return false; |
530 | 468 | } |
531 | 469 |
|
532 | | -void CleanupMyMessageMap() |
533 | | -{ |
534 | | - // map with message type, message sender and timestamp. Used to keep last message from a sender/type pair. |
535 | | - std::map<std::pair<std::vector<unsigned char>, std::vector<unsigned char>>, int64_t> mapMessageTypeFromTimestamp; |
536 | | - int64_t nCurrentTimeStamp = GetAdjustedTime(); |
537 | | - std::map<uint256, CVGPMessage>::iterator itr = mapMyVGPMessages.begin(); |
538 | | - while (itr != mapMyVGPMessages.end()) |
539 | | - { |
540 | | - CVGPMessage message = (*itr).second; |
541 | | - CUnsignedVGPMessage unsignedMessage(message.vchMsg); |
542 | | - if (!unsignedMessage.fEncrypted && nCurrentTimeStamp > unsignedMessage.nTimeStamp + KEEP_MY_MESSAGE_ALIVE_SECONDS) |
543 | | - { |
544 | | - CMessage message(unsignedMessage.vchMessageData); |
545 | | - std::pair<std::vector<unsigned char>, std::vector<unsigned char>> pairTypeFrom = std::make_pair(message.vchMessageType, message.vchSenderFQDN); |
546 | | - if (!message.fKeepLast) { |
547 | | - itr = mapMyVGPMessages.erase(itr); |
548 | | - } |
549 | | - else { |
550 | | - std::map<std::pair<std::vector<unsigned char>, std::vector<unsigned char>>, int64_t>::iterator itTypeFrom = mapMessageTypeFromTimestamp.find(pairTypeFrom); |
551 | | - if (itTypeFrom != mapMessageTypeFromTimestamp.end()) { |
552 | | - if (itTypeFrom->second > unsignedMessage.nTimeStamp) { |
553 | | - itr = mapMyVGPMessages.erase(itr); |
554 | | - } |
555 | | - else { |
556 | | - mapMessageTypeFromTimestamp[pairTypeFrom] = unsignedMessage.nTimeStamp; |
557 | | - ++itr; |
558 | | - } |
559 | | - } |
560 | | - else { |
561 | | - mapMessageTypeFromTimestamp[pairTypeFrom] = unsignedMessage.nTimeStamp; |
562 | | - ++itr; |
563 | | - } |
564 | | - } |
565 | | - } |
566 | | - else |
567 | | - { |
568 | | - ++itr; |
569 | | - } |
570 | | - } |
571 | | - LogPrintf("%s -- Size %d\n", __func__, mapMyVGPMessages.size()); |
572 | | -} |
573 | | - |
574 | | -#ifdef ENABLE_WALLET |
575 | 470 | bool DecryptMessage(CUnsignedVGPMessage& unsignedMessage) |
576 | 471 | { |
577 | 472 | CLink link; |
@@ -608,103 +503,6 @@ bool DecryptMessage(CUnsignedVGPMessage& unsignedMessage) |
608 | 503 | return false; |
609 | 504 | } |
610 | 505 |
|
611 | | -void AddMyMessage(const CVGPMessage& message) |
612 | | -{ |
613 | | - bool fFound = false; |
614 | | - CUnsignedVGPMessage unsignedMessage(message.vchMsg); |
615 | | - LogPrint("bdap", "%s -- Message hash = %s, Link MessageID = %s\n", __func__, message.GetHash().ToString(), unsignedMessage.MessageID.ToString()); |
616 | | - CVGPMessage storeMessage; |
617 | | - if (pwalletMain && pLinkManager && !pwalletMain->IsLocked() && unsignedMessage.fEncrypted) |
618 | | - { |
619 | | - if (DecryptMessage(unsignedMessage)) |
620 | | - fFound = true; |
621 | | - } |
622 | | - if (fFound) |
623 | | - { |
624 | | - CVGPMessage newMessage(unsignedMessage); |
625 | | - storeMessage = newMessage; |
626 | | - } |
627 | | - else |
628 | | - { |
629 | | - storeMessage = message; |
630 | | - } |
631 | | - LOCK(cs_mapMyVGPMessages); |
632 | | - mapMyVGPMessages[storeMessage.GetHash()] = storeMessage; |
633 | | - nMyMessageCounter++; |
634 | | - if ((nMyMessageCounter % 10) == 0) |
635 | | - CleanupMyMessageMap(); |
636 | | -} |
637 | | - |
638 | | -void GetMyLinkMessages(const uint256& subjectID, std::vector<CUnsignedVGPMessage>& vMessages) |
639 | | -{ |
640 | | - LOCK(cs_mapMyVGPMessages); |
641 | | - std::map<uint256, CVGPMessage>::iterator itr = mapMyVGPMessages.begin(); |
642 | | - while (itr != mapMyVGPMessages.end()) |
643 | | - { |
644 | | - CVGPMessage message = (*itr).second; |
645 | | - CUnsignedVGPMessage unsignedMessage(message.vchMsg); |
646 | | - if (unsignedMessage.SubjectID == subjectID) |
647 | | - { |
648 | | - if (unsignedMessage.fEncrypted) |
649 | | - { |
650 | | - if (pwalletMain && !pwalletMain->IsLocked() && DecryptMessage(unsignedMessage)) |
651 | | - { |
652 | | - vMessages.push_back(unsignedMessage); |
653 | | - } |
654 | | - } |
655 | | - else |
656 | | - { |
657 | | - vMessages.push_back(unsignedMessage); |
658 | | - } |
659 | | - } |
660 | | - itr++; |
661 | | - } |
662 | | -} |
663 | | - |
664 | | -void GetMyLinkMessagesByType(const std::vector<unsigned char>& vchType, const std::vector<unsigned char>& vchRecipientFQDN, std::vector<CVGPMessage>& vMessages, bool& fKeepLast) |
665 | | -{ |
666 | | - LOCK(cs_mapMyVGPMessages); |
667 | | - std::map<uint256, CVGPMessage>::iterator itr = mapMyVGPMessages.begin(); |
668 | | - while (itr != mapMyVGPMessages.end()) |
669 | | - { |
670 | | - CVGPMessage messageWrapper = (*itr).second; |
671 | | - CUnsignedVGPMessage unsignedMessage(messageWrapper.vchMsg); |
672 | | - if (unsignedMessage.fEncrypted && pwalletMain && !pwalletMain->IsLocked()) |
673 | | - { |
674 | | - DecryptMessage(unsignedMessage); |
675 | | - } |
676 | | - if (!unsignedMessage.fEncrypted && (vchType.size() == 0 || vchType == unsignedMessage.Type()) && unsignedMessage.SenderFQDN() != vchRecipientFQDN) |
677 | | - { |
678 | | - if (unsignedMessage.KeepLast()) |
679 | | - fKeepLast = true; |
680 | | - |
681 | | - vMessages.push_back(unsignedMessage); |
682 | | - } |
683 | | - itr++; |
684 | | - } |
685 | | -} |
686 | | - |
687 | | -void GetMyLinkMessagesBySubjectAndSender(const uint256& subjectID, const std::vector<unsigned char>& vchSenderFQDN, |
688 | | - const std::vector<unsigned char>& vchType, std::vector<CVGPMessage>& vchMessages, bool& fKeepLast) |
689 | | -{ |
690 | | - LOCK(cs_mapMyVGPMessages); |
691 | | - std::map<uint256, CVGPMessage>::iterator itr = mapMyVGPMessages.begin(); |
692 | | - while (itr != mapMyVGPMessages.end()) |
693 | | - { |
694 | | - CVGPMessage messageWrapper = (*itr).second; |
695 | | - CUnsignedVGPMessage unsignedMessage(messageWrapper.vchMsg); |
696 | | - if (unsignedMessage.SubjectID == subjectID && unsignedMessage.SenderFQDN() == vchSenderFQDN && (vchType.size() == 0 || vchType == unsignedMessage.Type())) |
697 | | - { |
698 | | - if (unsignedMessage.KeepLast()) |
699 | | - fKeepLast = true; |
700 | | - |
701 | | - vchMessages.push_back(messageWrapper); |
702 | | - } |
703 | | - itr++; |
704 | | - } |
705 | | -} |
706 | | -#endif // ENABLE_WALLET |
707 | | - |
708 | 506 | void KeepLastTypeBySender(std::vector<CVGPMessage>& vMessages) |
709 | 507 | { |
710 | 508 | std::map<std::pair<std::vector<unsigned char>, std::vector<unsigned char>>, std::pair<CVGPMessage, int64_t> > mapFromMessageTime; |
|
0 commit comments