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 daab2a1..4d932c6 100644
--- a/include/types/sample.h
+++ b/include/types/sample.h
@@ -243,6 +243,15 @@
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 37fce89..d0eb7f5 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -2770,6 +2770,9 @@
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 @@
}
/* 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 77192be..53c9d0d 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -1033,6 +1033,9 @@
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;