From 63807d647624df155a81a2b323f370e2c36192f6 Mon Sep 17 00:00:00 2001 From: Diego Nehab Date: Thu, 1 Jul 2004 06:09:29 +0000 Subject: Added getstats. --- src/buffer.c | 14 ++++++++++++++ src/buffer.h | 3 +++ src/tcp.c | 13 +++++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/buffer.c b/src/buffer.c index aa50db0..baa248a 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -45,6 +45,18 @@ void buf_init(p_buf buf, p_io io, p_tm tm) { buf->first = buf->last = 0; buf->io = io; buf->tm = tm; + buf->received = buf->sent = 0; + buf->birthday = tm_gettime(); +} + +/*-------------------------------------------------------------------------*\ +* object:getstats() interface +\*-------------------------------------------------------------------------*/ +int buf_meth_getstats(lua_State *L, p_buf buf) { + lua_pushnumber(L, buf->received); + lua_pushnumber(L, buf->sent); + lua_pushnumber(L, tm_gettime() - buf->birthday); + return 3; } /*-------------------------------------------------------------------------*\ @@ -141,6 +153,7 @@ static int sendraw(p_buf buf, const char *data, size_t count, size_t *sent) { total += done; } *sent = total; + buf->sent += total; return err; } @@ -205,6 +218,7 @@ static int recvline(p_buf buf, luaL_Buffer *b) { * transport layer \*-------------------------------------------------------------------------*/ static void buf_skip(p_buf buf, size_t count) { + buf->received += count; buf->first += count; if (buf_isempty(buf)) buf->first = buf->last = 0; diff --git a/src/buffer.h b/src/buffer.h index 4b7563f..3ea2648 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -27,6 +27,8 @@ /* buffer control structure */ typedef struct t_buf_ { + double birthday; /* throttle support info: creation time, */ + int sent, received; /* bytes sent, and bytes received */ p_io io; /* IO driver used for this buffer */ p_tm tm; /* timeout management for this buffer */ size_t first, last; /* index of first and last bytes of stored data */ @@ -38,6 +40,7 @@ int buf_open(lua_State *L); void buf_init(p_buf buf, p_io io, p_tm tm); int buf_meth_send(lua_State *L, p_buf buf); int buf_meth_receive(lua_State *L, p_buf buf); +int buf_meth_getstats(lua_State *L, p_buf buf); int buf_isempty(p_buf buf); #endif /* BUF_H */ diff --git a/src/tcp.c b/src/tcp.c index 037a23a..512f11b 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -23,6 +23,7 @@ static int meth_connect(lua_State *L); static int meth_listen(lua_State *L); static int meth_bind(lua_State *L); static int meth_send(lua_State *L); +static int meth_getstats(lua_State *L); static int meth_getsockname(lua_State *L); static int meth_getpeername(lua_State *L); static int meth_shutdown(lua_State *L); @@ -47,6 +48,7 @@ static luaL_reg tcp[] = { {"getfd", meth_getfd}, {"getpeername", meth_getpeername}, {"getsockname", meth_getsockname}, + {"getstats", meth_getstats}, {"listen", meth_listen}, {"receive", meth_receive}, {"send", meth_send}, @@ -100,18 +102,21 @@ int tcp_open(lua_State *L) /*-------------------------------------------------------------------------*\ * Just call buffered IO methods \*-------------------------------------------------------------------------*/ -static int meth_send(lua_State *L) -{ +static int meth_send(lua_State *L) { p_tcp tcp = (p_tcp) aux_checkclass(L, "tcp{client}", 1); return buf_meth_send(L, &tcp->buf); } -static int meth_receive(lua_State *L) -{ +static int meth_receive(lua_State *L) { p_tcp tcp = (p_tcp) aux_checkclass(L, "tcp{client}", 1); return buf_meth_receive(L, &tcp->buf); } +static int meth_getstats(lua_State *L) { + p_tcp tcp = (p_tcp) aux_checkgroup(L, "tcp{any}", 1); + return buf_meth_getstats(L, &tcp->buf); +} + /*-------------------------------------------------------------------------*\ * Just call option handler \*-------------------------------------------------------------------------*/ -- cgit v1.2.3-55-g6feb