aboutsummaryrefslogtreecommitdiff
path: root/src/util/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/client.c')
-rw-r--r--src/util/client.c172
1 files changed, 70 insertions, 102 deletions
diff --git a/src/util/client.c b/src/util/client.c
index 032a6c5e4..59cd26ad1 100644
--- a/src/util/client.c
+++ b/src/util/client.c
@@ -293,15 +293,11 @@ do_connect (const char *service_name,
293#endif 293#endif
294 294
295 if ((GNUNET_OK != 295 if ((GNUNET_OK !=
296 GNUNET_CONFIGURATION_get_value_number (cfg, 296 GNUNET_CONFIGURATION_get_value_number (cfg, service_name, "PORT", &port))
297 service_name, 297 || (port > 65535) ||
298 "PORT",
299 &port)) ||
300 (port > 65535) ||
301 (GNUNET_OK != 298 (GNUNET_OK !=
302 GNUNET_CONFIGURATION_get_value_string (cfg, 299 GNUNET_CONFIGURATION_get_value_string (cfg, service_name, "HOSTNAME",
303 service_name, 300 &hostname)))
304 "HOSTNAME", &hostname)))
305 { 301 {
306 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 302 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
307 _ 303 _
@@ -325,13 +321,12 @@ do_connect (const char *service_name,
325 /* try UNIX */ 321 /* try UNIX */
326 unixpath = NULL; 322 unixpath = NULL;
327 if ((GNUNET_OK == 323 if ((GNUNET_OK ==
328 GNUNET_CONFIGURATION_get_value_string (cfg, 324 GNUNET_CONFIGURATION_get_value_string (cfg, service_name, "UNIXPATH",
329 service_name, 325 &unixpath)) &&
330 "UNIXPATH", &unixpath)) &&
331 (0 < strlen (unixpath))) 326 (0 < strlen (unixpath)))
332 { 327 {
333 sock = GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, 328 sock =
334 unixpath); 329 GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, unixpath);
335 if (sock != NULL) 330 if (sock != NULL)
336 { 331 {
337 GNUNET_free (unixpath); 332 GNUNET_free (unixpath);
@@ -457,8 +452,8 @@ check_complete (struct GNUNET_CLIENT_Connection *conn)
457{ 452{
458 if ((conn->received_pos >= sizeof (struct GNUNET_MessageHeader)) && 453 if ((conn->received_pos >= sizeof (struct GNUNET_MessageHeader)) &&
459 (conn->received_pos >= 454 (conn->received_pos >=
460 ntohs (((const struct GNUNET_MessageHeader *) conn->received_buf)-> 455 ntohs (((const struct GNUNET_MessageHeader *) conn->
461 size))) 456 received_buf)->size)))
462 conn->msg_complete = GNUNET_YES; 457 conn->msg_complete = GNUNET_YES;
463} 458}
464 459
@@ -476,9 +471,7 @@ check_complete (struct GNUNET_CLIENT_Connection *conn)
476 * @param errCode value of errno (on errors receiving) 471 * @param errCode value of errno (on errors receiving)
477 */ 472 */
478static void 473static void
479receive_helper (void *cls, 474receive_helper (void *cls, const void *buf, size_t available,
480 const void *buf,
481 size_t available,
482 const struct sockaddr *addr, socklen_t addrlen, int errCode) 475 const struct sockaddr *addr, socklen_t addrlen, int errCode)
483{ 476{
484 struct GNUNET_CLIENT_Connection *conn = cls; 477 struct GNUNET_CLIENT_Connection *conn = cls;
@@ -512,8 +505,8 @@ receive_helper (void *cls,
512 505
513 /* slow path: append to array */ 506 /* slow path: append to array */
514 if (conn->received_size < conn->received_pos + available) 507 if (conn->received_size < conn->received_pos + available)
515 GNUNET_array_grow (conn->received_buf, 508 GNUNET_array_grow (conn->received_buf, conn->received_size,
516 conn->received_size, conn->received_pos + available); 509 conn->received_pos + available);
517 memcpy (&conn->received_buf[conn->received_pos], buf, available); 510 memcpy (&conn->received_buf[conn->received_pos], buf, available);
518 conn->received_pos += available; 511 conn->received_pos += available;
519 check_complete (conn); 512 check_complete (conn);
@@ -527,8 +520,7 @@ receive_helper (void *cls,
527 return; 520 return;
528 } 521 }
529 /* back to receive -- either for more data or to call callback! */ 522 /* back to receive -- either for more data or to call callback! */
530 GNUNET_CLIENT_receive (conn, 523 GNUNET_CLIENT_receive (conn, conn->receiver_handler,
531 conn->receiver_handler,
532 conn->receiver_handler_cls, remaining); 524 conn->receiver_handler_cls, remaining);
533} 525}
534 526
@@ -553,15 +545,15 @@ receive_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
553 545
554#if DEBUG_CLIENT 546#if DEBUG_CLIENT
555 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 547 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
556 "Received message of type %u and size %u\n", 548 "Received message of type %u and size %u\n", ntohs (cmsg->type),
557 ntohs (cmsg->type), msize); 549 msize);
558#endif 550#endif
559 sock->receive_task = GNUNET_SCHEDULER_NO_TASK; 551 sock->receive_task = GNUNET_SCHEDULER_NO_TASK;
560 GNUNET_assert (GNUNET_YES == sock->msg_complete); 552 GNUNET_assert (GNUNET_YES == sock->msg_complete);
561 GNUNET_assert (sock->received_pos >= msize); 553 GNUNET_assert (sock->received_pos >= msize);
562 memcpy (msg, cmsg, msize); 554 memcpy (msg, cmsg, msize);
563 memmove (sock->received_buf, 555 memmove (sock->received_buf, &sock->received_buf[msize],
564 &sock->received_buf[msize], sock->received_pos - msize); 556 sock->received_pos - msize);
565 sock->received_pos -= msize; 557 sock->received_pos -= msize;
566 sock->msg_complete = GNUNET_NO; 558 sock->msg_complete = GNUNET_NO;
567 sock->receiver_handler = NULL; 559 sock->receiver_handler = NULL;
@@ -581,8 +573,8 @@ receive_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
581 */ 573 */
582void 574void
583GNUNET_CLIENT_receive (struct GNUNET_CLIENT_Connection *sock, 575GNUNET_CLIENT_receive (struct GNUNET_CLIENT_Connection *sock,
584 GNUNET_CLIENT_MessageHandler handler, 576 GNUNET_CLIENT_MessageHandler handler, void *handler_cls,
585 void *handler_cls, struct GNUNET_TIME_Relative timeout) 577 struct GNUNET_TIME_Relative timeout)
586{ 578{
587 if (sock->sock == NULL) 579 if (sock->sock == NULL)
588 { 580 {
@@ -607,8 +599,7 @@ GNUNET_CLIENT_receive (struct GNUNET_CLIENT_Connection *sock,
607#if DEBUG_CLIENT 599#if DEBUG_CLIENT
608 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "calling GNUNET_CONNECTION_receive\n"); 600 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "calling GNUNET_CONNECTION_receive\n");
609#endif 601#endif
610 GNUNET_CONNECTION_receive (sock->sock, 602 GNUNET_CONNECTION_receive (sock->sock, GNUNET_SERVER_MAX_MESSAGE_SIZE - 1,
611 GNUNET_SERVER_MAX_MESSAGE_SIZE - 1,
612 timeout, &receive_helper, sock); 603 timeout, &receive_helper, sock);
613 } 604 }
614} 605}
@@ -620,8 +611,8 @@ GNUNET_CLIENT_receive (struct GNUNET_CLIENT_Connection *sock,
620static void 611static void
621service_test_error (GNUNET_SCHEDULER_Task task, void *task_cls) 612service_test_error (GNUNET_SCHEDULER_Task task, void *task_cls)
622{ 613{
623 GNUNET_SCHEDULER_add_continuation (task, 614 GNUNET_SCHEDULER_add_continuation (task, task_cls,
624 task_cls, GNUNET_SCHEDULER_REASON_TIMEOUT); 615 GNUNET_SCHEDULER_REASON_TIMEOUT);
625} 616}
626 617
627 618
@@ -645,8 +636,7 @@ confirm_handler (void *cls, const struct GNUNET_MessageHeader *msg)
645 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 636 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
646 "Received confirmation that service is running.\n"); 637 "Received confirmation that service is running.\n");
647#endif 638#endif
648 GNUNET_SCHEDULER_add_continuation (conn->test_cb, 639 GNUNET_SCHEDULER_add_continuation (conn->test_cb, conn->test_cb_cls,
649 conn->test_cb_cls,
650 GNUNET_SCHEDULER_REASON_PREREQ_DONE); 640 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
651 } 641 }
652 else 642 else
@@ -688,11 +678,9 @@ write_test (void *cls, size_t size, void *buf)
688 msg = (struct GNUNET_MessageHeader *) buf; 678 msg = (struct GNUNET_MessageHeader *) buf;
689 msg->type = htons (GNUNET_MESSAGE_TYPE_TEST); 679 msg->type = htons (GNUNET_MESSAGE_TYPE_TEST);
690 msg->size = htons (sizeof (struct GNUNET_MessageHeader)); 680 msg->size = htons (sizeof (struct GNUNET_MessageHeader));
691 GNUNET_CLIENT_receive (conn, 681 GNUNET_CLIENT_receive (conn, &confirm_handler, conn,
692 &confirm_handler, 682 GNUNET_TIME_absolute_get_remaining (conn->
693 conn, 683 test_deadline));
694 GNUNET_TIME_absolute_get_remaining
695 (conn->test_deadline));
696 return sizeof (struct GNUNET_MessageHeader); 684 return sizeof (struct GNUNET_MessageHeader);
697} 685}
698 686
@@ -722,8 +710,8 @@ GNUNET_CLIENT_service_test (const char *service,
722 struct GNUNET_CLIENT_Connection *conn; 710 struct GNUNET_CLIENT_Connection *conn;
723 711
724#if DEBUG_CLIENT 712#if DEBUG_CLIENT
725 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 713 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Testing if service `%s' is running.\n",
726 "Testing if service `%s' is running.\n", service); 714 service);
727#endif 715#endif
728#ifdef AF_UNIX 716#ifdef AF_UNIX
729 { 717 {
@@ -761,15 +749,13 @@ GNUNET_CLIENT_service_test (const char *service,
761 s_un.sun_len = (u_char) slen; 749 s_un.sun_len = (u_char) slen;
762#endif 750#endif
763 if (GNUNET_OK != 751 if (GNUNET_OK !=
764 GNUNET_NETWORK_socket_bind (sock, 752 GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) &s_un,
765 (const struct sockaddr *) &s_un,
766 slen)) 753 slen))
767 { 754 {
768 /* failed to bind => service must be running */ 755 /* failed to bind => service must be running */
769 GNUNET_free (unixpath); 756 GNUNET_free (unixpath);
770 (void) GNUNET_NETWORK_socket_close (sock); 757 (void) GNUNET_NETWORK_socket_close (sock);
771 GNUNET_SCHEDULER_add_continuation (task, 758 GNUNET_SCHEDULER_add_continuation (task, task_cls,
772 task_cls,
773 GNUNET_SCHEDULER_REASON_PREREQ_DONE); 759 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
774 return; 760 return;
775 } 761 }
@@ -784,14 +770,11 @@ GNUNET_CLIENT_service_test (const char *service,
784 770
785 hostname = NULL; 771 hostname = NULL;
786 if ((GNUNET_OK != 772 if ((GNUNET_OK !=
787 GNUNET_CONFIGURATION_get_value_number (cfg, 773 GNUNET_CONFIGURATION_get_value_number (cfg, service, "PORT", &port)) ||
788 service,
789 "PORT",
790 &port)) ||
791 (port > 65535) || 774 (port > 65535) ||
792 (GNUNET_OK != 775 (GNUNET_OK !=
793 GNUNET_CONFIGURATION_get_value_string (cfg, 776 GNUNET_CONFIGURATION_get_value_string (cfg, service, "HOSTNAME",
794 service, "HOSTNAME", &hostname))) 777 &hostname)))
795 { 778 {
796 /* UNIXPATH failed (if possible) AND IP failed => error */ 779 /* UNIXPATH failed (if possible) AND IP failed => error */
797 service_test_error (task, task_cls); 780 service_test_error (task, task_cls);
@@ -818,15 +801,13 @@ GNUNET_CLIENT_service_test (const char *service,
818 if (sock != NULL) 801 if (sock != NULL)
819 { 802 {
820 if (GNUNET_OK != 803 if (GNUNET_OK !=
821 GNUNET_NETWORK_socket_bind (sock, 804 GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) &s_in,
822 (const struct sockaddr *) &s_in,
823 sizeof (s_in))) 805 sizeof (s_in)))
824 { 806 {
825 /* failed to bind => service must be running */ 807 /* failed to bind => service must be running */
826 GNUNET_free (hostname); 808 GNUNET_free (hostname);
827 (void) GNUNET_NETWORK_socket_close (sock); 809 (void) GNUNET_NETWORK_socket_close (sock);
828 GNUNET_SCHEDULER_add_continuation (task, 810 GNUNET_SCHEDULER_add_continuation (task, task_cls,
829 task_cls,
830 GNUNET_SCHEDULER_REASON_PREREQ_DONE); 811 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
831 return; 812 return;
832 } 813 }
@@ -854,15 +835,13 @@ GNUNET_CLIENT_service_test (const char *service,
854 if (sock != NULL) 835 if (sock != NULL)
855 { 836 {
856 if (GNUNET_OK != 837 if (GNUNET_OK !=
857 GNUNET_NETWORK_socket_bind (sock, 838 GNUNET_NETWORK_socket_bind (sock, (const struct sockaddr *) &s_in6,
858 (const struct sockaddr *) &s_in6,
859 sizeof (s_in6))) 839 sizeof (s_in6)))
860 { 840 {
861 /* failed to bind => service must be running */ 841 /* failed to bind => service must be running */
862 GNUNET_free (hostname); 842 GNUNET_free (hostname);
863 (void) GNUNET_NETWORK_socket_close (sock); 843 (void) GNUNET_NETWORK_socket_close (sock);
864 GNUNET_SCHEDULER_add_continuation (task, 844 GNUNET_SCHEDULER_add_continuation (task, task_cls,
865 task_cls,
866 GNUNET_SCHEDULER_REASON_PREREQ_DONE); 845 GNUNET_SCHEDULER_REASON_PREREQ_DONE);
867 return; 846 return;
868 } 847 }
@@ -889,8 +868,7 @@ GNUNET_CLIENT_service_test (const char *service,
889 if (conn == NULL) 868 if (conn == NULL)
890 { 869 {
891 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 870 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
892 _ 871 _("Could not connect to service `%s', must not be running.\n"),
893 ("Could not connect to service `%s', must not be running.\n"),
894 service); 872 service);
895 service_test_error (task, task_cls); 873 service_test_error (task, task_cls);
896 return; 874 return;
@@ -899,11 +877,11 @@ GNUNET_CLIENT_service_test (const char *service,
899 conn->test_cb_cls = task_cls; 877 conn->test_cb_cls = task_cls;
900 conn->test_deadline = GNUNET_TIME_relative_to_absolute (timeout); 878 conn->test_deadline = GNUNET_TIME_relative_to_absolute (timeout);
901 879
902 if (NULL == GNUNET_CLIENT_notify_transmit_ready (conn, 880 if (NULL ==
903 sizeof (struct 881 GNUNET_CLIENT_notify_transmit_ready (conn,
904 GNUNET_MessageHeader), 882 sizeof (struct GNUNET_MessageHeader),
905 timeout, GNUNET_YES, 883 timeout, GNUNET_YES, &write_test,
906 &write_test, conn)) 884 conn))
907 { 885 {
908 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 886 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
909 _("Failure to transmit request to service `%s'\n"), service); 887 _("Failure to transmit request to service `%s'\n"), service);
@@ -952,8 +930,8 @@ client_delayed_retry (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
952 GNUNET_free (th); 930 GNUNET_free (th);
953 return; 931 return;
954 } 932 }
955 th->sock->sock = do_connect (th->sock->service_name, 933 th->sock->sock =
956 th->sock->cfg, th->sock->attempts++); 934 do_connect (th->sock->service_name, th->sock->cfg, th->sock->attempts++);
957 if (NULL == th->sock->sock) 935 if (NULL == th->sock->sock)
958 { 936 {
959 /* could happen if we're out of sockets */ 937 /* could happen if we're out of sockets */
@@ -970,17 +948,16 @@ client_delayed_retry (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
970 MAX_ATTEMPTS - th->attempts_left, 948 MAX_ATTEMPTS - th->attempts_left,
971 (unsigned long long) delay.rel_value); 949 (unsigned long long) delay.rel_value);
972#endif 950#endif
973 th->reconnect_task = GNUNET_SCHEDULER_add_delayed (delay, 951 th->reconnect_task =
974 &client_delayed_retry, 952 GNUNET_SCHEDULER_add_delayed (delay, &client_delayed_retry, th);
975 th);
976 return; 953 return;
977 } 954 }
978 GNUNET_CONNECTION_ignore_shutdown (th->sock->sock, th->sock->ignore_shutdown); 955 GNUNET_CONNECTION_ignore_shutdown (th->sock->sock, th->sock->ignore_shutdown);
979 th->th = GNUNET_CONNECTION_notify_transmit_ready (th->sock->sock, 956 th->th =
980 th->size, 957 GNUNET_CONNECTION_notify_transmit_ready (th->sock->sock, th->size,
981 GNUNET_TIME_absolute_get_remaining 958 GNUNET_TIME_absolute_get_remaining
982 (th->timeout), 959 (th->timeout), &client_notify,
983 &client_notify, th); 960 th);
984 if (th->th == NULL) 961 if (th->th == NULL)
985 { 962 {
986 GNUNET_break (0); 963 GNUNET_break (0);
@@ -1037,8 +1014,7 @@ client_notify (void *cls, size_t size, void *buf)
1037 GNUNET_CONNECTION_destroy (th->sock->sock, GNUNET_NO); 1014 GNUNET_CONNECTION_destroy (th->sock->sock, GNUNET_NO);
1038 th->sock->sock = NULL; 1015 th->sock->sock = NULL;
1039 delay = GNUNET_TIME_relative_min (delay, th->sock->back_off); 1016 delay = GNUNET_TIME_relative_min (delay, th->sock->back_off);
1040 th->sock->back_off 1017 th->sock->back_off =
1041 =
1042 GNUNET_TIME_relative_min (GNUNET_TIME_relative_multiply 1018 GNUNET_TIME_relative_min (GNUNET_TIME_relative_multiply
1043 (th->sock->back_off, 2), 1019 (th->sock->back_off, 2),
1044 GNUNET_TIME_UNIT_SECONDS); 1020 GNUNET_TIME_UNIT_SECONDS);
@@ -1049,9 +1025,8 @@ client_notify (void *cls, size_t size, void *buf)
1049 (unsigned long long) delay.rel_value); 1025 (unsigned long long) delay.rel_value);
1050#endif 1026#endif
1051 th->sock->th = th; 1027 th->sock->th = th;
1052 th->reconnect_task = GNUNET_SCHEDULER_add_delayed (delay, 1028 th->reconnect_task =
1053 &client_delayed_retry, 1029 GNUNET_SCHEDULER_add_delayed (delay, &client_delayed_retry, th);
1054 th);
1055 return 0; 1030 return 0;
1056 } 1031 }
1057 GNUNET_assert (size >= th->size); 1032 GNUNET_assert (size >= th->size);
@@ -1108,17 +1083,16 @@ GNUNET_CLIENT_notify_transmit_ready (struct GNUNET_CLIENT_Connection *sock,
1108 sock->th = th; 1083 sock->th = th;
1109 if (sock->sock == NULL) 1084 if (sock->sock == NULL)
1110 { 1085 {
1111 th->reconnect_task = GNUNET_SCHEDULER_add_delayed (sock->back_off, 1086 th->reconnect_task =
1112 &client_delayed_retry, 1087 GNUNET_SCHEDULER_add_delayed (sock->back_off, &client_delayed_retry,
1113 th); 1088 th);
1114 1089
1115 } 1090 }
1116 else 1091 else
1117 { 1092 {
1118 th->th = GNUNET_CONNECTION_notify_transmit_ready (sock->sock, 1093 th->th =
1119 size, 1094 GNUNET_CONNECTION_notify_transmit_ready (sock->sock, size, timeout,
1120 timeout, 1095 &client_notify, th);
1121 &client_notify, th);
1122 if (NULL == th->th) 1096 if (NULL == th->th)
1123 { 1097 {
1124 GNUNET_break (0); 1098 GNUNET_break (0);
@@ -1137,8 +1111,8 @@ GNUNET_CLIENT_notify_transmit_ready (struct GNUNET_CLIENT_Connection *sock,
1137 * @param th handle from the original request. 1111 * @param th handle from the original request.
1138 */ 1112 */
1139void 1113void
1140GNUNET_CLIENT_notify_transmit_ready_cancel (struct 1114GNUNET_CLIENT_notify_transmit_ready_cancel (struct GNUNET_CLIENT_TransmitHandle
1141 GNUNET_CLIENT_TransmitHandle *th) 1115 *th)
1142{ 1116{
1143 if (th->reconnect_task != GNUNET_SCHEDULER_NO_TASK) 1117 if (th->reconnect_task != GNUNET_SCHEDULER_NO_TASK)
1144 { 1118 {
@@ -1189,9 +1163,7 @@ transmit_for_response (void *cls, size_t size, void *buf)
1189 } 1163 }
1190 GNUNET_assert (size >= msize); 1164 GNUNET_assert (size >= msize);
1191 memcpy (buf, tc->hdr, msize); 1165 memcpy (buf, tc->hdr, msize);
1192 GNUNET_CLIENT_receive (tc->sock, 1166 GNUNET_CLIENT_receive (tc->sock, tc->rn, tc->rn_cls,
1193 tc->rn,
1194 tc->rn_cls,
1195 GNUNET_TIME_absolute_get_remaining (tc->timeout)); 1167 GNUNET_TIME_absolute_get_remaining (tc->timeout));
1196 GNUNET_free (tc); 1168 GNUNET_free (tc);
1197 return msize; 1169 return msize;
@@ -1220,10 +1192,8 @@ transmit_for_response (void *cls, size_t size, void *buf)
1220 * is already pending 1192 * is already pending
1221 */ 1193 */
1222int 1194int
1223GNUNET_CLIENT_transmit_and_get_response (struct GNUNET_CLIENT_Connection 1195GNUNET_CLIENT_transmit_and_get_response (struct GNUNET_CLIENT_Connection *sock,
1224 *sock, 1196 const struct GNUNET_MessageHeader *hdr,
1225 const struct GNUNET_MessageHeader
1226 *hdr,
1227 struct GNUNET_TIME_Relative timeout, 1197 struct GNUNET_TIME_Relative timeout,
1228 int auto_retry, 1198 int auto_retry,
1229 GNUNET_CLIENT_MessageHandler rn, 1199 GNUNET_CLIENT_MessageHandler rn,
@@ -1243,11 +1213,9 @@ GNUNET_CLIENT_transmit_and_get_response (struct GNUNET_CLIENT_Connection
1243 tc->timeout = GNUNET_TIME_relative_to_absolute (timeout); 1213 tc->timeout = GNUNET_TIME_relative_to_absolute (timeout);
1244 tc->rn = rn; 1214 tc->rn = rn;
1245 tc->rn_cls = rn_cls; 1215 tc->rn_cls = rn_cls;
1246 if (NULL == GNUNET_CLIENT_notify_transmit_ready (sock, 1216 if (NULL ==
1247 msize, 1217 GNUNET_CLIENT_notify_transmit_ready (sock, msize, timeout, auto_retry,
1248 timeout, 1218 &transmit_for_response, tc))
1249 auto_retry,
1250 &transmit_for_response, tc))
1251 { 1219 {
1252 GNUNET_break (0); 1220 GNUNET_break (0);
1253 GNUNET_free (tc); 1221 GNUNET_free (tc);