diff options
| author | Jesper Jensen <jesper@slashwin.dk> | 2021-09-19 11:46:27 +0200 |
|---|---|---|
| committer | Jesper Jensen <jesper@slashwin.dk> | 2021-09-19 11:46:27 +0200 |
| commit | b5127f1c7624f40437159f164ac8eabc50b65f74 (patch) | |
| tree | add3888f067e550b542ad9653fe9890ce72a8944 /src/proto.h | |
| parent | 4c2f2c7e4c36989463e2a44c60f240cf9c0e1a48 (diff) | |
Add general tests
Diffstat (limited to 'src/proto.h')
| -rw-r--r-- | src/proto.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/proto.h b/src/proto.h new file mode 100644 index 0000000..85dd310 --- /dev/null +++ b/src/proto.h @@ -0,0 +1,44 @@ +#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 + +struct dht; +struct msgbuff; +typedef void (*cont)(struct dht* dht, struct nodeid* self, char* packet, size_t packet_len, int socket, struct sockaddr* remote, socklen_t remote_len, struct msgbuff* msgbuff); + +struct discovery { + uint16_t port; + struct nodeid expected_id; +}; + +struct dht { + struct nodeid self; + int sfd; + + struct in_addr addrs[MAX_DISC]; + struct discovery pending_discover[MAX_DISC]; + + bool reqalloc[MAX_INFLIGHT]; + struct { + struct sockaddr_storage addr; + cont fun; + } requestdata[MAX_INFLIGHT]; +}; + +struct message { + char payload[128]; + size_t payload_len; + struct sockaddr_storage dest; + socklen_t dest_len; +}; + +void proto_begin(struct dht* dht, 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, struct message** output, const struct message* const output_end); +void proto_end(struct dht* dht); |
