diff options
Diffstat (limited to 'src/external.h')
| -rw-r--r-- | src/external.h | 53 |
1 files changed, 39 insertions, 14 deletions
diff --git a/src/external.h b/src/external.h index e145f91..13f65dd 100644 --- a/src/external.h +++ b/src/external.h @@ -14,32 +14,53 @@ typedef byte hash[ 32 ]; typedef byte public_key[ 32 ]; typedef byte private_key[ 32 ]; typedef byte signature[ 64 ]; +typedef byte recipient[ 64 ]; const uint16_t default_port = 8040; enum client_input { // ask server for its information (responds with audit_response) - audit_server = 0x9a, + audit_server = 0x10, // ask server for a random set of neighbors // (input uint8_t neighbor_count, responds with neighbors_info) - get_neighbors = 0x20, + get_neighbors = 0x11, // monitor incoming packets // (input struct firehose_request, responds with firehose_reply) - firehose = 0xf1, + firehose = 0x12, // give a packet to the relay // (input struct data_packet, responds with push_packet_result) - push_packet = 0x88, + push_packet = 0x13, // get a packet from the server // (input hash, responds with get_packet_result) - get_packet = 0x87, + get_packet = 0x14, // register a new neighbor relay to this server // (input struct relay_neighbor, responds with register_neighbor_result) - register_neighbor = 0x73, + register_neighbor = 0x15, + + // query packets for a specific author + // 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 author'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_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, }; enum server_reply { @@ -47,17 +68,21 @@ enum server_reply { error = 0x1, // type `struct relay_info` - audit_response = 0xaf, + audit_response = 0x18, // type `struct relay_neighbor[ neighbor_count ]` - neighbors_info = 0x43, + neighbors_info = 0x19, // type `uint64_t new_offset, struct data_packet[ count ]` - firehose_reply = 0x6c, + firehose_reply = 0x1a, // type `bool result_code` - push_packet_result = 0x4a, + push_packet_result = 0x1b, // type `struct data_packet` - get_packet_result = 0x42, + get_packet_result = 0x1c, // type `bool result_code` - register_neighbor_result = 0x6e, + register_neighbor_result = 0x1d, + // type `u16 count, u64 new_offset, struct data_packet[ count ]` + queried_author_packets = 0x1e, + // type `u16 count, u64 new_offset, struct data_packet[ count ]` + queried_recipient_packets = 0x1f, }; typedef uint8_t get_neighbors_request; @@ -114,11 +139,11 @@ struct data_packet { public_key author; // message author public_key author_signing_pub; // message signing pubkey uint8_t recipient_count; // number of recipients. leave as 0 for public. - public_key recipients[ 32 ]; // up to 32 recipients for packet + recipient recipients[ 32 ]; // up to 32 recipients for packet byte data[ 65536 ]; // packet data signature signature; // data signature } contents; }; -const size_t CONTENTS_SIZE = 1 + 8 + 32 + 32 + 1 + (32 * MAX_RECIPIENTS) + 65536 + 64; +const size_t CONTENTS_SIZE = 1 + 8 + 32 + 32 + 1 + (64 * MAX_RECIPIENTS) + 65536 + 64; const size_t PACKET_SIZE = 4 + 32 + (CONTENTS_SIZE);
\ No newline at end of file |
