|
@@ -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;
|
|
|
+}
|