diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-10-22 11:10:10 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-10-22 11:10:10 +0000 |
commit | 76f59cc8768739288704cd3f6d3864760be035d0 (patch) | |
tree | 4e5d3ddb1cef68bb695e3226b73d420d9e260042 /src | |
parent | 14578b9c5ad1b9a4e3371192b8c94d0668c3fb4a (diff) | |
download | gnunet-76f59cc8768739288704cd3f6d3864760be035d0.tar.gz gnunet-76f59cc8768739288704cd3f6d3864760be035d0.zip |
- measure overhead
Diffstat (limited to 'src')
-rw-r--r-- | src/transport/plugin_transport_http_client.c | 74 |
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 | */ | ||
104 | struct Session; | ||
105 | |||
106 | struct 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 | ||
367 | static void | ||
368 | client_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) | |||
385 | static int | 383 | static int |
386 | client_log (CURL * curl, curl_infotype type, char *data, size_t size, void *cls) | 384 | client_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; |