#include #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); } }