From b0af12b287a7c7e3cc5ba39869835126e700f792 Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Fri, 21 Jun 2024 18:49:43 +0300 Subject: initial commit TODO: implement O_NONBLOCK switching on channel socket --- server/channel.h | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 server/channel.h (limited to 'server/channel.h') diff --git a/server/channel.h b/server/channel.h new file mode 100644 index 0000000..a577638 --- /dev/null +++ b/server/channel.h @@ -0,0 +1,62 @@ +#ifndef KV_SERVER_CHANNEL_H +#define KV_SERVER_CHANNEL_H + +#include + +#include +#include +#include +#include + +#ifdef DEBUG +#define DEBUGF(fmt, ...) fprintf(stderr, "DEBUG: %s:%d:%s(): " fmt, __FILE__, __LINE__, __func__, ##__VA_ARGS__) +#else +#define DEBUGF(fmt, ...) \ + do { } while (0) +#endif + +#define KV_PACKET_SIZE 512 + +enum system_operation { + do_nothing = 0, + join_channel = -1, + shutdown_socket = -2, + acknowledgement = -3, +}; +struct user { + unsigned int ip; + unsigned short port; + int id; +}; +struct channel_handle { + int sockfd; + struct user* users; +}; +struct kv_packet { + int id; + unsigned char data[KV_PACKET_SIZE - sizeof(unsigned int)]; +}; +struct kv_system_packet { + int operation_id; + int user_id; + int return_address; + unsigned short return_port; + unsigned int checksum; + unsigned char sentinel[KV_PACKET_SIZE - 4 * sizeof(int) - sizeof(short)]; +}; + +void thread_loop(void); + +struct channel_handle *channel_init(void); +void channel_uninit(struct channel_handle *handle); + +enum system_operation handle_system_packet(struct kv_packet* packet, struct channel_handle* handle); +unsigned int system_packet_checksum(struct kv_system_packet *packet); +void send_packets_back(struct kv_packet** packets, struct channel_handle *handle); + +void send_cancellation_messages(struct channel_handle *handle) ; +void clear_packet_array(struct kv_packet **array); + +int __user_cmp(const void* a, const void* b); + +#endif // KV_SERVER_CHANNEL_H -- cgit v1.2.3-70-g09d2