From: Thierry FOURNIER Date: Wed, 19 Aug 2015 07:07:47 +0000 (+0200) Subject: MINOR: actions: mutualise the action keyword lookup X-Git-Tag: v1.6-dev4~34 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=322a12486707eef68f7ca516a478365c012dd3cf;p=thirdparty%2Fhaproxy.git MINOR: actions: mutualise the action keyword lookup Each (http|tcp)-(request|response) action use the same method for looking up the action keyword during the cofiguration parsing. This patch mutualize the code. --- diff --git a/include/proto/action.h b/include/proto/action.h new file mode 100644 index 0000000000..5f71067e9d --- /dev/null +++ b/include/proto/action.h @@ -0,0 +1,47 @@ +/* + * include/proto/action.h + * This file contains actions prototypes. + * + * Copyright (C) 2000-2010 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 _PROTO_ACTION_H +#define _PROTO_ACTION_H + +#include + +static inline struct action_kw *action_lookup(struct list *keywords, const char *kw) +{ + struct action_kw_list *kw_list; + int i; + + if (LIST_ISEMPTY(keywords)) + return NULL; + + list_for_each_entry(kw_list, keywords, list) { + for (i = 0; kw_list->kw[i].kw != NULL; i++) { + if (kw_list->kw[i].match_pfx && + strncmp(kw, kw_list->kw[i].kw, strlen(kw_list->kw[i].kw)) == 0) + return &kw_list->kw[i]; + if (!strcmp(kw, kw_list->kw[i].kw)) + return &kw_list->kw[i]; + } + } + return NULL; +} + +#endif /* _PROTO_ACTION_H */ diff --git a/include/types/action.h b/include/types/action.h index 9fb087889d..b8b4cd4df9 100644 --- a/include/types/action.h +++ b/include/types/action.h @@ -1,6 +1,6 @@ /* * include/types/action.h - * This file contains TCP protocol definitions. + * This file contains actions definitions. * * Copyright (C) 2000-2010 Willy Tarreau - w@1wt.eu * diff --git a/src/proto_http.c b/src/proto_http.c index 69a1052d10..68158eb233 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -42,6 +42,7 @@ #include #include +#include #include #include #include @@ -12647,21 +12648,7 @@ int parse_http_res_capture(const char **args, int *orig_arg, struct proxy *px, s */ struct action_kw *action_http_req_custom(const char *kw) { - if (!LIST_ISEMPTY(&http_req_keywords.list)) { - struct action_kw_list *kw_list; - int i; - - list_for_each_entry(kw_list, &http_req_keywords.list, list) { - for (i = 0; kw_list->kw[i].kw != NULL; i++) { - if (kw_list->kw[i].match_pfx && - strncmp(kw, kw_list->kw[i].kw, strlen(kw_list->kw[i].kw)) == 0) - return &kw_list->kw[i]; - if (!strcmp(kw, kw_list->kw[i].kw)) - return &kw_list->kw[i]; - } - } - } - return NULL; + return action_lookup(&http_req_keywords.list, kw); } /* @@ -12669,21 +12656,7 @@ struct action_kw *action_http_req_custom(const char *kw) */ struct action_kw *action_http_res_custom(const char *kw) { - if (!LIST_ISEMPTY(&http_res_keywords.list)) { - struct action_kw_list *kw_list; - int i; - - list_for_each_entry(kw_list, &http_res_keywords.list, list) { - for (i = 0; kw_list->kw[i].kw != NULL; i++) { - if (kw_list->kw[i].match_pfx && - strncmp(kw, kw_list->kw[i].kw, strlen(kw_list->kw[i].kw)) == 0) - return &kw_list->kw[i]; - if (!strcmp(kw, kw_list->kw[i].kw)) - return &kw_list->kw[i]; - } - } - } - return NULL; + return action_lookup(&http_res_keywords.list, kw); } /************************************************************************/ diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 8dd95fd2d7..87aeaf0647 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -40,6 +40,7 @@ #include #include +#include #include #include #include @@ -137,62 +138,17 @@ void tcp_res_cont_keywords_register(struct action_kw_list *kw_list) */ static struct action_kw *tcp_req_conn_action(const char *kw) { - struct action_kw_list *kw_list; - int i; - - if (LIST_ISEMPTY(&tcp_req_conn_keywords)) - return NULL; - - list_for_each_entry(kw_list, &tcp_req_conn_keywords, list) { - for (i = 0; kw_list->kw[i].kw != NULL; i++) { - if (kw_list->kw[i].match_pfx && - strncmp(kw, kw_list->kw[i].kw, strlen(kw_list->kw[i].kw)) == 0) - return &kw_list->kw[i]; - if (!strcmp(kw, kw_list->kw[i].kw)) - return &kw_list->kw[i]; - } - } - return NULL; + return action_lookup(&tcp_req_conn_keywords, kw); } static struct action_kw *tcp_req_cont_action(const char *kw) { - struct action_kw_list *kw_list; - int i; - - if (LIST_ISEMPTY(&tcp_req_cont_keywords)) - return NULL; - - list_for_each_entry(kw_list, &tcp_req_cont_keywords, list) { - for (i = 0; kw_list->kw[i].kw != NULL; i++) { - if (kw_list->kw[i].match_pfx && - strncmp(kw, kw_list->kw[i].kw, strlen(kw_list->kw[i].kw)) == 0) - return &kw_list->kw[i]; - if (!strcmp(kw, kw_list->kw[i].kw)) - return &kw_list->kw[i]; - } - } - return NULL; + return action_lookup(&tcp_req_cont_keywords, kw); } static struct action_kw *tcp_res_cont_action(const char *kw) { - struct action_kw_list *kw_list; - int i; - - if (LIST_ISEMPTY(&tcp_res_cont_keywords)) - return NULL; - - list_for_each_entry(kw_list, &tcp_res_cont_keywords, list) { - for (i = 0; kw_list->kw[i].kw != NULL; i++) { - if (kw_list->kw[i].match_pfx && - strncmp(kw, kw_list->kw[i].kw, strlen(kw_list->kw[i].kw)) == 0) - return &kw_list->kw[i]; - if (!strcmp(kw, kw_list->kw[i].kw)) - return &kw_list->kw[i]; - } - } - return NULL; + return action_lookup(&tcp_res_cont_keywords, kw); } /* Binds ipv4/ipv6 address to socket , unless is set, in which