MEDIUM: sample: add the da-csv converter
This diff declares the deviceatlas module and can accept up to 5
property names for the API lookup.
[wt: this should probably be moved to its own file using the keyword
registration mechanism]
diff --git a/doc/configuration.txt b/doc/configuration.txt
index 9c78145..adfb26f 100644
--- a/doc/configuration.txt
+++ b/doc/configuration.txt
@@ -10728,6 +10728,20 @@
not be used for security purposes as a 32-bit hash is trivial to break. See
also "djb2", "sdbm", "wt6" and the "hash-type" directive.
+da-csv(<prop>[,<prop>*])
+ Asks the DeviceAtlas converter to identify the User Agent string passed on
+ input, and to emit a string made of the concatenation of the properties
+ enumerated in argument, delimited by the separator defined by the global
+ keyword "deviceatlas-property-separator", or by default the pipe character
+ ('|'). There's a limit of 5 different properties imposed by the haproxy
+ configuration language.
+
+ Example:
+ frontend www
+ bind *:8881
+ default_backend servers
+ http-request set-header X-DeviceAtlas-Data %[req.fhdr(User-Agent),da-csv(primaryHardwareType,osName,osVersion,browserName,browserVersion)]
+
div(<value>)
Divides the input value of type unsigned integer by <value>, and returns the
result as an unsigned integer. If <value> is null, the largest unsigned
diff --git a/src/sample.c b/src/sample.c
index 47d48c8..59fa158 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -32,6 +32,10 @@
#include <proto/sample.h>
#include <proto/stick_table.h>
+#ifdef USE_DEVICEATLAS
+#include <import/da.h>
+#endif
+
/* sample type names */
const char *smp_to_type[SMP_TYPES] = {
[SMP_T_BOOL] = "bool",
@@ -2278,6 +2282,9 @@
{ "div", sample_conv_arith_div, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
{ "mod", sample_conv_arith_mod, ARG1(1,UINT), NULL, SMP_T_UINT, SMP_T_UINT },
{ "neg", sample_conv_arith_neg, 0, NULL, SMP_T_UINT, SMP_T_UINT },
+#ifdef USE_DEVICEATLAS
+ { "da-csv", da_haproxy, ARG5(1,STR,STR,STR,STR,STR), NULL, SMP_T_STR, SMP_T_STR },
+#endif
{ NULL, NULL, 0, 0, 0 },
}};