aboutsummaryrefslogtreecommitdiff
path: root/src/transport/transport_api_core.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-07-25 00:30:00 +0000
committerChristian Grothoff <christian@grothoff.org>2016-07-25 00:30:00 +0000
commitd0701eb6315fc3f5aca74415bbf0ff7418409f87 (patch)
treefcacb97bbcca542ce9493001c825fd265cb8a801 /src/transport/transport_api_core.c
parent9bfb8bff3fd253407530c76c7590b33bacf033f1 (diff)
downloadgnunet-d0701eb6315fc3f5aca74415bbf0ff7418409f87.tar.gz
gnunet-d0701eb6315fc3f5aca74415bbf0ff7418409f87.zip
switching transport tests to new MQ-based transport API
Diffstat (limited to 'src/transport/transport_api_core.c')
-rw-r--r--src/transport/transport_api_core.c57
1 files changed, 30 insertions, 27 deletions
diff --git a/src/transport/transport_api_core.c b/src/transport/transport_api_core.c
index 499aa96f6..4ca62d797 100644
--- a/src/transport/transport_api_core.c
+++ b/src/transport/transport_api_core.c
@@ -266,12 +266,12 @@ neighbour_delete (void *cls,
266 GNUNET_SCHEDULER_cancel (n->timeout_task); 266 GNUNET_SCHEDULER_cancel (n->timeout_task);
267 n->timeout_task = NULL; 267 n->timeout_task = NULL;
268 } 268 }
269 GNUNET_MQ_destroy (n->mq);
270 if (NULL != n->env) 269 if (NULL != n->env)
271 { 270 {
272 GNUNET_MQ_send_cancel (n->env); 271 GNUNET_MQ_send_cancel (n->env);
273 n->env = NULL; 272 n->env = NULL;
274 } 273 }
274 GNUNET_MQ_destroy (n->mq);
275 GNUNET_assert (NULL == n->mq); 275 GNUNET_assert (NULL == n->mq);
276 GNUNET_assert (GNUNET_YES == 276 GNUNET_assert (GNUNET_YES ==
277 GNUNET_CONTAINER_multipeermap_remove (handle->neighbours, 277 GNUNET_CONTAINER_multipeermap_remove (handle->neighbours,
@@ -411,7 +411,7 @@ mq_send_impl (struct GNUNET_MQ_Handle *mq,
411 GNUNET_MESSAGE_TYPE_TRANSPORT_SEND, 411 GNUNET_MESSAGE_TYPE_TRANSPORT_SEND,
412 msg); 412 msg);
413 obm->reserved = htonl (0); 413 obm->reserved = htonl (0);
414 obm->timeout = GNUNET_TIME_relative_hton (GNUNET_TIME_UNIT_ZERO); /* FIXME: to be removed */ 414 obm->timeout = GNUNET_TIME_relative_hton (GNUNET_TIME_UNIT_MINUTES); /* FIXME: to be removed */
415 obm->peer = n->id; 415 obm->peer = n->id;
416 GNUNET_assert (NULL == n->timeout_task); 416 GNUNET_assert (NULL == n->timeout_task);
417 n->is_ready = GNUNET_NO; 417 n->is_ready = GNUNET_NO;
@@ -421,6 +421,9 @@ mq_send_impl (struct GNUNET_MQ_Handle *mq,
421 n); 421 n);
422 GNUNET_MQ_send (h->mq, 422 GNUNET_MQ_send (h->mq,
423 n->env); 423 n->env);
424 LOG (GNUNET_ERROR_TYPE_DEBUG,
425 "Queued message for neighbour `%s'.\n",
426 GNUNET_i2s (&n->id));
424} 427}
425 428
426 429
@@ -655,15 +658,14 @@ check_recv (void *cls,
655 const struct GNUNET_MessageHeader *imm; 658 const struct GNUNET_MessageHeader *imm;
656 uint16_t size; 659 uint16_t size;
657 660
658 size = ntohs (im->header.size); 661 size = ntohs (im->header.size) - sizeof (*im);
659 if (size < 662 if (size < sizeof (struct GNUNET_MessageHeader))
660 sizeof (struct InboundMessage) + sizeof (struct GNUNET_MessageHeader))
661 { 663 {
662 GNUNET_break (0); 664 GNUNET_break (0);
663 return GNUNET_SYSERR; 665 return GNUNET_SYSERR;
664 } 666 }
665 imm = (const struct GNUNET_MessageHeader *) &im[1]; 667 imm = (const struct GNUNET_MessageHeader *) &im[1];
666 if (ntohs (imm->size) + sizeof (struct InboundMessage) != size) 668 if (ntohs (imm->size) != size)
667 { 669 {
668 GNUNET_break (0); 670 GNUNET_break (0);
669 return GNUNET_SYSERR; 671 return GNUNET_SYSERR;
@@ -808,15 +810,15 @@ static void
808disconnect_and_schedule_reconnect (struct GNUNET_TRANSPORT_CoreHandle *h) 810disconnect_and_schedule_reconnect (struct GNUNET_TRANSPORT_CoreHandle *h)
809{ 811{
810 GNUNET_assert (NULL == h->reconnect_task); 812 GNUNET_assert (NULL == h->reconnect_task);
813 /* Forget about all neighbours that we used to be connected to */
814 GNUNET_CONTAINER_multipeermap_iterate (h->neighbours,
815 &neighbour_delete,
816 h);
811 if (NULL != h->mq) 817 if (NULL != h->mq)
812 { 818 {
813 GNUNET_MQ_destroy (h->mq); 819 GNUNET_MQ_destroy (h->mq);
814 h->mq = NULL; 820 h->mq = NULL;
815 } 821 }
816 /* Forget about all neighbours that we used to be connected to */
817 GNUNET_CONTAINER_multipeermap_iterate (h->neighbours,
818 &neighbour_delete,
819 h);
820 LOG (GNUNET_ERROR_TYPE_DEBUG, 822 LOG (GNUNET_ERROR_TYPE_DEBUG,
821 "Scheduling task to reconnect to transport service in %s.\n", 823 "Scheduling task to reconnect to transport service in %s.\n",
822 GNUNET_STRINGS_relative_time_to_string (h->reconnect_delay, 824 GNUNET_STRINGS_relative_time_to_string (h->reconnect_delay,
@@ -865,13 +867,13 @@ GNUNET_TRANSPORT_core_get_mq (struct GNUNET_TRANSPORT_CoreHandle *handle,
865 * @return NULL on error 867 * @return NULL on error
866 */ 868 */
867struct GNUNET_TRANSPORT_CoreHandle * 869struct GNUNET_TRANSPORT_CoreHandle *
868GNUNET_TRANSPORT_connecT (const struct GNUNET_CONFIGURATION_Handle *cfg, 870GNUNET_TRANSPORT_core_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
869 const struct GNUNET_PeerIdentity *self, 871 const struct GNUNET_PeerIdentity *self,
870 const struct GNUNET_MQ_MessageHandler *handlers, 872 const struct GNUNET_MQ_MessageHandler *handlers,
871 void *cls, 873 void *cls,
872 GNUNET_TRANSPORT_NotifyConnecT nc, 874 GNUNET_TRANSPORT_NotifyConnecT nc,
873 GNUNET_TRANSPORT_NotifyDisconnecT nd, 875 GNUNET_TRANSPORT_NotifyDisconnecT nd,
874 GNUNET_TRANSPORT_NotifyExcessBandwidtH neb) 876 GNUNET_TRANSPORT_NotifyExcessBandwidtH neb)
875{ 877{
876 struct GNUNET_TRANSPORT_CoreHandle *h; 878 struct GNUNET_TRANSPORT_CoreHandle *h;
877 unsigned int i; 879 unsigned int i;
@@ -888,22 +890,23 @@ GNUNET_TRANSPORT_connecT (const struct GNUNET_CONFIGURATION_Handle *cfg,
888 h->nd_cb = nd; 890 h->nd_cb = nd;
889 h->neb_cb = neb; 891 h->neb_cb = neb;
890 h->reconnect_delay = GNUNET_TIME_UNIT_ZERO; 892 h->reconnect_delay = GNUNET_TIME_UNIT_ZERO;
891 LOG (GNUNET_ERROR_TYPE_DEBUG,
892 "Connecting to transport service.\n");
893 reconnect (h);
894 if (NULL == h->mq)
895 {
896 GNUNET_free (h);
897 return NULL;
898 }
899 if (NULL != handlers) 893 if (NULL != handlers)
900 { 894 {
901 for (i=0;NULL != handlers[i].cb; i++) ; 895 for (i=0;NULL != handlers[i].cb; i++) ;
902 h->handlers = GNUNET_new_array (i + 1, 896 h->handlers = GNUNET_new_array (i + 1,
903 struct GNUNET_MQ_MessageHandler); 897 struct GNUNET_MQ_MessageHandler);
904 GNUNET_memcpy (h->handlers, 898 GNUNET_memcpy (h->handlers,
905 handlers, 899 handlers,
906 i * sizeof (struct GNUNET_MQ_MessageHandler)); 900 i * sizeof (struct GNUNET_MQ_MessageHandler));
901 }
902 LOG (GNUNET_ERROR_TYPE_DEBUG,
903 "Connecting to transport service\n");
904 reconnect (h);
905 if (NULL == h->mq)
906 {
907 GNUNET_free_non_null (h->handlers);
908 GNUNET_free (h);
909 return NULL;
907 } 910 }
908 h->neighbours = 911 h->neighbours =
909 GNUNET_CONTAINER_multipeermap_create (STARTING_NEIGHBOURS_SIZE, 912 GNUNET_CONTAINER_multipeermap_create (STARTING_NEIGHBOURS_SIZE,