cfgutils: exported route check functions to kemi
authorDaniel-Constantin Mierla <miconda@gmail.com>
Thu, 20 Aug 2020 13:57:57 +0000 (15:57 +0200)
committerDaniel-Constantin Mierla <miconda@gmail.com>
Wed, 26 Aug 2020 20:59:03 +0000 (22:59 +0200)
(cherry picked from commit ecba550f5d35435adfa9c692cec8cee6cae8a77b)

src/modules/cfgutils/cfgutils.c

index 7be7181..9a77b40 100644 (file)
@@ -790,28 +790,23 @@ static int w_cfg_trylock(struct sip_msg *msg, char *key, char *s2)
 
 /*! Check if a route block exists - only request routes
  */
 
 /*! Check if a route block exists - only request routes
  */
-static int w_check_route_exists(struct sip_msg *msg, char *route)
+static int ki_check_route_exists(sip_msg_t *msg, str *route)
 {
 {
-       str s;
-
-       if (fixup_get_svalue(msg, (gparam_p) route, &s) != 0)
-       {
-                       LM_ERR("invalid route parameter\n");
-                       return -1;
+       if(route == NULL || route->s == NULL) {
+               return -1;
        }
        }
-       if (route_lookup(&main_rt, s.s)<0) {
+
+       if (route_lookup(&main_rt, route->s)<0) {
                /* not found */
                return -1;
        }
        return 1;
 }
 
                /* not found */
                return -1;
        }
        return 1;
 }
 
-/*! Run a request route block if it exists
+/*! Check if a route block exists - only request routes
  */
  */
-static int w_route_exists(struct sip_msg *msg, char *route)
+static int w_check_route_exists(struct sip_msg *msg, char *route)
 {
 {
-       struct run_act_ctx ctx;
-       int newroute, ret;
        str s;
 
        if (fixup_get_svalue(msg, (gparam_p) route, &s) != 0) {
        str s;
 
        if (fixup_get_svalue(msg, (gparam_p) route, &s) != 0) {
@@ -819,18 +814,49 @@ static int w_route_exists(struct sip_msg *msg, char *route)
                        return -1;
        }
 
                        return -1;
        }
 
-       newroute = route_lookup(&main_rt, s.s);
+       return ki_check_route_exists(msg, &s);
+}
+
+/*! Run a request route block if it exists
+ */
+static int ki_route_if_exists(sip_msg_t *msg, str *route)
+{
+       struct run_act_ctx ctx;
+       int newroute, ret;
+
+       if(route == NULL || route->s == NULL) {
+               return -1;
+       }
+
+       newroute = route_lookup(&main_rt, route->s);
        if (newroute<0) {
                return -1;
        }
        if (newroute<0) {
                return -1;
        }
+
        init_run_actions_ctx(&ctx);
        ret=run_actions(&ctx, main_rt.rlist[newroute], msg);
        if (ctx.run_flags & EXIT_R_F) {
                return 0;
        }
        init_run_actions_ctx(&ctx);
        ret=run_actions(&ctx, main_rt.rlist[newroute], msg);
        if (ctx.run_flags & EXIT_R_F) {
                return 0;
        }
+
        return ret;
 }
 
        return ret;
 }
 
+
+/*! Run a request route block if it exists
+ */
+static int w_route_exists(struct sip_msg *msg, char *route)
+{
+       str s;
+
+       if (fixup_get_svalue(msg, (gparam_p) route, &s) != 0) {
+                       LM_ERR("invalid route parameter\n");
+                       return -1;
+       }
+
+       return ki_route_if_exists(msg, &s);
+}
+
 static int mod_init(void)
 {
        /* Register RPC commands */
 static int mod_init(void)
 {
        /* Register RPC commands */
@@ -1078,6 +1104,16 @@ static sr_kemi_t sr_kemi_cfgutils_exports[] = {
                { SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
                        SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
        },
                { SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
                        SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
        },
+       { str_init("cfgutils"), str_init("check_route_exists"),
+               SR_KEMIP_INT, ki_check_route_exists,
+               { SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+                       SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+       },
+       { str_init("cfgutils"), str_init("route_if_exists"),
+               SR_KEMIP_INT, ki_route_if_exists,
+               { SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+                       SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+       },
 
        { {0, 0}, {0, 0}, 0, NULL, { 0, 0, 0, 0, 0, 0 } }
 };
 
        { {0, 0}, {0, 0}, 0, NULL, { 0, 0, 0, 0, 0, 0 } }
 };