mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-10 00:57:02 +02:00
MINOR: compression: acl "res.comp" and fetch "res.comp_algo"
Implements the "res.comp" ACL which is a boolean returning 1 when a response has been compressed by HAProxy or 0 otherwise. Implements the "res.comp_algo" fetch which contains the name of the algorithm HAProxy used to compress the response.
This commit is contained in:
parent
913195715d
commit
727db8b4ea
@ -9994,6 +9994,13 @@ The list of currently supported pattern fetch functions is the following :
|
|||||||
|
|
||||||
req_ver This is an alias for "req.ver".
|
req_ver This is an alias for "req.ver".
|
||||||
|
|
||||||
|
res.comp Returns the boolean "true" value if the response has been
|
||||||
|
compressed by HAProxy, otherwise returns boolean "false".
|
||||||
|
|
||||||
|
res.comp_algo
|
||||||
|
Returns a string containing the name of the algorithm used if
|
||||||
|
the response was compressed by HAProxy.
|
||||||
|
|
||||||
res.cook([<name>])
|
res.cook([<name>])
|
||||||
This extracts the last occurrence of the cookie name <name> on a
|
This extracts the last occurrence of the cookie name <name> on a
|
||||||
"Set-Cookie" header line from the response, and returns its
|
"Set-Cookie" header line from the response, and returns its
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include <types/global.h>
|
#include <types/global.h>
|
||||||
#include <types/compression.h>
|
#include <types/compression.h>
|
||||||
|
|
||||||
|
#include <proto/acl.h>
|
||||||
#include <proto/compression.h>
|
#include <proto/compression.h>
|
||||||
#include <proto/freq_ctr.h>
|
#include <proto/freq_ctr.h>
|
||||||
#include <proto/proto_http.h>
|
#include <proto/proto_http.h>
|
||||||
@ -609,3 +610,45 @@ int deflate_end(struct comp_ctx **comp_ctx)
|
|||||||
|
|
||||||
#endif /* USE_ZLIB */
|
#endif /* USE_ZLIB */
|
||||||
|
|
||||||
|
/* boolean, returns true if compression is used (either gzip or deflate) in the response */
|
||||||
|
static int
|
||||||
|
smp_fetch_res_comp(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
|
||||||
|
const struct arg *args, struct sample *smp)
|
||||||
|
{
|
||||||
|
smp->type = SMP_T_BOOL;
|
||||||
|
smp->data.uint = (l4->comp_algo != NULL);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* string, returns algo */
|
||||||
|
static int
|
||||||
|
smp_fetch_res_comp_algo(struct proxy *px, struct session *l4, void *l7, unsigned int opt,
|
||||||
|
const struct arg *args, struct sample *smp)
|
||||||
|
{
|
||||||
|
if (!l4->comp_algo)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
smp->type = SMP_T_STR;
|
||||||
|
smp->data.str.str = l4->comp_algo->name;
|
||||||
|
smp->data.str.len = l4->comp_algo->name_len;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Note: must not be declared <const> as its list will be overwritten */
|
||||||
|
static struct acl_kw_list acl_kws = {{ },{
|
||||||
|
{ "res.comp", NULL, acl_parse_nothing, acl_match_nothing },
|
||||||
|
}};
|
||||||
|
|
||||||
|
/* Note: must not be declared <const> as its list will be overwritten */
|
||||||
|
static struct sample_fetch_kw_list sample_fetch_keywords = {{ },{
|
||||||
|
{ "res.comp", smp_fetch_res_comp, 0, NULL, SMP_T_BOOL, SMP_USE_HRSHP },
|
||||||
|
{ "res.comp_algo", smp_fetch_res_comp_algo, 0, NULL, SMP_T_STR, SMP_USE_HRSHP },
|
||||||
|
{ /* END */ },
|
||||||
|
}};
|
||||||
|
|
||||||
|
__attribute__((constructor))
|
||||||
|
static void __comp_fetch_init(void)
|
||||||
|
{
|
||||||
|
acl_register_keywords(&acl_kws);
|
||||||
|
sample_register_fetches(&sample_fetch_keywords);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user