From fb1e1d847e6e6aeedb17949e7f871c966cca2c76 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Wed, 20 Apr 2016 16:58:09 +0200 Subject: [PATCH] core: kemi - exported is_myself() --- kemi.c | 35 +++++++++++++++++++++++++++++++++++ kemi.h | 3 +++ 2 files changed, 38 insertions(+) diff --git a/kemi.c b/kemi.c index 0bc6e3c2ffa..9c36d510112 100644 --- a/kemi.c +++ b/kemi.c @@ -24,10 +24,12 @@ #include #include "dprint.h" +#include "forward.h" #include "locking.h" #include "data_lump.h" #include "data_lump_rpl.h" #include "mem/shm.h" +#include "parser/parse_uri.h" #include "kemi.h" @@ -95,6 +97,34 @@ static int sr_kemi_core_drop(sip_msg_t *msg) return 0; } +/** + * + */ +static int sr_kemi_core_is_myself(sip_msg_t *msg, str *uri) +{ + struct sip_uri puri; + int ret; + + if(uri==NULL || uri->s==NULL) { + return SR_KEMI_FALSE; + } + if(uri->len>4 && (strncmp(uri->s, "sip:", 4)==0 + || strncmp(uri->s, "sips:", 5)==0)) { + if(parse_uri(uri->s, uri->len, &puri)!=0) { + LM_ERR("failed to parse uri [%.*s]\n", uri->len, uri->s); + return SR_KEMI_FALSE; + } + ret = check_self(&puri.host, (puri.port.s)?puri.port_no:0, + (puri.transport_val.s)?puri.proto:0); + } else { + ret = check_self(uri, 0, 0); + } + if(ret==1) { + return SR_KEMI_TRUE; + } + return SR_KEMI_FALSE; +} + /** * */ @@ -119,6 +149,11 @@ static sr_kemi_t _sr_kemi_core[] = { { SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE } }, + { str_init(""), str_init("is_myself"), + SR_KEMIP_BOOL, sr_kemi_core_is_myself, + { 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 } } }; diff --git a/kemi.h b/kemi.h index 3c9e0e15eec..bd3c19d7fb9 100644 --- a/kemi.h +++ b/kemi.h @@ -31,6 +31,9 @@ #define SR_KEMIP_STR (1<<1) /* type str* */ #define SR_KEMIP_BOOL (1<<2) /* type boolean (0/1) */ +#define SR_KEMI_FALSE 0 +#define SR_KEMI_TRUE 1 + #define SR_KEMI_PARAMS_MAX 6 typedef struct sr_kemi {