summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Harwell <kharwell@digium.com>2013-09-11 14:23:28 +0000
committerKevin Harwell <kharwell@digium.com>2013-09-11 14:23:28 +0000
commit4d35941891c37e7850a2ba8fc8fbf76624172cc0 (patch)
treecacb93fb2a24d51725fe2125947732b481c8ce94
parent83bf017db9804c9274608ded72d70a72c086d756 (diff)
pjsip: reinvite for connected line updates occurs when it should not
Connected line updates are now only sent out if an actual update needs to occur. This happens under the following conditions: 1. The endpoint we are sending to is trusted. 2. Either a P-Asserted-Identity or Remote Party-ID header needs to be added/sent. 3. The connected id's number and name are valid. Also added an SDP when an update is sent out. (closes issue AST-1212) Reported by: John Bigelow Review: https://reviewboard.asterisk.org/r/2831/ ........ Merged revisions 398806 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@398808 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--channels/chan_pjsip.c9
-rw-r--r--res/res_pjsip_caller_id.c5
2 files changed, 9 insertions, 5 deletions
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index c2fc5feba..96500b4ed 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -1077,6 +1077,7 @@ static int transmit_info_with_vidupdate(void *data)
static int update_connected_line_information(void *data)
{
RAII_VAR(struct ast_sip_session *, session, data, ao2_cleanup);
+ struct ast_party_id connected_id;
if ((ast_channel_state(session->channel) != AST_STATE_UP) && (session->inv_session->role == PJSIP_UAS_ROLE)) {
int response_code = 0;
@@ -1101,7 +1102,13 @@ static int update_connected_line_information(void *data)
method = AST_SIP_SESSION_REFRESH_METHOD_UPDATE;
}
- ast_sip_session_refresh(session, NULL, NULL, NULL, method, 0);
+ connected_id = ast_channel_connected_effective_id(session->channel);
+ if ((session->endpoint->id.send_pai || session->endpoint->id.send_rpid) &&
+ (session->endpoint->id.trust_outbound ||
+ ((connected_id.name.presentation & AST_PRES_RESTRICTION) == AST_PRES_ALLOWED &&
+ (connected_id.number.presentation & AST_PRES_RESTRICTION) == AST_PRES_ALLOWED))) {
+ ast_sip_session_refresh(session, NULL, NULL, NULL, method, 1);
+ }
}
return 0;
diff --git a/res/res_pjsip_caller_id.c b/res/res_pjsip_caller_id.c
index 440cea709..645910dbf 100644
--- a/res/res_pjsip_caller_id.c
+++ b/res/res_pjsip_caller_id.c
@@ -662,9 +662,6 @@ static void caller_id_outgoing_request(struct ast_sip_session *session, pjsip_tx
modify_id_header(tdata->pool, from, &connected_id);
modify_id_header(dlg->pool, dlg->local.info, &connected_id);
- if (should_queue_connected_line_update(session, &session->endpoint->id.self)) {
- queue_connected_line_update(session, &session->endpoint->id.self);
- }
}
add_id_headers(session, tdata, &connected_id);
}
@@ -674,7 +671,7 @@ static void caller_id_outgoing_request(struct ast_sip_session *session, pjsip_tx
* \brief Session supplement for outgoing INVITE response
*
* This will add P-Asserted-Identity and Remote-Party-ID headers if necessary
- *
+ *
* \param session The session on which the INVITE response is to be sent
* \param tdata The outbound INVITE response
*/