Skip to content

Commit 32873be

Browse files
deadlightrealMorcules
authored andcommitted
Works
1 parent 01d60d5 commit 32873be

File tree

7 files changed

+33
-23
lines changed

7 files changed

+33
-23
lines changed

src/execute_packet_callback.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ static struct PacketCallbackQueueNode* const wait_for_next_packet_callback(struc
3636
return node_to_process;
3737
}
3838

39-
void execute_packet_callback(struct PacketCallbackQueue* const queue, void (* const _Atomic * const packet_handler) (void* const), const enum ConnectionType connection_type, struct SwiftNetMemoryAllocator* const pending_message_memory_allocator, _Atomic bool* closing, void* const connection, struct SwiftNetVector* const pending_messages) {
39+
void execute_packet_callback(struct PacketCallbackQueue* const queue, void (* const _Atomic * const packet_handler) (void* const, void* const), const enum ConnectionType connection_type, struct SwiftNetMemoryAllocator* const pending_message_memory_allocator, _Atomic bool* closing, void* const connection, struct SwiftNetVector* const pending_messages, _Atomic(void*)* user_data) {
4040
while (1) {
4141
if (atomic_load_explicit(closing, memory_order_acquire) == true) {
4242
break;
@@ -67,7 +67,7 @@ void execute_packet_callback(struct PacketCallbackQueue* const queue, void (* co
6767
vector_unlock(pending_messages);
6868
}
6969

70-
void (*const packet_handler_loaded)(void*) = atomic_load(packet_handler);
70+
void (*const packet_handler_loaded)(void* const, void* const) = atomic_load(packet_handler);
7171
if (unlikely(packet_handler_loaded == NULL)) {
7272
if (connection_type == CONNECTION_TYPE_CLIENT) {
7373
swiftnet_client_destroy_packet_data(node->packet_data, connection);
@@ -80,7 +80,7 @@ void execute_packet_callback(struct PacketCallbackQueue* const queue, void (* co
8080
continue;
8181
}
8282

83-
(*packet_handler_loaded)(node->packet_data);
83+
(*packet_handler_loaded)(node->packet_data, atomic_load_explicit(user_data, memory_order_acquire));
8484

8585
allocator_free(&packet_callback_queue_node_memory_allocator, (void*)node);
8686
}
@@ -89,15 +89,15 @@ void execute_packet_callback(struct PacketCallbackQueue* const queue, void (* co
8989
void* execute_packet_callback_client(void* const void_client) {
9090
struct SwiftNetClientConnection* const client = void_client;
9191

92-
execute_packet_callback(&client->packet_callback_queue, (void*)&client->packet_handler, CONNECTION_TYPE_CLIENT, &client->pending_messages_memory_allocator, &client->closing, void_client, &client->pending_messages);
92+
execute_packet_callback(&client->packet_callback_queue, (void*)&client->packet_handler, CONNECTION_TYPE_CLIENT, &client->pending_messages_memory_allocator, &client->closing, void_client, &client->pending_messages, &client->packet_handler_user_arg);
9393

9494
return NULL;
9595
}
9696

9797
void* execute_packet_callback_server(void* const void_server) {
9898
struct SwiftNetServer* const server = void_server;
9999

100-
execute_packet_callback(&server->packet_callback_queue, (void*)&server->packet_handler, CONNECTION_TYPE_SERVER, &server->pending_messages_memory_allocator, &server->closing, void_server, &server->pending_messages);
100+
execute_packet_callback(&server->packet_callback_queue, (void*)&server->packet_handler, CONNECTION_TYPE_SERVER, &server->pending_messages_memory_allocator, &server->closing, void_server, &server->pending_messages, &server->packet_handler_user_arg);
101101

102102
return NULL;
103103
}

src/generic_functions.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "internal/internal.h"
22
#include "swift_net.h"
3+
#include <stdatomic.h>
34
#include <stdio.h>
45
#include <stdlib.h>
56
#include <stdint.h>
@@ -15,16 +16,18 @@ static inline void swiftnet_validate_new_handler(const void* const new_handler,
1516
#endif
1617
}
1718

18-
void swiftnet_client_set_message_handler(struct SwiftNetClientConnection* const client, void (* const new_handler)(struct SwiftNetClientPacketData* const)) {
19+
void swiftnet_client_set_message_handler(struct SwiftNetClientConnection* const client, void (* const new_handler)(struct SwiftNetClientPacketData* const, void* const), void* const user_arg) {
1920
swiftnet_validate_new_handler(new_handler, __func__);
2021

21-
atomic_store(&client->packet_handler, new_handler);
22+
atomic_store_explicit(&client->packet_handler, new_handler, memory_order_release);
23+
atomic_store_explicit(&client->packet_handler_user_arg, user_arg, memory_order_release);
2224
}
2325

24-
void swiftnet_server_set_message_handler(struct SwiftNetServer* const server, void (* const new_handler)(struct SwiftNetServerPacketData* const)) {
26+
void swiftnet_server_set_message_handler(struct SwiftNetServer* const server, void (* const new_handler)(struct SwiftNetServerPacketData* const, void* const), void* const user_arg) {
2527
swiftnet_validate_new_handler(new_handler, __func__);
2628

27-
atomic_store(&server->packet_handler, new_handler);
29+
atomic_store_explicit(&server->packet_handler, new_handler, memory_order_release);
30+
atomic_store_explicit(&server->packet_handler_user_arg, user_arg, memory_order_release);
2831
}
2932

3033
// Read packet data into buffers

src/initialize_client_socket.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ struct SwiftNetClientConnection* swiftnet_create_client(const char* const ip_add
106106

107107
new_connection->server_addr.s_addr = inet_addr(ip_address);
108108

109+
atomic_store_explicit(&new_connection->packet_handler_user_arg, NULL, memory_order_release);
110+
109111
// Request the server information, and proccess it
110112
const struct SwiftNetPacketInfo request_server_information_packet_info = construct_packet_info(
111113
0x00,

src/initialize_server_socket.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ struct SwiftNetServer* swiftnet_create_server(const uint16_t port, const bool lo
5454
atomic_store(&new_server->packet_queue.owner, PACKET_QUEUE_OWNER_NONE);
5555

5656
memset(&new_server->packet_callback_queue, 0x00, sizeof(struct PacketCallbackQueue));
57-
atomic_store(&new_server->packet_callback_queue.owner, PACKET_CALLBACK_QUEUE_OWNER_NONE);
57+
atomic_store_explicit(&new_server->packet_callback_queue.owner, PACKET_CALLBACK_QUEUE_OWNER_NONE, memory_order_release);
5858

59-
atomic_store(&new_server->packet_handler, NULL);
59+
atomic_store_explicit(&new_server->packet_handler, NULL, memory_order_release);
60+
atomic_store_explicit(&new_server->packet_handler_user_arg, NULL, memory_order_release);
6061

6162
new_server->pending_messages_memory_allocator = allocator_create(sizeof(struct SwiftNetPendingMessage), 100);
6263
new_server->pending_messages = vector_create(100);

src/swift_net.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,8 @@ struct SwiftNetClientConnection {
217217
struct SwiftNetPortInfo port_info;
218218
struct in_addr server_addr;
219219
socklen_t server_addr_len;
220-
_Atomic(void (*)(struct SwiftNetClientPacketData* const)) packet_handler;
220+
_Atomic(void (*)(struct SwiftNetClientPacketData* const, void* const user)) packet_handler;
221+
_Atomic(void*) packet_handler_user_arg;
221222
_Atomic bool closing;
222223
_Atomic bool initialized;
223224
uint16_t addr_type;
@@ -240,7 +241,8 @@ struct SwiftNetServer {
240241
pcap_t* pcap;
241242
struct ether_header eth_header;
242243
uint16_t server_port;
243-
_Atomic(void (*)(struct SwiftNetServerPacketData* const)) packet_handler;
244+
_Atomic(void (*)(struct SwiftNetServerPacketData* const, void* const user)) packet_handler;
245+
_Atomic(void*) packet_handler_user_arg;
244246
_Atomic bool closing;
245247
uint16_t addr_type;
246248
bool loopback;
@@ -265,7 +267,8 @@ struct SwiftNetServer {
265267
*/
266268
extern void swiftnet_server_set_message_handler(
267269
struct SwiftNetServer* const server,
268-
void (* const new_handler)(struct SwiftNetServerPacketData* const)
270+
void (* const new_handler)(struct SwiftNetServerPacketData* const, void* const),
271+
void* const user_arg
269272
);
270273

271274
/**
@@ -275,7 +278,8 @@ extern void swiftnet_server_set_message_handler(
275278
*/
276279
extern void swiftnet_client_set_message_handler(
277280
struct SwiftNetClientConnection* const client,
278-
void (* const new_handler)(struct SwiftNetClientPacketData* const)
281+
void (* const new_handler)(struct SwiftNetClientPacketData* const, void* const),
282+
void* const user_arg
279283
);
280284

281285
/**

tests/src/making_request.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ static void reset_test_state() {
5353
atomic_store_explicit(&g_test_result, INT_MAX, memory_order_release);
5454
}
5555

56-
static void on_client_packet(struct SwiftNetClientPacketData* packet) {
56+
static void on_client_packet(struct SwiftNetClientPacketData* packet, void* const user) {
5757
struct SwiftNetClientConnection* const client_conn = atomic_load_explicit(&g_client_conn, memory_order_acquire);
5858

5959
if (packet->metadata.data_length != atomic_load_explicit(&g_request_data_len, memory_order_acquire)) {
@@ -99,7 +99,7 @@ static void on_client_packet(struct SwiftNetClientPacketData* packet) {
9999
atomic_store_explicit(&g_sent_response, true, memory_order_release);
100100
}
101101

102-
static void on_server_packet(struct SwiftNetServerPacketData* packet) {
102+
static void on_server_packet(struct SwiftNetServerPacketData* packet, void* const user) {
103103
struct SwiftNetServer* const server = atomic_load_explicit(&g_server, memory_order_acquire);
104104

105105
if (packet->metadata.expecting_response) {
@@ -241,15 +241,15 @@ int test_making_request(const union Args* args_ptr) {
241241
return -1;
242242
}
243243

244-
swiftnet_server_set_message_handler(server, on_server_packet);
244+
swiftnet_server_set_message_handler(server, on_server_packet, NULL);
245245

246246
struct SwiftNetClientConnection* const client_conn = swiftnet_create_client(args.ip_address, 8080, 1000);
247247
if (client_conn == NULL) {
248248
PRINT_ERROR("Failed to create client connection");
249249
return -1;
250250
}
251251

252-
swiftnet_client_set_message_handler(client_conn, on_client_packet);
252+
swiftnet_client_set_message_handler(client_conn, on_client_packet, NULL);
253253

254254
atomic_store_explicit(&g_client_conn, client_conn, memory_order_release);
255255
atomic_store_explicit(&g_server, server, memory_order_release);

tests/src/sending_packet.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static void reset_test_state() {
4646
atomic_store_explicit(&g_test_result, INT_MAX, memory_order_release);
4747
}
4848

49-
static void on_client_packet(struct SwiftNetClientPacketData* packet) {
49+
static void on_client_packet(struct SwiftNetClientPacketData* packet, void* const user) {
5050
struct SwiftNetClientConnection* const client_conn = atomic_load_explicit(&g_client_conn, memory_order_acquire);
5151

5252
while (!atomic_load_explicit(&g_client_send_done, memory_order_acquire)) usleep(1000);
@@ -84,7 +84,7 @@ static void on_client_packet(struct SwiftNetClientPacketData* packet) {
8484
swiftnet_client_destroy_packet_data(packet, client_conn);
8585
}
8686

87-
static void on_server_packet(struct SwiftNetServerPacketData* packet) {
87+
static void on_server_packet(struct SwiftNetServerPacketData* packet, void* const user) {
8888
struct SwiftNetServer* const server = atomic_load_explicit(&g_server, memory_order_acquire);
8989

9090
while (!atomic_load_explicit(&g_server_send_done, memory_order_acquire)) usleep(1000);
@@ -143,15 +143,15 @@ int test_sending_packet(const union Args* args_ptr) {
143143
return -1;
144144
}
145145

146-
swiftnet_server_set_message_handler(server, on_server_packet);
146+
swiftnet_server_set_message_handler(server, on_server_packet, NULL);
147147

148148
struct SwiftNetClientConnection* const client_conn = swiftnet_create_client(args.ip_address, 8080, 1000);
149149
if (client_conn == NULL) {
150150
PRINT_ERROR("Failed to create client connection");
151151
return -1;
152152
}
153153

154-
swiftnet_client_set_message_handler(client_conn, on_client_packet);
154+
swiftnet_client_set_message_handler(client_conn, on_client_packet, NULL);
155155

156156
atomic_store_explicit(&g_client_conn, client_conn, memory_order_release);
157157
atomic_store_explicit(&g_server, server, memory_order_release);

0 commit comments

Comments
 (0)