optionally truncated at the given length. <offset> and <length> can be numeric
values or variable names. The converter returns an empty sample if either
<offset> or <length> is invalid. Invalid <offset> means a negative value or a
- value >= length of the input sample. Invalid <length> means a negative value
- or, in some cases, a value bigger than the length of the input sample.
+ value >= length of the input sample. Invalid <length> means a negative value.
Example:
http-request set-var(txn.input) req.hdr(input) # let's say input is "012345"
http-response set-header bytes_6 "%[var(txn.input),bytes(6)]"
http-response set-header bytes_0_6 "%[var(txn.input),bytes(0,6)]"
http-response set-header bytes_0_7 "%[var(txn.input),bytes(0,7)]"
+ http-response set-header bytes_2_7 "%[var(txn.input),bytes(2,7)]"
http-response set-var(txn.var_start) int(0)
http-response set-header bytes_var0 "%[var(txn.input),bytes(txn.var_start)]"
http-response set-var(txn.var_length) int(7)
http-response set-header bytes_var0_var7 "%[var(txn.input),bytes(txn.var_start,txn.var_length)]"
+ http-response set-var(txn.var_start) int(2)
+ http-response set-var(txn.var_length) int(7)
+ http-response set-header bytes_var2_var7 "%[var(txn.input),bytes(txn.var_start,txn.var_length)]"
+
http-response set-var(txn.var_start) int(1)
http-response set-var(txn.var_length) int(3)
http-response set-header bytes_var1_3 "%[var(txn.input),bytes(txn.var_start,3)]"
# since specified length is > input length, response contains the input till the end
expect resp.http.bytes_0_7 == "012345"
+ expect resp.http.bytes_2_7 == "2345"
expect resp.http.bytes_var0 == "012345"
expect resp.http.bytes_var1_var3 == "123"
expect resp.http.bytes_var99 == ""
expect resp.http.bytes_var0_var7 == "012345"
+ expect resp.http.bytes_var2_var7 == "2345"
expect resp.http.bytes_var1_3 == "123"
expect resp.http.bytes_1_var3 == "123"
expect resp.http.bytes_varminus1 == ""
if (smp_arg1.data.u.sint > (smp->data.u.str.data - start_idx)) {
// arg1 value is greater than the remaining length
- if (smp->opt & SMP_OPT_FINAL) {
- // truncate to remaining length
- length = smp->data.u.str.data - start_idx;
- goto end;
- }
- goto wait;
+ if (!(smp->opt & SMP_OPT_FINAL))
+ goto wait;
+ // keep all remaining data
}
- length = smp_arg1.data.u.sint;
+ else
+ length = smp_arg1.data.u.sint;
}
// update the output using the start_idx and length