pjproject: bump to version 2.10
authorAndre Heider <a.heider@gmail.com>
Fri, 4 Sep 2020 06:07:30 +0000 (08:07 +0200)
committerAndre Heider <a.heider@gmail.com>
Fri, 4 Sep 2020 15:09:31 +0000 (17:09 +0200)
Sync with asterisk v16.13.0:
* update to v2.10
* update config_site.h settings
* sync patches

Signed-off-by: Andre Heider <a.heider@gmail.com>
14 files changed:
libs/pjproject/Makefile
libs/pjproject/patches/0004-config_site.patch
libs/pjproject/patches/0005-remove-hardcoded-lstdc++.patch
libs/pjproject/patches/0006-fix-pkg_config-file.patch
libs/pjproject/patches/0010-ssl_sock_ossl-sip_transport_tls-Add-peer-to-error-me.patch [deleted file]
libs/pjproject/patches/0011-sip_inv_patch.patch [new file with mode: 0644]
libs/pjproject/patches/0020-patch_cnonce_only_digits_option.patch [deleted file]
libs/pjproject/patches/0020-pjlib_cancel_timer_0.patch [new file with mode: 0644]
libs/pjproject/patches/0030-ssl-regression-fix.patch [deleted file]
libs/pjproject/patches/0031-transport-regression-fix.patch [deleted file]
libs/pjproject/patches/0040-ICE-Add-callback-for-finding-valid-pair.patch [deleted file]
libs/pjproject/patches/0040-brackets-in-via-received-params.patch [deleted file]
libs/pjproject/patches/0050-fix-race-parallel-build.patch [new file with mode: 0644]
libs/pjproject/patches/0060-clone-sdp-for-sip-timer-refresh-invite.patch [new file with mode: 0644]

index d13272758d5ac5090aeb75148eed739605e1107a..507a96d7265311fdaacd38775bb82be420737a89 100644 (file)
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=pjproject
-PKG_VERSION:=2.9
-PKG_RELEASE:=4
-
-PKG_SOURCE:=pjproject-$(PKG_VERSION).tar.bz2
-PKG_SOURCE_URL:=https://www.pjsip.org/release/$(PKG_VERSION)
-PKG_HASH:=d185ef7855c8ec07191dde92f54b65a7a4b7a6f7bf8c46f7af35ceeb1da2a636
+PKG_VERSION:=2.10
+PKG_RELEASE:=1
+
+# download "vX.Y.tar.gz" as "pjproject-vX.Y.tar.gz"
+PKG_SOURCE_URL_FILE:=$(PKG_VERSION).tar.gz
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_URL_FILE)
+PKG_SOURCE_URL:=https://github.com/pjsip/$(PKG_NAME)/archive
+PKG_HASH:=936a4c5b98601b52325463a397ddf11ab4106c6a7b04f8dc7cdd377efbb597de
 PKG_INSTALL:=1
 PKG_FIXUP:=autoreconf
 
index 7e1c897062be56c9031c223a435d4acda68cfdd4..b5e6d8666ef22f275aa85a00a26a0595c5487354 100644 (file)
 +  Enabling it will result in SEGFAULTS when URIs containing escape sequences are encountered.
 +*/
 +#undef PJSIP_UNESCAPE_IN_PLACE
-+#define PJSIP_MAX_PKT_LEN                     32000
++#define PJSIP_MAX_PKT_LEN                     65535
 +
 +#undef PJ_TODO
 +#define PJ_TODO(x)
 +
 +/* Defaults too low for WebRTC */
-+#define PJ_ICE_MAX_CAND 32
++#define PJ_ICE_MAX_CAND 64
 +#define PJ_ICE_MAX_CHECKS (PJ_ICE_MAX_CAND * PJ_ICE_MAX_CAND)
 +
 +/* Increase limits to allow more formats */
index e2bf8887b9a9f14c86a055d53fd02038b9dee8fa..d1db8da4814fbfb679dbc8f024c4c1d3ac2671ab 100644 (file)
@@ -1,6 +1,6 @@
 --- a/build.mak.in
 +++ b/build.mak.in
-@@ -292,7 +292,6 @@ export APP_LDLIBS := $(PJSUA_LIB_LDLIB)
+@@ -296,7 +296,6 @@ export APP_LDLIBS := $(PJSUA_LIB_LDLIB)
        $(PJLIB_LDLIB) \
        @LIBS@
  export APP_LDXXLIBS := $(PJSUA2_LIB_LDLIB) \
index e492577b3afb59a03f9cd4f77efb673b8469d00f..b8e9391493bdc777d08f1656059adb19fc01ce64 100644 (file)
@@ -13,7 +13,7 @@
  Description: Multimedia communication library
 --- a/build.mak.in
 +++ b/build.mak.in
