]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: vars: use the vars types as argument in place of opaque type
authorThierry FOURNIER <tfournier@arpalert.org>
Thu, 30 Jul 2015 17:12:50 +0000 (19:12 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 20 Aug 2015 15:13:46 +0000 (17:13 +0200)
The (http|tcp)-(request|response) action rules use common
opaque type. For the HAProxy embbedded feature, types are know,
it better to add this types in the action union and use it.

include/types/action.h
src/vars.c

index 1cb4aa9148079841fb0e077aa1865c4fad4b05ce..dcb75d2cc5527f2f86c31521c94aff99b3e04fef 100644 (file)
@@ -57,6 +57,11 @@ struct act_rule {
                        struct list value;     /* pattern to retrieve MAP value */
                } map;
                struct hlua_rule *hlua_rule;
+               struct {
+                       struct sample_expr *expr;
+                       const char *name;
+                       enum vars_scope scope;
+               } vars;
                struct {
                        void *p[4];
                } act;                         /* generic pointers to be used by custom actions */
index 68f44bce5a9911a6d4e038c8cebb5cdc14714654..50fb36a05dfe28c22ff72dca70542abf9d1593c3 100644 (file)
@@ -502,32 +502,32 @@ static inline int action_store(struct sample_expr *expr, const char *name,
 static int action_tcp_req_store(struct act_rule *rule, struct proxy *px,
                                 struct session *sess, struct stream *s)
 {
-       return action_store(rule->arg.act.p[0], rule->arg.act.p[1],
-                           (long)rule->arg.act.p[2], px, s, SMP_OPT_DIR_REQ);
+       return action_store(rule->arg.vars.expr, rule->arg.vars.name,
+                           rule->arg.vars.scope, px, s, SMP_OPT_DIR_REQ);
 }
 
 /* Wrapper for action_store */
 static int action_tcp_res_store(struct act_rule *rule, struct proxy *px,
                                 struct session *sess, struct stream *s)
 {
-       return action_store(rule->arg.act.p[0], rule->arg.act.p[1],
-                           (long)rule->arg.act.p[2], px, s, SMP_OPT_DIR_RES);
+       return action_store(rule->arg.vars.expr, rule->arg.vars.name,
+                           rule->arg.vars.scope, px, s, SMP_OPT_DIR_RES);
 }
 
 /* Wrapper for action_store */
 static int action_http_req_store(struct act_rule *rule, struct proxy *px,
                                  struct session *sess, struct stream *s)
 {
-       return action_store(rule->arg.act.p[0], rule->arg.act.p[1],
-                           (long)rule->arg.act.p[2], px, s, SMP_OPT_DIR_REQ);
+       return action_store(rule->arg.vars.expr, rule->arg.vars.name,
+                           rule->arg.vars.scope, px, s, SMP_OPT_DIR_REQ);
 }
 
 /* Wrapper for action_store */
 static int action_http_res_store(struct act_rule *rule, struct proxy *px,
                                  struct session *sess, struct stream *s)
 {
-       return action_store(rule->arg.act.p[0], rule->arg.act.p[1],
-                           (long)rule->arg.act.p[2], px, s, SMP_OPT_DIR_RES);
+       return action_store(rule->arg.vars.expr, rule->arg.vars.name,
+                           rule->arg.vars.scope, px, s, SMP_OPT_DIR_RES);
 }
 
 /* This two function checks the variable name and replace the
@@ -560,7 +560,7 @@ static int conv_check_var(struct arg *args, struct sample_conv *conv,
  */
 static int parse_vars(const char **args, int *arg, struct proxy *px,
                       int flags, char **err, struct sample_expr **expr,
-                      char **name, enum vars_scope *scope)
+                      const char **name, enum vars_scope *scope)
 {
        const char *var_name = args[*arg-1];
        int var_len;
@@ -606,9 +606,9 @@ static int parse_tcp_req_store(const char **args, int *arg, struct proxy *px,
                                struct act_rule *rule, char **err)
 {
        if (!parse_vars(args, arg, px, SMP_VAL_FE_REQ_CNT, err,
-                   (struct sample_expr **)&rule->arg.act.p[0],
-                   (char **)&rule->arg.act.p[1],
-                   (enum vars_scope *)&rule->arg.act.p[2]))
+                   &rule->arg.vars.expr,
+                   &rule->arg.vars.name,
+                   &rule->arg.vars.scope))
                return 0;
        rule->action       = TCP_ACT_CUSTOM_CONT;
        rule->action_ptr   = action_tcp_req_store;
@@ -620,9 +620,9 @@ static int parse_tcp_res_store(const char **args, int *arg, struct proxy *px,
                          struct act_rule *rule, char **err)
 {
        if (!parse_vars(args, arg, px, SMP_VAL_BE_RES_CNT, err,
-                   (struct sample_expr **)&rule->arg.act.p[0],
-                   (char **)&rule->arg.act.p[1],
-                   (enum vars_scope *)&rule->arg.act.p[2]))
+                   &rule->arg.vars.expr,
+                   &rule->arg.vars.name,
+                   &rule->arg.vars.scope))
                return 0;
        rule->action       = TCP_ACT_CUSTOM_CONT;
        rule->action_ptr   = action_tcp_res_store;
@@ -634,9 +634,9 @@ static int parse_http_req_store(const char **args, int *arg, struct proxy *px,
                          struct act_rule *rule, char **err)
 {
        if (!parse_vars(args, arg, px, SMP_VAL_FE_HRQ_HDR, err,
-                   (struct sample_expr **)&rule->arg.act.p[0],
-                   (char **)&rule->arg.act.p[1],
-                   (enum vars_scope *)&rule->arg.act.p[2]))
+                   &rule->arg.vars.expr,
+                   &rule->arg.vars.name,
+                   &rule->arg.vars.scope))
                return -1;
        rule->action       = HTTP_REQ_ACT_CUSTOM_CONT;
        rule->action_ptr   = action_http_req_store;
@@ -648,9 +648,9 @@ static int parse_http_res_store(const char **args, int *arg, struct proxy *px,
                          struct act_rule *rule, char **err)
 {
        if (!parse_vars(args, arg, px, SMP_VAL_BE_HRS_HDR, err,
-                   (struct sample_expr **)&rule->arg.act.p[0],
-                   (char **)&rule->arg.act.p[1],
-                   (enum vars_scope *)&rule->arg.act.p[2]))
+                   &rule->arg.vars.expr,
+                   &rule->arg.vars.name,
+                   &rule->arg.vars.scope))
                return -1;
        rule->action       = HTTP_RES_ACT_CUSTOM_CONT;
        rule->action_ptr   = action_http_res_store;