pjsip: reinvite for connected line updates occurs when it should not
authorKevin Harwell <kharwell@digium.com>
Wed, 11 Sep 2013 14:23:28 +0000 (14:23 +0000)
committerKevin Harwell <kharwell@digium.com>
Wed, 11 Sep 2013 14:23:28 +0000 (14:23 +0000)
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

channels/chan_pjsip.c
res/res_pjsip_caller_id.c

index c2fc5fe..96500b4 100644 (file)
@@ -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);
 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;
 
        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;
                }
 
                        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;
        }
 
        return 0;
index 440cea7..645910d 100644 (file)
@@ -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);
 
                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);
 }
        }
        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
  * \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
  */
  * \param session The session on which the INVITE response is to be sent
  * \param tdata The outbound INVITE response
  */