From: Timo Sirainen Date: Thu, 26 Oct 2017 10:07:30 +0000 (+0300) Subject: director: Add director_connection_get_status() X-Git-Tag: 2.2.34~262 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=394f44171543732c3eba16cd27fa41a1824d2225;p=thirdparty%2Fdovecot%2Fcore.git director: Add director_connection_get_status() Can be used to access connection-specific status information. --- diff --git a/src/director/director-connection.c b/src/director/director-connection.c index 461cf0388b..600bbb9df4 100644 --- a/src/director/director-connection.c +++ b/src/director/director-connection.c @@ -104,6 +104,7 @@ struct director_connection { unsigned int minor_version; struct timeval last_input, last_output; + size_t peak_bytes_buffered; /* for incoming connections the director host isn't known until ME-line is received */ @@ -2300,6 +2301,9 @@ void director_connection_send(struct director_connection *conn, } else { conn->dir->ring_traffic_output += len; conn->last_output = ioloop_timeval; + conn->peak_bytes_buffered = + I_MAX(conn->peak_bytes_buffered, + o_stream_get_buffer_used_size(conn->output)); } } @@ -2396,3 +2400,15 @@ void director_connection_set_synced(struct director_connection *conn, director_connection_set_ping_timeout(conn); } + +void director_connection_get_status(struct director_connection *conn, + struct director_connection_status *status_r) +{ + i_zero(status_r); + status_r->bytes_read = conn->input->v_offset; + status_r->bytes_sent = conn->output->offset; + status_r->bytes_buffered = o_stream_get_buffer_used_size(conn->output); + status_r->peak_bytes_buffered = conn->peak_bytes_buffered; + status_r->last_input = conn->last_input; + status_r->last_output = conn->last_output; +} diff --git a/src/director/director-connection.h b/src/director/director-connection.h index 03c954a88a..b76a2e1bdc 100644 --- a/src/director/director-connection.h +++ b/src/director/director-connection.h @@ -1,6 +1,12 @@ #ifndef DIRECTOR_CONNECTION_H #define DIRECTOR_CONNECTION_H +struct director_connection_status { + uoff_t bytes_read, bytes_sent; + size_t bytes_buffered, peak_bytes_buffered; + struct timeval last_input, last_output; +}; + struct director_host; struct director; @@ -31,4 +37,7 @@ director_connection_get_minor_version(struct director_connection *conn); void director_connection_cork(struct director_connection *conn); void director_connection_uncork(struct director_connection *conn); +void director_connection_get_status(struct director_connection *conn, + struct director_connection_status *status_r); + #endif