From: Thierry FOURNIER Date: Fri, 22 Nov 2013 16:40:18 +0000 (+0100) Subject: MINOR: map: Define map types X-Git-Tag: v1.5-dev20~179 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b5e422759920bcee2b4266f8a425560e4dbbdac;p=thirdparty%2Fhaproxy.git MINOR: map: Define map types Define the types used with maps, and add new argument type that can reference the map. This pointer contains the map configuration entries. --- diff --git a/include/types/arg.h b/include/types/arg.h index 9e42840443..b42a0a7f18 100644 --- a/include/types/arg.h +++ b/include/types/arg.h @@ -44,7 +44,7 @@ enum { ARGT_TAB, /* a pointer to a stick table */ ARGT_SRV, /* a pointer to a server */ ARGT_USR, /* a pointer to a user list */ - ARGT_UNASSIGNED15, /* will probably be used for variables later */ + ARGT_MAP, /* a pointer to a map descriptor */ ARGT_NBTYPES /* no more values past 15 */ }; @@ -73,6 +73,7 @@ union arg_data { struct proxy *prx; /* used for fe, be, tables */ struct server *srv; struct userlist *usr; + struct map_descriptor *map; }; struct arg { diff --git a/include/types/map.h b/include/types/map.h new file mode 100644 index 0000000000..6988cbe6ec --- /dev/null +++ b/include/types/map.h @@ -0,0 +1,69 @@ +/* + * include/types/map.h + * This file provides structures and types for MAPs. + * + * Copyright (C) 2000-2012 Willy Tarreau - w@1wt.eu + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1 + * exclusively. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _TYPES_MAP_H +#define _TYPES_MAP_H + +#include + +/* These structs contains a string representation of the map. These struct is + * sorted by file. Permit to hot-add and hot-remove entries. + * + * "maps" is the list head. This list cotains all the mao file name identifier. + */ +struct list maps = LIST_HEAD_INIT(maps); /* list of struct map_reference */ + +struct map_reference { + struct list list; /* used for listing */ + char *reference; /* contain the unique identifier used as map identifier. + in many cases this identifier is the filename that contain + the patterns */ + struct list entries; /* the list of all the entries of the map. This + is a list of "struct map_entry" */ + struct list maps; /* the list of all maps associated with the file + name identifier. This is a list of struct map_descriptor */ +}; + +struct map_entry { + struct list list; /* used for listing */ + int line; /* The original line into the file. It is used for log reference. + If the line is '> 0', this entry is from the original load, + If the line is '< 0', this entry is modify by dynamux process (CLI) */ + char *key; /* The string containing the key before conversion + and indexation */ + char *value; /* The string containing the value */ +}; + +struct sample_storage; +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 */ + 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 */ + 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 */ +}; + +#endif /* _TYPES_MAP_H */