aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-10-22 11:10:10 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-10-22 11:10:10 +0000
commit76f59cc8768739288704cd3f6d3864760be035d0 (patch)
tree4e5d3ddb1cef68bb695e3226b73d420d9e260042 /src
parent14578b9c5ad1b9a4e3371192b8c94d0668c3fb4a (diff)
downloadgnunet-76f59cc8768739288704cd3f6d3864760be035d0.tar.gz
gnunet-76f59cc8768739288704cd3f6d3864760be035d0.zip
- measure overhead
Diffstat (limited to 'src')
-rw-r--r--src/transport/plugin_transport_http_client.c74
1 files changed, 47 insertions, 27 deletions
diff --git a/src/transport/plugin_transport_http_client.c b/src/transport/plugin_transport_http_client.c
index 3dce0775d..eb8e66988 100644
--- a/src/transport/plugin_transport_http_client.c
+++ b/src/transport/plugin_transport_http_client.c
@@ -85,12 +85,6 @@ struct HTTP_Message
85 size_t size; 85 size_t size;
86 86
87 /** 87 /**
88 * HTTP overhead required to send this message
89 * FIXME: to implement
90 */
91 size_t overhead;
92
93 /**
94 * Continuation function to call once the transmission buffer 88 * Continuation function to call once the transmission buffer
95 * has again space available. NULL if there is no 89 * has again space available. NULL if there is no
96 * continuation to call. 90 * continuation to call.
@@ -103,6 +97,20 @@ struct HTTP_Message
103 void *transmit_cont_cls; 97 void *transmit_cont_cls;
104}; 98};
105 99
100
101/**
102 * Session handle for connections.
103 */
104struct Session;
105
106struct ConnectionHandle
107{
108 CURL *easyhandle;
109 struct Session *s;
110};
111
112
113
106/** 114/**
107 * Session handle for connections. 115 * Session handle for connections.
108 */ 116 */
@@ -150,15 +158,12 @@ struct Session
150 struct HTTP_Client_Plugin *plugin; 158 struct HTTP_Client_Plugin *plugin;
151 159
152 /** 160 /**
153 * Was session given to transport service?
154 */
155 // int session_passed;
156
157 /**
158 * Client send handle 161 * Client send handle
159 */ 162 */
160 void *client_put; 163 void *client_put;
161 164
165 struct ConnectionHandle put;
166 struct ConnectionHandle get;
162 167
163 /** 168 /**
164 * Is the client PUT handle currently paused 169 * Is the client PUT handle currently paused
@@ -225,7 +230,7 @@ struct Session
225 * Absolute time when to receive data again 230 * Absolute time when to receive data again
226 * Used for receive throttling 231 * Used for receive throttling
227 */ 232 */
228 struct GNUNET_TIME_Absolute next_receive; 233 struct GNUNET_TIME_Absolute next_receive;
229}; 234};
230 235
231 236
@@ -364,13 +369,6 @@ client_exist_session (struct HTTP_Client_Plugin *plugin, struct Session *s)
364 return GNUNET_NO; 369 return GNUNET_NO;
365} 370}
366 371
367static void
368client_remark_outbound_overhead (void *cls, size_t size)
369{
370 //FIXME use this overhead
371 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-http_client",
372 "Overhead: %u\n", size);
373}
374 372
375/** 373/**
376 * Function to log curl debug messages with GNUNET_log 374 * Function to log curl debug messages with GNUNET_log
@@ -385,6 +383,7 @@ client_remark_outbound_overhead (void *cls, size_t size)
385static int 383static int
386client_log (CURL * curl, curl_infotype type, char *data, size_t size, void *cls) 384client_log (CURL * curl, curl_infotype type, char *data, size_t size, void *cls)
387{ 385{
386 struct ConnectionHandle *ch = cls;
388 char *ttype = "UNSPECIFIED"; 387 char *ttype = "UNSPECIFIED";
389 if ((type == CURLINFO_TEXT) || (type == CURLINFO_HEADER_IN) || (type == CURLINFO_HEADER_OUT)) 388 if ((type == CURLINFO_TEXT) || (type == CURLINFO_HEADER_IN) || (type == CURLINFO_HEADER_OUT))
390 { 389 {
@@ -399,12 +398,18 @@ client_log (CURL * curl, curl_infotype type, char *data, size_t size, void *cls)
399 break; 398 break;
400 case CURLINFO_HEADER_OUT: 399 case CURLINFO_HEADER_OUT:
401 ttype = "HEADER_OUT"; 400 ttype = "HEADER_OUT";
402 client_remark_outbound_overhead (cls, size); 401 /* Overhead*/
402
403 GNUNET_assert (NULL != ch);
404 GNUNET_assert (NULL != ch->easyhandle);
405 GNUNET_assert (NULL != ch->s);
406 ch->s->overhead += size;
403 break; 407 break;
404 default: 408 default:
405 ttype = "UNSPECIFIED"; 409 ttype = "UNSPECIFIED";
406 break; 410 break;
407 } 411 }
412
408#if VERBOSE_CURL 413#if VERBOSE_CURL
409 memcpy (text, data, size); 414 memcpy (text, data, size);
410 if (text[size - 1] == '\n') 415 if (text[size - 1] == '\n')
@@ -416,10 +421,10 @@ client_log (CURL * curl, curl_infotype type, char *data, size_t size, void *cls)
416 } 421 }
417#if BUILD_HTTPS 422#if BUILD_HTTPS
418 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-https_client", 423 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-https_client",
419 "Connection %p %s: %s", cls, ttype, text); 424 "Connection %p %s: %s", ch->easyhandle, ttype, text);
420#else 425#else
421 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-http_client", 426 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "transport-http_client",
422 "Connection %p %s: %s", cls, ttype, text); 427 "Connection %p %s: %s", ch->easyhandle, ttype, text);
423#endif 428#endif
424 } 429 }
425#endif 430#endif
@@ -569,7 +574,8 @@ client_delete_session (struct Session *s)
569 GNUNET_CONTAINER_DLL_remove (s->msg_head, s->msg_tail, pos); 574 GNUNET_CONTAINER_DLL_remove (s->msg_head, s->msg_tail, pos);
570 if (pos->transmit_cont != NULL) 575 if (pos->transmit_cont != NULL)
571 pos->transmit_cont (pos->transmit_cont_cls, &s->target, GNUNET_SYSERR, 576 pos->transmit_cont (pos->transmit_cont_cls, &s->target, GNUNET_SYSERR,
572 pos->size, pos->pos + pos->overhead); 577 pos->size, pos->pos + s->overhead);
578 s->overhead = 0;
573 GNUNET_free (pos); 579 GNUNET_free (pos);
574 } 580 }
575 581
@@ -655,7 +661,8 @@ client_disconnect (struct Session *s)
655 t = msg->next; 661 t = msg->next;
656 if (NULL != msg->transmit_cont) 662 if (NULL != msg->transmit_cont)
657 msg->transmit_cont (msg->transmit_cont_cls, &s->target, GNUNET_SYSERR, 663 msg->transmit_cont (msg->transmit_cont_cls, &s->target, GNUNET_SYSERR,
658 msg->size, msg->pos + msg->overhead); 664 msg->size, msg->pos + s->overhead);
665 s->overhead = 0;
659 GNUNET_CONTAINER_DLL_remove (s->msg_head, s->msg_tail, msg); 666 GNUNET_CONTAINER_DLL_remove (s->msg_head, s->msg_tail, msg);
660 GNUNET_free (msg); 667 GNUNET_free (msg);
661 msg = t; 668 msg = t;
@@ -809,7 +816,8 @@ client_send_cb (void *stream, size_t size, size_t nmemb, void *cls)
809 GNUNET_CONTAINER_DLL_remove (s->msg_head, s->msg_tail, msg); 816 GNUNET_CONTAINER_DLL_remove (s->msg_head, s->msg_tail, msg);
810 if (NULL != msg->transmit_cont) 817 if (NULL != msg->transmit_cont)
811 msg->transmit_cont (msg->transmit_cont_cls, &s->target, GNUNET_OK, 818 msg->transmit_cont (msg->transmit_cont_cls, &s->target, GNUNET_OK,
812 msg->size, msg->size + msg->overhead); 819 msg->size, msg->size + s->overhead);
820 s->overhead = 0;
813 GNUNET_free (msg); 821 GNUNET_free (msg);
814 } 822 }
815 823
@@ -1133,6 +1141,8 @@ client_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1133 s->put_tmp_disconnecting = GNUNET_NO; 1141 s->put_tmp_disconnecting = GNUNET_NO;
1134 s->put_tmp_disconnected = GNUNET_YES; 1142 s->put_tmp_disconnected = GNUNET_YES;
1135 s->client_put = NULL; 1143 s->client_put = NULL;
1144 s->put.easyhandle = NULL;
1145 s->put.s = NULL;
1136 1146
1137 /* 1147 /*
1138 * Handling a rare case: 1148 * Handling a rare case:
@@ -1162,6 +1172,8 @@ client_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
1162 "Session %p/connection %p: GET connection to `%s' ended normal\n", 1172 "Session %p/connection %p: GET connection to `%s' ended normal\n",
1163 s, msg->easy_handle, GNUNET_i2s (&s->target)); 1173 s, msg->easy_handle, GNUNET_i2s (&s->target));
1164 /* Disconnect other transmission direction and tell transport */ 1174 /* Disconnect other transmission direction and tell transport */
1175 s->get.easyhandle = NULL;
1176 s->get.s = NULL;
1165 client_disconnect (s); 1177 client_disconnect (s);
1166 } 1178 }
1167 } 1179 }
@@ -1177,10 +1189,12 @@ client_connect_get (struct Session *s)
1177 CURLMcode mret; 1189 CURLMcode mret;
1178 /* create get connection */ 1190 /* create get connection */
1179 s->client_get = curl_easy_init (); 1191 s->client_get = curl_easy_init ();
1192 s->get.s = s;
1193 s->get.easyhandle = s->client_get;
1180#if VERBOSE_CURL 1194#if VERBOSE_CURL
1181 curl_easy_setopt (s->client_get, CURLOPT_VERBOSE, 1L); 1195 curl_easy_setopt (s->client_get, CURLOPT_VERBOSE, 1L);
1182 curl_easy_setopt (s->client_get, CURLOPT_DEBUGFUNCTION, &client_log); 1196 curl_easy_setopt (s->client_get, CURLOPT_DEBUGFUNCTION, &client_log);
1183 curl_easy_setopt (s->client_get, CURLOPT_DEBUGDATA, s->client_get); 1197 curl_easy_setopt (s->client_get, CURLOPT_DEBUGDATA, &s->get);
1184#endif 1198#endif
1185#if BUILD_HTTPS 1199#if BUILD_HTTPS
1186 curl_easy_setopt (s->client_get, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); 1200 curl_easy_setopt (s->client_get, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
@@ -1212,6 +1226,8 @@ client_connect_get (struct Session *s)
1212 s, curl_multi_strerror (mret)); 1226 s, curl_multi_strerror (mret));
1213 curl_easy_cleanup (s->client_get); 1227 curl_easy_cleanup (s->client_get);
1214 s->client_get = NULL; 1228 s->client_get = NULL;
1229 s->get.s = NULL;
1230 s->get.easyhandle = NULL;
1215 GNUNET_break (0); 1231 GNUNET_break (0);
1216 return GNUNET_SYSERR; 1232 return GNUNET_SYSERR;
1217 } 1233 }
@@ -1227,10 +1243,12 @@ client_connect_put (struct Session *s)
1227 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, s->plugin->name, 1243 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, s->plugin->name,
1228 "Session %p : Init PUT handle \n", s); 1244 "Session %p : Init PUT handle \n", s);
1229 s->client_put = curl_easy_init (); 1245 s->client_put = curl_easy_init ();
1246 s->put.s = s;
1247 s->put.easyhandle = s->client_put;
1230#if VERBOSE_CURL 1248#if VERBOSE_CURL
1231 curl_easy_setopt (s->client_put, CURLOPT_VERBOSE, 1L); 1249 curl_easy_setopt (s->client_put, CURLOPT_VERBOSE, 1L);
1232 curl_easy_setopt (s->client_put, CURLOPT_DEBUGFUNCTION, &client_log); 1250 curl_easy_setopt (s->client_put, CURLOPT_DEBUGFUNCTION, &client_log);
1233 curl_easy_setopt (s->client_put, CURLOPT_DEBUGDATA, s->client_put); 1251 curl_easy_setopt (s->client_put, CURLOPT_DEBUGDATA, &s->put);
1234#endif 1252#endif
1235#if BUILD_HTTPS 1253#if BUILD_HTTPS
1236 curl_easy_setopt (s->client_put, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); 1254 curl_easy_setopt (s->client_put, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
@@ -1263,6 +1281,8 @@ client_connect_put (struct Session *s)
1263 s, curl_multi_strerror (mret)); 1281 s, curl_multi_strerror (mret));
1264 curl_easy_cleanup (s->client_put); 1282 curl_easy_cleanup (s->client_put);
1265 s->client_put = NULL; 1283 s->client_put = NULL;
1284 s->put.easyhandle = NULL;
1285 s->put.s = NULL;
1266 return GNUNET_SYSERR; 1286 return GNUNET_SYSERR;
1267 } 1287 }
1268 return GNUNET_OK; 1288 return GNUNET_OK;