mirror of
https://github.com/haproxy/haproxy.git
synced 2026-05-21 01:15:17 -04:00
Some use cases benefit from reversing a string before passing it to other converters or lookups. While reverse_dom addresses domain-specific label reversal, a generic byte-wise string reversal remains useful on its own and can also be combined with other converters such as concat(). A common lookup use case is turning a suffix match on the original string into a prefix match on the reversed string. Prefix string matches use the prefix-tree index (PAT_MATCH_BEG with pat_idx_tree_pfx), while end matches use the string-list index (PAT_MATCH_END with pat_idx_list_str), so reversing before map_beg can avoid linear suffix scans for large maps. This patch adds a new string converter named "reverse". It reverses the input string byte by byte and returns the resulting string unchanged otherwise. It does not apply any domain-specific semantics or character-encoding semantics. The documentation is updated and a reg-test is added to cover the basic conversion as well as a simple composition with concat(.).
41 lines
978 B
Text
41 lines
978 B
Text
varnishtest "reverse converter test"
|
|
|
|
feature ignore_unknown_macro
|
|
|
|
server s1 {
|
|
rxreq
|
|
txresp -hdr "Connection: close"
|
|
} -repeat 4 -start
|
|
|
|
haproxy h1 -conf {
|
|
global
|
|
.if feature(THREAD)
|
|
thread-groups 1
|
|
.endif
|
|
|
|
defaults
|
|
mode http
|
|
timeout connect "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
|
|
frontend fe
|
|
bind "fd@${fe}"
|
|
|
|
http-request return status 200 hdr X-Reverse "%[str(example.com),reverse]" hdr X-Reverse2 "%[str(ab cd),reverse]" hdr X-Reverse3 "%[str(example.com),reverse,concat(.)]" hdr X-Reverse4 "%[str(),reverse]"
|
|
|
|
default_backend be
|
|
|
|
backend be
|
|
server s1 ${s1_addr}:${s1_port}
|
|
} -start
|
|
|
|
client c1 -connect ${h1_fe_sock} {
|
|
txreq -url "/"
|
|
rxresp
|
|
expect resp.status == 200
|
|
expect resp.http.x-reverse == "moc.elpmaxe"
|
|
expect resp.http.x-reverse2 == "dc ba"
|
|
expect resp.http.x-reverse3 == "moc.elpmaxe."
|
|
expect resp.http.x-reverse4 == "<undef>"
|
|
} -run
|