From 166649840546f7b3be1e43e9e26a1f5f2982c30d Mon Sep 17 00:00:00 2001 From: Stephen Shelton Date: Fri, 22 Nov 2019 10:39:35 -0700 Subject: [PATCH] Replace bencode_write_version_entry with a more general-purpose function for writing bencoded dictionary entries --- llarp/messages/dht_immediate.cpp | 2 +- llarp/messages/link_intro.cpp | 2 +- llarp/messages/relay_commit.cpp | 4 ++-- llarp/messages/relay_status.cpp | 5 +++-- llarp/net/address_info.cpp | 2 +- llarp/router_contact.cpp | 4 ++-- llarp/util/bencode.cpp | 7 +++++-- llarp/util/bencode.h | 3 ++- test/util/test_llarp_util_bencode.cpp | 8 ++++---- 9 files changed, 21 insertions(+), 16 deletions(-) diff --git a/llarp/messages/dht_immediate.cpp b/llarp/messages/dht_immediate.cpp index 2bc9f0eb5..0b7662b31 100644 --- a/llarp/messages/dht_immediate.cpp +++ b/llarp/messages/dht_immediate.cpp @@ -55,7 +55,7 @@ namespace llarp return false; // protocol version - if(!bencode_write_version_entry(buf)) + if(!bencode_write_uint64_entry(buf, "v", 1, LLARP_PROTO_VERSION)) return false; return bencode_end(buf); diff --git a/llarp/messages/link_intro.cpp b/llarp/messages/link_intro.cpp index c58b64b00..0059645a7 100644 --- a/llarp/messages/link_intro.cpp +++ b/llarp/messages/link_intro.cpp @@ -87,7 +87,7 @@ namespace llarp if(!rc.BEncode(buf)) return false; - if(!bencode_write_version_entry(buf)) + if(!bencode_write_uint64_entry(buf, "v", 1, LLARP_PROTO_VERSION)) return false; if(!bencode_write_bytestring(buf, "z", 1)) diff --git a/llarp/messages/relay_commit.cpp b/llarp/messages/relay_commit.cpp index 261e1c6f3..604d9746a 100644 --- a/llarp/messages/relay_commit.cpp +++ b/llarp/messages/relay_commit.cpp @@ -52,7 +52,7 @@ namespace llarp if(!BEncodeWriteDictArray("c", frames, buf)) return false; // version - if(!bencode_write_version_entry(buf)) + if(!bencode_write_uint64_entry(buf, "v", 1, LLARP_PROTO_VERSION)) return false; return bencode_end(buf); @@ -101,7 +101,7 @@ namespace llarp if(!BEncodeWriteDictEntry("u", *nextRC, buf)) return false; } - if(!bencode_write_version_entry(buf)) + if(!bencode_write_uint64_entry(buf, "v", 1, LLARP_PROTO_VERSION)) return false; if(work && !BEncodeWriteDictEntry("w", *work, buf)) return false; diff --git a/llarp/messages/relay_status.cpp b/llarp/messages/relay_status.cpp index ea99a677e..9eaf75b75 100644 --- a/llarp/messages/relay_status.cpp +++ b/llarp/messages/relay_status.cpp @@ -111,7 +111,7 @@ namespace llarp if(!BEncodeWriteDictInt("s", status, buf)) return false; // version - if(!bencode_write_version_entry(buf)) + if(!bencode_write_uint64_entry(buf, "v", 1, LLARP_PROTO_VERSION)) return false; return bencode_end(buf); @@ -248,7 +248,8 @@ namespace llarp LR_StatusRecord::BEncode(llarp_buffer_t* buf) const { return bencode_start_dict(buf) && BEncodeWriteDictInt("s", status, buf) - && bencode_write_version_entry(buf) && bencode_end(buf); + && bencode_write_uint64_entry(buf, "v", 1, LLARP_PROTO_VERSION) + && bencode_end(buf); } bool diff --git a/llarp/net/address_info.cpp b/llarp/net/address_info.cpp index f1e2bd6ad..6d00ab7cf 100644 --- a/llarp/net/address_info.cpp +++ b/llarp/net/address_info.cpp @@ -142,7 +142,7 @@ namespace llarp return false; /** version */ - if(!bencode_write_version_entry(buff)) + if(!bencode_write_uint64_entry(buff, "v", 1, LLARP_PROTO_VERSION)) return false; /** end */ return bencode_end(buff); diff --git a/llarp/router_contact.cpp b/llarp/router_contact.cpp index da315dd88..58f046281 100644 --- a/llarp/router_contact.cpp +++ b/llarp/router_contact.cpp @@ -132,8 +132,8 @@ namespace llarp if(!bencode_write_uint64(buf, last_updated)) return false; - /* write version */ - if(!bencode_write_version_entry(buf)) + /* write versions */ + if(!bencode_write_uint64_entry(buf, "v", 1, version)) return false; /* write xi if they exist */ diff --git a/llarp/util/bencode.cpp b/llarp/util/bencode.cpp index 7351f8138..aef39d385 100644 --- a/llarp/util/bencode.cpp +++ b/llarp/util/bencode.cpp @@ -139,9 +139,12 @@ bencode_discard(llarp_buffer_t* buf) } bool -bencode_write_version_entry(llarp_buffer_t* buff) +bencode_write_uint64_entry(llarp_buffer_t* buff, const void* name, size_t sz, uint64_t i) { - return buff->writef("1:vi%de", LLARP_PROTO_VERSION); + if (! bencode_write_bytestring(buff, name, sz)) + return false; + + return bencode_write_uint64(buff, i); } bool diff --git a/llarp/util/bencode.h b/llarp/util/bencode.h index 5cd6ef180..07a612338 100644 --- a/llarp/util/bencode.h +++ b/llarp/util/bencode.h @@ -29,8 +29,9 @@ bencode_write_bytestring(llarp_buffer_t* buff, const void* data, size_t sz); bool bencode_write_uint64(llarp_buffer_t* buff, uint64_t i); +/// Write a dictionary entry with a uint64_t value bool -bencode_write_version_entry(llarp_buffer_t* buff); +bencode_write_uint64_entry(llarp_buffer_t* buff, const void* name, size_t sz, uint64_t i); bool bencode_start_list(llarp_buffer_t* buff); diff --git a/test/util/test_llarp_util_bencode.cpp b/test/util/test_llarp_util_bencode.cpp index 5453baac4..319c8f570 100644 --- a/test/util/test_llarp_util_bencode.cpp +++ b/test/util/test_llarp_util_bencode.cpp @@ -231,22 +231,22 @@ INSTANTIATE_TEST_CASE_P( std::numeric_limits< uint64_t >::max() / 2, std::numeric_limits< uint64_t >::max() / 3), ); -TEST(TestBencode, good_version) +TEST(TestBencode, good_uint64_entry) { std::vector< byte_t > backingBuffer(100, 0); llarp_buffer_t buffer(backingBuffer); - ASSERT_TRUE(bencode_write_version_entry(&buffer)); + ASSERT_TRUE(bencode_write_uint64_entry(&buffer, "v", 1, 0)); ASSERT_EQ(std::string(buffer.base, buffer.cur), "1:vi0e"); } -TEST(TestBencode, bad_version) +TEST(TestBencode, bad_uint64_entry) { std::vector< byte_t > otherBuffer(1, 0); llarp_buffer_t buffer(otherBuffer); - ASSERT_FALSE(bencode_write_version_entry(&buffer)); + ASSERT_FALSE(bencode_write_uint64_entry(&buffer, "v", 1, 0)); } struct ValueData