diff options
Diffstat (limited to 'src/transport/gnunet-communicator-quic.c')
-rw-r--r-- | src/transport/gnunet-communicator-quic.c | 63 |
1 files changed, 50 insertions, 13 deletions
diff --git a/src/transport/gnunet-communicator-quic.c b/src/transport/gnunet-communicator-quic.c index ecb52b158..ab7d4ec6f 100644 --- a/src/transport/gnunet-communicator-quic.c +++ b/src/transport/gnunet-communicator-quic.c | |||
@@ -49,6 +49,42 @@ static uint16_t my_port; | |||
49 | static unsigned long long rekey_max_bytes; | 49 | static unsigned long long rekey_max_bytes; |
50 | 50 | ||
51 | /** | 51 | /** |
52 | * Shutdown the UNIX communicator. | ||
53 | * | ||
54 | * @param cls NULL (always) | ||
55 | */ | ||
56 | static void | ||
57 | do_shutdown (void *cls) | ||
58 | { | ||
59 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
60 | "do_shutdown\n"); | ||
61 | if (NULL != read_task) | ||
62 | { | ||
63 | GNUNET_SCHEDULER_cancel (read_task); | ||
64 | read_task = NULL; | ||
65 | } | ||
66 | if (NULL != udp_sock) | ||
67 | { | ||
68 | GNUNET_break (GNUNET_OK == | ||
69 | GNUNET_NETWORK_socket_close (udp_sock)); | ||
70 | udp_sock = NULL; | ||
71 | } | ||
72 | if (NULL != ch) | ||
73 | { | ||
74 | GNUNET_TRANSPORT_communicator_disconnect (ch); | ||
75 | ch = NULL; | ||
76 | } | ||
77 | if (NULL != ah) | ||
78 | { | ||
79 | GNUNET_TRANSPORT_application_done (ah); | ||
80 | ah = NULL; | ||
81 | } | ||
82 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
83 | "do_shutdown finished\n"); | ||
84 | } | ||
85 | |||
86 | |||
87 | /** | ||
52 | * Convert UDP bind specification to a `struct sockaddr *` | 88 | * Convert UDP bind specification to a `struct sockaddr *` |
53 | * | 89 | * |
54 | * @param bindto bind specification to convert | 90 | * @param bindto bind specification to convert |
@@ -190,12 +226,11 @@ sock_read (void *cls) | |||
190 | socklen_t salen = sizeof(sa); | 226 | socklen_t salen = sizeof(sa); |
191 | char buf[UINT16_MAX]; | 227 | char buf[UINT16_MAX]; |
192 | ssize_t rcvd; | 228 | ssize_t rcvd; |
193 | |||
194 | (void) cls; | 229 | (void) cls; |
195 | read_task = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 230 | // read_task = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
196 | udp_sock, | 231 | // udp_sock, |
197 | &sock_read, | 232 | // &sock_read, |
198 | NULL); | 233 | // NULL); |
199 | rcvd = GNUNET_NETWORK_socket_recvfrom (udp_sock, | 234 | rcvd = GNUNET_NETWORK_socket_recvfrom (udp_sock, |
200 | buf, | 235 | buf, |
201 | sizeof(buf), | 236 | sizeof(buf), |
@@ -537,24 +572,26 @@ run (void *cls, | |||
537 | GNUNET_break (0); | 572 | GNUNET_break (0); |
538 | my_port = 0; | 573 | my_port = 0; |
539 | } | 574 | } |
575 | GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL); | ||
540 | /* start reading */ | 576 | /* start reading */ |
541 | read_task = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, | 577 | read_task = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, |
542 | udp_sock, | 578 | udp_sock, |
543 | &sock_read, | 579 | &sock_read, |
544 | NULL); | 580 | NULL); |
545 | if (NULL == ch) | 581 | |
546 | { | 582 | // if (NULL == ch) |
547 | GNUNET_break (0); | ||
548 | GNUNET_SCHEDULER_shutdown (); | ||
549 | return; | ||
550 | } | ||
551 | // ah = GNUNET_TRANSPORT_application_init (cfg); | ||
552 | // if (NULL == ah) | ||
553 | // { | 583 | // { |
554 | // GNUNET_break (0); | 584 | // GNUNET_break (0); |
555 | // GNUNET_SCHEDULER_shutdown (); | 585 | // GNUNET_SCHEDULER_shutdown (); |
556 | // return; | 586 | // return; |
557 | // } | 587 | // } |
588 | ah = GNUNET_TRANSPORT_application_init (cfg); | ||
589 | if (NULL == ah) | ||
590 | { | ||
591 | GNUNET_break (0); | ||
592 | GNUNET_SCHEDULER_shutdown (); | ||
593 | return; | ||
594 | } | ||
558 | 595 | ||
559 | /* start broadcasting */ | 596 | /* start broadcasting */ |
560 | // if (GNUNET_YES != | 597 | // if (GNUNET_YES != |