From 2a2c33812fab8fe63cf8cca51ba314d37d82f0de Mon Sep 17 00:00:00 2001
From: Etienne Carriere <etienne.carriere@datadome.co>
Date: Wed, 13 Dec 2017 13:41:34 +0100
Subject: [PATCH] MINOR: sample: add len converter

Add len converter that returns the length of a string
---
 doc/configuration.txt |  5 +++++
 src/sample.c          | 10 ++++++++++
 2 files changed, 15 insertions(+)

diff --git a/doc/configuration.txt b/doc/configuration.txt
index 208c11e..a958712 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -12941,6 +12941,11 @@ language(<value>[,<default>])
     use_backend english if en
     default_backend choose_your_language
 
+len
+  Get the length of the string. This can only be placed after a string
+  sample fetch function or after a transformation keyword returning a string
+  type. The result is of type integer.
+
 lower
   Convert a string sample to lower case. This can only be placed after a string
   sample fetch function or after a transformation keyword returning a string
diff --git a/src/sample.c b/src/sample.c
index f9c1ff4..d9933a7 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -1568,6 +1568,15 @@ static int sample_conv_djb2(const struct arg *arg_p, struct sample *smp, void *p
 	return 1;
 }
 
+static int sample_conv_strlen(const struct arg *arg_p, struct sample *smp, void *private)
+{
+    int i = smp->data.u.str.len;
+    smp->data.u.sint = i;
+    smp->data.type = SMP_T_SINT;
+    return 1;
+}
+
+
 static int sample_conv_str2lower(const struct arg *arg_p, struct sample *smp, void *private)
 {
 	int i;
@@ -2787,6 +2796,7 @@ static struct sample_conv_kw_list sample_conv_kws = {ILH, {
 	{ "base64", sample_conv_bin2base64,0,            NULL, SMP_T_BIN,  SMP_T_STR  },
 	{ "upper",  sample_conv_str2upper, 0,            NULL, SMP_T_STR,  SMP_T_STR  },
 	{ "lower",  sample_conv_str2lower, 0,            NULL, SMP_T_STR,  SMP_T_STR  },
+	{ "len",    sample_conv_strlen,    0,            NULL, SMP_T_STR,  SMP_T_SINT },
 	{ "hex",    sample_conv_bin2hex,   0,            NULL, SMP_T_BIN,  SMP_T_STR  },
 	{ "hex2i",  sample_conv_hex2int,   0,            NULL, SMP_T_STR,  SMP_T_SINT },
 	{ "ipmask", sample_conv_ipmask,    ARG1(1,MSK4), NULL, SMP_T_IPV4, SMP_T_IPV4 },
-- 
2.7.4

