<p>George Joseph has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/9130">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">chan_pjsip: Register for "BEFORE_MEDIA" responses<br><br>chan_pjsip wasn't registering for "BEFORE_MEDIA" responses which meant<br>it was not updating HANGUPCAUSE for 4XX responses. If the remote end<br>sent a "180 Ringing", then a "486 Busy", the hangup cause was left at<br>"180 Normal Clearing".<br><br>* Removed chan_pjsip_incoming_response from the original session<br> supplement (which was handling only "AFTER MEDIA") and added it to a<br> new session supplement which accepts both "BEFORE_MEDIA" and<br> "AFTER_MEDIA".<br><br>* Also cleaned up some cleanup code in load module.<br><br>ASTERISK-27902<br><br>Change-Id: If9b860541887aca8ac2c9f2ed51ceb0550fb007a<br>---<br>M channels/chan_pjsip.c<br>1 file changed, 18 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/30/9130/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c<br>index c7344d2..3e5fab2 100644<br>--- a/channels/chan_pjsip.c<br>+++ b/channels/chan_pjsip.c<br>@@ -147,9 +147,16 @@<br> .session_begin = chan_pjsip_session_begin,<br> .session_end = chan_pjsip_session_end,<br> .incoming_request = chan_pjsip_incoming_request,<br>- .incoming_response = chan_pjsip_incoming_response,<br> /* It is important that this supplement runs after media has been negotiated */<br> .response_priority = AST_SIP_SESSION_AFTER_MEDIA,<br>+};<br>+<br>+/*! \brief SIP session supplement structure just for responses */<br>+static struct ast_sip_session_supplement chan_pjsip_supplement_response = {<br>+ .method = "INVITE",<br>+ .priority = AST_SIP_SUPPLEMENT_PRIORITY_CHANNEL,<br>+ .incoming_response = chan_pjsip_incoming_response,<br>+ .response_priority = AST_SIP_SESSION_BEFORE_MEDIA | AST_SIP_SESSION_AFTER_MEDIA,<br> };<br> <br> static int chan_pjsip_incoming_ack(struct ast_sip_session *session, struct pjsip_rx_data *rdata);<br>@@ -2837,6 +2844,11 @@<br> goto end;<br> }<br> <br>+ if (ast_sip_session_register_supplement(&chan_pjsip_supplement_response)) {<br>+ ast_log(LOG_ERROR, "Unable to register PJSIP supplement\n");<br>+ goto end;<br>+ }<br>+<br> if (!(pjsip_uids_onhold = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK,<br> AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, 37, uid_hold_hash_fn,<br> uid_hold_sort_fn, NULL))) {<br>@@ -2846,31 +2858,21 @@<br> <br> if (ast_sip_session_register_supplement(&call_pickup_supplement)) {<br> ast_log(LOG_ERROR, "Unable to register PJSIP call pickup supplement\n");<br>- ast_sip_session_unregister_supplement(&chan_pjsip_supplement);<br> goto end;<br> }<br> <br> if (ast_sip_session_register_supplement(&pbx_start_supplement)) {<br> ast_log(LOG_ERROR, "Unable to register PJSIP pbx start supplement\n");<br>- ast_sip_session_unregister_supplement(&chan_pjsip_supplement);<br>- ast_sip_session_unregister_supplement(&call_pickup_supplement);<br> goto end;<br> }<br> <br> if (ast_sip_session_register_supplement(&chan_pjsip_ack_supplement)) {<br> ast_log(LOG_ERROR, "Unable to register PJSIP ACK supplement\n");<br>- ast_sip_session_unregister_supplement(&pbx_start_supplement);<br>- ast_sip_session_unregister_supplement(&chan_pjsip_supplement);<br>- ast_sip_session_unregister_supplement(&call_pickup_supplement);<br> goto end;<br> }<br> <br> if (pjsip_channel_cli_register()) {<br> ast_log(LOG_ERROR, "Unable to register PJSIP Channel CLI\n");<br>- ast_sip_session_unregister_supplement(&chan_pjsip_ack_supplement);<br>- ast_sip_session_unregister_supplement(&pbx_start_supplement);<br>- ast_sip_session_unregister_supplement(&chan_pjsip_supplement);<br>- ast_sip_session_unregister_supplement(&call_pickup_supplement);<br> goto end;<br> }<br> <br>@@ -2886,6 +2888,11 @@<br> end:<br> ao2_cleanup(pjsip_uids_onhold);<br> pjsip_uids_onhold = NULL;<br>+ ast_sip_session_unregister_supplement(&chan_pjsip_ack_supplement);<br>+ ast_sip_session_unregister_supplement(&pbx_start_supplement);<br>+ ast_sip_session_unregister_supplement(&chan_pjsip_supplement_response);<br>+ ast_sip_session_unregister_supplement(&chan_pjsip_supplement);<br>+ ast_sip_session_unregister_supplement(&call_pickup_supplement);<br> ast_custom_function_unregister(&dtmf_mode_function);<br> ast_custom_function_unregister(&media_offer_function);<br> ast_custom_function_unregister(&chan_pjsip_dial_contacts_function);<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/9130">change 9130</a>. To unsubscribe, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/9130"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 13 </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: If9b860541887aca8ac2c9f2ed51ceb0550fb007a </div>
<div style="display:none"> Gerrit-Change-Number: 9130 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>