Passing nano::protocol_constants in to message_parser rather than referencing it statically.

This commit is contained in:
clemahieu 2021-08-03 14:21:53 +01:00
commit 7b7a105867
No known key found for this signature in database
GPG key ID: 43708520C8DFB938
4 changed files with 17 additions and 11 deletions

View file

@ -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<nano::send_block> (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1))));
auto vote (std::make_shared<nano::vote> (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<nano::send_block> (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1))));
nano::confirm_req message (std::move (block));
std::vector<uint8_t> 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<uint8_t> 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<nano::send_block> (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1))));
nano::publish message (std::move (block));
std::vector<uint8_t> 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<uint8_t> bytes;
{

View file

@ -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;
}

View file

@ -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;
};

View file

@ -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)
{