summaryrefslogtreecommitdiff
path: root/src/proto.h.orig
diff options
context:
space:
mode:
Diffstat (limited to 'src/proto.h.orig')
-rw-r--r--src/proto.h.orig78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/proto.h.orig b/src/proto.h.orig
new file mode 100644
index 0000000..ce2a713
--- /dev/null
+++ b/src/proto.h.orig
@@ -0,0 +1,78 @@
+#pragma once
+
+#include "routing.h"
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+// 192.0.2.0
+#define UNDEF_ADDR (struct in_addr){0xC0000200}
+#define MAX_DISC 32
+#define MAX_INFLIGHT 32
+
+#define PROTO_UNCTM 60
+#define PROTO_TMOUT 5
+
+struct ping {
+ struct nodeid remote_id;
+ int attempt;
+ bool is_new;
+};
+
+union message_cont {
+ struct ping ping;
+};
+
+struct dht;
+struct msgbuff;
+
+#define PROCESS_REPONSE(NAME) int (NAME)(struct dht* dht, time_t now, union message_cont* cont, char* packet, size_t packet_len, int socket, struct sockaddr* remote, socklen_t remote_len, struct msgbuff* msgbuff)
+typedef PROCESS_REPONSE(resp);
+
+#define PROCESS_TIMEOUT(NAME) int (NAME)(struct dht* dht, struct nodeid* self, time_t now, union message_cont* cont, struct msgbuff* msgbuff)
+typedef PROCESS_TIMEOUT(tmout);
+
+struct dht {
+ struct nodeid self;
+ int sfd;
+
+ bool pause;
+
+ bool reqalloc[MAX_INFLIGHT];
+ struct {
+ struct sockaddr_storage addr;
+ socklen_t addr_len;
+ resp* fun;
+ time_t timeout;
+ tmout* timeout_fun;
+ union message_cont cont;
+ } requestdata[MAX_INFLIGHT];
+};
+
+// @HACK: This isn't true anymore
+// The longest message we can send is probably a response to find_node which
+// consists of:
+// d1:t <-- 4 bytes
+// <tid length> <-- 2 bytes
+// : <-- 1 byte
+// <tid> <-- 16 bytes*
+// 1:y1:r1:r <-- 9 bytes
+// d2:id20: <-- 8 bytes
+// <our nodeid> <-- 20 bytes
+// 5:nodes208: <-- 11 bytes
+// <payload> <-- 208 bytes
+// ee <-- 2 bytes
+// TOTAL 281 bytes
+struct message {
+<<<<<<< HEAD
+ char payload[1024];
+=======
+ char payload[281];
+>>>>>>> 685b13e (I don't remember)
+ size_t payload_len;
+ struct sockaddr_storage dest;
+ socklen_t dest_len;
+};
+
+void proto_begin(struct dht* dht, time_t now, struct message** output, const struct message* const output_end);
+int proto_run(struct dht* dht, char* buffer, size_t buffer_len, struct sockaddr_in* remote, socklen_t remote_len, time_t now, struct message** output, const struct message* const output_end);
+void proto_end(struct dht* dht);