mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-11 03:31:36 +00:00
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:
parent
bbfb6c4085
commit
6879ad31a5
@ -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 */
|
||||
|
@ -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, "");
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user