MEDIUM: sample: add the "map" converter
Add a new converter with the following prototype :
map(<map_file>[,<default_value>])
map_<match_type>(<map_file>[,<default_value>])
map_<match_type>_<output_type>(<map_file>[,<default_value>])
It searches the for input value from <map_file> using the <match_type>
matching method, and return the associated value converted to the type
<output_type>. If the input value cannot be found in the <map_file>,
the converter returns the <default_value>. If the <default_value> is
not set, the converter fails and acts as if no input value could be
fetched. If the <match_type> is not set, it defaults to "str".
Likewise, if the <output_type> is not set, it defaults to "str". For
convenience, the "map" keyword is an alias for "map_str" and maps a
string to another string. The following array contains contains the
list of all the map* converters.
+----+----------+---------+-------------+------------+
| `-_ out | | | |
| input `-_ | str | int | ip |
| / match `-_ | | | |
+---------------+---------+-------------+------------+
| str / str | map_str | map_str_int | map_str_ip |
| str / sub | map_sub | map_sub_int | map_sub_ip |
| str / dir | map_dir | map_dir_int | map_dir_ip |
| str / dom | map_dom | map_dom_int | map_dom_ip |
| str / end | map_end | map_end_int | map_end_ip |
| str / reg | map_reg | map_reg_int | map_reg_ip |
| int / int | map_int | map_int_int | map_int_ip |
| ip / ip | map_ip | map_ip_int | map_ip_ip |
+---------------+---------+-------------+------------+
The names are intentionally chosen to reflect the same match methods
as ACLs use.
diff --git a/include/types/map.h b/include/types/map.h
index 6988cbe..15a0ef8 100644
--- a/include/types/map.h
+++ b/include/types/map.h
@@ -56,11 +56,10 @@
struct map_descriptor {
struct list list; /* used for listing */
struct map_reference *ref; /* the reference used for unindexed entries */
- struct sample_conv *conv; /* original convertissor descriptor */
+ struct sample_conv *conv; /* original converter descriptor */
int (*parse)(const char *text, /* The function that can parse the output value */
struct sample_storage *smp);
- struct acl_expr acl; /* dummy acl expression. just for using the acl
- match primitive and storage system */
+ struct pattern_expr pat; /* the pattern matching associated to the map */
char *default_value; /* a copy of default value. This copy is
useful if the type is str */
struct sample_storage *def; /* contain the default value */