Commit 0a92f869 authored by Geoff Simmons's avatar Geoff Simmons

implement and test formatters for %q

parent daa6c31d
......@@ -335,25 +335,28 @@ format_O_backend(tx_t *tx, char *name, enum VSL_tag_e tag, char **s,
format_IO_backend(tx, 2, s, len);
}
#if 0
#define FORMAT_q(dir, xurl) \
static void \
format_q_##dir(logline_t *ll, char *name, enum VSL_tag_e tag, \
char **s, size_t *len) \
{ \
(void) name; \
(void) tag; \
char *qs = NULL; \
qs = memchr(TAG(ll,SLT_##xurl).data, '?', TAG(ll,SLT_##xurl).len); \
if (qs != NULL) { \
*s = qs + 1; \
*len = TAG(ll,SLT_##xurl).len - (qs - TAG(ll,SLT_##xurl).data - 1); \
} \
#define FORMAT_q(dir, xurl) \
void \
format_q_##dir(tx_t *tx, char *name, enum VSL_tag_e tag, \
char **s, size_t *len) \
{ \
char *qs = NULL; \
(void) name; \
(void) tag; \
\
logline_t *rec = get_tag(tx, SLT_##xurl); \
get_payload(rec); \
qs = memchr(VSB_data(payload), '?', rec->len); \
if (qs != NULL) { \
*s = qs + 1; \
*len = rec->len - (*s - VSB_data(payload)); \
} \
}
FORMAT_q(client, RxURL)
FORMAT_q(backend, TxURL)
FORMAT_q(client, ReqURL)
FORMAT_q(backend, BereqURL)
#if 0
#define FORMAT_r(dir, dx, hx) \
static void \
......
......@@ -74,3 +74,6 @@ formatter_f format_m_backend;
formatter_f format_O_client;
formatter_f format_O_backend;
formatter_f format_q_client;
formatter_f format_q_backend;
......@@ -587,6 +587,47 @@ static const char
return NULL;
}
static const char
*test_format_q(void)
{
tx_t tx;
logline_t rec;
chunk_t chunk;
char *str;
size_t len;
printf("... testing format_q_*()\n");
init_tx_rec_chunk(&tx, &rec, &chunk);
MAN(chunk.data);
#define URL_QUERY_PAYLOAD "/foo?bar=baz&quux=wilco"
set_record_data(&rec, &chunk, URL_QUERY_PAYLOAD, SLT_ReqURL);
format_q_client(&tx, NULL, SLT__Bogus, &str, &len);
MASSERT(strcmp(str, "bar=baz&quux=wilco") == 0);
MASSERT(len == 18);
rec.tag = SLT_BereqURL;
format_q_backend(&tx, NULL, SLT__Bogus, &str, &len);
MASSERT(strcmp(str, "bar=baz&quux=wilco") == 0);
MASSERT(len == 18);
#define URL_PAYLOAD "/foo"
set_record_data(&rec, &chunk, URL_PAYLOAD, SLT_ReqURL);
str = NULL;
len = 0;
format_q_client(&tx, NULL, SLT__Bogus, &str, &len);
MAZ(str);
MAZ(len);
rec.tag = SLT_BereqURL;
format_q_backend(&tx, NULL, SLT__Bogus, &str, &len);
MAZ(str);
MAZ(len);
return NULL;
}
static const char
*all_tests(void)
{
......@@ -604,6 +645,7 @@ static const char
mu_run_test(test_format_I);
mu_run_test(test_format_m);
mu_run_test(test_format_O);
mu_run_test(test_format_q);
return NULL;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment