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.
This commit is contained in:
Thierry FOURNIER 2013-11-22 17:40:18 +01:00 committed by Willy Tarreau
parent fdbf4842b6
commit 4b5e422759
2 changed files with 71 additions and 1 deletions

View File

@ -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 {

69
include/types/map.h Normal file
View File

@ -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 <types/acl.h>
/* 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 */