[sr-dev] git:master:e8554de0: prefix_route: exported functions to kemi interface

Daniel-Constantin Mierla miconda at gmail.com
Mon May 15 08:34:01 CEST 2017


Module: kamailio
Branch: master
Commit: e8554de0c132062183fcc332376bd2b857544bf7
URL: https://github.com/kamailio/kamailio/commit/e8554de0c132062183fcc332376bd2b857544bf7

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2017-05-15T08:32:39+02:00

prefix_route: exported functions to kemi interface

---

Modified: src/modules/prefix_route/prefix_route.c

---

Diff:  https://github.com/kamailio/kamailio/commit/e8554de0c132062183fcc332376bd2b857544bf7.diff
Patch: https://github.com/kamailio/kamailio/commit/e8554de0c132062183fcc332376bd2b857544bf7.patch

---

diff --git a/src/modules/prefix_route/prefix_route.c b/src/modules/prefix_route/prefix_route.c
index fb99ec1..9153fe7 100644
--- a/src/modules/prefix_route/prefix_route.c
+++ b/src/modules/prefix_route/prefix_route.c
@@ -44,6 +44,7 @@
 #include "../../core/locking.h"
 #include "../../core/action.h"
 #include "../../core/route.h"
+#include "../../core/kemi.h"
 #include "tree.h"
 #include "pr.h"
 
@@ -256,17 +257,59 @@ static int get_username(struct sip_msg* msg, str *user)
 
 
 /**
- * SER Command "prefix_route"
+ * ki command "prefix_route"
+ */
+static int ki_prefix_route(sip_msg_t *msg, str *ruser)
+{
+	struct run_act_ctx ra_ctx;
+	int err;
+	int route;
+
+	route = tree_route_get(ruser);
+	if (route <= 0)
+		return -1;
+
+	/* If match send to route[x] */
+	init_run_actions_ctx(&ra_ctx);
+
+	err = run_actions(&ra_ctx, main_rt.rlist[route], msg);
+	if (err < 0) {
+		LOG(L_ERR, "prefix_route: run_actions failed (%d)\n", err);
+		return -1;
+	}
+
+	/* Success */
+	return (prefix_route_exit)?0:1;
+}
+
+/**
+ * ki command "prefix_route"
+ */
+static int ki_prefix_route_uri(sip_msg_t *msg)
+{
+	str user;
+	int err;
+
+	err = get_username(msg, &user);
+	if (0 != err) {
+		LOG(L_ERR, "prefix_route: could not get username in"
+			    " Request URI (%d)\n", err);
+		return err;
+	}
+
+	return ki_prefix_route(msg, &user);
+}
+
+/**
+ * cfg command "prefix_route"
  */
 static int prefix_route(struct sip_msg *msg, char *p1, char *p2)
 {
 	struct run_act_ctx ra_ctx;
 	str user;
 	int err;
-	int route;
 
 	/* Unused */
-	(void)p1;
 	(void)p2;
 
 	/* Get request URI */
@@ -285,24 +328,8 @@ static int prefix_route(struct sip_msg *msg, char *p1, char *p2)
 		}
 	}
 
-	route = tree_route_get(&user);
-	if (route <= 0)
-		return -1;
-
-	/* If match send to route[x] */
-	init_run_actions_ctx(&ra_ctx);
-
-	err = run_actions(&ra_ctx, main_rt.rlist[route], msg);
-	if (err < 0) {
-		LOG(L_ERR, "prefix_route: run_actions failed (%d)\n", err);
-		return -1;
-	}
-
-	/* Success */
-	return (prefix_route_exit)?0:1;
+	return ki_prefix_route(msg, &user);
 }
-
-
 /*
  * Exported functions
  */
@@ -338,3 +365,32 @@ struct module_exports exports = {
 	0,               /* OnCancel function       */
 	0                /* Child init function     */
 };
+
+/**
+ *
+ */
+/* clang-format off */
+static sr_kemi_t sr_kemi_prefix_route_exports[] = {
+	{ str_init("prefix_route"), str_init("prefix_route"),
+		SR_KEMIP_INT, ki_prefix_route,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("prefix_route"), str_init("prefix_route_uri"),
+		SR_KEMIP_INT, ki_prefix_route_uri,
+		{ SR_KEMIP_NONE, 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 } }
+};
+/* clang-format on */
+
+/**
+ *
+ */
+int mod_register(char *path, int *dlflags, void *p1, void *p2)
+{
+	sr_kemi_modules_add(sr_kemi_prefix_route_exports);
+	return 0;
+}
\ No newline at end of file




More information about the sr-dev mailing list