Просмотр исходного кода

app_jsdt: exported functions to kemi framework

Daniel-Constantin Mierla 8 лет назад
Родитель
Сommit
5cd813c32b
1 измененных файлов с 237 добавлено и 44 удалено
  1. 237 44
      src/modules/app_jsdt/app_jsdt_mod.c

+ 237 - 44
src/modules/app_jsdt/app_jsdt_mod.c

@@ -192,98 +192,117 @@ int sr_kemi_config_engine_jsdt(sip_msg_t *msg, int rtype, str *rname,
 	return 1;
 }
 
+static char _jsdt_buf_stack[4][512];
+
 /**
  *
  */
-int mod_register(char *path, int *dlflags, void *p1, void *p2)
+static int ki_app_jsdt_dostring(sip_msg_t *msg, str *script)
 {
-	str ename = str_init("jsdt");
-
-	*dlflags = RTLD_NOW | RTLD_GLOBAL;
-
-	sr_kemi_eng_register(&ename, sr_kemi_config_engine_jsdt);
-
-	return 0;
+	if(script==NULL || script->s==NULL || script->len>=511) {
+		LM_ERR("script too short or too long %d\n", script->len);
+		return -1;
+	}
+	if(!jsdt_sr_initialized())
+	{
+		LM_ERR("jsdt env not intitialized");
+		return -1;
+	}
+	memcpy(_jsdt_buf_stack[0], script->s, script->len);
+	_jsdt_buf_stack[0][script->len] = '\0';
+	return app_jsdt_dostring(msg, _jsdt_buf_stack[0]);
 }
 
-static char _jsdt_buf_stack[4][512];
-
+/**
+ *
+ */
 static int w_app_jsdt_dostring(struct sip_msg *msg, char *script, char *extra)
 {
 	str s;
-	if(!jsdt_sr_initialized())
-	{
-		LM_ERR("Lua env not intitialized");
-		return -1;
-	}
 	if(fixup_get_svalue(msg, (gparam_p)script, &s)<0)
 	{
 		LM_ERR("cannot get the script\n");
 		return -1;
 	}
-	if(s.len>=511)
+	return ki_app_jsdt_dostring(msg, &s);
+}
+
+/**
+ *
+ */
+static int ki_app_jsdt_dofile(sip_msg_t *msg, str *script)
+{
+	if(script==NULL || script->s==NULL || script->len>=511) {
+		LM_ERR("script too short or too long %d\n", script->len);
+		return -1;
+	}
+	if(!jsdt_sr_initialized())
 	{
-		LM_ERR("script too long %d\n", s.len);
+		LM_ERR("jsdt env not intitialized");
 		return -1;
 	}
-	memcpy(_jsdt_buf_stack[0], s.s, s.len);
-	_jsdt_buf_stack[0][s.len] = '\0';
-	return app_jsdt_dostring(msg, _jsdt_buf_stack[0]);
+	memcpy(_jsdt_buf_stack[0], script->s, script->len);
+	_jsdt_buf_stack[0][script->len] = '\0';
+	return app_jsdt_dofile(msg, _jsdt_buf_stack[0]);
 }
 
+/**
+ *
+ */
 static int w_app_jsdt_dofile(struct sip_msg *msg, char *script, char *extra)
 {
 	str s;
-	if(!jsdt_sr_initialized())
-	{
-		LM_ERR("Lua env not intitialized");
-		return -1;
-	}
 	if(fixup_get_svalue(msg, (gparam_p)script, &s)<0)
 	{
 		LM_ERR("cannot get the script\n");
 		return -1;
 	}
-	if(s.len>=511)
+	return ki_app_jsdt_dofile(msg, &s);
+}
+
+/**
+ *
+ */
+static int ki_app_jsdt_runstring(sip_msg_t *msg, str *script)
+{
+	if(script==NULL || script->s==NULL || script->len>=511) {
+		LM_ERR("script too short or too long %d\n", script->len);
+		return -1;
+	}
+	if(!jsdt_sr_initialized())
 	{
-		LM_ERR("script too long %d\n", s.len);
+		LM_ERR("jsdt env not intitialized");
 		return -1;
 	}
-	memcpy(_jsdt_buf_stack[0], s.s, s.len);
-	_jsdt_buf_stack[0][s.len] = '\0';
-	return app_jsdt_dofile(msg, _jsdt_buf_stack[0]);
+	memcpy(_jsdt_buf_stack[0], script->s, script->len);
+	_jsdt_buf_stack[0][script->len] = '\0';
+	return app_jsdt_runstring(msg, _jsdt_buf_stack[0]);
 }
 
+/**
+ *
+ */
 static int w_app_jsdt_runstring(struct sip_msg *msg, char *script, char *extra)
 {
 	str s;
-	if(!jsdt_sr_initialized())
-	{
-		LM_ERR("Lua env not intitialized");
-		return -1;
-	}
 	if(fixup_get_svalue(msg, (gparam_p)script, &s)<0)
 	{
 		LM_ERR("cannot get the script\n");
 		return -1;
 	}
-	if(s.len>=511)
-	{
-		LM_ERR("script too long %d\n", s.len);
-		return -1;
-	}
-	memcpy(_jsdt_buf_stack[0], s.s, s.len);
-	_jsdt_buf_stack[0][s.len] = '\0';
-	return app_jsdt_runstring(msg, _jsdt_buf_stack[0]);
+	return ki_app_jsdt_runstring(msg, &s);
 }
 
