#include <haproxy/pool.h>
#include <haproxy/sample.h>
#include <haproxy/stream.h>
+#include <haproxy/stream_interface.h>
#include <haproxy/tools.h>
#include <haproxy/version.h>
*/
static int smp_fetch_base32_src(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
+ const struct sockaddr_storage *src = (smp->strm ? si_src(&smp->strm->si[0]) : NULL);
struct buffer *temp;
- struct connection *cli_conn = objt_conn(smp->sess->origin);
- if (!cli_conn || !conn_get_src(cli_conn))
+ if (!src)
return 0;
if (!smp_fetch_base32(args, smp, kw, private))
*(unsigned int *) temp->area = htonl(smp->data.u.sint);
temp->data += sizeof(unsigned int);
- switch (cli_conn->src->ss_family) {
+ switch (src->ss_family) {
case AF_INET:
memcpy(temp->area + temp->data,
- &((struct sockaddr_in *)cli_conn->src)->sin_addr,
+ &((struct sockaddr_in *)src)->sin_addr,
4);
temp->data += 4;
break;
case AF_INET6:
memcpy(temp->area + temp->data,
- &((struct sockaddr_in6 *)cli_conn->src)->sin6_addr,
+ &((struct sockaddr_in6 *)src)->sin6_addr,
16);
temp->data += 16;
break;
*/
static int smp_fetch_url32_src(const struct arg *args, struct sample *smp, const char *kw, void *private)
{
+ const struct sockaddr_storage *src = (smp->strm ? si_src(&smp->strm->si[0]) : NULL);
struct buffer *temp;
- struct connection *cli_conn = objt_conn(smp->sess->origin);
- if (!cli_conn || !conn_get_src(cli_conn))
+ if (!src)
return 0;
if (!smp_fetch_url32(args, smp, kw, private))
*(unsigned int *) temp->area = htonl(smp->data.u.sint);
temp->data += sizeof(unsigned int);
- switch (cli_conn->src->ss_family) {
+ switch (src->ss_family) {
case AF_INET:
memcpy(temp->area + temp->data,
- &((struct sockaddr_in *)cli_conn->src)->sin_addr,
+ &((struct sockaddr_in *)src)->sin_addr,
4);
temp->data += 4;
break;
case AF_INET6:
memcpy(temp->area + temp->data,
- &((struct sockaddr_in6 *)cli_conn->src)->sin6_addr,
+ &((struct sockaddr_in6 *)src)->sin6_addr,
16);
temp->data += 16;
break;