13using NodeId = std::array<uint8_t, 20>;
14using InfoHash = std::array<uint8_t, 20>;
54 KrpcNode(
const NodeId& node_id,
const std::string& ip_addr, uint16_t port_num)
55 :
id(node_id),
ip(ip_addr),
port(port_num) {}
113 static std::unique_ptr<KrpcMessage>
decode_message(
const std::vector<uint8_t>& data);
135 static std::unique_ptr<KrpcMessage> decode_query(
const BencodeValue& data);
136 static std::unique_ptr<KrpcMessage> decode_response(
const BencodeValue& data);
137 static std::unique_ptr<KrpcMessage> decode_error(
const BencodeValue& data);
139 static KrpcQueryType string_to_query_type(
const std::string& str);
142 static std::atomic<uint32_t> transaction_counter_;
Represents a bencoded value which can be:
KRPC Protocol implementation.
static std::vector< Peer > parse_compact_peer_info(const std::string &compact_info)
static KrpcMessage create_announce_peer_query(const std::string &transaction_id, const NodeId &sender_id, const InfoHash &info_hash, uint16_t port, const std::string &token)
static KrpcMessage create_error(const std::string &transaction_id, KrpcErrorCode error_code, const std::string &error_message)
static KrpcMessage create_find_node_query(const std::string &transaction_id, const NodeId &sender_id, const NodeId &target_id)
static KrpcMessage create_get_peers_response_with_nodes(const std::string &transaction_id, const NodeId &response_id, const std::vector< KrpcNode > &nodes, const std::string &token)
static KrpcMessage create_announce_peer_response(const std::string &transaction_id, const NodeId &response_id)
static KrpcMessage create_find_node_response(const std::string &transaction_id, const NodeId &response_id, const std::vector< KrpcNode > &nodes)
static std::string compact_peer_info(const Peer &peer)
static KrpcMessage create_ping_query(const std::string &transaction_id, const NodeId &sender_id)
Create KRPC messages.
static std::vector< KrpcNode > parse_compact_node_info(const std::string &compact_info)
static std::string compact_node_info(const KrpcNode &node)
static std::string generate_transaction_id()
Generate transaction ID.
static std::unique_ptr< KrpcMessage > decode_message(const std::vector< uint8_t > &data)
static KrpcMessage create_ping_response(const std::string &transaction_id, const NodeId &response_id)
static std::vector< uint8_t > encode_message(const KrpcMessage &message)
Encode/decode KRPC messages.
static NodeId string_to_node_id(const std::string &str)
static std::string node_id_to_string(const NodeId &id)
Utility functions.
static KrpcMessage create_get_peers_response(const std::string &transaction_id, const NodeId &response_id, const std::vector< Peer > &peers, const std::string &token)
static KrpcMessage create_get_peers_query(const std::string &transaction_id, const NodeId &sender_id, const InfoHash &info_hash)
KrpcMessageType
KRPC Message types.
KrpcQueryType
KRPC Query types.
KrpcErrorCode
KRPC Error codes.
std::array< uint8_t, NODE_ID_SIZE > InfoHash
std::array< uint8_t, NODE_ID_SIZE > NodeId
std::vector< Peer > peers
std::string transaction_id
std::vector< KrpcNode > nodes
std::string error_message
KrpcNode(const NodeId &node_id, const std::string &ip_addr, uint16_t port_num)