diff --git a/include/proto/proto_uxst.h b/include/proto/proto_uxst.h index bf487b6a9..075ca2e3c 100644 --- a/include/proto/proto_uxst.h +++ b/include/proto/proto_uxst.h @@ -29,6 +29,7 @@ int uxst_event_accept(int fd); void uxst_add_listener(struct listener *listener); struct task *uxst_process_session(struct task *t); +int uxst_req_analyser_stats(struct session *s, struct buffer *req, int an_bit); #endif /* _PROTO_PROTO_UXST_H */ diff --git a/src/dumpstats.c b/src/dumpstats.c index 061536682..2683b5298 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -106,7 +106,7 @@ static int stats_parse_global(char **args, int section_type, struct proxy *curpx global.stats_sock.state = LI_INIT; global.stats_sock.options = LI_O_NONE; global.stats_sock.accept = uxst_event_accept; - global.stats_sock.handler = uxst_process_session; + global.stats_sock.handler = process_session; global.stats_sock.analysers = AN_REQ_UNIX_STATS; global.stats_sock.private = global.stats_fe; /* must point to the frontend */ diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 742d1160b..44e7c3c25 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -664,7 +664,6 @@ int uxst_req_analyser_stats(struct session *s, struct buffer *req, int an_bit) s->data_source = DATA_SRC_STATS; s->ana_state = STATS_ST_REQ; buffer_write_dis(s->req); - buffer_shutw_now(s->req); /* fall through */ case STATS_ST_REQ: diff --git a/src/session.c b/src/session.c index 5197a80f7..56bf102e3 100644 --- a/src/session.c +++ b/src/session.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -840,6 +841,12 @@ resync_stream_interface: break; } + if (s->req->analysers & AN_REQ_UNIX_STATS) { + last_ana |= AN_REQ_UNIX_STATS; + if (!uxst_req_analyser_stats(s, s->req, AN_REQ_UNIX_STATS)) + break; + } + if (s->req->analysers & AN_REQ_PRST_RDP_COOKIE) { last_ana |= AN_REQ_PRST_RDP_COOKIE; if (!tcp_persist_rdp_cookie(s, s->req, AN_REQ_PRST_RDP_COOKIE))