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;