struct sample sample;
struct pattern *pat;
int match_method;
- struct sample_storage *smp;
- struct sockaddr_storage addr;
- char s_addr[INET_ADDRSTRLEN];
- char s_mask[INET_ADDRSTRLEN];
- char s_addr6[INET6_ADDRSTRLEN];
- const char *keystr;
switch (appctx->st2) {
case STAT_ST_INIT:
else
chunk_appendf(&trash, ", src=conf");
- if (appctx->ctx.map.display_flags == PAT_REF_MAP)
- keystr = "key";
- else
- keystr = "pattern";
-
- switch (match_method) {
- case PAT_MATCH_STR:
- case PAT_MATCH_BEG:
- case PAT_MATCH_SUB:
- case PAT_MATCH_DIR:
- case PAT_MATCH_DOM:
- case PAT_MATCH_END:
- /* display string */
- chunk_appendf(&trash, ", %s=\"%s\"", keystr, pat->ptr.str);
- break;
-
- case PAT_MATCH_IP:
- /* display IPv4/v6 */
- if (pat->type == SMP_T_IPV4) {
- ((struct sockaddr_in *)&addr)->sin_family = AF_INET;
- memcpy(&((struct sockaddr_in *)&addr)->sin_addr, &pat->val.ipv4.addr,
- sizeof(pat->val.ipv4.addr));
- if (addr_to_str(&addr, s_addr, INET_ADDRSTRLEN)) {
- memcpy(&((struct sockaddr_in *)&addr)->sin_addr, &pat->val.ipv4.mask,
- sizeof(pat->val.ipv4.mask));
- if (addr_to_str(&addr, s_mask, INET_ADDRSTRLEN))
- chunk_appendf(&trash, ", %s=\"%s/%s\"", keystr, s_addr, s_mask);
- }
- }
- else if (pat->type == SMP_T_IPV6) {
- ((struct sockaddr_in6 *)&addr)->sin6_family = AF_INET6;
- memcpy(&((struct sockaddr_in6 *)&addr)->sin6_addr, &pat->val.ipv6.addr,
- sizeof(pat->val.ipv6.addr));
- if (addr_to_str(&addr, s_addr6, INET6_ADDRSTRLEN))
- chunk_appendf(&trash, ", %s=\"%s/%d\"", keystr, s_addr6, pat->val.ipv6.mask);
- }
- break;
-
- case PAT_MATCH_INT:
- /* display int */
- chunk_appendf(&trash, ", %s=\"", keystr);
- if (pat->val.range.min_set && pat->val.range.max_set &&
- pat->val.range.min == pat->val.range.max) {
- chunk_appendf(&trash, "%lld", pat->val.range.min);
- }
- else {
- if (pat->val.range.min_set)
- chunk_appendf(&trash, "is >= %lld", pat->val.range.min);
- if (pat->val.range.min_set && pat->val.range.max_set)
- chunk_appendf(&trash, " and ");
- if (pat->val.range.max_set)
- chunk_appendf(&trash, "is <= %lld", pat->val.range.max);
- }
- chunk_appendf(&trash, "\"");
- break;
-
- /* Dont display other types. */
- default:
- break;
- }
- }
-
- /* display return value */
- if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
- if (!pat || !pat->smp) {
- chunk_appendf(&trash, ", value=nothing");
+ /* display pattern */
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
+ if (pat->ref && pat->ref->pattern)
+ chunk_appendf(&trash, ", key=\"%s\"", pat->ref->pattern);
+ else
+ chunk_appendf(&trash, ", key=unknown");
}
else {
- smp = pat->smp;
- memcpy(&sample.data, &smp->data, sizeof(sample.data));
- sample.type = smp->type;
- if (sample_casts[sample.type][SMP_T_STR] &&
- sample_casts[sample.type][SMP_T_STR](&sample))
+ if (pat->ref && pat->ref->pattern)
+ chunk_appendf(&trash, ", pattern=\"%s\"", pat->ref->pattern);
+ else
+ chunk_appendf(&trash, ", pattern=unknown");
+ }
+
+ /* display return value */
+ if (appctx->ctx.map.display_flags == PAT_REF_MAP) {
+ if (pat->smp && pat->ref && pat->ref->sample)
chunk_appendf(&trash, ", value=\"%s\", type=\"%s\"",
- sample.data.str.str, smp_to_type[smp->type]);
+ pat->ref->sample, smp_to_type[pat->smp->type]);
else
- chunk_appendf(&trash, ", value=cannot-display, type=\"%s\"",
- smp_to_type[smp->type]);
+ chunk_appendf(&trash, ", value=none");
}
}