<p>George Joseph has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/9132">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, 33 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/32/9132/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 b4eb711..33a72aa 100644<br>--- a/channels/chan_pjsip.c<br>+++ b/channels/chan_pjsip.c<br>@@ -144,9 +144,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>@@ -3110,6 +3117,11 @@<br> <br>       ast_sip_session_register_supplement(&chan_pjsip_supplement);<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>@@ -3117,16 +3129,23 @@<br>          goto end;<br>     }<br> <br>- ast_sip_session_register_supplement(&call_pickup_supplement);<br>-    ast_sip_session_register_supplement(&pbx_start_supplement);<br>-      ast_sip_session_register_supplement(&chan_pjsip_ack_supplement);<br>+ if (ast_sip_session_register_supplement(&call_pickup_supplement)) {<br>+              ast_log(LOG_ERROR, "Unable to register PJSIP call pickup supplement\n");<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>+             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>+           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>@@ -3142,6 +3161,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>@@ -3160,6 +3184,7 @@<br> <br>     pjsip_channel_cli_unregister();<br> <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(&pbx_start_supplement);<br>     ast_sip_session_unregister_supplement(&chan_pjsip_ack_supplement);<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/9132">change 9132</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/9132"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </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: 9132 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>