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:
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