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.
This commit is contained in:
Thierry FOURNIER 2015-05-11 11:54:58 +02:00 committed by Willy Tarreau
parent bbfb6c4085
commit 6879ad31a5
3 changed files with 18 additions and 0 deletions
include/types
src

View File

@ -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 */

View File

@ -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, "");

View File

@ -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;