enum client_input { // ask server for its information (responds with audit_response) audit_server = 0x10, // ask server for a random set of neighbors // (input uint8_t neighbor_count, responds with neighbors_info) get_neighbors = 0x11, // monitor incoming packets // (input struct firehose_request, responds with firehose_reply) firehose = 0x12, // give a packet to the relay // (input struct data_packet, responds with push_packet_result) push_packet = 0x13, // get a packet from the server // (input hash, responds with get_packet_result) get_packet = 0x14, // register a new neighbor relay to this server // (input struct relay_neighbor, responds with register_neighbor_result) register_neighbor = 0x15, // query packets for a specific author // (input public_key, pub_sign_key, u16 count, u64 offset) // (responds with queried_author_packets) query_packets = 0x16, // query packets for a specific recipient // note: to prevent DoS, you must provide a signature by the requested author to be approved. // the signature needs to be from a struct shaped `public_key + pub_sign_key + u16 count + u64 // offset`. // server must verify the signing key is of the recipient's pubkey and signing key by looking at // the packet's metadata. // (input public_key, input pub_sign_key, signature, u16 count, u64 offset) // (responds with queried_author_packets) query_by_recipient = 0x17, // query packets by in-memory id and hash. // this is to be used in tandem with firehose, in an effort to reduce traffic usage. // note that this only works for entries currently loaded into memory. (meaning the id can be // invalidated at any time) // (input hash, u64 id) // (responds with get_packet_result) query_by_id_hash = 0x18 }; enum server_reply { // pretty self-explanatory. error = 0x1, // type `struct relay_info` audit_response = 0x19, // type `struct relay_neighbor[ neighbor_count ]` neighbors_info = 0x1a, // type `uint64_t new_offset, struct data_packet[ count ]` firehose_reply = 0x1b, // type `bool result_code` push_packet_result = 0x1c, // type `struct data_packet` get_packet_result = 0x1d, // type `bool result_code` register_neighbor_result = 0x1e, // type `u16 count, u64 new_offset, struct data_packet[ count ]` queried_author_packets = 0x1f, // type `u16 count, u64 new_offset, struct data_packet[ count ]` queried_recipient_packets = 0x20, };