|
3 | 3 | // file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
4 | 4 |
|
5 | 5 | #include <consensus/amount.h>
|
| 6 | +#include <net_processing.h> |
| 7 | +#include <netmessagemaker.h> |
6 | 8 | #include <pubkey.h>
|
7 | 9 | #include <test/fuzz/util.h>
|
8 | 10 | #include <test/util/script.h>
|
@@ -200,22 +202,57 @@ bool FuzzedSock::IsConnected(std::string& errmsg) const
|
200 | 202 | return false;
|
201 | 203 | }
|
202 | 204 |
|
203 |
| -void FillNode(FuzzedDataProvider& fuzzed_data_provider, CNode& node, bool init_version) noexcept |
| 205 | +void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman, PeerManager& peerman, CNode& node) noexcept |
204 | 206 | {
|
| 207 | + const bool successfully_connected{fuzzed_data_provider.ConsumeBool()}; |
205 | 208 | const ServiceFlags remote_services = ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS);
|
206 | 209 | const NetPermissionFlags permission_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS);
|
207 | 210 | const int32_t version = fuzzed_data_provider.ConsumeIntegralInRange<int32_t>(MIN_PEER_PROTO_VERSION, std::numeric_limits<int32_t>::max());
|
208 | 211 | const bool filter_txs = fuzzed_data_provider.ConsumeBool();
|
209 | 212 |
|
210 |
| - node.nServices = remote_services; |
211 |
| - node.m_permissionFlags = permission_flags; |
212 |
| - if (init_version) { |
213 |
| - node.nVersion = version; |
214 |
| - node.SetCommonVersion(std::min(version, PROTOCOL_VERSION)); |
| 213 | + const CNetMsgMaker mm{0}; |
| 214 | + |
| 215 | + CSerializedNetMsg msg_version{ |
| 216 | + mm.Make(NetMsgType::VERSION, |
| 217 | + version, // |
| 218 | + Using<CustomUintFormatter<8>>(remote_services), // |
| 219 | + int64_t{}, // dummy time |
| 220 | + int64_t{}, // ignored service bits |
| 221 | + CService{}, // dummy |
| 222 | + int64_t{}, // ignored service bits |
| 223 | + CService{}, // ignored |
| 224 | + uint64_t{1}, // dummy nonce |
| 225 | + std::string{}, // dummy subver |
| 226 | + int32_t{}, // dummy starting_height |
| 227 | + filter_txs), |
| 228 | + }; |
| 229 | + |
| 230 | + (void)connman.ReceiveMsgFrom(node, msg_version); |
| 231 | + node.fPauseSend = false; |
| 232 | + connman.ProcessMessagesOnce(node); |
| 233 | + { |
| 234 | + LOCK(node.cs_sendProcessing); |
| 235 | + peerman.SendMessages(&node); |
215 | 236 | }
|
| 237 | + if (node.fDisconnect) return; |
| 238 | + assert(node.nVersion == version); |
| 239 | + assert(node.GetCommonVersion() == std::min(version, PROTOCOL_VERSION)); |
| 240 | + assert(node.nServices == remote_services); |
216 | 241 | if (node.m_tx_relay != nullptr) {
|
217 | 242 | LOCK(node.m_tx_relay->cs_filter);
|
218 |
| - node.m_tx_relay->fRelayTxes = filter_txs; |
| 243 | + assert(node.m_tx_relay->fRelayTxes == filter_txs); |
| 244 | + } |
| 245 | + node.m_permissionFlags = permission_flags; |
| 246 | + if (successfully_connected) { |
| 247 | + CSerializedNetMsg msg_verack{mm.Make(NetMsgType::VERACK)}; |
| 248 | + (void)connman.ReceiveMsgFrom(node, msg_verack); |
| 249 | + node.fPauseSend = false; |
| 250 | + connman.ProcessMessagesOnce(node); |
| 251 | + { |
| 252 | + LOCK(node.cs_sendProcessing); |
| 253 | + peerman.SendMessages(&node); |
| 254 | + } |
| 255 | + assert(node.fSuccessfullyConnected == true); |
219 | 256 | }
|
220 | 257 | }
|
221 | 258 |
|
|
0 commit comments