aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2010-07-05 08:54:50 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2010-07-05 08:54:50 +0000
commit8de67af1d53a12d244d457473ee96bbbac518e0e (patch)
tree242a293b169b6bc1b8907e928ec537942ac085c5
parentffeffe73446c6494d5c4923a9b21e390c5c25c61 (diff)
downloadgnunet-8de67af1d53a12d244d457473ee96bbbac518e0e.tar.gz
gnunet-8de67af1d53a12d244d457473ee96bbbac518e0e.zip
-rw-r--r--src/transport/plugin_transport_http.c49
1 files changed, 33 insertions, 16 deletions
diff --git a/src/transport/plugin_transport_http.c b/src/transport/plugin_transport_http.c
index da59f848b..70bcc14a0 100644
--- a/src/transport/plugin_transport_http.c
+++ b/src/transport/plugin_transport_http.c
@@ -150,7 +150,6 @@ struct HTTP_Message
150struct HTTP_Connection 150struct HTTP_Connection
151{ 151{
152 struct HTTP_Connection * next; 152 struct HTTP_Connection * next;
153
154 struct HTTP_Connection * prev; 153 struct HTTP_Connection * prev;
155 154
156 void * addr; 155 void * addr;
@@ -179,7 +178,7 @@ struct HTTP_Connection
179 178
180 struct Session * session; 179 struct Session * session;
181 180
182 struct GNUNET_SERVER_MessageStreamTokenizer * msgtok; 181 struct GNUNET_SERVER_MessageStreamTokenizer * get_msgtok;
183}; 182};
184 183
185struct HTTP_Connection_in 184struct HTTP_Connection_in
@@ -540,9 +539,9 @@ static void requestCompletedCallback (void *cls, struct MHD_Connection * connect
540 con->is_bad_request = GNUNET_NO; 539 con->is_bad_request = GNUNET_NO;
541} 540}
542 541
543static void messageTokenizerCallback (void *cls, 542static void mhd_write_mst_cb (void *cls,
544 void *client, 543 void *client,
545 const struct GNUNET_MessageHeader *message) 544 const struct GNUNET_MessageHeader *message)
546{ 545{
547 struct HTTP_Connection_in * con = cls; 546 struct HTTP_Connection_in * con = cls;
548 GNUNET_assert(con != NULL); 547 GNUNET_assert(con != NULL);
@@ -560,6 +559,27 @@ static void messageTokenizerCallback (void *cls,
560 0); 559 0);
561} 560}
562 561
562static void curl_write_mst_cb (void *cls,
563 void *client,
564 const struct GNUNET_MessageHeader *message)
565{
566 struct HTTP_Connection * con = cls;
567 GNUNET_assert(con != NULL);
568
569 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
570 "Forwarding message to transport service, type %u and size %u from `%s' (`%s')\n",
571 ntohs(message->type),
572 ntohs(message->size),
573 GNUNET_i2s(&(con->session->identity)),http_plugin_address_to_string(NULL,con->addr,con->addrlen));
574
575 con->session->plugin->env->receive (con->session->plugin->env->cls,
576 &con->session->identity,
577 message, 1, con->session,
578 con->addr,
579 con->addrlen);
580}
581
582
563/** 583/**
564 * Check if ip is allowed to connect. 584 * Check if ip is allowed to connect.
565 */ 585 */
@@ -584,7 +604,6 @@ int server_read_callback (void *cls, uint64_t pos, char *buf, int max)
584 604
585 msg=con->pending_msgs_tail; 605 msg=con->pending_msgs_tail;
586 606
587
588 if (msg!=NULL) 607 if (msg!=NULL)
589 { 608 {
590 /* 609 /*
@@ -693,7 +712,7 @@ accessHandlerCallback (void *cls,
693 712
694 *httpSessionCache = con; 713 *httpSessionCache = con;
695 if (con->msgtok==NULL) 714 if (con->msgtok==NULL)
696 con->msgtok = GNUNET_SERVER_mst_create (&messageTokenizerCallback, con); 715 con->msgtok = GNUNET_SERVER_mst_create (&mhd_write_mst_cb, con);
697 716
698 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Daemon has new an incoming `%s' request from peer `%s' (`%s')\n", 717 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"HTTP Daemon has new an incoming `%s' request from peer `%s' (`%s')\n",
699 method, 718 method,
@@ -997,16 +1016,10 @@ static size_t send_curl_read_callback(void *stream, size_t size, size_t nmemb, v
997static size_t send_curl_write_callback( void *stream, size_t size, size_t nmemb, void *ptr) 1016static size_t send_curl_write_callback( void *stream, size_t size, size_t nmemb, void *ptr)
998{ 1017{
999 struct HTTP_Connection * con = ptr; 1018 struct HTTP_Connection * con = ptr;
1000 char * data = NULL;
1001 1019
1002 data = GNUNET_malloc(size*nmemb +1); 1020 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: %u bytes recieved\n",con, size*nmemb);
1003 if (data != NULL) 1021 GNUNET_SERVER_mst_receive(con->get_msgtok, con, stream,size*nmemb, GNUNET_NO, GNUNET_NO);
1004 { 1022
1005 memcpy( data, stream, size*nmemb);
1006 data[size*nmemb] = '\0';
1007 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: recieved %s\n",con,data);
1008 free (data);
1009 }
1010 return (size * nmemb); 1023 return (size * nmemb);
1011 1024
1012} 1025}
@@ -1068,6 +1081,10 @@ static ssize_t send_check_connections (void *cls, struct Session* ses , struct H
1068 curl_multi_strerror (mret)); 1081 curl_multi_strerror (mret));
1069 return -1; 1082 return -1;
1070 } 1083 }
1084
1085 if (con->get_msgtok != NULL)
1086 con->get_msgtok = GNUNET_SERVER_mst_create (&curl_write_mst_cb, con);
1087
1071 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: inbound not connected, initiating connection\n",con); 1088 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connection %X: inbound not connected, initiating connection\n",con);
1072 } 1089 }
1073 } 1090 }