diff --git a/libs/pjproject/Makefile b/libs/pjproject/Makefile index b2cfa679..dc2c0d49 100644 --- a/libs/pjproject/Makefile +++ b/libs/pjproject/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=pjproject -PKG_VERSION:=2.15.1 +PKG_VERSION:=2.17 PKG_RELEASE:=1 PKG_CPE_ID:=cpe:/a:pjsip:pjsip @@ -18,7 +18,7 @@ PKG_CPE_ID:=cpe:/a:pjsip:pjsip 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/refs/tags -PKG_HASH:=8f3bd99caf003f96ed8038b8a36031eb9d8cd9eaea1eaff7e01c2eef6bd55706 +PKG_HASH:=065fe06c06788d97c35f563796d59f00ce52fe9558a52d7b490a042a966facce PKG_INSTALL:=1 PKG_LICENSE:=GPL-2.0 @@ -95,6 +95,11 @@ CONFIGURE_ARGS+= \ TARGET_CFLAGS+=$(TARGET_CPPFLAGS) +define Build/Prepare + $(call Build/Prepare/Default) + $(CP) config_site.h $(PKG_BUILD_DIR)/pjlib/include/pj/config_site.h +endef + define Build/Compile $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) EXCLUDE_APP=1 dep $(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) EXCLUDE_APP=1 diff --git a/libs/pjproject/config_site.h b/libs/pjproject/config_site.h new file mode 100644 index 00000000..31144eaf --- /dev/null +++ b/libs/pjproject/config_site.h @@ -0,0 +1,117 @@ +/* + * Asterisk config_site.h + */ + +#include + +/* + * Defining PJMEDIA_HAS_SRTP to 0 does NOT disable Asterisk's ability to use srtp. + * It only disables the pjmedia srtp transport which Asterisk doesn't use. + * The reason for the disable is that while Asterisk works fine with older libsrtp + * versions, newer versions of pjproject won't compile with them. + */ +#define PJMEDIA_HAS_SRTP 0 + +#define PJ_HAS_IPV6 1 +#define NDEBUG 1 + +#define PJ_MAX_HOSTNAME (256) +#define PJSIP_MAX_URL_SIZE (512) +#ifdef PJ_HAS_LINUX_EPOLL +#define PJ_IOQUEUE_MAX_HANDLES (5000) +#else +#define PJ_IOQUEUE_MAX_HANDLES (FD_SETSIZE) +#endif +#define PJ_IOQUEUE_HAS_SAFE_UNREG 1 +#define PJ_IOQUEUE_MAX_EVENTS_IN_SINGLE_POLL (16) + +/* + * Increase the number of socket options available. This adjustment is necessary + * to accommodate additional TCP keepalive settings required for optimizing SIP + * transport stability, especially in environments prone to connection timeouts. + * The default limit is insufficient when configuring all desired keepalive + * parameters along with standard socket options. + */ +#define PJ_MAX_SOCKOPT_PARAMS 5 + +#define PJ_SCANNER_USE_BITWISE 0 +#define PJ_OS_HAS_CHECK_STACK 0 + +#ifndef PJ_LOG_MAX_LEVEL +#define PJ_LOG_MAX_LEVEL 6 +#endif + +#define PJ_ENABLE_EXTRA_CHECK 1 +#define PJSIP_MAX_TSX_COUNT ((64*1024)-1) +#define PJSIP_MAX_DIALOG_COUNT ((64*1024)-1) +#define PJSIP_UDP_SO_SNDBUF_SIZE (512*1024) +#define PJSIP_UDP_SO_RCVBUF_SIZE (512*1024) +#define PJ_DEBUG 0 +#define PJSIP_SAFE_MODULE 0 +#define PJ_HAS_STRICMP_ALNUM 0 + +/* + * Do not ever enable PJ_HASH_USE_OWN_TOLOWER because the algorithm is + * inconsistently used when calculating the hash value and doesn't + * convert the same characters as pj_tolower()/tolower(). Thus you + * can get different hash values if the string hashed has certain + * characters in it. (ASCII '@', '[', '\\', ']', '^', and '_') + */ +#undef PJ_HASH_USE_OWN_TOLOWER + +/* + It is imperative that PJSIP_UNESCAPE_IN_PLACE remain 0 or undefined. + Enabling it will result in SEGFAULTS when URIs containing escape sequences are encountered. +*/ +#undef PJSIP_UNESCAPE_IN_PLACE +#define PJSIP_MAX_PKT_LEN 65535 + +#undef PJ_TODO +#define PJ_TODO(x) + +/* Defaults too low for WebRTC */ +#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 */ +#define PJMEDIA_MAX_SDP_FMT 72 +#define PJMEDIA_MAX_SDP_BANDW 4 +#define PJMEDIA_MAX_SDP_ATTR (PJMEDIA_MAX_SDP_FMT*6 + 4) +#define PJMEDIA_MAX_SDP_MEDIA 16 + +/* + * Turn off the periodic sending of CRLNCRLN. Default is on (90 seconds), + * which conflicts with the global section's keep_alive_interval option in + * pjsip.conf. + */ +#define PJSIP_TCP_KEEP_ALIVE_INTERVAL 0 +#define PJSIP_TLS_KEEP_ALIVE_INTERVAL 0 + +#define PJSIP_TSX_UAS_CONTINUE_ON_TP_ERROR 0 +#define PJ_SSL_SOCK_OSSL_USE_THREAD_CB 0 +#define PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER 0 + +/* + * The default is 32 with 8 being used by pjproject itself. + * Since this value is used in invites, dialogs, transports + * and subscriptions as well as the global pjproject endpoint, + * we don't want to increase it too much. + */ +#define PJSIP_MAX_MODULE 38 + +/* + * Disable ICE check for source address match. Asterisk handles + * this itself and having both enabled causes the rtp stream + * to not be established correctly. + */ + +#define PJ_ICE_SESS_CHECK_SRC_ADDR 0 + +/* + * Disables internal absorption of retransmitted INVITE requests + * after ACK, restoring legacy behavior where retransmissions + * are forwarded to the application layer instead of being + * silently handled by the PJSIP stack. + */ + +#define PJSIP_INV_ABSORB_RETRANS_AFTER_ACK 0 diff --git a/libs/pjproject/patches/0004-config_site.patch b/libs/pjproject/patches/0004-config_site.patch deleted file mode 100644 index ead141d9..00000000 --- a/libs/pjproject/patches/0004-config_site.patch +++ /dev/null @@ -1,102 +0,0 @@ ---- /dev/null -+++ b/pjlib/include/pj/config_site.h -@@ -0,0 +1,99 @@ -+/* -+ * Asterisk config_site.h -+ */ -+ -+#include -+ -+/* -+ * Defining PJMEDIA_HAS_SRTP to 0 does NOT disable Asterisk's ability to use srtp. -+ * It only disables the pjmedia srtp transport which Asterisk doesn't use. -+ * The reason for the disable is that while Asterisk works fine with older libsrtp -+ * versions, newer versions of pjproject won't compile with them. -+ */ -+#define PJMEDIA_HAS_SRTP 0 -+ -+#define PJ_HAS_IPV6 1 -+#define NDEBUG 1 -+ -+#define PJ_MAX_HOSTNAME (256) -+#define PJSIP_MAX_URL_SIZE (512) -+#ifdef PJ_HAS_LINUX_EPOLL -+#define PJ_IOQUEUE_MAX_HANDLES (5000) -+#else -+#define PJ_IOQUEUE_MAX_HANDLES (FD_SETSIZE) -+#endif -+#define PJ_IOQUEUE_HAS_SAFE_UNREG 1 -+#define PJ_IOQUEUE_MAX_EVENTS_IN_SINGLE_POLL (16) -+ -+/* -+ * Increase the number of socket options available. This adjustment is necessary -+ * to accommodate additional TCP keepalive settings required for optimizing SIP -+ * transport stability, especially in environments prone to connection timeouts. -+ * The default limit is insufficient when configuring all desired keepalive -+ * parameters along with standard socket options. -+ */ -+#define PJ_MAX_SOCKOPT_PARAMS 5 -+ -+#define PJ_SCANNER_USE_BITWISE 0 -+#define PJ_OS_HAS_CHECK_STACK 0 -+ -+#ifndef PJ_LOG_MAX_LEVEL -+#define PJ_LOG_MAX_LEVEL 6 -+#endif -+ -+#define PJ_ENABLE_EXTRA_CHECK 1 -+#define PJSIP_MAX_TSX_COUNT ((64*1024)-1) -+#define PJSIP_MAX_DIALOG_COUNT ((64*1024)-1) -+#define PJSIP_UDP_SO_SNDBUF_SIZE (512*1024) -+#define PJSIP_UDP_SO_RCVBUF_SIZE (512*1024) -+#define PJ_DEBUG 0 -+#define PJSIP_SAFE_MODULE 0 -+#define PJ_HAS_STRICMP_ALNUM 0 -+ -+/* -+ * Do not ever enable PJ_HASH_USE_OWN_TOLOWER because the algorithm is -+ * inconsistently used when calculating the hash value and doesn't -+ * convert the same characters as pj_tolower()/tolower(). Thus you -+ * can get different hash values if the string hashed has certain -+ * characters in it. (ASCII '@', '[', '\\', ']', '^', and '_') -+ */ -+#undef PJ_HASH_USE_OWN_TOLOWER -+ -+/* -+ It is imperative that PJSIP_UNESCAPE_IN_PLACE remain 0 or undefined. -+ Enabling it will result in SEGFAULTS when URIs containing escape sequences are encountered. -+*/ -+#undef PJSIP_UNESCAPE_IN_PLACE -+#define PJSIP_MAX_PKT_LEN 65535 -+ -+#undef PJ_TODO -+#define PJ_TODO(x) -+ -+/* Defaults too low for WebRTC */ -+#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 */ -+#define PJMEDIA_MAX_SDP_FMT 72 -+#define PJMEDIA_MAX_SDP_BANDW 4 -+#define PJMEDIA_MAX_SDP_ATTR (PJMEDIA_MAX_SDP_FMT*6 + 4) -+#define PJMEDIA_MAX_SDP_MEDIA 16 -+ -+/* -+ * Turn off the periodic sending of CRLNCRLN. Default is on (90 seconds), -+ * which conflicts with the global section's keep_alive_interval option in -+ * pjsip.conf. -+ */ -+#define PJSIP_TCP_KEEP_ALIVE_INTERVAL 0 -+#define PJSIP_TLS_KEEP_ALIVE_INTERVAL 0 -+ -+#define PJSIP_TSX_UAS_CONTINUE_ON_TP_ERROR 0 -+#define PJ_SSL_SOCK_OSSL_USE_THREAD_CB 0 -+#define PJSIP_AUTH_ALLOW_MULTIPLE_AUTH_HEADER 0 -+ -+/* -+ * The default is 32 with 8 being used by pjproject itself. -+ * Since this value is used in invites, dialogs, transports -+ * and subscriptions as well as the global pjproject endpoint, -+ * we don't want to increase it too much. -+ */ diff --git a/libs/pjproject/patches/0006-fix-pkg_config-file.patch b/libs/pjproject/patches/0006-fix-pkg_config-file.patch index 90f1d225..8a8d59a2 100644 --- a/libs/pjproject/patches/0006-fix-pkg_config-file.patch +++ b/libs/pjproject/patches/0006-fix-pkg_config-file.patch @@ -13,7 +13,7 @@ Description: Multimedia communication library --- a/build.mak.in +++ b/build.mak.in -@@ -352,6 +352,6 @@ export PJ_LIBXX_FILES := $(APP_LIBXX_FIL +@@ -358,6 +358,6 @@ export PJ_LIBXX_FILES := $(APP_LIBXX_FIL export PJ_INSTALL_DIR := @prefix@ export PJ_INSTALL_INC_DIR := @includedir@ export PJ_INSTALL_LIB_DIR := @libdir@ diff --git a/libs/pjproject/patches/0010-Avoid_deadlock_between_transport_and_transaction.patch b/libs/pjproject/patches/0010-Avoid_deadlock_between_transport_and_transaction.patch deleted file mode 100644 index 834e5d5d..00000000 --- a/libs/pjproject/patches/0010-Avoid_deadlock_between_transport_and_transaction.patch +++ /dev/null @@ -1,154 +0,0 @@ -From edde06f261ac807a89a6086b7f03460867675f95 Mon Sep 17 00:00:00 2001 -From: Nanang Izzuddin -Date: Tue, 1 Jul 2025 15:13:36 +0700 -Subject: [PATCH] Avoid deadlock between transport and transaction (#4453) - ---- - pjsip/include/pjsip/sip_transaction.h | 1 + - pjsip/src/pjsip/sip_transaction.c | 101 ++++++++++++++++++++++---- - 2 files changed, 88 insertions(+), 14 deletions(-) - ---- a/pjsip/include/pjsip/sip_transaction.h -+++ b/pjsip/include/pjsip/sip_transaction.h -@@ -141,6 +141,7 @@ struct pjsip_transaction - int retransmit_count;/**< Retransmission count. */ - pj_timer_entry retransmit_timer;/**< Retransmit timer. */ - pj_timer_entry timeout_timer; /**< Timeout timer. */ -+ pj_timer_entry misc_timer; /**< Miscellaneous timer. */ - - /** Module specific data. */ - void *mod_data[PJSIP_MAX_MODULE]; ---- a/pjsip/src/pjsip/sip_transaction.c -+++ b/pjsip/src/pjsip/sip_transaction.c -@@ -140,6 +140,7 @@ static int max_retrans_count = -1; - #define TRANSPORT_ERR_TIMER 3 - #define TRANSPORT_DISC_TIMER 4 - #define TERMINATE_TIMER 5 -+#define TRANSPORT_CB_TIMER 6 - - /* Flags for tsx_set_state() */ - enum -@@ -2265,23 +2266,21 @@ static void send_msg_callback( pjsip_sen - } - - --/* Transport callback. */ --static void transport_callback(void *token, pjsip_tx_data *tdata, -- pj_ssize_t sent) --{ -- pjsip_transaction *tsx = (pjsip_transaction*) token; -+/* Transport callback parameter. */ -+struct tp_cb_param { -+ pjsip_transaction* tsx; -+ pjsip_tx_data* tdata; -+ pj_ssize_t sent; -+}; - -- /* Check if the transaction layer has been shutdown. */ -- if (mod_tsx_layer.mod.id < 0) -- return; - -- /* In other circumstances, locking tsx->grp_lock AFTER transport mutex -- * will introduce deadlock if another thread is currently sending a -- * SIP message to the transport. But this should be safe as there should -- * be no way this callback could be called while another thread is -- * sending a message. -- */ -+/* Transport callback actual implementation. */ -+static void transport_callback_impl(pjsip_transaction *tsx, -+ pjsip_tx_data* tdata, -+ pj_ssize_t sent) -+{ - pj_grp_lock_acquire(tsx->grp_lock); -+ - tsx->transport_flag &= ~(TSX_HAS_PENDING_TRANSPORT); - - if (sent > 0 || tsx->role == PJSIP_ROLE_UAS) { -@@ -2299,6 +2298,7 @@ static void transport_callback(void *tok - tsx_set_state( tsx, PJSIP_TSX_STATE_DESTROYED, - PJSIP_EVENT_UNKNOWN, NULL, 0 ); - pj_grp_lock_release(tsx->grp_lock); -+ pj_grp_lock_dec_ref(tsx->grp_lock); - return; - } - -@@ -2354,6 +2354,79 @@ static void transport_callback(void *tok - } - - -+/* Timer callback for transport callback. -+ * This is currently only used to avoid deadlock due to inversed locking order -+ * between transport and transaction. -+ */ -+static void tsx_misc_timer_callback(pj_timer_heap_t *theap, -+ pj_timer_entry *entry) -+{ -+ PJ_UNUSED_ARG(theap); -+ -+ if (entry->id == TRANSPORT_CB_TIMER) { -+ struct tp_cb_param* param = (struct tp_cb_param*)entry->user_data; -+ -+ /* Check if the transaction layer has been shutdown. */ -+ if (mod_tsx_layer.mod.id >= 0) { -+ /* Call transport callback implementation */ -+ transport_callback_impl(param->tsx, param->tdata, param->sent); -+ } -+ -+ /* Release tdata */ -+ pjsip_tx_data_dec_ref(param->tdata); -+ } -+} -+ -+ -+/* Transport callback. */ -+static void transport_callback(void *token, pjsip_tx_data *tdata, -+ pj_ssize_t sent) -+{ -+ pjsip_transaction *tsx = (pjsip_transaction*) token; -+ pj_status_t status; -+ -+ /* Check if the transaction layer has been shutdown. */ -+ if (mod_tsx_layer.mod.id < 0) -+ return; -+ -+ /* In other circumstances, locking tsx->grp_lock AFTER transport mutex -+ * will introduce deadlock if another thread is currently sending a -+ * SIP message to the transport. But this should be safe as there should -+ * be no way this callback could be called while another thread is -+ * sending a message. -+ */ -+ // Deadlock does happen, see #4453. -+ // So now, to avoid deadlock, we'll try to acquire the group lock first, -+ // and if it fails, we'll schedule the processing via timer. -+ status = pj_grp_lock_tryacquire(tsx->grp_lock); -+ if (status != PJ_SUCCESS) { -+ pj_time_val delay = { 0, 0 }; -+ struct tp_cb_param *param = NULL; -+ -+ lock_timer(tsx); -+ tsx_cancel_timer(tsx, &tsx->misc_timer); -+ -+ /* Increment tdata ref count to avoid premature destruction. -+ * Note that tsx ref count is already handled by tsx_schedule_timer(). -+ */ -+ pjsip_tx_data_add_ref(tdata); -+ -+ param = PJ_POOL_ZALLOC_T(tsx->pool, struct tp_cb_param); -+ param->sent = sent; -+ param->tdata = tdata; -+ param->tsx = tsx; -+ pj_timer_entry_init(&tsx->misc_timer, TIMER_INACTIVE, param, -+ &tsx_misc_timer_callback); -+ tsx_schedule_timer(tsx, &tsx->misc_timer, &delay, TRANSPORT_CB_TIMER); -+ unlock_timer(tsx); -+ return; -+ } -+ -+ transport_callback_impl(tsx, tdata, sent); -+ pj_grp_lock_release(tsx->grp_lock); -+} -+ -+ - /* - * Callback when transport state changes. - */ diff --git a/libs/pjproject/patches/0020-Add-PJSIP_INV_ABSORB_RETRANS_AFTER_ACK-macro-to-opt-out-of-4765.patch b/libs/pjproject/patches/0020-Add-PJSIP_INV_ABSORB_RETRANS_AFTER_ACK-macro-to-opt-out-of-4765.patch new file mode 100644 index 00000000..794cc23d --- /dev/null +++ b/libs/pjproject/patches/0020-Add-PJSIP_INV_ABSORB_RETRANS_AFTER_ACK-macro-to-opt-out-of-4765.patch @@ -0,0 +1,118 @@ +From e5afdb60d7937e586318dfb22d325897b239e6b1 Mon Sep 17 00:00:00 2001 +From: Nanang Izzuddin +Date: Wed, 6 May 2026 11:33:24 +0700 +Subject: [PATCH] Add PJSIP_INV_ABSORB_RETRANS_AFTER_ACK macro to opt out of + #4765 (#4965) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +* Add PJSIP_INV_ABSORB_RETRANS_AFTER_ACK macro to opt out of #4765 behavior + +PR #4765 changed the UAS INVITE transaction to delay termination by ~64*T1 +after ACK so that retransmitted INVITEs are absorbed instead of being +treated as new requests. This commit adds a compile-time macro +PJSIP_INV_ABSORB_RETRANS_AFTER_ACK (default 1) to revert to the legacy +behavior — immediate transaction termination after ACK — for applications +that depend on the previous timing. + +The same-branch-different-CSeq 400 Bad Request handling remains +unconditional and is not affected by this macro. + +* docs: clarify PJSIP_INV_ABSORB_RETRANS_AFTER_ACK behavior + +Address review feedback: retransmitted INVITEs are answered by the cached +2xx retransmission (not silently dropped), and the absorb window is +configurable via pjsip_cfg()->tsx.td (default ~32 s) rather than a fixed +64*T1. +--- + pjsip/include/pjsip/sip_config.h | 20 +++++++++++++++++++- + pjsip/src/pjsip-ua/sip_inv.c | 5 +++++ + pjsip/src/pjsip/sip_transaction.c | 9 ++++++--- + 3 files changed, 30 insertions(+), 4 deletions(-) + +--- a/pjsip/include/pjsip/sip_config.h ++++ b/pjsip/include/pjsip/sip_config.h +@@ -1560,7 +1560,7 @@ PJ_INLINE(pjsip_cfg_t*) pjsip_cfg(void) + # define PJSIP_INV_ACCEPT_UNKNOWN_BODY PJ_FALSE + #endif + +-/** ++/** + * Specify whether to check if UPDATE sent in EARLY state has already + * completed SDP negotiation using reliable provisional responses, as + * specified in RFC3311 section 5.1. +@@ -1575,6 +1575,24 @@ PJ_INLINE(pjsip_cfg_t*) pjsip_cfg(void) + #endif + + /** ++ * Specify whether to absorb INVITE request retransmissions arriving after ++ * an ACK has been received for a 2xx response. When enabled (default), the ++ * INVITE transaction termination is delayed for about ~32 seconds ++ * (configurable via pjsip_cfg()->tsx.td) so retransmitted INVITEs are ++ * matched to the existing transaction and answered by the cached 2xx ++ * retransmission, rather than being treated as new requests. ++ * ++ * Set this to 0 to revert to the legacy behavior, where the INVITE ++ * transaction is terminated immediately after ACK and any subsequent ++ * retransmission is treated as a new request. See also \pr{4765}. ++ * ++ * Default: 1 (enabled) ++ */ ++#ifndef PJSIP_INV_ABSORB_RETRANS_AFTER_ACK ++# define PJSIP_INV_ABSORB_RETRANS_AFTER_ACK 1 ++#endif ++ ++/** + * Specify whether message info will include additional details such as + * Call-ID and To header information in the log output. When enabled, + * the message info string will contain more detailed information to +--- a/pjsip/src/pjsip-ua/sip_inv.c ++++ b/pjsip/src/pjsip-ua/sip_inv.c +@@ -763,6 +763,7 @@ static pj_bool_t mod_inv_on_rx_request(p + + /* Now we can terminate the INVITE transaction */ + if (inv->invite_tsx->status_code/100 == 2) { ++#if PJSIP_INV_ABSORB_RETRANS_AFTER_ACK + /* Stop retransmissions of 200 response */ + pjsip_tsx_stop_retransmit(inv->invite_tsx); + +@@ -774,6 +775,10 @@ static pj_bool_t mod_inv_on_rx_request(p + inv->invite_tsx->status_code, + NULL, + pjsip_cfg()->tsx.td); ++#else ++ pjsip_tsx_terminate(inv->invite_tsx, ++ inv->invite_tsx->status_code); ++#endif + } else { + /* If the response was not 2xx, the ACK is considered part of + * the INVITE transaction, so should have been handled by +--- a/pjsip/src/pjsip/sip_transaction.c ++++ b/pjsip/src/pjsip/sip_transaction.c +@@ -3718,19 +3718,22 @@ static pj_status_t tsx_on_state_complete + tsx_cancel_timer( tsx, &tsx->timeout_timer ); + + /* Schedule tsx termination */ ++#if PJSIP_INV_ABSORB_RETRANS_AFTER_ACK + if (tsx->status_code/100 == 2) { + /* Normally 2xx response is handled by TU (not considered + * part of the INVITE tsx), anyway if it comes here, let's + * delay the tsx termination to absorb INVITE retransmission + * for about 64*T1 (~32 seconds). See also #4765. + */ +- timeout = td_timer_val; +- } else { ++ timeout = td_timer_val; ++ } else ++#endif ++ { + /* Timer I is T4 timer for unreliable transports, and + * zero seconds for reliable transports. + */ + if (tsx->is_reliable) { +- timeout.sec = 0; ++ timeout.sec = 0; + timeout.msec = 0; + } else { + timeout.sec = t4_timer_val.sec; diff --git a/net/asterisk/Makefile b/net/asterisk/Makefile index d175c415..935933f7 100644 --- a/net/asterisk/Makefile +++ b/net/asterisk/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=asterisk -PKG_VERSION:=23.2.2 +PKG_VERSION:=23.3.0 PKG_RELEASE:=1 PKG_CPE_ID:=cpe:/a:digium:asterisk PKG_SOURCE:=asterisk-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://downloads.asterisk.org/pub/telephony/asterisk/releases -PKG_HASH:=dfba245e993d500a4a04a7e859e5e60d9623e769b403919254a140ec1d52aa71 +PKG_HASH:=6130db86712d603f7e685adb6870983d5844f1755051b01185e8f6fbf19828ce PKG_BUILD_DEPENDS:=libxml2/host diff --git a/net/asterisk/patches/180-app_queue_time_t.patch b/net/asterisk/patches/180-app_queue_time_t.patch deleted file mode 100644 index fc8c69f6..00000000 --- a/net/asterisk/patches/180-app_queue_time_t.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/apps/app_queue.c -+++ b/apps/app_queue.c -@@ -4759,8 +4759,12 @@ static int is_longest_waiting_caller(str - * will be unused until the first caller is picked up. - */ - if (ch->start < caller->start && !ch->pending) { -- ast_debug(1, "Queue %s has a call at position %i that's been waiting longer (%li vs %li)\n", -- q->name, ch->pos, ch->start, caller->start); -+ char time1[AST_TIME_T_LEN]; -+ char time2[AST_TIME_T_LEN]; -+ ast_time_t_to_string(ch->start, time1, sizeof(time1)); -+ ast_time_t_to_string(caller->start, time2, sizeof(time2)); -+ ast_debug(1, "Queue %s has a call at position %i that's been waiting longer (%s vs %s)\n", -+ q->name, ch->pos, time1, time2); - is_longest_waiting = 0; - break; - }