<p>Michael Bradeen has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/17710">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">pjsip: Upgrade bundled version to pjproject 2.11.1<br><br>res/res_pjsip_pidf_body_generator: update pidf body generator to add<br>note to both the presence (previous behavior) as well as the nested<br>tuple so notified uas can find it in either place.<br><br>third-party/versions.mak: increment pjproject version to 2.11.1<br><br>third-party/pjproject: Removes the following patches as they have<br>been resolved in version 2.11.1<br>0000-solaris.patch<br>0011-sip_inv_patch.patch<br>0020-pjlib_cancel_timer_0.patch<br>0050-fix-race-parallel-build.patch<br>0060-clone-sdp-for-sip-timer-refresh-invite.patch<br>0070-fix-incorrect-copying-when-creating-cancel.patch<br>0080-fix-sdp-neg-modify-local-offer.patch<br>0110-tls-parent-listener-destroyed.patch<br>0111-ssl-premature-destroy.patch<br><br>ASTERISK-29351<br><br>Change-Id: If610e36b66d6137a1bf40e2a47de27c94252efd8<br>---<br>M res/res_pjsip_pidf_body_generator.c<br>D third-party/pjproject/patches/0000-solaris.patch<br>D third-party/pjproject/patches/0011-sip_inv_patch.patch<br>D third-party/pjproject/patches/0020-pjlib_cancel_timer_0.patch<br>D third-party/pjproject/patches/0050-fix-race-parallel-build.patch<br>D third-party/pjproject/patches/0060-clone-sdp-for-sip-timer-refresh-invite.patch<br>D third-party/pjproject/patches/0070-fix-incorrect-copying-when-creating-cancel.patch<br>D third-party/pjproject/patches/0080-fix-sdp-neg-modify-local-offer.patch<br>D third-party/pjproject/patches/0110-tls-parent-listener-destroyed.patch<br>D third-party/pjproject/patches/0111-ssl-premature-destroy.patch<br>A third-party/pjproject/pjproject-2.11.1.tar.bz2.md5<br>M third-party/versions.mak<br>12 files changed, 15 insertions(+), 686 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/10/17710/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/res/res_pjsip_pidf_body_generator.c b/res/res_pjsip_pidf_body_generator.c</span><br><span>index 8bc062e..f7335f0 100644</span><br><span>--- a/res/res_pjsip_pidf_body_generator.c</span><br><span>+++ b/res/res_pjsip_pidf_body_generator.c</span><br><span>@@ -60,6 +60,10 @@</span><br><span>        ast_sip_presence_exten_state_to_str(state_data->exten_state, &statestring,</span><br><span>                    &pidfstate, &pidfnote, &local_state, 0);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      /* Setting the note both here inside the presence and then again inside the nested</span><br><span style="color: hsl(120, 100%, 40%);">+     * tuple to cover the two places that a user agent may look for it (pjsip based</span><br><span style="color: hsl(120, 100%, 40%);">+        * in particular)</span><br><span style="color: hsl(120, 100%, 40%);">+      */</span><br><span>  if (!pjpidf_pres_add_note(state_data->pool, pres, pj_cstr(&note, pidfnote))) {</span><br><span>                ast_log(LOG_WARNING, "Unable to add note to PIDF presence\n");</span><br><span>             return -1;</span><br><span>@@ -71,6 +75,13 @@</span><br><span>              return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Second note insertion, this time within the tuple</span><br><span style="color: hsl(120, 100%, 40%);">+   */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!pjpidf_pres_add_note(state_data->pool, tuple, pj_cstr(&note, pidfnote))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                ast_log(LOG_WARNING, "Unable to add note to PIDF tuple\n");</span><br><span style="color: hsl(120, 100%, 40%);">+         return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  ast_sip_sanitize_xml(state_data->remote, sanitized, sizeof(sanitized));</span><br><span>   pjpidf_tuple_set_contact(state_data->pool, tuple, pj_cstr(&contact, sanitized));</span><br><span>      pjpidf_tuple_set_contact_prio(state_data->pool, tuple, pj_cstr(&priority, "1"));</span><br><span>diff --git a/third-party/pjproject/patches/0000-solaris.patch b/third-party/pjproject/patches/0000-solaris.patch</span><br><span>deleted file mode 100644</span><br><span>index 155cdbe..0000000</span><br><span>--- a/third-party/pjproject/patches/0000-solaris.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,135 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 1ac599a0f29500a15faf0dbbdc2565cc7dce2420 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Shaun Ruffell <sruffell@digium.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Fri, 7 Sep 2012 14:31:19 -0500</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 4/5] pjproject: Fix for Solaris builds. Do not undef s_addr.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-pjproject, in order to solve build problems on Windows [1], undefines s_addr in</span><br><span style="color: hsl(0, 100%, 40%);">-one of it's headers that is included in res_rtp_asterisk.c. On Solaris s_addr is</span><br><span style="color: hsl(0, 100%, 40%);">-not a structure member, but defined to map to the real strucuture member,</span><br><span style="color: hsl(0, 100%, 40%);">-therefore when building on Solaris it's possible to get build errors like:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    [CC] res_rtp_asterisk.c -> res_rtp_asterisk.o</span><br><span style="color: hsl(0, 100%, 40%);">-    In file included from /export/home/admin/asterisk-11-svn/include/asterisk/stun.h:29,</span><br><span style="color: hsl(0, 100%, 40%);">-                     from res_rtp_asterisk.c:51:</span><br><span style="color: hsl(0, 100%, 40%);">-    /export/home/admin/asterisk-11-svn/include/asterisk/network.h: In function `inaddrcmp':</span><br><span style="color: hsl(0, 100%, 40%);">-    /export/home/admin/asterisk-11-svn/include/asterisk/network.h:92: error: structure has no member named `s_addr'</span><br><span style="color: hsl(0, 100%, 40%);">-    /export/home/admin/asterisk-11-svn/include/asterisk/network.h:92: error: structure has no member named `s_addr'</span><br><span style="color: hsl(0, 100%, 40%);">-    res_rtp_asterisk.c: In function `ast_rtp_on_ice_tx_pkt':</span><br><span style="color: hsl(0, 100%, 40%);">-    res_rtp_asterisk.c:706: warning: dereferencing type-punned pointer will break strict-aliasing rules</span><br><span style="color: hsl(0, 100%, 40%);">-    res_rtp_asterisk.c:710: warning: dereferencing type-punned pointer will break strict-aliasing rules</span><br><span style="color: hsl(0, 100%, 40%);">-    res_rtp_asterisk.c: In function `rtp_add_candidates_to_ice':</span><br><span style="color: hsl(0, 100%, 40%);">-    res_rtp_asterisk.c:1085: error: structure has no member named `s_addr'</span><br><span style="color: hsl(0, 100%, 40%);">-    make[2]: *** [res_rtp_asterisk.o] Error 1</span><br><span style="color: hsl(0, 100%, 40%);">-    make[1]: *** [res] Error 2</span><br><span style="color: hsl(0, 100%, 40%);">-    make[1]: Leaving directory `/export/home/admin/asterisk-11-svn'</span><br><span style="color: hsl(0, 100%, 40%);">-    gmake: *** [_cleantest_all] Error 2</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Unfortunately, in order to make this work, I also had to make sure pjproject</span><br><span style="color: hsl(0, 100%, 40%);">-only used the typdef pj_in_addr and not the struct pj_in_addr so that when</span><br><span style="color: hsl(0, 100%, 40%);">-building Asterisk I could "typedef struct in_addr pj_in_addr". It's possible</span><br><span style="color: hsl(0, 100%, 40%);">-then that the library and users of those interfaces in Asterisk have a different</span><br><span style="color: hsl(0, 100%, 40%);">-idea about the type of the argument. While on the surface it looks like they are</span><br><span style="color: hsl(0, 100%, 40%);">-all 32 bit big endian values.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-[1] http://trac.pjsip.org/repos/changeset/484</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Reported-by: Ben Klang</span><br><span style="color: hsl(0, 100%, 40%);">-(issues ASTERISK-20366)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Updated by ASTERISK-27997</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/include/pj/sock.h         | 8 +++++++-</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/src/pj/sock_bsd.c         | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/src/pj/sock_symbian.cpp   | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/src/pj/sock_uwp.cpp       | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- pjsip/src/test/transport_test.c | 2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- 5 files changed, 11 insertions(+), 5 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/include/pj/sock.h b/pjlib/include/pj/sock.h</span><br><span style="color: hsl(0, 100%, 40%);">-index 4daf298..c35833c 100644</span><br><span>---- a/pjlib/include/pj/sock.h</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/include/pj/sock.h</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -484,6 +484,7 @@ typedef enum pj_socket_sd_type</span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">- #define PJ_INVALID_SOCKET   (-1)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+#ifndef _ASTERISK_H</span><br><span style="color: hsl(0, 100%, 40%);">- /* Must undefine s_addr because of pj_in_addr below */</span><br><span style="color: hsl(0, 100%, 40%);">- #undef s_addr</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -495,6 +496,11 @@ typedef struct pj_in_addr</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_uint32_t       s_addr;         /**< The 32bit IP address.       */</span><br><span style="color: hsl(0, 100%, 40%);">- } pj_in_addr;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+#else</span><br><span style="color: hsl(0, 100%, 40%);">-+#include <sys/types.h></span><br><span style="color: hsl(0, 100%, 40%);">-+#include <netinet/in.h></span><br><span style="color: hsl(0, 100%, 40%);">-+typedef struct in_addr pj_in_addr;</span><br><span style="color: hsl(0, 100%, 40%);">-+#endif</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- /**</span><br><span style="color: hsl(0, 100%, 40%);">-  * Maximum length of text representation of an IPv4 address.</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -712,7 +718,7 @@ PJ_DECL(char*) pj_inet_ntoa(pj_in_addr inaddr);</span><br><span style="color: hsl(0, 100%, 40%);">-  *</span><br><span style="color: hsl(0, 100%, 40%);">-  * @return     nonzero if the address is valid, zero if not.</span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">--PJ_DECL(int) pj_inet_aton(const pj_str_t *cp, struct pj_in_addr *inp);</span><br><span style="color: hsl(0, 100%, 40%);">-+PJ_DECL(int) pj_inet_aton(const pj_str_t *cp, pj_in_addr *inp);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- /**</span><br><span style="color: hsl(0, 100%, 40%);">-  * This function converts an address in its standard text presentation form</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/sock_bsd.c b/pjlib/src/pj/sock_bsd.c</span><br><span style="color: hsl(0, 100%, 40%);">-index e416991..940fce1 100644</span><br><span>---- a/pjlib/src/pj/sock_bsd.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/sock_bsd.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -244,7 +244,7 @@ PJ_DEF(char*) pj_inet_ntoa(pj_in_addr inaddr)</span><br><span style="color: hsl(0, 100%, 40%);">-  * numbers-and-dots notation into binary data and stores it in the structure</span><br><span style="color: hsl(0, 100%, 40%);">-  * that inp points to. </span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">--PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, struct pj_in_addr *inp)</span><br><span style="color: hsl(0, 100%, 40%);">-+PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, pj_in_addr *inp)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     char tempaddr[PJ_INET_ADDRSTRLEN];</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/sock_symbian.cpp b/pjlib/src/pj/sock_symbian.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-index 09239b0..e72bbda 100644</span><br><span>---- a/pjlib/src/pj/sock_symbian.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/sock_symbian.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -299,7 +299,7 @@ PJ_DEF(char*) pj_inet_ntoa(pj_in_addr inaddr)</span><br><span style="color: hsl(0, 100%, 40%);">-  * numbers-and-dots notation into binary data and stores it in the structure</span><br><span style="color: hsl(0, 100%, 40%);">-  * that inp points to. </span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">--PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, struct pj_in_addr *inp)</span><br><span style="color: hsl(0, 100%, 40%);">-+PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, pj_in_addr *inp)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     enum { MAXIPLEN = PJ_INET_ADDRSTRLEN };</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/sock_uwp.cpp b/pjlib/src/pj/sock_uwp.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-index 876c328..40250bf 100644</span><br><span>---- a/pjlib/src/pj/sock_uwp.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/sock_uwp.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -933,7 +933,7 @@ PJ_DEF(char*) pj_inet_ntoa(pj_in_addr inaddr)</span><br><span style="color: hsl(0, 100%, 40%);">-  * numbers-and-dots notation into binary data and stores it in the structure</span><br><span style="color: hsl(0, 100%, 40%);">-  * that inp points to. </span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">--PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, struct pj_in_addr *inp)</span><br><span style="color: hsl(0, 100%, 40%);">-+PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, pj_in_addr *inp)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     char tempaddr[PJ_INET_ADDRSTRLEN];</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/src/test/transport_test.c b/pjsip/src/test/transport_test.c</span><br><span style="color: hsl(0, 100%, 40%);">-index e5083d1..c429cc7 100644</span><br><span>---- a/pjsip/src/test/transport_test.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/src/test/transport_test.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -35,7 +35,7 @@ int generic_transport_test(pjsip_transport *tp)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Check that local address name is valid. */</span><br><span style="color: hsl(0, 100%, 40%);">-     {</span><br><span style="color: hsl(0, 100%, 40%);">--      struct pj_in_addr addr;</span><br><span style="color: hsl(0, 100%, 40%);">-+        pj_in_addr addr;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-       if (pj_inet_pton(pj_AF_INET(), &tp->local_name.host,</span><br><span style="color: hsl(0, 100%, 40%);">-                      &addr) == PJ_SUCCESS)</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.7.4</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/pjproject/patches/0011-sip_inv_patch.patch b/third-party/pjproject/patches/0011-sip_inv_patch.patch</span><br><span>deleted file mode 100644</span><br><span>index 7f77c74..0000000</span><br><span>--- a/third-party/pjproject/patches/0011-sip_inv_patch.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,39 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-commit c3c1bf45cae2a35003aa16c267d59f97027f9c5e</span><br><span style="color: hsl(0, 100%, 40%);">-Author: Kevin Harwell <kharwell@digium.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date:   Thu Jun 11 11:11:13 2020 -0500</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    sip_inv - fix invite session ref count crash</span><br><span style="color: hsl(0, 100%, 40%);">-    </span><br><span style="color: hsl(0, 100%, 40%);">-    Ensure the session's ref count is only decremented under proper conditons.</span><br><span style="color: hsl(0, 100%, 40%);">-    </span><br><span style="color: hsl(0, 100%, 40%);">-    For more details see the following issue report:</span><br><span style="color: hsl(0, 100%, 40%);">-    https://github.com/pjsip/pjproject/issues/2443</span><br><span style="color: hsl(0, 100%, 40%);">-    </span><br><span style="color: hsl(0, 100%, 40%);">-    Patch supplied by sauwming</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c</span><br><span style="color: hsl(0, 100%, 40%);">-index ca225015b..7c11b1c8e 100644</span><br><span>---- a/pjsip/src/pjsip-ua/sip_inv.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/src/pjsip-ua/sip_inv.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -323,9 +323,19 @@ static void inv_set_state(pjsip_inv_session *inv, pjsip_inv_state state,</span><br><span style="color: hsl(0, 100%, 40%);">-       (*mod_inv.cb.on_state_changed)(inv, e);</span><br><span style="color: hsl(0, 100%, 40%);">-     pjsip_inv_dec_ref(inv);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    /* Only decrement when previous state is not already DISCONNECTED */</span><br><span style="color: hsl(0, 100%, 40%);">-+    /* The above callback may change the state, so we need to be careful here</span><br><span style="color: hsl(0, 100%, 40%);">-+     * and only decrement inv under the following conditions:</span><br><span style="color: hsl(0, 100%, 40%);">-+     * 1. If the state parameter is DISCONNECTED, and previous state is not</span><br><span style="color: hsl(0, 100%, 40%);">-+     *    already DISCONNECTED.</span><br><span style="color: hsl(0, 100%, 40%);">-+     *    This is to make sure that dec_ref() is not called more than once.</span><br><span style="color: hsl(0, 100%, 40%);">-+     * 2. If current state is PJSIP_INV_STATE_DISCONNECTED.</span><br><span style="color: hsl(0, 100%, 40%);">-+     *    This is to make sure that dec_ref() is not called if user restarts</span><br><span style="color: hsl(0, 100%, 40%);">-+     *    inv within the callback. Note that this check must be last since</span><br><span style="color: hsl(0, 100%, 40%);">-+     *    inv may have already been destroyed.</span><br><span style="color: hsl(0, 100%, 40%);">-+     */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (state == PJSIP_INV_STATE_DISCONNECTED &&</span><br><span style="color: hsl(0, 100%, 40%);">--  prev_state != PJSIP_INV_STATE_DISCONNECTED) </span><br><span style="color: hsl(0, 100%, 40%);">-+   prev_state != PJSIP_INV_STATE_DISCONNECTED &&</span><br><span style="color: hsl(0, 100%, 40%);">-+  inv->state == PJSIP_INV_STATE_DISCONNECTED) </span><br><span style="color: hsl(0, 100%, 40%);">-     {</span><br><span style="color: hsl(0, 100%, 40%);">-   pjsip_inv_dec_ref(inv);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span>diff --git a/third-party/pjproject/patches/0020-pjlib_cancel_timer_0.patch b/third-party/pjproject/patches/0020-pjlib_cancel_timer_0.patch</span><br><span>deleted file mode 100644</span><br><span>index 09f72d8..0000000</span><br><span>--- a/third-party/pjproject/patches/0020-pjlib_cancel_timer_0.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,39 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-commit 40dd48d10911f4ff9b8dfbf16428fbc9acc434ba</span><br><span style="color: hsl(0, 100%, 40%);">-Author: Riza Sulistyo <trengginas@users.noreply.github.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date:   Thu Jul 9 17:47:24 2020 +0700</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    Modify timer_id check on cancel() (#2463)</span><br><span style="color: hsl(0, 100%, 40%);">-    </span><br><span style="color: hsl(0, 100%, 40%);">-    * modify timer_id check on cancel().</span><br><span style="color: hsl(0, 100%, 40%);">-    </span><br><span style="color: hsl(0, 100%, 40%);">-    * modification based on comments.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/include/pj/timer.h b/pjlib/include/pj/timer.h</span><br><span style="color: hsl(0, 100%, 40%);">-index b738a6e76..4b76ab65d 100644</span><br><span>---- a/pjlib/include/pj/timer.h</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/include/pj/timer.h</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -120,7 +120,10 @@ typedef struct pj_timer_entry</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /** </span><br><span style="color: hsl(0, 100%, 40%);">-      * Internal unique timer ID, which is assigned by the timer heap. </span><br><span style="color: hsl(0, 100%, 40%);">--     * Application should not touch this ID.</span><br><span style="color: hsl(0, 100%, 40%);">-+     * Positive values indicate that the timer entry is running, </span><br><span style="color: hsl(0, 100%, 40%);">-+     * while -1 means that it's not. Any other value may indicate that it </span><br><span style="color: hsl(0, 100%, 40%);">-+     * hasn't been properly initialised or is in a bad state.</span><br><span style="color: hsl(0, 100%, 40%);">-+     * Application should not touch this ID. </span><br><span style="color: hsl(0, 100%, 40%);">-      */</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_timer_id_t _timer_id;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/timer.c b/pjlib/src/pj/timer.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 66516fce8..34966c481 100644</span><br><span>---- a/pjlib/src/pj/timer.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/timer.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -535,7 +535,7 @@ static int cancel( pj_timer_heap_t *ht,</span><br><span style="color: hsl(0, 100%, 40%);">-     PJ_CHECK_STACK();</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     // Check to see if the timer_id is out of range</span><br><span style="color: hsl(0, 100%, 40%);">--    if (entry->_timer_id < 0 || (pj_size_t)entry->_timer_id > ht->max_size) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (entry->_timer_id < 1 || (pj_size_t)entry->_timer_id >= ht->max_size) {</span><br><span style="color: hsl(0, 100%, 40%);">-        entry->_timer_id = -1;</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span>diff --git a/third-party/pjproject/patches/0050-fix-race-parallel-build.patch b/third-party/pjproject/patches/0050-fix-race-parallel-build.patch</span><br><span>deleted file mode 100644</span><br><span>index 674baa2..0000000</span><br><span>--- a/third-party/pjproject/patches/0050-fix-race-parallel-build.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,72 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 78683646c8bc670ec730a42494e075f671a08e28 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Guido Falsi <mad@madpilot.net></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Mon, 11 May 2020 08:50:39 +0200</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] Fix race condition in parallel builds (#2426)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-* Some targets residing in `OBJDIRS` are missing a dependency on that directory, which results in a race condition, causing build to fail sometimes due to the directory not existing when running parallel builds.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-* The `PJSUA_LIB` variable is not defined anywhere, resulting in an empty value, and no correct dependency on the pjsua shared library for `pjsua2`. The correct variable seems to be `PJSUA_LIB_LIB`, defined at the start of this same `Makefile`.</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- build/rules.mak      | 12 ++++++------</span><br><span style="color: hsl(0, 100%, 40%);">- pjsip/build/Makefile |  2 +-</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 7 insertions(+), 7 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/build/rules.mak b/build/rules.mak</span><br><span style="color: hsl(0, 100%, 40%);">-index 8fa98655e..912199c41 100644</span><br><span>---- a/build/rules.mak</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/build/rules.mak</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -129,7 +129,7 @@ endif</span><br><span style="color: hsl(0, 100%, 40%);">- $(OBJDIR)/$(app).o: $(OBJDIRS) $(OBJS)</span><br><span style="color: hsl(0, 100%, 40%);">-   $(CROSS_COMPILE)ld -r -o $@ $(OBJS)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--$(OBJDIR)/$(app).ko: $(OBJDIR)/$(app).o</span><br><span style="color: hsl(0, 100%, 40%);">-+$(OBJDIR)/$(app).ko: $(OBJDIR)/$(app).o | $(OBJDIRS)</span><br><span style="color: hsl(0, 100%, 40%);">-       @echo Creating kbuild Makefile...</span><br><span style="color: hsl(0, 100%, 40%);">-       @echo "# Our module name:" > $(OBJDIR)/Makefile</span><br><span style="color: hsl(0, 100%, 40%);">-    @echo 'obj-m += $(app).o' >> $(OBJDIR)/Makefile</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -154,27 +154,27 @@ $(OBJDIR)/$(app).ko: $(OBJDIR)/$(app).o</span><br><span style="color: hsl(0, 100%, 40%);">- ../lib/$(app).ko: $(LIB) $(OBJDIR)/$(app).ko</span><br><span style="color: hsl(0, 100%, 40%);">-         cp $(OBJDIR)/$(app).ko ../lib</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.m</span><br><span style="color: hsl(0, 100%, 40%);">-+$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.m | $(OBJDIRS)</span><br><span style="color: hsl(0, 100%, 40%);">-     $(CC) $($(APP)_CFLAGS) \</span><br><span style="color: hsl(0, 100%, 40%);">-                $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \</span><br><span style="color: hsl(0, 100%, 40%);">-           $(subst /,$(HOST_PSEP),$<) </span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.c</span><br><span style="color: hsl(0, 100%, 40%);">-+$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.c | $(OBJDIRS)</span><br><span style="color: hsl(0, 100%, 40%);">-    $(CC) $($(APP)_CFLAGS) \</span><br><span style="color: hsl(0, 100%, 40%);">-                $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \</span><br><span style="color: hsl(0, 100%, 40%);">-           $(subst /,$(HOST_PSEP),$<) </span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.S</span><br><span style="color: hsl(0, 100%, 40%);">-+$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.S | $(OBJDIRS)</span><br><span style="color: hsl(0, 100%, 40%);">-    $(CC) $($(APP)_CFLAGS) \</span><br><span style="color: hsl(0, 100%, 40%);">-                $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \</span><br><span style="color: hsl(0, 100%, 40%);">-           $(subst /,$(HOST_PSEP),$<) </span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-+$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cpp | $(OBJDIRS)</span><br><span style="color: hsl(0, 100%, 40%);">-        $(CXX) $($(APP)_CXXFLAGS) \</span><br><span style="color: hsl(0, 100%, 40%);">-             $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \</span><br><span style="color: hsl(0, 100%, 40%);">-           $(subst /,$(HOST_PSEP),$<)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cc</span><br><span style="color: hsl(0, 100%, 40%);">-+$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cc | $(OBJDIRS)</span><br><span style="color: hsl(0, 100%, 40%);">-   $(CXX) $($(APP)_CXXFLAGS) \</span><br><span style="color: hsl(0, 100%, 40%);">-             $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \</span><br><span style="color: hsl(0, 100%, 40%);">-           $(subst /,$(HOST_PSEP),$<)</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/build/Makefile b/pjsip/build/Makefile</span><br><span style="color: hsl(0, 100%, 40%);">-index b85c7817a..20777909f 100644</span><br><span>---- a/pjsip/build/Makefile</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/build/Makefile</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -262,7 +262,7 @@ $(PJSUA_LIB_LIB) $(PJSUA_LIB_SONAME): $(PJSIP_LIB) $(PJSIP_SONAME) $(PJSIP_SIMPL</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- pjsua2-lib: $(PJSUA2_LIB_LIB)</span><br><span style="color: hsl(0, 100%, 40%);">- $(PJSUA2_LIB_SONAME): $(PJSUA2_LIB_LIB)</span><br><span style="color: hsl(0, 100%, 40%);">--$(PJSUA2_LIB_LIB) $(PJSUA2_LIB_SONAME): $(PJSUA_LIB) $(PSJUA_LIB_SONAME) $(PJSIP_LIB) $(PJSIP_SONAME) $(PJSIP_SIMPLE_LIB) $(PJSIP_SIMPLE_SONAME) $(PJSIP_UA_LIB) $(PJSIP_UA_SONAME)</span><br><span style="color: hsl(0, 100%, 40%);">-+$(PJSUA2_LIB_LIB) $(PJSUA2_LIB_SONAME): $(PJSUA_LIB_LIB) $(PJSUA_LIB_SONAME) $(PJSIP_LIB) $(PJSIP_SONAME) $(PJSIP_SIMPLE_LIB) $(PJSIP_SIMPLE_SONAME) $(PJSIP_UA_LIB) $(PJSIP_UA_SONAME)</span><br><span style="color: hsl(0, 100%, 40%);">-   $(MAKE) -f $(RULES_MAK) APP=PJSUA2_LIB app=pjsua2-lib $(subst /,$(HOST_PSEP),$(LIBDIR)/$@)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- pjsip-test: $(TEST_EXE)</span><br><span>diff --git a/third-party/pjproject/patches/0060-clone-sdp-for-sip-timer-refresh-invite.patch b/third-party/pjproject/patches/0060-clone-sdp-for-sip-timer-refresh-invite.patch</span><br><span>deleted file mode 100644</span><br><span>index f1f180a..0000000</span><br><span>--- a/third-party/pjproject/patches/0060-clone-sdp-for-sip-timer-refresh-invite.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,28 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-diff -ur source.orig/pjmedia/src/pjmedia/sdp_neg.c source/pjmedia/src/pjmedia/sdp_neg.c</span><br><span>---- source.orig/pjmedia/src/pjmedia/sdp_neg.c     2020-07-02 10:35:42.022459904 +0200</span><br><span style="color: hsl(0, 100%, 40%);">-+++ source/pjmedia/src/pjmedia/sdp_neg.c     2020-07-02 10:33:24.996316867 +0200</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -906,7 +906,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-  * after receiving remote answer.</span><br><span style="color: hsl(0, 100%, 40%);">-  */</span><br><span style="color: hsl(0, 100%, 40%);">- static pj_status_t process_answer(pj_pool_t *pool,</span><br><span style="color: hsl(0, 100%, 40%);">--                                  pjmedia_sdp_session *offer,</span><br><span style="color: hsl(0, 100%, 40%);">-+                            pjmedia_sdp_session *local_offer,</span><br><span style="color: hsl(0, 100%, 40%);">-                               pjmedia_sdp_session *answer,</span><br><span style="color: hsl(0, 100%, 40%);">-                            pj_bool_t allow_asym,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   pjmedia_sdp_session **p_active)</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -914,10 +914,14 @@</span><br><span style="color: hsl(0, 100%, 40%);">-     unsigned omi = 0; /* Offer media index */</span><br><span style="color: hsl(0, 100%, 40%);">-     unsigned ami = 0; /* Answer media index */</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_bool_t has_active = PJ_FALSE;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pjmedia_sdp_session *offer;</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_status_t status;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Check arguments. */</span><br><span style="color: hsl(0, 100%, 40%);">--    PJ_ASSERT_RETURN(pool && offer && answer && p_active, PJ_EINVAL);</span><br><span style="color: hsl(0, 100%, 40%);">-+    PJ_ASSERT_RETURN(pool && local_offer && answer && p_active, PJ_EINVAL);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    /* Duplicate local offer SDP. */</span><br><span style="color: hsl(0, 100%, 40%);">-+    offer = pjmedia_sdp_session_clone(pool, local_offer);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Check that media count match between offer and answer */</span><br><span style="color: hsl(0, 100%, 40%);">-     // Ticket #527, different media count is allowed for more interoperability,</span><br><span>diff --git a/third-party/pjproject/patches/0070-fix-incorrect-copying-when-creating-cancel.patch b/third-party/pjproject/patches/0070-fix-incorrect-copying-when-creating-cancel.patch</span><br><span>deleted file mode 100644</span><br><span>index 95725c1..0000000</span><br><span>--- a/third-party/pjproject/patches/0070-fix-incorrect-copying-when-creating-cancel.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,37 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From ce18018cc17bef8f80c08686e3a7b28384ef3ba5 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: sauwming <ming@teluu.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Mon, 12 Oct 2020 13:31:25 +0800</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH] Fix incorrect copying of destination info when creating</span><br><span style="color: hsl(0, 100%, 40%);">- CANCEL (#2546)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- pjsip/src/pjsip/sip_util.c | 10 +++++-----</span><br><span style="color: hsl(0, 100%, 40%);">- 1 file changed, 5 insertions(+), 5 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/src/pjsip/sip_util.c b/pjsip/src/pjsip/sip_util.c</span><br><span style="color: hsl(0, 100%, 40%);">-index d10a6fa30..a1bf878ea 100644</span><br><span>---- a/pjsip/src/pjsip/sip_util.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/src/pjsip/sip_util.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -779,14 +779,14 @@ PJ_DEF(pj_status_t) pjsip_endpt_create_cancel( pjsip_endpoint *endpt,</span><br><span style="color: hsl(0, 100%, 40%);">-            pjsip_hdr_clone(cancel_tdata->pool, req_tdata->saved_strict_route);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    /* Copy the destination host name from the original request */</span><br><span style="color: hsl(0, 100%, 40%);">--    pj_strdup(cancel_tdata->pool, &cancel_tdata->dest_info.name,</span><br><span style="color: hsl(0, 100%, 40%);">--           &req_tdata->dest_info.name);</span><br><span style="color: hsl(0, 100%, 40%);">--</span><br><span style="color: hsl(0, 100%, 40%);">--    /* Finally copy the destination info from the original request */</span><br><span style="color: hsl(0, 100%, 40%);">-+    /* Copy the destination info from the original request */</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_memcpy(&cancel_tdata->dest_info, &req_tdata->dest_info,</span><br><span style="color: hsl(0, 100%, 40%);">-           sizeof(req_tdata->dest_info));</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+    /* Finally, copy the destination host name from the original request */</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_strdup(cancel_tdata->pool, &cancel_tdata->dest_info.name,</span><br><span style="color: hsl(0, 100%, 40%);">-+              &req_tdata->dest_info.name);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Done.</span><br><span style="color: hsl(0, 100%, 40%);">-      * Return the transmit buffer containing the CANCEL request.</span><br><span style="color: hsl(0, 100%, 40%);">-      */</span><br><span>--- </span><br><span style="color: hsl(0, 100%, 40%);">-2.25.1</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/third-party/pjproject/patches/0080-fix-sdp-neg-modify-local-offer.patch b/third-party/pjproject/patches/0080-fix-sdp-neg-modify-local-offer.patch</span><br><span>deleted file mode 100644</span><br><span>index c27a489..0000000</span><br><span>--- a/third-party/pjproject/patches/0080-fix-sdp-neg-modify-local-offer.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,33 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjmedia/src/pjmedia/sdp_neg.c b/pjmedia/src/pjmedia/sdp_neg.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 3b85b4273..a14009662 100644</span><br><span>---- a/pjmedia/src/pjmedia/sdp_neg.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjmedia/src/pjmedia/sdp_neg.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -304,7 +304,6 @@ PJ_DEF(pj_status_t) pjmedia_sdp_neg_modify_local_offer2(</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     pjmedia_sdp_session *new_offer;</span><br><span style="color: hsl(0, 100%, 40%);">-     pjmedia_sdp_session *old_offer;</span><br><span style="color: hsl(0, 100%, 40%);">--    char media_used[PJMEDIA_MAX_SDP_MEDIA];</span><br><span style="color: hsl(0, 100%, 40%);">-     unsigned oi; /* old offer media index */</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_status_t status;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -323,8 +322,19 @@ PJ_DEF(pj_status_t) pjmedia_sdp_neg_modify_local_offer2(</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Change state to STATE_LOCAL_OFFER */</span><br><span style="color: hsl(0, 100%, 40%);">-     neg->state = PJMEDIA_SDP_NEG_STATE_LOCAL_OFFER;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+    /* When there is no active local SDP in state PJMEDIA_SDP_NEG_STATE_DONE,</span><br><span style="color: hsl(0, 100%, 40%);">-+     * it means that the previous initial SDP nego must have been failed,</span><br><span style="color: hsl(0, 100%, 40%);">-+     * so we'll just set the local SDP offer here.</span><br><span style="color: hsl(0, 100%, 40%);">-+     */</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!neg->active_local_sdp) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        neg->initial_sdp_tmp = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+        neg->initial_sdp = pjmedia_sdp_session_clone(pool, local);</span><br><span style="color: hsl(0, 100%, 40%);">-+  neg->neg_local_sdp = pjmedia_sdp_session_clone(pool, local);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+       return PJ_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Init vars */</span><br><span style="color: hsl(0, 100%, 40%);">--    pj_bzero(media_used, sizeof(media_used));</span><br><span style="color: hsl(0, 100%, 40%);">-     old_offer = neg->active_local_sdp;</span><br><span style="color: hsl(0, 100%, 40%);">-     new_offer = pjmedia_sdp_session_clone(pool, local);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span>diff --git a/third-party/pjproject/patches/0110-tls-parent-listener-destroyed.patch b/third-party/pjproject/patches/0110-tls-parent-listener-destroyed.patch</span><br><span>deleted file mode 100644</span><br><span>index 81781f2..0000000</span><br><span>--- a/third-party/pjproject/patches/0110-tls-parent-listener-destroyed.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,166 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From bb92c97ea512aa0ef316c9b2335c7d57b84dfc9a Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Nanang Izzuddin <nanang@teluu.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Wed, 16 Jun 2021 12:12:35 +0700</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 1/2] - Avoid SSL socket parent/listener getting destroyed</span><br><span style="color: hsl(0, 100%, 40%);">- during handshake by increasing parent's reference count. - Add missing SSL</span><br><span style="color: hsl(0, 100%, 40%);">- socket close when the newly accepted SSL socket is discarded in SIP TLS</span><br><span style="color: hsl(0, 100%, 40%);">- transport.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/src/pj/ssl_sock_imp_common.c  | 44 +++++++++++++++++++++--------</span><br><span style="color: hsl(0, 100%, 40%);">- pjsip/src/pjsip/sip_transport_tls.c | 23 ++++++++++++++-</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 55 insertions(+), 12 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/ssl_sock_imp_common.c b/pjlib/src/pj/ssl_sock_imp_common.c</span><br><span style="color: hsl(0, 100%, 40%);">-index bc468bcb3..abec31805 100644</span><br><span>---- a/pjlib/src/pj/ssl_sock_imp_common.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/ssl_sock_imp_common.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -224,6 +224,8 @@ static pj_bool_t on_handshake_complete(pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Accepting */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (ssock->is_server) {</span><br><span style="color: hsl(0, 100%, 40%);">-+        pj_bool_t ret = PJ_TRUE;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-       if (status != PJ_SUCCESS) {</span><br><span style="color: hsl(0, 100%, 40%);">-         /* Handshake failed in accepting, destroy our self silently. */</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -241,6 +243,12 @@ static pj_bool_t on_handshake_complete(pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-                 status);</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+     /* Decrement ref count of parent */</span><br><span style="color: hsl(0, 100%, 40%);">-+            if (ssock->parent->param.grp_lock) {</span><br><span style="color: hsl(0, 100%, 40%);">-+         pj_grp_lock_dec_ref(ssock->parent->param.grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-+              ssock->parent = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+           }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-      /* Originally, this is a workaround for ticket #985. However,</span><br><span style="color: hsl(0, 100%, 40%);">-            * a race condition may occur in multiple worker threads</span><br><span style="color: hsl(0, 100%, 40%);">-         * environment when we are destroying SSL objects while other</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -284,23 +292,29 @@ static pj_bool_t on_handshake_complete(pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-        return PJ_FALSE;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-      /* Notify application the newly accepted SSL socket */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (ssock->param.cb.on_accept_complete2) {</span><br><span style="color: hsl(0, 100%, 40%);">--      pj_bool_t ret;</span><br><span style="color: hsl(0, 100%, 40%);">-          ret = (*ssock->param.cb.on_accept_complete2) </span><br><span style="color: hsl(0, 100%, 40%);">-                (ssock->parent, ssock, (pj_sockaddr_t*)&ssock->rem_addr, </span><br><span style="color: hsl(0, 100%, 40%);">-                     pj_sockaddr_get_len((pj_sockaddr_t*)&ssock->rem_addr), </span><br><span style="color: hsl(0, 100%, 40%);">-                  status);</span><br><span style="color: hsl(0, 100%, 40%);">--       if (ret == PJ_FALSE)</span><br><span style="color: hsl(0, 100%, 40%);">--               return PJ_FALSE;        </span><br><span style="color: hsl(0, 100%, 40%);">-        } else if (ssock->param.cb.on_accept_complete) {</span><br><span style="color: hsl(0, 100%, 40%);">--        pj_bool_t ret;</span><br><span style="color: hsl(0, 100%, 40%);">-          ret = (*ssock->param.cb.on_accept_complete)</span><br><span style="color: hsl(0, 100%, 40%);">-                    (ssock->parent, ssock, (pj_sockaddr_t*)&ssock->rem_addr,</span><br><span style="color: hsl(0, 100%, 40%);">-                       pj_sockaddr_get_len((pj_sockaddr_t*)&ssock->rem_addr));</span><br><span style="color: hsl(0, 100%, 40%);">--      if (ret == PJ_FALSE)</span><br><span style="color: hsl(0, 100%, 40%);">--               return PJ_FALSE;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+     /* Decrement ref count of parent and reset parent (we don't need it</span><br><span style="color: hsl(0, 100%, 40%);">-+         * anymore, right?).</span><br><span style="color: hsl(0, 100%, 40%);">-+    */</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (ssock->parent->param.grp_lock) {</span><br><span style="color: hsl(0, 100%, 40%);">-+         pj_grp_lock_dec_ref(ssock->parent->param.grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-+      ssock->parent = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+   }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+     if (ret == PJ_FALSE)</span><br><span style="color: hsl(0, 100%, 40%);">-+       return PJ_FALSE;</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Connecting */</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -864,9 +878,13 @@ static pj_bool_t asock_on_accept_complete (pj_activesock_t *asock,</span><br><span style="color: hsl(0, 100%, 40%);">-     if (status != PJ_SUCCESS)</span><br><span style="color: hsl(0, 100%, 40%);">-   goto on_return;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+    /* Set parent and add ref count (avoid parent destroy during handshake) */</span><br><span style="color: hsl(0, 100%, 40%);">-+    ssock->parent = ssock_parent;</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (ssock->parent->param.grp_lock)</span><br><span style="color: hsl(0, 100%, 40%);">-+      pj_grp_lock_add_ref(ssock->parent->param.grp_lock);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Update new SSL socket attributes */</span><br><span style="color: hsl(0, 100%, 40%);">-     ssock->sock = newsock;</span><br><span style="color: hsl(0, 100%, 40%);">--    ssock->parent = ssock_parent;</span><br><span style="color: hsl(0, 100%, 40%);">-     ssock->is_server = PJ_TRUE;</span><br><span style="color: hsl(0, 100%, 40%);">-     if (ssock_parent->cert) {</span><br><span style="color: hsl(0, 100%, 40%);">-    status = pj_ssl_sock_set_certificate(ssock, ssock->pool, </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -913,16 +931,20 @@ static pj_bool_t asock_on_accept_complete (pj_activesock_t *asock,</span><br><span style="color: hsl(0, 100%, 40%);">-     ssock->asock_rbuf = (void**)pj_pool_calloc(ssock->pool, </span><br><span style="color: hsl(0, 100%, 40%);">-                                                ssock->param.async_cnt,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              sizeof(void*));</span><br><span style="color: hsl(0, 100%, 40%);">--    if (!ssock->asock_rbuf)</span><br><span style="color: hsl(0, 100%, 40%);">--        return PJ_ENOMEM;</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!ssock->asock_rbuf) {</span><br><span style="color: hsl(0, 100%, 40%);">-+               status = PJ_ENOMEM;</span><br><span style="color: hsl(0, 100%, 40%);">-+            goto on_return;</span><br><span style="color: hsl(0, 100%, 40%);">-+        }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     for (i = 0; i<ssock->param.async_cnt; ++i) {</span><br><span style="color: hsl(0, 100%, 40%);">--      ssock->asock_rbuf[i] = (void*) pj_pool_alloc(</span><br><span style="color: hsl(0, 100%, 40%);">-+               ssock->asock_rbuf[i] = (void*) pj_pool_alloc(</span><br><span style="color: hsl(0, 100%, 40%);">-                                            ssock->pool, </span><br><span style="color: hsl(0, 100%, 40%);">-                                        ssock->param.read_buffer_size + </span><br><span style="color: hsl(0, 100%, 40%);">-                                             sizeof(read_data_t*));</span><br><span style="color: hsl(0, 100%, 40%);">--        if (!ssock->asock_rbuf[i])</span><br><span style="color: hsl(0, 100%, 40%);">--            return PJ_ENOMEM;</span><br><span style="color: hsl(0, 100%, 40%);">-+         if (!ssock->asock_rbuf[i]) {</span><br><span style="color: hsl(0, 100%, 40%);">-+                        status = PJ_ENOMEM;</span><br><span style="color: hsl(0, 100%, 40%);">-+                    goto on_return;</span><br><span style="color: hsl(0, 100%, 40%);">-+                }</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Create active socket */</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjsip/src/pjsip/sip_transport_tls.c b/pjsip/src/pjsip/sip_transport_tls.c</span><br><span style="color: hsl(0, 100%, 40%);">-index 17b7ae3de..ce524d53f 100644</span><br><span>---- a/pjsip/src/pjsip/sip_transport_tls.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjsip/src/pjsip/sip_transport_tls.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1325,9 +1325,26 @@ static pj_bool_t on_accept_complete2(pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-     PJ_UNUSED_ARG(src_addr_len);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     listener = (struct tls_listener*) pj_ssl_sock_get_user_data(ssock);</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!listener) {</span><br><span style="color: hsl(0, 100%, 40%);">-+   /* Listener already destroyed, e.g: after TCP accept but before SSL</span><br><span style="color: hsl(0, 100%, 40%);">-+     * handshake is completed.</span><br><span style="color: hsl(0, 100%, 40%);">-+      */</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (new_ssock && accept_status == PJ_SUCCESS) {</span><br><span style="color: hsl(0, 100%, 40%);">-+            /* Close the SSL socket if the accept op is successful */</span><br><span style="color: hsl(0, 100%, 40%);">-+      PJ_LOG(4,(THIS_FILE,</span><br><span style="color: hsl(0, 100%, 40%);">-+                     "Incoming TLS connection from %s (sock=%d) is discarded "</span><br><span style="color: hsl(0, 100%, 40%);">-+                    "because listener is already destroyed",</span><br><span style="color: hsl(0, 100%, 40%);">-+                     pj_sockaddr_print(src_addr, addr, sizeof(addr), 3),</span><br><span style="color: hsl(0, 100%, 40%);">-+                    new_ssock));</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+        pj_ssl_sock_close(new_ssock);</span><br><span style="color: hsl(0, 100%, 40%);">-+      }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+     return PJ_FALSE;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     if (accept_status != PJ_SUCCESS) {</span><br><span style="color: hsl(0, 100%, 40%);">-- if (listener && listener->tls_setting.on_accept_fail_cb) {</span><br><span style="color: hsl(0, 100%, 40%);">-+  if (listener->tls_setting.on_accept_fail_cb) {</span><br><span style="color: hsl(0, 100%, 40%);">-           pjsip_tls_on_accept_fail_param param;</span><br><span style="color: hsl(0, 100%, 40%);">-           pj_ssl_sock_info ssi;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1350,6 +1367,8 @@ static pj_bool_t on_accept_complete2(pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-     PJ_ASSERT_RETURN(new_ssock, PJ_TRUE);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     if (!listener->is_registered) {</span><br><span style="color: hsl(0, 100%, 40%);">-+   pj_ssl_sock_close(new_ssock);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-  if (listener->tls_setting.on_accept_fail_cb) {</span><br><span style="color: hsl(0, 100%, 40%);">-           pjsip_tls_on_accept_fail_param param;</span><br><span style="color: hsl(0, 100%, 40%);">-           pj_bzero(&param, sizeof(param));</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1401,6 +1420,8 @@ static pj_bool_t on_accept_complete2(pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-                         ssl_info.grp_lock, &tls);</span><br><span style="color: hsl(0, 100%, 40%);">-     </span><br><span style="color: hsl(0, 100%, 40%);">-     if (status != PJ_SUCCESS) {</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_ssl_sock_close(new_ssock);</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-  if (listener->tls_setting.on_accept_fail_cb) {</span><br><span style="color: hsl(0, 100%, 40%);">-           pjsip_tls_on_accept_fail_param param;</span><br><span style="color: hsl(0, 100%, 40%);">-           pj_bzero(&param, sizeof(param));</span><br><span>diff --git a/third-party/pjproject/patches/0111-ssl-premature-destroy.patch b/third-party/pjproject/patches/0111-ssl-premature-destroy.patch</span><br><span>deleted file mode 100644</span><br><span>index 9de2915..0000000</span><br><span>--- a/third-party/pjproject/patches/0111-ssl-premature-destroy.patch</span><br><span>+++ /dev/null</span><br><span>@@ -1,136 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-From 68c69f516f95df1faa42e5647e9ce7cfdc41ac38 Mon Sep 17 00:00:00 2001</span><br><span style="color: hsl(0, 100%, 40%);">-From: Nanang Izzuddin <nanang@teluu.com></span><br><span style="color: hsl(0, 100%, 40%);">-Date: Wed, 16 Jun 2021 12:15:29 +0700</span><br><span style="color: hsl(0, 100%, 40%);">-Subject: [PATCH 2/2] - Fix silly mistake: accepted active socket created</span><br><span style="color: hsl(0, 100%, 40%);">- without group lock in SSL socket. - Replace assertion with normal validation</span><br><span style="color: hsl(0, 100%, 40%);">- check of SSL socket instance in OpenSSL verification callback (verify_cb())</span><br><span style="color: hsl(0, 100%, 40%);">- to avoid crash, e.g: if somehow race condition with SSL socket destroy</span><br><span style="color: hsl(0, 100%, 40%);">- happens or OpenSSL application data index somehow gets corrupted.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>----</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/src/pj/ssl_sock_imp_common.c |  3 +-</span><br><span style="color: hsl(0, 100%, 40%);">- pjlib/src/pj/ssl_sock_ossl.c       | 45 +++++++++++++++++++++++++-----</span><br><span style="color: hsl(0, 100%, 40%);">- 2 files changed, 40 insertions(+), 8 deletions(-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/ssl_sock_imp_common.c b/pjlib/src/pj/ssl_sock_imp_common.c</span><br><span style="color: hsl(0, 100%, 40%);">-index bc468bcb3..c2b8a846b 100644</span><br><span>---- a/pjlib/src/pj/ssl_sock_imp_common.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/ssl_sock_imp_common.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -927,6 +927,7 @@ static pj_bool_t asock_on_accept_complete (pj_activesock_t *asock,</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Create active socket */</span><br><span style="color: hsl(0, 100%, 40%);">-     pj_activesock_cfg_default(&asock_cfg);</span><br><span style="color: hsl(0, 100%, 40%);">-+    asock_cfg.grp_lock = ssock->param.grp_lock;</span><br><span style="color: hsl(0, 100%, 40%);">-     asock_cfg.async_cnt = ssock->param.async_cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-     asock_cfg.concurrency = ssock->param.concurrency;</span><br><span style="color: hsl(0, 100%, 40%);">-     asock_cfg.whole_data = PJ_TRUE;</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -942,7 +943,7 @@ static pj_bool_t asock_on_accept_complete (pj_activesock_t *asock,</span><br><span style="color: hsl(0, 100%, 40%);">-       goto on_return;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-    pj_grp_lock_add_ref(glock);</span><br><span style="color: hsl(0, 100%, 40%);">--    asock_cfg.grp_lock = ssock->param.grp_lock = glock;</span><br><span style="color: hsl(0, 100%, 40%);">-+ ssock->param.grp_lock = glock;</span><br><span style="color: hsl(0, 100%, 40%);">-       pj_grp_lock_add_handler(ssock->param.grp_lock, ssock->pool, ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-                                ssl_on_destroy);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">-diff --git a/pjlib/src/pj/ssl_sock_ossl.c b/pjlib/src/pj/ssl_sock_ossl.c</span><br><span style="color: hsl(0, 100%, 40%);">-index a95b339a5..56841f80a 100644</span><br><span>---- a/pjlib/src/pj/ssl_sock_ossl.c</span><br><span style="color: hsl(0, 100%, 40%);">-+++ b/pjlib/src/pj/ssl_sock_ossl.c</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -327,7 +327,8 @@ static pj_status_t STATUS_FROM_SSL_ERR(char *action, pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-   ERROR_LOG("STATUS_FROM_SSL_ERR", err, ssock);</span><br><span style="color: hsl(0, 100%, 40%);">-     }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    ssock->last_err = err;</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (ssock)</span><br><span style="color: hsl(0, 100%, 40%);">-+    ssock->last_err = err;</span><br><span style="color: hsl(0, 100%, 40%);">-     return GET_STATUS_FROM_SSL_ERR(err);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -344,7 +345,8 @@ static pj_status_t STATUS_FROM_SSL_ERR2(char *action, pj_ssl_sock_t *ssock,</span><br><span style="color: hsl(0, 100%, 40%);">-     /* Dig for more from OpenSSL error queue */</span><br><span style="color: hsl(0, 100%, 40%);">-     SSLLogErrors(action, ret, err, len, ssock);</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--    ssock->last_err = ssl_err;</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (ssock)</span><br><span style="color: hsl(0, 100%, 40%);">-+ ssock->last_err = ssl_err;</span><br><span style="color: hsl(0, 100%, 40%);">-     return GET_STATUS_FROM_SSL_ERR(ssl_err);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -587,6 +589,13 @@ static pj_status_t init_openssl(void)</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Create OpenSSL application data index for SSL socket */</span><br><span style="color: hsl(0, 100%, 40%);">-     sslsock_idx = SSL_get_ex_new_index(0, "SSL socket", NULL, NULL, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+   if (sslsock_idx == -1) {</span><br><span style="color: hsl(0, 100%, 40%);">-+               status = STATUS_FROM_SSL_ERR2("Init", NULL, -1, ERR_get_error(), 0);</span><br><span style="color: hsl(0, 100%, 40%);">-+         PJ_LOG(1,(THIS_FILE,</span><br><span style="color: hsl(0, 100%, 40%);">-+                             "Fatal error: failed to get application data index for "</span><br><span style="color: hsl(0, 100%, 40%);">-+                             "SSL socket"));</span><br><span style="color: hsl(0, 100%, 40%);">-+            return status;</span><br><span style="color: hsl(0, 100%, 40%);">-+ }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     return status;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -614,21 +623,36 @@ static int password_cb(char *buf, int num, int rwflag, void *user_data)</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">--/* SSL password callback. */</span><br><span style="color: hsl(0, 100%, 40%);">-+/* SSL certificate verification result callback.</span><br><span style="color: hsl(0, 100%, 40%);">-+ * Note that this callback seems to be always called from library worker</span><br><span style="color: hsl(0, 100%, 40%);">-+ * thread, e.g: active socket on_read_complete callback, which should have</span><br><span style="color: hsl(0, 100%, 40%);">-+ * already been equipped with race condition avoidance mechanism (should not</span><br><span style="color: hsl(0, 100%, 40%);">-+ * be destroyed while callback is being invoked).</span><br><span style="color: hsl(0, 100%, 40%);">-+ */</span><br><span style="color: hsl(0, 100%, 40%);">- static int verify_cb(int preverify_ok, X509_STORE_CTX *x509_ctx)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">--    pj_ssl_sock_t *ssock;</span><br><span style="color: hsl(0, 100%, 40%);">--    SSL *ossl_ssl;</span><br><span style="color: hsl(0, 100%, 40%);">-+    pj_ssl_sock_t *ssock = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-+    SSL *ossl_ssl = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-     int err;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Get SSL instance */</span><br><span style="color: hsl(0, 100%, 40%);">-     ossl_ssl = X509_STORE_CTX_get_ex_data(x509_ctx, </span><br><span style="color: hsl(0, 100%, 40%);">-                              SSL_get_ex_data_X509_STORE_CTX_idx());</span><br><span style="color: hsl(0, 100%, 40%);">--    pj_assert(ossl_ssl);</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!ossl_ssl) {</span><br><span style="color: hsl(0, 100%, 40%);">-+       PJ_LOG(1,(THIS_FILE,</span><br><span style="color: hsl(0, 100%, 40%);">-+             "SSL verification callback failed to get SSL instance"));</span><br><span style="color: hsl(0, 100%, 40%);">-+  goto on_return;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Get SSL socket instance */</span><br><span style="color: hsl(0, 100%, 40%);">-     ssock = SSL_get_ex_data(ossl_ssl, sslsock_idx);</span><br><span style="color: hsl(0, 100%, 40%);">--    pj_assert(ssock);</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (!ssock) {</span><br><span style="color: hsl(0, 100%, 40%);">-+   /* SSL socket may have been destroyed */</span><br><span style="color: hsl(0, 100%, 40%);">-+       PJ_LOG(1,(THIS_FILE,</span><br><span style="color: hsl(0, 100%, 40%);">-+             "SSL verification callback failed to get SSL socket "</span><br><span style="color: hsl(0, 100%, 40%);">-+                "instance (sslsock_idx=%d).", sslsock_idx));</span><br><span style="color: hsl(0, 100%, 40%);">-+       goto on_return;</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Store verification status */</span><br><span style="color: hsl(0, 100%, 40%);">-     err = X509_STORE_CTX_get_error(x509_ctx);</span><br><span style="color: hsl(0, 100%, 40%);">-@@ -706,6 +730,7 @@ static int verify_cb(int preverify_ok, X509_STORE_CTX *x509_ctx)</span><br><span style="color: hsl(0, 100%, 40%);">-     if (PJ_FALSE == ssock->param.verify_peer)</span><br><span style="color: hsl(0, 100%, 40%);">-   preverify_ok = 1;</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-+on_return:</span><br><span style="color: hsl(0, 100%, 40%);">-     return preverify_ok;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-@@ -1213,6 +1238,12 @@ static void ssl_destroy(pj_ssl_sock_t *ssock)</span><br><span style="color: hsl(0, 100%, 40%);">- static void ssl_reset_sock_state(pj_ssl_sock_t *ssock)</span><br><span style="color: hsl(0, 100%, 40%);">- {</span><br><span style="color: hsl(0, 100%, 40%);">-     ossl_sock_t *ossock = (ossl_sock_t *)ssock;</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-+    /* Detach from SSL instance */</span><br><span style="color: hsl(0, 100%, 40%);">-+    if (ossock->ossl_ssl) {</span><br><span style="color: hsl(0, 100%, 40%);">-+      SSL_set_ex_data(ossock->ossl_ssl, sslsock_idx, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-+    }</span><br><span style="color: hsl(0, 100%, 40%);">-+</span><br><span style="color: hsl(0, 100%, 40%);">-     /**</span><br><span style="color: hsl(0, 100%, 40%);">-      * Avoid calling SSL_shutdown() if handshake wasn't completed.</span><br><span style="color: hsl(0, 100%, 40%);">-      * OpenSSL 1.0.2f complains if SSL_shutdown() is called during an</span><br><span>diff --git a/third-party/pjproject/pjproject-2.11.1.tar.bz2.md5 b/third-party/pjproject/pjproject-2.11.1.tar.bz2.md5</span><br><span>new file mode 100644</span><br><span>index 0000000..6a8a8ca</span><br><span>--- /dev/null</span><br><span>+++ b/third-party/pjproject/pjproject-2.11.1.tar.bz2.md5</span><br><span>@@ -0,0 +1,3 @@</span><br><span style="color: hsl(120, 100%, 40%);">+63de405e10da12bc5552afb5be454b2e  pjproject-2.11.1.tar.bz2</span><br><span style="color: hsl(120, 100%, 40%);">+d59a635a96587cb49a410e9285913b2a  pjproject-2.11.1.tar.gz</span><br><span style="color: hsl(120, 100%, 40%);">+ef2c0b4e7f0fa9f5dd895a091ceaa14b  pjproject-2.11.1.zip</span><br><span>diff --git a/third-party/versions.mak b/third-party/versions.mak</span><br><span>index fae41c6..943a5fb 100644</span><br><span>--- a/third-party/versions.mak</span><br><span>+++ b/third-party/versions.mak</span><br><span>@@ -1,2 +1,2 @@</span><br><span> JANSSON_VERSION = 2.12</span><br><span style="color: hsl(0, 100%, 40%);">-PJPROJECT_VERSION = 2.10</span><br><span style="color: hsl(120, 100%, 40%);">+PJPROJECT_VERSION = 2.11.1</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/17710">change 17710</a>. To unsubscribe, or for help writing mail filters, 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/c/asterisk/+/17710"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 16 </div>
<div style="display:none"> Gerrit-Change-Id: If610e36b66d6137a1bf40e2a47de27c94252efd8 </div>
<div style="display:none"> Gerrit-Change-Number: 17710 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Michael Bradeen <mbradeen@sangoma.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>