+/**
+ *
+ */
 static int w_app_jsdt_run(struct sip_msg *msg, char *func, char *p1, char *p2,
 		char *p3)
 {
 	str s;
 	if(!jsdt_sr_initialized())
 	{
-		LM_ERR("Lua env not intitialized");
+		LM_ERR("jsdt env not intitialized");
 		return -1;
 	}
 	if(fixup_get_svalue(msg, (gparam_p)func, &s)<0)
@@ -386,3 +405,177 @@ static int fixup_jsdt_run(void** param, int param_no)
 {
 	return fixup_spve_null(param, 1);
 }
+
+/**
+ *
+ */
+static int ki_app_jsdt_run(sip_msg_t *msg, str *func)
+{
+	if(func==NULL || func->s==NULL || func->len<0) {
+		LM_ERR("invalid function name\n");
+		return -1;
+	}
+	if(func->s[func->len]!='\0') {
+		LM_ERR("invalid terminated function name\n");
+		return -1;
+	}
+	return app_jsdt_run(msg, func->s, NULL, NULL, NULL);
+
+}
+
+/**
+ *
+ */
+static int ki_app_jsdt_run_p1(sip_msg_t *msg, str *func, str *p1)
+{
+	if(func==NULL || func->s==NULL || func->len<=0) {
+		LM_ERR("invalid function name\n");
+		return -1;
+	}
+	if(func->s[func->len]!='\0') {
+		LM_ERR("invalid terminated function name\n");
+		return -1;
+	}
+	if(p1==NULL || p1->s==NULL || p1->len<0) {
+		LM_ERR("invalid p1 value\n");
+		return -1;
+	}
+	if(p1->s[p1->len]!='\0') {
+		LM_ERR("invalid terminated p1 value\n");
+		return -1;
+	}
+	return app_jsdt_run(msg, func->s, p1->s, NULL, NULL);
+}
+
+/**
+ *
+ */
+static int ki_app_jsdt_run_p2(sip_msg_t *msg, str *func, str *p1, str *p2)
+{
+	if(func==NULL || func->s==NULL || func->len<=0) {
+		LM_ERR("invalid function name\n");
+		return -1;
+	}
+	if(func->s[func->len]!='\0') {
+		LM_ERR("invalid terminated function name\n");
+		return -1;
+	}
+	if(p1==NULL || p1->s==NULL || p1->len<0) {
+		LM_ERR("invalid p1 value\n");
+		return -1;
+	}
+	if(p1->s[p1->len]!='\0') {
+		LM_ERR("invalid terminated p1 value\n");
+		return -1;
+	}
+	if(p2==NULL || p2->s==NULL || p2->len<0) {
+		LM_ERR("invalid p2 value\n");
+		return -1;
+	}
+	if(p2->s[p2->len]!='\0') {
+		LM_ERR("invalid terminated p2 value\n");
+		return -1;
+	}
+	return app_jsdt_run(msg, func->s, p1->s, p2->s, NULL);
+}
+
+/**
+ *
+ */
+static int ki_app_jsdt_run_p3(sip_msg_t *msg, str *func, str *p1, str *p2, str *p3)
+{
+	if(func==NULL || func->s==NULL || func->len<=0) {
+		LM_ERR("invalid function name\n");
+		return -1;
+	}
+	if(func->s[func->len]!='\0') {
+		LM_ERR("invalid terminated function name\n");
+		return -1;
+	}
+	if(p1==NULL || p1->s==NULL || p1->len<0) {
+		LM_ERR("invalid p1 value\n");
+		return -1;
+	}
+	if(p1->s[p1->len]!='\0') {
+		LM_ERR("invalid terminated p1 value\n");
+		return -1;
+	}
+	if(p2==NULL || p2->s==NULL || p2->len<0) {
+		LM_ERR("invalid p2 value\n");
+		return -1;
+	}
+	if(p2->s[p2->len]!='\0') {
+		LM_ERR("invalid terminated p2 value\n");
+		return -1;
+	}
+	if(p3==NULL || p3->s==NULL || p3->len<0) {
+		LM_ERR("invalid p3 value\n");
+		return -1;
+	}
+	if(p3->s[p3->len]!='\0') {
+		LM_ERR("invalid terminated p3 value\n");
+		return -1;
+	}
+	return app_jsdt_run(msg, func->s, p1->s, p2->s, p3->s);
+}
+
+/**
+ *
+ */
+/* clang-format off */
+static sr_kemi_t sr_kemi_app_jsdt_exports[] = {
+	{ str_init("app_jsdt"), str_init("dostring"),
+		SR_KEMIP_INT, ki_app_jsdt_dostring,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("app_jsdt"), str_init("dofile"),
+		SR_KEMIP_INT, ki_app_jsdt_dofile,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("app_jsdt"), str_init("runstring"),
+		SR_KEMIP_INT, ki_app_jsdt_runstring,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("app_jsdt"), str_init("run"),
+		SR_KEMIP_INT, ki_app_jsdt_run,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("app_jsdt"), str_init("run_p1"),
+		SR_KEMIP_INT, ki_app_jsdt_run_p1,
+		{ SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("app_jsdt"), str_init("run_p2"),
+		SR_KEMIP_INT, ki_app_jsdt_run_p2,
+		{ SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_STR,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("app_jsdt"), str_init("run_p3"),
+		SR_KEMIP_INT, ki_app_jsdt_run_p3,
+		{ SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_STR,
+			SR_KEMIP_STR, 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)
+{
+	str ename = str_init("jsdt");
+
+	*dlflags = RTLD_NOW | RTLD_GLOBAL;
+
+	sr_kemi_eng_register(&ename, sr_kemi_config_engine_jsdt);
+	sr_kemi_modules_add(sr_kemi_app_jsdt_exports);
+
+	return 0;
+}