-@@ -310,8 +310,7 @@ export PJ_LIBXX_FILES := $(APP_LIBXX_FIL
+@@ -314,8 +314,7 @@ export PJ_LIBXX_FILES := $(APP_LIBXX_FIL
  # And here are the variables to use if application is using the
  # library from the install location (i.e. --prefix)
  export PJ_INSTALL_DIR := @prefix@
diff --git a/libs/pjproject/patches/0010-ssl_sock_ossl-sip_transport_tls-Add-peer-to-error-me.patch b/libs/pjproject/patches/0010-ssl_sock_ossl-sip_transport_tls-Add-peer-to-error-me.patch
deleted file mode 100644 (file)
index 53bde48..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-From 85b28c475b5dfd3b01dafffd1d0b3dbb6f087829 Mon Sep 17 00:00:00 2001
-From: George Joseph <gjoseph@digium.com>
-Date: Thu, 27 Jun 2019 11:19:47 -0600
-Subject: [PATCH] ssl_sock_ossl/sip_transport_tls:  Add peer to error messages
-
-Added peer address:port to error messages in ssl_sock_ossl.
-Added peer hostname to error messages in sip_transport_tls.
----
- pjlib/src/pj/ssl_sock_ossl.c        | 22 +++++++++++++---------
- pjsip/src/pjsip/sip_transport_tls.c | 17 +++++++++--------
- 2 files changed, 22 insertions(+), 17 deletions(-)
-
-diff --git a/pjlib/src/pj/ssl_sock_ossl.c b/pjlib/src/pj/ssl_sock_ossl.c
-index b4ac5c15f..42db8fdbe 100644
---- a/pjlib/src/pj/ssl_sock_ossl.c
-+++ b/pjlib/src/pj/ssl_sock_ossl.c
-@@ -210,15 +210,19 @@ static char *SSLErrorString (int err)
-     }
- }
--#define ERROR_LOG(msg, err) \
--    PJ_LOG(2,("SSL", "%s (%s): Level: %d err: <%lu> <%s-%s-%s> len: %d", \
-+#define ERROR_LOG(msg, err, ssock) \
-+{ \
-+    char buf[PJ_INET6_ADDRSTRLEN+10]; \
-+    PJ_LOG(2,("SSL", "%s (%s): Level: %d err: <%lu> <%s-%s-%s> len: %d peer: %s", \
-             msg, action, level, err, \
-             (ERR_lib_error_string(err)? ERR_lib_error_string(err): "???"), \
-             (ERR_func_error_string(err)? ERR_func_error_string(err):"???"),\
-             (ERR_reason_error_string(err)? \
--             ERR_reason_error_string(err): "???"), len));
-+             ERR_reason_error_string(err): "???"), len, \
-+             pj_sockaddr_print(&ssock->rem_addr, buf, sizeof(buf), 3))); \
-+}
--static void SSLLogErrors(char * action, int ret, int ssl_err, int len)
-+static void SSLLogErrors(char * action, int ret, int ssl_err, int len, pj_ssl_sock_t *ssock)
- {
-     char *ssl_err_str = SSLErrorString(ssl_err);
-@@ -233,7 +237,7 @@ static void SSLLogErrors(char * action, int ret, int ssl_err, int len)
-       if (err2) {
-           int level = 0;
-           while (err2) {
--              ERROR_LOG("SSL_ERROR_SYSCALL", err2);
-+              ERROR_LOG("SSL_ERROR_SYSCALL", err2, ssock);
-               level++;
-               err2 = ERR_get_error();
-           }
-@@ -264,7 +268,7 @@ static void SSLLogErrors(char * action, int ret, int ssl_err, int len)
-       int level = 0;
-       while (err2) {
--          ERROR_LOG("SSL_ERROR_SSL", err2);
-+          ERROR_LOG("SSL_ERROR_SSL", err2, ssock);
-           level++;
-           err2 = ERR_get_error();
-       }
-@@ -302,13 +306,13 @@ static pj_status_t STATUS_FROM_SSL_ERR(char *action, pj_ssl_sock_t *ssock,
-     int level = 0;
-     int len = 0; //dummy
--    ERROR_LOG("STATUS_FROM_SSL_ERR", err);
-+    ERROR_LOG("STATUS_FROM_SSL_ERR", err, ssock);
-     level++;
-     /* General SSL error, dig more from OpenSSL error queue */
-     if (err == SSL_ERROR_SSL) {
-       err = ERR_get_error();
--      ERROR_LOG("STATUS_FROM_SSL_ERR", err);
-+      ERROR_LOG("STATUS_FROM_SSL_ERR", err, ssock);
-     }
-     ssock->last_err = err;
-@@ -326,7 +330,7 @@ static pj_status_t STATUS_FROM_SSL_ERR2(char *action, pj_ssl_sock_t *ssock,
-     }
-     /* Dig for more from OpenSSL error queue */
--    SSLLogErrors(action, ret, err, len);
-+    SSLLogErrors(action, ret, err, len, ssock);
-     ssock->last_err = ssl_err;
-     return GET_STATUS_FROM_SSL_ERR(ssl_err);
-diff --git a/pjsip/src/pjsip/sip_transport_tls.c b/pjsip/src/pjsip/sip_transport_tls.c
-index 38349aa7a..d40bc7ea3 100644
---- a/pjsip/src/pjsip/sip_transport_tls.c
-+++ b/pjsip/src/pjsip/sip_transport_tls.c
-@@ -173,9 +173,10 @@ static void wipe_buf(pj_str_t *buf);
- static void tls_perror(const char *sender, const char *title,
--                     pj_status_t status)
-+                     pj_status_t status, pj_str_t *remote_name)
- {
--    PJ_PERROR(3,(sender, status, "%s: [code=%d]", title, status));
-+    PJ_PERROR(3,(sender, status, "%s: [code=%d]%s%.*s", title, status,
-+        remote_name ? " peer: " : "", remote_name ? remote_name->slen : 0, remote_name ? remote_name->ptr : ""));
- }
-@@ -730,7 +731,7 @@ PJ_DEF(pj_status_t) pjsip_tls_transport_restart(pjsip_tpfactory *factory,
-     status = pjsip_tls_transport_lis_start(factory, local, a_name);
-     if (status != PJ_SUCCESS) {       
-       tls_perror(listener->factory.obj_name, 
--                 "Unable to start listener after closing it", status);
-+                 "Unable to start listener after closing it", status, NULL);
-       return status;
-     }
-@@ -739,7 +740,7 @@ PJ_DEF(pj_status_t) pjsip_tls_transport_restart(pjsip_tpfactory *factory,
-                                           &listener->factory);
-     if (status != PJ_SUCCESS) {
-       tls_perror(listener->factory.obj_name,
--                  "Unable to register the transport listener", status);
-+                  "Unable to register the transport listener", status, NULL);
-       listener->is_registered = PJ_FALSE;     
-     } else {
-@@ -1085,7 +1086,7 @@ static pj_status_t tls_start_read(struct tls_transport *tls)
-                                  PJSIP_POOL_RDATA_LEN,
-                                  PJSIP_POOL_RDATA_INC);
-     if (!pool) {
--      tls_perror(tls->base.obj_name, "Unable to create pool", PJ_ENOMEM);
-+      tls_perror(tls->base.obj_name, "Unable to create pool", PJ_ENOMEM, NULL);
-       return PJ_ENOMEM;
-     }
-@@ -1772,7 +1773,7 @@ static pj_bool_t on_connect_complete(pj_ssl_sock_t *ssock,
-     /* Check connect() status */
-     if (status != PJ_SUCCESS) {
--      tls_perror(tls->base.obj_name, "TLS connect() error", status);
-+      tls_perror(tls->base.obj_name, "TLS connect() error", status, &tls->remote_name);
-       /* Cancel all delayed transmits */
-       while (!pj_list_empty(&tls->delayed_list)) {
-@@ -1916,7 +1917,7 @@ static pj_bool_t on_connect_complete(pj_ssl_sock_t *ssock,
-     pjsip_transport_dec_ref(&tls->base);
-     if (is_shutdown) {
-       status = tls->close_reason;
--      tls_perror(tls->base.obj_name, "TLS connect() error", status);
-+      tls_perror(tls->base.obj_name, "TLS connect() error", status, &tls->remote_name);
-       /* Cancel all delayed transmits */
-       while (!pj_list_empty(&tls->delayed_list)) {
-@@ -2015,7 +2016,7 @@ static void tls_keep_alive_timer(pj_timer_heap_t *th, pj_timer_entry *e)
-     if (status != PJ_SUCCESS && status != PJ_EPENDING) {
-       tls_perror(tls->base.obj_name, 
--                 "Error sending keep-alive packet", status);
-+                 "Error sending keep-alive packet", status, &tls->remote_name);
-       tls_init_shutdown(tls, status);
-       return;
--- 
-2.21.0
-
diff --git a/libs/pjproject/patches/0011-sip_inv_patch.patch b/libs/pjproject/patches/0011-sip_inv_patch.patch
new file mode 100644 (file)
index 0000000..c410b9a
--- /dev/null
@@ -0,0 +1,37 @@
+commit c3c1bf45cae2a35003aa16c267d59f97027f9c5e
+Author: Kevin Harwell <kharwell@digium.com>
+Date:   Thu Jun 11 11:11:13 2020 -0500
+
+    sip_inv - fix invite session ref count crash
+    
+    Ensure the session's ref count is only decremented under proper conditons.
+    
+    For more details see the following issue report:
+    https://github.com/pjsip/pjproject/issues/2443
+    
+    Patch supplied by sauwming
+
+--- a/pjsip/src/pjsip-ua/sip_inv.c
++++ b/pjsip/src/pjsip-ua/sip_inv.c
+@@ -323,9 +323,19 @@ static void inv_set_state(pjsip_inv_sess
+       (*mod_inv.cb.on_state_changed)(inv, e);
+     pjsip_inv_dec_ref(inv);
+-    /* Only decrement when previous state is not already DISCONNECTED */
++    /* The above callback may change the state, so we need to be careful here
++     * and only decrement inv under the following conditions:
++     * 1. If the state parameter is DISCONNECTED, and previous state is not
++     *    already DISCONNECTED.
++     *    This is to make sure that dec_ref() is not called more than once.
++     * 2. If current state is PJSIP_INV_STATE_DISCONNECTED.
++     *    This is to make sure that dec_ref() is not called if user restarts
++     *    inv within the callback. Note that this check must be last since
++     *    inv may have already been destroyed.
++     */
+     if (state == PJSIP_INV_STATE_DISCONNECTED &&
+-      prev_state != PJSIP_INV_STATE_DISCONNECTED) 
++      prev_state != PJSIP_INV_STATE_DISCONNECTED &&
++      inv->state == PJSIP_INV_STATE_DISCONNECTED) 
+     {
+       pjsip_inv_dec_ref(inv);
+     }
diff --git a/libs/pjproject/patches/0020-patch_cnonce_only_digits_option.patch b/libs/pjproject/patches/0020-patch_cnonce_only_digits_option.patch
deleted file mode 100644 (file)
index ecf6c94..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-Index: pjsip/include/pjsip/sip_config.h
-===================================================================
---- a/pjsip/include/pjsip/sip_config.h (revision 6050)
-+++ b/pjsip/include/pjsip/sip_config.h (working copy)
-@@ -1190,6 +1190,20 @@
- #   define PJSIP_AUTH_CACHED_POOL_MAX_SIZE    (20 * 1024)
- #endif
-+
-+/**
-+ * Specify whether the cnonce used for SIP authentication contain digits only.
-+ * The "cnonce" value is setup using GUID generator, i.e:
-+ * pj_create_unique_string(), and the GUID string may contain hyphen character
-+ * ("-"). Some SIP servers do not like this GUID format, so this option will
-+ * strip any hyphens from the GUID string.
-+ *
-+ * Default is 1 (cnonce will only contain digit characters).
-+ */
-+#ifndef PJSIP_AUTH_CNONCE_USE_DIGITS_ONLY
-+#   define PJSIP_AUTH_CNONCE_USE_DIGITS_ONLY  1
-+#endif
-+
- /*****************************************************************************
-  *  SIP Event framework and presence settings.
-  */
-Index: pjsip/src/pjsip/sip_auth_client.c
-===================================================================
---- a/pjsip/src/pjsip/sip_auth_client.c        (revision 6050)
-+++ b/pjsip/src/pjsip/sip_auth_client.c        (working copy)
-@@ -396,7 +396,23 @@
-       /* Create cnonce */
-       pj_create_unique_string( cached_auth->pool, &cached_auth->cnonce );
-+#if defined(PJSIP_AUTH_CNONCE_USE_DIGITS_ONLY) && \
-+    PJSIP_AUTH_CNONCE_USE_DIGITS_ONLY!=0
-+      if (pj_strchr(&cached_auth->cnonce, '-')) {
-+          /* remove hyphen character. */
-+          int w, r, len = pj_strlen(&cached_auth->cnonce);
-+          char *s = cached_auth->cnonce.ptr;
-+          w = r = 0;
-+          for (; r < len; r++) {
-+              if (s[r] != '-')
-+                  s[w++] = s[r];
-+          }
-+          s[w] = '\0';
-+          cached_auth->cnonce.slen = w;
-+      }
-+#endif
-+
-       /* Initialize nonce-count */
-       cached_auth->nc = 1;
diff --git a/libs/pjproject/patches/0020-pjlib_cancel_timer_0.patch b/libs/pjproject/patches/0020-pjlib_cancel_timer_0.patch
new file mode 100644 (file)
index 0000000..3fe6294
--- /dev/null
@@ -0,0 +1,35 @@
+commit 40dd48d10911f4ff9b8dfbf16428fbc9acc434ba
+Author: Riza Sulistyo <trengginas@users.noreply.github.com>
+Date:   Thu Jul 9 17:47:24 2020 +0700
+
+    Modify timer_id check on cancel() (#2463)
+    
+    * modify timer_id check on cancel().
+    
+    * modification based on comments.
+
+--- a/pjlib/include/pj/timer.h
++++ b/pjlib/include/pj/timer.h
+@@ -120,7 +120,10 @@ typedef struct pj_timer_entry
+     /** 
+      * Internal unique timer ID, which is assigned by the timer heap. 
+-     * Application should not touch this ID.
++     * Positive values indicate that the timer entry is running, 
++     * while -1 means that it's not. Any other value may indicate that it 
++     * hasn't been properly initialised or is in a bad state.
++     * Application should not touch this ID. 
+      */
+     pj_timer_id_t _timer_id;
+--- a/pjlib/src/pj/timer.c
++++ b/pjlib/src/pj/timer.c
+@@ -535,7 +535,7 @@ static int cancel( pj_timer_heap_t *ht,
+     PJ_CHECK_STACK();
+     // Check to see if the timer_id is out of range
+-    if (entry->_timer_id < 0 || (pj_size_t)entry->_timer_id > ht->max_size) {
++    if (entry->_timer_id < 1 || (pj_size_t)entry->_timer_id >= ht->max_size) {
+       entry->_timer_id = -1;
+       return 0;
+     }
diff --git a/libs/pjproject/patches/0030-ssl-regression-fix.patch b/libs/pjproject/patches/0030-ssl-regression-fix.patch
deleted file mode 100644 (file)
index e94cd41..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-From 489281f29fc7b97143cf79154f22e5007adaba39 Mon Sep 17 00:00:00 2001
-From: George Joseph <gjoseph@digium.com>
-Date: Wed, 9 Oct 2019 07:49:44 -0600
-Subject: [PATCH 30/31] ssl regression fix
-
----
- pjlib/src/pj/ssl_sock_gtls.c       | 6 ++++--
- pjlib/src/pj/ssl_sock_imp_common.c | 4 ++++
- pjlib/src/pj/ssl_sock_imp_common.h | 3 +++
- pjlib/src/pj/ssl_sock_ossl.c       | 9 +++++----
- 4 files changed, 16 insertions(+), 6 deletions(-)
-
---- a/pjlib/src/pj/ssl_sock_gtls.c
-+++ b/pjlib/src/pj/ssl_sock_gtls.c
-@@ -1050,7 +1050,8 @@ static void ssl_update_certs_info(pj_ssl
-         goto us_out;
-     tls_cert_get_info(ssock->pool, &ssock->local_cert_info, cert);
--    tls_cert_get_chain_raw(ssock->pool, &ssock->local_cert_info, us, 1);
-+    pj_pool_reset(ssock->info_pool);
-+    tls_cert_get_chain_raw(ssock->info_pool, &ssock->local_cert_info, us, 1);
- us_out:
-     tls_last_error = ret;
-@@ -1077,7 +1078,8 @@ us_out:
-         goto peer_out;
-     tls_cert_get_info(ssock->pool, &ssock->remote_cert_info, cert);
--    tls_cert_get_chain_raw(ssock->pool, &ssock->remote_cert_info, certs,
-+    pj_pool_reset(ssock->info_pool);
-+    tls_cert_get_chain_raw(ssock->info_pool, &ssock->remote_cert_info, certs,
-                          certslen);
- peer_out:
---- a/pjlib/src/pj/ssl_sock_imp_common.c
-+++ b/pjlib/src/pj/ssl_sock_imp_common.c
-@@ -616,6 +616,7 @@ static void ssl_on_destroy(void *arg)
-     }
-     /* Secure release pool, i.e: all memory blocks will be zeroed first */
-+    pj_pool_secure_release(&ssock->info_pool);
-     pj_pool_secure_release(&ssock->pool);
- }
-@@ -1262,15 +1263,18 @@ PJ_DEF(pj_status_t) pj_ssl_sock_create (
- {
-     pj_ssl_sock_t *ssock;
-     pj_status_t status;
-+    pj_pool_t *info_pool;
-     PJ_ASSERT_RETURN(pool && param && p_ssock, PJ_EINVAL);
-     PJ_ASSERT_RETURN(param->sock_type == pj_SOCK_STREAM(), PJ_ENOTSUP);
-+    info_pool = pj_pool_create(pool->factory, "ssl_chain%p", 512, 512, NULL);
-     pool = pj_pool_create(pool->factory, "ssl%p", 512, 512, NULL);
-     /* Create secure socket */
-     ssock = ssl_alloc(pool);
-     ssock->pool = pool;
-+    ssock->info_pool = info_pool;
-     ssock->sock = PJ_INVALID_SOCKET;
-     ssock->ssl_state = SSL_STATE_NULL;
-     ssock->circ_buf_input.owner = ssock;
---- a/pjlib/src/pj/ssl_sock_imp_common.h
-+++ b/pjlib/src/pj/ssl_sock_imp_common.h
-@@ -96,6 +96,9 @@ typedef struct circ_buf_t {
- struct pj_ssl_sock_t
- {
-     pj_pool_t          *pool;
-+    pj_pool_t          *info_pool; /* this is for certificate chain 
-+                                    * information allocation. Don't use for 
-+                                    * other purposes. */
-     pj_ssl_sock_t      *parent;
-     pj_ssl_sock_param   param;
-     pj_ssl_sock_param   newsock_param;
---- a/pjlib/src/pj/ssl_sock_ossl.c
-+++ b/pjlib/src/pj/ssl_sock_ossl.c
-@@ -1641,11 +1641,12 @@ static void ssl_update_certs_info(pj_ssl
-     chain = SSL_get_peer_cert_chain(ossock->ossl_ssl);
-     if (chain) {
--       ssl_update_remote_cert_chain_info(ssock->pool,
--                                               &ssock->remote_cert_info,
--                                               chain, PJ_TRUE);
-+      pj_pool_reset(ssock->info_pool);
-+      ssl_update_remote_cert_chain_info(ssock->info_pool,
-+                                                &ssock->remote_cert_info,
-+                                                chain, PJ_TRUE);
-     } else {
--       ssock->remote_cert_info.raw_chain.cnt = 0;
-+      ssock->remote_cert_info.raw_chain.cnt = 0;
-     }
- }
diff --git a/libs/pjproject/patches/0031-transport-regression-fix.patch b/libs/pjproject/patches/0031-transport-regression-fix.patch
deleted file mode 100644 (file)
index fdd8836..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-From 9c6108ca392d5e0392e7fb5d2ffde85e3c44ce55 Mon Sep 17 00:00:00 2001
-From: George Joseph <gjoseph@digium.com>
-Date: Wed, 9 Oct 2019 07:50:32 -0600
-Subject: [PATCH 31/31] transport regression fix
-
----
- pjsip/src/pjsip/sip_transport.c | 73 +++++++++++++++++++++++++++------
- 1 file changed, 61 insertions(+), 12 deletions(-)
-
-diff --git a/pjsip/src/pjsip/sip_transport.c b/pjsip/src/pjsip/sip_transport.c
-index 65ac823d4..da6b70e50 100644
---- a/pjsip/src/pjsip/sip_transport.c
-+++ b/pjsip/src/pjsip/sip_transport.c
-@@ -50,6 +50,24 @@ static const char *addr_string(const pj_sockaddr_t *addr)
-                str, sizeof(str));
-     return str;
- }
-+static const char* print_tpsel_info(const pjsip_tpselector *sel)
-+{
-+    static char tpsel_info_buf[80];
-+    if (!sel) return "(null)";
-+    if (sel->type==PJSIP_TPSELECTOR_LISTENER)
-+      pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
-+                       "listener[%s], reuse=%d", sel->u.listener->obj_name,
-+                       !sel->disable_connection_reuse);
-+    else if (sel->type==PJSIP_TPSELECTOR_TRANSPORT)
-+      pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
-+                       "transport[%s], reuse=%d", sel->u.transport->info,
-+                       !sel->disable_connection_reuse);
-+    else
-+      pj_ansi_snprintf(tpsel_info_buf, sizeof(tpsel_info_buf),
-+                       "unknown[%p], reuse=%d", sel->u.ptr,
-+                       !sel->disable_connection_reuse);
-+    return tpsel_info_buf;
-+}
- #else
- #   define TRACE_(x)
- #endif
-@@ -1210,10 +1228,14 @@ PJ_DEF(pj_status_t) pjsip_transport_register( pjsip_tpmgr *mgr,
-        * new transport to the list.
-        */
-       pj_list_push_back(tp_ref, tp_add);
-+      TRACE_((THIS_FILE, "Remote address already registered, "
-+                         "appended the transport to the list"));
-     } else {
-       /* Transport list not found, add it to the hash table. */
-       pj_hash_set_np(mgr->table, &tp->key, key_len, hval, tp_add->tp_buf,
-                      tp_add);
-+      TRACE_((THIS_FILE, "Remote address not registered, "
-+                         "added the transport to the hash"));
-     }
-     /* Add ref transport group lock, if any */
-@@ -1283,6 +1305,13 @@ static pj_status_t destroy_transport( pjsip_tpmgr *mgr,
-                       /* The transport list has multiple entry. */
-                       pj_hash_set_np(mgr->table, &tp_next->tp->key, key_len,
-                                      hval, tp_next->tp_buf, tp_next);
-+                      TRACE_((THIS_FILE, "Hash entry updated after "
-+                                         "transport %d being destroyed",
-+                                         tp->obj_name));
-+                  } else {
-+                      TRACE_((THIS_FILE, "Hash entry deleted after "
-+                                         "transport %d being destroyed",
-+                                         tp->obj_name));
-                   }
-               }
-@@ -1294,6 +1323,14 @@ static pj_status_t destroy_transport( pjsip_tpmgr *mgr,
-           }
-           tp_iter = tp_iter->next;
-       } while (tp_iter != tp_ref);
-+
-+      if (tp_iter->tp != tp) {
-+          PJ_LOG(3, (THIS_FILE, "Warning: transport %s being destroyed is "
-+                                "not registered", tp->obj_name));
-+      }
-+    } else {
-+      PJ_LOG(3, (THIS_FILE, "Warning: transport %s being destroyed is "
-+                            "not found in the hash table", tp->obj_name));
-     }
-     pj_lock_release(mgr->lock);
-@@ -2159,6 +2196,7 @@ PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport(pjsip_tpmgr *mgr,
-                                         NULL, tp);
- }
-+
- /*
-  * pjsip_tpmgr_acquire_transport2()
-  *
-@@ -2176,8 +2214,9 @@ PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport2(pjsip_tpmgr *mgr,
-     pjsip_tpfactory *factory;
-     pj_status_t status;
--    TRACE_((THIS_FILE,"Acquiring transport type=%s, remote=%s:%d",
-+    TRACE_((THIS_FILE,"Acquiring transport type=%s, sel=%s remote=%s:%d",
-                      pjsip_transport_get_type_name(type),
-+                     print_tpsel_info(sel),
-                      addr_string(remote),
-                      pj_sockaddr_get_port(remote)));
-@@ -2194,6 +2233,7 @@ PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport2(pjsip_tpmgr *mgr,
-       /* See if the transport is (not) suitable */
-       if (seltp->key.type != type) {
-           pj_lock_release(mgr->lock);
-+          TRACE_((THIS_FILE, "Transport type in tpsel not matched"));
-           return PJSIP_ETPNOTSUITABLE;
-       }
-@@ -2234,6 +2274,7 @@ PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport2(pjsip_tpmgr *mgr,
-       {
-           if (sel->u.listener->type != type) {
-               pj_lock_release(mgr->lock);
-+              TRACE_((THIS_FILE, "Listener type in tpsel not matched"));
-               return PJSIP_ETPNOTSUITABLE;
-           }
-       }
-@@ -2249,21 +2290,25 @@ PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport2(pjsip_tpmgr *mgr,
-           tp_entry = (transport *)pj_hash_get(mgr->table, &key, key_len,
-                                               NULL);
-           if (tp_entry) {
--              if (sel && sel->type == PJSIP_TPSELECTOR_LISTENER) {
--                  transport *tp_iter = tp_entry;
--                  do {
-+              transport *tp_iter = tp_entry;
-+              do {
-+                  /* Don't use transport being shutdown */
-+                  if (!tp_iter->tp->is_shutdown) {
-                       if (sel && sel->type == PJSIP_TPSELECTOR_LISTENER &&
--                          sel->u.listener &&
--                          tp_iter->tp->factory == sel->u.listener)
-+                          sel->u.listener)
-                       {
-+                          /* Match listener if selector is set */
-+                          if (tp_iter->tp->factory == sel->u.listener) {
-+                              tp_ref = tp_iter->tp;
-+                              break;
-+                          }
-+                      } else {
-                           tp_ref = tp_iter->tp;
-                           break;
-                       }
--                      tp_iter = tp_iter->next;
--                  } while (tp_iter != tp_entry);
--              } else {
--                  tp_ref = tp_entry->tp;
--              }
-+                  }
-+                  tp_iter = tp_iter->next;
-+              } while (tp_iter != tp_entry);
-           }
-       }
-@@ -2276,7 +2321,7 @@ PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport2(pjsip_tpmgr *mgr,
-           /* Ignore address for loop transports. */
-           if (type == PJSIP_TRANSPORT_LOOP ||
--                   type == PJSIP_TRANSPORT_LOOP_DGRAM)
-+              type == PJSIP_TRANSPORT_LOOP_DGRAM)
-           {
-               pj_sockaddr *addr = &key.rem_addr;
-@@ -2315,6 +2360,7 @@ PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport2(pjsip_tpmgr *mgr,
-            * 'duplicate' of the existing transport (same type & remote addr,
-            * but different factory).
-            */
-+          TRACE_((THIS_FILE, "Transport found but from different listener"));
-       }
-       if (tp_ref!=NULL && !tp_ref->is_shutdown) {
-@@ -2347,10 +2393,13 @@ PJ_DEF(pj_status_t) pjsip_tpmgr_acquire_transport2(pjsip_tpmgr *mgr,
-            */
-           /* Verify that the listener type matches the destination type */
-+          /* Already checked above. */
-+          /*
-           if (sel->u.listener->type != type) {
-               pj_lock_release(mgr->lock);
-               return PJSIP_ETPNOTSUITABLE;
-           }
-+          */
-           /* We'll use this listener to create transport */
-           factory = sel->u.listener;
--- 
-2.21.0
-
diff --git a/libs/pjproject/patches/0040-ICE-Add-callback-for-finding-valid-pair.patch b/libs/pjproject/patches/0040-ICE-Add-callback-for-finding-valid-pair.patch
deleted file mode 100644 (file)
index 062e75e..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-From 8b8199180766e3eab6014feaa64ccaedcdc12816 Mon Sep 17 00:00:00 2001
-From: Ben Ford <bford@digium.com>
-Date: Mon, 23 Dec 2019 11:11:13 -0600
-Subject: [PATCH] ICE: Add callback for finding valid pair.
-
-It's possible to start sending as soon as one valid pair is found during
-ICE negotiation. The reason we would want to do this is because it is
-possible for a delay to occur at the start of a call for up to 3 seconds
-until ICE negotiation has actually completed. More information can be
-found here:
-https://bugs.chromium.org/p/chromium/issues/detail?id=1024096
-
-This patch adds a callback once a valid pair is found that applications
-can use to start sending to avoid this scenario. Since only one valid
-pair is needed to start media, we only trigger the callback once.
----
- pjnath/include/pjnath/ice_session.h |  9 +++++++++
- pjnath/src/pjnath/ice_session.c     | 16 ++++++++++++++++
- 2 files changed, 25 insertions(+)
-
-diff --git a/pjnath/include/pjnath/ice_session.h b/pjnath/include/pjnath/ice_session.h
-index 15f0d04..8971220 100644
---- a/pjnath/include/pjnath/ice_session.h
-+++ b/pjnath/include/pjnath/ice_session.h
-@@ -468,6 +468,14 @@ typedef struct pj_ice_sess_cb
- {
-     /**
-      * An optional callback that will be called by the ICE session when
-+     * a valid pair has been found during ICE negotiation.
-+     *
-+     * @param ice           The ICE session.
-+     */
-+    void      (*on_valid_pair)(pj_ice_sess *ice);
-+
-+    /**
-+     * An optional callback that will be called by the ICE session when
-      * ICE negotiation has completed, successfully or with failure.
-      *
-      * @param ice         The ICE session.
-@@ -625,6 +633,7 @@ struct pj_ice_sess
-     pj_bool_t          is_nominating;             /**< Nominating stage   */
-     pj_bool_t          is_complete;               /**< Complete?          */
-     pj_bool_t          is_destroying;             /**< Destroy is called  */
-+    pj_bool_t            valid_pair_found;          /**< First pair found   */
-     pj_status_t                ice_status;                /**< Error status.      */
-     pj_timer_entry     timer;                     /**< ICE timer.         */
-     pj_ice_sess_cb     cb;                        /**< Callback.          */
-diff --git a/pjnath/src/pjnath/ice_session.c b/pjnath/src/pjnath/ice_session.c
-index c51dba7..ed4138a 100644
---- a/pjnath/src/pjnath/ice_session.c
-+++ b/pjnath/src/pjnath/ice_session.c
-@@ -418,6 +418,8 @@ PJ_DEF(pj_status_t) pj_ice_sess_create(pj_stun_config *stun_cfg,
-     pj_list_init(&ice->early_check);
-+    ice->valid_pair_found = PJ_FALSE;
-+
-     /* Done */
-     *p_ice = ice;
-@@ -1348,6 +1350,20 @@ static pj_bool_t on_check_complete(pj_ice_sess *ice,
-            GET_CHECK_ID(&ice->clist, check),
-            (check->nominated ? "  and nominated" : "")));
-+      {
-+          /* On the first valid pair, we call the callback, if present */
-+          if (ice->valid_pair_found == PJ_FALSE) {
-+              void (*on_valid_pair)(pj_ice_sess *ice);
-+
-+              ice->valid_pair_found = PJ_TRUE;
-+              on_valid_pair = ice->cb.on_valid_pair;
-+
-+              if (on_valid_pair) {
-+                  (*on_valid_pair)(ice);
-+              }
-+          }
-+      }
-+
-     }
-     /* 8.2.  Updating States
--- 
-2.7.4
-
diff --git a/libs/pjproject/patches/0040-brackets-in-via-received-params.patch b/libs/pjproject/patches/0040-brackets-in-via-received-params.patch
deleted file mode 100644 (file)
index bf96d3d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-From 6324760c2fb0ffeb2e29c6c0a96a33906caa8d5f Mon Sep 17 00:00:00 2001
-From: Sean Bright <sean.bright@gmail.com>
-Date: Thu, 16 Jan 2020 10:46:11 -0500
-Subject: [PATCH] sip_parser.c: Allow brackets in via parameters
-
-From RFC 5118 section 4.5:
-
-  While it would be beneficial if the same non-terminal
-  ("IPv6reference") was used for both the "sent-by" and "via-received"
-  production rules, there has not been a consensus in the working group
-  to that effect.  Thus, the best that can be suggested is that
-  implementations must follow the Robustness Principle [RFC1122] and be
-  liberal in accepting a "received" parameter with or without the
-  delimiting "[" and "]" tokens.  When sending a request,
-  implementations must not put the delimiting "[" and "]" tokens.
----
- pjsip/src/pjsip/sip_parser.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c
-index e01e672fb..4f9c7fca4 100644
---- a/pjsip/src/pjsip/sip_parser.c
-+++ b/pjsip/src/pjsip/sip_parser.c
-@@ -384,11 +384,11 @@ static pj_status_t init_parser()
-     status = pj_cis_dup(&pconst.pjsip_VIA_PARAM_SPEC, &pconst.pjsip_TOKEN_SPEC);
-     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
--    pj_cis_add_str(&pconst.pjsip_VIA_PARAM_SPEC, ":");
-+    pj_cis_add_str(&pconst.pjsip_VIA_PARAM_SPEC, "[:]");
-     status = pj_cis_dup(&pconst.pjsip_VIA_PARAM_SPEC_ESC, &pconst.pjsip_TOKEN_SPEC_ESC);
-     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
--    pj_cis_add_str(&pconst.pjsip_VIA_PARAM_SPEC_ESC, ":");
-+    pj_cis_add_str(&pconst.pjsip_VIA_PARAM_SPEC_ESC, "[:]");
-     status = pj_cis_dup(&pconst.pjsip_HOST_SPEC, &pconst.pjsip_ALNUM_SPEC);
-     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
--- 
-2.20.1
-
diff --git a/libs/pjproject/patches/0050-fix-race-parallel-build.patch b/libs/pjproject/patches/0050-fix-race-parallel-build.patch
new file mode 100644 (file)
index 0000000..3a48d41
--- /dev/null
@@ -0,0 +1,68 @@
+From 78683646c8bc670ec730a42494e075f671a08e28 Mon Sep 17 00:00:00 2001
+From: Guido Falsi <mad@madpilot.net>
+Date: Mon, 11 May 2020 08:50:39 +0200
+Subject: [PATCH] Fix race condition in parallel builds (#2426)
+
+* 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.
+
+* 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`.
+---
+ build/rules.mak      | 12 ++++++------
+ pjsip/build/Makefile |  2 +-
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+--- a/build/rules.mak
++++ b/build/rules.mak
+@@ -129,7 +129,7 @@ endif
+ $(OBJDIR)/$(app).o: $(OBJDIRS) $(OBJS)
+       $(CROSS_COMPILE)ld -r -o $@ $(OBJS)
+-$(OBJDIR)/$(app).ko: $(OBJDIR)/$(app).o
++$(OBJDIR)/$(app).ko: $(OBJDIR)/$(app).o | $(OBJDIRS)
+       @echo Creating kbuild Makefile...
+       @echo "# Our module name:" > $(OBJDIR)/Makefile
+       @echo 'obj-m += $(app).o' >> $(OBJDIR)/Makefile
+@@ -154,27 +154,27 @@ $(OBJDIR)/$(app).ko: $(OBJDIR)/$(app).o
+ ../lib/$(app).ko: $(LIB) $(OBJDIR)/$(app).ko
+       cp $(OBJDIR)/$(app).ko ../lib
+-$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.m
++$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.m | $(OBJDIRS)
+       $(CC) $($(APP)_CFLAGS) \
+               $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
+               $(subst /,$(HOST_PSEP),$<) 
+-$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.c
++$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.c | $(OBJDIRS)
+       $(CC) $($(APP)_CFLAGS) \
+               $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
+               $(subst /,$(HOST_PSEP),$<) 
+-$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.S
++$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.S | $(OBJDIRS)
+       $(CC) $($(APP)_CFLAGS) \
+               $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
+               $(subst /,$(HOST_PSEP),$<) 
+-$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cpp
++$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cpp | $(OBJDIRS)
+       $(CXX) $($(APP)_CXXFLAGS) \
+               $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
+               $(subst /,$(HOST_PSEP),$<)
+-$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cc
++$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cc | $(OBJDIRS)
+       $(CXX) $($(APP)_CXXFLAGS) \
+               $(CC_OUT)$(subst /,$(HOST_PSEP),$@) \
+               $(subst /,$(HOST_PSEP),$<)
+--- a/pjsip/build/Makefile
++++ b/pjsip/build/Makefile
+@@ -261,7 +261,7 @@ $(PJSUA_LIB_LIB) $(PJSUA_LIB_SONAME): $(
+ pjsua2-lib: $(PJSUA2_LIB_LIB)
+ $(PJSUA2_LIB_SONAME): $(PJSUA2_LIB_LIB)
+-$(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)
++$(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)
+       $(MAKE) -f $(RULES_MAK) APP=PJSUA2_LIB app=pjsua2-lib $(subst /,$(HOST_PSEP),$(LIBDIR)/$@)
+ pjsip-test: $(TEST_EXE)
diff --git a/libs/pjproject/patches/0060-clone-sdp-for-sip-timer-refresh-invite.patch b/libs/pjproject/patches/0060-clone-sdp-for-sip-timer-refresh-invite.patch
new file mode 100644 (file)
index 0000000..0fda06d
--- /dev/null
@@ -0,0 +1,27 @@
+--- a/pjmedia/src/pjmedia/sdp_neg.c
++++ b/pjmedia/src/pjmedia/sdp_neg.c
+@@ -906,7 +906,7 @@ static pj_status_t process_m_answer( pj_
+  * after receiving remote answer.
+  */
+ static pj_status_t process_answer(pj_pool_t *pool,
+-                                pjmedia_sdp_session *offer,
++                                pjmedia_sdp_session *local_offer,
+                                 pjmedia_sdp_session *answer,
+                                 pj_bool_t allow_asym,
+                                 pjmedia_sdp_session **p_active)
+@@ -914,10 +914,14 @@ static pj_status_t process_answer(pj_poo
+     unsigned omi = 0; /* Offer media index */
+     unsigned ami = 0; /* Answer media index */
+     pj_bool_t has_active = PJ_FALSE;
++    pjmedia_sdp_session *offer;
+     pj_status_t status;
+     /* Check arguments. */
+-    PJ_ASSERT_RETURN(pool && offer && answer && p_active, PJ_EINVAL);
++    PJ_ASSERT_RETURN(pool && local_offer && answer && p_active, PJ_EINVAL);
++
++    /* Duplicate local offer SDP. */
++    offer = pjmedia_sdp_session_clone(pool, local_offer);
+     /* Check that media count match between offer and answer */
+     // Ticket #527, different media count is allowed for more interoperability,