Преглед изворни кода

core: kemi - exported more of the functions from core

Daniel-Constantin Mierla пре 9 година
родитељ
комит
0f54afd10c
1 измењених фајлова са 368 додато и 0 уклоњено
  1. 368 0
      kemi.c

+ 368 - 0
kemi.c

@@ -26,6 +26,8 @@
 #include "dprint.h"
 #include "forward.h"
 #include "locking.h"
+#include "dset.h"
+#include "action.h"
 #include "data_lump.h"
 #include "data_lump_rpl.h"
 #include "mem/shm.h"
@@ -85,6 +87,31 @@ static int sr_kemi_core_info(sip_msg_t *msg, str *txt)
 	return 0;
 }
 
+/**
+ *
+ */
+static int sr_kemi_core_log(sip_msg_t *msg, str *level, str *txt)
+{
+	if(txt!=NULL && txt->s!=NULL) {
+		if(level==NULL || level->s==NULL) {
+			LM_ERR("%s", txt->s);
+		} else {
+			if(strcasecmp(level->s, "dbg")==0) {
+				LM_DBG("%s", txt->s);
+			} else if(strcasecmp(level->s, "info")==0) {
+				LM_INFO("%s", txt->s);
+			} else if(strcasecmp(level->s, "warn")==0) {
+				LM_WARN("%s", txt->s);
+			} else if(strcasecmp(level->s, "crit")==0) {
+				LM_CRIT("%s", txt->s);
+			} else {
+				LM_ERR("%s", txt->s);
+			}
+		}
+	}
+	return 0;
+}
+
 /**
  *
  */
@@ -125,6 +152,272 @@ static int sr_kemi_core_is_myself(sip_msg_t *msg, str *uri)
 	return SR_KEMI_FALSE;
 }
 
