summaryrefslogtreecommitdiff
path: root/res/res_pjsip_messaging.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2016-08-29 18:08:22 -0500
committerRichard Mudgett <rmudgett@digium.com>2016-09-09 17:13:02 -0500
commitba362822f34e1967e5e15a0e81bab2f5981b014a (patch)
tree2a29699f8901f55e40b7f9270532f4b8ec405455 /res/res_pjsip_messaging.c
parent9d54dd04bbdad6849aee77536ab12c5fa6620680 (diff)
res_pjsip: Add ignore_uri_user_options option.
This implements the chan_sip legacy_useroption_parsing option but with a better name. * Made the caller-id number and redirecting number strings obtained from incoming SIP URI user fields always truncated at the first semicolon. People don't care about anything after the semicolon showing up on their displays even though the RFC allows the semicolon. ASTERISK-26316 #close Reported by: Kevin Harwell Change-Id: Ib42b0e940dd34d84c7b14bc2e90d1ba392624f62
Diffstat (limited to 'res/res_pjsip_messaging.c')
-rw-r--r--res/res_pjsip_messaging.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/res/res_pjsip_messaging.c b/res/res_pjsip_messaging.c
index 7efb1a20e..e63c825b5 100644
--- a/res/res_pjsip_messaging.c
+++ b/res/res_pjsip_messaging.c
@@ -133,6 +133,12 @@ static struct ast_sip_endpoint* get_outbound_endpoint(
} else if ((aor_uri = strchr(name, '@'))) {
/* format was 'endpoint@' - don't use the rest */
*aor_uri = '\0';
+
+ /*
+ * We may want to match without any user options getting
+ * in the way.
+ */
+ AST_SIP_USER_OPTIONS_TRUNCATE_CHECK(name);
}
/* at this point, if name is not empty then it
@@ -448,6 +454,12 @@ static enum pjsip_status_code rx_data_to_ast_msg(pjsip_rx_data *rdata, struct as
sip_ruri = pjsip_uri_get_uri(ruri);
ast_copy_pj_str(exten, &sip_ruri->user, AST_MAX_EXTENSION);
+ /*
+ * We may want to match in the dialplan without any user
+ * options getting in the way.
+ */
+ AST_SIP_USER_OPTIONS_TRUNCATE_CHECK(exten);
+
endpt = ast_pjsip_rdata_get_endpoint(rdata);
ast_assert(endpt != NULL);
@@ -528,7 +540,7 @@ static void msg_data_destroy(void *obj)
static struct msg_data* msg_data_create(const struct ast_msg *msg, const char *to, const char *from)
{
- char *tag;
+ char *uri_params;
struct msg_data *mdata = ao2_alloc(sizeof(*mdata), msg_data_destroy);
if (!mdata) {
@@ -553,9 +565,14 @@ static struct msg_data* msg_data_create(const struct ast_msg *msg, const char *t
return NULL;
}
- /* sometimes from can still contain the tag at this point, so remove it */
- if ((tag = strchr(mdata->from, ';'))) {
- *tag = '\0';
+ /*
+ * Sometimes from URI can contain URI parameters, so remove them.
+ *
+ * sip:user;user-options@domain;uri-parameters
+ */
+ uri_params = strchr(mdata->from, '@');
+ if (uri_params && (uri_params = strchr(mdata->from, ';'))) {
+ *uri_params = '\0';
}
return mdata;
}