#ifndef LLARP_XI_HPP #define LLARP_XI_HPP #include #include #include #include /** * exit_info.h * * utilities for handling exits on the llarp network */ /// Exit info model namespace llarp { struct ExitInfo { in6_addr address = {}; in6_addr netmask = {}; PubKey pubkey; uint64_t version = LLARP_PROTO_VERSION; ExitInfo() = default; ExitInfo(const PubKey &pk, const nuint32_t &ipv4_exit) : pubkey(pk) { memset(address.s6_addr, 0, 16); address.s6_addr[11] = 0xff; address.s6_addr[10] = 0xff; memcpy(address.s6_addr + 12, &ipv4_exit.n, 4); memset(netmask.s6_addr, 0xff, 16); } bool BEncode(llarp_buffer_t *buf) const; bool BDecode(llarp_buffer_t *buf) { return bencode_decode_dict(*this, buf); } bool DecodeKey(const llarp_buffer_t &k, llarp_buffer_t *buf); std::ostream & print(std::ostream &stream, int level, int spaces) const; }; inline std::ostream & operator<<(std::ostream &out, const ExitInfo &xi) { return xi.print(out, -1, -1); } } // namespace llarp #endif