aboutsummaryrefslogtreecommitdiff
path: root/src/util/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/connection.c')
-rw-r--r--src/util/connection.c82
1 files changed, 41 insertions, 41 deletions
diff --git a/src/util/connection.c b/src/util/connection.c
index 79d1c2d4c..f28beb34c 100644
--- a/src/util/connection.c
+++ b/src/util/connection.c
@@ -70,7 +70,7 @@ struct GNUNET_CONNECTION_TransmitHandle
70 /** 70 /**
71 * Task called on timeout. 71 * Task called on timeout.
72 */ 72 */
73 GNUNET_SCHEDULER_TaskIdentifier timeout_task; 73 struct GNUNET_SCHEDULER_Task * timeout_task;
74 74
75 /** 75 /**
76 * At what number of bytes available in the 76 * At what number of bytes available in the
@@ -121,7 +121,7 @@ struct AddressProbe
121 /** 121 /**
122 * Task waiting for the connection to finish connecting. 122 * Task waiting for the connection to finish connecting.
123 */ 123 */
124 GNUNET_SCHEDULER_TaskIdentifier task; 124 struct GNUNET_SCHEDULER_Task * task;
125}; 125};
126 126
127 127
@@ -204,12 +204,12 @@ struct GNUNET_CONNECTION_Handle
204 /** 204 /**
205 * Read task that we may need to wait for. 205 * Read task that we may need to wait for.
206 */ 206 */
207 GNUNET_SCHEDULER_TaskIdentifier read_task; 207 struct GNUNET_SCHEDULER_Task * read_task;
208 208
209 /** 209 /**
210 * Write task that we may need to wait for. 210 * Write task that we may need to wait for.
211 */ 211 */
212 GNUNET_SCHEDULER_TaskIdentifier write_task; 212 struct GNUNET_SCHEDULER_Task * write_task;
213 213
214 /** 214 /**
215 * Handle to a pending DNS lookup request. 215 * Handle to a pending DNS lookup request.
@@ -522,13 +522,13 @@ signal_transmit_error (struct GNUNET_CONNECTION_Handle *connection,
522 GNUNET_NETWORK_socket_shutdown (connection->sock, SHUT_RDWR); 522 GNUNET_NETWORK_socket_shutdown (connection->sock, SHUT_RDWR);
523 GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (connection->sock)); 523 GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (connection->sock));
524 connection->sock = NULL; 524 connection->sock = NULL;
525 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task); 525 GNUNET_assert (NULL == connection->write_task);
526 } 526 }
527 if (GNUNET_SCHEDULER_NO_TASK != connection->read_task) 527 if (NULL != connection->read_task)
528 { 528 {
529 /* send errors trigger read errors... */ 529 /* send errors trigger read errors... */
530 GNUNET_SCHEDULER_cancel (connection->read_task); 530 GNUNET_SCHEDULER_cancel (connection->read_task);
531 connection->read_task = GNUNET_SCHEDULER_NO_TASK; 531 connection->read_task = NULL;
532 signal_receive_timeout (connection); 532 signal_receive_timeout (connection);
533 return; 533 return;
534 } 534 }
@@ -556,7 +556,7 @@ connect_fail_continuation (struct GNUNET_CONNECTION_Handle *connection)
556 GNUNET_break (NULL == connection->ap_tail); 556 GNUNET_break (NULL == connection->ap_tail);
557 GNUNET_break (GNUNET_NO == connection->dns_active); 557 GNUNET_break (GNUNET_NO == connection->dns_active);
558 GNUNET_break (NULL == connection->sock); 558 GNUNET_break (NULL == connection->sock);
559 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task); 559 GNUNET_assert (NULL == connection->write_task);
560 560
561 /* signal errors for jobs that used to wait on the connection */ 561 /* signal errors for jobs that used to wait on the connection */
562 connection->destroy_later = 1; 562 connection->destroy_later = 1;
@@ -564,9 +564,9 @@ connect_fail_continuation (struct GNUNET_CONNECTION_Handle *connection)
564 signal_receive_error (connection, ECONNREFUSED); 564 signal_receive_error (connection, ECONNREFUSED);
565 if (NULL != connection->nth.notify_ready) 565 if (NULL != connection->nth.notify_ready)
566 { 566 {
567 GNUNET_assert (connection->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK); 567 GNUNET_assert (connection->nth.timeout_task != NULL);
568 GNUNET_SCHEDULER_cancel (connection->nth.timeout_task); 568 GNUNET_SCHEDULER_cancel (connection->nth.timeout_task);
569 connection->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK; 569 connection->nth.timeout_task = NULL;
570 signal_transmit_error (connection, ECONNREFUSED); 570 signal_transmit_error (connection, ECONNREFUSED);
571 } 571 }
572 if (-1 == connection->destroy_later) 572 if (-1 == connection->destroy_later)
@@ -618,7 +618,7 @@ connect_success_continuation (struct GNUNET_CONNECTION_Handle *connection)
618 LOG (GNUNET_ERROR_TYPE_DEBUG, 618 LOG (GNUNET_ERROR_TYPE_DEBUG,
619 "Connection succeeded, starting with receiving data (%p)\n", 619 "Connection succeeded, starting with receiving data (%p)\n",
620 connection); 620 connection);
621 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->read_task); 621 GNUNET_assert (NULL == connection->read_task);
622 connection->read_task = 622 connection->read_task =
623 GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining 623 GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining
624 (connection->receive_timeout), connection->sock, 624 (connection->receive_timeout), connection->sock,
@@ -629,10 +629,10 @@ connect_success_continuation (struct GNUNET_CONNECTION_Handle *connection)
629 LOG (GNUNET_ERROR_TYPE_DEBUG, 629 LOG (GNUNET_ERROR_TYPE_DEBUG,
630 "Connection succeeded, starting with sending data (%p)\n", 630 "Connection succeeded, starting with sending data (%p)\n",
631 connection); 631 connection);
632 GNUNET_assert (connection->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK); 632 GNUNET_assert (connection->nth.timeout_task != NULL);
633 GNUNET_SCHEDULER_cancel (connection->nth.timeout_task); 633 GNUNET_SCHEDULER_cancel (connection->nth.timeout_task);
634 connection->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK; 634 connection->nth.timeout_task = NULL;
635 GNUNET_assert (connection->write_task == GNUNET_SCHEDULER_NO_TASK); 635 GNUNET_assert (connection->write_task == NULL);
636 connection->write_task = 636 connection->write_task =
637 GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_absolute_get_remaining 637 GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_absolute_get_remaining
638 (connection->nth.transmit_timeout), connection->sock, 638 (connection->nth.transmit_timeout), connection->sock,
@@ -982,21 +982,21 @@ GNUNET_CONNECTION_destroy (struct GNUNET_CONNECTION_Handle *connection)
982 LOG (GNUNET_ERROR_TYPE_DEBUG, "Shutting down connection (%p)\n", connection); 982 LOG (GNUNET_ERROR_TYPE_DEBUG, "Shutting down connection (%p)\n", connection);
983 GNUNET_assert (NULL == connection->nth.notify_ready); 983 GNUNET_assert (NULL == connection->nth.notify_ready);
984 GNUNET_assert (NULL == connection->receiver); 984 GNUNET_assert (NULL == connection->receiver);
985 if (GNUNET_SCHEDULER_NO_TASK != connection->write_task) 985 if (NULL != connection->write_task)
986 { 986 {
987 GNUNET_SCHEDULER_cancel (connection->write_task); 987 GNUNET_SCHEDULER_cancel (connection->write_task);
988 connection->write_task = GNUNET_SCHEDULER_NO_TASK; 988 connection->write_task = NULL;
989 connection->write_buffer_off = 0; 989 connection->write_buffer_off = 0;
990 } 990 }
991 if (GNUNET_SCHEDULER_NO_TASK != connection->read_task) 991 if (NULL != connection->read_task)
992 { 992 {
993 GNUNET_SCHEDULER_cancel (connection->read_task); 993 GNUNET_SCHEDULER_cancel (connection->read_task);
994 connection->read_task = GNUNET_SCHEDULER_NO_TASK; 994 connection->read_task = NULL;
995 } 995 }
996 if (GNUNET_SCHEDULER_NO_TASK != connection->nth.timeout_task) 996 if (NULL != connection->nth.timeout_task)
997 { 997 {
998 GNUNET_SCHEDULER_cancel (connection->nth.timeout_task); 998 GNUNET_SCHEDULER_cancel (connection->nth.timeout_task);
999 connection->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK; 999 connection->nth.timeout_task = NULL;
1000 } 1000 }
1001 connection->nth.notify_ready = NULL; 1001 connection->nth.notify_ready = NULL;
1002 if (NULL != connection->dns_active) 1002 if (NULL != connection->dns_active)
@@ -1051,7 +1051,7 @@ receive_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1051 ssize_t ret; 1051 ssize_t ret;
1052 GNUNET_CONNECTION_Receiver receiver; 1052 GNUNET_CONNECTION_Receiver receiver;
1053 1053
1054 connection->read_task = GNUNET_SCHEDULER_NO_TASK; 1054 connection->read_task = NULL;
1055 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 1055 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
1056 { 1056 {
1057 /* ignore shutdown request, go again immediately */ 1057 /* ignore shutdown request, go again immediately */
@@ -1115,7 +1115,7 @@ GNUNET_CONNECTION_receive (struct GNUNET_CONNECTION_Handle *connection, size_t m
1115 GNUNET_CONNECTION_Receiver receiver, 1115 GNUNET_CONNECTION_Receiver receiver,
1116 void *receiver_cls) 1116 void *receiver_cls)
1117{ 1117{
1118 GNUNET_assert ((GNUNET_SCHEDULER_NO_TASK == connection->read_task) && 1118 GNUNET_assert ((NULL == connection->read_task) &&
1119 (NULL == connection->receiver)); 1119 (NULL == connection->receiver));
1120 GNUNET_assert (NULL != receiver); 1120 GNUNET_assert (NULL != receiver);
1121 connection->receiver = receiver; 1121 connection->receiver = receiver;
@@ -1150,10 +1150,10 @@ GNUNET_CONNECTION_receive (struct GNUNET_CONNECTION_Handle *connection, size_t m
1150void * 1150void *
1151GNUNET_CONNECTION_receive_cancel (struct GNUNET_CONNECTION_Handle *connection) 1151GNUNET_CONNECTION_receive_cancel (struct GNUNET_CONNECTION_Handle *connection)
1152{ 1152{
1153 if (GNUNET_SCHEDULER_NO_TASK != connection->read_task) 1153 if (NULL != connection->read_task)
1154 { 1154 {
1155 GNUNET_assert (connection == GNUNET_SCHEDULER_cancel (connection->read_task)); 1155 GNUNET_assert (connection == GNUNET_SCHEDULER_cancel (connection->read_task));
1156 connection->read_task = GNUNET_SCHEDULER_NO_TASK; 1156 connection->read_task = NULL;
1157 } 1157 }
1158 connection->receiver = NULL; 1158 connection->receiver = NULL;
1159 return connection->receiver_cls; 1159 return connection->receiver_cls;
@@ -1177,7 +1177,7 @@ process_notify (struct GNUNET_CONNECTION_Handle *connection)
1177 1177
1178 LOG (GNUNET_ERROR_TYPE_DEBUG, "process_notify is running\n"); 1178 LOG (GNUNET_ERROR_TYPE_DEBUG, "process_notify is running\n");
1179 1179
1180 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task); 1180 GNUNET_assert (NULL == connection->write_task);
1181 if (NULL == (notify = connection->nth.notify_ready)) 1181 if (NULL == (notify = connection->nth.notify_ready))
1182 { 1182 {
1183 LOG (GNUNET_ERROR_TYPE_DEBUG, "Noone to notify\n"); 1183 LOG (GNUNET_ERROR_TYPE_DEBUG, "Noone to notify\n");
@@ -1229,7 +1229,7 @@ transmit_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1229 struct GNUNET_CONNECTION_Handle *connection = cls; 1229 struct GNUNET_CONNECTION_Handle *connection = cls;
1230 GNUNET_CONNECTION_TransmitReadyNotify notify; 1230 GNUNET_CONNECTION_TransmitReadyNotify notify;
1231 1231
1232 connection->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK; 1232 connection->nth.timeout_task = NULL;
1233 LOG (GNUNET_ERROR_TYPE_DEBUG, 1233 LOG (GNUNET_ERROR_TYPE_DEBUG,
1234 "Transmit to `%s:%u/%s' fails, time out reached (%p).\n", 1234 "Transmit to `%s:%u/%s' fails, time out reached (%p).\n",
1235 connection->hostname, 1235 connection->hostname,
@@ -1259,7 +1259,7 @@ connect_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1259 LOG (GNUNET_ERROR_TYPE_DEBUG, 1259 LOG (GNUNET_ERROR_TYPE_DEBUG,
1260 "Transmission request of size %u fails (%s/%u), connection failed (%p).\n", 1260 "Transmission request of size %u fails (%s/%u), connection failed (%p).\n",
1261 connection->nth.notify_size, connection->hostname, connection->port, connection); 1261 connection->nth.notify_size, connection->hostname, connection->port, connection);
1262 connection->write_task = GNUNET_SCHEDULER_NO_TASK; 1262 connection->write_task = NULL;
1263 notify = connection->nth.notify_ready; 1263 notify = connection->nth.notify_ready;
1264 connection->nth.notify_ready = NULL; 1264 connection->nth.notify_ready = NULL;
1265 notify (connection->nth.notify_ready_cls, 0, NULL); 1265 notify (connection->nth.notify_ready_cls, 0, NULL);
@@ -1281,9 +1281,9 @@ transmit_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1281 size_t have; 1281 size_t have;
1282 1282
1283 LOG (GNUNET_ERROR_TYPE_DEBUG, "transmit_ready running (%p).\n", connection); 1283 LOG (GNUNET_ERROR_TYPE_DEBUG, "transmit_ready running (%p).\n", connection);
1284 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK != connection->write_task); 1284 GNUNET_assert (NULL != connection->write_task);
1285 connection->write_task = GNUNET_SCHEDULER_NO_TASK; 1285 connection->write_task = NULL;
1286 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->nth.timeout_task); 1286 GNUNET_assert (NULL == connection->nth.timeout_task);
1287 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 1287 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
1288 { 1288 {
1289 if (NULL != connection->sock) 1289 if (NULL != connection->sock)
@@ -1320,7 +1320,7 @@ transmit_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1320 } 1320 }
1321 if (!GNUNET_NETWORK_fdset_isset (tc->write_ready, connection->sock)) 1321 if (!GNUNET_NETWORK_fdset_isset (tc->write_ready, connection->sock))
1322 { 1322 {
1323 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->write_task); 1323 GNUNET_assert (NULL == connection->write_task);
1324 /* special circumstances (in particular, shutdown): not yet ready 1324 /* special circumstances (in particular, shutdown): not yet ready
1325 * to write, but no "fatal" error either. Hence retry. */ 1325 * to write, but no "fatal" error either. Hence retry. */
1326 goto SCHEDULE_WRITE; 1326 goto SCHEDULE_WRITE;
@@ -1352,10 +1352,10 @@ RETRY:
1352 { 1352 {
1353 if (EINTR == errno) 1353 if (EINTR == errno)
1354 goto RETRY; 1354 goto RETRY;
1355 if (GNUNET_SCHEDULER_NO_TASK != connection->write_task) 1355 if (NULL != connection->write_task)
1356 { 1356 {
1357 GNUNET_SCHEDULER_cancel (connection->write_task); 1357 GNUNET_SCHEDULER_cancel (connection->write_task);
1358 connection->write_task = GNUNET_SCHEDULER_NO_TASK; 1358 connection->write_task = NULL;
1359 } 1359 }
1360 signal_transmit_error (connection, errno); 1360 signal_transmit_error (connection, errno);
1361 return; 1361 return;
@@ -1378,7 +1378,7 @@ SCHEDULE_WRITE:
1378 "Re-scheduling transmit_ready (more to do) (%p).\n", connection); 1378 "Re-scheduling transmit_ready (more to do) (%p).\n", connection);
1379 have = connection->write_buffer_off - connection->write_buffer_pos; 1379 have = connection->write_buffer_off - connection->write_buffer_pos;
1380 GNUNET_assert ((NULL != connection->nth.notify_ready) || (have > 0)); 1380 GNUNET_assert ((NULL != connection->nth.notify_ready) || (have > 0));
1381 if (GNUNET_SCHEDULER_NO_TASK == connection->write_task) 1381 if (NULL == connection->write_task)
1382 connection->write_task = 1382 connection->write_task =
1383 GNUNET_SCHEDULER_add_write_net ((connection->nth.notify_ready == 1383 GNUNET_SCHEDULER_add_write_net ((connection->nth.notify_ready ==
1384 NULL) ? GNUNET_TIME_UNIT_FOREVER_REL : 1384 NULL) ? GNUNET_TIME_UNIT_FOREVER_REL :
@@ -1424,17 +1424,17 @@ GNUNET_CONNECTION_notify_transmit_ready (struct GNUNET_CONNECTION_Handle *connec
1424 connection->nth.connection = connection; 1424 connection->nth.connection = connection;
1425 connection->nth.notify_size = size; 1425 connection->nth.notify_size = size;
1426 connection->nth.transmit_timeout = GNUNET_TIME_relative_to_absolute (timeout); 1426 connection->nth.transmit_timeout = GNUNET_TIME_relative_to_absolute (timeout);
1427 GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == connection->nth.timeout_task); 1427 GNUNET_assert (NULL == connection->nth.timeout_task);
1428 if ((NULL == connection->sock) && 1428 if ((NULL == connection->sock) &&
1429 (NULL == connection->ap_head) && 1429 (NULL == connection->ap_head) &&
1430 (NULL == connection->dns_active)) 1430 (NULL == connection->dns_active))
1431 { 1431 {
1432 if (GNUNET_SCHEDULER_NO_TASK != connection->write_task) 1432 if (NULL != connection->write_task)
1433 GNUNET_SCHEDULER_cancel (connection->write_task); 1433 GNUNET_SCHEDULER_cancel (connection->write_task);
1434 connection->write_task = GNUNET_SCHEDULER_add_now (&connect_error, connection); 1434 connection->write_task = GNUNET_SCHEDULER_add_now (&connect_error, connection);
1435 return &connection->nth; 1435 return &connection->nth;
1436 } 1436 }
1437 if (GNUNET_SCHEDULER_NO_TASK != connection->write_task) 1437 if (NULL != connection->write_task)
1438 return &connection->nth; /* previous transmission still in progress */ 1438 return &connection->nth; /* previous transmission still in progress */
1439 if (NULL != connection->sock) 1439 if (NULL != connection->sock)
1440 { 1440 {
@@ -1467,15 +1467,15 @@ GNUNET_CONNECTION_notify_transmit_ready_cancel (struct
1467{ 1467{
1468 GNUNET_assert (NULL != th->notify_ready); 1468 GNUNET_assert (NULL != th->notify_ready);
1469 th->notify_ready = NULL; 1469 th->notify_ready = NULL;
1470 if (GNUNET_SCHEDULER_NO_TASK != th->timeout_task) 1470 if (NULL != th->timeout_task)
1471 { 1471 {
1472 GNUNET_SCHEDULER_cancel (th->timeout_task); 1472 GNUNET_SCHEDULER_cancel (th->timeout_task);
1473 th->timeout_task = GNUNET_SCHEDULER_NO_TASK; 1473 th->timeout_task = NULL;
1474 } 1474 }
1475 if (GNUNET_SCHEDULER_NO_TASK != th->connection->write_task) 1475 if (NULL != th->connection->write_task)
1476 { 1476 {
1477 GNUNET_SCHEDULER_cancel (th->connection->write_task); 1477 GNUNET_SCHEDULER_cancel (th->connection->write_task);
1478 th->connection->write_task = GNUNET_SCHEDULER_NO_TASK; 1478 th->connection->write_task = NULL;
1479 } 1479 }
1480} 1480}
1481 1481