+/**
+ *
+ */
+static int sr_kemi_core_setflag(sip_msg_t *msg, int flag)
+{
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if (!flag_in_range(flag)) {
+		LM_ERR("invalid flag parameter %d\n", flag);
+		return SR_KEMI_FALSE;
+	}
+
+	setflag(msg, flag);
+	return SR_KEMI_TRUE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_resetflag(sip_msg_t *msg, int flag)
+{
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if (!flag_in_range(flag)) {
+		LM_ERR("invalid flag parameter %d\n", flag);
+		return SR_KEMI_FALSE;
+	}
+
+	resetflag(msg, flag);
+	return SR_KEMI_TRUE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_isflagset(sip_msg_t *msg, int flag)
+{
+	int ret;
+
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if (!flag_in_range(flag)) {
+		LM_ERR("invalid flag parameter %d\n", flag);
+		return SR_KEMI_FALSE;
+	}
+
+	ret = isflagset(msg, flag);
+	if(ret>0)
+		return SR_KEMI_TRUE;
+	return SR_KEMI_FALSE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_setbiflag(sip_msg_t *msg, int flag, int branch)
+{
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if (!flag_in_range(flag)) {
+		LM_ERR("invalid flag parameter %d\n", flag);
+		return SR_KEMI_FALSE;
+	}
+
+	setbflag(branch, flag);
+	return SR_KEMI_TRUE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_resetbiflag(sip_msg_t *msg, int flag, int branch)
+{
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if (!flag_in_range(flag)) {
+		LM_ERR("invalid flag parameter %d\n", flag);
+		return SR_KEMI_FALSE;
+	}
+
+	resetbflag(branch, flag);
+	return SR_KEMI_TRUE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_isbiflagset(sip_msg_t *msg, int flag, int branch)
+{
+	int ret;
+
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if (!flag_in_range(flag)) {
+		LM_ERR("invalid flag parameter %d\n", flag);
+		return SR_KEMI_FALSE;
+	}
+
+	ret = isbflagset(branch, flag);
+	if(ret>0)
+		return SR_KEMI_TRUE;
+	return SR_KEMI_FALSE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_setbflag(sip_msg_t *msg, int flag)
+{
+	return sr_kemi_core_setbiflag(msg, flag, 0);
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_resetbflag(sip_msg_t *msg, int flag)
+{
+	return sr_kemi_core_resetbiflag(msg, flag, 0);
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_isbflagset(sip_msg_t *msg, int flag)
+{
+	return sr_kemi_core_isbiflagset(msg, flag, 0);
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_seturi(sip_msg_t *msg, str *uri)
+{
+	if(uri==NULL || uri->s==NULL) {
+		LM_ERR("invalid uri parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if(rewrite_uri(msg, uri)<0) {
+		LM_ERR("updating r-uri failed\n");
+		return SR_KEMI_FALSE;
+	}
+	return SR_KEMI_TRUE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_setuser(sip_msg_t *msg, str *user)
+{
+	struct action  act;
+	struct run_act_ctx h;
+
+	if(user==NULL || user->s==NULL) {
+		LM_ERR("invalid user parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if(msg==NULL) {
+		LM_WARN("invalid user parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	memset(&act, 0, sizeof(act));
+	act.val[0].type = STRING_ST;
+	act.val[0].u.string = user->s;
+	act.type = SET_USER_T;
+	init_run_actions_ctx(&h);
+	if (do_action(&h, &act, msg)<0) {
+		LM_ERR("do action failed\n");
+		return SR_KEMI_FALSE;
+	}
+	return SR_KEMI_TRUE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_sethost(sip_msg_t *msg, str *host)
+{
+	struct action  act;
+	struct run_act_ctx h;
+
+	if(host==NULL || host->s==NULL) {
+		LM_ERR("invalid host parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	memset(&act, 0, sizeof(act));
+	act.val[0].type = STRING_ST;
+	act.val[0].u.string = host->s;
+	act.type = SET_HOST_T;
+	init_run_actions_ctx(&h);
+	if (do_action(&h, &act, msg)<0)
+	{
+		LM_ERR("do action failed\n");
+		return SR_KEMI_FALSE;
+	}
+	return SR_KEMI_TRUE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_setdsturi(sip_msg_t *msg, str *uri)
+{
+	if(uri==NULL || uri->s==NULL) {
+		LM_ERR("invalid uri parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if(msg==NULL) {
+		LM_WARN("invalid msg parameter\n");
+		return SR_KEMI_FALSE;
+	}
+
+	if(set_dst_uri(msg, uri)<0) {
+		LM_ERR("setting dst uri failed\n");
+		return SR_KEMI_TRUE;
+	}
+	return SR_KEMI_TRUE;
+}
+
+/**
+ *
+ */
+static int sr_kemi_core_resetdsturi(sip_msg_t *msg)
+{
+	if(msg==NULL) {
+		LM_WARN("invalid parameters from\n");
+		return SR_KEMI_FALSE;
+	}
+
+	reset_dst_uri(msg);
+	return SR_KEMI_TRUE;
+}
+
+
 /**
  *
  */
@@ -144,6 +437,11 @@ static sr_kemi_t _sr_kemi_core[] = {
 		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
 			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
 	},
+	{ str_init(""), str_init("log"),
+		SR_KEMIP_NONE, sr_kemi_core_log,
+		{ SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
 	{ str_init(""), str_init("drop"),
 		SR_KEMIP_NONE, sr_kemi_core_drop,
 		{ SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE,
@@ -154,6 +452,76 @@ static sr_kemi_t _sr_kemi_core[] = {
 		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
 			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
 	},
+	{ str_init(""), str_init("setflag"),
+		SR_KEMIP_BOOL, sr_kemi_core_setflag,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("resetflag"),
+		SR_KEMIP_BOOL, sr_kemi_core_resetflag,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("isflagset"),
+		SR_KEMIP_BOOL, sr_kemi_core_isflagset,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("setbflag"),
+		SR_KEMIP_BOOL, sr_kemi_core_setbflag,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("resetbflag"),
+		SR_KEMIP_BOOL, sr_kemi_core_resetbflag,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("isbflagset"),
+		SR_KEMIP_BOOL, sr_kemi_core_isbflagset,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("setbiflag"),
+		SR_KEMIP_BOOL, sr_kemi_core_setbiflag,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("resetbiflag"),
+		SR_KEMIP_BOOL, sr_kemi_core_resetbiflag,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("isbiflagset"),
+		SR_KEMIP_BOOL, sr_kemi_core_isbiflagset,
+		{ SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("seturi"),
+		SR_KEMIP_BOOL, sr_kemi_core_seturi,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("setuser"),
+		SR_KEMIP_BOOL, sr_kemi_core_setuser,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("sethost"),
+		SR_KEMIP_BOOL, sr_kemi_core_sethost,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("setdsturi"),
+		SR_KEMIP_BOOL, sr_kemi_core_setdsturi,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init(""), str_init("resetdsturi"),
+		SR_KEMIP_BOOL, sr_kemi_core_resetdsturi,
+		{ 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 } }
 };