- Oct 20, 2021
-
-
George Joseph authored
OpenSSL is one of those packages that often have alternatives with later versions. For instance, CentOS/EL 7 has an openssl package at version 1.0.2 but there's an openssl11 package from the epel repository that has 1.1.1. This gets installed to /usr/include/openssl11 and /usr/lib64/openssl11. Unfortunately, the existing --with-ssl and --with-crypto ./configure options expect to point to a source tree and don't work in this situation. Also unfortunately, the checks in ./configure don't use pkg-config. In order to make this work with the existing situation, you'd have to run... ./configure --with-ssl=/usr/lib64/openssl11 \ --with-crypto=/usr/lib64/openssl11 \ CFLAGS=-I/usr/include/openssl11 BUT... those options don't get passed down to bundled pjproject so when you run make, you have to include the CFLAGS again which is a big pain. Oh... To make matters worse, although you can specify PJPROJECT_CONFIGURE_OPTS on the ./configure command line, they don't get saved so if you do a make clean, which will force a re-configure of bundled pjproject, those options don't get used. So... * In configure.ac... Since pkg-config is installed by install_prereq anyway, we now use it to check for the system openssl >= 1.1.0. If that works, great. If not, we check for the openssl11 package. If that works, great. If not, we fall back to just checking for any openssl. If pkg-config isn't installed for some reason, or --with-ssl=<dir> or --with-crypto=<dir> were specified on the ./configure command line, we fall back to the existing logic that uses AST_EXT_LIB_CHECK(). * The whole OpenSSL check process has been moved up before THIRD_PARTY_CONFIGURE(), which does the initial pjproject bundled configure, is run. This way the results of the above checks, which may result in new include or library directories, is included. * Although not strictly needed for openssl, We now save the value of PJPROJECT_CONFIGURE_OPTS in the makeopts file so it can be used again if a re-configure is triggered. ASTERISK-29693 Change-Id: I341ab7603e6b156aa15a66f43675ac5029d5fbde
-
- Sep 15, 2021
-
-
George Joseph authored
An issue was found where a particular manufacturer's phones add a trailing space to the end of the rtpmap attribute when specifying a payload type that has a "param" after the format name and clock rate. For example: a=rtpmap:120 opus/48000/2 \r\n Because pjmedia_sdp_attr_get_rtpmap currently takes everything after the second '/' up to the line end as the param, the space is included in future comparisons, which then fail if the param being compared to doesn't also have the space. We now use pj_scan_get() to parse the param part of rtpmap so trailing whitespace is automatically stripped. ASTERISK-29654 Change-Id: Ibd0a4e243a69cde7ba9312275b13ab62ab86bc1b
-
- Jul 22, 2021
-
-
Kevin Harwell authored
If an SSL socket parent/listener was destroyed during the handshake, depending on timing, it was possible for the handling callback to attempt access of it after the fact thus causing a crash. ASTERISK-29415 #close Change-Id: I105dacdcd130ea7fdd4cf2010ccf35b5eaf1432d
-
- May 20, 2021
-
-
George Joseph authored
RFC7616 and RFC8760 allow more than one WWW-Authenticate or Proxy-Authenticate header per realm, each with different digest algorithms (including new ones like SHA-256 and SHA-512-256). Thankfully however a UAS can NOT send back multiple Authenticate headers for the same realm with the same digest algorithm. The UAS is also supposed to send the headers in order of preference with the first one being the most preferred. We're supposed to send an Authorization header for the first one we encounter for a realm that we can support. The UAS can also send multiple realms, especially when it's a proxy that has forked the request in which case the proxy will aggregate all of the Authenticate headers and then send them all back to the UAC. It doesn't stop there though... Each realm can require a different username from the others. There's also nothing preventing each digest algorithm from having a unique password although I'm not sure if that adds any benefit. So now... For each Authenticate header we encounter, we have to determine if we support the digest algorithm and, if not, just skip the header. We then have to find an auth object that matches the realm AND the digest algorithm or find a wildcard object that matches the digest algorithm. If we find one, we add it to the results vector and read the next Authenticate header. If the next header is for the same realm AND we already added an auth object for that realm, we skip the header. Otherwise we repeat the process for the next header. In the end, we'll have accumulated a list of credentials we can pass to pjproject that it can use to add Authentication headers to a request. NOTE: Neither we nor pjproject can currently handle digest algorithms other than MD5. We don't even have a place for it in the ast_sip_auth object. For this reason, we just skip processing any Authenticate header that's not MD5. When we support the others, we'll move the check into the loop that searches the objects. Changes: * Added a new API ast_sip_retrieve_auths_vector() that takes in a vector of auth ids (usually supplied on a call to ast_sip_create_request_with_auth()) and populates another vector with the actual objects. * Refactored res_pjsip_outbound_authenticator_digest to handle multiple Authenticate headers and set the stage for handling additional digest algorithms. * Added a pjproject patch that allows them to ignore digest algorithms they don't support. This patch has already been merged upstream. * Updated documentation for auth objects in the XML and in pjsip.conf.sample. * Although res_pjsip_authenticator_digest isn't affected by this change, some debugging and a testsuite AMI event was added to facilitate testing. Discovered during OpenSIPit 2021. ASTERISK-29397 Change-Id: I3aef5ce4fe1d27e48d61268520f284d15d650281
-
- May 17, 2021
-
-
Joshua C. Colp authored
In some cases it was possible for a STUN packet to be destroyed prematurely or even destroyed partially multiple times. This patch provided by Teluu fixes the lifetime of these packets and ensures they aren't partially destroyed multiple times. https://github.com/pjsip/pjproject/pull/2709 ASTERISK-29377 Change-Id: Ie842ad24ddf345e01c69a4d333023f05f787abca
-
- Feb 18, 2021
-
-
Joshua C. Colp authored
If a remote side is broken and sends an SDP that can not be negotiated the call will be torn down but there is a window where a second 183 Session Progress or 200 OK that is forked can be received that also attempts to negotiate SDP. Since the code marked the SDP negotiation as being done and complete prior to this it assumes that there is an active local and remote SDP which it can modify, while in fact there is not as the SDP did not successfully negotiate. Since there is no local or remote SDP a crash occurs. This patch changes the pjmedia_sdp_neg_modify_local_offer2 function to no longer assume that a previous SDP negotiation was successful. ASTERISK-29196 Change-Id: I22de45916d3b05fdc2a67da92b3a38271ee5949e
-
- Dec 17, 2020
-
-
Pirmin Walthert authored
In rewrite_uri asterisk was not making deep copies of strings when changing the uri. This was in some cases causing garbage in the route header and in other cases even crashing asterisk when receiving a message with a record-route header set. Thanks to Ralf Kubis for pointing out why this happens. A similar problem was found in res_pjsip_transport_websocket.c. Pjproject needs as well to be patched to avoid garbage in CANCEL messages. ASTERISK-29024 #close Change-Id: Ic5acd7fa2fbda3080f5f36ef12e46804939b198b
-
- Aug 10, 2020
-
-
Michael Neuhauser authored
PJSIP, UDP transport with external_media_address and session timers enabled. Connected to SIP server that is not in local net. Asterisk initiated the connection and is refreshing the session after 150s (timeout 300s). The 2nd refresh-INVITE triggered by the pjsip timer has a malformed IP address in its SDP (garbage string). This only happens when the SDP is modified by the nat-code to replace the local IP address with the configured external_media_address. Analysis: the code to modify the SDP (in res_pjsip_session.c:session_outgoing_nat_hook() and also (redundantly?) in res_pjsip_sdp_rtp.c:change_outgoing_sdp_stream_media_address()) uses the tdata->pool to allocate the replacement string. But the same pjmedia_sdp_stream that was modified for the 1st refresh-INVITE is also used for the 2nd refresh-INVITE (because it is stored in pjmedia's pjmedia_sdp_neg structure). The problem is, that at that moment, the tdata->pool that holds the stringified external_media_address from the 1. refresh-INVITE has long been reused for something else. Fix by Sauw Ming of pjproject (see https://github.com/pjsip/pjproject/pull/2476): the local, potentially modified pjmedia_sdp_stream is cloned in pjproject/source/pjsip/src/pjmedia/sip_neg.c:process_answer() and the clone is stored, thereby detaching from the tdata->pool (which is only released *after* process_answer()) ASTERISK-28973 Reported-by: Michael Neuhauser Change-Id: I272ac22436076596e06aa51b9fa23fd1c7734a0e
-
- Jul 23, 2020
-
-
Joshua C. Colp authored
When dealing with a lot of video streams on WebRTC the resulting SDPs can grow to be quite large. This effectively doubles the maximum size to allow more streams to exist. The res_http_websocket module has also been changed to use a buffer on the session for reading in packets to ensure that the stack space usage is not excessive. Change-Id: I31d4351d70c8e2c11564807a7528b984f3fbdd01
-
- Jul 16, 2020
-
-
Joshua C. Colp authored
I noticed this while looking at another issue and brought it up with Teluu. It was possible for an uninitialized timer to be cancelled, resulting in the invalid timer id of 0 being placed into the timer heap causing issues. This change is a backport from the pjproject repository preventing this from happening. Change-Id: I1ba318b1f153a6dd7458846396e2867282b428e7
-
- Jun 16, 2020
-
-
Kevin Harwell authored
This patch makes the usual necessary changes when upgrading to a new version pjproject. For instance, version number bump, patches removed from third-party, new *.md5 file added, etc.. This patch also includes a change to the Asterisk pjproject Makefile to explicitly create the 'source/pjsip-apps/lib' directory. This directory is no longer there by default so needs to be added so the Asterisk malloc debug can be built. This patch also includes some minor changes to Asterisk that were a result of the upgrade. Specifically, there was a backward incompatibility change made in 2.10 that modified the "expires header" variable field from a signed to an unsigned value. This potentially effects comparison. Namely, those check for a value less than zero. This patch modified a few locations in the Asterisk code that may have been affected. Lastly, this patch adds a new macro PJSIP_MINVERSION that can be used to check a minimum version of pjproject at compile time. ASTERISK-28899 #close Change-Id: Iec8821c6cbbc08c369d0e3cd2f14e691b41d0c81
-
- May 11, 2020
-
-
Guido Falsi authored
Pjproject makefiles miss some dependencies which can cause race conditions when building with parallel make processes. This patch adds such dependencies correctly. ASTERISK-28879 #close Reported-by:
Dmitry Wagin <dmitry.wagin@ya.ru> Change-Id: Ie1b0dc365dafe4a84c5248097fe8d73804043c22
-
- May 05, 2020
-
-
Guido Falsi authored
The configure.m4 script for pjproject contains some += syntax, which is specific to bash, replacing it with string substitutions makes the script compatible with traditional Bourne shells. ASTERISK-28866 #close Reported-by:
Christoph Moench-Tegeder <cmt@FreeBSD.org> Change-Id: I382a78160e028044598b7da83ec7e1ff42b91c05
-
- Apr 29, 2020
-
-
Joshua C. Colp authored
In practice it has been seen that some users come close to our maximum ICE candidate count of 32. In case people have gone over this increases the count to 64, giving ample room. ASTERISK-28859 Change-Id: I35cd68948ec0ada86c14eb53092cdaf8b62996cf
-
- Apr 17, 2020
-
-
Alexander Traud authored
ASTERISK-28837 Change-Id: Id057324912a3cfe6f50af372675626bb515907d9
-
- Apr 13, 2020
-
-
Alexander Traud authored
ASTERISK-28758 Reported by: Patrick Wakano Reported by: Dmitriy Serov Change-Id: Ifb6b85c559d116739af00bc48d1f547caa85efac
-
Alexander Traud authored
Change-Id: Iebf7687613aa0295ea3c82256460b337f1595be2
-
- Feb 18, 2020
-
-
Ben Ford authored
When handling ICE negotiations, it's possible that there can be a delay between STUN binding requests which in turn will cause a delay in ICE completion, preventing media from flowing. It should be possible to send media when there is at least one valid pair, preventing this scenario from occurring. A change was added to PJPROJECT that adds an optional callback (on_valid_pair) that will be called when the first valid pair is found during ICE negotiation. Asterisk uses this to start the DTLS handshake, allowing media to flow. It will only be called once, either on the first valid pair, or when ICE negotiation is complete. ASTERISK-28716 Change-Id: Ia7b68c34f06d2a1d91c5ed51627b66fd0363d867
-
- Feb 06, 2020
-
-
Sean Bright authored
ASTERISK-26955 #close Reported by: Peter Sokolov Change-Id: Ib2803640905a77b65d0cee2d0ed2c7b310d470ac
-
- Oct 10, 2019
-
-
George Joseph authored
Issues in pjproject 2.9 caused us to revert some of their changes as a work around. This introduced another issue where pjproject wouldn't build with older gcc versions such as that found on CentOS 6. This commit replaces the reverts with the official fixes for the original issues and allows pjproject to be built on CentOS 6 again. ASTERISK-28574 Reported-by: Niklas Larsson Change-Id: I06f8507bea553d1a01b0b8874197d35b9d47ec4c
-
- Sep 24, 2019
-
-
George Joseph authored
We've found a connection re-use regression in pjproject 2.9 introduced by commit "Close #1019: Support for multiple listeners." https://trac.pjsip.org/repos/changeset/6002 https://trac.pjsip.org/repos/ticket/1019 Normally, multiple SSL requests should reuse the same connection if one already exists to the remote server. When a transport error occurs, the next request should establish a new connection and any following requests should use that same one. With this patch, when a transport error occurs, every new request creates a new connection so you can wind up with thousands of open tcp sockets, possibly exhausting file handles, and increasing memory usage. Reverting pjproject commit 6002 (and related 6021) restores the expected behavior. We also found a memory leak in SSL processing that was introduced by commit "Fixed #2204: Add OpenSSL remote certificate chain info" https://trac.pjsip.org/repos/changeset/6014 https://trac.pjsip.org/repos/ticket/2204 Apparently the remote certificate chain is continually recreated causing the leak. Reverting pjproject commit 6014 (and related 6022) restores the expected behavior. Both of these issues have been acknowledged by Teluu. ASTERISK-28521 Change-Id: I8ae7233c3ac4ec29a3b991f738e655dabcaba9f1
-
- Aug 21, 2019
-
-
Dan Cropp authored
NEC SIP Station interface with authenticated registration only supports cnonce up to 32 characters. In Linux, PJSIP would generate 36 character cnonce which included hyphens. Teluu developed this patch adding a compile time setting to default to not include the hyphens. They felt it best to still generate the UUID and strip the hyphens. They have indicated it will be part of PJSIP 2.10. ASTERISK-28509 Reported-by: Dan Cropp Change-Id: Ibdfcf845d4f8c0a14df09fd983b11f2d72c5f470
-
- Jun 27, 2019
-
-
George Joseph authored
Most SSL/TLS error messages coming from pjproject now have either the peer address:port or peer hostname, depending on what was available at the time and code location where the error was generated. ASTERISK-28444 Reported by: Bernhard Schmidt Change-Id: I41770e8a1ea5e96f6e16b236692c4269ce1ba91e
-
- Jun 13, 2019
-
-
Sean Bright authored
Relies on https://github.com/asterisk/third-party/pull/4 Change-Id: Iec9cad42cb4ae109a86a3d4dae61e8bce4424ce3
-
- May 21, 2019
-
-
Matt Jordan authored
This patch fixes three compatibility issues for Darwin compatible builds: (1) Use BSD compatible command line option for sed For some versions of BSD sed, the -r command line option is unknown. Both GNU and BSD sed support the -E command line option for enabling extended regular expressions; as such, this patch replaces the -r option with -E. (2) Look for '_' in pjproject generated symbols In Darwin comaptible systems, the symbols generated for pjproject may be prefixed with an '_'. When exporting these to a symbol file, the invocation to sed has to optionally look for a prefix of said '_' character. (3) Use -all_load/-noall_load when linking The flags -whole-archive/-no-whole-archive are not supported by the linker, and must instead be replaced with -all_load/-noall_load. Change-Id: I58121756de6a0560a6e49ca9d6bf9566a333cde3
-
- May 20, 2019
-
-
Joshua Colp authored
Fixed #2191: - Stricter double timer entry scheduling prevention. - Integrate group lock in SIP transport, e.g: for add/dec ref, for timer scheduling. ASTERISK-28161 Reported-by: Ross Beer Change-Id: I2e09aa66de0dda9414d8a8259a649c4d2d96a9f5
-
- May 03, 2019
-
-
George Joseph authored
When the gcc version is >= 8.2.1, we were already setting the --fno-partial-inlining flag for Asterisk source files to get around a gcc bug but we weren't passing the flag down to the bundled builds of pjproject and jansson. ASTERISK-28392 Change-Id: I99ede9bc35408ecd096f7d5369e8192d3dc75704
-
- Mar 27, 2019
-
-
Sean Bright authored
ASTERISK-28161 #close Reported by: Ross Beer Change-Id: I65331d554695753005eaa66c1d5d4807fe9009c8
-
- Feb 04, 2019
-
-
George Joseph authored
On OpenSuse Leap, libjansson.a is installed in third-party/jansson/dest/lib64 instead of lib (which is where the top-level makeopts looks). This causes a link failure. * Updated jansson/Makefile to add an explicit --libdir to force the installation to third-party/jansson/dest/lib. ASTERISK-28271 Reported by: David Wilcox Change-Id: Ibf8af75e5da13562105fcc39ed898c6ef0b5a5f3
-
- Jan 23, 2019
-
-
Jean Aunis authored
Bundled pjproject and jansson must be configured with the host and build parameters provided to the configure script. Autotools do not permit to check for the existence of local header files, so the control of hrirs.h must not be done when cross-compiling. ASTERISK-28250 Change-Id: If0a76e52a87d4ab82b7d4c72d27d8759ca931880
-
- Jan 22, 2019
-
-
George Joseph authored
Fixed #2172: Avoid double reference counter decrements in timer in the scenario of race condition between pj_timer_heap_cancel() and pj_timer_heap_poll(). Change-Id: If000e9438c83ac5084b678eb811e902c035bd2d8
-
- Nov 30, 2018
-
-
Pirmin Walthert authored
In ASTERISK-27095 an issue had been fixed because of which chan_pjsip was not trying to send UPDATE messages when connected_line_method was set to invite. However this only solved the issue for incoming INVITES. For outgoing INVITES (important when transferring calls) the options variable needs to be updated at a different place. ASTERISK-28182 #close Reported-by: nappsoft Change-Id: I76cc06da4ca76ddd6dce814a8b97cc66b98aaf29
-
- Nov 26, 2018
-
-
Corey Farrell authored
This brings in jansson-2.12, removes all patches that were merged upstream. README is created in third-party/jansson/patches to explain how to add patches but also because the patches folder must exist for the build process to succeed. Change-Id: If0f2d541c50997690660c21fb7b03d625a5cdadd
-
- Nov 16, 2018
-
-
Corey Farrell authored
We previously allowed resample and g711 codecs to be built when TEST_FRAMEWORK was enabled. This could cause errors if the testsuite was run without this option enabled. Switch the build system to allow those codecs to be built when --enable-dev-mode is used. This removes a chance for strange testsuite errors from use of an inadequate pjsua binary. Change-Id: Iee8a3613cdb711fa7e7d217c5a775a575907ae22
-
- Nov 08, 2018
-
-
Corey Farrell authored
pack_string crashed on non-NULL strings returned when s->has_error was true if the string was the result of 's' format without '#', '%' or '+'. Change-Id: Ic125df691d81ba2cbc413e37bdae657b304d20d0
-
- Oct 24, 2018
-
-
Nick French authored
This change implements a few different generic things which were brought on by Google Voice SIP. 1. The concept of flow transports have been introduced. These are configurable transports in pjsip.conf which can be used to reference a flow of signaling to a target. These have runtime configuration that can be changed by the signaling itself (such as Service-Routes and P-Preferred-Identity). When used these guarantee an individual connection (in the case of TCP or TLS) even if multiple flow transports exist to the same target. 2. Service-Routes (RFC 3608) support has been added to the outbound registration module which when received will be stored on the flow transport and used for requests referencing it. 3. P-Associated-URI / P-Preferred-Identity (RFC 3325) support has been added to the outbound registration module. If a P-Associated-URI header is received it will be used on requests as the P-Preferred-Identity. 4. Configurable outbound extension support has been added to the outbound registration module. When set the extension will be placed in the Supported header. 5. Header parameters can now be configured on an outbound registration which will be placed in the Contact header. 6. Google specific OAuth / Bearer token authentication (draft-ietf-sipcore-sip-authn-02) has been added to the outbound registration module. All functionality changes are controlled by pjsip.conf configuration options and do not affect non-configured pjsip endpoints otherwise. ASTERISK-27971 #close Change-Id: Id214c2d1c550a41fcf564b7df8f3da7be565bd58
-
- Oct 16, 2018
-
-
Richard Mudgett authored
This patch is not in the upstream pjproject and does unsafe things with the timer->_timer_id and timer->_grp_lock values in pj_timer_entry_reset() outside of the timer heap lock. pj_timer_entry_reset() is also called for timers that are not about to be rescheduled in a few places. Change-Id: I4fe0b4bc648f7be5903cf4531b94fc87275713c1
-
- Sep 28, 2018
-
-
Corey Farrell authored
Change-Id: I045e420d5e73e60639079246e810da6ae21ae22b
-
- Sep 24, 2018
-
-
Corey Farrell authored
Use json_vsprintf from versions which contain fix for va_copy leak. Apply fixes from jansson master: * va_copy leak fix. * Avoid potential invalid memory read in json_pack. * Rename variable that shadowed another. Change-Id: I7522e462d2a52f53010ffa1e7d705c666ec35539
-
- Sep 21, 2018
-
-
Kevin Harwell authored
When writing an RTCP report to json the code attempts to pack the "ssrc" and "source_ssrc" unsigned integer values as a signed int value type. This of course means if the ssrc's unsigned value is greater than that which can fit into a signed integer value it gets converted to a negative number. Subsequently, the negative value goes out in the json report. This patch now packs the value as a json_int_t, which is the widest integer type available on a given system. This should make it so the value no longer overflows. Note, this was caught by two failing tests hep/rtcp-receiver/ and hep/rtcp-sender. Change-Id: I2af275286ee5e795b79f0c3d450d9e4b28e958b0
-