aboutsummaryrefslogtreecommitdiff
path: root/src/arm/gnunet-service-arm_interceptor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arm/gnunet-service-arm_interceptor.c')
-rw-r--r--src/arm/gnunet-service-arm_interceptor.c75
1 files changed, 29 insertions, 46 deletions
diff --git a/src/arm/gnunet-service-arm_interceptor.c b/src/arm/gnunet-service-arm_interceptor.c
index 8f79db6c5..56268b2d0 100644
--- a/src/arm/gnunet-service-arm_interceptor.c
+++ b/src/arm/gnunet-service-arm_interceptor.c
@@ -208,11 +208,6 @@ static const struct GNUNET_CONFIGURATION_Handle *cfg;
208/** 208/**
209 * 209 *
210 */ 210 */
211static struct GNUNET_SCHEDULER_Handle *scheduler;
212
213/**
214 *
215 */
216static struct ServiceListeningInfo *serviceListeningInfoList_head; 211static struct ServiceListeningInfo *serviceListeningInfoList_head;
217 212
218/** 213/**
@@ -293,7 +288,7 @@ closeClientAndServiceSockets (struct ForwardedConnection *fc,
293#endif 288#endif
294 if (fc->service_to_client_task != GNUNET_SCHEDULER_NO_TASK) 289 if (fc->service_to_client_task != GNUNET_SCHEDULER_NO_TASK)
295 { 290 {
296 GNUNET_SCHEDULER_cancel (scheduler, fc->service_to_client_task); 291 GNUNET_SCHEDULER_cancel (fc->service_to_client_task);
297 fc->service_to_client_task = GNUNET_SCHEDULER_NO_TASK; 292 fc->service_to_client_task = GNUNET_SCHEDULER_NO_TASK;
298 } 293 }
299 if (fc->armClientSocket != NULL) 294 if (fc->armClientSocket != NULL)
@@ -312,8 +307,7 @@ closeClientAndServiceSockets (struct ForwardedConnection *fc,
312#endif 307#endif
313 if (fc->client_to_service_task != GNUNET_SCHEDULER_NO_TASK) 308 if (fc->client_to_service_task != GNUNET_SCHEDULER_NO_TASK)
314 { 309 {
315 GNUNET_SCHEDULER_cancel (scheduler, 310 GNUNET_SCHEDULER_cancel ( fc->client_to_service_task);
316 fc->client_to_service_task);
317 fc->client_to_service_task = GNUNET_SCHEDULER_NO_TASK; 311 fc->client_to_service_task = GNUNET_SCHEDULER_NO_TASK;
318 } 312 }
319 if (fc->armClientSocket != NULL) 313 if (fc->armClientSocket != NULL)
@@ -331,8 +325,7 @@ closeClientAndServiceSockets (struct ForwardedConnection *fc,
331 "Closing forwarding connection (done with both directions)\n"); 325 "Closing forwarding connection (done with both directions)\n");
332#endif 326#endif
333 if (fc->start_task != GNUNET_SCHEDULER_NO_TASK) 327 if (fc->start_task != GNUNET_SCHEDULER_NO_TASK)
334 GNUNET_SCHEDULER_cancel (scheduler, 328 GNUNET_SCHEDULER_cancel ( fc->start_task);
335 fc->start_task);
336 if ( (NULL != fc->armClientSocket) && 329 if ( (NULL != fc->armClientSocket) &&
337 (GNUNET_SYSERR == 330 (GNUNET_SYSERR ==
338 GNUNET_NETWORK_socket_close (fc->armClientSocket)) ) 331 GNUNET_NETWORK_socket_close (fc->armClientSocket)) )
@@ -388,7 +381,7 @@ forwardToClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
388 fc->armClientSocket)) 381 fc->armClientSocket))
389 { 382 {
390 fc->service_to_client_task = 383 fc->service_to_client_task =
391 GNUNET_SCHEDULER_add_write_net (scheduler, 384 GNUNET_SCHEDULER_add_write_net (
392 GNUNET_TIME_UNIT_FOREVER_REL, 385 GNUNET_TIME_UNIT_FOREVER_REL,
393 fc->armClientSocket, 386 fc->armClientSocket,
394 &forwardToClient, fc); 387 &forwardToClient, fc);
@@ -421,7 +414,7 @@ forwardToClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
421 fc->service_to_client_bufferPos += numberOfBytesSent; 414 fc->service_to_client_bufferPos += numberOfBytesSent;
422 fc->service_to_client_bufferDataLength -= numberOfBytesSent; 415 fc->service_to_client_bufferDataLength -= numberOfBytesSent;
423 fc->service_to_client_task = 416 fc->service_to_client_task =
424 GNUNET_SCHEDULER_add_write_net (scheduler, 417 GNUNET_SCHEDULER_add_write_net (
425 GNUNET_TIME_UNIT_FOREVER_REL, 418 GNUNET_TIME_UNIT_FOREVER_REL,
426 fc->armClientSocket, 419 fc->armClientSocket,
427 &forwardToClient, 420 &forwardToClient,
@@ -429,8 +422,7 @@ forwardToClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
429 return; 422 return;
430 } 423 }
431 fc->service_to_client_task = 424 fc->service_to_client_task =
432 GNUNET_SCHEDULER_add_read_net (scheduler, 425 GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
433 GNUNET_TIME_UNIT_FOREVER_REL,
434 fc->armServiceSocket, 426 fc->armServiceSocket,
435 &receiveFromService, 427 &receiveFromService,
436 fc); 428 fc);
@@ -461,7 +453,7 @@ receiveFromService (void *cls,
461 fc->armServiceSocket)) 453 fc->armServiceSocket))
462 { 454 {
463 fc->service_to_client_task = 455 fc->service_to_client_task =
464 GNUNET_SCHEDULER_add_read_net (scheduler, 456 GNUNET_SCHEDULER_add_read_net (
465 GNUNET_TIME_UNIT_FOREVER_REL, 457 GNUNET_TIME_UNIT_FOREVER_REL,
466 fc->armServiceSocket, 458 fc->armServiceSocket,
467 &receiveFromService, fc); 459 &receiveFromService, fc);
@@ -491,8 +483,7 @@ receiveFromService (void *cls,
491 if ( (fc->client_to_service_bufferDataLength > 0) && 483 if ( (fc->client_to_service_bufferDataLength > 0) &&
492 (fc->client_to_service_task != GNUNET_SCHEDULER_NO_TASK) ) 484 (fc->client_to_service_task != GNUNET_SCHEDULER_NO_TASK) )
493 { 485 {
494 GNUNET_SCHEDULER_cancel (scheduler, 486 GNUNET_SCHEDULER_cancel (fc->client_to_service_task);
495 fc->client_to_service_task);
496 fc->client_to_service_task = GNUNET_SCHEDULER_NO_TASK; 487 fc->client_to_service_task = GNUNET_SCHEDULER_NO_TASK;
497 } 488 }
498 fc->back_off = GNUNET_TIME_relative_multiply (fc->back_off, 2); 489 fc->back_off = GNUNET_TIME_relative_multiply (fc->back_off, 2);
@@ -508,7 +499,7 @@ receiveFromService (void *cls,
508 rem = GNUNET_TIME_absolute_get_remaining (fc->timeout); 499 rem = GNUNET_TIME_absolute_get_remaining (fc->timeout);
509 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task); 500 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task);
510 fc->start_task 501 fc->start_task
511 = GNUNET_SCHEDULER_add_delayed (scheduler, 502 = GNUNET_SCHEDULER_add_delayed (
512 GNUNET_TIME_relative_min (fc->back_off, 503 GNUNET_TIME_relative_min (fc->back_off,
513 rem), 504 rem),
514 &start_forwarding, 505 &start_forwarding,
@@ -533,7 +524,7 @@ receiveFromService (void *cls,
533 fc->service_to_client_bufferDataLength); 524 fc->service_to_client_bufferDataLength);
534#endif 525#endif
535 fc->service_to_client_task = 526 fc->service_to_client_task =
536 GNUNET_SCHEDULER_add_write_net (scheduler, 527 GNUNET_SCHEDULER_add_write_net (
537 GNUNET_TIME_UNIT_FOREVER_REL, 528 GNUNET_TIME_UNIT_FOREVER_REL,
538 fc->armClientSocket, 529 fc->armClientSocket,
539 &forwardToClient, fc); 530 &forwardToClient, fc);
@@ -565,7 +556,7 @@ forwardToService (void *cls,
565 fc->armServiceSocket)) 556 fc->armServiceSocket))
566 { 557 {
567 fc->client_to_service_task = 558 fc->client_to_service_task =
568 GNUNET_SCHEDULER_add_write_net (scheduler, 559 GNUNET_SCHEDULER_add_write_net (
569 GNUNET_TIME_UNIT_FOREVER_REL, 560 GNUNET_TIME_UNIT_FOREVER_REL,
570 fc->armServiceSocket, 561 fc->armServiceSocket,
571 &forwardToService, fc); 562 &forwardToService, fc);
@@ -585,8 +576,7 @@ forwardToService (void *cls,
585 if ( (fc->service_to_client_bufferDataLength == 0) && 576 if ( (fc->service_to_client_bufferDataLength == 0) &&
586 (fc->service_to_client_task != GNUNET_SCHEDULER_NO_TASK) ) 577 (fc->service_to_client_task != GNUNET_SCHEDULER_NO_TASK) )
587 { 578 {
588 GNUNET_SCHEDULER_cancel (scheduler, 579 GNUNET_SCHEDULER_cancel (fc->service_to_client_task);
589 fc->service_to_client_task);
590 fc->service_to_client_task = GNUNET_SCHEDULER_NO_TASK; 580 fc->service_to_client_task = GNUNET_SCHEDULER_NO_TASK;
591 } 581 }
592 fc->back_off = GNUNET_TIME_relative_multiply (fc->back_off, 2); 582 fc->back_off = GNUNET_TIME_relative_multiply (fc->back_off, 2);
@@ -602,8 +592,7 @@ forwardToService (void *cls,
602 rem = GNUNET_TIME_absolute_get_remaining (fc->timeout); 592 rem = GNUNET_TIME_absolute_get_remaining (fc->timeout);
603 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task); 593 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task);
604 fc->start_task 594 fc->start_task
605 = GNUNET_SCHEDULER_add_delayed (scheduler, 595 = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_min (fc->back_off,
606 GNUNET_TIME_relative_min (fc->back_off,
607 rem), 596 rem),
608 &start_forwarding, 597 &start_forwarding,
609 fc); 598 fc);
@@ -631,15 +620,14 @@ forwardToService (void *cls,
631 fc->client_to_service_bufferPos += numberOfBytesSent; 620 fc->client_to_service_bufferPos += numberOfBytesSent;
632 fc->client_to_service_bufferDataLength -= numberOfBytesSent; 621 fc->client_to_service_bufferDataLength -= numberOfBytesSent;
633 fc->client_to_service_task = 622 fc->client_to_service_task =
634 GNUNET_SCHEDULER_add_write_net (scheduler, 623 GNUNET_SCHEDULER_add_write_net (
635 GNUNET_TIME_UNIT_FOREVER_REL, 624 GNUNET_TIME_UNIT_FOREVER_REL,
636 fc->armServiceSocket, 625 fc->armServiceSocket,
637 &forwardToService, fc); 626 &forwardToService, fc);
638 return; 627 return;
639 } 628 }
640 fc->client_to_service_task = 629 fc->client_to_service_task =
641 GNUNET_SCHEDULER_add_read_net (scheduler, 630 GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL,
642 GNUNET_TIME_UNIT_FOREVER_REL,
643 fc->armClientSocket, 631 fc->armClientSocket,
644 &receiveFromClient, fc); 632 &receiveFromClient, fc);
645} 633}
@@ -661,7 +649,7 @@ receiveFromClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
661 fc->armClientSocket)) 649 fc->armClientSocket))
662 { 650 {
663 fc->client_to_service_task = 651 fc->client_to_service_task =
664 GNUNET_SCHEDULER_add_read_net (scheduler, 652 GNUNET_SCHEDULER_add_read_net (
665 GNUNET_TIME_UNIT_FOREVER_REL, 653 GNUNET_TIME_UNIT_FOREVER_REL,
666 fc->armClientSocket, 654 fc->armClientSocket,
667 &receiveFromClient, fc); 655 &receiveFromClient, fc);
@@ -700,7 +688,7 @@ receiveFromClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
700#endif 688#endif
701 if (fc->armServiceSocket != NULL) 689 if (fc->armServiceSocket != NULL)
702 fc->client_to_service_task = 690 fc->client_to_service_task =
703 GNUNET_SCHEDULER_add_write_net (scheduler, 691 GNUNET_SCHEDULER_add_write_net (
704 GNUNET_TIME_UNIT_FOREVER_REL, 692 GNUNET_TIME_UNIT_FOREVER_REL,
705 fc->armServiceSocket, 693 fc->armServiceSocket,
706 &forwardToService, fc); 694 &forwardToService, fc);
@@ -769,8 +757,7 @@ start_forwarding (void *cls,
769#endif 757#endif
770 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task); 758 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task);
771 fc->start_task 759 fc->start_task
772 = GNUNET_SCHEDULER_add_delayed (scheduler, 760 = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_min (fc->back_off,
773 GNUNET_TIME_relative_min (fc->back_off,
774 rem), 761 rem),
775 &start_forwarding, 762 &start_forwarding,
776 fc); 763 fc);
@@ -784,13 +771,13 @@ start_forwarding (void *cls,
784 { 771 {
785 if (fc->client_to_service_bufferDataLength == 0) 772 if (fc->client_to_service_bufferDataLength == 0)
786 fc->client_to_service_task = 773 fc->client_to_service_task =
787 GNUNET_SCHEDULER_add_read_net (scheduler, 774 GNUNET_SCHEDULER_add_read_net (
788 GNUNET_TIME_UNIT_FOREVER_REL, 775 GNUNET_TIME_UNIT_FOREVER_REL,
789 fc->armClientSocket, 776 fc->armClientSocket,
790 &receiveFromClient, fc); 777 &receiveFromClient, fc);
791 else 778 else
792 fc->client_to_service_task = 779 fc->client_to_service_task =
793 GNUNET_SCHEDULER_add_write_net (scheduler, 780 GNUNET_SCHEDULER_add_write_net (
794 GNUNET_TIME_UNIT_FOREVER_REL, 781 GNUNET_TIME_UNIT_FOREVER_REL,
795 fc->armServiceSocket, 782 fc->armServiceSocket,
796 &forwardToService, fc); 783 &forwardToService, fc);
@@ -799,13 +786,13 @@ start_forwarding (void *cls,
799 { 786 {
800 if (fc->service_to_client_bufferDataLength == 0) 787 if (fc->service_to_client_bufferDataLength == 0)
801 fc->service_to_client_task = 788 fc->service_to_client_task =
802 GNUNET_SCHEDULER_add_read_net (scheduler, 789 GNUNET_SCHEDULER_add_read_net (
803 GNUNET_TIME_UNIT_FOREVER_REL, 790 GNUNET_TIME_UNIT_FOREVER_REL,
804 fc->armServiceSocket, 791 fc->armServiceSocket,
805 &receiveFromService, fc); 792 &receiveFromService, fc);
806 else 793 else
807 fc->service_to_client_task = 794 fc->service_to_client_task =
808 GNUNET_SCHEDULER_add_write_net (scheduler, 795 GNUNET_SCHEDULER_add_write_net (
809 GNUNET_TIME_UNIT_FOREVER_REL, 796 GNUNET_TIME_UNIT_FOREVER_REL,
810 fc->armClientSocket, 797 fc->armClientSocket,
811 &forwardToClient, fc); 798 &forwardToClient, fc);
@@ -833,7 +820,7 @@ stop_listening (const char *serviceName)
833 (strcmp (pos->serviceName, serviceName) != 0) ) 820 (strcmp (pos->serviceName, serviceName) != 0) )
834 continue; 821 continue;
835 if (pos->acceptTask != GNUNET_SCHEDULER_NO_TASK) 822 if (pos->acceptTask != GNUNET_SCHEDULER_NO_TASK)
836 GNUNET_SCHEDULER_cancel (scheduler, pos->acceptTask); 823 GNUNET_SCHEDULER_cancel (pos->acceptTask);
837 GNUNET_break (GNUNET_OK == 824 GNUNET_break (GNUNET_OK ==
838 GNUNET_NETWORK_socket_close (pos->listeningSocket)); 825 GNUNET_NETWORK_socket_close (pos->listeningSocket));
839 GNUNET_CONTAINER_DLL_remove (serviceListeningInfoList_head, 826 GNUNET_CONTAINER_DLL_remove (serviceListeningInfoList_head,
@@ -882,7 +869,7 @@ accept_and_forward (struct ServiceListeningInfo *serviceListeningInfo)
882 serviceListeningInfoList_tail, 869 serviceListeningInfoList_tail,
883 serviceListeningInfo); 870 serviceListeningInfo);
884 serviceListeningInfo->acceptTask = 871 serviceListeningInfo->acceptTask =
885 GNUNET_SCHEDULER_add_read_net (scheduler, 872 GNUNET_SCHEDULER_add_read_net (
886 GNUNET_TIME_UNIT_FOREVER_REL, 873 GNUNET_TIME_UNIT_FOREVER_REL,
887 serviceListeningInfo->listeningSocket, 874 serviceListeningInfo->listeningSocket,
888 &acceptConnection, 875 &acceptConnection,
@@ -898,14 +885,13 @@ accept_and_forward (struct ServiceListeningInfo *serviceListeningInfo)
898 fc->timeout = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_SERVICE_TIMEOUT); 885 fc->timeout = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_SERVICE_TIMEOUT);
899 fc->back_off = GNUNET_TIME_UNIT_MILLISECONDS; 886 fc->back_off = GNUNET_TIME_UNIT_MILLISECONDS;
900 fc->client_to_service_task = 887 fc->client_to_service_task =
901 GNUNET_SCHEDULER_add_read_net (scheduler, 888 GNUNET_SCHEDULER_add_read_net (
902 GNUNET_TIME_UNIT_FOREVER_REL, 889 GNUNET_TIME_UNIT_FOREVER_REL,
903 fc->armClientSocket, 890 fc->armClientSocket,
904 &receiveFromClient, fc); 891 &receiveFromClient, fc);
905 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task); 892 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task);
906 fc->start_task 893 fc->start_task
907 = GNUNET_SCHEDULER_add_now (scheduler, 894 = GNUNET_SCHEDULER_add_now (&start_forwarding,
908 &start_forwarding,
909 fc); 895 fc);
910} 896}
911 897
@@ -963,8 +949,7 @@ acceptConnection (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
963 GNUNET_free (pos->listeningSocket); /* deliberately no closing! */ 949 GNUNET_free (pos->listeningSocket); /* deliberately no closing! */
964 GNUNET_free (pos->service_addr); 950 GNUNET_free (pos->service_addr);
965 GNUNET_free (pos->serviceName); 951 GNUNET_free (pos->serviceName);
966 GNUNET_SCHEDULER_cancel (scheduler, 952 GNUNET_SCHEDULER_cancel ( pos->acceptTask);
967 pos->acceptTask);
968 GNUNET_CONTAINER_DLL_remove (serviceListeningInfoList_head, 953 GNUNET_CONTAINER_DLL_remove (serviceListeningInfoList_head,
969 serviceListeningInfoList_tail, 954 serviceListeningInfoList_tail,
970 pos); 955 pos);
@@ -1073,7 +1058,7 @@ createListeningSocket (struct sockaddr *sa,
1073 serviceListeningInfo->service_addr_len = addr_len; 1058 serviceListeningInfo->service_addr_len = addr_len;
1074 serviceListeningInfo->listeningSocket = sock; 1059 serviceListeningInfo->listeningSocket = sock;
1075 serviceListeningInfo->acceptTask = 1060 serviceListeningInfo->acceptTask =
1076 GNUNET_SCHEDULER_add_read_net (scheduler, 1061 GNUNET_SCHEDULER_add_read_net (
1077 GNUNET_TIME_UNIT_FOREVER_REL, sock, 1062 GNUNET_TIME_UNIT_FOREVER_REL, sock,
1078 &acceptConnection, 1063 &acceptConnection,
1079 serviceListeningInfo); 1064 serviceListeningInfo);
@@ -1123,15 +1108,13 @@ checkPortNumberCB (void *cls,
1123 * Entry point to the Service Manager 1108 * Entry point to the Service Manager
1124 * 1109 *
1125 * @param configurationHandle configuration to use to get services 1110 * @param configurationHandle configuration to use to get services
1126 * @param sched scheduler to handle clients and services communications
1127 */ 1111 */
1128void 1112void
1129prepareServices (const struct GNUNET_CONFIGURATION_Handle 1113prepareServices (const struct GNUNET_CONFIGURATION_Handle
1130 *configurationHandle, struct GNUNET_SCHEDULER_Handle *sched) 1114 *configurationHandle)
1131{ 1115{
1132 char *defaultServicesString; 1116 char *defaultServicesString;
1133 1117
1134 scheduler = sched;
1135 cfg = configurationHandle; 1118 cfg = configurationHandle;
1136 /* Split the default services into a list */ 1119 /* Split the default services into a list */
1137 if (GNUNET_OK == 1120 if (GNUNET_OK ==