mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-11-03 23:15:52 +00:00
f168b7cf72
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.
69 lines
1.8 KiB
C++
69 lines
1.8 KiB
C++
#include "dht_message.hpp"
|
|
|
|
#include <llarp/router/abstractrouter.hpp>
|
|
#include "handler.hpp"
|
|
|
|
namespace llarp
|
|
{
|
|
namespace routing
|
|
{
|
|
bool
|
|
DHTMessage::DecodeKey(const llarp_buffer_t& key, llarp_buffer_t* val)
|
|
{
|
|
if (key.startswith("M"))
|
|
{
|
|
llarp::dht::Key_t fromKey;
|
|
fromKey.Zero();
|
|
return llarp::dht::DecodeMesssageList(fromKey, val, M, true);
|
|
}
|
|
if (key.startswith("S"))
|
|
{
|
|
return bencode_read_integer(val, &S);
|
|
}
|
|
if (key.startswith("V"))
|
|
{
|
|
return bencode_read_integer(val, &V);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool
|
|
DHTMessage::BEncode(llarp_buffer_t* buf) const
|
|
{
|
|
if (!bencode_start_dict(buf))
|
|
return false;
|
|
|
|
if (!BEncodeWriteDictMsgType(buf, "A", "M"))
|
|
return false;
|
|
if (!BEncodeWriteDictBEncodeList("M", M, buf))
|
|
return false;
|
|
if (!BEncodeWriteDictInt("S", S, buf))
|
|
return false;
|
|
if (!BEncodeWriteDictInt("V", llarp::constants::proto_version, buf))
|
|
return false;
|
|
|
|
return bencode_end(buf);
|
|
}
|
|
|
|
/// 'h' here is either TransitHop or Path.
|
|
/// TransitHop chains to dht::Context::RelayRequestForPath and is where the
|
|
/// end of a path handles a client's DHT message Path handles the message
|
|
/// (e.g. dht::IMessage::HandleMessage()) in-place and is the case where a
|
|
/// client receives a DHT message
|
|
bool
|
|
DHTMessage::HandleMessage(IMessageHandler* h, AbstractRouter* r) const
|
|
{
|
|
// set source as us
|
|
const llarp::dht::Key_t us(r->pubkey());
|
|
for (const auto& msg : M)
|
|
{
|
|
msg->From = us;
|
|
msg->pathID = from;
|
|
if (!h->HandleDHTMessage(*msg, r))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
} // namespace routing
|
|
} // namespace llarp
|