@@ -140,7 +140,7 @@ bool CGovernanceManager::SerializeVoteForHash(const uint256& nHash, CDataStream&
140140 return cmapVoteToObject.Get (nHash, pGovobj) && pGovobj->GetVoteFile ().SerializeVoteToStream (nHash, ss);
141141}
142142
143- PeerMsgRet CGovernanceManager::ProcessMessage (CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv)
143+ MessageProcessingResult CGovernanceManager::ProcessMessage (CNode& peer, CConnman& connman, PeerManager& peerman, std::string_view msg_type, CDataStream& vRecv)
144144{
145145 if (!IsValid ()) return {};
146146 if (!m_mn_sync.IsBlockchainSynced ()) return {};
@@ -155,9 +155,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
155155
156156 uint256 nProp;
157157 CBloomFilter filter;
158-
159158 vRecv >> nProp;
160-
161159 vRecv >> filter;
162160
163161 LogPrint (BCLog::GOBJECT, " MNGOVERNANCESYNC -- syncing governance objects to our peer %s\n " , peer.GetLogString ());
@@ -166,6 +164,8 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
166164 } else {
167165 SyncSingleObjVotes (peer, peerman, nProp, filter, connman);
168166 }
167+
168+ return {};
169169 }
170170
171171 // A NEW GOVERNANCE OBJECT HAS ARRIVED
@@ -177,11 +177,12 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
177177
178178 uint256 nHash = govobj.GetHash ();
179179
180- WITH_LOCK (::cs_main, peerman.EraseObjectRequest (peer.GetId (), CInv (MSG_GOVERNANCE_OBJECT, nHash)));
180+ MessageProcessingResult ret{};
181+ ret.m_to_erase = CInv{MSG_GOVERNANCE_OBJECT, nHash};
181182
182183 if (!m_mn_sync.IsBlockchainSynced ()) {
183184 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- masternode list not synced\n " );
184- return {} ;
185+ return ret ;
185186 }
186187
187188 std::string strHash = nHash.ToString ();
@@ -190,21 +191,21 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
190191
191192 if (!AcceptMessage (nHash)) {
192193 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- Received unrequested object: %s\n " , strHash);
193- return {} ;
194+ return ret ;
194195 }
195196
196197 LOCK2 (::cs_main, cs);
197198
198199 if (mapObjects.count (nHash) || mapPostponedObjects.count (nHash) || mapErasedGovernanceObjects.count (nHash)) {
199200 // TODO - print error code? what if it's GOVOBJ_ERROR_IMMATURE?
200201 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- Received already seen object: %s\n " , strHash);
201- return {} ;
202+ return ret ;
202203 }
203204
204205 bool fRateCheckBypassed = false ;
205206 if (!MasternodeRateCheck (govobj, true , false , fRateCheckBypassed )) {
206207 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- masternode rate check failed - %s - (current block height %d) \n " , strHash, nCachedBlockHeight);
207- return {} ;
208+ return ret ;
208209 }
209210
210211 std::string strError;
@@ -215,7 +216,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
215216
216217 if (fRateCheckBypassed && fIsValid && !MasternodeRateCheck (govobj, true )) {
217218 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- masternode rate check failed (after signature verification) - %s - (current block height %d)\n " , strHash, nCachedBlockHeight);
218- return {} ;
219+ return ret ;
219220 }
220221
221222 if (!fIsValid ) {
@@ -225,13 +226,15 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
225226 } else {
226227 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECT -- Governance object is invalid - %s\n " , strError);
227228 // apply node's ban score
228- return tl::unexpected{20 };
229+ ret.m_error = MisbehavingError{20 };
230+ return ret;
229231 }
230232
231- return {} ;
233+ return ret ;
232234 }
233235
234236 AddGovernanceObject (govobj, peerman, &peer);
237+ return ret;
235238 }
236239
237240 // A NEW GOVERNANCE OBJECT VOTE HAS ARRIVED
@@ -240,12 +243,14 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
240243 vRecv >> vote;
241244
242245 uint256 nHash = vote.GetHash ();
243- WITH_LOCK (::cs_main, peerman.EraseObjectRequest (peer.GetId (), CInv (MSG_GOVERNANCE_OBJECT_VOTE, nHash)));
246+
247+ MessageProcessingResult ret{};
248+ ret.m_to_erase = CInv{MSG_GOVERNANCE_OBJECT_VOTE, nHash};
244249
245250 // Ignore such messages until masternode list is synced
246251 if (!m_mn_sync.IsBlockchainSynced ()) {
247252 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- masternode list not synced\n " );
248- return {} ;
253+ return ret ;
249254 }
250255
251256 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- Received vote: %s\n " , vote.ToString (tip_mn_list));
@@ -255,7 +260,7 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
255260 if (!AcceptMessage (nHash)) {
256261 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- Received unrequested vote object: %s, hash: %s, peer = %d\n " ,
257262 vote.ToString (tip_mn_list), strHash, peer.GetId ());
258- return {} ;
263+ return ret ;
259264 }
260265
261266 CGovernanceException exception;
@@ -266,11 +271,14 @@ PeerMsgRet CGovernanceManager::ProcessMessage(CNode& peer, CConnman& connman, Pe
266271 } else {
267272 LogPrint (BCLog::GOBJECT, " MNGOVERNANCEOBJECTVOTE -- Rejected vote, error = %s\n " , exception.what ());
268273 if ((exception.GetNodePenalty () != 0 ) && m_mn_sync.IsSynced ()) {
269- return tl::unexpected{exception.GetNodePenalty ()};
274+ ret.m_error = MisbehavingError{exception.GetNodePenalty ()};
275+ return ret;
270276 }
271- return {} ;
277+ return ret ;
272278 }
279+ return ret;
273280 }
281+
274282 return {};
275283}
276284
@@ -961,7 +969,7 @@ void CGovernanceManager::SyncSingleObjVotes(CNode& peer, PeerManager& peerman, c
961969 LogPrint (BCLog::GOBJECT, " CGovernanceManager::%s -- sent %d votes to peer=%d\n " , __func__, nVoteCount, peer.GetId ());
962970}
963971
964- PeerMsgRet CGovernanceManager::SyncObjects (CNode& peer, PeerManager& peerman, CConnman& connman) const
972+ MessageProcessingResult CGovernanceManager::SyncObjects (CNode& peer, PeerManager& peerman, CConnman& connman) const
965973{
966974 assert (m_netfulfilledman.IsValid ());
967975
@@ -971,7 +979,7 @@ PeerMsgRet CGovernanceManager::SyncObjects(CNode& peer, PeerManager& peerman, CC
971979 if (m_netfulfilledman.HasFulfilledRequest (peer.addr , NetMsgType::MNGOVERNANCESYNC)) {
972980 // Asking for the whole list multiple times in a short period of time is no good
973981 LogPrint (BCLog::GOBJECT, " CGovernanceManager::%s -- peer already asked me for the list\n " , __func__);
974- return tl::unexpected {20 };
982+ return MisbehavingError {20 };
975983 }
976984 m_netfulfilledman.AddFulfilledRequest (peer.addr , NetMsgType::MNGOVERNANCESYNC);
977985
0 commit comments