llarp_buffer_t: rename badly named operator==

It didn't do equality, it did "does the remaining space start with the
argument" (and so the replacement in the previous commit was broken).

This renames it to avoid the confusion and restores to what it was doing
on dev.
pull/1969/head
Jason Rhinelander 2 years ago
parent b9c9ee1ca7
commit f168b7cf72
No known key found for this signature in database
GPG Key ID: C4992CE7A88D4262

@ -35,7 +35,7 @@ namespace llarp
// first key
if (firstKey)
{
if (!(*key == "A"))
if (!(key->startswith("A")))
return false;
if (!bencode_read_string(buffer, &strbuf))
return false;

@ -26,11 +26,11 @@ namespace llarp::dht
bool
FindNameMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* val)
{
if (key == "H")
if (key.startswith("H"))
{
return NameHash.BDecode(val);
}
if (key == "T")
if (key.startswith("T"))
{
return bencode_read_integer(val, &TxID);
}

@ -105,7 +105,7 @@ namespace llarp
{
llarp_buffer_t strbuf;
if (key == "E")
if (key.startswith("E"))
{
uint64_t result;
if (!bencode_read_integer(val, &result))
@ -115,7 +115,7 @@ namespace llarp
return true;
}
if (key == "I")
if (key.startswith("I"))
{
uint64_t result;
if (!bencode_read_integer(val, &result))
@ -124,7 +124,7 @@ namespace llarp
iterative = result != 0;
return true;
}
if (key == "K")
if (key.startswith("K"))
{
if (!bencode_read_string(val, &strbuf))
return false;
@ -134,11 +134,11 @@ namespace llarp
std::copy(strbuf.base, strbuf.base + targetKey.SIZE, targetKey.begin());
return true;
}
if (key == "T")
if (key.startswith("T"))
{
return bencode_read_integer(val, &txid);
}
if (key == "V")
if (key.startswith("V"))
{
return bencode_read_integer(val, &version);
}

@ -79,11 +79,11 @@ namespace llarp
bool
GotIntroMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* buf)
{
if (key == "I")
if (key.startswith("I"))
{
return BEncodeReadList(found, buf);
}
if (key == "K")
if (key.startswith("K"))
{
if (closer) // duplicate key?
return false;

@ -27,7 +27,7 @@ namespace llarp::dht
bool
GotNameMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* val)
{
if (key == "D")
if (key.startswith("D"))
{
llarp_buffer_t str{};
if (not bencode_read_string(val, &str))
@ -38,11 +38,11 @@ namespace llarp::dht
std::copy_n(str.cur, str.sz, result.ciphertext.data());
return true;
}
if (key == "N")
if (key.startswith("N"))
{
return result.nonce.BDecode(val);
}
if (key == "T")
if (key.startswith("T"))
{
return bencode_read_integer(val, &TxID);
}

@ -53,22 +53,22 @@ namespace llarp
bool
GotRouterMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* val)
{
if (key == "K")
if (key.startswith("K"))
{
if (closerTarget) // duplicate key?
return false;
closerTarget = std::make_unique<dht::Key_t>();
return closerTarget->BDecode(val);
}
if (key == "N")
if (key.startswith("N"))
{
return BEncodeReadList(nearKeys, val);
}
if (key == "R")
if (key.startswith("R"))
{
return BEncodeReadList(foundRCs, val);
}
if (key == "T")
if (key.startswith("T"))
{
return bencode_read_integer(val, &txid);
}

@ -213,7 +213,7 @@ namespace llarp
if (m_WritePacket)
{
llarp::net::IPPacket pkt{buf.view()};
llarp::net::IPPacket pkt{buf.view_all()};
if (pkt.empty())
return false;
m_LastUse = m_router->Now();
@ -367,7 +367,7 @@ namespace llarp
void
SNodeSession::SendPacketToRemote(const llarp_buffer_t& buf, service::ProtocolType t)
{
net::IPPacket pkt{buf.view()};
net::IPPacket pkt{buf.view_all()};
if (pkt.empty())
return;
pkt.ZeroAddresses();
@ -377,7 +377,7 @@ namespace llarp
void
ExitSession::SendPacketToRemote(const llarp_buffer_t& buf, service::ProtocolType t)
{
net::IPPacket pkt{buf.view()};
net::IPPacket pkt{buf.view_all()};
if (pkt.empty())
return;

@ -662,7 +662,7 @@ namespace llarp
bool
ExitEndpoint::QueueSNodePacket(const llarp_buffer_t& buf, huint128_t from)
{
net::IPPacket pkt{buf.view()};
net::IPPacket pkt{buf.view_all()};
if (pkt.empty())
return false;
// rewrite ip

@ -14,9 +14,9 @@ namespace llarp
bool
DHTImmediateMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* buf)
{
if (key == "m")
if (key.startswith("m"))
return llarp::dht::DecodeMesssageList(dht::Key_t(session->GetPubKey()), buf, msgs);
if (key == "v")
if (key.startswith("v"))
{
if (!bencode_read_integer(buf, &version))
return false;

@ -39,7 +39,7 @@ namespace llarp
bool
DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* buf) override
{
if (key == "a")
if (key.startswith("a"))
{
llarp_buffer_t strbuf;
if (!bencode_read_string(buf, &strbuf))

@ -11,7 +11,7 @@ namespace llarp
bool
LinkIntroMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* buf)
{
if (key == "a")
if (key.startswith("a"))
{
llarp_buffer_t strbuf;
if (!bencode_read_string(buf, &strbuf))
@ -20,18 +20,18 @@ namespace llarp
return false;
return *strbuf.cur == 'i';
}
if (key == "n")
if (key.startswith("n"))
{
if (N.BDecode(buf))
return true;
llarp::LogWarn("failed to decode nonce in LIM");
return false;
}
if (key == "p")
if (key.startswith("p"))
{
return bencode_read_integer(buf, &P);
}
if (key == "r")
if (key.startswith("r"))
{
if (rc.BDecode(buf))
return true;
@ -39,7 +39,7 @@ namespace llarp
llarp::DumpBuffer(*buf);
return false;
}
if (key == "v")
if (key.startswith("v"))
{
if (!bencode_read_integer(buf, &version))
return false;
@ -52,7 +52,7 @@ namespace llarp
llarp::LogDebug("LIM version ", version);
return true;
}
if (key == "z")
if (key.startswith("z"))
{
return Z.BDecode(buf);
}

@ -45,7 +45,7 @@ namespace llarp
if (!key)
return false;
// we are expecting the first key to be 'a'
if (!(*key == "a"))
if (!key->startswith("a"))
{
llarp::LogWarn("message has no message type");
return false;

@ -22,7 +22,7 @@ namespace llarp
bool
LR_CommitMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* buf)
{
if (key == "c")
if (key.startswith("c"))
{
/// so we dont put it into the shitty queue
pathid.Fill('c');
@ -131,7 +131,7 @@ namespace llarp
return false;
if (!BEncodeMaybeReadDictEntry("t", txid, read, *key, buffer))
return false;
if (*key == "u")
if (key->startswith("u"))
{
nextRC = std::make_unique<RouterContact>();
return nextRC->BDecode(buffer);
@ -139,7 +139,7 @@ namespace llarp
if (!BEncodeMaybeVerifyVersion(
"v", version, llarp::constants::proto_version, read, *key, buffer))
return false;
if (*key == "w")
if (key->startswith("w"))
{
// check for duplicate
if (work)

@ -60,25 +60,25 @@ namespace llarp
LR_StatusMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* buf)
{
bool read = false;
if (key == "c")
if (key.startswith("c"))
{
return BEncodeReadArray(frames, buf);
}
if (key == "p")
if (key.startswith("p"))
{
if (!BEncodeMaybeReadDictEntry("p", pathid, read, key, buf))
{
return false;
}
}
else if (key == "s")
else if (key.startswith("s"))
{
if (!BEncodeMaybeReadDictInt("s", status, read, key, buf))
{
return false;
}
}
else if (key == "v")
else if (key.startswith("v"))
{
if (!BEncodeMaybeVerifyVersion("v", version, llarp::constants::proto_version, read, key, buf))
{

@ -41,7 +41,7 @@ namespace llarp
llarp_buffer_t strbuf;
// rank
if (key == "c")
if (key.startswith("c"))
{
if (!bencode_read_integer(buf, &i))
return false;
@ -54,7 +54,7 @@ namespace llarp
}
// dialect
if (key == "d")
if (key.startswith("d"))
{
if (!bencode_read_string(buf, &strbuf))
return false;
@ -67,13 +67,13 @@ namespace llarp
}
// encryption public key
if (key == "e")
if (key.startswith("e"))
{
return pubkey.BDecode(buf);
}
// ip address
if (key == "i")
if (key.startswith("i"))
{
if (!bencode_read_string(buf, &strbuf))
return false;
@ -87,7 +87,7 @@ namespace llarp
}
// port
if (key == "p")
if (key.startswith("p"))
{
if (!bencode_read_integer(buf, &i))
return false;
@ -100,7 +100,7 @@ namespace llarp
}
// version
if (key == "v")
if (key.startswith("v"))
{
if (!bencode_read_integer(buf, &i))
return false;

@ -69,7 +69,7 @@ namespace llarp
return false;
if (!BEncodeMaybeReadDictInt("v", version, read, k, buf))
return false;
if (k == "a")
if (k.startswith("a"))
{
in6_addr tmp;
if (not bdecode_ip_string(buf, tmp))
@ -79,7 +79,7 @@ namespace llarp
ipAddress = IpAddress(addr);
return true;
}
if (k == "b")
if (k.startswith("b"))
{
in6_addr tmp;
if (not bdecode_ip_string(buf, tmp))

@ -167,11 +167,11 @@ namespace llarp::net
[&](llarp_buffer_t* buffer, llarp_buffer_t* key) -> bool {
if (key == nullptr)
return true;
if (*key == "p")
if (key->startswith("p"))
{
return BEncodeReadSet(protocols, buffer);
}
if (*key == "r")
if (key->startswith("r"))
{
return BEncodeReadSet(ranges, buffer);
}

@ -344,7 +344,7 @@ namespace llarp
if (!BEncodeMaybeReadDictEntry("k", pubkey, read, key, buf))
return false;
if (key == "r")
if (key.startswith("r"))
{
RouterVersion r;
if (not r.BDecode(buf))
@ -353,7 +353,7 @@ namespace llarp
return true;
}
if (key == "n")
if (key.startswith("n"))
{
llarp_buffer_t strbuf;
if (!bencode_read_string(buf, &strbuf))
@ -381,7 +381,7 @@ namespace llarp
if (!BEncodeMaybeReadDictInt("v", version, read, key, buf))
return false;
if (key == "x" and serializeExit)
if (key.startswith("x") and serializeExit)
{
return bencode_discard(buf);
}

@ -10,17 +10,17 @@ namespace llarp
bool
DHTMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* val)
{
if (key == "M")
if (key.startswith("M"))
{
llarp::dht::Key_t fromKey;
fromKey.Zero();
return llarp::dht::DecodeMesssageList(fromKey, val, M, true);
}
if (key == "S")
if (key.startswith("S"))
{
return bencode_read_integer(val, &S);
}
if (key == "V")
if (key.startswith("V"))
{
return bencode_read_integer(val, &V);
}

@ -48,7 +48,7 @@ namespace llarp
if (firstKey)
{
llarp_buffer_t strbuf;
if (!(*key == "A"))
if (!(key->startswith("A")))
return false;
if (!bencode_read_string(buffer, &strbuf))
return false;

@ -38,7 +38,7 @@ namespace llarp::service
EncryptedIntroSet::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* buf)
{
bool read = false;
if (key == "x")
if (key.startswith("x"))
{
llarp_buffer_t strbuf;
if (not bencode_read_string(buf, &strbuf))
@ -178,7 +178,7 @@ namespace llarp::service
if (!BEncodeMaybeReadDictEntry("a", addressKeys, read, key, buf))
return false;
if (key == "e")
if (key.startswith("e"))
{
net::TrafficPolicy policy;
if (not policy.BDecode(buf))
@ -187,7 +187,7 @@ namespace llarp::service
return true;
}
if (key == "i")
if (key.startswith("i"))
{
return BEncodeReadList(intros, buf);
}
@ -197,7 +197,7 @@ namespace llarp::service
if (!BEncodeMaybeReadDictEntry("n", topic, read, key, buf))
return false;
if (key == "p")
if (key.startswith("p"))
{
return bencode_read_list(
[&](llarp_buffer_t* buf, bool more) {
@ -213,12 +213,12 @@ namespace llarp::service
buf);
}
if (key == "r")
if (key.startswith("r"))
{
return BEncodeReadSet(ownedRanges, buf);
}
if (key == "s")
if (key.startswith("s"))
{
byte_t* begin = buf->cur;
if (not bencode_discard(buf))

@ -43,7 +43,7 @@ namespace llarp
bool read = false;
if (!BEncodeMaybeReadDictInt("a", proto, read, k, buf))
return false;
if (k == "d")
if (k.startswith("d"))
{
llarp_buffer_t strbuf;
if (!bencode_read_string(buf, &strbuf))
@ -168,7 +168,7 @@ namespace llarp
ProtocolFrame::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* val)
{
bool read = false;
if (key == "A")
if (key.startswith("A"))
{
llarp_buffer_t strbuf;
if (!bencode_read_string(val, &strbuf))

@ -55,7 +55,7 @@ namespace llarp
BEncodeMaybeReadDictList(
const char* k, List_t& item, bool& read, const llarp_buffer_t& key, llarp_buffer_t* buf)
{
if (key == k)
if (key.startswith(k))
{
if (!BEncodeReadList(item, buf))
{
@ -71,7 +71,7 @@ namespace llarp
BEncodeMaybeReadDictEntry(
const char* k, Item_t& item, bool& read, const llarp_buffer_t& key, llarp_buffer_t* buf)
{
if (key == k)
if (key.startswith(k))
{
if (!item.BDecode(buf))
{
@ -89,7 +89,7 @@ namespace llarp
BEncodeMaybeReadDictInt(
const char* k, Int_t& i, bool& read, const llarp_buffer_t& key, llarp_buffer_t* buf)
{
if (key == k)
if (key.startswith(k))
{
uint64_t read_i;
if (!bencode_read_integer(buf, &read_i))
@ -116,7 +116,7 @@ namespace llarp
const llarp_buffer_t& key,
llarp_buffer_t* buf)
{
if (key == k)
if (key.startswith(k))
{
if (!bencode_read_integer(buf, &item))
return false;

@ -4,18 +4,6 @@
#include <cstdarg>
#include <cstdio>
size_t
llarp_buffer_t::size_left() const
{
size_t diff = cur - base;
if (diff > sz)
{
return 0;
}
return sz - diff;
}
bool
llarp_buffer_t::writef(const char* fmt, ...)
{
@ -127,12 +115,6 @@ llarp_buffer_t::copy() const
return copy;
}
llarp::byte_view_t
llarp_buffer_t::view() const
{
return {base, sz};
}
namespace llarp
{

@ -117,7 +117,14 @@ struct [[deprecated("this type is stupid, use something else")]] llarp_buffer_t
return base + sz;
}
size_t size_left() const;
size_t size_left() const
{
size_t diff = cur - base;
assert(diff <= sz);
if (diff > sz)
return 0;
return sz - diff;
}
template <typename OutputIt>
bool read_into(OutputIt begin, OutputIt end);
@ -149,12 +156,23 @@ struct [[deprecated("this type is stupid, use something else")]] llarp_buffer_t
/// make a copy of this buffer
std::vector<byte_t> copy() const;
/// get a read only view over the entire region
llarp::byte_view_t view() const;
/// get a read-only view over the entire region
llarp::byte_view_t view_all() const
{
return {base, sz};
}
/// get a read-only view over the remaining/unused region
llarp::byte_view_t view_remaining() const
{
return {cur, size_left()};
}
bool operator==(std::string_view data) const
/// Part of the curse. Returns true if the remaining buffer space starts with the given string view.
bool startswith(std::string_view prefix_str) const
{
return std::string_view{reinterpret_cast<const char*>(base), sz} == data;
llarp::byte_view_t prefix{reinterpret_cast<const byte_t*>(prefix_str.data()), prefix_str.size()};
return view_remaining().substr(0, prefix.size()) == prefix;
}
private:

Loading…
Cancel
Save