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 // first key
if (firstKey) if (firstKey)
{ {
if (!(*key == "A")) if (!(key->startswith("A")))
return false; return false;
if (!bencode_read_string(buffer, &strbuf)) if (!bencode_read_string(buffer, &strbuf))
return false; return false;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -117,7 +117,14 @@ struct [[deprecated("this type is stupid, use something else")]] llarp_buffer_t
return base + sz; 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> template <typename OutputIt>
bool read_into(OutputIt begin, OutputIt end); 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 /// make a copy of this buffer
std::vector<byte_t> copy() const; std::vector<byte_t> copy() const;
/// get a read only view over the entire region /// get a read-only view over the entire region
llarp::byte_view_t view() const; 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: private:

Loading…
Cancel
Save