diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2010-07-05 08:54:50 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2010-07-05 08:54:50 +0000 |
commit | 8de67af1d53a12d244d457473ee96bbbac518e0e (patch) | |
tree | 242a293b169b6bc1b8907e928ec537942ac085c5 /src/transport/plugin_transport_http.c | |
parent | ffeffe73446c6494d5c4923a9b21e390c5c25c61 (diff) | |
download | gnunet-8de67af1d53a12d244d457473ee96bbbac518e0e.tar.gz gnunet-8de67af1d53a12d244d457473ee96bbbac518e0e.zip |
Diffstat (limited to 'src/transport/plugin_transport_http.c')
-rw-r--r-- | src/transport/plugin_transport_http.c | 49 |
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 | |||
150 | struct HTTP_Connection | 150 | struct 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 | ||
185 | struct HTTP_Connection_in | 184 | struct 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 | ||
543 | static void messageTokenizerCallback (void *cls, | 542 | static 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 | ||
562 | static 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 | |||
997 | static size_t send_curl_write_callback( void *stream, size_t size, size_t nmemb, void *ptr) | 1016 | static 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 | } |