diff --git a/src/append_to_packet.c b/src/append_to_packet.c index c40cd65..42826e4 100644 --- a/src/append_to_packet.c +++ b/src/append_to_packet.c @@ -18,7 +18,7 @@ static inline void append_data(uint8_t** const append_pointer, const void* const (*append_pointer) += data_size; } -void swiftnet_client_append_to_packet(const void* const data, const uint32_t data_size, SwiftNetPacketBuffer* const packet) { +void swiftnet_client_append_to_packet(const void* const data, const uint32_t data_size, struct SwiftNetPacketBuffer* const packet) { #ifdef SWIFT_NET_ERROR validate_args(data, data_size, __func__); #endif @@ -26,7 +26,7 @@ void swiftnet_client_append_to_packet(const void* const data, const uint32_t dat append_data(&packet->packet_append_pointer, data, data_size); } -void swiftnet_server_append_to_packet(const void* const data, const uint32_t data_size, SwiftNetPacketBuffer* const packet) { +void swiftnet_server_append_to_packet(const void* const data, const uint32_t data_size, struct SwiftNetPacketBuffer* const packet) { #ifdef SWIFT_NET_ERROR validate_args(data, data_size, __func__); #endif diff --git a/src/cleanup.c b/src/cleanup.c index 801d91b..b40e9ae 100644 --- a/src/cleanup.c +++ b/src/cleanup.c @@ -18,7 +18,7 @@ void swiftnet_cleanup() { vector_lock(&listeners); for (uint16_t i = 0; i < listeners.size; i++) { - Listener* const current_listener = vector_get(&listeners, i); + struct Listener* const current_listener = vector_get(&listeners, i); pcap_breakloop(current_listener->pcap); diff --git a/src/cleanup_connection.c b/src/cleanup_connection.c index 1f81bbe..bd876ff 100644 --- a/src/cleanup_connection.c +++ b/src/cleanup_connection.c @@ -4,7 +4,7 @@ #include #include -void swiftnet_client_cleanup(SwiftNetClientConnection* const client) { +void swiftnet_client_cleanup(struct SwiftNetClientConnection* const client) { allocator_destroy(&client->packets_sending_memory_allocator); allocator_destroy(&client->pending_messages_memory_allocator); allocator_destroy(&client->packets_completed_memory_allocator); @@ -18,12 +18,12 @@ void swiftnet_client_cleanup(SwiftNetClientConnection* const client) { vector_lock(&listeners); for (uint16_t i = 0; i < listeners.size; i++) { - Listener* const current_listener = vector_get(&listeners, i); + struct Listener* const current_listener = vector_get(&listeners, i); if (strcmp(interface_name, current_listener->interface_name) == 0) { vector_lock(¤t_listener->client_connections); for (uint16_t inx = 0; inx < current_listener->client_connections.size; inx++) { - SwiftNetClientConnection* const current_client_conn = vector_get(¤t_listener->client_connections, i); + struct SwiftNetClientConnection* const current_client_conn = vector_get(¤t_listener->client_connections, i); if (current_client_conn != client) { continue; } @@ -51,7 +51,7 @@ void swiftnet_client_cleanup(SwiftNetClientConnection* const client) { allocator_free(&client_connection_memory_allocator, client); } -void swiftnet_server_cleanup(SwiftNetServer* const server) { +void swiftnet_server_cleanup(struct SwiftNetServer* const server) { allocator_destroy(&server->packets_sending_memory_allocator); allocator_destroy(&server->pending_messages_memory_allocator); allocator_destroy(&server->packets_completed_memory_allocator); @@ -65,12 +65,12 @@ void swiftnet_server_cleanup(SwiftNetServer* const server) { vector_lock(&listeners); for (uint16_t i = 0; i < listeners.size; i++) { - Listener* const current_listener = vector_get(&listeners, i); + struct Listener* const current_listener = vector_get(&listeners, i); if (strcmp(interface_name, current_listener->interface_name) == 0) { vector_lock(¤t_listener->servers); for (uint16_t inx = 0; inx < current_listener->servers.size; inx++) { - SwiftNetServer* const current_server = vector_get(¤t_listener->servers, i); + struct SwiftNetServer* const current_server = vector_get(¤t_listener->servers, i); if (current_server != server) { continue; } diff --git a/src/create_packet_buffer.c b/src/create_packet_buffer.c index 4344904..252f909 100644 --- a/src/create_packet_buffer.c +++ b/src/create_packet_buffer.c @@ -3,22 +3,22 @@ #include #include -static inline SwiftNetPacketBuffer create_packet_buffer(const uint32_t buffer_size) { +static inline struct SwiftNetPacketBuffer create_packet_buffer(const uint32_t buffer_size) { uint8_t* const mem = malloc(buffer_size + PACKET_HEADER_SIZE + sizeof(struct ether_header)); uint8_t* const data_pointer = mem + PACKET_HEADER_SIZE + sizeof(struct ether_header); - return (SwiftNetPacketBuffer){ + return (struct SwiftNetPacketBuffer){ .packet_buffer_start = mem, .packet_data_start = data_pointer, .packet_append_pointer = data_pointer }; } -SwiftNetPacketBuffer swiftnet_server_create_packet_buffer(const uint32_t buffer_size) { +struct SwiftNetPacketBuffer swiftnet_server_create_packet_buffer(const uint32_t buffer_size) { return create_packet_buffer(buffer_size); } -SwiftNetPacketBuffer swiftnet_client_create_packet_buffer(const uint32_t buffer_size) { +struct SwiftNetPacketBuffer swiftnet_client_create_packet_buffer(const uint32_t buffer_size) { return create_packet_buffer(buffer_size); } diff --git a/src/destroy_packet_buffer.c b/src/destroy_packet_buffer.c index 6ae7e49..274e674 100644 --- a/src/destroy_packet_buffer.c +++ b/src/destroy_packet_buffer.c @@ -1,10 +1,10 @@ #include "swift_net.h" #include -void swiftnet_server_destroy_packet_buffer(const SwiftNetPacketBuffer* const packet) { +void swiftnet_server_destroy_packet_buffer(const struct SwiftNetPacketBuffer* const packet) { free(packet->packet_buffer_start); } -void swiftnet_client_destroy_packet_buffer(const SwiftNetPacketBuffer* const packet) { +void swiftnet_client_destroy_packet_buffer(const struct SwiftNetPacketBuffer* const packet) { free(packet->packet_buffer_start); } diff --git a/src/execute_packet_callback.c b/src/execute_packet_callback.c index 2865d04..cd2b418 100644 --- a/src/execute_packet_callback.c +++ b/src/execute_packet_callback.c @@ -6,7 +6,7 @@ #include #include -static PacketCallbackQueueNode* const wait_for_next_packet_callback(PacketCallbackQueue* const packet_queue) { +static struct PacketCallbackQueueNode* const wait_for_next_packet_callback(struct PacketCallbackQueue* const packet_queue) { uint32_t owner_none = PACKET_CALLBACK_QUEUE_OWNER_NONE; while(!atomic_compare_exchange_strong_explicit(&packet_queue->owner, &owner_none, PACKET_CALLBACK_QUEUE_OWNER_EXECUTE_PACKET_CALLBACK, memory_order_acquire, memory_order_relaxed)) { owner_none = PACKET_CALLBACK_QUEUE_OWNER_NONE; @@ -17,7 +17,7 @@ static PacketCallbackQueueNode* const wait_for_next_packet_callback(PacketCallba return NULL; } - PacketCallbackQueueNode* const node_to_process = packet_queue->first_node; + struct PacketCallbackQueueNode* const node_to_process = packet_queue->first_node; if(node_to_process->next == NULL) { packet_queue->first_node = NULL; @@ -35,13 +35,13 @@ static PacketCallbackQueueNode* const wait_for_next_packet_callback(PacketCallba return node_to_process; } -void execute_packet_callback(PacketCallbackQueue* const queue, void (* const _Atomic * const packet_handler) (void* const), const uint8_t connection_type, SwiftNetMemoryAllocator* const pending_message_memory_allocator, _Atomic bool* closing, const void* const connection, SwiftNetVector* const pending_messages) { +void execute_packet_callback(struct PacketCallbackQueue* const queue, void (* const _Atomic * const packet_handler) (void* const), const uint8_t connection_type, struct SwiftNetMemoryAllocator* const pending_message_memory_allocator, _Atomic bool* closing, const void* const connection, struct SwiftNetVector* const pending_messages) { while (1) { if (atomic_load_explicit(closing, memory_order_acquire) == true) { break; } - const PacketCallbackQueueNode* const node = wait_for_next_packet_callback(queue); + const struct PacketCallbackQueueNode* const node = wait_for_next_packet_callback(queue); if(node == NULL) { continue; } @@ -57,7 +57,7 @@ void execute_packet_callback(PacketCallbackQueue* const queue, void (* const _At vector_lock(pending_messages); for (uint32_t i = 0; i < pending_messages->size; i++) { - const SwiftNetPendingMessage* const pending_message = vector_get(pending_messages, i); + const struct SwiftNetPendingMessage* const pending_message = vector_get(pending_messages, i); if (pending_message == node->pending_message) { vector_remove(pending_messages, i); } @@ -75,7 +75,7 @@ void execute_packet_callback(PacketCallbackQueue* const queue, void (* const _At } void* execute_packet_callback_client(void* const void_client) { - SwiftNetClientConnection* const client = void_client; + struct SwiftNetClientConnection* const client = void_client; execute_packet_callback(&client->packet_callback_queue, (void*)&client->packet_handler, 0, &client->pending_messages_memory_allocator, &client->closing, void_client, &client->pending_messages); @@ -83,7 +83,7 @@ void* execute_packet_callback_client(void* const void_client) { } void* execute_packet_callback_server(void* const void_server) { - SwiftNetServer* const server = void_server; + struct SwiftNetServer* const server = void_server; execute_packet_callback(&server->packet_callback_queue, (void*)&server->packet_handler, 1, &server->pending_messages_memory_allocator, &server->closing, void_server, &server->pending_messages); diff --git a/src/generic_functions.c b/src/generic_functions.c index 6a046f1..478fe70 100644 --- a/src/generic_functions.c +++ b/src/generic_functions.c @@ -15,13 +15,13 @@ static inline void swiftnet_validate_new_handler(const void* const new_handler, #endif } -void swiftnet_client_set_message_handler(SwiftNetClientConnection* const client, void (* const new_handler)(SwiftNetClientPacketData* const)) { +void swiftnet_client_set_message_handler(struct SwiftNetClientConnection* const client, void (* const new_handler)(struct SwiftNetClientPacketData* const)) { swiftnet_validate_new_handler(new_handler, __func__); atomic_store(&client->packet_handler, new_handler); } -void swiftnet_server_set_message_handler(SwiftNetServer* const server, void (* const new_handler)(SwiftNetServerPacketData* const)) { +void swiftnet_server_set_message_handler(struct SwiftNetServer* const server, void (* const new_handler)(struct SwiftNetServerPacketData* const)) { swiftnet_validate_new_handler(new_handler, __func__); atomic_store(&server->packet_handler, new_handler); @@ -29,7 +29,7 @@ void swiftnet_server_set_message_handler(SwiftNetServer* const server, void (* c // Read packet data into buffers -void* swiftnet_client_read_packet(SwiftNetClientPacketData* const packet_data, const uint32_t data_size) { +void* swiftnet_client_read_packet(struct SwiftNetClientPacketData* const packet_data, const uint32_t data_size) { const uint32_t data_already_read = (packet_data->current_pointer - packet_data->data) + data_size; if (data_already_read > packet_data->metadata.data_length) { fprintf(stderr, "Error: Tried to read more data than there actually is\n"); @@ -43,7 +43,7 @@ void* swiftnet_client_read_packet(SwiftNetClientPacketData* const packet_data, c return ptr; } -void* swiftnet_server_read_packet(SwiftNetServerPacketData* const packet_data, const uint32_t data_size) { +void* swiftnet_server_read_packet(struct SwiftNetServerPacketData* const packet_data, const uint32_t data_size) { const uint32_t data_already_read = (packet_data->current_pointer - packet_data->data) + data_size; if (data_already_read > packet_data->metadata.data_length) { fprintf(stderr, "Error: Tried to read more data than there actually is\n"); @@ -57,7 +57,7 @@ void* swiftnet_server_read_packet(SwiftNetServerPacketData* const packet_data, c return ptr; } -void swiftnet_client_destroy_packet_data(SwiftNetClientPacketData* const packet_data, SwiftNetClientConnection* const client_conn) { +void swiftnet_client_destroy_packet_data(struct SwiftNetClientPacketData* const packet_data, struct SwiftNetClientConnection* const client_conn) { if(packet_data->internal_pending_message != NULL) { free(packet_data->internal_pending_message->chunks_received); @@ -70,7 +70,7 @@ void swiftnet_client_destroy_packet_data(SwiftNetClientPacketData* const packet_ } } -void swiftnet_server_destroy_packet_data(SwiftNetServerPacketData* const packet_data, SwiftNetServer* const server) { +void swiftnet_server_destroy_packet_data(struct SwiftNetServerPacketData* const packet_data, struct SwiftNetServer* const server) { if(packet_data->internal_pending_message != NULL) { free(packet_data->internal_pending_message->chunks_received); diff --git a/src/handle_packets.c b/src/handle_packets.c index 094f17c..15f24f7 100644 --- a/src/handle_packets.c +++ b/src/handle_packets.c @@ -10,7 +10,7 @@ #include "internal/internal.h" #include -static inline void insert_queue_node(PacketQueueNode* const new_node, volatile PacketQueue* const packet_queue, const ConnectionType contype) { +static inline void insert_queue_node(struct PacketQueueNode* const new_node, struct PacketQueue* const packet_queue, const enum ConnectionType contype) { if(new_node == NULL) { return; } @@ -37,8 +37,8 @@ static inline void insert_queue_node(PacketQueueNode* const new_node, volatile P return; } -static inline void swiftnet_handle_packets(const uint16_t source_port, pthread_t* const process_packets_thread, void* connection, const ConnectionType connection_type, PacketQueue* const packet_queue, const _Atomic bool* closing, const bool loopback, const uint16_t addr_type, const struct pcap_pkthdr* hdr, const uint8_t* packet) { - PacketQueueNode *node = allocator_allocate(&packet_queue_node_memory_allocator); +static inline void swiftnet_handle_packets(const uint16_t source_port, pthread_t* const process_packets_thread, void* connection, const enum ConnectionType connection_type, struct PacketQueue* const packet_queue, const _Atomic bool* closing, const bool loopback, const uint16_t addr_type, const struct pcap_pkthdr* hdr, const uint8_t* packet) { + struct PacketQueueNode *node = allocator_allocate(&packet_queue_node_memory_allocator); if (unlikely(node == NULL)) { return; } @@ -83,8 +83,8 @@ static inline void swiftnet_handle_packets(const uint16_t source_port, pthread_t insert_queue_node(node, packet_queue, connection_type); } -static void handle_client_init(SwiftNetClientConnection* user, const struct pcap_pkthdr* hdr, const uint8_t* buffer) { - SwiftNetClientConnection* const client_connection = (SwiftNetClientConnection*)user; +static void handle_client_init(struct SwiftNetClientConnection* user, const struct pcap_pkthdr* hdr, const uint8_t* buffer) { + struct SwiftNetClientConnection* const client_connection = (struct SwiftNetClientConnection*)user; if (atomic_load_explicit(&client_connection->closing, memory_order_acquire) == true) { return; @@ -92,10 +92,10 @@ static void handle_client_init(SwiftNetClientConnection* user, const struct pcap const uint32_t bytes_received = hdr->caplen; - if(bytes_received != PACKET_HEADER_SIZE + sizeof(SwiftNetServerInformation) + client_connection->prepend_size) { + if(bytes_received != PACKET_HEADER_SIZE + sizeof(struct SwiftNetServerInformation) + client_connection->prepend_size) { #ifdef SWIFT_NET_DEBUG if (check_debug_flag(DEBUG_INITIALIZATION)) { - send_debug_message("Invalid packet received from server. Expected server information: {\"bytes_received\": %u, \"expected_bytes\": %u}\n", bytes_received, PACKET_HEADER_SIZE + sizeof(SwiftNetServerInformation)); + send_debug_message("Invalid packet received from server. Expected server information: {\"bytes_received\": %u, \"expected_bytes\": %u}\n", bytes_received, PACKET_HEADER_SIZE + sizeof(struct SwiftNetServerInformation)); } #endif @@ -103,8 +103,8 @@ static void handle_client_init(SwiftNetClientConnection* user, const struct pcap } struct ip* ip_header = (struct ip*)(buffer + client_connection->prepend_size); - SwiftNetPacketInfo* packet_info = (SwiftNetPacketInfo*)(buffer + client_connection->prepend_size + sizeof(struct ip)); - SwiftNetServerInformation* server_information = (SwiftNetServerInformation*)(buffer + client_connection->prepend_size + sizeof(struct ip) + sizeof(SwiftNetPacketInfo)); + struct SwiftNetPacketInfo* packet_info = (struct SwiftNetPacketInfo*)(buffer + client_connection->prepend_size + sizeof(struct ip)); + struct SwiftNetServerInformation* server_information = (struct SwiftNetServerInformation*)(buffer + client_connection->prepend_size + sizeof(struct ip) + sizeof(struct SwiftNetPacketInfo)); if(packet_info->port_info.destination_port != client_connection->port_info.source_port || packet_info->port_info.source_port != client_connection->port_info.destination_port) { #ifdef SWIFT_NET_DEBUG @@ -131,14 +131,14 @@ static void handle_client_init(SwiftNetClientConnection* user, const struct pcap } static void pcap_packet_handle(uint8_t* user, const struct pcap_pkthdr* hdr, const uint8_t* packet) { - Listener* const listener = (Listener*)user; + struct Listener* const listener = (struct Listener*)user; - SwiftNetPortInfo* const port_info = (SwiftNetPortInfo*)(packet + PACKET_PREPEND_SIZE(listener->addr_type) + sizeof(struct ip) + offsetof(SwiftNetPacketInfo, port_info)); + struct SwiftNetPortInfo* const port_info = (struct SwiftNetPortInfo*)(packet + PACKET_PREPEND_SIZE(listener->addr_type) + sizeof(struct ip) + offsetof(struct SwiftNetPacketInfo, port_info)); vector_lock(&listener->servers); for (uint16_t i = 0; i < listener->servers.size; i++) { - SwiftNetServer* const server = vector_get(&listener->servers, i); + struct SwiftNetServer* const server = vector_get(&listener->servers, i); if (server->server_port == port_info->destination_port) { vector_unlock(&listener->servers); @@ -153,7 +153,7 @@ static void pcap_packet_handle(uint8_t* user, const struct pcap_pkthdr* hdr, con vector_lock(&listener->client_connections); for (uint16_t i = 0; i < listener->client_connections.size; i++) { - SwiftNetClientConnection* const client_connection = vector_get(&listener->client_connections, i); + struct SwiftNetClientConnection* const client_connection = vector_get(&listener->client_connections, i); if (client_connection->port_info.source_port == port_info->destination_port) { vector_unlock(&listener->client_connections); @@ -171,7 +171,7 @@ static void pcap_packet_handle(uint8_t* user, const struct pcap_pkthdr* hdr, con } void* interface_start_listening(void* listener_void) { - Listener* listener = listener_void; + struct Listener* listener = listener_void; pcap_loop(listener->pcap, 0, pcap_packet_handle, listener_void); diff --git a/src/initialize_client_socket.c b/src/initialize_client_socket.c index 3ce4ab1..f054d3a 100644 --- a/src/initialize_client_socket.c +++ b/src/initialize_client_socket.c @@ -19,14 +19,14 @@ #include #include -typedef struct { +struct RequestServerInformationArgs { pcap_t* pcap; const void* const data; const uint32_t size; const struct in_addr server_addr; const uint32_t timeout_ms; - SwiftNetClientConnection* const connection; -} RequestServerInformationArgs; + struct SwiftNetClientConnection* const connection; +}; void* request_server_information(void* const request_server_information_args_void) { struct timeval tv; @@ -34,7 +34,7 @@ void* request_server_information(void* const request_server_information_args_voi uint32_t start = (uint32_t)tv.tv_sec * 1000 + tv.tv_usec / 1000; - const RequestServerInformationArgs* const request_server_information_args = (RequestServerInformationArgs*)request_server_information_args_void; + const struct RequestServerInformationArgs* const request_server_information_args = (struct RequestServerInformationArgs*)request_server_information_args_void; while (1) { struct timeval tv; @@ -66,8 +66,8 @@ void* request_server_information(void* const request_server_information_args_voi -SwiftNetClientConnection* swiftnet_create_client(const char* const ip_address, const uint16_t port, const uint32_t timeout_ms) { - SwiftNetClientConnection* const new_connection = allocator_allocate(&client_connection_memory_allocator); +struct SwiftNetClientConnection* swiftnet_create_client(const char* const ip_address, const uint16_t port, const uint32_t timeout_ms) { + struct SwiftNetClientConnection* const new_connection = allocator_allocate(&client_connection_memory_allocator); struct in_addr addr; inet_aton(ip_address, &addr); @@ -90,7 +90,7 @@ SwiftNetClientConnection* swiftnet_create_client(const char* const ip_address, c new_connection->prepend_size = prepend_size; - new_connection->packet_queue = (PacketQueue){ + new_connection->packet_queue = (struct PacketQueue){ .first_node = NULL, .last_node = NULL }; @@ -107,7 +107,7 @@ SwiftNetClientConnection* swiftnet_create_client(const char* const ip_address, c new_connection->server_addr.s_addr = inet_addr(ip_address); // Request the server information, and proccess it - const SwiftNetPacketInfo request_server_information_packet_info = construct_packet_info( + const struct SwiftNetPacketInfo request_server_information_packet_info = construct_packet_info( 0x00, PACKET_TYPE_REQUEST_INFORMATION, 1, @@ -130,12 +130,12 @@ SwiftNetClientConnection* swiftnet_create_client(const char* const ip_address, c HANDLE_CHECKSUM(request_server_info_buffer, sizeof(request_server_info_buffer), prepend_size) - memset(&new_connection->packet_callback_queue, 0x00, sizeof(PacketCallbackQueue)); + memset(&new_connection->packet_callback_queue, 0x00, sizeof(struct PacketCallbackQueue)); atomic_store(&new_connection->packet_callback_queue.owner, PACKET_CALLBACK_QUEUE_OWNER_NONE); pthread_t send_request_thread; - const RequestServerInformationArgs thread_args = { + const struct RequestServerInformationArgs thread_args = { .pcap = new_connection->pcap, .data = request_server_info_buffer, .size = sizeof(request_server_info_buffer), @@ -148,7 +148,7 @@ SwiftNetClientConnection* swiftnet_create_client(const char* const ip_address, c atomic_store_explicit(&new_connection->initialized, false, memory_order_release); - Listener* const listener = check_existing_listener(loopback ? LOOPBACK_INTERFACE_NAME : default_network_interface, new_connection, CONNECTION_TYPE_CLIENT, loopback); + struct Listener* const listener = check_existing_listener(loopback ? LOOPBACK_INTERFACE_NAME : default_network_interface, new_connection, CONNECTION_TYPE_CLIENT, loopback); pthread_create(&send_request_thread, NULL, request_server_information, (void*)&thread_args); @@ -164,7 +164,7 @@ SwiftNetClientConnection* swiftnet_create_client(const char* const ip_address, c allocator_free(&client_connection_memory_allocator, new_connection); for (uint16_t i = 0; i < listener->client_connections.size; i++) { - SwiftNetClientConnection* const client_connection = vector_get(&listener->client_connections, i); + struct SwiftNetClientConnection* const client_connection = vector_get(&listener->client_connections, i); if (client_connection == new_connection) { vector_remove(&listener->client_connections, i); } @@ -175,11 +175,11 @@ SwiftNetClientConnection* swiftnet_create_client(const char* const ip_address, c return NULL; } - new_connection->pending_messages_memory_allocator = allocator_create(sizeof(SwiftNetPendingMessage), 100); + new_connection->pending_messages_memory_allocator = allocator_create(sizeof(struct SwiftNetPendingMessage), 100); new_connection->pending_messages = vector_create(100); - new_connection->packets_sending_memory_allocator = allocator_create(sizeof(SwiftNetPacketSending), 100); + new_connection->packets_sending_memory_allocator = allocator_create(sizeof(struct SwiftNetPacketSending), 100); new_connection->packets_sending = vector_create(100); - new_connection->packets_completed_memory_allocator = allocator_create(sizeof(SwiftNetPacketCompleted), 100); + new_connection->packets_completed_memory_allocator = allocator_create(sizeof(struct SwiftNetPacketCompleted), 100); new_connection->packets_completed = vector_create(100); pthread_create(&new_connection->process_packets_thread, NULL, swiftnet_client_process_packets, new_connection); diff --git a/src/initialize_server_socket.c b/src/initialize_server_socket.c index 7294a0f..b432126 100644 --- a/src/initialize_server_socket.c +++ b/src/initialize_server_socket.c @@ -13,8 +13,8 @@ #include "internal/internal.h" #include "swift_net.h" -SwiftNetServer* swiftnet_create_server(const uint16_t port, const bool loopback) { - SwiftNetServer* const new_server = allocator_allocate(&server_memory_allocator); +struct SwiftNetServer* swiftnet_create_server(const uint16_t port, const bool loopback) { + struct SwiftNetServer* const new_server = allocator_allocate(&server_memory_allocator); #ifdef SWIFT_NET_ERROR if(unlikely(new_server == NULL)) { @@ -46,23 +46,23 @@ SwiftNetServer* swiftnet_create_server(const uint16_t port, const bool loopback) new_server->eth_header = eth_header; - new_server->packet_queue = (PacketQueue){ + new_server->packet_queue = (struct PacketQueue){ .first_node = NULL, .last_node = NULL }; atomic_store(&new_server->packet_queue.owner, PACKET_QUEUE_OWNER_NONE); - memset(&new_server->packet_callback_queue, 0x00, sizeof(PacketCallbackQueue)); + memset(&new_server->packet_callback_queue, 0x00, sizeof(struct PacketCallbackQueue)); atomic_store(&new_server->packet_callback_queue.owner, PACKET_CALLBACK_QUEUE_OWNER_NONE); atomic_store(&new_server->packet_handler, NULL); - new_server->pending_messages_memory_allocator = allocator_create(sizeof(SwiftNetPendingMessage), 100); + new_server->pending_messages_memory_allocator = allocator_create(sizeof(struct SwiftNetPendingMessage), 100); new_server->pending_messages = vector_create(100); - new_server->packets_sending_memory_allocator = allocator_create(sizeof(SwiftNetPacketSending), 100); + new_server->packets_sending_memory_allocator = allocator_create(sizeof(struct SwiftNetPacketSending), 100); new_server->packets_sending = vector_create(100); - new_server->packets_completed_memory_allocator = allocator_create(sizeof(SwiftNetPacketCompleted), 100); + new_server->packets_completed_memory_allocator = allocator_create(sizeof(struct SwiftNetPacketCompleted), 100); new_server->packets_completed = vector_create(100); atomic_store_explicit(&new_server->closing, false, memory_order_release); diff --git a/src/initialize_swift_net.c b/src/initialize_swift_net.c index 92c2fd0..8788b86 100644 --- a/src/initialize_swift_net.c +++ b/src/initialize_swift_net.c @@ -9,7 +9,7 @@ #include #ifdef SWIFT_NET_DEBUG - SwiftNetDebugger debugger = {.flags = 0}; + struct SwiftNetDebugger debugger = {.flags = 0}; #endif uint32_t maximum_transmission_unit = 0x00; @@ -17,21 +17,21 @@ struct in_addr private_ip_address; uint8_t mac_address[6]; char default_network_interface[SIZEOF_FIELD(struct ifreq, ifr_name)]; -SwiftNetMemoryAllocator packet_queue_node_memory_allocator; -SwiftNetMemoryAllocator packet_callback_queue_node_memory_allocator; -SwiftNetMemoryAllocator server_packet_data_memory_allocator; -SwiftNetMemoryAllocator client_packet_data_memory_allocator; -SwiftNetMemoryAllocator packet_buffer_memory_allocator; -SwiftNetMemoryAllocator server_memory_allocator; -SwiftNetMemoryAllocator client_connection_memory_allocator; -SwiftNetMemoryAllocator listener_memory_allocator; +struct SwiftNetMemoryAllocator packet_queue_node_memory_allocator; +struct SwiftNetMemoryAllocator packet_callback_queue_node_memory_allocator; +struct SwiftNetMemoryAllocator server_packet_data_memory_allocator; +struct SwiftNetMemoryAllocator client_packet_data_memory_allocator; +struct SwiftNetMemoryAllocator packet_buffer_memory_allocator; +struct SwiftNetMemoryAllocator server_memory_allocator; +struct SwiftNetMemoryAllocator client_connection_memory_allocator; +struct SwiftNetMemoryAllocator listener_memory_allocator; #ifdef SWIFT_NET_REQUESTS - SwiftNetMemoryAllocator requests_sent_memory_allocator; - SwiftNetVector requests_sent; + struct SwiftNetMemoryAllocator requests_sent_memory_allocator; + struct SwiftNetVector requests_sent; #endif -SwiftNetVector listeners; +struct SwiftNetVector listeners; void swiftnet_initialize() { const int temp_socket = socket(AF_INET, SOCK_DGRAM, 0); @@ -78,17 +78,17 @@ void swiftnet_initialize() { close(temp_socket); - packet_queue_node_memory_allocator = allocator_create(sizeof(PacketQueueNode), 100); - packet_callback_queue_node_memory_allocator = allocator_create(sizeof(PacketCallbackQueueNode), 100); - server_packet_data_memory_allocator = allocator_create(sizeof(SwiftNetServerPacketData), 100); - client_packet_data_memory_allocator = allocator_create(sizeof(SwiftNetClientPacketData), 100); + packet_queue_node_memory_allocator = allocator_create(sizeof(struct PacketQueueNode), 100); + packet_callback_queue_node_memory_allocator = allocator_create(sizeof(struct PacketCallbackQueueNode), 100); + server_packet_data_memory_allocator = allocator_create(sizeof(struct SwiftNetServerPacketData), 100); + client_packet_data_memory_allocator = allocator_create(sizeof(struct SwiftNetClientPacketData), 100); packet_buffer_memory_allocator = allocator_create(maximum_transmission_unit + sizeof(struct ether_header), 100); - server_memory_allocator = allocator_create(sizeof(SwiftNetServer), 10); - client_connection_memory_allocator = allocator_create(sizeof(SwiftNetClientConnection), 10); - listener_memory_allocator = allocator_create(sizeof(Listener), 100); + server_memory_allocator = allocator_create(sizeof(struct SwiftNetServer), 10); + client_connection_memory_allocator = allocator_create(sizeof(struct SwiftNetClientConnection), 10); + listener_memory_allocator = allocator_create(sizeof(struct Listener), 100); #ifdef SWIFT_NET_REQUESTS - requests_sent_memory_allocator = allocator_create(sizeof(RequestSent), 100); + requests_sent_memory_allocator = allocator_create(sizeof(struct RequestSent), 100); requests_sent = vector_create(100); #endif diff --git a/src/internal/check_existing_listener.c b/src/internal/check_existing_listener.c index 1046c51..9da0f79 100644 --- a/src/internal/check_existing_listener.c +++ b/src/internal/check_existing_listener.c @@ -1,10 +1,10 @@ #include "internal.h" -void* check_existing_listener(const char* interface_name, void* const connection, const ConnectionType connection_type, const bool loopback) { +void* check_existing_listener(const char* interface_name, void* const connection, const enum ConnectionType connection_type, const bool loopback) { vector_lock(&listeners); for (uint16_t i = 0; i < listeners.size; i++) { - Listener* const current_listener = vector_get(&listeners, i); + struct Listener* const current_listener = vector_get(&listeners, i); if (strcmp(interface_name, current_listener->interface_name) == 0) { if (connection_type == CONNECTION_TYPE_CLIENT) { vector_lock(¤t_listener->client_connections); @@ -26,7 +26,7 @@ void* check_existing_listener(const char* interface_name, void* const connection } } - Listener* const new_listener = allocator_allocate(&listener_memory_allocator); + struct Listener* const new_listener = allocator_allocate(&listener_memory_allocator); new_listener->servers = vector_create(10); new_listener->client_connections = vector_create(10); new_listener->pcap = swiftnet_pcap_open(interface_name); diff --git a/src/internal/datatype_allocator.c b/src/internal/datatype_allocator.c index dc06601..1763ca9 100644 --- a/src/internal/datatype_allocator.c +++ b/src/internal/datatype_allocator.c @@ -3,12 +3,12 @@ #include #include -static inline void free_stack_lock(SwiftNetMemoryAllocatorStack* const stack) { +static inline void free_stack_lock(struct SwiftNetMemoryAllocatorStack* const stack) { atomic_store_explicit(&stack->owner, ALLOCATOR_STACK_FREE, memory_order_release); } -SwiftNetMemoryAllocatorStack* const find_free_pointer_stack(const SwiftNetMemoryAllocator* const allocator) { - for (SwiftNetMemoryAllocatorStack* current_stack = atomic_load(&allocator->free_memory_pointers.first_item); current_stack != NULL; current_stack = atomic_load_explicit(¤t_stack->next, memory_order_acquire)) { +struct SwiftNetMemoryAllocatorStack* const find_free_pointer_stack(const struct SwiftNetMemoryAllocator* const allocator) { + for (struct SwiftNetMemoryAllocatorStack* current_stack = atomic_load(&allocator->free_memory_pointers.first_item); current_stack != NULL; current_stack = atomic_load_explicit(¤t_stack->next, memory_order_acquire)) { uint8_t thread_none = ALLOCATOR_STACK_FREE; if (!atomic_compare_exchange_strong_explicit( @@ -33,8 +33,8 @@ SwiftNetMemoryAllocatorStack* const find_free_pointer_stack(const SwiftNetMemory return NULL; } -SwiftNetMemoryAllocatorStack* const find_valid_pointer_stack(const SwiftNetMemoryAllocator* const allocator) { - for (SwiftNetMemoryAllocatorStack* current_stack = atomic_load(&allocator->free_memory_pointers.first_item); current_stack != NULL; current_stack = atomic_load_explicit(¤t_stack->next, memory_order_acquire)) { +struct SwiftNetMemoryAllocatorStack* const find_valid_pointer_stack(const struct SwiftNetMemoryAllocator* const allocator) { + for (struct SwiftNetMemoryAllocatorStack* current_stack = atomic_load(&allocator->free_memory_pointers.first_item); current_stack != NULL; current_stack = atomic_load_explicit(¤t_stack->next, memory_order_acquire)) { uint8_t thread_none = ALLOCATOR_STACK_FREE; if (!atomic_compare_exchange_strong_explicit(¤t_stack->owner, &thread_none, ALLOCATOR_STACK_OCCUPIED, memory_order_acquire, memory_order_relaxed)) { @@ -53,7 +53,7 @@ SwiftNetMemoryAllocatorStack* const find_valid_pointer_stack(const SwiftNetMemor return NULL; } -SwiftNetMemoryAllocator allocator_create(const uint32_t item_size, const uint32_t chunk_item_amount) { +struct SwiftNetMemoryAllocator allocator_create(const uint32_t item_size, const uint32_t chunk_item_amount) { void* const allocated_memory = malloc(item_size * chunk_item_amount); void* const stack_allocated_memory = malloc(chunk_item_amount * sizeof(void*)); @@ -62,7 +62,7 @@ SwiftNetMemoryAllocator allocator_create(const uint32_t item_size, const uint32_ exit(EXIT_FAILURE); } - SwiftNetMemoryAllocatorStack* const first_stack_pointers = malloc(sizeof(SwiftNetMemoryAllocatorStack)); + struct SwiftNetMemoryAllocatorStack* const first_stack_pointers = malloc(sizeof(struct SwiftNetMemoryAllocatorStack)); if (unlikely(first_stack_pointers == NULL)) { fprintf(stderr, "Failed to allocate memory\n"); exit(EXIT_FAILURE); @@ -74,7 +74,7 @@ SwiftNetMemoryAllocator allocator_create(const uint32_t item_size, const uint32_ first_stack_pointers->previous = NULL; first_stack_pointers->owner = ALLOCATOR_STACK_FREE; - SwiftNetMemoryAllocatorStack* const first_stack_data = malloc(sizeof(SwiftNetMemoryAllocatorStack)); + struct SwiftNetMemoryAllocatorStack* const first_stack_data = malloc(sizeof(struct SwiftNetMemoryAllocatorStack)); if (unlikely(first_stack_data == NULL)) { fprintf(stderr, "Failed to allocate memory\n"); exit(EXIT_FAILURE); @@ -85,12 +85,12 @@ SwiftNetMemoryAllocator allocator_create(const uint32_t item_size, const uint32_ first_stack_data->next = NULL; first_stack_data->previous = NULL; - SwiftNetMemoryAllocator new_allocator = (SwiftNetMemoryAllocator){ - .free_memory_pointers = (SwiftNetChunkStorageManager){ + struct SwiftNetMemoryAllocator new_allocator = (struct SwiftNetMemoryAllocator){ + .free_memory_pointers = (struct SwiftNetChunkStorageManager){ .first_item = first_stack_pointers, .last_item = first_stack_pointers, }, - .data = (SwiftNetChunkStorageManager){ + .data = (struct SwiftNetChunkStorageManager){ .first_item = first_stack_data, .last_item = first_stack_data, }, @@ -107,7 +107,7 @@ SwiftNetMemoryAllocator allocator_create(const uint32_t item_size, const uint32_ return new_allocator; } -static void create_new_stack(SwiftNetMemoryAllocator* const memory_allocator) { +static void create_new_stack(struct SwiftNetMemoryAllocator* const memory_allocator) { uint8_t creating_unlocked = STACK_CREATING_UNLOCKED; while (!atomic_compare_exchange_strong_explicit(&memory_allocator->creating_stack, &creating_unlocked, STACK_CREATING_LOCKED, memory_order_acquire, memory_order_relaxed)) { @@ -128,7 +128,7 @@ static void create_new_stack(SwiftNetMemoryAllocator* const memory_allocator) { exit(EXIT_FAILURE); } - SwiftNetMemoryAllocatorStack* const stack_pointers = malloc(sizeof(SwiftNetMemoryAllocatorStack)); + struct SwiftNetMemoryAllocatorStack* const stack_pointers = malloc(sizeof(struct SwiftNetMemoryAllocatorStack)); if (unlikely(stack_pointers == NULL)) { fprintf(stderr, "Failed to allocate memory\n"); exit(EXIT_FAILURE); @@ -140,7 +140,7 @@ static void create_new_stack(SwiftNetMemoryAllocator* const memory_allocator) { stack_pointers->next = NULL; stack_pointers->owner = ALLOCATOR_STACK_FREE; - SwiftNetMemoryAllocatorStack* const stack_data = malloc(sizeof(SwiftNetMemoryAllocatorStack)); + struct SwiftNetMemoryAllocatorStack* const stack_data = malloc(sizeof(struct SwiftNetMemoryAllocatorStack)); if (unlikely(stack_data == NULL)) { fprintf(stderr, "Failed to allocate memory\n"); exit(EXIT_FAILURE); @@ -155,17 +155,17 @@ static void create_new_stack(SwiftNetMemoryAllocator* const memory_allocator) { ((void **)stack_allocated_memory)[i] = (uint8_t*)allocated_memory + (i * item_size); } - atomic_store(&((SwiftNetMemoryAllocatorStack*)atomic_load(&memory_allocator->data.last_item))->next, stack_data); + atomic_store(&((struct SwiftNetMemoryAllocatorStack*)atomic_load(&memory_allocator->data.last_item))->next, stack_data); atomic_store(&memory_allocator->data.last_item, stack_data); - atomic_store(&((SwiftNetMemoryAllocatorStack*)atomic_load(&memory_allocator->free_memory_pointers.last_item))->next, stack_pointers); + atomic_store(&((struct SwiftNetMemoryAllocatorStack*)atomic_load(&memory_allocator->free_memory_pointers.last_item))->next, stack_pointers); atomic_store(&memory_allocator->free_memory_pointers.last_item, stack_pointers); atomic_store(&memory_allocator->creating_stack, STACK_CREATING_UNLOCKED); } -void* allocator_allocate(SwiftNetMemoryAllocator* const memory_allocator) { - SwiftNetMemoryAllocatorStack* const valid_stack = find_valid_pointer_stack(memory_allocator); +void* allocator_allocate(struct SwiftNetMemoryAllocator* const memory_allocator) { + struct SwiftNetMemoryAllocatorStack* const valid_stack = find_valid_pointer_stack(memory_allocator); if (valid_stack == NULL) { create_new_stack(memory_allocator); @@ -186,8 +186,8 @@ void* allocator_allocate(SwiftNetMemoryAllocator* const memory_allocator) { } #ifdef SWIFT_NET_DEBUG - static inline bool is_already_free(SwiftNetMemoryAllocator* const memory_allocator, void* const memory_location) { - /*for (SwiftNetMemoryAllocatorStack* restrict stack = memory_allocator->free_memory_pointers.first_item; stack != NULL; stack = stack->next) { + static inline bool is_already_free(struct SwiftNetMemoryAllocator* const memory_allocator, void* const memory_location) { + /*for (struct SwiftNetMemoryAllocatorStack* restrict stack = memory_allocator->free_memory_pointers.first_item; stack != NULL; stack = stack->next) { for (uint32_t i = 0; i < stack->size; i++) { if (*(((void**)stack->data) + i) == memory_location) { return true; @@ -199,7 +199,7 @@ void* allocator_allocate(SwiftNetMemoryAllocator* const memory_allocator) { } #endif -void allocator_free(SwiftNetMemoryAllocator* const memory_allocator, void* const memory_location) { +void allocator_free(struct SwiftNetMemoryAllocator* const memory_allocator, void* const memory_location) { #ifdef SWIFT_NET_DEBUG const bool already_free = is_already_free(memory_allocator, memory_location); @@ -209,7 +209,7 @@ void allocator_free(SwiftNetMemoryAllocator* const memory_allocator, void* const } #endif - SwiftNetMemoryAllocatorStack* const free_stack = find_free_pointer_stack(memory_allocator); + struct SwiftNetMemoryAllocatorStack* const free_stack = find_free_pointer_stack(memory_allocator); if (free_stack == NULL) { create_new_stack(memory_allocator); @@ -225,11 +225,11 @@ void allocator_free(SwiftNetMemoryAllocator* const memory_allocator, void* const free_stack_lock(free_stack); } -void allocator_destroy(SwiftNetMemoryAllocator* const memory_allocator) { - for (SwiftNetMemoryAllocatorStack* current_stack_pointers = atomic_load(&memory_allocator->free_memory_pointers.first_item); ; ) { +void allocator_destroy(struct SwiftNetMemoryAllocator* const memory_allocator) { + for (struct SwiftNetMemoryAllocatorStack* current_stack_pointers = atomic_load(&memory_allocator->free_memory_pointers.first_item); ; ) { free(current_stack_pointers->data); - SwiftNetMemoryAllocatorStack* const next_stack = atomic_load(¤t_stack_pointers->next); + struct SwiftNetMemoryAllocatorStack* const next_stack = atomic_load(¤t_stack_pointers->next); if (next_stack == NULL) { free(current_stack_pointers); break; @@ -241,10 +241,10 @@ void allocator_destroy(SwiftNetMemoryAllocator* const memory_allocator) { } - for (SwiftNetMemoryAllocatorStack* current_stack_data = atomic_load(&memory_allocator->data.first_item); ; ) { + for (struct SwiftNetMemoryAllocatorStack* current_stack_data = atomic_load(&memory_allocator->data.first_item); ; ) { free(current_stack_data->data); - SwiftNetMemoryAllocatorStack* const next_stack = atomic_load(¤t_stack_data->next); + struct SwiftNetMemoryAllocatorStack* const next_stack = atomic_load(¤t_stack_data->next); if (next_stack == NULL) { free(current_stack_data); break; diff --git a/src/internal/datatype_vector.c b/src/internal/datatype_vector.c index 0ecbc3a..4411b0c 100644 --- a/src/internal/datatype_vector.c +++ b/src/internal/datatype_vector.c @@ -2,25 +2,25 @@ #include #include -void vector_lock(SwiftNetVector* const vector) { +void vector_lock(struct SwiftNetVector* const vector) { uint8_t owner_none = 0; while(!atomic_compare_exchange_strong_explicit(&vector->locked, &owner_none, UINT8_MAX, memory_order_acquire, memory_order_relaxed)) { owner_none = 0; } } -void vector_unlock(SwiftNetVector* const vector) { +void vector_unlock(struct SwiftNetVector* const vector) { atomic_store_explicit(&vector->locked, 0, memory_order_release); } -SwiftNetVector vector_create(const uint32_t starting_amount) { +struct SwiftNetVector vector_create(const uint32_t starting_amount) { void* const data_ptr = malloc(sizeof(void*) * starting_amount); if (unlikely(data_ptr == NULL)) { fprintf(stderr, "Failed to malloc\n"); exit(EXIT_FAILURE); } - const SwiftNetVector new_vector = { + const struct SwiftNetVector new_vector = { .size = 0, .capacity = starting_amount, .data = data_ptr, @@ -30,11 +30,11 @@ SwiftNetVector vector_create(const uint32_t starting_amount) { return new_vector; } -void vector_destroy(SwiftNetVector* const vector) { +void vector_destroy(struct SwiftNetVector* const vector) { free(vector->data); } -void vector_push(SwiftNetVector* const vector, void* const data) { +void vector_push(struct SwiftNetVector* const vector, void* const data) { const uint32_t size = vector->size; const uint32_t capacity = vector->capacity; @@ -57,7 +57,7 @@ void vector_push(SwiftNetVector* const vector, void* const data) { vector->size++; } -void vector_remove(SwiftNetVector* const vector, const uint32_t index) { +void vector_remove(struct SwiftNetVector* const vector, const uint32_t index) { if (index < vector->size - 1) { memmove( ((void**)vector->data) + index, @@ -69,7 +69,7 @@ void vector_remove(SwiftNetVector* const vector, const uint32_t index) { vector->size--; } -void* vector_get(SwiftNetVector* const vector, const uint32_t index) { +void* vector_get(struct SwiftNetVector* const vector, const uint32_t index) { void** const data_ptr = ((void**)vector->data) + index; return *data_ptr; diff --git a/src/internal/internal.h b/src/internal/internal.h index d9921d7..638e9c4 100644 --- a/src/internal/internal.h +++ b/src/internal/internal.h @@ -23,7 +23,7 @@ #define REQUEST_LOST_PACKETS_RETURN_COMPLETED_PACKET 0x01 #define PACKET_PREPEND_SIZE(addr_type) ((addr_type == DLT_NULL) ? sizeof(uint32_t) : addr_type == DLT_EN10MB ? sizeof(struct ether_header) : 0) -#define PACKET_HEADER_SIZE (sizeof(struct ip) + sizeof(SwiftNetPacketInfo)) +#define PACKET_HEADER_SIZE (sizeof(struct ip) + sizeof(struct SwiftNetPacketInfo)) #define HANDLE_PACKET_CONSTRUCTION(ip_header, packet_info, addr_type, eth_hdr, buffer_size, buffer_name) \ uint8_t buffer_name[buffer_size]; \ if(addr_type == DLT_NULL) { \ @@ -102,22 +102,22 @@ static inline uint16_t crc16(const uint8_t *data, size_t length) { return crc ^ 0xFFFF; } -typedef struct { +struct Listener { pcap_t* pcap; char interface_name[IFNAMSIZ]; - SwiftNetVector servers; - SwiftNetVector client_connections; + struct SwiftNetVector servers; + struct SwiftNetVector client_connections; pthread_t listener_thread; bool loopback; uint16_t addr_type; -} Listener; +}; -typedef enum { +enum ConnectionType { CONNECTION_TYPE_SERVER, CONNECTION_TYPE_CLIENT -} ConnectionType; +}; -extern SwiftNetVector listeners; +extern struct SwiftNetVector listeners; extern int get_default_interface_and_mac(char *restrict interface_name, uint32_t interface_name_length, uint8_t mac_out[6], int sockfd); extern const uint32_t get_mtu(const char* restrict const interface, const int sockfd); @@ -137,12 +137,12 @@ extern char default_network_interface[SIZEOF_FIELD(struct ifreq, ifr_name)]; extern pcap_t* swiftnet_pcap_open(const char* interface); extern int swiftnet_pcap_send(pcap_t *pcap, const uint8_t *data, int len); -extern void* check_existing_listener(const char* interface_name, void* const connection, const ConnectionType connection_type, const bool loopback); +extern void* check_existing_listener(const char* interface_name, void* const connection, const enum ConnectionType connection_type, const bool loopback); #ifdef SWIFT_NET_DEBUG - extern SwiftNetDebugger debugger; + extern struct SwiftNetDebugger debugger; - static inline bool check_debug_flag(SwiftNetDebugFlags flag) { + static inline bool check_debug_flag(enum SwiftNetDebugFlags flag) { return (debugger.flags & flag) != 0; } @@ -173,67 +173,67 @@ extern void* check_existing_listener(const char* interface_name, void* const con #define ALLOCATOR_STACK_OCCUPIED 1 #define ALLOCATOR_STACK_FREE 0 -extern SwiftNetMemoryAllocator allocator_create(const uint32_t item_size, const uint32_t chunk_item_amount); -extern void* allocator_allocate(SwiftNetMemoryAllocator* const memory_allocator); -extern void allocator_free(SwiftNetMemoryAllocator* const memory_allocator, void* const memory_location); -extern void allocator_destroy(SwiftNetMemoryAllocator* const memory_allocator); +extern struct SwiftNetMemoryAllocator allocator_create(const uint32_t item_size, const uint32_t chunk_item_amount); +extern void* allocator_allocate(struct SwiftNetMemoryAllocator* const memory_allocator); +extern void allocator_free(struct SwiftNetMemoryAllocator* const memory_allocator, void* const memory_location); +extern void allocator_destroy(struct SwiftNetMemoryAllocator* const memory_allocator); -extern SwiftNetMemoryAllocator packet_queue_node_memory_allocator; -extern SwiftNetMemoryAllocator packet_callback_queue_node_memory_allocator; -extern SwiftNetMemoryAllocator server_packet_data_memory_allocator; -extern SwiftNetMemoryAllocator client_packet_data_memory_allocator; -extern SwiftNetMemoryAllocator packet_buffer_memory_allocator; -extern SwiftNetMemoryAllocator server_memory_allocator; -extern SwiftNetMemoryAllocator client_connection_memory_allocator; -extern SwiftNetMemoryAllocator listener_memory_allocator; +extern struct SwiftNetMemoryAllocator packet_queue_node_memory_allocator; +extern struct SwiftNetMemoryAllocator packet_callback_queue_node_memory_allocator; +extern struct SwiftNetMemoryAllocator server_packet_data_memory_allocator; +extern struct SwiftNetMemoryAllocator client_packet_data_memory_allocator; +extern struct SwiftNetMemoryAllocator packet_buffer_memory_allocator; +extern struct SwiftNetMemoryAllocator server_memory_allocator; +extern struct SwiftNetMemoryAllocator client_connection_memory_allocator; +extern struct SwiftNetMemoryAllocator listener_memory_allocator; extern void* interface_start_listening(void* listener_void); -extern void* vector_get(SwiftNetVector* const vector, const uint32_t index); -extern void vector_remove(SwiftNetVector* const vector, const uint32_t index); -extern void vector_push(SwiftNetVector* const vector, void* const data); -extern void vector_destroy(SwiftNetVector* const vector); -extern SwiftNetVector vector_create(const uint32_t starting_amount); -extern void vector_lock(SwiftNetVector* const vector); -extern void vector_unlock(SwiftNetVector* const vector); +extern void* vector_get(struct SwiftNetVector* const vector, const uint32_t index); +extern void vector_remove(struct SwiftNetVector* const vector, const uint32_t index); +extern void vector_push(struct SwiftNetVector* const vector, void* const data); +extern void vector_destroy(struct SwiftNetVector* const vector); +extern struct SwiftNetVector vector_create(const uint32_t starting_amount); +extern void vector_lock(struct SwiftNetVector* const vector); +extern void vector_unlock(struct SwiftNetVector* const vector); extern void* server_start_pcap(void* server_void); extern void* client_start_pcap(void* client_void); #ifdef SWIFT_NET_REQUESTS - typedef struct { + struct RequestSent { uint16_t packet_id; struct in_addr address; _Atomic(void*) packet_data; - } RequestSent; + }; - extern SwiftNetMemoryAllocator requests_sent_memory_allocator; - extern SwiftNetVector requests_sent; + extern struct SwiftNetMemoryAllocator requests_sent_memory_allocator; + extern struct SwiftNetVector requests_sent; #endif extern void swiftnet_send_packet( const void* const connection, const uint32_t target_maximum_transmission_unit, - const SwiftNetPortInfo port_info, - const SwiftNetPacketBuffer* const packet, + const struct SwiftNetPortInfo port_info, + const struct SwiftNetPacketBuffer* const packet, const uint32_t packet_length, const struct in_addr* const target_addr, - SwiftNetVector* const packets_sending, - SwiftNetMemoryAllocator* const packets_sending_memory_allocator, + struct SwiftNetVector* const packets_sending, + struct SwiftNetMemoryAllocator* const packets_sending_memory_allocator, pcap_t* const pcap, const struct ether_header eth_hdr, const bool loopback, const uint16_t addr_type, const uint8_t prepend_size #ifdef SWIFT_NET_REQUESTS - , RequestSent* const request_sent + , struct RequestSent* const request_sent , const bool response , const uint16_t request_packet_id #endif ); -static inline SwiftNetPacketInfo construct_packet_info(const uint32_t packet_length, const uint8_t packet_type, const uint32_t chunk_amount, const uint32_t chunk_index, const SwiftNetPortInfo port_info) { - return (SwiftNetPacketInfo){ +static inline struct SwiftNetPacketInfo construct_packet_info(const uint32_t packet_length, const uint8_t packet_type, const uint32_t chunk_amount, const uint32_t chunk_index, const struct SwiftNetPortInfo port_info) { + return (struct SwiftNetPacketInfo){ .packet_length = packet_length, .packet_type = packet_type, .chunk_amount = chunk_amount, diff --git a/src/make_request.c b/src/make_request.c index 3c1f3c7..2f099a4 100644 --- a/src/make_request.c +++ b/src/make_request.c @@ -7,8 +7,8 @@ #ifdef SWIFT_NET_REQUESTS -SwiftNetClientPacketData* swiftnet_client_make_request(SwiftNetClientConnection* const client, SwiftNetPacketBuffer* const packet, const uint32_t timeout_ms) { - RequestSent* const request_sent = allocator_allocate(&requests_sent_memory_allocator); +struct SwiftNetClientPacketData* swiftnet_client_make_request(struct SwiftNetClientConnection* const client, struct SwiftNetPacketBuffer* const packet, const uint32_t timeout_ms) { + struct RequestSent* const request_sent = allocator_allocate(&requests_sent_memory_allocator); request_sent->packet_data = NULL; request_sent->address = client->server_addr; @@ -42,7 +42,7 @@ SwiftNetClientPacketData* swiftnet_client_make_request(SwiftNetClientConnection* } if (atomic_load_explicit(&request_sent->packet_data, memory_order_acquire) != NULL) { - SwiftNetClientPacketData* const packet_data = request_sent->packet_data; + struct SwiftNetClientPacketData* const packet_data = request_sent->packet_data; allocator_free(&requests_sent_memory_allocator, request_sent); @@ -53,14 +53,14 @@ SwiftNetClientPacketData* swiftnet_client_make_request(SwiftNetClientConnection* } } -SwiftNetServerPacketData* swiftnet_server_make_request(SwiftNetServer* const server, SwiftNetPacketBuffer* const packet, const SwiftNetClientAddrData addr_data, const uint32_t timeout_ms) { - RequestSent* const request_sent = allocator_allocate(&requests_sent_memory_allocator); +struct SwiftNetServerPacketData* swiftnet_server_make_request(struct SwiftNetServer* const server, struct SwiftNetPacketBuffer* const packet, const struct SwiftNetClientAddrData addr_data, const uint32_t timeout_ms) { + struct RequestSent* const request_sent = allocator_allocate(&requests_sent_memory_allocator); request_sent->packet_data = NULL; request_sent->address = addr_data.sender_address; const uint32_t packet_length = packet->packet_append_pointer - packet->packet_data_start; - const SwiftNetPortInfo port_info = { + const struct SwiftNetPortInfo port_info = { .destination_port = addr_data.port, .source_port = server->server_port }; @@ -69,7 +69,7 @@ SwiftNetServerPacketData* swiftnet_server_make_request(SwiftNetServer* const ser while (1) { if (request_sent->packet_data != NULL) { - SwiftNetServerPacketData* const packet_data = request_sent->packet_data; + struct SwiftNetServerPacketData* const packet_data = request_sent->packet_data; allocator_free(&requests_sent_memory_allocator, (void*)request_sent); diff --git a/src/make_response.c b/src/make_response.c index c82cb9c..089dc97 100644 --- a/src/make_response.c +++ b/src/make_response.c @@ -3,16 +3,16 @@ #ifdef SWIFT_NET_REQUESTS -void swiftnet_client_make_response(SwiftNetClientConnection* const client, SwiftNetClientPacketData* const packet_data, SwiftNetPacketBuffer* const buffer) { +void swiftnet_client_make_response(struct SwiftNetClientConnection* const client, struct SwiftNetClientPacketData* const packet_data, struct SwiftNetPacketBuffer* const buffer) { const uint32_t packet_length = buffer->packet_append_pointer - buffer->packet_data_start; swiftnet_send_packet(client, client->maximum_transmission_unit, client->port_info, buffer, packet_length, &client->server_addr, &client->packets_sending, &client->packets_sending_memory_allocator, client->pcap, client->eth_header, client->loopback, client->addr_type, client->prepend_size, NULL, true, packet_data->metadata.packet_id); } -void swiftnet_server_make_response(SwiftNetServer* const server, SwiftNetServerPacketData* const packet_data, SwiftNetPacketBuffer* const buffer) { +void swiftnet_server_make_response(struct SwiftNetServer* const server, struct SwiftNetServerPacketData* const packet_data, struct SwiftNetPacketBuffer* const buffer) { const uint32_t packet_length = buffer->packet_append_pointer - buffer->packet_data_start; - const SwiftNetPortInfo port_info = { + const struct SwiftNetPortInfo port_info = { .source_port = server->server_port, .destination_port = packet_data->metadata.port_info.source_port }; diff --git a/src/process_packets.c b/src/process_packets.c index 9e20a92..5027da1 100644 --- a/src/process_packets.c +++ b/src/process_packets.c @@ -22,17 +22,17 @@ static inline bool is_private_ip(struct in_addr ip) { uint8_t octet3 = (addr >> 8) & 0xFF; uint8_t octet4 = addr & 0xFF; - return !(octet1 == 192 && octet2 == 168 && octet3 == 1) == false && (octet1 == 127 && octet2 == 0 && octet3 == 0); + return !(octet1 == 192 && octet2 == 168) == false && (octet1 == 127 && octet2 == 0 && octet3 == 0); } -static inline void lock_packet_sending(SwiftNetPacketSending* const packet_sending) { +static inline void lock_packet_sending(struct SwiftNetPacketSending* const packet_sending) { bool locked = false; while(!atomic_compare_exchange_strong_explicit(&packet_sending->locked, &locked, true, memory_order_acquire, memory_order_relaxed)) { locked = false; } } -static inline void unlock_packet_sending(SwiftNetPacketSending* const packet_sending) { +static inline void unlock_packet_sending(struct SwiftNetPacketSending* const packet_sending) { atomic_store_explicit(&packet_sending->locked, false, memory_order_release); } @@ -82,8 +82,8 @@ static inline const uint32_t return_lost_chunk_indexes(const uint8_t* const chun return offset; } -static inline void packet_completed(const uint16_t packet_id, const uint32_t packet_length, SwiftNetVector* const packets_completed_history, SwiftNetMemoryAllocator* const packets_completed_history_memory_allocator) { - SwiftNetPacketCompleted* const new_packet_completed = allocator_allocate(packets_completed_history_memory_allocator); +static inline void packet_completed(const uint16_t packet_id, const uint32_t packet_length, struct SwiftNetVector* const packets_completed_history, struct SwiftNetMemoryAllocator* const packets_completed_history_memory_allocator) { + struct SwiftNetPacketCompleted* const new_packet_completed = allocator_allocate(packets_completed_history_memory_allocator); new_packet_completed->packet_id = packet_id; new_packet_completed->packet_length = packet_length; @@ -96,11 +96,11 @@ static inline void packet_completed(const uint16_t packet_id, const uint32_t pac return; } -static inline bool check_packet_already_completed(const uint16_t packet_id, SwiftNetVector* const packets_completed_history) { +static inline bool check_packet_already_completed(const uint16_t packet_id, struct SwiftNetVector* const packets_completed_history) { vector_lock(packets_completed_history); for(uint32_t i = 0; i < packets_completed_history->size; i++) { - if(((const SwiftNetPacketCompleted* restrict const)vector_get((SwiftNetVector*)packets_completed_history, i))->packet_id == packet_id) { + if(((const struct SwiftNetPacketCompleted* const)vector_get((struct SwiftNetVector*)packets_completed_history, i))->packet_id == packet_id) { vector_unlock(packets_completed_history); return true; @@ -112,25 +112,25 @@ static inline bool check_packet_already_completed(const uint16_t packet_id, Swif return false; } -static inline SwiftNetPendingMessage* const get_pending_message(const SwiftNetPacketInfo* const restrict packet_info, SwiftNetVector* const pending_messages_vector, const ConnectionType connection_type, const struct in_addr sender_address, const uint16_t packet_id) { +static inline struct SwiftNetPendingMessage* const get_pending_message(const struct SwiftNetPacketInfo* const restrict packet_info, struct SwiftNetVector* const pending_messages_vector, const enum ConnectionType connection_type, const struct in_addr sender_address, const uint16_t packet_id) { vector_lock(pending_messages_vector); for(uint32_t i = 0; i < pending_messages_vector->size; i++) { - SwiftNetPendingMessage* const current_pending_message = vector_get((SwiftNetVector*)pending_messages_vector, i); + struct SwiftNetPendingMessage* const current_pending_message = vector_get((struct SwiftNetVector*)pending_messages_vector, i); if((connection_type == CONNECTION_TYPE_CLIENT && current_pending_message->packet_id == packet_id) || (connection_type == CONNECTION_TYPE_SERVER && current_pending_message->sender_address.s_addr == sender_address.s_addr && current_pending_message->packet_id == packet_id)) { - vector_unlock((SwiftNetVector*)pending_messages_vector); + vector_unlock((struct SwiftNetVector*)pending_messages_vector); return current_pending_message; } } - vector_unlock((SwiftNetVector*)pending_messages_vector); + vector_unlock((struct SwiftNetVector*)pending_messages_vector); return NULL; } -static inline void insert_callback_queue_node(PacketCallbackQueueNode* const new_node, PacketCallbackQueue* const packet_queue) { +static inline void insert_callback_queue_node(struct PacketCallbackQueueNode* const new_node, struct PacketCallbackQueue* const packet_queue) { if(unlikely(new_node == NULL)) { return; } @@ -159,13 +159,13 @@ static inline void insert_callback_queue_node(PacketCallbackQueueNode* const new #ifdef SWIFT_NET_REQUESTS -static inline void handle_request_response(const uint16_t packet_id, const struct in_addr sender, SwiftNetPendingMessage* const pending_message, void* const packet_data, SwiftNetVector* const pending_messages, SwiftNetMemoryAllocator* const pending_message_memory_allocator, const ConnectionType connection_type, const bool loopback) { +static inline void handle_request_response(const uint16_t packet_id, const struct in_addr sender, struct SwiftNetPendingMessage* const pending_message, void* const packet_data, struct SwiftNetVector* const pending_messages, struct SwiftNetMemoryAllocator* const pending_message_memory_allocator, const enum ConnectionType connection_type, const bool loopback) { bool is_valid_response = false; vector_lock(&requests_sent); for (uint32_t i = 0; i < requests_sent.size; i++) { - RequestSent* const current_request_sent = vector_get(&requests_sent, i); + struct RequestSent* const current_request_sent = vector_get(&requests_sent, i); if (current_request_sent == NULL) { continue; @@ -195,7 +195,7 @@ static inline void handle_request_response(const uint16_t packet_id, const struc vector_lock(pending_messages); for (uint32_t i = 0; i < pending_messages->size; i++) { - const SwiftNetPendingMessage* const current_pending_message = vector_get(pending_messages, i); + const struct SwiftNetPendingMessage* const current_pending_message = vector_get(pending_messages, i); if (current_pending_message == pending_message) { vector_remove(pending_messages, i); } @@ -210,9 +210,9 @@ static inline void handle_request_response(const uint16_t packet_id, const struc #endif -static inline void pass_callback_execution(void* const packet_data, PacketCallbackQueue* const queue, SwiftNetPendingMessage* const pending_message, const uint16_t packet_id +static inline void pass_callback_execution(void* const packet_data, struct PacketCallbackQueue* const queue, struct SwiftNetPendingMessage* const pending_message, const uint16_t packet_id ) { - PacketCallbackQueueNode* const node = allocator_allocate(&packet_callback_queue_node_memory_allocator); + struct PacketCallbackQueueNode* const node = allocator_allocate(&packet_callback_queue_node_memory_allocator); node->packet_data = packet_data; node->next = NULL; node->pending_message = pending_message; @@ -231,8 +231,8 @@ static inline void chunk_received(uint8_t* const chunks_received, const uint32_t chunks_received[byte] |= 1 << bit; } -static inline SwiftNetPendingMessage* const create_new_pending_message(SwiftNetVector* const pending_messages, SwiftNetMemoryAllocator* const pending_messages_memory_allocator, const SwiftNetPacketInfo* const restrict packet_info, const ConnectionType connection_type, const struct in_addr sender_address, const uint16_t packet_id) { - SwiftNetPendingMessage* const new_pending_message = allocator_allocate(pending_messages_memory_allocator); +static inline struct SwiftNetPendingMessage* const create_new_pending_message(struct SwiftNetVector* const pending_messages, struct SwiftNetMemoryAllocator* const pending_messages_memory_allocator, const struct SwiftNetPacketInfo* const restrict packet_info, const enum ConnectionType connection_type, const struct in_addr sender_address, const uint16_t packet_id) { + struct SwiftNetPendingMessage* const new_pending_message = allocator_allocate(pending_messages_memory_allocator); uint8_t* const allocated_memory = malloc(packet_info->packet_length); @@ -254,18 +254,18 @@ static inline SwiftNetPendingMessage* const create_new_pending_message(SwiftNetV vector_lock(pending_messages); - vector_push((SwiftNetVector*)pending_messages, new_pending_message); + vector_push((struct SwiftNetVector*)pending_messages, new_pending_message); vector_unlock(pending_messages); return new_pending_message; } -static inline SwiftNetPacketSending* const get_packet_sending(SwiftNetVector* const packet_sending_array, const uint16_t target_id) { +static inline struct SwiftNetPacketSending* const get_packet_sending(struct SwiftNetVector* const packet_sending_array, const uint16_t target_id) { vector_lock(packet_sending_array); for(uint32_t i = 0; i < packet_sending_array->size; i++) { - SwiftNetPacketSending* const current_packet_sending = vector_get((SwiftNetVector*)packet_sending_array, i); + struct SwiftNetPacketSending* const current_packet_sending = vector_get((struct SwiftNetVector*)packet_sending_array, i); if(current_packet_sending->packet_id == target_id) { vector_unlock(packet_sending_array); @@ -279,7 +279,7 @@ static inline SwiftNetPacketSending* const get_packet_sending(SwiftNetVector* co return NULL; } -PacketQueueNode* const wait_for_next_packet(PacketQueue* const packet_queue) { +struct PacketQueueNode* const wait_for_next_packet(struct PacketQueue* const packet_queue) { uint32_t owner_none = PACKET_QUEUE_OWNER_NONE; while(!atomic_compare_exchange_strong_explicit(&packet_queue->owner, &owner_none, PACKET_QUEUE_OWNER_PROCESS_PACKETS, memory_order_acquire, memory_order_relaxed)) { owner_none = PACKET_QUEUE_OWNER_NONE; @@ -290,7 +290,7 @@ PacketQueueNode* const wait_for_next_packet(PacketQueue* const packet_queue) { return NULL; } - PacketQueueNode* const node_to_process = packet_queue->first_node; + struct PacketQueueNode* const node_to_process = packet_queue->first_node; if(node_to_process->next == NULL) { packet_queue->first_node = NULL; @@ -323,15 +323,15 @@ static inline void swiftnet_process_packets( const uint16_t source_port, const bool loopback, const uint16_t addr_type, - SwiftNetVector* const packets_sending, - SwiftNetMemoryAllocator* const packets_sending_messages_memory_allocator, - SwiftNetVector* const pending_messages, - SwiftNetMemoryAllocator* const pending_messages_memory_allocator, - SwiftNetVector* const packets_completed_history, - SwiftNetMemoryAllocator* const packets_completed_history_memory_allocator, - ConnectionType connection_type, - PacketQueue* const packet_queue, - PacketCallbackQueue* const packet_callback_queue, + struct SwiftNetVector* const packets_sending, + struct SwiftNetMemoryAllocator* const packets_sending_messages_memory_allocator, + struct SwiftNetVector* const pending_messages, + struct SwiftNetMemoryAllocator* const pending_messages_memory_allocator, + struct SwiftNetVector* const packets_completed_history, + struct SwiftNetMemoryAllocator* const packets_completed_history_memory_allocator, + enum ConnectionType connection_type, + struct PacketQueue* const packet_queue, + struct PacketCallbackQueue* const packet_callback_queue, void* const connection, _Atomic bool* closing, const uint8_t prepend_size @@ -341,7 +341,7 @@ static inline void swiftnet_process_packets( break; } - PacketQueueNode* const node = wait_for_next_packet(packet_queue); + struct PacketQueueNode* const node = wait_for_next_packet(packet_queue); if(node == NULL) { continue; } @@ -374,7 +374,7 @@ static inline void swiftnet_process_packets( struct ip ip_header; memcpy(&ip_header, packet_buffer + prepend_size, sizeof(ip_header)); - SwiftNetPacketInfo packet_info; + struct SwiftNetPacketInfo packet_info; memcpy(&packet_info, packet_buffer + prepend_size + sizeof(ip_header), sizeof(packet_info)); // Check if the packet is meant to be for this server @@ -415,18 +415,18 @@ static inline void swiftnet_process_packets( { const struct ip send_server_info_ip_header = construct_ip_header(node->sender_address, PACKET_HEADER_SIZE, rand()); - const SwiftNetPacketInfo packet_info_new = construct_packet_info( - sizeof(SwiftNetServerInformation), + const struct SwiftNetPacketInfo packet_info_new = construct_packet_info( + sizeof(struct SwiftNetServerInformation), PACKET_TYPE_REQUEST_INFORMATION, 1, 0, - (SwiftNetPortInfo){ + (struct SwiftNetPortInfo){ .source_port = source_port, .destination_port = packet_info.port_info.source_port } ); - const SwiftNetServerInformation server_info = { + const struct SwiftNetServerInformation server_info = { .maximum_transmission_unit = maximum_transmission_unit }; @@ -446,18 +446,18 @@ static inline void swiftnet_process_packets( { const uint32_t mtu = MIN(packet_info.maximum_transmission_unit, maximum_transmission_unit); - SwiftNetPendingMessage* const pending_message = get_pending_message(&packet_info, pending_messages, connection_type, ip_header.ip_src, ip_header.ip_id); + struct SwiftNetPendingMessage* const pending_message = get_pending_message(&packet_info, pending_messages, connection_type, ip_header.ip_src, ip_header.ip_id); if(pending_message == NULL) { const bool packet_already_completed = check_packet_already_completed(ip_header.ip_id, packets_completed_history); if(likely(packet_already_completed == true)) { const struct ip send_packet_ip_header = construct_ip_header(node->sender_address, PACKET_HEADER_SIZE, ip_header.ip_id); - SwiftNetPacketInfo send_packet_info = construct_packet_info( + struct SwiftNetPacketInfo send_packet_info = construct_packet_info( 0x00, PACKET_TYPE_SUCCESSFULLY_RECEIVED_PACKET, 1, 0, - (SwiftNetPortInfo){ + (struct SwiftNetPortInfo){ .destination_port = packet_info.port_info.source_port, .source_port = packet_info.port_info.destination_port } @@ -481,24 +481,24 @@ static inline void swiftnet_process_packets( struct ip send_lost_packets_ip_header = construct_ip_header(node->sender_address, 0, ip_header.ip_id); - SwiftNetPacketInfo packet_info_new = construct_packet_info( + struct SwiftNetPacketInfo packet_info_new = construct_packet_info( 0, PACKET_TYPE_SEND_LOST_PACKETS_RESPONSE, 1, 0, - (SwiftNetPortInfo){ + (struct SwiftNetPortInfo){ .destination_port = packet_info.port_info.source_port, .source_port = packet_info.port_info.destination_port } ); - const uint16_t header_size = sizeof(struct ip) + sizeof(SwiftNetPacketInfo) + prepend_size; + const uint16_t header_size = sizeof(struct ip) + sizeof(struct SwiftNetPacketInfo) + prepend_size; HANDLE_PACKET_CONSTRUCTION(&send_lost_packets_ip_header, &packet_info_new, addr_type, ð_hdr, mtu + prepend_size, buffer) const uint16_t lost_chunk_indexes = return_lost_chunk_indexes(pending_message->chunks_received, pending_message->packet_info.chunk_amount, mtu - PACKET_HEADER_SIZE, (uint32_t*)(buffer + header_size)); - const uint16_t packet_length = sizeof(struct ip) + sizeof(SwiftNetPacketInfo) + (lost_chunk_indexes * sizeof(uint32_t)); + const uint16_t packet_length = sizeof(struct ip) + sizeof(struct SwiftNetPacketInfo) + (lost_chunk_indexes * sizeof(uint32_t)); const uint16_t packet_length_net_order = htons(packet_length); memcpy(buffer + prepend_size + offsetof(struct ip, ip_len), &packet_length_net_order, SIZEOF_FIELD(struct ip, ip_len)); @@ -513,7 +513,7 @@ static inline void swiftnet_process_packets( } case PACKET_TYPE_SEND_LOST_PACKETS_RESPONSE: { - SwiftNetPacketSending* const target_packet_sending = get_packet_sending(packets_sending, ip_header.ip_id); + struct SwiftNetPacketSending* const target_packet_sending = get_packet_sending(packets_sending, ip_header.ip_id); if(unlikely(target_packet_sending == NULL)) { allocator_free(&packet_buffer_memory_allocator, packet_buffer); @@ -543,7 +543,7 @@ static inline void swiftnet_process_packets( } case PACKET_TYPE_SUCCESSFULLY_RECEIVED_PACKET: { - SwiftNetPacketSending* const target_packet_sending = get_packet_sending(packets_sending, ip_header.ip_id); + struct SwiftNetPacketSending* const target_packet_sending = get_packet_sending(packets_sending, ip_header.ip_id); if(unlikely(target_packet_sending == NULL)) { allocator_free(&packet_buffer_memory_allocator, packet_buffer); @@ -561,7 +561,7 @@ static inline void swiftnet_process_packets( break; } - const SwiftNetClientAddrData sender = { + const struct SwiftNetClientAddrData sender = { .sender_address.s_addr = loopback == true ? inet_addr("127.0.0.1") : node->sender_address.s_addr, .maximum_transmission_unit = packet_info.maximum_transmission_unit, .port = packet_info.port_info.source_port @@ -570,12 +570,12 @@ static inline void swiftnet_process_packets( const uint32_t mtu = MIN(packet_info.maximum_transmission_unit, maximum_transmission_unit); const uint32_t chunk_data_size = mtu - PACKET_HEADER_SIZE; - SwiftNetPendingMessage* const pending_message = get_pending_message(&packet_info, pending_messages, connection_type, node->sender_address, ip_header.ip_id); + struct SwiftNetPendingMessage* const pending_message = get_pending_message(&packet_info, pending_messages, connection_type, node->sender_address, ip_header.ip_id); if(pending_message == NULL) { if(packet_info.packet_length > chunk_data_size) { // Split packet into chunks - SwiftNetPendingMessage* const new_pending_message = create_new_pending_message(pending_messages, pending_messages_memory_allocator, &packet_info, connection_type, node->sender_address, ip_header.ip_id); + struct SwiftNetPendingMessage* const new_pending_message = create_new_pending_message(pending_messages, pending_messages_memory_allocator, &packet_info, connection_type, node->sender_address, ip_header.ip_id); new_pending_message->chunks_received_number++; @@ -590,11 +590,11 @@ static inline void swiftnet_process_packets( packet_completed(ip_header.ip_id, packet_info.packet_length, packets_completed_history, packets_completed_history_memory_allocator); if(connection_type == CONNECTION_TYPE_SERVER) { - SwiftNetServerPacketData* const new_packet_data = allocator_allocate(&server_packet_data_memory_allocator) ; + struct SwiftNetServerPacketData* const new_packet_data = allocator_allocate(&server_packet_data_memory_allocator) ; new_packet_data->data = packet_data; new_packet_data->current_pointer = packet_data; new_packet_data->internal_pending_message = NULL; - new_packet_data->metadata = (SwiftNetPacketServerMetadata){ + new_packet_data->metadata = (struct SwiftNetPacketServerMetadata){ .port_info = packet_info.port_info, .sender = sender, .data_length = packet_info.packet_length, @@ -614,11 +614,11 @@ static inline void swiftnet_process_packets( pass_callback_execution(new_packet_data, packet_callback_queue, NULL, ip_header.ip_id); #endif } else { - SwiftNetClientPacketData* const new_packet_data = allocator_allocate(&client_packet_data_memory_allocator) ; + struct SwiftNetClientPacketData* const new_packet_data = allocator_allocate(&client_packet_data_memory_allocator) ; new_packet_data->data = packet_data; new_packet_data->current_pointer = packet_data; new_packet_data->internal_pending_message = NULL; - new_packet_data->metadata = (SwiftNetPacketClientMetadata){ + new_packet_data->metadata = (struct SwiftNetPacketClientMetadata){ .port_info = packet_info.port_info, .data_length = packet_info.packet_length, .packet_id = ip_header.ip_id @@ -629,7 +629,7 @@ static inline void swiftnet_process_packets( #ifdef SWIFT_NET_REQUESTS if (packet_info.packet_type == PACKET_TYPE_RESPONSE) { - handle_request_response(ip_header.ip_id, ((SwiftNetClientConnection*)connection)->server_addr, NULL, new_packet_data, pending_messages, pending_messages_memory_allocator, connection_type, loopback); + handle_request_response(ip_header.ip_id, ((struct SwiftNetClientConnection*)connection)->server_addr, NULL, new_packet_data, pending_messages, pending_messages_memory_allocator, connection_type, loopback); } else { pass_callback_execution(new_packet_data, packet_callback_queue, NULL, ip_header.ip_id); } @@ -668,11 +668,11 @@ static inline void swiftnet_process_packets( if(connection_type == CONNECTION_TYPE_SERVER) { uint8_t* const ptr = pending_message->packet_data_start; - SwiftNetServerPacketData* const packet_data = allocator_allocate(&server_packet_data_memory_allocator); + struct SwiftNetServerPacketData* const packet_data = allocator_allocate(&server_packet_data_memory_allocator); packet_data->data = ptr; packet_data->current_pointer = ptr; packet_data->internal_pending_message = pending_message; - packet_data->metadata = (SwiftNetPacketServerMetadata){ + packet_data->metadata = (struct SwiftNetPacketServerMetadata){ .port_info = packet_info.port_info, .sender = sender, .data_length = packet_info.packet_length, @@ -694,11 +694,11 @@ static inline void swiftnet_process_packets( } else { uint8_t* const ptr = pending_message->packet_data_start; - SwiftNetClientPacketData* const packet_data = allocator_allocate(&client_packet_data_memory_allocator) ; + struct SwiftNetClientPacketData* const packet_data = allocator_allocate(&client_packet_data_memory_allocator) ; packet_data->data = ptr; packet_data->current_pointer = ptr; packet_data->internal_pending_message = pending_message; - packet_data->metadata = (SwiftNetPacketClientMetadata){ + packet_data->metadata = (struct SwiftNetPacketClientMetadata){ .port_info = packet_info.port_info, .data_length = packet_info.packet_length, .packet_id = ip_header.ip_id @@ -709,7 +709,7 @@ static inline void swiftnet_process_packets( #ifdef SWIFT_NET_REQUESTS if (packet_info.packet_type == PACKET_TYPE_RESPONSE) { - handle_request_response(ip_header.ip_id, ((SwiftNetClientConnection*)connection)->server_addr, pending_message, packet_data, pending_messages, pending_messages_memory_allocator, connection_type, loopback); + handle_request_response(ip_header.ip_id, ((struct SwiftNetClientConnection*)connection)->server_addr, pending_message, packet_data, pending_messages, pending_messages_memory_allocator, connection_type, loopback); } else { pass_callback_execution(packet_data, packet_callback_queue, pending_message, ip_header.ip_id); } @@ -746,7 +746,7 @@ static inline void swiftnet_process_packets( } void* swiftnet_server_process_packets(void* const void_server) { - SwiftNetServer* const server = (SwiftNetServer*)void_server; + struct SwiftNetServer* const server = (struct SwiftNetServer*)void_server; swiftnet_process_packets((void*)&server->packet_handler, server->pcap, server->eth_header, server->server_port, server->loopback, server->addr_type, &server->packets_sending, &server->packets_sending_memory_allocator, &server->pending_messages, &server->pending_messages_memory_allocator, &server->packets_completed, &server->packets_completed_memory_allocator, CONNECTION_TYPE_SERVER, &server->packet_queue, &server->packet_callback_queue, server, &server->closing, server->prepend_size); @@ -754,7 +754,7 @@ void* swiftnet_server_process_packets(void* const void_server) { } void* swiftnet_client_process_packets(void* const void_client) { - SwiftNetClientConnection* const client = (SwiftNetClientConnection*)void_client; + struct SwiftNetClientConnection* const client = (struct SwiftNetClientConnection*)void_client; swiftnet_process_packets((void*)&client->packet_handler, client->pcap, client->eth_header, client->port_info.source_port, client->loopback, client->addr_type, &client->packets_sending, &client->packets_sending_memory_allocator, &client->pending_messages, &client->pending_messages_memory_allocator, &client->packets_completed, &client->packets_completed_memory_allocator, CONNECTION_TYPE_CLIENT, &client->packet_queue, &client->packet_callback_queue, client, &client->closing, client->prepend_size); diff --git a/src/send_packet.c b/src/send_packet.c index 2a31162..460ecbd 100644 --- a/src/send_packet.c +++ b/src/send_packet.c @@ -15,18 +15,18 @@ #include "internal/internal.h" #include -static inline void lock_packet_sending(SwiftNetPacketSending* const packet_sending) { +static inline void lock_packet_sending(struct SwiftNetPacketSending* const packet_sending) { bool locked = false; while(!atomic_compare_exchange_strong_explicit(&packet_sending->locked, &locked, true, memory_order_acquire, memory_order_relaxed)) { locked = false; } } -static inline void unlock_packet_sending(SwiftNetPacketSending* const packet_sending) { +static inline void unlock_packet_sending(struct SwiftNetPacketSending* const packet_sending) { atomic_store_explicit(&packet_sending->locked, false, memory_order_release); } -static inline uint8_t request_lost_packets_bitarray(const uint8_t* const raw_data, const uint32_t data_size, const struct sockaddr* const destination, pcap_t* const pcap, SwiftNetPacketSending* const packet_sending) { +static inline uint8_t request_lost_packets_bitarray(const uint8_t* const raw_data, const uint32_t data_size, const struct sockaddr* const destination, pcap_t* const pcap, struct SwiftNetPacketSending* const packet_sending) { while(1) { if(check_debug_flag(DEBUG_LOST_PACKETS)) { send_debug_message("Requested list of lost packets: {\"packet_id\": %d}\n", packet_sending->packet_id); @@ -35,7 +35,7 @@ static inline uint8_t request_lost_packets_bitarray(const uint8_t* const raw_dat swiftnet_pcap_send(pcap, raw_data, data_size); for(uint8_t times_checked = 0; times_checked < 0xFF; times_checked++) { - const PacketSendingUpdated status = atomic_load_explicit(&packet_sending->updated, memory_order_acquire); + const enum PacketSendingUpdated status = atomic_load_explicit(&packet_sending->updated, memory_order_acquire); switch (status) { case NO_UPDATE: @@ -54,16 +54,16 @@ static inline uint8_t request_lost_packets_bitarray(const uint8_t* const raw_dat } static inline void handle_lost_packets( - SwiftNetPacketSending* const packet_sending, + struct SwiftNetPacketSending* const packet_sending, const uint32_t mtu, - const SwiftNetPacketBuffer* const packet, + const struct SwiftNetPacketBuffer* const packet, pcap_t* pcap, const struct ether_header eth_hdr, const struct in_addr* const destination_address, const uint16_t source_port, const uint16_t destination_port, - SwiftNetMemoryAllocator* const packets_sending_memory_allocator, - SwiftNetVector* const packets_sending, + struct SwiftNetMemoryAllocator* const packets_sending_memory_allocator, + struct SwiftNetVector* const packets_sending, const bool loopback, const uint16_t addr_type, const uint8_t prepend_size @@ -72,14 +72,14 @@ static inline void handle_lost_packets( , const uint8_t packet_type #endif ) { - const SwiftNetPortInfo port_info = { + const struct SwiftNetPortInfo port_info = { .source_port = source_port, .destination_port = destination_port }; const struct ip request_lost_packets_ip_header = construct_ip_header(*destination_address, PACKET_HEADER_SIZE, packet_sending->packet_id); - SwiftNetPacketInfo request_lost_packets_bit_array = construct_packet_info( + struct SwiftNetPacketInfo request_lost_packets_bit_array = construct_packet_info( 0x00, PACKET_TYPE_SEND_LOST_PACKETS_REQUEST, 1, @@ -94,7 +94,7 @@ static inline void handle_lost_packets( const uint32_t packet_length = packet->packet_append_pointer - packet->packet_data_start; const uint32_t chunk_amount = (packet_length + (mtu - PACKET_HEADER_SIZE) - 1) / (mtu - PACKET_HEADER_SIZE); - const SwiftNetPacketInfo resend_chunk_packet_info = construct_packet_info( + const struct SwiftNetPacketInfo resend_chunk_packet_info = construct_packet_info( packet_length, #ifdef SWIFT_NET_REQUESTS packet_type, @@ -124,7 +124,7 @@ static inline void handle_lost_packets( vector_lock(packets_sending); for (uint32_t i = 0; i < packets_sending->size; i++) { - if (((SwiftNetPacketSending*)vector_get(packets_sending, i))->packet_id == packet_sending->packet_id) { + if (((struct SwiftNetPacketSending*)vector_get(packets_sending, i))->packet_id == packet_sending->packet_id) { vector_remove(packets_sending, i); break; @@ -147,7 +147,7 @@ static inline void handle_lost_packets( send_debug_message("Packet lost: {\"packet_id\": %d, \"chunk index\": %d}\n", packet_sending->packet_id, lost_chunk_index); } - memcpy(&resend_chunk_buffer[sizeof(struct ip) + prepend_size + offsetof(SwiftNetPacketInfo, chunk_index)], &lost_chunk_index, SIZEOF_FIELD(SwiftNetPacketInfo, chunk_index)); + memcpy(&resend_chunk_buffer[sizeof(struct ip) + prepend_size + offsetof(struct SwiftNetPacketInfo, chunk_index)], &lost_chunk_index, SIZEOF_FIELD(struct SwiftNetPacketInfo, chunk_index)); const uint32_t current_offset = lost_chunk_index * (mtu - PACKET_HEADER_SIZE); @@ -181,19 +181,19 @@ static inline void handle_lost_packets( inline void swiftnet_send_packet( const void* const connection, const uint32_t target_maximum_transmission_unit, - const SwiftNetPortInfo port_info, - const SwiftNetPacketBuffer* const packet, + const struct SwiftNetPortInfo port_info, + const struct SwiftNetPacketBuffer* const packet, const uint32_t packet_length, const struct in_addr* const target_addr, - SwiftNetVector* const packets_sending, - SwiftNetMemoryAllocator* const packets_sending_memory_allocator, + struct SwiftNetVector* const packets_sending, + struct SwiftNetMemoryAllocator* const packets_sending_memory_allocator, pcap_t* const pcap, const struct ether_header eth_hdr, const bool loopback, const uint16_t addr_type, const uint8_t prepend_size #ifdef SWIFT_NET_REQUESTS - , RequestSent* const request_sent + , struct RequestSent* const request_sent , const bool response , const uint16_t request_packet_id #endif @@ -234,7 +234,7 @@ inline void swiftnet_send_packet( const uint32_t chunk_amount = (packet_length + (mtu - PACKET_HEADER_SIZE) - 1) / (mtu - PACKET_HEADER_SIZE); if(packet_length > mtu) { - SwiftNetPacketInfo packet_info = construct_packet_info( + struct SwiftNetPacketInfo packet_info = construct_packet_info( packet_length, #ifdef SWIFT_NET_REQUESTS packet_type, @@ -248,7 +248,7 @@ inline void swiftnet_send_packet( const struct ip ip_header = construct_ip_header(*target_addr, mtu, packet_id); - SwiftNetPacketSending* const new_packet_sending = allocator_allocate(packets_sending_memory_allocator); + struct SwiftNetPacketSending* const new_packet_sending = allocator_allocate(packets_sending_memory_allocator); if(unlikely(new_packet_sending == NULL)) { fprintf(stderr, "Failed to send a packet: exceeded maximum amount of sending packets at the same time\n"); return; @@ -256,7 +256,7 @@ inline void swiftnet_send_packet( vector_lock(packets_sending); - vector_push((SwiftNetVector*)packets_sending, (SwiftNetPacketSending*)new_packet_sending); + vector_push((struct SwiftNetVector*)packets_sending, (struct SwiftNetPacketSending*)new_packet_sending); vector_unlock(packets_sending); @@ -277,7 +277,7 @@ inline void swiftnet_send_packet( } #endif - memcpy(&buffer[sizeof(struct ip) + prepend_size + offsetof(SwiftNetPacketInfo, chunk_index)], &i, SIZEOF_FIELD(SwiftNetPacketInfo, chunk_index)); + memcpy(&buffer[sizeof(struct ip) + prepend_size + offsetof(struct SwiftNetPacketInfo, chunk_index)], &i, SIZEOF_FIELD(struct SwiftNetPacketInfo, chunk_index)); const uint16_t null_sum = htons(0); memcpy(&buffer[prepend_size + offsetof(struct ip, ip_sum)], &null_sum, SIZEOF_FIELD(struct ip, ip_sum)); @@ -313,7 +313,7 @@ inline void swiftnet_send_packet( } else { const uint32_t final_packet_size = prepend_size + PACKET_HEADER_SIZE + packet_length; - const SwiftNetPacketInfo packet_info = construct_packet_info( + const struct SwiftNetPacketInfo packet_info = construct_packet_info( packet_length, #ifdef SWIFT_NET_REQUESTS packet_type, @@ -352,7 +352,7 @@ inline void swiftnet_send_packet( } } -void swiftnet_client_send_packet(SwiftNetClientConnection* const client, SwiftNetPacketBuffer* const packet) { +void swiftnet_client_send_packet(struct SwiftNetClientConnection* const client, struct SwiftNetPacketBuffer* const packet) { const uint32_t packet_length = packet->packet_append_pointer - packet->packet_data_start; swiftnet_send_packet(client, client->maximum_transmission_unit, client->port_info, packet, packet_length, &client->server_addr, &client->packets_sending, &client->packets_sending_memory_allocator, client->pcap, client->eth_header, client->loopback, client->addr_type, client->prepend_size @@ -362,10 +362,10 @@ void swiftnet_client_send_packet(SwiftNetClientConnection* const client, SwiftNe ); } -void swiftnet_server_send_packet(SwiftNetServer* const server, SwiftNetPacketBuffer* const packet, const SwiftNetClientAddrData target) { +void swiftnet_server_send_packet(struct SwiftNetServer* const server, struct SwiftNetPacketBuffer* const packet, const struct SwiftNetClientAddrData target) { const uint32_t packet_length = packet->packet_append_pointer - packet->packet_data_start; - const SwiftNetPortInfo port_info = { + const struct SwiftNetPortInfo port_info = { .destination_port = target.port, .source_port = server->server_port }; diff --git a/src/swift_net.h b/src/swift_net.h index 48d7e79..402d158 100644 --- a/src/swift_net.h +++ b/src/swift_net.h @@ -46,182 +46,178 @@ extern uint32_t maximum_transmission_unit; #ifdef SWIFT_NET_DEBUG -typedef enum { +enum SwiftNetDebugFlags { DEBUG_PACKETS_SENDING = 1u << 0, DEBUG_PACKETS_RECEIVING = 1u << 1, DEBUG_INITIALIZATION = 1u << 2, DEBUG_LOST_PACKETS = 1u << 3 -} SwiftNetDebugFlags; +}; -typedef struct { +struct SwiftNetDebugger { uint32_t flags; -} SwiftNetDebugger; +}; #endif -typedef struct { +struct SwiftNetPortInfo { uint16_t destination_port; uint16_t source_port; -} SwiftNetPortInfo; +}; -typedef struct { +struct SwiftNetClientAddrData { struct in_addr sender_address; uint32_t maximum_transmission_unit; uint16_t port; -} SwiftNetClientAddrData; +}; -typedef struct { +struct SwiftNetPacketClientMetadata { uint32_t data_length; - SwiftNetPortInfo port_info; + struct SwiftNetPortInfo port_info; uint16_t packet_id; #ifdef SWIFT_NET_REQUESTS bool expecting_response; #endif -} SwiftNetPacketClientMetadata; +}; -typedef struct { +struct SwiftNetPacketInfo { uint32_t packet_length; - SwiftNetPortInfo port_info; + struct SwiftNetPortInfo port_info; uint8_t packet_type; uint32_t chunk_amount; uint32_t chunk_index; uint32_t maximum_transmission_unit; -} SwiftNetPacketInfo; +}; -typedef struct { +struct SwiftNetPendingMessage { uint8_t* packet_data_start; - SwiftNetPacketInfo packet_info; + struct SwiftNetPacketInfo packet_info; uint16_t packet_id; struct in_addr sender_address; uint8_t* chunks_received; uint32_t chunks_received_length; uint32_t chunks_received_number; -} SwiftNetPendingMessage; +}; -typedef struct { +struct SwiftNetPacketServerMetadata { uint32_t data_length; - SwiftNetPortInfo port_info; - SwiftNetClientAddrData sender; + struct SwiftNetPortInfo port_info; + struct SwiftNetClientAddrData sender; uint16_t packet_id; #ifdef SWIFT_NET_REQUESTS bool expecting_response; #endif -} SwiftNetPacketServerMetadata; +}; -typedef struct { +struct SwiftNetServerInformation { uint32_t maximum_transmission_unit; -} SwiftNetServerInformation; +}; -typedef enum { +enum PacketSendingUpdated { NO_UPDATE, UPDATED_LOST_CHUNKS, SUCCESSFULLY_RECEIVED -} PacketSendingUpdated; +}; -typedef struct { +struct SwiftNetPacketSending { uint16_t packet_id; uint32_t* lost_chunks; uint32_t lost_chunks_size; - _Atomic PacketSendingUpdated updated; + _Atomic enum PacketSendingUpdated updated; _Atomic bool locked; -} SwiftNetPacketSending; +}; -typedef struct { +struct SwiftNetPacketCompleted { uint16_t packet_id; uint32_t packet_length; -} SwiftNetPacketCompleted; +}; -typedef struct { +struct SwiftNetPacketBuffer { uint8_t* packet_buffer_start; // Start of the allocated buffer uint8_t* packet_data_start; // Start of the stored data uint8_t* packet_append_pointer; // Current position to append new data -} SwiftNetPacketBuffer; - -typedef struct PacketQueueNode PacketQueueNode; +}; struct PacketQueueNode { - PacketQueueNode* next; + struct PacketQueueNode* next; uint8_t* data; uint32_t data_read; struct in_addr sender_address; socklen_t server_address_length; }; -typedef struct { +struct PacketQueue { _Atomic uint32_t owner; - PacketQueueNode* first_node; - PacketQueueNode* last_node; -} PacketQueue; - -typedef struct PacketCallbackQueueNode PacketCallbackQueueNode; + struct PacketQueueNode* first_node; + struct PacketQueueNode* last_node; +}; struct PacketCallbackQueueNode { void* packet_data; - SwiftNetPendingMessage* pending_message; + struct SwiftNetPendingMessage* pending_message; uint16_t packet_id; - PacketCallbackQueueNode* next; + struct PacketCallbackQueueNode* next; }; -typedef struct { +struct SwiftNetServerPacketData { uint8_t* data; uint8_t* current_pointer; - SwiftNetPacketServerMetadata metadata; - SwiftNetPendingMessage* internal_pending_message; // Do not use!! -} SwiftNetServerPacketData; + struct SwiftNetPacketServerMetadata metadata; + struct SwiftNetPendingMessage* internal_pending_message; // Do not use!! +}; -typedef struct { +struct SwiftNetClientPacketData { uint8_t* data; uint8_t* current_pointer; - SwiftNetPacketClientMetadata metadata; - SwiftNetPendingMessage* internal_pending_message; // Do not use!! -} SwiftNetClientPacketData; + struct SwiftNetPacketClientMetadata metadata; + struct SwiftNetPendingMessage* internal_pending_message; // Do not use!! +}; -typedef struct { +struct PacketCallbackQueue { _Atomic uint32_t owner; - PacketCallbackQueueNode* first_node; - PacketCallbackQueueNode* last_node; -} PacketCallbackQueue; + struct PacketCallbackQueueNode* first_node; + struct PacketCallbackQueueNode* last_node; +}; -typedef struct { +struct SwiftNetSentSuccessfullyCompletedPacketSignal { uint16_t packet_id; bool confirmed; -} SwiftNetSentSuccessfullyCompletedPacketSignal; +}; -typedef struct { +struct SwiftNetMemoryAllocatorStack { _Atomic uint32_t size; void* data; _Atomic(void*) next; _Atomic(void*) previous; _Atomic uint8_t owner; -} SwiftNetMemoryAllocatorStack; +}; -typedef struct { +struct SwiftNetChunkStorageManager { _Atomic(void*) first_item; _Atomic(void*) last_item; -} SwiftNetChunkStorageManager; +}; -typedef struct { - SwiftNetChunkStorageManager free_memory_pointers; - SwiftNetChunkStorageManager data; +struct SwiftNetMemoryAllocator { + struct SwiftNetChunkStorageManager free_memory_pointers; + struct SwiftNetChunkStorageManager data; uint32_t item_size; uint32_t chunk_item_amount; _Atomic uint8_t creating_stack; -} SwiftNetMemoryAllocator; +}; -typedef struct { +struct SwiftNetVector { void* data; uint32_t size; uint32_t capacity; _Atomic uint8_t locked; -} SwiftNetVector; +}; // Connection data -typedef struct { +struct SwiftNetClientConnection { pcap_t* pcap; struct ether_header eth_header; - SwiftNetPortInfo port_info; + struct SwiftNetPortInfo port_info; struct in_addr server_addr; socklen_t server_addr_len; - _Atomic(void (*)(SwiftNetClientPacketData* const)) packet_handler; + _Atomic(void (*)(struct SwiftNetClientPacketData* const)) packet_handler; _Atomic bool closing; _Atomic bool initialized; uint16_t addr_type; @@ -229,38 +225,38 @@ typedef struct { pthread_t process_packets_thread; pthread_t execute_callback_thread; uint32_t maximum_transmission_unit; - SwiftNetVector pending_messages; - SwiftNetMemoryAllocator pending_messages_memory_allocator; - SwiftNetVector packets_sending; - SwiftNetMemoryAllocator packets_sending_memory_allocator; - SwiftNetVector packets_completed; - SwiftNetMemoryAllocator packets_completed_memory_allocator; - PacketQueue packet_queue; - PacketCallbackQueue packet_callback_queue; + struct SwiftNetVector pending_messages; + struct SwiftNetMemoryAllocator pending_messages_memory_allocator; + struct SwiftNetVector packets_sending; + struct SwiftNetMemoryAllocator packets_sending_memory_allocator; + struct SwiftNetVector packets_completed; + struct SwiftNetMemoryAllocator packets_completed_memory_allocator; + struct PacketQueue packet_queue; + struct PacketCallbackQueue packet_callback_queue; uint8_t prepend_size; -} SwiftNetClientConnection; +}; -typedef struct { +struct SwiftNetServer { pcap_t* pcap; struct ether_header eth_header; uint16_t server_port; - _Atomic(void (*)(SwiftNetServerPacketData* const)) packet_handler; + _Atomic(void (*)(struct SwiftNetServerPacketData* const)) packet_handler; _Atomic bool closing; uint16_t addr_type; bool loopback; pthread_t process_packets_thread; pthread_t execute_callback_thread; - SwiftNetVector pending_messages; - SwiftNetMemoryAllocator pending_messages_memory_allocator; - SwiftNetVector packets_sending; - SwiftNetMemoryAllocator packets_sending_memory_allocator; - SwiftNetVector packets_completed; - SwiftNetMemoryAllocator packets_completed_memory_allocator; + struct SwiftNetVector pending_messages; + struct SwiftNetMemoryAllocator pending_messages_memory_allocator; + struct SwiftNetVector packets_sending; + struct SwiftNetMemoryAllocator packets_sending_memory_allocator; + struct SwiftNetVector packets_completed; + struct SwiftNetMemoryAllocator packets_completed_memory_allocator; uint8_t* current_read_pointer; - PacketQueue packet_queue; - PacketCallbackQueue packet_callback_queue; + struct PacketQueue packet_queue; + struct PacketCallbackQueue packet_callback_queue; uint8_t prepend_size; -} SwiftNetServer; +}; /** * @brief Set a custom message handler for the server. @@ -268,8 +264,8 @@ typedef struct { * @param new_handler Function pointer to the new message handler. */ extern void swiftnet_server_set_message_handler( - SwiftNetServer* const server, - void (* const new_handler)(SwiftNetServerPacketData* const) + struct SwiftNetServer* const server, + void (* const new_handler)(struct SwiftNetServerPacketData* const) ); /** @@ -278,8 +274,8 @@ extern void swiftnet_server_set_message_handler( * @param new_handler Function pointer to the new message handler. */ extern void swiftnet_client_set_message_handler( - SwiftNetClientConnection* const client, - void (* const new_handler)(SwiftNetClientPacketData* const) + struct SwiftNetClientConnection* const client, + void (* const new_handler)(struct SwiftNetClientPacketData* const) ); /** @@ -291,7 +287,7 @@ extern void swiftnet_client_set_message_handler( extern void swiftnet_client_append_to_packet( const void* const data, const uint32_t data_size, - SwiftNetPacketBuffer* const packet + struct SwiftNetPacketBuffer* const packet ); /** @@ -303,20 +299,20 @@ extern void swiftnet_client_append_to_packet( extern void swiftnet_server_append_to_packet( const void* const data, const uint32_t data_size, - SwiftNetPacketBuffer* const packet + struct SwiftNetPacketBuffer* const packet ); /** * @brief Clean up and free resources for a client connection. * @param client Pointer to the client connection. */ -extern void swiftnet_client_cleanup(SwiftNetClientConnection* const client); +extern void swiftnet_client_cleanup(struct SwiftNetClientConnection* const client); /** * @brief Clean up and free resources for a server. * @param server Pointer to the server. */ -extern void swiftnet_server_cleanup(SwiftNetServer* const server); +extern void swiftnet_server_cleanup(struct SwiftNetServer* const server); /** * @brief Initialize the SwiftNet library. Must be called before using any other functions. @@ -329,8 +325,8 @@ extern void swiftnet_initialize(); * @param packet Pointer to the packet buffer to send. */ extern void swiftnet_client_send_packet( - SwiftNetClientConnection* const client, - SwiftNetPacketBuffer* const packet + struct SwiftNetClientConnection* const client, + struct SwiftNetPacketBuffer* const packet ); /** @@ -340,9 +336,9 @@ extern void swiftnet_client_send_packet( * @param target Target client address data. */ extern void swiftnet_server_send_packet( - SwiftNetServer* const server, - SwiftNetPacketBuffer* const packet, - const SwiftNetClientAddrData target + struct SwiftNetServer* const server, + struct SwiftNetPacketBuffer* const packet, + const struct SwiftNetClientAddrData target ); /** @@ -350,26 +346,26 @@ extern void swiftnet_server_send_packet( * @param buffer_size Size of the buffer in bytes. * @return SwiftNetPacketBuffer Initialized packet buffer. */ -extern SwiftNetPacketBuffer swiftnet_server_create_packet_buffer(const uint32_t buffer_size); +extern struct SwiftNetPacketBuffer swiftnet_server_create_packet_buffer(const uint32_t buffer_size); /** * @brief Create a packet buffer for the client. * @param buffer_size Size of the buffer in bytes. * @return SwiftNetPacketBuffer Initialized packet buffer. */ -extern SwiftNetPacketBuffer swiftnet_client_create_packet_buffer(const uint32_t buffer_size); +extern struct SwiftNetPacketBuffer swiftnet_client_create_packet_buffer(const uint32_t buffer_size); /** * @brief Destroy a server packet buffer and free resources. * @param packet Pointer to the server packet buffer. */ -extern void swiftnet_server_destroy_packet_buffer(const SwiftNetPacketBuffer* const packet); +extern void swiftnet_server_destroy_packet_buffer(const struct SwiftNetPacketBuffer* const packet); /** * @brief Destroy a client packet buffer and free resources. * @param packet Pointer to the client packet buffer. */ -extern void swiftnet_client_destroy_packet_buffer(const SwiftNetPacketBuffer* const packet); +extern void swiftnet_client_destroy_packet_buffer(const struct SwiftNetPacketBuffer* const packet); /** * @brief Create and initialize a server. @@ -377,7 +373,7 @@ extern void swiftnet_client_destroy_packet_buffer(const SwiftNetPacketBuffer* co * @param loopback If true, server binds only to loopback interface. * @return Pointer to initialized SwiftNetServer, or NULL if unexpected error happened. */ -extern SwiftNetServer* swiftnet_create_server(const uint16_t port, const bool loopback); +extern struct SwiftNetServer* swiftnet_create_server(const uint16_t port, const bool loopback); /** * @brief Create and initialize a client connection. @@ -386,7 +382,7 @@ extern SwiftNetServer* swiftnet_create_server(const uint16_t port, const bool lo * @param timeout_ms Connection timeout in milliseconds. * @return Pointer to initialized SwiftNetClientConnection, or NULL if server failed to respond. */ -extern SwiftNetClientConnection* swiftnet_create_client( +extern struct SwiftNetClientConnection* swiftnet_create_client( const char* const ip_address, const uint16_t port, const uint32_t timeout_ms @@ -398,7 +394,7 @@ extern SwiftNetClientConnection* swiftnet_create_client( * @param data_size Number of bytes to read. * @return Pointer to the read data, or NULL if read more data than there is. */ -extern void* swiftnet_client_read_packet(SwiftNetClientPacketData* const packet_data, const uint32_t data_size); +extern void* swiftnet_client_read_packet(struct SwiftNetClientPacketData* const packet_data, const uint32_t data_size); /** * @brief Read data from a server packet. @@ -406,7 +402,7 @@ extern void* swiftnet_client_read_packet(SwiftNetClientPacketData* const packet_ * @param data_size Number of bytes to read. * @return Pointer to the read data, or NULL if read more data than there is. */ -extern void* swiftnet_server_read_packet(SwiftNetServerPacketData* const packet_data, const uint32_t data_size); +extern void* swiftnet_server_read_packet(struct SwiftNetServerPacketData* const packet_data, const uint32_t data_size); /** * @brief Destroy client packet data and release memory. @@ -414,8 +410,8 @@ extern void* swiftnet_server_read_packet(SwiftNetServerPacketData* const packet_ * @param client_conn Pointer to the client connection. */ extern void swiftnet_client_destroy_packet_data( - SwiftNetClientPacketData* const packet_data, - SwiftNetClientConnection* const client_conn + struct SwiftNetClientPacketData* const packet_data, + struct SwiftNetClientConnection* const client_conn ); /** @@ -424,8 +420,8 @@ extern void swiftnet_client_destroy_packet_data( * @param server Pointer to the server. */ extern void swiftnet_server_destroy_packet_data( - SwiftNetServerPacketData* const packet_data, - SwiftNetServer* const server + struct SwiftNetServerPacketData* const packet_data, + struct SwiftNetServer* const server ); /** @@ -441,9 +437,9 @@ extern void swiftnet_cleanup(); * @param timeout_ms Timeout in milliseconds. * @return Pointer to client packet data containing the response, or NULL if server failed to respond. */ -extern SwiftNetClientPacketData* swiftnet_client_make_request( - SwiftNetClientConnection* const client, - SwiftNetPacketBuffer* const packet, +extern struct SwiftNetClientPacketData* swiftnet_client_make_request( + struct SwiftNetClientConnection* const client, + struct SwiftNetPacketBuffer* const packet, const uint32_t timeout_ms ); @@ -455,10 +451,10 @@ extern SwiftNetClientPacketData* swiftnet_client_make_request( * @param timeout_ms Timeout in milliseconds. * @return Pointer to server packet data containing the response, or NULL if client failed to respond. */ -extern SwiftNetServerPacketData* swiftnet_server_make_request( - SwiftNetServer* const server, - SwiftNetPacketBuffer* const packet, - const SwiftNetClientAddrData addr_data, +extern struct SwiftNetServerPacketData* swiftnet_server_make_request( + struct SwiftNetServer* const server, + struct SwiftNetPacketBuffer* const packet, + const struct SwiftNetClientAddrData addr_data, const uint32_t timeout_ms ); @@ -469,9 +465,9 @@ extern SwiftNetServerPacketData* swiftnet_server_make_request( * @param buffer Packet buffer containing the response. */ extern void swiftnet_client_make_response( - SwiftNetClientConnection* const client, - SwiftNetClientPacketData* const packet_data, - SwiftNetPacketBuffer* const buffer + struct SwiftNetClientConnection* const client, + struct SwiftNetClientPacketData* const packet_data, + struct SwiftNetPacketBuffer* const buffer ); /** @@ -481,9 +477,9 @@ extern void swiftnet_client_make_response( * @param buffer Packet buffer containing the response. */ extern void swiftnet_server_make_response( - SwiftNetServer* const server, - SwiftNetServerPacketData* const packet_data, - SwiftNetPacketBuffer* const buffer + struct SwiftNetServer* const server, + struct SwiftNetServerPacketData* const packet_data, + struct SwiftNetPacketBuffer* const buffer ); #endif diff --git a/tests/src/making_request.c b/tests/src/making_request.c index 6ceed6b..0d6f5a7 100644 --- a/tests/src/making_request.c +++ b/tests/src/making_request.c @@ -8,8 +8,8 @@ #include #include "run_tests.h" -static _Atomic (SwiftNetClientConnection*) g_client_conn = NULL; -static _Atomic (SwiftNetServer*) g_server = NULL; +static _Atomic (struct SwiftNetClientConnection*) g_client_conn = NULL; +static _Atomic (struct SwiftNetServer*) g_server = NULL; static _Atomic int g_test_result = INT_MAX; @@ -53,8 +53,8 @@ static void reset_test_state() { atomic_store_explicit(&g_test_result, INT_MAX, memory_order_release); } -static void on_client_packet(SwiftNetClientPacketData* packet) { - SwiftNetClientConnection* const client_conn = atomic_load_explicit(&g_client_conn, memory_order_acquire); +static void on_client_packet(struct SwiftNetClientPacketData* packet) { + struct SwiftNetClientConnection* const client_conn = atomic_load_explicit(&g_client_conn, memory_order_acquire); if (packet->metadata.data_length != atomic_load_explicit(&g_request_data_len, memory_order_acquire)) { PRINT_ERROR("Server received invalid data size: %d | %d", @@ -87,7 +87,7 @@ static void on_client_packet(SwiftNetClientPacketData* packet) { const uint32_t response_data_len = atomic_load_explicit(&g_response_data_len, memory_order_acquire); uint8_t* response_data = atomic_load_explicit(&g_response_data, memory_order_acquire); - SwiftNetPacketBuffer send_buffer = swiftnet_client_create_packet_buffer(response_data_len); + struct SwiftNetPacketBuffer send_buffer = swiftnet_client_create_packet_buffer(response_data_len); swiftnet_client_append_to_packet(response_data, response_data_len, &send_buffer); @@ -99,8 +99,8 @@ static void on_client_packet(SwiftNetClientPacketData* packet) { atomic_store_explicit(&g_sent_response, true, memory_order_release); } -static void on_server_packet(SwiftNetServerPacketData* packet) { - SwiftNetServer* const server = atomic_load_explicit(&g_server, memory_order_acquire); +static void on_server_packet(struct SwiftNetServerPacketData* packet) { + struct SwiftNetServer* const server = atomic_load_explicit(&g_server, memory_order_acquire); if (packet->metadata.expecting_response) { if (packet->metadata.data_length != atomic_load_explicit(&g_request_data_len, memory_order_acquire)) { @@ -134,7 +134,7 @@ static void on_server_packet(SwiftNetServerPacketData* packet) { const uint32_t response_data_len = atomic_load_explicit(&g_response_data_len, memory_order_acquire); uint8_t* response_data = atomic_load_explicit(&g_response_data, memory_order_acquire); - SwiftNetPacketBuffer send_buffer = swiftnet_server_create_packet_buffer(response_data_len); + struct SwiftNetPacketBuffer send_buffer = swiftnet_server_create_packet_buffer(response_data_len); swiftnet_server_append_to_packet(response_data, response_data_len, &send_buffer); @@ -175,11 +175,11 @@ static void on_server_packet(SwiftNetServerPacketData* packet) { const uint32_t response_data_len = atomic_load_explicit(&g_response_data_len, memory_order_acquire); uint8_t* response_data = atomic_load_explicit(&g_response_data, memory_order_acquire); - SwiftNetPacketBuffer buffer = swiftnet_server_create_packet_buffer(request_data_len); + struct SwiftNetPacketBuffer buffer = swiftnet_server_create_packet_buffer(request_data_len); swiftnet_server_append_to_packet(request_data, request_data_len, &buffer); - SwiftNetServerPacketData* response = swiftnet_server_make_request(atomic_load_explicit(&g_server, memory_order_acquire), &buffer, packet->metadata.sender, 1000); + struct SwiftNetServerPacketData* response = swiftnet_server_make_request(atomic_load_explicit(&g_server, memory_order_acquire), &buffer, packet->metadata.sender, 1000); swiftnet_server_destroy_packet_buffer(&buffer); @@ -235,7 +235,7 @@ static void on_server_packet(SwiftNetServerPacketData* packet) { int test_making_request(const union Args* args_ptr) { const struct TestMakingRequestArgs args = args_ptr->test_making_request_args; - SwiftNetServer* const server = swiftnet_create_server(8080, args.loopback); + struct SwiftNetServer* const server = swiftnet_create_server(8080, args.loopback); if (server == NULL) { PRINT_ERROR("Failed to create server"); return -1; @@ -243,7 +243,7 @@ int test_making_request(const union Args* args_ptr) { swiftnet_server_set_message_handler(server, on_server_packet); - SwiftNetClientConnection* const client_conn = swiftnet_create_client(args.ip_address, 8080, 1000); + struct SwiftNetClientConnection* const client_conn = swiftnet_create_client(args.ip_address, 8080, 1000); if (client_conn == NULL) { PRINT_ERROR("Failed to create client connection"); return -1; @@ -273,11 +273,11 @@ int test_making_request(const union Args* args_ptr) { atomic_store_explicit(&g_response_data_len, args.response_data_len, memory_order_release); if (args.receiver == Server) { - SwiftNetPacketBuffer buffer = swiftnet_client_create_packet_buffer(args.request_data_len); + struct SwiftNetPacketBuffer buffer = swiftnet_client_create_packet_buffer(args.request_data_len); swiftnet_client_append_to_packet(req_data, args.request_data_len, &buffer); - SwiftNetClientPacketData* const response = swiftnet_client_make_request(client_conn, &buffer, 1000); + struct SwiftNetClientPacketData* const response = swiftnet_client_make_request(client_conn, &buffer, 1000); swiftnet_client_destroy_packet_buffer(&buffer); @@ -328,7 +328,7 @@ int test_making_request(const union Args* args_ptr) { return 0; } else { - SwiftNetPacketBuffer buffer = swiftnet_client_create_packet_buffer(sizeof(g_make_request_code)); + struct SwiftNetPacketBuffer buffer = swiftnet_client_create_packet_buffer(sizeof(g_make_request_code)); swiftnet_client_append_to_packet(&g_make_request_code, sizeof(g_make_request_code), &buffer); diff --git a/tests/src/sending_packet.c b/tests/src/sending_packet.c index 3501682..ccfaf54 100644 --- a/tests/src/sending_packet.c +++ b/tests/src/sending_packet.c @@ -8,8 +8,8 @@ #include #include "run_tests.h" -static _Atomic (SwiftNetClientConnection*) g_client_conn = NULL; -static _Atomic (SwiftNetServer*) g_server = NULL; +static _Atomic (struct SwiftNetClientConnection*) g_client_conn = NULL; +static _Atomic (struct SwiftNetServer*) g_server = NULL; static _Atomic bool g_client_send_done = false; static _Atomic bool g_server_send_done = false; @@ -46,8 +46,8 @@ static void reset_test_state() { atomic_store_explicit(&g_test_result, INT_MAX, memory_order_release); } -static void on_client_packet(SwiftNetClientPacketData* packet) { - SwiftNetClientConnection* const client_conn = atomic_load_explicit(&g_client_conn, memory_order_acquire); +static void on_client_packet(struct SwiftNetClientPacketData* packet) { + struct SwiftNetClientConnection* const client_conn = atomic_load_explicit(&g_client_conn, memory_order_acquire); while (!atomic_load_explicit(&g_client_send_done, memory_order_acquire)) usleep(1000); @@ -84,8 +84,8 @@ static void on_client_packet(SwiftNetClientPacketData* packet) { swiftnet_client_destroy_packet_data(packet, client_conn); } -static void on_server_packet(SwiftNetServerPacketData* packet) { - SwiftNetServer* const server = atomic_load_explicit(&g_server, memory_order_acquire); +static void on_server_packet(struct SwiftNetServerPacketData* packet) { + struct SwiftNetServer* const server = atomic_load_explicit(&g_server, memory_order_acquire); while (!atomic_load_explicit(&g_server_send_done, memory_order_acquire)) usleep(1000); @@ -121,7 +121,7 @@ static void on_server_packet(SwiftNetServerPacketData* packet) { uint32_t size = atomic_load_explicit(&g_client_data_len, memory_order_acquire); uint8_t* send_data = atomic_load_explicit(&g_client_data, memory_order_acquire); - SwiftNetPacketBuffer buf = swiftnet_server_create_packet_buffer(size); + struct SwiftNetPacketBuffer buf = swiftnet_server_create_packet_buffer(size); swiftnet_server_append_to_packet(send_data, size, &buf); swiftnet_server_send_packet(atomic_load_explicit(&g_server, memory_order_acquire), &buf, packet->metadata.sender); swiftnet_server_destroy_packet_buffer(&buf); @@ -137,7 +137,7 @@ static void on_server_packet(SwiftNetServerPacketData* packet) { int test_sending_packet(const union Args* args_ptr) { const struct TestSendingPacketArgs args = args_ptr->test_sending_packet_args; - SwiftNetServer* const server = swiftnet_create_server(8080, args.loopback); + struct SwiftNetServer* const server = swiftnet_create_server(8080, args.loopback); if (server == NULL) { PRINT_ERROR("Failed to create server"); return -1; @@ -145,7 +145,7 @@ int test_sending_packet(const union Args* args_ptr) { swiftnet_server_set_message_handler(server, on_server_packet); - SwiftNetClientConnection* const client_conn = swiftnet_create_client(args.ip_address, 8080, 1000); + struct SwiftNetClientConnection* const client_conn = swiftnet_create_client(args.ip_address, 8080, 1000); if (client_conn == NULL) { PRINT_ERROR("Failed to create client connection"); return -1; @@ -181,7 +181,7 @@ int test_sending_packet(const union Args* args_ptr) { atomic_store_explicit(&g_server_data, s_data, memory_order_release); } - SwiftNetPacketBuffer buf = swiftnet_client_create_packet_buffer(args.server_data_len); + struct SwiftNetPacketBuffer buf = swiftnet_client_create_packet_buffer(args.server_data_len); swiftnet_client_append_to_packet(atomic_load_explicit(&g_server_data, memory_order_acquire), args.server_data_len, &buf); swiftnet_client_send_packet(client_conn, &buf); swiftnet_client_destroy_packet_buffer(&buf);