<p>George Joseph has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/9200">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">res_pjsip_session:  Add ability to follow media forking during an INVITE<br><br>pjproject by default currently will follow media forked during an INVITE<br>on outbound calls if the To tag is different on a subsequent response as<br>that on an earlier response.  We handle this correctly.  There have<br>been reported cases where the To tag is the same but we still need to<br>follow the forked media.  The pjproject patch in this commit adds the<br>capability to sip_inv and also adds the capability to control it at<br>runtime.  The original "different tag" behavior was always controllable<br>at runtime but we never did anythign with it and left it to default to<br>TRUE.<br><br>So, along with the pjproject patch, this commit adds options to both the<br>system and endpoint objects to control the two behaviors, and a small<br>logic change to session_inv_on_media_update in res_pjsip_session to<br>control the behavior at the endpoint level.<br><br>The default behavior for "different tags" remains the same at TRUE and<br>the default for "same tag" is FALSE.<br><br>Change-Id: I64d071942b79adb2f0a4e13137389b19404fe3d6<br>Reported-by: Ross Beer<br>---<br>M CHANGES<br>M configs/samples/pjsip.conf.sample<br>A contrib/ast-db-manage/config/versions/0be05c3a8225_add_early_media_options.py<br>M include/asterisk/res_pjsip.h<br>M res/res_pjsip.c<br>M res/res_pjsip/config_system.c<br>M res/res_pjsip/pjsip_configuration.c<br>M res/res_pjsip_session.c<br>A third-party/pjproject/patches/0100-sip_inv-Add-ability-to-accept-updated-media-on-same-.patch<br>9 files changed, 313 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/00/9200/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/CHANGES b/CHANGES<br>index a02cd8a..c830566 100644<br>--- a/CHANGES<br>+++ b/CHANGES<br>@@ -34,6 +34,21 @@<br>     detection as the ConfbridgeTalking event, so bridges must be configured<br>     with "talk_detection_events=yes" for this flag to have meaning.<br> <br>+res_pjsip<br>+------------------<br>+  * Two new options have been added to the system and endpoint objects to<br>+    control whether, on outbound calls, Asterisk will follow media forked<br>+    during the initial INVITE transaction.  For instance, the media port in<br>+    a 200 OK's SDP is different than that in a previous 183 Session Progress.<br>+    follow_early_media_forked sets whether Asterisk will follow when the<br>+    To tag on the subsequent response is different that on the the previous<br>+    response.  The default behavior of "yes" is unchanged.<br>+    follow_early_media_forked_same_tag sets whether Asterisk will follow when<br>+    the To tag on the subsequent response is the same as that on the previous<br>+    response. The default behavior of "no" is unchanged.<br>+    These options have to be enabled system-wide in the system config section<br>+    as well as on individual endpoints that require the functionality.<br>+<br> ------------------------------------------------------------------------------<br> --- Functionality changes from Asterisk 13.20.0 to Asterisk 13.21.0 ----------<br> ------------------------------------------------------------------------------<br>diff --git a/configs/samples/pjsip.conf.sample b/configs/samples/pjsip.conf.sample<br>index e172908..2c39dd1 100644<br>--- a/configs/samples/pjsip.conf.sample<br>+++ b/configs/samples/pjsip.conf.sample<br>@@ -790,6 +790,26 @@<br>                         ; of MWI status changes.  If not set, incoming MWI<br>                         ; NOTIFYs are ignored.<br> <br>+;follow_early_media_fork = ; Follow SDP forked media when To tag is different.<br>+                           ; On outgoing calls, if the UAS responds with<br>+                           ; different SDP attributes on subsequent 18X or 2XX<br>+                           ; responses (such as a port update) AND the To tag<br>+                           ; on the subsequent response is different that the<br>+                           ; previous one, follow it.<br>+                           ; This option must also be enabled in the system<br>+                           ; section for it to take effect here.<br>+                           ; (default: yes)<br>+;follow_early_media_fork_same_tag =<br>+                           ; Follow SDP forked media when To tag is the same.<br>+                           ; On outgoing calls, if the UAS responds with<br>+                           ; different SDP attributes on subsequent 18X or 2XX<br>+                           ; responses (such as a port update) AND the To tag on<br>+                           ; the subsequent response is the same as that the<br>+                           ; previous one, follow it.<br>+                           ; This option must also be enabled in the system<br>+                           ; section for it to take effect here.<br>+                           ; (default: no)<br>+<br> ;==========================AUTH SECTION OPTIONS=========================<br> ;[auth]<br> ;  SYNOPSIS: Authentication type<br>@@ -935,6 +955,25 @@<br>                         ; Disabling this option has been known to cause interoperability<br>                         ; issues, so disable at your own risk.<br>                         ; (default: "yes")<br>+;follow_early_media_fork = ; Follow SDP forked media when To tag is different.<br>+                           ; On outgoing calls, if the UAS responds with<br>+                           ; different SDP attributes on subsequent 18X or 2XX<br>+                           ; responses (such as a port update) AND the To tag<br>+                           ; on the subsequent response is different that the<br>+                           ; previous one, follow it.<br>+                           ; This option must also be enabled on endpoints that<br>+                           ; require this functionality.<br>+                           ; (default: yes)<br>+;follow_early_media_fork_same_tag =<br>+                           ; Follow SDP forked media when To tag is the same.<br>+                           ; On outgoing calls, if the UAS responds with<br>+                           ; different SDP attributes on subsequent 18X or 2XX<br>+                           ; responses (such as a port update) AND the To tag on<br>+                           ; the subsequent response is the same as that the<br>+                           ; previous one, follow it.<br>+                           ; This option must also be enabled on endpoints that<br>+                           ; require this functionality.<br>+                           ; (default: no)<br> ;type=  ; Must be of type system (default: "")<br> <br> ;==========================GLOBAL SECTION OPTIONS=========================<br>diff --git a/contrib/ast-db-manage/config/versions/0be05c3a8225_add_early_media_options.py b/contrib/ast-db-manage/config/versions/0be05c3a8225_add_early_media_options.py<br>new file mode 100644<br>index 0000000..a2b1fef<br>--- /dev/null<br>+++ b/contrib/ast-db-manage/config/versions/0be05c3a8225_add_early_media_options.py<br>@@ -0,0 +1,31 @@<br>+"""Add early media options<br>+<br>+Revision ID: 0be05c3a8225<br>+Revises: d3e4284f8707<br>+Create Date: 2018-06-18 17:26:16.737692<br>+<br>+"""<br>+<br>+# revision identifiers, used by Alembic.<br>+revision = '0be05c3a8225'<br>+down_revision = 'd3e4284f8707'<br>+<br>+from alembic import op<br>+import sqlalchemy as sa<br>+from sqlalchemy.dialects.postgresql import ENUM<br>+<br>+YESNO_NAME = 'yesno_values'<br>+YESNO_VALUES = ['yes', 'no']<br>+<br>+def upgrade():<br>+    yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False)<br>+<br>+    op.add_column('ps_systems', sa.Column('follow_early_media_fork', yesno_values))<br>+    op.add_column('ps_systems', sa.Column('follow_early_media_fork_same_tag', yesno_values))<br>+<br>+def downgrade():<br>+    if op.get_context().bind.dialect.name == 'mssql':<br>+        op.drop_constraint('ck_ps_systems_follow_early_media_fork_yesno_values','ps_systems')<br>+        op.drop_constraint('ck_ps_systems_follow_early_media_fork_any_tag_yesno_values','ps_systems')<br>+    op.drop_column('ps_systems', 'follow_early_media_fork')<br>+    op.drop_column('ps_systems', 'follow_early_media_fork_same_tag')<br>diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h<br>index 7177ceb..7dc790f 100644<br>--- a/include/asterisk/res_pjsip.h<br>+++ b/include/asterisk/res_pjsip.h<br>@@ -637,6 +637,10 @@<br>        unsigned int timeout;<br>         /*! Number of seconds before terminating channel due to lack of RTP (when on hold) */<br>         unsigned int timeout_hold;<br>+   /*! Follow forked media with a different To tag */<br>+   unsigned int follow_early_media_fork;<br>+        /*! Follow forked media with the same To tag */<br>+      unsigned int follow_early_media_fork_same_tag;<br> };<br> <br> /*!<br>diff --git a/res/res_pjsip.c b/res/res_pjsip.c<br>index b5f8cbd..d0cb5d5 100644<br>--- a/res/res_pjsip.c<br>+++ b/res/res_pjsip.c<br>@@ -1027,6 +1027,34 @@<br>                                             changes.  If not set, incoming MWI NOTIFYs are ignored.<br>                                       </para></description><br>                             </configOption><br>+                                <configOption name="follow_early_media_fork" default="no"><br>+                                 <synopsis>Follow SDP forked media when To tag is different</synopsis><br>+                                    <description><para><br>+                                              On outgoing calls, if the UAS responds with different SDP attributes<br>+                                         on subsequent 18X or 2XX responses (such as a port update) AND the<br>+                                           To tag on the subsequent response is different that the previous one,<br>+                                                follow it.<br>+                                           </para><br>+                                                <para><br>+                                                 This option must also be enabled in the <literal>system</literal><br>+                                                        section for it to take effect here.<br>+                                          </para><br>+                                        </description><br>+                         </configOption><br>+                                <configOption name="follow_early_media_fork_same_tag" default="no"><br>+                                        <synopsis>Follow SDP forked media when To tag is the same</synopsis><br>+                                     <description><para><br>+                                              On outgoing calls, if the UAS responds with different SDP attributes<br>+                                         on subsequent 18X or 2XX responses (such as a port update) AND the<br>+                                           To tag on the subsequent response is the same as that the previous one,<br>+                                              follow it.<br>+                                           </para><br>+                                                <para><br>+                                                 This option must also be enabled in the <literal>system</literal><br>+                                                        section for it to take effect here.<br>+                                          </para><br>+                                        </description><br>+                         </configOption><br>                         </configObject><br>                         <configObject name="auth"><br>                            <synopsis>Authentication type</synopsis><br>@@ -1594,6 +1622,34 @@<br>                                          request is too large.  See RFC 3261 section 18.1.1.<br>                                   </para></description><br>                             </configOption><br>+                                <configOption name="follow_early_media_fork" default="no"><br>+                                 <synopsis>Follow SDP forked media when To tag is different</synopsis><br>+                                    <description><para><br>+                                              On outgoing calls, if the UAS responds with different SDP attributes<br>+                                         on subsequent 18X or 2XX responses (such as a port update) AND the<br>+                                           To tag on the subsequent response is different that the previous one,<br>+                                                follow it.<br>+                                           </para><br>+                                                <para><br>+                                                 This option must also be enabled on endpoints that require<br>+                                                   this functionality.<br>+                                          </para><br>+                                        </description><br>+                         </configOption><br>+                                <configOption name="follow_early_media_fork_same_tag" default="no"><br>+                                        <synopsis>Follow SDP forked media when To tag is the same</synopsis><br>+                                     <description><para><br>+                                              On outgoing calls, if the UAS responds with different SDP attributes<br>+                                         on subsequent 18X or 2XX responses (such as a port update) AND the<br>+                                           To tag on the subsequent response is the same as that the previous one,<br>+                                              follow it.<br>+                                           </para><br>+                                                <para><br>+                                                 This option must also be enabled on endpoints that require<br>+                                                   this functionality.<br>+                                          </para><br>+                                        </description><br>+                         </configOption><br>                                 <configOption name="type"><br>                                    <synopsis>Must be of type 'system'.</synopsis><br>                            </configOption><br>diff --git a/res/res_pjsip/config_system.c b/res/res_pjsip/config_system.c<br>index ed2b5d2..1e4a730 100644<br>--- a/res/res_pjsip/config_system.c<br>+++ b/res/res_pjsip/config_system.c<br>@@ -52,6 +52,13 @@<br>        } threadpool;<br>         /*! Nonzero to disable switching from UDP to TCP transport */<br>         unsigned int disable_tcp_switch;<br>+     /*!<br>+   * Although early media is enabled in pjproject by default, it's only<br>+     * enabled when the To tags are different. These options allow turning<br>+        * onm or off the feature for different tags and same tags.<br>+   */<br>+  unsigned int follow_early_media_fork;<br>+        unsigned int follow_early_media_fork_same_tag;<br> };<br> <br> static struct ast_threadpool_options sip_threadpool_options = {<br>@@ -95,6 +102,9 @@<br> <br>       pjsip_cfg()->tsx.t1 = system->timert1;<br>  pjsip_cfg()->tsx.td = system->timerb;<br>+<br>+       pjsip_cfg()->endpt.follow_early_media_fork = system->follow_early_media_fork;<br>+  pjsip_cfg()->endpt.follow_early_media_fork_same_tag = system->follow_early_media_fork_same_tag;<br> <br>      if (system->compactheaders) {<br>              extern pj_bool_t pjsip_use_compact_form;<br>@@ -184,6 +194,10 @@<br>                        OPT_UINT_T, 0, FLDSET(struct system_config, threadpool.max_size));<br>    ast_sorcery_object_field_register(system_sorcery, "system", "disable_tcp_switch", "yes",<br>                        OPT_BOOL_T, 1, FLDSET(struct system_config, disable_tcp_switch));<br>+    ast_sorcery_object_field_register(system_sorcery, "system", "follow_early_media_fork", "no",<br>+                   OPT_BOOL_T, 1, FLDSET(struct system_config, follow_early_media_fork));<br>+       ast_sorcery_object_field_register(system_sorcery, "system", "follow_early_media_fork_same_tag", "no",<br>+                  OPT_BOOL_T, 1, FLDSET(struct system_config, follow_early_media_fork_same_tag));<br> <br>    ast_sorcery_load(system_sorcery);<br> <br>diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c<br>index 9426e92..e8c9d0d 100644<br>--- a/res/res_pjsip/pjsip_configuration.c<br>+++ b/res/res_pjsip/pjsip_configuration.c<br>@@ -1854,6 +1854,8 @@<br>      ast_sorcery_object_field_register(sip_sorcery, "endpoint", "refer_blind_progress", "yes", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, refer_blind_progress));<br>        ast_sorcery_object_field_register(sip_sorcery, "endpoint", "notify_early_inuse_ringing", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, notify_early_inuse_ringing));<br>     ast_sorcery_object_field_register(sip_sorcery, "endpoint", "incoming_mwi_mailbox", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, incoming_mwi_mailbox));<br>+        ast_sorcery_object_field_register(sip_sorcery, "endpoint", "follow_early_media_fork", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.rtp.follow_early_media_fork));<br>+        ast_sorcery_object_field_register(sip_sorcery, "endpoint", "follow_early_media_fork_same_tag", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.rtp.follow_early_media_fork_same_tag));<br> <br>    if (ast_sip_initialize_sorcery_transport()) {<br>                 ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");<br>diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c<br>index 26e5c39..590125a 100644<br>--- a/res/res_pjsip_session.c<br>+++ b/res/res_pjsip_session.c<br>@@ -3065,6 +3065,26 @@<br>                 return;<br>       }<br> <br>+ if (session->endpoint && (inv->following_fork || inv->following_fork_same_tag)) {<br>+           int bail = 0;<br>+                if ((inv->following_fork && session->endpoint->media.rtp.follow_early_media_fork)) {<br>+                        ast_debug(3, "Following early media fork with different To tags\n");<br>+               } else {<br>+                     ast_debug(3, "Not following early media fork with different To tags\n");<br>+                   bail = 1;<br>+            }<br>+            if ((inv->following_fork_same_tag && session->endpoint->media.rtp.follow_early_media_fork_same_tag)) {<br>+                      ast_debug(3, "Following early media fork with same To tag\n");<br>+                     bail = 0;<br>+            } else {<br>+                     ast_debug(3, "Not following early media fork with same To tag\n");<br>+                 bail = 1;<br>+            }<br>+            if (bail) {<br>+                  return;<br>+              }<br>+    }<br>+<br>  if ((status != PJ_SUCCESS) || (pjmedia_sdp_neg_get_active_local(inv->neg, &local) != PJ_SUCCESS) ||<br>            (pjmedia_sdp_neg_get_active_remote(inv->neg, &remote) != PJ_SUCCESS)) {<br>                ast_channel_hangupcause_set(session->channel, AST_CAUSE_BEARERCAPABILITY_NOTAVAIL);<br>diff --git a/third-party/pjproject/patches/0100-sip_inv-Add-ability-to-accept-updated-media-on-same-.patch b/third-party/pjproject/patches/0100-sip_inv-Add-ability-to-accept-updated-media-on-same-.patch<br>new file mode 100644<br>index 0000000..8a75751<br>--- /dev/null<br>+++ b/third-party/pjproject/patches/0100-sip_inv-Add-ability-to-accept-updated-media-on-same-.patch<br>@@ -0,0 +1,132 @@<br>+From c57874baacd2b41cd42cd93e784cfb96ac9a6012 Mon Sep 17 00:00:00 2001<br>+From: George Joseph <gjoseph@digium.com><br>+Date: Mon, 18 Jun 2018 20:16:54 -0600<br>+Subject: [PATCH] sip_inv:  Add ability to accept updated media on same To tag<br>+<br>+Currently, setting pjsip_cfg()->endpt.follow_early_media_fork allows<br>+sip_inv to process media updates when the To tag is different.  There<br>+are some cases where media updates need to be processed when the tags<br>+are the same.  Since removing the requirement for different tags would<br>+change default behavior, a new option "follow_early_media_fork_same_tag"<br>+has been added along with a new pjsip_inv_session flag<br>+"following_fork_same_tag" to indicate under which condition we're<br>+following.<br>+---<br>+ pjsip/include/pjsip-ua/sip_inv.h |  3 +++<br>+ pjsip/include/pjsip/sip_config.h | 23 +++++++++++++++++++++++<br>+ pjsip/src/pjsip-ua/sip_inv.c     | 15 ++++++++-------<br>+ pjsip/src/pjsip/sip_config.c     |  3 ++-<br>+ 4 files changed, 36 insertions(+), 8 deletions(-)<br>+<br>+diff --git a/pjsip/include/pjsip-ua/sip_inv.h b/pjsip/include/pjsip-ua/sip_inv.h<br>+index 1bb7b8adc..1509831d8 100644<br>+--- a/pjsip/include/pjsip-ua/sip_inv.h<br>++++ b/pjsip/include/pjsip-ua/sip_inv.h<br>+@@ -442,6 +442,9 @@ struct pjsip_inv_session<br>+     pj_bool_t          following_fork;            /**< Internal, following<br>+                                                       forked media?      */<br>+     pj_atomic_t               *ref_cnt;                   /**< Reference counter. */<br>++    pj_bool_t            following_fork_same_tag;    /**< Internal, following<br>++                                                          forked media same<br>++                                                          tag?              */<br>+ };<br>+ <br>+ <br>+diff --git a/pjsip/include/pjsip/sip_config.h b/pjsip/include/pjsip/sip_config.h<br>+index 04871c98a..777d73279 100644<br>+--- a/pjsip/include/pjsip/sip_config.h<br>++++ b/pjsip/include/pjsip/sip_config.h<br>+@@ -170,6 +170,14 @@ typedef struct pjsip_cfg_t<br>+       */<br>+  pj_bool_t use_compact_form;<br>+ <br>++        /**<br>++         * Enable call media session to always be updated to the latest<br>++         * received early media SDP when receiving forked early media<br>++         * (multiple 183 responses with SAME To tag).<br>++         *<br>++         * Default is PJSIP_FOLLOW_EARLY_MEDIA_FORK_SAME_TAG.<br>++         */<br>++        pj_bool_t follow_early_media_fork_same_tag;<br>+     } endpt;<br>+ <br>+     /** Transaction layer settings. */<br>+@@ -415,6 +423,21 @@ PJ_INLINE(pjsip_cfg_t*) pjsip_cfg(void)<br>+ #endif<br>+ <br>+ <br>++/**<br>++ * Specify whether the call media session should be updated to the latest<br>++ * received early media SDP when receiving forked early media (multiple 183<br>++ * responses with the SAME To tag).<br>++ *<br>++ * This option can also be controlled at run-time by the<br>++ * \a follow_early_media_fork_same_tag setting in pjsip_cfg_t.<br>++ *<br>++ * Default is PJ_FALSE.<br>++ */<br>++#ifndef PJSIP_FOLLOW_EARLY_MEDIA_FORK_SAME_TAG<br>++#   define PJSIP_FOLLOW_EARLY_MEDIA_FORK_SAME_TAG        PJ_FALSE<br>++#endif<br>++<br>++<br>+ /**<br>+  * Specify whether "alias" param should be added to the Via header<br>+  * in any outgoing request with connection oriented transport.<br>+diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c<br>+index 0173cb4cb..332147a62 100644<br>+--- a/pjsip/src/pjsip-ua/sip_inv.c<br>++++ b/pjsip/src/pjsip-ua/sip_inv.c<br>+@@ -2000,6 +2000,7 @@ static pj_status_t inv_check_sdp_in_incoming_msg( pjsip_inv_session *inv,<br>+ <br>+     /* Initialize info that we are following forked media */<br>+     inv->following_fork = PJ_FALSE;<br>++    inv->following_fork_same_tag = PJ_FALSE;<br>+ <br>+     /* MUST NOT do multiple SDP offer/answer in a single transaction,<br>+      * EXCEPT if:<br>+@@ -2025,12 +2026,11 @@ static pj_status_t inv_check_sdp_in_incoming_msg( pjsip_inv_session *inv,<br>+     * tag.<br>+          * See ticket #1644 and #1764 for forked early media case.<br>+         */<br>+- if (tsx->role == PJSIP_ROLE_UAC &&<br>+-           (st_code/100 == 2 ||<br>+-         (st_code/10 == 18 /* st_code == 18x */<br>+-              && pjsip_cfg()->endpt.follow_early_media_fork)) &&<br>+-      tsx_inv_data->done_early &&<br>+-      pj_stricmp(&tsx_inv_data->done_tag, &res_tag))<br>++       if (tsx->role == PJSIP_ROLE_UAC && tsx_inv_data->done_early &&<br>++            (st_code/100 == 2 || st_code/10 == 18) && /* st_code == 18x */<br>++              pjsip_cfg()->endpt.follow_early_media_fork &&<br>++            (pj_stricmp(&tsx_inv_data->done_tag, &res_tag) ||<br>++                pjsip_cfg()->endpt.follow_early_media_fork_same_tag))<br>+         {<br>+        const pjmedia_sdp_session *reoffer_sdp = NULL;<br>+ <br>+@@ -2054,7 +2054,8 @@ static pj_status_t inv_check_sdp_in_incoming_msg( pjsip_inv_session *inv,<br>+             return status;<br>+           }<br>+ <br>+-       inv->following_fork = PJ_TRUE;<br>++           inv->following_fork = !!pj_stricmp(&tsx_inv_data->done_tag, &res_tag);<br>++        inv->following_fork_same_tag = !pj_stricmp(&tsx_inv_data->done_tag, &res_tag);<br>+ <br>+         } else {<br>+ <br>+diff --git a/pjsip/src/pjsip/sip_config.c b/pjsip/src/pjsip/sip_config.c<br>+index fdeec2f6b..e29c341c5 100644<br>+--- a/pjsip/src/pjsip/sip_config.c<br>++++ b/pjsip/src/pjsip/sip_config.c<br>+@@ -35,7 +35,8 @@ pjsip_cfg_t pjsip_sip_cfg_var =<br>+        PJSIP_REQ_HAS_VIA_ALIAS,<br>+        PJSIP_RESOLVE_HOSTNAME_TO_GET_INTERFACE,<br>+        0,<br>+-       PJSIP_ENCODE_SHORT_HNAME<br>++       PJSIP_ENCODE_SHORT_HNAME,<br>++       PJSIP_FOLLOW_EARLY_MEDIA_FORK_SAME_TAG<br>+     },<br>+ <br>+     /* Transaction settings */<br>+-- <br>+2.14.4<br>+<br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/9200">change 9200</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/9200"/><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: I64d071942b79adb2f0a4e13137389b19404fe3d6 </div>
<div style="display:none"> Gerrit-Change-Number: 9200 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: George Joseph <gjoseph@digium.com> </div>