[master] a963289 Shave a layer of indirection of the points for session attributes
Poul-Henning Kamp
phk at FreeBSD.org
Fri Feb 12 11:33:13 CET 2016
commit a9632894a87bedb7b5fff051d9ca23dfb26b8c0f
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu Feb 11 11:02:38 2016 +0000
Shave a layer of indirection of the points for session attributes
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index f8722e6..cffc68d 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -967,11 +967,13 @@ void SES_RxReInit(struct http_conn *htc);
enum htc_status_e SES_RxStuff(struct http_conn *, htc_complete_f *,
double *t1, double *t2, double ti, double tn);
-#define SESS_ATTR(UP, low, typ, len) \
- int SES_Get_##low(const struct sess *sp, typ *dst); \
- void SES_Reserve_##low(struct sess *sp, typ *dst);
+#define SESS_ATTR(UP, low, typ, len) \
+ int SES_Set_##low(const struct sess *sp, const typ *src); \
+ int SES_Get_##low(const struct sess *sp, typ **dst); \
+ void SES_Reserve_##low(struct sess *sp, typ **dst);
#include "tbl/sess_attr.h"
#undef SESS_ATTR
+
void SES_Set_String_Attr(struct sess *sp, enum sess_attr a, const char *src);
const char *SES_Get_String_Attr(const struct sess *sp, enum sess_attr a);
diff --git a/bin/varnishd/cache/cache_panic.c b/bin/varnishd/cache/cache_panic.c
index 2363b25..5f960b4 100644
--- a/bin/varnishd/cache/cache_panic.c
+++ b/bin/varnishd/cache/cache_panic.c
@@ -443,8 +443,8 @@ static void
pan_sess(struct vsb *vsb, const struct sess *sp)
{
const char *stp;
- char *ci;
- char *cp;
+ const char *ci;
+ const char *cp;
VSB_printf(vsb, "sp = %p {\n", sp);
if (pan_already(vsb, sp))
@@ -452,8 +452,8 @@ pan_sess(struct vsb *vsb, const struct sess *sp)
VSB_indent(vsb, 2);
VSB_printf(vsb, "fd = %d, vxid = %u\n",
sp->fd, VXID(sp->vxid));
- AZ(SES_Get_client_ip(sp, &ci));
- AZ(SES_Get_client_port(sp, &cp));
+ ci = SES_Get_String_Attr(sp, SA_CLIENT_IP);
+ cp = SES_Get_String_Attr(sp, SA_CLIENT_PORT);
VSB_printf(vsb, "client = %s %s,\n", ci, cp);
switch (sp->sess_step) {
#define SESS_STEP(l, u) case S_STP_##u: stp = "S_STP_" #u; break;
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index 92404b9..a0c0efd 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -643,7 +643,7 @@ cnt_recv(struct worker *wrk, struct req *req)
unsigned recv_handling;
struct SHA256Context sha256ctx;
const char *xff;
- char *ci, *cp;
+ const char *ci, *cp;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
@@ -655,8 +655,8 @@ cnt_recv(struct worker *wrk, struct req *req)
AZ(isnan(req->t_prev));
AZ(isnan(req->t_req));
- AZ(SES_Get_client_ip(req->sp, &ci));
- AZ(SES_Get_client_port(req->sp, &cp));
+ ci = SES_Get_String_Attr(req->sp, SA_CLIENT_IP);
+ cp = SES_Get_String_Attr(req->sp, SA_CLIENT_PORT);
VSLb(req->vsl, SLT_ReqStart, "%s %s", ci, cp);
http_VSL_log(req->http);
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index 92ddc07..7999e06 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -66,6 +66,23 @@ ses_get_attr(const struct sess *sp, enum sess_attr a, void **dst)
}
}
+static int
+ses_set_attr(const struct sess *sp, enum sess_attr a, const void *src, int sz)
+{
+ void *dst;
+ CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+ assert(a < SA_LAST);
+ AN(src);
+ assert(sz > 0);
+
+ if (sp->sattr[a] == 0xffff)
+ return (-1);
+ dst = sp->ws->s + sp->sattr[a];
+ AN(dst);
+ memcpy(dst, src, sz);
+ return (0);
+}
+
static void
ses_reserve_attr(struct sess *sp, enum sess_attr a, void **dst, int sz)
{
@@ -86,16 +103,22 @@ ses_reserve_attr(struct sess *sp, enum sess_attr a, void **dst, int sz)
#define SESS_ATTR(UP, low, typ, len) \
int \
- SES_Get_##low(const struct sess *sp, typ *dst) \
+ SES_Set_##low(const struct sess *sp, const typ *src) \
+ { \
+ return (ses_set_attr(sp, SA_##UP, src, len)); \
+ } \
+ \
+ int \
+ SES_Get_##low(const struct sess *sp, typ **dst) \
{ \
return (ses_get_attr(sp, SA_##UP, (void**)dst)); \
} \
\
void \
- SES_Reserve_##low(struct sess *sp, typ *dst) \
+ SES_Reserve_##low(struct sess *sp, typ **dst) \
{ \
assert(len >= 0); \
- ses_reserve_attr(sp, SA_##UP, (void*)dst, len); \
+ ses_reserve_attr(sp, SA_##UP, (void**)dst, len); \
}
#include "tbl/sess_attr.h"
diff --git a/include/tbl/sess_attr.h b/include/tbl/sess_attr.h
index 69b5890..7355b28 100644
--- a/include/tbl/sess_attr.h
+++ b/include/tbl/sess_attr.h
@@ -32,14 +32,14 @@
/*lint -save -e525 -e539 */
-// upper lower type len
-SESS_ATTR(REMOTE_ADDR, remote_addr, struct suckaddr *, vsa_suckaddr_len)
-SESS_ATTR(LOCAL_ADDR, local_addr, struct suckaddr *, vsa_suckaddr_len)
-SESS_ATTR(CLIENT_ADDR, client_addr, struct suckaddr *, vsa_suckaddr_len)
-SESS_ATTR(SERVER_ADDR, server_addr, struct suckaddr *, vsa_suckaddr_len)
-SESS_ATTR(CLIENT_IP, client_ip, char *, -1)
-SESS_ATTR(CLIENT_PORT, client_port, char *, -1)
-SESS_ATTR(XPORT_PRIV1, xport_priv1, void *, -1)
-SESS_ATTR(XPORT_PRIV2, xport_priv2, uintptr_t, -1)
+// upper lower type len
+SESS_ATTR(REMOTE_ADDR, remote_addr, struct suckaddr, vsa_suckaddr_len)
+SESS_ATTR(LOCAL_ADDR, local_addr, struct suckaddr, vsa_suckaddr_len)
+SESS_ATTR(CLIENT_ADDR, client_addr, struct suckaddr, vsa_suckaddr_len)
+SESS_ATTR(SERVER_ADDR, server_addr, struct suckaddr, vsa_suckaddr_len)
+SESS_ATTR(CLIENT_IP, client_ip, char, -1)
+SESS_ATTR(CLIENT_PORT, client_port, char, -1)
+SESS_ATTR(XPORT_PRIV1, xport_priv1, void *, sizeof(void*))
+SESS_ATTR(XPORT_PRIV2, xport_priv2, uintptr_t, sizeof(uintptr_t))
/*lint -restore */
More information about the varnish-commit
mailing list