Skip to content
Snippets Groups Projects
  1. Oct 20, 2021
    • George Joseph's avatar
      BuildSystem: Check for alternate openssl packages · c07e3c2f
      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
      c07e3c2f
  2. Sep 15, 2021
    • George Joseph's avatar
      pjproject: Add patch to fix trailing whitespace issue in rtpmap · 0947c302
      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
      0947c302
  3. Jul 22, 2021
  4. May 20, 2021
    • George Joseph's avatar
      res_pjsip_outbound_authenticator_digest: Be tolerant of RFC8760 UASs · 655ee680
      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
      655ee680
  5. May 17, 2021
  6. Feb 18, 2021
    • Joshua C. Colp's avatar
      pjsip: Make modify_local_offer2 tolerate previous failed SDP. · acb7ce4f
      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
      acb7ce4f
  7. Dec 17, 2020
    • Pirmin Walthert's avatar
      res_pjsip_nat.c: Create deep copies of strings when appropriate · 7a6cfde4
      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
      7a6cfde4
  8. Aug 10, 2020
    • Michael Neuhauser's avatar
      pjproject: clone sdp to protect against (nat) modifications · 6482ab5b
      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
      6482ab5b
  9. Jul 23, 2020
    • Joshua C. Colp's avatar
      websocket / pjsip: Increase maximum packet size. · af70bbb1
      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
      af70bbb1
  10. Jul 16, 2020
    • Joshua C. Colp's avatar
      pjsip: Include timer patch to prevent cancelling timer 0. · 8d15f727
      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
      8d15f727
  11. Jun 16, 2020
    • Kevin Harwell's avatar
      pjproject: Upgrade bundled version to pjproject 2.10 · 415b55af
      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
      415b55af
  12. May 11, 2020
  13. May 05, 2020
  14. Apr 29, 2020
    • Joshua C. Colp's avatar
      pjsip: Increase maximum ICE candidate count. · 3078a00a
      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
      3078a00a
  15. Apr 17, 2020
  16. Apr 13, 2020
  17. Feb 18, 2020
    • Ben Ford's avatar
      RTP/ICE: Send on first valid pair. · 168637cc
      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
      168637cc
  18. Feb 06, 2020
  19. Oct 10, 2019
    • George Joseph's avatar
      pjproject_bundled: Replace earlier reverts with official fixes. · 5d9f9f48
      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
      5d9f9f48
  20. Sep 24, 2019
    • George Joseph's avatar
      pjproject_bundled: Revert pjproject 2.9 commits causing leaks · cc83e76a
      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
      cc83e76a
  21. Aug 21, 2019
    • Dan Cropp's avatar
      pjproject: Configurable setting for cnonce to include hyphens or not · 0844d6b1
      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
      0844d6b1
  22. Jun 27, 2019
    • George Joseph's avatar
      pjproject_bundled: Add peer information to most SSL/TLS errors · 8b3ee7fe
      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
      8b3ee7fe
  23. Jun 13, 2019
  24. May 21, 2019
    • Matt Jordan's avatar
      pjproject/Makefile: Updates for Darwin compatible builds · 54f7f7dc
      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
      54f7f7dc
  25. May 20, 2019
    • Joshua Colp's avatar
      pjproject-bundled: Add upstream timer fixes · 3853fab3
      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
      3853fab3
  26. May 03, 2019
    • George Joseph's avatar
      build: Pass --fno-partial-inlining to third-party when appropriate · 089581f2
      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
      089581f2
  27. Mar 27, 2019
  28. Feb 04, 2019
    • George Joseph's avatar
      bundled-jansson: On OpenSuse Leap libjansson.a was placed in lib64 · ac2d302c
      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
      ac2d302c
  29. Jan 23, 2019
    • Jean Aunis's avatar
      build : Fix cross-compilation errors · d9fae4a8
      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
      d9fae4a8
  30. Jan 22, 2019
  31. Nov 30, 2018
    • Pirmin Walthert's avatar
      pjproject_bundled: check whether UPDATE is supported on outgoing calls · ecb9ed09
      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
      ecb9ed09
  32. Nov 26, 2018
    • Corey Farrell's avatar
      jansson: Upgrade to 2.12. · 8e1ab4f1
      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
      Unverified
      8e1ab4f1
  33. Nov 16, 2018
    • Corey Farrell's avatar
      pjproject-bundled: Use AST_DEVMODE for conditional compilation. · 752fd06d
      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
      Unverified
      752fd06d
  34. Nov 08, 2018
  35. Oct 24, 2018
    • Nick French's avatar
      res_pjsip: Implement additional SIP RFCs for Google Voice trunk compatability · 37b2e686
      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
      37b2e686
  36. Oct 16, 2018
    • Richard Mudgett's avatar
      bundled pjproject: Remove timer cleanup usage patch. · 915861b4
      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
      915861b4
  37. Sep 28, 2018
  38. Sep 24, 2018
  39. Sep 21, 2018
    • Kevin Harwell's avatar
      rtp_engine: rtcp_report_to_json can overflow the ssrc integer value · 31fba4e8
      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
      Unverified
      31fba4e8
Loading