You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lokinet/llarp/relay_commit.cpp

125 lines
2.7 KiB
C++

#include <llarp/messages/relay_commit.hpp>
#include "logger.hpp"
#include "router.hpp"
namespace llarp
{
LR_CommitMessage::~LR_CommitMessage()
{
}
bool
LR_CommitMessage::DecodeKey(llarp_buffer_t key, llarp_buffer_t* buf)
{
// TODO: implement
return false;
}
bool
LR_CommitMessage::BEncode(llarp_buffer_t* buf) const
{
// TODO: implement
return false;
}
bool
LR_CommitMessage::HandleMessage(llarp_router* router) const
{
return router->paths.HandleRelayCommit(this);
}
bool
LR_CommitRecord::BEncode(llarp_buffer_t* buf) const
{
return false;
}
bool
LR_CommitRecord::OnKey(dict_reader* r, llarp_buffer_t* key)
{
if(!key)
return true;
llarp_buffer_t strbuf;
LR_CommitRecord* self = static_cast< LR_CommitRecord* >(r->user);
if(llarp_buffer_eq(*key, "c"))
{
if(!bencode_read_string(r->buffer, &strbuf))
return false;
if(strbuf.sz != sizeof(llarp_pubkey_t))
return false;
memcpy(self->commkey, strbuf.base, strbuf.sz);
return true;
}
if(llarp_buffer_eq(*key, "i"))
{
if(!bencode_read_string(r->buffer, &strbuf))
return false;
if(strbuf.sz != sizeof(llarp_pubkey_t))
return false;
memcpy(self->nextHop, strbuf.base, strbuf.sz);
return true;
}
if(llarp_buffer_eq(*key, "n"))
{
if(!bencode_read_string(r->buffer, &strbuf))
return false;
if(strbuf.sz != sizeof(llarp_tunnel_nonce_t))
return false;
memcpy(self->tunnelNonce, strbuf.base, strbuf.sz);
return true;
}
if(llarp_buffer_eq(*key, "p"))
{
if(!bencode_read_string(r->buffer, &strbuf))
return false;
if(strbuf.sz != self->txid.size())
return false;
memcpy(self->txid, strbuf.base, strbuf.sz);
return true;
}
if(llarp_buffer_eq(*key, "s"))
{
if(!bencode_read_string(r->buffer, &strbuf))
return false;
if(strbuf.sz != self->downstreamReplyKey.size())
return false;
memcpy(self->downstreamReplyKey, strbuf.base, strbuf.sz);
return true;
}
if(llarp_buffer_eq(*key, "u"))
{
if(!bencode_read_string(r->buffer, &strbuf))
return false;
if(strbuf.sz != self->downstreamReplyNonce.size())
return false;
memcpy(self->downstreamReplyNonce, strbuf.base, strbuf.sz);
return true;
}
if(llarp_buffer_eq(*key, "v"))
{
if(!bencode_read_integer(r->buffer, &self->version))
return false;
return self->version == LLARP_PROTO_VERSION;
}
return false;
}
bool
LR_CommitRecord::BDecode(llarp_buffer_t* buf)
{
dict_reader r;
r.user = this;
r.on_key = &OnKey;
return bencode_read_dict(buf, &r);
}
}