aboutsummaryrefslogtreecommitdiff
path: root/src/util/server.c
diff options
context:
space:
mode:
authorNathan S. Evans <evans@in.tum.de>2010-11-05 18:21:50 +0000
committerNathan S. Evans <evans@in.tum.de>2010-11-05 18:21:50 +0000
commit75a33a1499cf60ea4364c9aa673816629a6c1413 (patch)
tree0620da4312bb04de4d7b65074fdd3b0c3dd6cc0e /src/util/server.c
parent7217c601ad30760872823193d62307e7a335d226 (diff)
downloadgnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.tar.gz
gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.zip
big scheduler refactoring, expect some issues
Diffstat (limited to 'src/util/server.c')
-rw-r--r--src/util/server.c39
1 files changed, 11 insertions, 28 deletions
diff --git a/src/util/server.c b/src/util/server.c
index 516885fed..f586e4204 100644
--- a/src/util/server.c
+++ b/src/util/server.c
@@ -80,11 +80,6 @@ struct NotifyList
80struct GNUNET_SERVER_Handle 80struct GNUNET_SERVER_Handle
81{ 81{
82 /** 82 /**
83 * My scheduler.
84 */
85 struct GNUNET_SCHEDULER_Handle *sched;
86
87 /**
88 * List of handlers for incoming messages. 83 * List of handlers for incoming messages.
89 */ 84 */
90 struct HandlerList *handlers; 85 struct HandlerList *handlers;
@@ -249,8 +244,7 @@ process_listen_socket (void *cls,
249 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 244 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
250 { 245 {
251 /* ignore shutdown, someone else will take care of it! */ 246 /* ignore shutdown, someone else will take care of it! */
252 server->listen_task = GNUNET_SCHEDULER_add_select (server->sched, 247 server->listen_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
253 GNUNET_SCHEDULER_PRIORITY_HIGH,
254 GNUNET_SCHEDULER_NO_TASK, 248 GNUNET_SCHEDULER_NO_TASK,
255 GNUNET_TIME_UNIT_FOREVER_REL, 249 GNUNET_TIME_UNIT_FOREVER_REL,
256 r, NULL, 250 r, NULL,
@@ -266,7 +260,7 @@ process_listen_socket (void *cls,
266 (tc->read_ready, server->listen_sockets[i])) 260 (tc->read_ready, server->listen_sockets[i]))
267 { 261 {
268 sock = 262 sock =
269 GNUNET_CONNECTION_create_from_accept (tc->sched, server->access, 263 GNUNET_CONNECTION_create_from_accept (server->access,
270 server->access_cls, 264 server->access_cls,
271 server->listen_sockets[i]); 265 server->listen_sockets[i]);
272 if (sock != NULL) 266 if (sock != NULL)
@@ -285,8 +279,7 @@ process_listen_socket (void *cls,
285 i++; 279 i++;
286 } 280 }
287 /* listen for more! */ 281 /* listen for more! */
288 server->listen_task = GNUNET_SCHEDULER_add_select (server->sched, 282 server->listen_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
289 GNUNET_SCHEDULER_PRIORITY_HIGH,
290 GNUNET_SCHEDULER_NO_TASK, 283 GNUNET_SCHEDULER_NO_TASK,
291 GNUNET_TIME_UNIT_FOREVER_REL, 284 GNUNET_TIME_UNIT_FOREVER_REL,
292 r, NULL, 285 r, NULL,
@@ -386,7 +379,6 @@ open_listen_socket (const struct sockaddr *serverAddr, socklen_t socklen)
386/** 379/**
387 * Create a new server. 380 * Create a new server.
388 * 381 *
389 * @param sched scheduler to use
390 * @param access function for access control 382 * @param access function for access control
391 * @param access_cls closure for access 383 * @param access_cls closure for access
392 * @param lsocks NULL-terminated array of listen sockets 384 * @param lsocks NULL-terminated array of listen sockets
@@ -397,8 +389,7 @@ open_listen_socket (const struct sockaddr *serverAddr, socklen_t socklen)
397 * (typically, "port" already in use) 389 * (typically, "port" already in use)
398 */ 390 */
399struct GNUNET_SERVER_Handle * 391struct GNUNET_SERVER_Handle *
400GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched, 392GNUNET_SERVER_create_with_sockets (GNUNET_CONNECTION_AccessCheck access, void *access_cls,
401 GNUNET_CONNECTION_AccessCheck access, void *access_cls,
402 struct GNUNET_NETWORK_Handle **lsocks, 393 struct GNUNET_NETWORK_Handle **lsocks,
403 struct GNUNET_TIME_Relative 394 struct GNUNET_TIME_Relative
404 idle_timeout, 395 idle_timeout,
@@ -409,7 +400,6 @@ GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched,
409 int i; 400 int i;
410 401
411 ret = GNUNET_malloc (sizeof (struct GNUNET_SERVER_Handle)); 402 ret = GNUNET_malloc (sizeof (struct GNUNET_SERVER_Handle));
412 ret->sched = sched;
413 ret->idle_timeout = idle_timeout; 403 ret->idle_timeout = idle_timeout;
414 ret->listen_sockets = lsocks; 404 ret->listen_sockets = lsocks;
415 ret->access = access; 405 ret->access = access;
@@ -421,8 +411,7 @@ GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched,
421 i = 0; 411 i = 0;
422 while (NULL != ret->listen_sockets[i]) 412 while (NULL != ret->listen_sockets[i])
423 GNUNET_NETWORK_fdset_set (r, ret->listen_sockets[i++]); 413 GNUNET_NETWORK_fdset_set (r, ret->listen_sockets[i++]);
424 ret->listen_task = GNUNET_SCHEDULER_add_select (sched, 414 ret->listen_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
425 GNUNET_SCHEDULER_PRIORITY_HIGH,
426 GNUNET_SCHEDULER_NO_TASK, 415 GNUNET_SCHEDULER_NO_TASK,
427 GNUNET_TIME_UNIT_FOREVER_REL, 416 GNUNET_TIME_UNIT_FOREVER_REL,
428 r, NULL, 417 r, NULL,
@@ -437,7 +426,6 @@ GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched,
437/** 426/**
438 * Create a new server. 427 * Create a new server.
439 * 428 *
440 * @param sched scheduler to use
441 * @param access function for access control 429 * @param access function for access control
442 * @param access_cls closure for access 430 * @param access_cls closure for access
443 * @param serverAddr address to listen on (including port), NULL terminated array 431 * @param serverAddr address to listen on (including port), NULL terminated array
@@ -449,8 +437,7 @@ GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched,
449 * (typically, "port" already in use) 437 * (typically, "port" already in use)
450 */ 438 */
451struct GNUNET_SERVER_Handle * 439struct GNUNET_SERVER_Handle *
452GNUNET_SERVER_create (struct GNUNET_SCHEDULER_Handle *sched, 440GNUNET_SERVER_create (GNUNET_CONNECTION_AccessCheck access,
453 GNUNET_CONNECTION_AccessCheck access,
454 void *access_cls, 441 void *access_cls,
455 struct sockaddr *const *serverAddr, 442 struct sockaddr *const *serverAddr,
456 const socklen_t * socklen, 443 const socklen_t * socklen,
@@ -489,8 +476,7 @@ GNUNET_SERVER_create (struct GNUNET_SCHEDULER_Handle *sched,
489 { 476 {
490 lsocks = NULL; 477 lsocks = NULL;
491 } 478 }
492 return GNUNET_SERVER_create_with_sockets (sched, 479 return GNUNET_SERVER_create_with_sockets (access, access_cls,
493 access, access_cls,
494 lsocks, 480 lsocks,
495 idle_timeout, 481 idle_timeout,
496 require_found); 482 require_found);
@@ -514,7 +500,7 @@ GNUNET_SERVER_destroy (struct GNUNET_SERVER_Handle *s)
514#endif 500#endif
515 if (GNUNET_SCHEDULER_NO_TASK != s->listen_task) 501 if (GNUNET_SCHEDULER_NO_TASK != s->listen_task)
516 { 502 {
517 GNUNET_SCHEDULER_cancel (s->sched, s->listen_task); 503 GNUNET_SCHEDULER_cancel (s->listen_task);
518 s->listen_task = GNUNET_SCHEDULER_NO_TASK; 504 s->listen_task = GNUNET_SCHEDULER_NO_TASK;
519 } 505 }
520 if (s->listen_sockets != NULL) 506 if (s->listen_sockets != NULL)
@@ -1023,8 +1009,7 @@ GNUNET_SERVER_client_disconnect (struct GNUNET_SERVER_Client *client)
1023#endif 1009#endif
1024 if (client->restart_task != GNUNET_SCHEDULER_NO_TASK) 1010 if (client->restart_task != GNUNET_SCHEDULER_NO_TASK)
1025 { 1011 {
1026 GNUNET_SCHEDULER_cancel (client->server->sched, 1012 GNUNET_SCHEDULER_cancel (client->restart_task);
1027 client->restart_task);
1028 client->restart_task = GNUNET_SCHEDULER_NO_TASK; 1013 client->restart_task = GNUNET_SCHEDULER_NO_TASK;
1029 } 1014 }
1030 if (GNUNET_YES == client->receive_pending) 1015 if (GNUNET_YES == client->receive_pending)
@@ -1053,8 +1038,7 @@ GNUNET_SERVER_client_disconnect (struct GNUNET_SERVER_Client *client)
1053 prev->next = pos->next; 1038 prev->next = pos->next;
1054 if (client->restart_task != GNUNET_SCHEDULER_NO_TASK) 1039 if (client->restart_task != GNUNET_SCHEDULER_NO_TASK)
1055 { 1040 {
1056 GNUNET_SCHEDULER_cancel (server->sched, 1041 GNUNET_SCHEDULER_cancel (client->restart_task);
1057 client->restart_task);
1058 client->restart_task = GNUNET_SCHEDULER_NO_TASK; 1042 client->restart_task = GNUNET_SCHEDULER_NO_TASK;
1059 } 1043 }
1060 n = server->disconnect_notify_list; 1044 n = server->disconnect_notify_list;
@@ -1182,8 +1166,7 @@ GNUNET_SERVER_receive_done (struct GNUNET_SERVER_Client *client, int success)
1182 "GNUNET_SERVER_receive_done causes restart in reading from the socket\n"); 1166 "GNUNET_SERVER_receive_done causes restart in reading from the socket\n");
1183#endif 1167#endif
1184 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == client->restart_task); 1168 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == client->restart_task);
1185 client->restart_task = GNUNET_SCHEDULER_add_now (client->server->sched, 1169 client->restart_task = GNUNET_SCHEDULER_add_now (&restart_processing,
1186 &restart_processing,
1187 client); 1170 client);
1188} 1171}
1189 1172