From: Emeric Brun Date: Fri, 18 May 2012 14:32:13 +0000 (+0200) Subject: MINOR: stream_interface: add a pointer to the listener for TARG_TYPE_CLIENT X-Git-Tag: v1.5-dev12~170 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=21adb02d194a4190883133f8a7e3bac7d7812e0a;p=thirdparty%2Fhaproxy.git MINOR: stream_interface: add a pointer to the listener for TARG_TYPE_CLIENT When the target is a client, it will be convenient to have a pointer to the original listener so that we can retrieve some configuration information at the stream interface level. --- diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h index efdb1c48b1..7f1cb9e97d 100644 --- a/include/proto/stream_interface.h +++ b/include/proto/stream_interface.h @@ -63,10 +63,10 @@ static inline void clear_target(struct target *dest) dest->ptr.v = NULL; } -static inline void set_target_client(struct target *dest) +static inline void set_target_client(struct target *dest, struct listener *l) { dest->type = TARG_TYPE_CLIENT; - dest->ptr.v = NULL; + dest->ptr.l = l; } static inline void set_target_server(struct target *dest, struct server *s) @@ -111,6 +111,13 @@ static inline struct server *target_srv(struct target *t) return t->ptr.s; } +static inline struct listener *target_client(struct target *t) +{ + if (!t || t->type != TARG_TYPE_CLIENT) + return NULL; + return t->ptr.l; +} + static inline void stream_interface_prepare(struct stream_interface *si, const struct sock_ops *ops) { si->conn.data = ops; diff --git a/include/types/stream_interface.h b/include/types/stream_interface.h index 8e9e64b118..8218eda94b 100644 --- a/include/types/stream_interface.h +++ b/include/types/stream_interface.h @@ -122,6 +122,7 @@ struct target { struct server *s; /* when type is TARG_TYPE_SERVER */ struct si_applet *a; /* when type is TARG_TYPE_APPLET */ struct task *t; /* when type is TARG_TYPE_TASK */ + struct listener *l; /* when type is TARG_TYPE_CLIENT */ } ptr; }; diff --git a/src/peers.c b/src/peers.c index c615b3be0f..0ab2e5221a 100644 --- a/src/peers.c +++ b/src/peers.c @@ -1157,7 +1157,7 @@ static struct session *peer_session_create(struct peer *peer, struct peer_sessio s->si[0].conn.ctrl = NULL; s->si[0].release = NULL; s->si[0].send_proxy_ofs = 0; - set_target_client(&s->si[0].target); + set_target_client(&s->si[0].target, l); s->si[0].exp = TICK_ETERNITY; s->si[0].flags = SI_FL_NONE; if (s->fe->options2 & PR_O2_INDEPSTR) diff --git a/src/session.c b/src/session.c index 7bc2248d1b..fcd113e437 100644 --- a/src/session.c +++ b/src/session.c @@ -169,7 +169,7 @@ int session_accept(struct listener *l, int cfd, struct sockaddr_storage *addr) s->si[0].conn.ctrl = l->proto; s->si[0].release = NULL; s->si[0].send_proxy_ofs = 0; - set_target_client(&s->si[0].target); + set_target_client(&s->si[0].target, l); s->si[0].exp = TICK_ETERNITY; s->si[0].flags = SI_FL_NONE;