summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Tryba <daniel@pocos.nl>2017-10-02 14:48:41 +0200
committerDaniel Tryba <daniel@tryba.nl>2017-10-05 14:39:53 +0200
commite8ed162941590068210df4555ee9bae3ff444fb7 (patch)
tree0231c13588c24ffccde2b0cd7ca8b04f1aa95d6b
parent0991cb0a8fc99a356683f4efa701ac21bfdc46ac (diff)
res_pjsip_caller_id chan_sip: Comply to RFC 3323 values for privacy
Currently privacy requests are only granted if the Privacy header value is exactly "id" (defined in RFC 3325). It ignores any other possible value (or a combination there of). This patch reverses the logic from testing for "id" to grant privacy, to testing for "none" and granting privacy for any other value. "none" must not be used in combination with any other value (RFC 3323 section 4.2). ASTERISK-27284 #close Change-Id: If438a21f31a962da32d7a33ff33bdeb1e776fe56
-rw-r--r--channels/chan_sip.c2
-rw-r--r--res/res_pjsip_caller_id.c8
2 files changed, 5 insertions, 5 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 035cf2276..c238d892f 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -18083,7 +18083,7 @@ static int get_pai(struct sip_pvt *p, struct sip_request *req)
}
ast_copy_string(privacy, sip_get_header(req, "Privacy"), sizeof(privacy));
- if (!ast_strlen_zero(privacy) && !strncmp(privacy, "id", 2)) {
+ if (!ast_strlen_zero(privacy) && strcasecmp(privacy, "none")) {
callingpres = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
}
if (!cid_name) {
diff --git a/res/res_pjsip_caller_id.c b/res/res_pjsip_caller_id.c
index 470d90f43..64191a750 100644
--- a/res/res_pjsip_caller_id.c
+++ b/res/res_pjsip_caller_id.c
@@ -149,12 +149,12 @@ static int set_id_from_pai(pjsip_rx_data *rdata, struct ast_party_id *id)
}
privacy = pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &privacy_str, NULL);
- if (privacy && !pj_stricmp2(&privacy->hvalue, "id")) {
- id->number.presentation = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
- id->name.presentation = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
- } else {
+ if (!privacy || !pj_stricmp2(&privacy->hvalue, "none")) {
id->number.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
id->name.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
+ } else {
+ id->number.presentation = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
+ id->name.presentation = AST_PRES_PROHIB_USER_NUMBER_NOT_SCREENED;
}
return 0;