From 7b7a10586747fcb6b7bc701ed63e91c4f46d8eb3 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 3 Aug 2021 14:21:53 +0100 Subject: [PATCH] Passing nano::protocol_constants in to message_parser rather than referencing it statically. --- nano/core_test/message_parser.cpp | 15 ++++++++++----- nano/node/common.cpp | 8 ++++---- nano/node/common.hpp | 3 ++- nano/node/transport/udp.cpp | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/nano/core_test/message_parser.cpp b/nano/core_test/message_parser.cpp index 5d54e1736..ac73dbeaa 100644 --- a/nano/core_test/message_parser.cpp +++ b/nano/core_test/message_parser.cpp @@ -67,7 +67,8 @@ TEST (message_parser, exact_confirm_ack_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); auto vote (std::make_shared (0, nano::keypair ().prv, 0, std::move (block))); nano::confirm_ack message (vote); @@ -101,7 +102,8 @@ TEST (message_parser, exact_confirm_req_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); nano::confirm_req message (std::move (block)); std::vector bytes; @@ -134,7 +136,8 @@ TEST (message_parser, exact_confirm_req_hash_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); nano::send_block block (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1))); nano::confirm_req message (block.hash (), block.root ()); std::vector bytes; @@ -167,7 +170,8 @@ TEST (message_parser, exact_publish_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); nano::publish message (std::move (block)); std::vector bytes; @@ -200,7 +204,8 @@ TEST (message_parser, exact_keepalive_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); nano::keepalive message; std::vector bytes; { diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 1b7827a78..c7a929fca 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -327,19 +327,19 @@ std::string nano::message_parser::status_string () return "[unknown parse_status]"; } -nano::message_parser::message_parser (nano::network_filter & publish_filter_a, nano::block_uniquer & block_uniquer_a, nano::vote_uniquer & vote_uniquer_a, nano::message_visitor & visitor_a, nano::work_pool & pool_a) : +nano::message_parser::message_parser (nano::network_filter & publish_filter_a, nano::block_uniquer & block_uniquer_a, nano::vote_uniquer & vote_uniquer_a, nano::message_visitor & visitor_a, nano::work_pool & pool_a, nano::protocol_constants const & protocol) : publish_filter (publish_filter_a), block_uniquer (block_uniquer_a), vote_uniquer (vote_uniquer_a), visitor (visitor_a), pool (pool_a), - status (parse_status::success) + status (parse_status::success), + protocol{ protocol } { } void nano::message_parser::deserialize_buffer (uint8_t const * buffer_a, size_t size_a) { - static nano::network_constants network_constants; status = parse_status::success; auto error (false); if (size_a <= max_safe_udp_message_size) @@ -349,7 +349,7 @@ void nano::message_parser::deserialize_buffer (uint8_t const * buffer_a, size_t nano::message_header header (error, stream); if (!error) { - if (header.version_using < get_protocol_constants ().protocol_version_min ()) + if (header.version_using < protocol.protocol_version_min ()) { status = parse_status::outdated_version; } diff --git a/nano/node/common.hpp b/nano/node/common.hpp index 5f4e51c26..547b5c0e1 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -255,7 +255,7 @@ public: outdated_version, duplicate_publish_message }; - message_parser (nano::network_filter &, nano::block_uniquer &, nano::vote_uniquer &, nano::message_visitor &, nano::work_pool &); + message_parser (nano::network_filter &, nano::block_uniquer &, nano::vote_uniquer &, nano::message_visitor &, nano::work_pool &, nano::protocol_constants const & protocol); void deserialize_buffer (uint8_t const *, size_t); void deserialize_keepalive (nano::stream &, nano::message_header const &); void deserialize_publish (nano::stream &, nano::message_header const &, nano::uint128_t const & = 0); @@ -271,6 +271,7 @@ public: nano::message_visitor & visitor; nano::work_pool & pool; parse_status status; + nano::protocol_constants const & protocol; std::string status_string (); static const size_t max_safe_udp_message_size; }; diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index 227edf483..3eaffd97c 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -541,7 +541,7 @@ void nano::transport::udp_channels::receive_action (nano::message_buffer * data_ if (allowed_sender) { udp_message_visitor visitor (node, data_a->endpoint, sink); - nano::message_parser parser (node.network.publish_filter, node.block_uniquer, node.vote_uniquer, visitor, node.work); + nano::message_parser parser (node.network.publish_filter, node.block_uniquer, node.vote_uniquer, visitor, node.work, node.network_params.protocol); parser.deserialize_buffer (data_a->buffer, data_a->size); if (parser.status == nano::message_parser::parse_status::success) {