MINOR: samples: add a function to fetch and convert any sample to a string

Any sample type can now easily be converted to a string that can be used
anywhere. This will be used for logging and passing information in headers.
This commit is contained in:
Willy Tarreau 2012-12-21 00:02:32 +01:00
parent d167e6d9fb
commit e7ad4bb2f0
2 changed files with 27 additions and 0 deletions

View File

@ -34,6 +34,8 @@ struct sample_expr *sample_parse_expr(char **str, int *idx, char *err, int err_s
struct sample *sample_process(struct proxy *px, struct session *l4, struct sample *sample_process(struct proxy *px, struct session *l4,
void *l7, unsigned int dir, struct sample_expr *expr, void *l7, unsigned int dir, struct sample_expr *expr,
struct sample *p); struct sample *p);
struct sample *sample_fetch_string(struct proxy *px, struct session *l4, void *l7,
unsigned int opt, struct sample_expr *expr);
void sample_register_fetches(struct sample_fetch_kw_list *psl); void sample_register_fetches(struct sample_fetch_kw_list *psl);
void sample_register_convs(struct sample_conv_kw_list *psl); void sample_register_convs(struct sample_conv_kw_list *psl);
struct chunk *sample_get_trash_chunk(void); struct chunk *sample_get_trash_chunk(void);

View File

@ -539,6 +539,31 @@ struct sample *sample_process(struct proxy *px, struct session *l4, void *l7,
return p; return p;
} }
/*
* Process a fetch + format conversion as defined by the sample expression <expr>
* on request or response considering the <opt> parameter. The output is always of
* type string. Returns either NULL if no sample could be extracted, or a pointer
* to the converted result stored in static temp_smp in format string.
*/
struct sample *sample_fetch_string(struct proxy *px, struct session *l4, void *l7,
unsigned int opt, struct sample_expr *expr)
{
struct sample *smp;
smp = sample_process(px, l4, l7, opt, expr, NULL);
if (!smp)
return NULL;
if (!sample_casts[smp->type][SMP_T_CSTR])
return NULL;
if (!sample_casts[smp->type][SMP_T_CSTR](smp))
return NULL;
smp->type = SMP_T_CSTR;
return smp;
}
/*****************************************************************/ /*****************************************************************/
/* Sample format convert functions */ /* Sample format convert functions */
/* These functions set the data type on return. */ /* These functions set the data type on return. */