[MEDIUM] make the unix stats sockets use the generic session handler

process_session() is now ready to handle unix stats sockets. This
first step works and old code has not been removed. A cleanup is
required. The stats handler is not unix socket-centric anymore and
should move to dumpstats.c.
This commit is contained in:
Willy Tarreau 2009-08-16 18:51:29 +02:00
parent 7320122655
commit 104eb36f26
4 changed files with 9 additions and 2 deletions

View File

@ -29,6 +29,7 @@
int uxst_event_accept(int fd); int uxst_event_accept(int fd);
void uxst_add_listener(struct listener *listener); void uxst_add_listener(struct listener *listener);
struct task *uxst_process_session(struct task *t); 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 */ #endif /* _PROTO_PROTO_UXST_H */

View File

@ -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.state = LI_INIT;
global.stats_sock.options = LI_O_NONE; global.stats_sock.options = LI_O_NONE;
global.stats_sock.accept = uxst_event_accept; 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.analysers = AN_REQ_UNIX_STATS;
global.stats_sock.private = global.stats_fe; /* must point to the frontend */ global.stats_sock.private = global.stats_fe; /* must point to the frontend */

View File

@ -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->data_source = DATA_SRC_STATS;
s->ana_state = STATS_ST_REQ; s->ana_state = STATS_ST_REQ;
buffer_write_dis(s->req); buffer_write_dis(s->req);
buffer_shutw_now(s->req);
/* fall through */ /* fall through */
case STATS_ST_REQ: case STATS_ST_REQ:

View File

@ -28,6 +28,7 @@
#include <proto/pipe.h> #include <proto/pipe.h>
#include <proto/proto_http.h> #include <proto/proto_http.h>
#include <proto/proto_tcp.h> #include <proto/proto_tcp.h>
#include <proto/proto_uxst.h>
#include <proto/proxy.h> #include <proto/proxy.h>
#include <proto/queue.h> #include <proto/queue.h>
#include <proto/server.h> #include <proto/server.h>
@ -840,6 +841,12 @@ resync_stream_interface:
break; 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) { if (s->req->analysers & AN_REQ_PRST_RDP_COOKIE) {
last_ana |= 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)) if (!tcp_persist_rdp_cookie(s, s->req, AN_REQ_PRST_RDP_COOKIE))