aboutsummaryrefslogtreecommitdiff
path: root/src/core/gnunet-service-core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/gnunet-service-core.c')
-rw-r--r--src/core/gnunet-service-core.c94
1 files changed, 35 insertions, 59 deletions
diff --git a/src/core/gnunet-service-core.c b/src/core/gnunet-service-core.c
index 6b662982d..c1ebdb9df 100644
--- a/src/core/gnunet-service-core.c
+++ b/src/core/gnunet-service-core.c
@@ -657,10 +657,6 @@ static struct GNUNET_PeerIdentity my_identity;
657 */ 657 */
658static struct GNUNET_CRYPTO_RsaPrivateKey *my_private_key; 658static struct GNUNET_CRYPTO_RsaPrivateKey *my_private_key;
659 659
660/**
661 * Our scheduler.
662 */
663struct GNUNET_SCHEDULER_Handle *sched;
664 660
665/** 661/**
666 * Handle to peerinfo service. 662 * Handle to peerinfo service.
@@ -1259,15 +1255,15 @@ free_neighbour (struct Neighbour *n)
1259 n->th = NULL; 1255 n->th = NULL;
1260 } 1256 }
1261 if (n->retry_plaintext_task != GNUNET_SCHEDULER_NO_TASK) 1257 if (n->retry_plaintext_task != GNUNET_SCHEDULER_NO_TASK)
1262 GNUNET_SCHEDULER_cancel (sched, n->retry_plaintext_task); 1258 GNUNET_SCHEDULER_cancel (n->retry_plaintext_task);
1263 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK) 1259 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK)
1264 GNUNET_SCHEDULER_cancel (sched, n->retry_set_key_task); 1260 GNUNET_SCHEDULER_cancel (n->retry_set_key_task);
1265 if (n->quota_update_task != GNUNET_SCHEDULER_NO_TASK) 1261 if (n->quota_update_task != GNUNET_SCHEDULER_NO_TASK)
1266 GNUNET_SCHEDULER_cancel (sched, n->quota_update_task); 1262 GNUNET_SCHEDULER_cancel (n->quota_update_task);
1267 if (n->dead_clean_task != GNUNET_SCHEDULER_NO_TASK) 1263 if (n->dead_clean_task != GNUNET_SCHEDULER_NO_TASK)
1268 GNUNET_SCHEDULER_cancel (sched, n->dead_clean_task); 1264 GNUNET_SCHEDULER_cancel (n->dead_clean_task);
1269 if (n->keep_alive_task != GNUNET_SCHEDULER_NO_TASK) 1265 if (n->keep_alive_task != GNUNET_SCHEDULER_NO_TASK)
1270 GNUNET_SCHEDULER_cancel (sched, n->keep_alive_task); 1266 GNUNET_SCHEDULER_cancel (n->keep_alive_task);
1271 if (n->status == PEER_STATE_KEY_CONFIRMED) 1267 if (n->status == PEER_STATE_KEY_CONFIRMED)
1272 GNUNET_STATISTICS_update (stats, gettext_noop ("# established sessions"), -1, GNUNET_NO); 1268 GNUNET_STATISTICS_update (stats, gettext_noop ("# established sessions"), -1, GNUNET_NO);
1273 GNUNET_free_non_null (n->public_key); 1269 GNUNET_free_non_null (n->public_key);
@@ -1397,8 +1393,7 @@ send_keep_alive (void *cls,
1397 retry = GNUNET_TIME_relative_max (GNUNET_TIME_relative_divide (left, 2), 1393 retry = GNUNET_TIME_relative_max (GNUNET_TIME_relative_divide (left, 2),
1398 MIN_PING_FREQUENCY); 1394 MIN_PING_FREQUENCY);
1399 n->keep_alive_task 1395 n->keep_alive_task
1400 = GNUNET_SCHEDULER_add_delayed (sched, 1396 = GNUNET_SCHEDULER_add_delayed (retry,
1401 retry,
1402 &send_keep_alive, 1397 &send_keep_alive,
1403 n); 1398 n);
1404 1399
@@ -1445,9 +1440,8 @@ consider_free_neighbour (struct Neighbour *n)
1445 if (left.rel_value > 0) 1440 if (left.rel_value > 0)
1446 { 1441 {
1447 if (n->dead_clean_task != GNUNET_SCHEDULER_NO_TASK) 1442 if (n->dead_clean_task != GNUNET_SCHEDULER_NO_TASK)
1448 GNUNET_SCHEDULER_cancel (sched, n->dead_clean_task); 1443 GNUNET_SCHEDULER_cancel (n->dead_clean_task);
1449 n->dead_clean_task = GNUNET_SCHEDULER_add_delayed (sched, 1444 n->dead_clean_task = GNUNET_SCHEDULER_add_delayed (left,
1450 left,
1451 &consider_free_task, 1445 &consider_free_task,
1452 n); 1446 n);
1453 return; 1447 return;
@@ -2087,7 +2081,7 @@ process_plaintext_neighbour_queue (struct Neighbour *n)
2087 2081
2088 if (n->retry_plaintext_task != GNUNET_SCHEDULER_NO_TASK) 2082 if (n->retry_plaintext_task != GNUNET_SCHEDULER_NO_TASK)
2089 { 2083 {
2090 GNUNET_SCHEDULER_cancel (sched, n->retry_plaintext_task); 2084 GNUNET_SCHEDULER_cancel (n->retry_plaintext_task);
2091 n->retry_plaintext_task = GNUNET_SCHEDULER_NO_TASK; 2085 n->retry_plaintext_task = GNUNET_SCHEDULER_NO_TASK;
2092 } 2086 }
2093 switch (n->status) 2087 switch (n->status)
@@ -2103,8 +2097,7 @@ process_plaintext_neighbour_queue (struct Neighbour *n)
2103 case PEER_STATE_KEY_SENT: 2097 case PEER_STATE_KEY_SENT:
2104 if (n->retry_set_key_task == GNUNET_SCHEDULER_NO_TASK) 2098 if (n->retry_set_key_task == GNUNET_SCHEDULER_NO_TASK)
2105 n->retry_set_key_task 2099 n->retry_set_key_task
2106 = GNUNET_SCHEDULER_add_delayed (sched, 2100 = GNUNET_SCHEDULER_add_delayed (n->set_key_retry_frequency,
2107 n->set_key_retry_frequency,
2108 &set_key_retry_task, n); 2101 &set_key_retry_task, n);
2109#if DEBUG_CORE 2102#if DEBUG_CORE
2110 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2103 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -2115,8 +2108,7 @@ process_plaintext_neighbour_queue (struct Neighbour *n)
2115 case PEER_STATE_KEY_RECEIVED: 2108 case PEER_STATE_KEY_RECEIVED:
2116 if (n->retry_set_key_task == GNUNET_SCHEDULER_NO_TASK) 2109 if (n->retry_set_key_task == GNUNET_SCHEDULER_NO_TASK)
2117 n->retry_set_key_task 2110 n->retry_set_key_task
2118 = GNUNET_SCHEDULER_add_delayed (sched, 2111 = GNUNET_SCHEDULER_add_delayed (n->set_key_retry_frequency,
2119 n->set_key_retry_frequency,
2120 &set_key_retry_task, n); 2112 &set_key_retry_task, n);
2121#if DEBUG_CORE 2113#if DEBUG_CORE
2122 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 2114 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -2165,8 +2157,7 @@ process_plaintext_neighbour_queue (struct Neighbour *n)
2165#endif 2157#endif
2166 /* no messages selected for sending, try again later... */ 2158 /* no messages selected for sending, try again later... */
2167 n->retry_plaintext_task = 2159 n->retry_plaintext_task =
2168 GNUNET_SCHEDULER_add_delayed (sched, 2160 GNUNET_SCHEDULER_add_delayed (retry_time,
2169 retry_time,
2170 &retry_plaintext_processing, n); 2161 &retry_plaintext_processing, n);
2171 return; 2162 return;
2172 } 2163 }
@@ -2252,8 +2243,7 @@ schedule_quota_update (struct Neighbour *n)
2252 GNUNET_assert (n->quota_update_task == 2243 GNUNET_assert (n->quota_update_task ==
2253 GNUNET_SCHEDULER_NO_TASK); 2244 GNUNET_SCHEDULER_NO_TASK);
2254 n->quota_update_task 2245 n->quota_update_task
2255 = GNUNET_SCHEDULER_add_delayed (sched, 2246 = GNUNET_SCHEDULER_add_delayed (QUOTA_UPDATE_FREQUENCY,
2256 QUOTA_UPDATE_FREQUENCY,
2257 &neighbour_quota_update, 2247 &neighbour_quota_update,
2258 n); 2248 n);
2259} 2249}
@@ -2475,10 +2465,8 @@ notify_transport_connect_done (void *cls, size_t size, void *buf)
2475 _("TRANSPORT connection to peer `%4s' is up, trying to establish CORE connection\n"), 2465 _("TRANSPORT connection to peer `%4s' is up, trying to establish CORE connection\n"),
2476 GNUNET_i2s (&n->peer)); 2466 GNUNET_i2s (&n->peer));
2477 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK) 2467 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK)
2478 GNUNET_SCHEDULER_cancel (sched, 2468 GNUNET_SCHEDULER_cancel (n->retry_set_key_task);
2479 n->retry_set_key_task); 2469 n->retry_set_key_task = GNUNET_SCHEDULER_add_now (&set_key_retry_task,
2480 n->retry_set_key_task = GNUNET_SCHEDULER_add_now (sched,
2481 &set_key_retry_task,
2482 n); 2470 n);
2483 return 0; 2471 return 0;
2484} 2472}
@@ -2567,7 +2555,7 @@ process_hello_retry_send_key (void *cls,
2567 { 2555 {
2568 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK) 2556 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK)
2569 { 2557 {
2570 GNUNET_SCHEDULER_cancel (sched, n->retry_set_key_task); 2558 GNUNET_SCHEDULER_cancel (n->retry_set_key_task);
2571 n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK; 2559 n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK;
2572 } 2560 }
2573 GNUNET_STATISTICS_update (stats, 2561 GNUNET_STATISTICS_update (stats,
@@ -2589,8 +2577,7 @@ process_hello_retry_send_key (void *cls,
2589 GNUNET_NO); 2577 GNUNET_NO);
2590 if (GNUNET_SCHEDULER_NO_TASK == n->retry_set_key_task) 2578 if (GNUNET_SCHEDULER_NO_TASK == n->retry_set_key_task)
2591 n->retry_set_key_task 2579 n->retry_set_key_task
2592 = GNUNET_SCHEDULER_add_delayed (sched, 2580 = GNUNET_SCHEDULER_add_delayed (n->set_key_retry_frequency,
2593 n->set_key_retry_frequency,
2594 &set_key_retry_task, n); 2581 &set_key_retry_task, n);
2595 } 2582 }
2596 return; 2583 return;
@@ -2651,7 +2638,7 @@ send_key (struct Neighbour *n)
2651 2638
2652 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK) 2639 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK)
2653 { 2640 {
2654 GNUNET_SCHEDULER_cancel (sched, n->retry_set_key_task); 2641 GNUNET_SCHEDULER_cancel (n->retry_set_key_task);
2655 n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK; 2642 n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK;
2656 } 2643 }
2657 if (n->pitr != NULL) 2644 if (n->pitr != NULL)
@@ -2829,8 +2816,7 @@ send_key (struct Neighbour *n)
2829 if ( (n->status != PEER_STATE_KEY_CONFIRMED) && 2816 if ( (n->status != PEER_STATE_KEY_CONFIRMED) &&
2830 (GNUNET_SCHEDULER_NO_TASK == n->retry_set_key_task) ) 2817 (GNUNET_SCHEDULER_NO_TASK == n->retry_set_key_task) )
2831 n->retry_set_key_task 2818 n->retry_set_key_task
2832 = GNUNET_SCHEDULER_add_delayed (sched, 2819 = GNUNET_SCHEDULER_add_delayed (n->set_key_retry_frequency,
2833 n->set_key_retry_frequency,
2834 &set_key_retry_task, n); 2820 &set_key_retry_task, n);
2835} 2821}
2836 2822
@@ -3096,7 +3082,7 @@ handle_pong (struct Neighbour *n,
3096#endif 3082#endif
3097 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK) 3083 if (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK)
3098 { 3084 {
3099 GNUNET_SCHEDULER_cancel (sched, n->retry_set_key_task); 3085 GNUNET_SCHEDULER_cancel (n->retry_set_key_task);
3100 n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK; 3086 n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK;
3101 } 3087 }
3102 cnm.header.size = htons (sizeof (struct ConnectNotifyMessage)); 3088 cnm.header.size = htons (sizeof (struct ConnectNotifyMessage));
@@ -3110,10 +3096,9 @@ handle_pong (struct Neighbour *n,
3110 case PEER_STATE_KEY_CONFIRMED: 3096 case PEER_STATE_KEY_CONFIRMED:
3111 n->last_activity = GNUNET_TIME_absolute_get (); 3097 n->last_activity = GNUNET_TIME_absolute_get ();
3112 if (n->keep_alive_task != GNUNET_SCHEDULER_NO_TASK) 3098 if (n->keep_alive_task != GNUNET_SCHEDULER_NO_TASK)
3113 GNUNET_SCHEDULER_cancel (sched, n->keep_alive_task); 3099 GNUNET_SCHEDULER_cancel (n->keep_alive_task);
3114 n->keep_alive_task 3100 n->keep_alive_task
3115 = GNUNET_SCHEDULER_add_delayed (sched, 3101 = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_divide (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 2),
3116 GNUNET_TIME_relative_divide (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 2),
3117 &send_keep_alive, 3102 &send_keep_alive,
3118 n); 3103 n);
3119 handle_peer_status_change (n); 3104 handle_peer_status_change (n);
@@ -3560,10 +3545,9 @@ handle_encrypted_message (struct Neighbour *n,
3560 } 3545 }
3561 n->last_activity = GNUNET_TIME_absolute_get (); 3546 n->last_activity = GNUNET_TIME_absolute_get ();
3562 if (n->keep_alive_task != GNUNET_SCHEDULER_NO_TASK) 3547 if (n->keep_alive_task != GNUNET_SCHEDULER_NO_TASK)
3563 GNUNET_SCHEDULER_cancel (sched, n->keep_alive_task); 3548 GNUNET_SCHEDULER_cancel (n->keep_alive_task);
3564 n->keep_alive_task 3549 n->keep_alive_task
3565 = GNUNET_SCHEDULER_add_delayed (sched, 3550 = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_divide (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 2),
3566 GNUNET_TIME_relative_divide (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 2),
3567 &send_keep_alive, 3551 &send_keep_alive,
3568 n); 3552 n);
3569 GNUNET_STATISTICS_set (stats, 3553 GNUNET_STATISTICS_set (stats,
@@ -3711,10 +3695,9 @@ handle_transport_receive (void *cls,
3711 n->time_established = now; 3695 n->time_established = now;
3712 } 3696 }
3713 if (n->keep_alive_task != GNUNET_SCHEDULER_NO_TASK) 3697 if (n->keep_alive_task != GNUNET_SCHEDULER_NO_TASK)
3714 GNUNET_SCHEDULER_cancel (sched, n->keep_alive_task); 3698 GNUNET_SCHEDULER_cancel (n->keep_alive_task);
3715 n->keep_alive_task 3699 n->keep_alive_task
3716 = GNUNET_SCHEDULER_add_delayed (sched, 3700 = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_divide (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 2),
3717 GNUNET_TIME_relative_divide (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 2),
3718 &send_keep_alive, 3701 &send_keep_alive,
3719 n); 3702 n);
3720 } 3703 }
@@ -3912,14 +3895,12 @@ handle_transport_notify_disconnect (void *cls,
3912 -1, 3895 -1,
3913 GNUNET_NO); 3896 GNUNET_NO);
3914 if (n->dead_clean_task != GNUNET_SCHEDULER_NO_TASK) 3897 if (n->dead_clean_task != GNUNET_SCHEDULER_NO_TASK)
3915 GNUNET_SCHEDULER_cancel (sched, 3898 GNUNET_SCHEDULER_cancel (n->dead_clean_task);
3916 n->dead_clean_task);
3917 left = GNUNET_TIME_relative_subtract (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT, 3899 left = GNUNET_TIME_relative_subtract (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT,
3918 GNUNET_CONSTANTS_DISCONNECT_SESSION_TIMEOUT); 3900 GNUNET_CONSTANTS_DISCONNECT_SESSION_TIMEOUT);
3919 n->last_activity = GNUNET_TIME_absolute_subtract (GNUNET_TIME_absolute_get (), 3901 n->last_activity = GNUNET_TIME_absolute_subtract (GNUNET_TIME_absolute_get (),
3920 left); 3902 left);
3921 n->dead_clean_task = GNUNET_SCHEDULER_add_delayed (sched, 3903 n->dead_clean_task = GNUNET_SCHEDULER_add_delayed (GNUNET_CONSTANTS_DISCONNECT_SESSION_TIMEOUT,
3922 GNUNET_CONSTANTS_DISCONNECT_SESSION_TIMEOUT,
3923 &consider_free_task, 3904 &consider_free_task,
3924 n); 3905 n);
3925} 3906}
@@ -3969,13 +3950,11 @@ cleaning_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
3969 * Initiate core service. 3950 * Initiate core service.
3970 * 3951 *
3971 * @param cls closure 3952 * @param cls closure
3972 * @param s scheduler to use
3973 * @param server the initialized server 3953 * @param server the initialized server
3974 * @param c configuration to use 3954 * @param c configuration to use
3975 */ 3955 */
3976static void 3956static void
3977run (void *cls, 3957run (void *cls,
3978 struct GNUNET_SCHEDULER_Handle *s,
3979 struct GNUNET_SERVER_Handle *server, 3958 struct GNUNET_SERVER_Handle *server,
3980 const struct GNUNET_CONFIGURATION_Handle *c) 3959 const struct GNUNET_CONFIGURATION_Handle *c)
3981{ 3960{
@@ -3997,7 +3976,6 @@ run (void *cls,
3997 }; 3976 };
3998 char *keyfile; 3977 char *keyfile;
3999 3978
4000 sched = s;
4001 cfg = c; 3979 cfg = c;
4002 /* parse configuration */ 3980 /* parse configuration */
4003 if ( 3981 if (
@@ -4019,15 +3997,15 @@ run (void *cls,
4019 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 3997 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
4020 _ 3998 _
4021 ("Core service is lacking key configuration settings. Exiting.\n")); 3999 ("Core service is lacking key configuration settings. Exiting.\n"));
4022 GNUNET_SCHEDULER_shutdown (s); 4000 GNUNET_SCHEDULER_shutdown ();
4023 return; 4001 return;
4024 } 4002 }
4025 peerinfo = GNUNET_PEERINFO_connect (sched, cfg); 4003 peerinfo = GNUNET_PEERINFO_connect (cfg);
4026 if (NULL == peerinfo) 4004 if (NULL == peerinfo)
4027 { 4005 {
4028 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 4006 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
4029 _("Could not access PEERINFO service. Exiting.\n")); 4007 _("Could not access PEERINFO service. Exiting.\n"));
4030 GNUNET_SCHEDULER_shutdown (s); 4008 GNUNET_SCHEDULER_shutdown ();
4031 GNUNET_free (keyfile); 4009 GNUNET_free (keyfile);
4032 return; 4010 return;
4033 } 4011 }
@@ -4038,7 +4016,7 @@ run (void *cls,
4038 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 4016 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
4039 _("Core service could not access hostkey. Exiting.\n")); 4017 _("Core service could not access hostkey. Exiting.\n"));
4040 GNUNET_PEERINFO_disconnect (peerinfo); 4018 GNUNET_PEERINFO_disconnect (peerinfo);
4041 GNUNET_SCHEDULER_shutdown (s); 4019 GNUNET_SCHEDULER_shutdown ();
4042 return; 4020 return;
4043 } 4021 }
4044 GNUNET_CRYPTO_rsa_key_get_public (my_private_key, &my_public_key); 4022 GNUNET_CRYPTO_rsa_key_get_public (my_private_key, &my_public_key);
@@ -4049,23 +4027,21 @@ run (void *cls,
4049 MAX_NOTIFY_QUEUE); 4027 MAX_NOTIFY_QUEUE);
4050 GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL); 4028 GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL);
4051 /* setup transport connection */ 4029 /* setup transport connection */
4052 transport = GNUNET_TRANSPORT_connect (sched, 4030 transport = GNUNET_TRANSPORT_connect (cfg,
4053 cfg,
4054 &my_identity, 4031 &my_identity,
4055 NULL, 4032 NULL,
4056 &handle_transport_receive, 4033 &handle_transport_receive,
4057 &handle_transport_notify_connect, 4034 &handle_transport_notify_connect,
4058 &handle_transport_notify_disconnect); 4035 &handle_transport_notify_disconnect);
4059 GNUNET_assert (NULL != transport); 4036 GNUNET_assert (NULL != transport);
4060 stats = GNUNET_STATISTICS_create (sched, "core", cfg); 4037 stats = GNUNET_STATISTICS_create ("core", cfg);
4061 4038
4062 GNUNET_STATISTICS_set (stats, gettext_noop ("# discarded CORE_SEND requests"), 0, GNUNET_NO); 4039 GNUNET_STATISTICS_set (stats, gettext_noop ("# discarded CORE_SEND requests"), 0, GNUNET_NO);
4063 GNUNET_STATISTICS_set (stats, gettext_noop ("# discarded lower priority CORE_SEND requests"), 0, GNUNET_NO); 4040 GNUNET_STATISTICS_set (stats, gettext_noop ("# discarded lower priority CORE_SEND requests"), 0, GNUNET_NO);
4064 4041
4065 mst = GNUNET_SERVER_mst_create (&deliver_message, 4042 mst = GNUNET_SERVER_mst_create (&deliver_message,
4066 NULL); 4043 NULL);
4067 GNUNET_SCHEDULER_add_delayed (sched, 4044 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
4068 GNUNET_TIME_UNIT_FOREVER_REL,
4069 &cleaning_task, NULL); 4045 &cleaning_task, NULL);
4070 /* process client requests */ 4046 /* process client requests */
4071 GNUNET_SERVER_add_handlers (server, handlers); 4047 GNUNET_SERVER_add_handlers (server, handlers);