]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: listener: store the default target per listener
authorWilly Tarreau <w@1wt.eu>
Fri, 13 Mar 2015 15:43:12 +0000 (16:43 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 13 Mar 2015 15:45:37 +0000 (16:45 +0100)
This will be useful later to state that some listeners have to use
certain decoders (typically an HTTP/2 decoder) regardless of the
regular processing applied to other listeners. For now it simply
defaults to the frontend's default target, and it is used by the
session.

include/types/listener.h
src/cfgparse.c
src/dumpstats.c
src/session.c

index ad2fcca1aaa1aeab61ec6bd320ecd4dedf6c3590..142e845695554c08748da94b590118b87305d037 100644 (file)
@@ -173,6 +173,7 @@ struct listener {
        int (*accept)(struct listener *l, int fd, struct sockaddr_storage *addr); /* upper layer's accept() */
        struct task * (*handler)(struct task *t); /* protocol handler. It is a task */
        struct proxy *frontend;         /* the frontend this listener belongs to, or NULL */
+       enum obj_type *default_target;  /* default target to use for accepted sessions or NULL */
        struct list wait_queue;         /* link element to make the listener wait for something (LI_LIMITED)  */
        unsigned int analysers;         /* bitmap of required protocol analysers */
        int maxseg;                     /* for TCP, advertised MSS */
index 5fe3ffb1eb475f126d82d770208280285efd56e9..b17527d68d17a47dbfbb964b5900b892d5cfd775 100644 (file)
@@ -1887,6 +1887,7 @@ int cfg_parse_peers(const char *file, int linenum, char **args, int kwm)
                                        l->accept = session_accept;
                                        l->handler = process_session;
                                        l->analysers |=  ((struct proxy *)curpeers->peers_fe)->fe_req_ana;
+                                       l->default_target = ((struct proxy *)curpeers->peers_fe)->default_target;
                                        l->options |= LI_O_UNLIMITED; /* don't make the peers subject to global limits */
                                        global.maxsock += l->maxconn;
                                }
@@ -7710,6 +7711,7 @@ out_uri_auth_compat:
                        listener->accept = session_accept;
                        listener->handler = process_session;
                        listener->analysers |= curproxy->fe_req_ana;
+                       listener->default_target = curproxy->default_target;
 
                        if (!LIST_ISEMPTY(&curproxy->tcp_req.l4_rules))
                                listener->options |= LI_O_TCP_RULES;
index ba72d713b1ac9e39a3d4059d4d0aa83c5f892e91..c23e9888b0aabf1593eb6be63dc1decc6e96cf0c 100644 (file)
@@ -339,6 +339,7 @@ static int stats_parse_global(char **args, int section_type, struct proxy *curpx
                        l->backlog = global.stats_fe->backlog;
                        l->accept = session_accept;
                        l->handler = process_session;
+                       l->default_target = global.stats_fe->default_target;
                        l->options |= LI_O_UNLIMITED; /* don't make the peers subject to global limits */
                        l->nice = -64;  /* we want to boost priority for local stats */
                        global.maxsock += l->maxconn;
index 7a00b0d5a99b948e16067473d8d6d13b0e53c987..677d3a1a643851ebe8fda5c766e5962e88a90ca8 100644 (file)
@@ -481,7 +481,7 @@ int session_complete(struct session *s)
                s->si[1].flags |= SI_FL_INDEP_STR;
 
        session_init_srv_conn(s);
-       s->target = p->default_target; /* used by peers and CLI */
+       s->target = l->default_target; /* used by peers and CLI */
        s->pend_pos = NULL;
 
        /* init store persistence */