libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 0617124c369fe150123ced3e1c521d69ed4bfff2
parent a5f4e104ccedd8ef63ac2a34696db0c3e0a20136
Author: Andrey Uzunov <andrey.uzunov@gmail.com>
Date:   Wed, 28 Aug 2013 15:11:55 +0000

mhd2spdy: simple statistics (send/received bytes) added

Diffstat:
Msrc/examples/mhd2spdy.c | 27+++++++++++++++++++++++++--
Msrc/examples/mhd2spdy_spdy.c | 7+++++++
Msrc/examples/mhd2spdy_structures.c | 2++
Msrc/examples/mhd2spdy_structures.h | 19+++++++++++++++++++
4 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/src/examples/mhd2spdy.c b/src/examples/mhd2spdy.c @@ -45,6 +45,22 @@ catch_signal(int signal) } +void +print_stat() +{ + if(!glob_opt.statistics) + return; + + printf("--------------------------\n"); + printf("Statistics (TLS overhead is ignored when used):\n"); + //printf("HTTP bytes received: %lld\n", glob_stat.http_bytes_received); + //printf("HTTP bytes sent: %lld\n", glob_stat.http_bytes_sent); + printf("SPDY bytes sent: %lld\n", glob_stat.spdy_bytes_sent); + printf("SPDY bytes received: %lld\n", glob_stat.spdy_bytes_received); + printf("SPDY bytes received and dropped: %lld\n", glob_stat.spdy_bytes_received_and_dropped); +} + + int run_everything () { @@ -201,6 +217,8 @@ run_everything () PRINT_INFO2("spdy streams: %i; http requests: %i", glob_opt.streams_opened, glob_opt.responses_pending); PRINT_INFO2("memory allocated %zu bytes", glob_opt.global_memory); + + print_stat(); return 0; } @@ -210,7 +228,7 @@ void display_usage() { printf( - "Usage: http2spdy [-vo] [-b <SPDY2HTTP-PROXY>] -p <PORT>\n" + "Usage: mhd2spdy [-vos] [-b <SPDY2HTTP-PROXY>] -p <PORT>\n" "TODO\n" ); } @@ -227,12 +245,13 @@ main (int argc, {"backend-proxy", required_argument, 0, 'b'}, {"verbose", no_argument, 0, 'v'}, {"only-proxy", no_argument, 0, 'o'}, + {"statistics", no_argument, 0, 's'}, {0, 0, 0, 0} }; while (1) { - getopt_ret = getopt_long( argc, argv, "p:b:vo", long_options, &option_index); + getopt_ret = getopt_long( argc, argv, "p:b:vos", long_options, &option_index); if (getopt_ret == -1) break; @@ -256,6 +275,10 @@ main (int argc, glob_opt.only_proxy = true; break; + case 's': + glob_opt.statistics = true; + break; + case 0: PRINT_INFO("0 from getopt"); break; diff --git a/src/examples/mhd2spdy_spdy.c b/src/examples/mhd2spdy_spdy.c @@ -188,6 +188,9 @@ spdy_cb_send(spdylay_session *session, PRINT_INFO2("%zd bytes written by spdy", rv); + if(rv > 0) + UPDATE_STAT(glob_stat.spdy_bytes_sent, rv); + return rv; } @@ -257,6 +260,10 @@ spdy_cb_recv(spdylay_session *session, else if(rv == 0) rv = SPDYLAY_ERR_EOF; } + + if(rv > 0) + UPDATE_STAT(glob_stat.spdy_bytes_received, rv); + return rv; } diff --git a/src/examples/mhd2spdy_structures.c b/src/examples/mhd2spdy_structures.c @@ -118,6 +118,8 @@ void free_proxy(struct Proxy *proxy) { PRINT_INFO2("free proxy called for '%s'", proxy->url); + if(NULL != proxy->http_body && proxy->http_body_size > 0) + UPDATE_STAT(glob_stat.spdy_bytes_received_and_dropped, proxy->http_body_size); free(proxy->http_body); free_uri(proxy->uri); free(proxy->url); diff --git a/src/examples/mhd2spdy_structures.h b/src/examples/mhd2spdy_structures.h @@ -159,10 +159,22 @@ struct global_options bool verbose; bool only_proxy; bool spdy_data_received; + bool statistics; } glob_opt; +struct global_statistics +{ + //unsigned long long http_bytes_sent; + //unsigned long long http_bytes_received; + unsigned long long spdy_bytes_sent; + unsigned long long spdy_bytes_received; + unsigned long long spdy_bytes_received_and_dropped; +} +glob_stat; + + //forbidden headers #define SPDY_HTTP_HEADER_TRANSFER_ENCODING "transfer-encoding" #define SPDY_HTTP_HEADER_PROXY_CONNECTION "proxy-connection" @@ -241,6 +253,13 @@ glob_opt; while(0) +#define UPDATE_STAT(stat, value) do{\ + if(glob_opt.statistics)\ + {\ + stat += value;\ + }\ + }\ + while(0) void