Module: kamailio Branch: master Commit: 35508d1dde810d422a6cf12631015a34a72bc039 URL: https://github.com/kamailio/kamailio/commit/35508d1dde810d422a6cf12631015a34...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2021-03-02T09:10:34+01:00
pipelimit: added pl_active() - return true if pipe is active
---
Modified: src/modules/pipelimit/pipelimit.c Modified: src/modules/pipelimit/pl_ht.c
---
Diff: https://github.com/kamailio/kamailio/commit/35508d1dde810d422a6cf12631015a34... Patch: https://github.com/kamailio/kamailio/commit/35508d1dde810d422a6cf12631015a34...
---
diff --git a/src/modules/pipelimit/pipelimit.c b/src/modules/pipelimit/pipelimit.c index faacd086df..d7b4f129c8 100644 --- a/src/modules/pipelimit/pipelimit.c +++ b/src/modules/pipelimit/pipelimit.c @@ -122,6 +122,7 @@ static ticks_t pl_timer_handle(ticks_t, struct timer_ln*, void*); static void pl_timer_exec(unsigned int ticks, void *param); static int w_pl_check(struct sip_msg*, char *, char *); static int w_pl_check3(struct sip_msg*, char *, char *, char *); +static int w_pl_active(sip_msg_t *, char *, char *); static int w_pl_drop_default(struct sip_msg*, char *, char *); static int w_pl_drop_forced(struct sip_msg*, char *, char *); static int w_pl_drop(struct sip_msg*, char *, char *); @@ -133,6 +134,8 @@ static cmd_export_t cmds[]={ 0, ANY_ROUTE}, {"pl_check", (cmd_function)w_pl_check3, 3, fixup_pl_check3, 0, ANY_ROUTE}, + {"pl_active", (cmd_function)w_pl_active, 1, fixup_spve_null, + 0, ANY_ROUTE}, {"pl_drop", (cmd_function)w_pl_drop_default, 0, 0, 0, REQUEST_ROUTE|BRANCH_ROUTE|FAILURE_ROUTE|ONSEND_ROUTE}, {"pl_drop", (cmd_function)w_pl_drop_forced, 1, fixup_uint_null, @@ -729,6 +732,36 @@ static int fixup_pl_check3(void** param, int param_no) return 0; }
+static int pl_active(sip_msg_t *msg, str *pipeid) +{ + pl_pipe_t *pipe = NULL; + + pipe = pl_pipe_get(pipeid, 0); + if(pipe==NULL) { + LM_ERR("pipe does not exist [%.*s]\n", pipeid->len, pipeid->s); + return -1; + } + + return 1; +} + +/** + * checking if pipe is active + */ +static int w_pl_active(sip_msg_t* msg, char *p1, char *p2) +{ + str pipeid = {0, 0}; + + if(fixup_get_svalue(msg, (gparam_p)p1, &pipeid)!=0 + || pipeid.s == 0) + { + LM_ERR("invalid pipeid parameter"); + return -1; + } + + return pl_active(msg, &pipeid); +} + static void pl_timer_refresh(void) { if(pl_load_fetch!=0) { @@ -873,6 +906,11 @@ static sr_kemi_t sr_kemi_pipelimit_exports[] = { { SR_KEMIP_STR, SR_KEMIP_STR, SR_KEMIP_INT, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE } }, + { str_init("pipelimit"), str_init("pl_active"), + SR_KEMIP_INT, pl_active, + { SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE, + SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE } + }, { str_init("pipelimit"), str_init("pl_drop"), SR_KEMIP_INT, ki_pl_drop, { SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE, diff --git a/src/modules/pipelimit/pl_ht.c b/src/modules/pipelimit/pl_ht.c index 1f666b89f3..38434068b4 100644 --- a/src/modules/pipelimit/pl_ht.c +++ b/src/modules/pipelimit/pl_ht.c @@ -221,7 +221,7 @@ pl_pipe_t* pl_pipe_get(str *pipeid, int mode) unsigned int cellid; unsigned int idx; pl_pipe_t *it; - + if(_pl_pipes_ht==NULL) return NULL;
@@ -236,7 +236,7 @@ pl_pipe_t* pl_pipe_get(str *pipeid, int mode) } while(it!=NULL && it->cellid == cellid) { - if(pipeid->len==it->name.len + if(pipeid->len==it->name.len && strncmp(pipeid->s, it->name.s, pipeid->len)==0) { if(mode==0) lock_release(&_pl_pipes_ht->slots[idx].lock);