aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-service-transport.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/gnunet-service-transport.c')
-rw-r--r--src/transport/gnunet-service-transport.c90
1 files changed, 30 insertions, 60 deletions
diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c
index 87d73baf4..0ade42512 100644
--- a/src/transport/gnunet-service-transport.c
+++ b/src/transport/gnunet-service-transport.c
@@ -843,11 +843,6 @@ static struct GNUNET_PeerIdentity my_identity;
843static struct GNUNET_CRYPTO_RsaPrivateKey *my_private_key; 843static struct GNUNET_CRYPTO_RsaPrivateKey *my_private_key;
844 844
845/** 845/**
846 * Our scheduler.
847 */
848struct GNUNET_SCHEDULER_Handle *sched;
849
850/**
851 * Our configuration. 846 * Our configuration.
852 */ 847 */
853const struct GNUNET_CONFIGURATION_Handle *cfg; 848const struct GNUNET_CONFIGURATION_Handle *cfg;
@@ -1656,10 +1651,8 @@ try_transmission_to_peer (struct NeighbourList *neighbour)
1656 1, 1651 1,
1657 GNUNET_NO); 1652 GNUNET_NO);
1658 if (neighbour->retry_task != GNUNET_SCHEDULER_NO_TASK) 1653 if (neighbour->retry_task != GNUNET_SCHEDULER_NO_TASK)
1659 GNUNET_SCHEDULER_cancel (sched, 1654 GNUNET_SCHEDULER_cancel (neighbour->retry_task);
1660 neighbour->retry_task); 1655 neighbour->retry_task = GNUNET_SCHEDULER_add_delayed (timeout,
1661 neighbour->retry_task = GNUNET_SCHEDULER_add_delayed (sched,
1662 timeout,
1663 &retry_transmission_task, 1656 &retry_transmission_task,
1664 neighbour); 1657 neighbour);
1665#if DEBUG_TRANSPORT 1658#if DEBUG_TRANSPORT
@@ -1924,7 +1917,7 @@ update_addresses (struct TransportPlugin *plugin, int fresh)
1924 int expired; 1917 int expired;
1925 1918
1926 if (plugin->address_update_task != GNUNET_SCHEDULER_NO_TASK) 1919 if (plugin->address_update_task != GNUNET_SCHEDULER_NO_TASK)
1927 GNUNET_SCHEDULER_cancel (plugin->env.sched, plugin->address_update_task); 1920 GNUNET_SCHEDULER_cancel (plugin->address_update_task);
1928 plugin->address_update_task = GNUNET_SCHEDULER_NO_TASK; 1921 plugin->address_update_task = GNUNET_SCHEDULER_NO_TASK;
1929 now = GNUNET_TIME_absolute_get (); 1922 now = GNUNET_TIME_absolute_get ();
1930 min_remaining = GNUNET_TIME_UNIT_FOREVER_REL; 1923 min_remaining = GNUNET_TIME_UNIT_FOREVER_REL;
@@ -1962,8 +1955,7 @@ update_addresses (struct TransportPlugin *plugin, int fresh)
1962 GNUNET_TIME_relative_divide (HELLO_ADDRESS_EXPIRATION, 1955 GNUNET_TIME_relative_divide (HELLO_ADDRESS_EXPIRATION,
1963 2)); 1956 2));
1964 plugin->address_update_task 1957 plugin->address_update_task
1965 = GNUNET_SCHEDULER_add_delayed (plugin->env.sched, 1958 = GNUNET_SCHEDULER_add_delayed (min_remaining,
1966 min_remaining,
1967 &expire_address_task, plugin); 1959 &expire_address_task, plugin);
1968} 1960}
1969 1961
@@ -2126,8 +2118,7 @@ plugin_env_session_end (void *cls,
2126 prev->next = pos->next; 2118 prev->next = pos->next;
2127 if (GNUNET_SCHEDULER_NO_TASK != pos->revalidate_task) 2119 if (GNUNET_SCHEDULER_NO_TASK != pos->revalidate_task)
2128 { 2120 {
2129 GNUNET_SCHEDULER_cancel (sched, 2121 GNUNET_SCHEDULER_cancel (pos->revalidate_task);
2130 pos->revalidate_task);
2131 pos->revalidate_task = GNUNET_SCHEDULER_NO_TASK; 2122 pos->revalidate_task = GNUNET_SCHEDULER_NO_TASK;
2132 } 2123 }
2133 GNUNET_free (pos); 2124 GNUNET_free (pos);
@@ -2518,7 +2509,7 @@ abort_validation (void *cls,
2518 struct ValidationEntry *va = value; 2509 struct ValidationEntry *va = value;
2519 2510
2520 if (GNUNET_SCHEDULER_NO_TASK != va->timeout_task) 2511 if (GNUNET_SCHEDULER_NO_TASK != va->timeout_task)
2521 GNUNET_SCHEDULER_cancel (sched, va->timeout_task); 2512 GNUNET_SCHEDULER_cancel (va->timeout_task);
2522 GNUNET_free (va->transport_name); 2513 GNUNET_free (va->transport_name);
2523 if (va->chvc != NULL) 2514 if (va->chvc != NULL)
2524 { 2515 {
@@ -2776,8 +2767,7 @@ setup_new_neighbour (const struct GNUNET_PeerIdentity *peer,
2776 } 2767 }
2777 n->latency = GNUNET_TIME_UNIT_FOREVER_REL; 2768 n->latency = GNUNET_TIME_UNIT_FOREVER_REL;
2778 n->distance = -1; 2769 n->distance = -1;
2779 n->timeout_task = GNUNET_SCHEDULER_add_delayed (sched, 2770 n->timeout_task = GNUNET_SCHEDULER_add_delayed (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT,
2780 GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT,
2781 &neighbour_timeout_task, n); 2771 &neighbour_timeout_task, n);
2782 if (do_hello) 2772 if (do_hello)
2783 { 2773 {
@@ -2954,8 +2944,7 @@ transmit_blacklist_message (void *cls,
2954 if (size == 0) 2944 if (size == 0)
2955 { 2945 {
2956 GNUNET_assert (bc->task == GNUNET_SCHEDULER_NO_TASK); 2946 GNUNET_assert (bc->task == GNUNET_SCHEDULER_NO_TASK);
2957 bc->task = GNUNET_SCHEDULER_add_now (sched, 2947 bc->task = GNUNET_SCHEDULER_add_now (&do_blacklist_check,
2958 &do_blacklist_check,
2959 bc); 2948 bc);
2960 return 0; 2949 return 0;
2961 } 2950 }
@@ -3047,8 +3036,7 @@ setup_peer_check_blacklist (const struct GNUNET_PeerIdentity *peer,
3047 bc->cont = cont; 3036 bc->cont = cont;
3048 bc->cont_cls = cont_cls; 3037 bc->cont_cls = cont_cls;
3049 bc->bl_pos = bl_head; 3038 bc->bl_pos = bl_head;
3050 bc->task = GNUNET_SCHEDULER_add_now (sched, 3039 bc->task = GNUNET_SCHEDULER_add_now (&do_blacklist_check,
3051 &do_blacklist_check,
3052 bc); 3040 bc);
3053} 3041}
3054 3042
@@ -3120,8 +3108,7 @@ handle_blacklist_init (void *cls,
3120 bc->bl_pos = bl; 3108 bc->bl_pos = bl;
3121 if (n == neighbours) /* all would wait for the same client, no need to 3109 if (n == neighbours) /* all would wait for the same client, no need to
3122 create more than just the first task right now */ 3110 create more than just the first task right now */
3123 bc->task = GNUNET_SCHEDULER_add_now (sched, 3111 bc->task = GNUNET_SCHEDULER_add_now (&do_blacklist_check,
3124 &do_blacklist_check,
3125 bc); 3112 bc);
3126 n = n->next; 3113 n = n->next;
3127 } 3114 }
@@ -3164,8 +3151,7 @@ handle_blacklist_reply (void *cls,
3164 else 3151 else
3165 { 3152 {
3166 bc->bl_pos = bc->bl_pos->next; 3153 bc->bl_pos = bc->bl_pos->next;
3167 bc->task = GNUNET_SCHEDULER_add_now (sched, 3154 bc->task = GNUNET_SCHEDULER_add_now (&do_blacklist_check,
3168 &do_blacklist_check,
3169 bc); 3155 bc);
3170 } 3156 }
3171 /* check if any other bc's are waiting for this blacklister */ 3157 /* check if any other bc's are waiting for this blacklister */
@@ -3174,8 +3160,7 @@ handle_blacklist_reply (void *cls,
3174 { 3160 {
3175 if ( (bc->bl_pos == bl) && 3161 if ( (bc->bl_pos == bl) &&
3176 (GNUNET_SCHEDULER_NO_TASK == bc->task) ) 3162 (GNUNET_SCHEDULER_NO_TASK == bc->task) )
3177 bc->task = GNUNET_SCHEDULER_add_now (sched, 3163 bc->task = GNUNET_SCHEDULER_add_now (&do_blacklist_check,
3178 &do_blacklist_check,
3179 bc); 3164 bc);
3180 bc = bc->next; 3165 bc = bc->next;
3181 } 3166 }
@@ -3258,8 +3243,7 @@ send_periodic_ping (void *cls,
3258 &neighbour->publicKey, 3243 &neighbour->publicKey,
3259 sizeof(struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)); 3244 sizeof(struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded));
3260 3245
3261 va->timeout_task = GNUNET_SCHEDULER_add_delayed (sched, 3246 va->timeout_task = GNUNET_SCHEDULER_add_delayed (HELLO_VERIFICATION_TIMEOUT,
3262 HELLO_VERIFICATION_TIMEOUT,
3263 &timeout_hello_validation, 3247 &timeout_hello_validation,
3264 va); 3248 va);
3265 GNUNET_CONTAINER_multihashmap_put (validation_map, 3249 GNUNET_CONTAINER_multihashmap_put (validation_map,
@@ -3384,8 +3368,7 @@ schedule_next_ping (struct ForeignAddressList *fal)
3384 GNUNET_TIME_UNIT_SECONDS); 3368 GNUNET_TIME_UNIT_SECONDS);
3385 /* randomize a bit (to avoid doing all at the same time) */ 3369 /* randomize a bit (to avoid doing all at the same time) */
3386 delay.rel_value += GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 1000); 3370 delay.rel_value += GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 1000);
3387 fal->revalidate_task = GNUNET_SCHEDULER_add_delayed(sched, 3371 fal->revalidate_task = GNUNET_SCHEDULER_add_delayed(delay,
3388 delay,
3389 &send_periodic_ping, 3372 &send_periodic_ping,
3390 fal); 3373 fal);
3391} 3374}
@@ -3691,8 +3674,7 @@ check_pending_validation (void *cls,
3691 } 3674 }
3692 if (n->retry_task != GNUNET_SCHEDULER_NO_TASK) 3675 if (n->retry_task != GNUNET_SCHEDULER_NO_TASK)
3693 { 3676 {
3694 GNUNET_SCHEDULER_cancel (sched, 3677 GNUNET_SCHEDULER_cancel (n->retry_task);
3695 n->retry_task);
3696 n->retry_task = GNUNET_SCHEDULER_NO_TASK; 3678 n->retry_task = GNUNET_SCHEDULER_NO_TASK;
3697 try_transmission_to_peer (n); 3679 try_transmission_to_peer (n);
3698 } 3680 }
@@ -3981,8 +3963,7 @@ run_validation (void *cls,
3981 va->addrlen = addrlen; 3963 va->addrlen = addrlen;
3982 GNUNET_HELLO_get_key (chvc->hello, 3964 GNUNET_HELLO_get_key (chvc->hello,
3983 &va->publicKey); 3965 &va->publicKey);
3984 va->timeout_task = GNUNET_SCHEDULER_add_delayed (sched, 3966 va->timeout_task = GNUNET_SCHEDULER_add_delayed (HELLO_VERIFICATION_TIMEOUT,
3985 HELLO_VERIFICATION_TIMEOUT,
3986 &timeout_hello_validation, 3967 &timeout_hello_validation,
3987 va); 3968 va);
3988 GNUNET_CONTAINER_multihashmap_put (validation_map, 3969 GNUNET_CONTAINER_multihashmap_put (validation_map,
@@ -4146,8 +4127,7 @@ process_hello (struct TransportPlugin *plugin,
4146 GNUNET_NO); 4127 GNUNET_NO);
4147 4128
4148 /* first, check if load is too high */ 4129 /* first, check if load is too high */
4149 if (GNUNET_SCHEDULER_get_load (sched, 4130 if (GNUNET_SCHEDULER_get_load (GNUNET_SCHEDULER_PRIORITY_BACKGROUND) > MAX_HELLO_LOAD)
4150 GNUNET_SCHEDULER_PRIORITY_BACKGROUND) > MAX_HELLO_LOAD)
4151 { 4131 {
4152 GNUNET_STATISTICS_update (stats, 4132 GNUNET_STATISTICS_update (stats,
4153 gettext_noop ("# HELLOs ignored due to high load"), 4133 gettext_noop ("# HELLOs ignored due to high load"),
@@ -4351,8 +4331,7 @@ disconnect_neighbour (struct NeighbourList *n, int check)
4351 GNUNET_NO); 4331 GNUNET_NO);
4352 if (GNUNET_SCHEDULER_NO_TASK != peer_pos->revalidate_task) 4332 if (GNUNET_SCHEDULER_NO_TASK != peer_pos->revalidate_task)
4353 { 4333 {
4354 GNUNET_SCHEDULER_cancel (sched, 4334 GNUNET_SCHEDULER_cancel (peer_pos->revalidate_task);
4355 peer_pos->revalidate_task);
4356 peer_pos->revalidate_task = GNUNET_SCHEDULER_NO_TASK; 4335 peer_pos->revalidate_task = GNUNET_SCHEDULER_NO_TASK;
4357 } 4336 }
4358 GNUNET_free(peer_pos); 4337 GNUNET_free(peer_pos);
@@ -4381,12 +4360,12 @@ disconnect_neighbour (struct NeighbourList *n, int check)
4381 } 4360 }
4382 if (n->timeout_task != GNUNET_SCHEDULER_NO_TASK) 4361 if (n->timeout_task != GNUNET_SCHEDULER_NO_TASK)
4383 { 4362 {
4384 GNUNET_SCHEDULER_cancel (sched, n->timeout_task); 4363 GNUNET_SCHEDULER_cancel (n->timeout_task);
4385 n->timeout_task = GNUNET_SCHEDULER_NO_TASK; 4364 n->timeout_task = GNUNET_SCHEDULER_NO_TASK;
4386 } 4365 }
4387 if (n->retry_task != GNUNET_SCHEDULER_NO_TASK) 4366 if (n->retry_task != GNUNET_SCHEDULER_NO_TASK)
4388 { 4367 {
4389 GNUNET_SCHEDULER_cancel (sched, n->retry_task); 4368 GNUNET_SCHEDULER_cancel (n->retry_task);
4390 n->retry_task = GNUNET_SCHEDULER_NO_TASK; 4369 n->retry_task = GNUNET_SCHEDULER_NO_TASK;
4391 } 4370 }
4392 if (n->piter != NULL) 4371 if (n->piter != NULL)
@@ -4736,11 +4715,9 @@ plugin_env_receive (void *cls, const struct GNUNET_PeerIdentity *peer,
4736 n->peer_timeout = 4715 n->peer_timeout =
4737 GNUNET_TIME_relative_to_absolute 4716 GNUNET_TIME_relative_to_absolute
4738 (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT); 4717 (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT);
4739 GNUNET_SCHEDULER_cancel (sched, 4718 GNUNET_SCHEDULER_cancel (n->timeout_task);
4740 n->timeout_task);
4741 n->timeout_task = 4719 n->timeout_task =
4742 GNUNET_SCHEDULER_add_delayed (sched, 4720 GNUNET_SCHEDULER_add_delayed (GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT,
4743 GNUNET_CONSTANTS_IDLE_CONNECTION_TIMEOUT,
4744 &neighbour_timeout_task, n); 4721 &neighbour_timeout_task, n);
4745 if (n->quota_violation_count > QUOTA_VIOLATION_DROP_THRESHOLD) 4722 if (n->quota_violation_count > QUOTA_VIOLATION_DROP_THRESHOLD)
4746 { 4723 {
@@ -5191,7 +5168,6 @@ static void
5191create_environment (struct TransportPlugin *plug) 5168create_environment (struct TransportPlugin *plug)
5192{ 5169{
5193 plug->env.cfg = cfg; 5170 plug->env.cfg = cfg;
5194 plug->env.sched = sched;
5195 plug->env.my_identity = &my_identity; 5171 plug->env.my_identity = &my_identity;
5196 plug->env.our_hello = &our_hello; 5172 plug->env.our_hello = &our_hello;
5197 plug->env.cls = plug; 5173 plug->env.cls = plug;
@@ -5276,8 +5252,7 @@ client_disconnect_notification (void *cls,
5276 bc->th = NULL; 5252 bc->th = NULL;
5277 } 5253 }
5278 if (bc->task == GNUNET_SCHEDULER_NO_TASK) 5254 if (bc->task == GNUNET_SCHEDULER_NO_TASK)
5279 bc->task = GNUNET_SCHEDULER_add_now (sched, 5255 bc->task = GNUNET_SCHEDULER_add_now (&do_blacklist_check,
5280 &do_blacklist_check,
5281 bc); 5256 bc);
5282 break; 5257 break;
5283 } 5258 }
@@ -5359,8 +5334,7 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
5359 plugins = plug->next; 5334 plugins = plug->next;
5360 if (plug->address_update_task != GNUNET_SCHEDULER_NO_TASK) 5335 if (plug->address_update_task != GNUNET_SCHEDULER_NO_TASK)
5361 { 5336 {
5362 GNUNET_SCHEDULER_cancel (plug->env.sched, 5337 GNUNET_SCHEDULER_cancel (plug->address_update_task);
5363 plug->address_update_task);
5364 plug->address_update_task = GNUNET_SCHEDULER_NO_TASK; 5338 plug->address_update_task = GNUNET_SCHEDULER_NO_TASK;
5365 } 5339 }
5366 GNUNET_break (NULL == GNUNET_PLUGIN_unload (plug->lib_name, plug->api)); 5340 GNUNET_break (NULL == GNUNET_PLUGIN_unload (plug->lib_name, plug->api));
@@ -5423,13 +5397,11 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
5423 * Initiate transport service. 5397 * Initiate transport service.
5424 * 5398 *
5425 * @param cls closure 5399 * @param cls closure
5426 * @param s scheduler to use
5427 * @param server the initialized server 5400 * @param server the initialized server
5428 * @param c configuration to use 5401 * @param c configuration to use
5429 */ 5402 */
5430static void 5403static void
5431run (void *cls, 5404run (void *cls,
5432 struct GNUNET_SCHEDULER_Handle *s,
5433 struct GNUNET_SERVER_Handle *server, 5405 struct GNUNET_SERVER_Handle *server,
5434 const struct GNUNET_CONFIGURATION_Handle *c) 5406 const struct GNUNET_CONFIGURATION_Handle *c)
5435{ 5407{
@@ -5459,9 +5431,8 @@ run (void *cls,
5459 unsigned long long tneigh; 5431 unsigned long long tneigh;
5460 char *keyfile; 5432 char *keyfile;
5461 5433
5462 sched = s;
5463 cfg = c; 5434 cfg = c;
5464 stats = GNUNET_STATISTICS_create (sched, "transport", cfg); 5435 stats = GNUNET_STATISTICS_create ("transport", cfg);
5465 validation_map = GNUNET_CONTAINER_multihashmap_create (64); 5436 validation_map = GNUNET_CONTAINER_multihashmap_create (64);
5466 /* parse configuration */ 5437 /* parse configuration */
5467 if ((GNUNET_OK != 5438 if ((GNUNET_OK !=
@@ -5477,7 +5448,7 @@ run (void *cls,
5477 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 5448 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
5478 _ 5449 _
5479 ("Transport service is lacking key configuration settings. Exiting.\n")); 5450 ("Transport service is lacking key configuration settings. Exiting.\n"));
5480 GNUNET_SCHEDULER_shutdown (s); 5451 GNUNET_SCHEDULER_shutdown ();
5481 if (stats != NULL) 5452 if (stats != NULL)
5482 { 5453 {
5483 GNUNET_STATISTICS_destroy (stats, GNUNET_NO); 5454 GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
@@ -5488,12 +5459,12 @@ run (void *cls,
5488 return; 5459 return;
5489 } 5460 }
5490 max_connect_per_transport = (uint32_t) tneigh; 5461 max_connect_per_transport = (uint32_t) tneigh;
5491 peerinfo = GNUNET_PEERINFO_connect (sched, cfg); 5462 peerinfo = GNUNET_PEERINFO_connect (cfg);
5492 if (peerinfo == NULL) 5463 if (peerinfo == NULL)
5493 { 5464 {
5494 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 5465 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
5495 _("Could not access PEERINFO service. Exiting.\n")); 5466 _("Could not access PEERINFO service. Exiting.\n"));
5496 GNUNET_SCHEDULER_shutdown (s); 5467 GNUNET_SCHEDULER_shutdown ();
5497 if (stats != NULL) 5468 if (stats != NULL)
5498 { 5469 {
5499 GNUNET_STATISTICS_destroy (stats, GNUNET_NO); 5470 GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
@@ -5511,7 +5482,7 @@ run (void *cls,
5511 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 5482 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
5512 _ 5483 _
5513 ("Transport service could not access hostkey. Exiting.\n")); 5484 ("Transport service could not access hostkey. Exiting.\n"));
5514 GNUNET_SCHEDULER_shutdown (s); 5485 GNUNET_SCHEDULER_shutdown ();
5515 if (stats != NULL) 5486 if (stats != NULL)
5516 { 5487 {
5517 GNUNET_STATISTICS_destroy (stats, GNUNET_NO); 5488 GNUNET_STATISTICS_destroy (stats, GNUNET_NO);
@@ -5544,8 +5515,7 @@ run (void *cls,
5544 } 5515 }
5545 GNUNET_free (plugs); 5516 GNUNET_free (plugs);
5546 } 5517 }
5547 GNUNET_SCHEDULER_add_delayed (sched, 5518 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
5548 GNUNET_TIME_UNIT_FOREVER_REL,
5549 &shutdown_task, NULL); 5519 &shutdown_task, NULL);
5550 if (no_transports) 5520 if (no_transports)
5551 refresh_hello (); 5521 refresh_hello ();