1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
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,
};
|