From: Thierry FOURNIER Date: Mon, 11 May 2015 09:54:58 +0000 (+0200) Subject: MEDIUM: sample: fill the struct sample with the session, proxy and stream pointers X-Git-Tag: v1.6-dev2~130 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6879ad3;p=thirdparty%2Fhaproxy.git MEDIUM: sample: fill the struct sample with the session, proxy and stream pointers Some sample analyzer (sample-fetch or converters) needs to known the proxy, session and stream attached to the sampel. The sample-fetches and the converters function pointers cannot be called without these 3 pointers filled. This patch permits to reduce the sample-fetch and the converters called prototypes, and provides a new mean to add information for this type of functions. --- diff --git a/include/types/sample.h b/include/types/sample.h index daab2a1413..4d932c63d9 100644 --- a/include/types/sample.h +++ b/include/types/sample.h @@ -243,6 +243,15 @@ struct sample { struct meth meth; /* used for http method */ } data; /* sample data */ union smp_ctx ctx; + + /* Some sample analyzer (sample-fetch or converters) needs to + * known the attached proxy, session and stream. The sample-fetches + * and the converters function pointers cannot be called without + * these 3 pointers filled. + */ + struct proxy *px; + struct session *sess; + struct stream *strm; }; /* Used to store sample constant */ diff --git a/src/hlua.c b/src/hlua.c index 37fce89edf..d0eb7f50b9 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -2770,6 +2770,9 @@ __LJMP static int hlua_run_sample_fetch(lua_State *L) memset(&smp, 0, sizeof(smp)); /* Run the sample fetch process. */ + smp.px = hsmp->p; + smp.sess = hsmp->s->sess; + smp.strm = hsmp->s; if (!f->process(hsmp->p, hsmp->s->sess, hsmp->s, 0, args, &smp, f->kw, f->private)) { if (hsmp->stringsafe) lua_pushstring(L, ""); @@ -2888,6 +2891,9 @@ __LJMP static int hlua_run_sample_conv(lua_State *L) } /* Run the sample conversion process. */ + smp.px = hsmp->p; + smp.sess = hsmp->s->sess; + smp.strm = hsmp->s; if (!conv->process(hsmp->s, args, &smp, conv->private)) { if (hsmp->stringsafe) lua_pushstring(L, ""); diff --git a/src/sample.c b/src/sample.c index 77192be1de..53c9d0d3c1 100644 --- a/src/sample.c +++ b/src/sample.c @@ -1033,6 +1033,9 @@ struct sample *sample_process(struct proxy *px, struct session *sess, memset(p, 0, sizeof(*p)); } + p->px = px; + p->sess = sess; + p->strm = strm; if (!expr->fetch->process(px, sess, strm, opt, expr->arg_p, p, expr->fetch->kw, expr->fetch->private)) return NULL;