summaryrefslogtreecommitdiff
path: root/src/external.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/external.h')
-rw-r--r--src/external.h53
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