Skip to content
Snippets Groups Projects
  1. Aug 09, 2017
    • Torrey Searle's avatar
      res_rtp_asterisk: Make P2P bridge Asymmetric codec aware · a2dde591
      Torrey Searle authored
      Introduce a new property to rtp-engine to make it aware of
      the desire for assymetric codecs or not.  If asymmetric codecs
      is not allowed, the bridge will compare read/write formats
      and shut down the p2p bridge if needed
      
      ASTERISK-26745 #close
      
      Change-Id: I0d9c83e5356df81661e58d40a8db565833501a6f
      a2dde591
  2. Aug 07, 2017
    • kkm's avatar
      chan_sip: Access incoming REFER headers in dialplan · 4b58609c
      kkm authored
      This adds a way to access information passed along with SIP headers in
      a REFER message that initiates a transfer. Headers matching a dialplan
      variable GET_TRANSFERRER_DATA in the transferrer channel are added to
      a HASH object TRANSFER_DATA to be accessed with functions HASHKEY and HASH.
      
      The variable GET_TRANSFERRER_DATA is interpreted to be a prefix for
      headers that should be put into the hash. If not set, no headers are
      included. If set to a string (perhaps 'X-' in a typical case), all headers
      starting this string are added. Empty string matches all headers.
      
      If there are multiple of the same header, only the latest occurrence in
      the REFER message is available in the hash.
      
      Obviously, the variable GET_TRANSFERRER_DATA must be inherited by the
      referrer channel, and should be set with the '_' or '__' prefix.
      
      I avoided a specific reference to SIP or REFER, as in my mind the mechanism
      can be generalized to other channel techs.
      
      ASTERISK-27162
      
      Change-Id: I73d7a1e95981693bc59aa0d5093c074b555f708e
      4b58609c
  3. Aug 04, 2017
    • Corey Farrell's avatar
      Correct some leaks in unit tests. · 7f8f3ca4
      Corey Farrell authored
      * chan_sip: channel in test_sip_rtpqos_1.
      * test_config: config hook, config info and global config holder.
      * test_core_format: format in format_attribute_set_without_interface.
      * test_stream: unneeded frame duplication.
      * test_taskprocessor: task_data.
      
      Change-Id: I94d364d195cf3b3b5de2bf3ad565343275c7ad31
      7f8f3ca4
  4. Aug 03, 2017
    • kkm's avatar
      chan_sip: Add dialplan function SIP_HEADERS · 4c0798e9
      kkm authored
      Syntax: SIP_HEADERS([prefix])
      
      If the argument is specified, only the headers matching the given prefix
      are returned.
      
      The function returns a comma-separated list of SIP header names from an
      incoming INVITE message. Multiple headers with the same name are included
      in the list only once. The returned list can be iterated over using the
      functions POP() and SIP_HEADER().
      
      For example, '${SIP_HEADERS(Co)}' might return the string
      'Contact,Content-Length,Content-Type'.
      
      Practical use is rather '${SIP_HEADERS(X-)}' to enumerate optional
      extended headers sent by a peer.
      
      ASTERISK-27163
      
      Change-Id: I2076d3893d03a2f82429f393b5b46db6cf68a267
      4c0798e9
  5. Aug 02, 2017
  6. Aug 01, 2017
    • Corey Farrell's avatar
      Fix compiler warnings on Fedora 26 / GCC 7. · 58d03211
      Corey Farrell authored
      GCC 7 has added capability to produce warnings, this fixes most of those
      warnings.  The specific warnings are disabled in a few places:
      
      * app_voicemail.c: truncation of paths more than 4096 chars in many places.
      * chan_mgcp.c: callid truncated to 80 chars.
      * cdr.c: two userfields are combined to cdr copy, fix would break ABI.
      * tcptls.c: ignore use of deprecated method SSLv3_client_method().
      
      ASTERISK-27156 #close
      
      Change-Id: I65f280e7d3cfad279d16f41823a4d6fddcbc4c88
      58d03211
    • Torrey Searle's avatar
      chan_pjsip: add a new function PJSIP_DTMF_MODE · 65c56089
      Torrey Searle authored
      This function is a replica of SIPDtmfMode, allowing the DTMF mode of a
      PJSIP call to be modified on a per-call basis
      
      ASTERISK-27085 #close
      
      Change-Id: I20eef5da3e5d1d3e58b304416bc79683f87e7612
      65c56089
  7. Jul 24, 2017
    • Joshua Colp's avatar
      core: Add VP9 passthrough support. · a6eb9ee7
      Joshua Colp authored
      This change adds VP9 as a known codec and creates a cached
      "vp9" media format for use.
      
      Change-Id: I025a93ed05cf96153d66f36db1839109cc24c5cc
      a6eb9ee7
  8. Jul 14, 2017
    • Sergej Kasumovic's avatar
      chan_iax2: On reload make sure to check for existing MWI subscription · d3f5b265
      Sergej Kasumovic authored
      On every reload of chan_iax2 module, MWI subscription was added, which
      results in additional taskprocessors being accumulated over time.
      
      This commit fixes it by making sure we check for existing subscription
      first.
      
      This was verified with 'core show taskprocessors' CLI command.
      
      ASTERISK-27122 #close
      
      Change-Id: Ie2ef528fd5ca01b933eeb88188cc10967899cfb9
      d3f5b265
  9. Jul 13, 2017
    • Kevin Harwell's avatar
      res_pjsip: Add "webrtc" configuration option · 7da6ddda
      Kevin Harwell authored
      This patch creates a new configuration option called "webrtc". When enabled it
      defaults and enables the following options that are needed in order for webrtc
      to work in Asterisk:
      
        rtcp-mux, use_avpf, ice_support, and use_received_transport=enabled
        media_encryption=dtls
        dtls_verify=fingerprint
        dtls_setup=actpass
      
      When "webrtc" is enabled, this patch also parses the "msid" media level
      attribute from an SDP. It will also appropriately add it onto the outgoing
      session when applicable.
      
      Lastly, when "webrtc" is enabled h264 RTCP FIR feedback frames are now sent.
      
      ASTERISK-27119 #close
      
      Change-Id: I5ec02e07c5d5b9ad86a34fdf31bf2f9da9aac6fd
      7da6ddda
    • Joshua Colp's avatar
      res_rtp_asterisk / res_pjsip: Add support for BUNDLE. · 065c3005
      Joshua Colp authored
      BUNDLE is a specification used in WebRTC to allow multiple
      streams to use the same underlying transport. This reduces
      the number of ICE and DTLS negotiations that has to occur
      to 1 normally.
      
      This change implements this by adding support for it to
      the RTP SDP module in PJSIP. BUNDLE can be turned on using
      the "bundle" option and on an offer we will offer to
      bundle streams together. On an answer we will accept any
      bundle groups provided. Once accepted each stream is bundled
      to another RTP instance for transport.
      
      For the res_rtp_asterisk changes the ability to bundle
      an RTP instance to another based on the SSRC received
      from the remote side has been added. For outgoing traffic
      if an RTP instance is bundled to another we will use the
      other RTP instance for any transport related things. For
      incoming traffic received from the transport instance we
      look up the correct instance based on the SSRC and use it
      for any non-transport related data.
      
      ASTERISK-27118
      
      Change-Id: I96c0920b9f9aca7382256484765a239017973c11
      065c3005
  10. Jul 05, 2017
    • Sean Bright's avatar
      core: Remove 'Data Retrieval API' · 325eeced
      Sean Bright authored
      This API was not actively maintained, was not added to new modules
      (such as res_pjsip), and there exist better alternatives to acquire the
      same information, such as the ARI.
      
      Change-Id: I4b2185a83aeb74798b4ad43ff8f89f971096aa83
      325eeced
  11. Jul 03, 2017
    • Alexander Traud's avatar
      chan_sip: Only when different, add TCP|TLS in autodomain (SIP Domain Support). · 910c0545
      Alexander Traud authored
      When sip.conf contained tcpenable=yes and autodomain=yes, the TCP domain was
      added in any case, because of a local Boolean-negation error of the return value
      of ast_sockaddr_cmp. After fixing this error for TCP and TLS, the TLS domain was
      still always added with tlsenable=yes, because the domains were not compared
      just on the address but also on the port – and TLS is always on a different port
      than UDP/TCP.
      
      ASTERISK-27106
      
      Change-Id: I14fe9e319e238320b094016980445ef3a5b3337c
      910c0545
    • Alexander Traud's avatar
      chan_sip: Fix a typo for tlsbindaddr in autodomain (SIP Domain Support). · 4398aa8f
      Alexander Traud authored
      Because of a copy-and-paste error when the struct ast_sockaddr changed,
      tlsbindaddr was not added, when sip.conf contained autodomain=yes; see
      "show sip domains" on the command-line interface (CLI) of Asterisk.
      
      ASTERISK-27106
      
      Change-Id: I3d0957150017c223136968ef1266f275d0d6695e
      4398aa8f
  12. Jun 29, 2017
    • George Joseph's avatar
      chan_pjsip: Fix ability to send UPDATE on COLP · c0c99c76
      George Joseph authored
      When connected_line_method is "invite", we're supposed to determine
      if the client can support UPDATE and if it can, send UPDATE instead
      of INVITE to avoid the SDP renegotiation.  Not only was pjproject
      not setting the PJSIP_INV_SUPPORT_UPDATE flag, we were testing
      that invite_tsx wasn't NULL which isn't always the case.
      
      * Updated chan_pjsip/update_connected_line_information to drop the
        requirement that invite_tsx isn't NULL.
      * Submitted patch to pjproject sip_inv.c that sets the
        PJSIP_INV_SUPPORT_UPDATE flag correctly.
      * Updated pjsip.conf.sample to clarify what happens when "invite"
        is specified.
      
      ASTERISK-27095
      
      Change-Id: Ic2381b3567b8052c616d96fbe79564c530e81560
      c0c99c76
    • Torrey Searle's avatar
      res_pjsip: Add DTMF INFO Failback mode · fb7247c5
      Torrey Searle authored
      The existing auto dtmf mode reverts to inband if 4733 fails to be
      negotiated.  This patch adds a new mode auto_info which will
      switch to INFO instead of inband if 4733 is not available.
      
      ASTERISK-27066 #close
      
      Change-Id: Id185b11e84afd9191a2f269e8443019047765e91
      fb7247c5
  13. Jun 28, 2017
    • Mark Michelson's avatar
      chan_pjsip: Add support for multiple streams of the same type. · 45df25a5
      Mark Michelson authored
      The stream topology (list of streams and order) is now stored with the
      configured PJSIP endpoints and used during the negotiation process.
      
      Media negotiation state information has been changed to be stored
      in a separate object. Two of these objects exist at any one time
      on a session. The active media state information is what was previously
      negotiated and the pending media state information is what the
      media state will become if negotiation succeeds. Streams and other
      state information is stored in this object using the index (or
      position) of each individual stream for easy lookup.
      
      The ability for a media type handler to specify a callback for
      writing has been added as well as the ability to add file
      descriptors with a callback which is invoked when data is available
      to be read on them. This allows media logic to live outside of
      the chan_pjsip module.
      
      Direct media has been changed so that only the first audio and
      video stream are directly connected. In the future once the RTP
      engine glue API has been updated to know about streams each individual
      stream can be directly connected as appropriate.
      
      Media negotiation itself will currently answer all the provided streams
      on an offer within configured limits and on an offer will use the
      topology created as a result of the disallow/allow codec lines.
      
      If a stream has been removed or declined we will now mark it as such
      within the resulting SDP.
      
      Applications can now also request that the stream topology change.
      If we are told to do so we will limit any provided formats to the ones
      configured on the endpoint and send a re-invite with the new topology.
      
      Two new configuration options have also been added to PJSIP endpoints:
      
      max_audio_streams: determines the maximum number of audio streams to
      offer/accept from an endpoint. Defaults to 1.
      
      max_video_streams: determines the maximum number of video streams to
      offer/accept from an endpoint. Defaults to 1.
      
      ASTERISK-27076
      
      Change-Id: I8afd8dd2eb538806a39b887af0abd046266e14c7
      45df25a5
  14. Jun 15, 2017
    • Richard Mudgett's avatar
      chan_pjsip: Fix PJSIP_MEDIA_OFFER dialplan function read. · 11ec2945
      Richard Mudgett authored
      The construction of the returned string assumed incorrectly that the
      supplied buffer would always be initialized as an empty string.  If it is
      not an empty string we could overrun the supplied buffer by the length of
      the non-empty buffer string plus one.  It is also theoreticaly possible
      for the supplied buffer to be overrun by a string terminator during a read
      operation even if the supplied buffer is an empty string.
      
      * Fix the assumption that the supplied buffer would already be an empty
      string.  The buffer is not guaranteed to contain an empty string by all
      possible callers.
      
      * Fix string terminator buffer overrun potential.
      
      Change-Id: If6a0806806527678c8554b1dcb34fd7808aa95c9
      11ec2945
  15. Jun 07, 2017
    • Joshua Colp's avatar
      chan_pjsip: Update device state when in early media. · 5b80496b
      Joshua Colp authored
      The chan_pjsip module uses a calculation approach for
      determining device state. This means that in situations
      where we would expect device state to change we need to
      tell the core to query. A scenario that was missed is
      when early media was signaled.
      
      This change adds the notification for the core to
      query device state when we are told that early media
      is being provided.
      
      ASTERISK-27039
      
      Change-Id: Iafebfd152894966344ff2e950a3cee9f59a3eb6f
      5b80496b
    • Joshua Colp's avatar
      pjsip: Extend 'asymmetric_rtp_codec' option to include us changing. · d3e951ed
      Joshua Colp authored
      PJSIP support in Asterisk differs from chan_sip in that it
      allows media to be sent as-is without transcoding provided
      the codecs were negotiated in the SDP. This is allowed
      according to the RFC. Support for this differs quite a lot
      though and some endpoints do not handle it well.
      
      This change extends the 'asymmetric_rtp_codec' option to
      also cover this case. When set to no (the default) the code
      behaves as chan_sip does - the best codec is selected and
      we will only ever send that, unless we change what we are
      sending if the remote side changes. When set to yes we
      will send media as-is without transcoding if the codec
      has been negotiated in the SDP.
      
      ASTERISK-26996
      
      Change-Id: Ib1647f6902a0843e8c435946f831c2159e8d1d51
      d3e951ed
  16. Jun 06, 2017
    • Joshua Colp's avatar
      res_pjsip: Add support for returning only reachable contacts and use it. · 861984ea
      Joshua Colp authored
      This introduces the ability for PJSIP code to specify filtering flags
      when retrieving PJSIP contacts. The first flag for use causes the
      query code to only retrieve contacts that are not unreachable. This
      change has been leveraged by both the Dial() process and the
      PJSIP_DIAL_CONTACTS dialplan function so they will now only attempt
      calls to contacts which are not unreachable.
      
      ASTERISK-26281
      
      Change-Id: I8233b4faa21ba3db114f5a42e946e4b191446f6c
      861984ea
  17. May 22, 2017
    • Sean Bright's avatar
      chan_sip: Better ICE handling for RTCP-MUX · 0f487978
      Sean Bright authored
      If we are offered or are offering RTCP-MUX, don't consider RTCP ICE
      candidates. This confuses certain browsers (current Firefox for
      example) and causes intial audio setup delays.
      
      ASTERISK-26982 #close
      
      Change-Id: Ifeaf47e83972fe8dbe58b7fb3d6d1823400cfb91
      0f487978
  18. May 19, 2017
    • George Joseph's avatar
      AST-2017-004: chan_skinny: Add EOF check in skinny_session · 949e9147
      George Joseph authored
      The while(1) loop in skinny_session wasn't checking for EOF so
      a packet that was longer than a header but still truncated
      would spin the while loop infinitely.  Not only does this
      permanently tie up a thread and drive a core to 100% utilization,
      the call of ast_log() in such a tight loop eats all available
      process memory.
      
      Added poll with timeout to top of read loop
      
      ASTERISK-26940 #close
      Reported-by: Sandro Gauci
      
      Change-Id: I2ce65f3c5cb24b4943a9f75b64d545a1e2cd2898
      949e9147
  19. May 12, 2017
  20. Apr 28, 2017
  21. Apr 27, 2017
    • George Joseph's avatar
      res_pjsip_session: Add cleanup to ast_sip_session_terminate · d6b2a587
      George Joseph authored
      If you use ast_request to create a PJSIP channel but then hang it
      up without causing a transaction to be sent, the session will
      never be destroyed.  This is due ot the fact that it's pjproject
      that triggers the session cleanup when the transaction ends.
      app_chanisavail was doing this to get more granular channel state
      and it's also possible for this to happen via ARI.
      
      * ast_sip_session_terminate was modified to explicitly call the
        cleanup tasks and unreference session if the invite state is NULL
        AND invite_tsx is NULL (meaning we never sent a transaction).
      
      * chan_pjsip/hangup was modified to bump session before it calls
        ast_sip_session_terminate to insure that session stays valid
        while it does its own cleanup.
      
      * Added test events to session_destructor for a future testsuite
        test.
      
      ASTERISK-26908 #close
      Reported-by: Richard Mudgett
      
      Change-Id: I52daf6f757184e5544c261f64f6fe9602c4680a9
      d6b2a587
  22. Apr 26, 2017
  23. Apr 20, 2017
    • Jean Aunis's avatar
      chan_sip: Trigger reinvite if the SDP answer is included in the SIP ACK · b4b1943c
      Jean Aunis authored
      Some equipments may send a re-INVITE containing an SDP in the final ACK
      request. If this happens in the context of direct media, the remote end
      should be updated with a re-INVITE.
      This patch queues an "update RTP peer" frame to trigger the re-INVITE,
      instead of the "source change" frame wich was used previously.
      
      ASTERISK-26951
      
      Change-Id: I3644d2025f20e086ea9f8f62b486172c52b5b2e6
      b4b1943c
  24. Apr 13, 2017
    • Alexander Traud's avatar
      res_pjsip_sdp_rtp: No rtpmap for static RTP payload IDs in SDP. · 72c5f3b0
      Alexander Traud authored
      This saves around 100 bytes when G.711, G.722, G.729, and GSM are advertised in
      SDP. This reduces the chance to hit the MTU bearer of 1300 bytes for SIP over
      UDP, if many codecs are allowed in Asterisk. This new feature is enabled
      together with the optional feature compact_headers=yes via the file pjsip.conf.
      
      ASTERISK-26932 #close
      
      Change-Id: Iaa556ab4c8325cd34c334387ab2847fab07b1689
      72c5f3b0
  25. Apr 12, 2017
    • George Joseph's avatar
      modules: change module LOAD_FAILUREs to LOAD_DECLINES · 747beb1e
      George Joseph authored
      In all non-pbx modules, AST_MODULE_LOAD_FAILURE has been changed
      to AST_MODULE_LOAD_DECLINE.  This prevents asterisk from exiting
      if a module can't be loaded.  If the user wishes to retain the
      FAILURE behavior for a specific module, they can use the "require"
      or "preload-require" keyword in modules.conf.
      
      A new API was added to logger: ast_is_logger_initialized().  This
      allows asterisk.c/check_init() to print to the error log once the
      logger subsystem is ready instead of just to stdout.  If something
      does fail before the logger is initialized, we now print to stderr
      instead of stdout.
      
      Change-Id: I5f4b50623d9b5a6cb7c5624a8c5c1274c13b2b25
      747beb1e
  26. Apr 03, 2017
    • Alexander Traud's avatar
      chan_sip: Session Timers required but refused wrongly. · 4fc22c76
      Alexander Traud authored
      SIP user-agents indicate which protocol extensions are allowed in headers
      like Supported and Required. Such protocol extensions are Session Timers
      (RFC 4028) for example. Session Timers are supported since Mantis-10665.
      Since ASTERISK-21721, not only the first but multiple Supported/Required
      headers in a message are parsed. In that change, an existing variable was
      re-used within a newly added do-loop. Currently, at the end of that loop,
      that variable is an empty string always. Previously, that variable was used
      within log output. However, the log output was not changed.
      
      ASTERISK-26915 #close
      
      Change-Id: I09315f31b4d78fb214bb2a9fb6c0f5e143eae990
      4fc22c76
  27. Mar 31, 2017
  28. Mar 20, 2017
    • Sean Bright's avatar
      thread safety: Don't use getprotobyname() · fc71c18a
      Sean Bright authored
      POSIX does not require getprotobyname() to be thread safe and some
      implementations use static memory which causes issues when multiple
      threads are used.
      
      Further, our usage of it today is just to ultimately get IPPROTO_TCP
      for calls to setsockopt(). So instead we just use IPPROTO_TCP directly.
      
      Change-Id: I2e14e58674808f7ce99b2f5e900d0f90d0d8da48
      fc71c18a
  29. Mar 17, 2017
  30. Mar 14, 2017
    • Richard Begg's avatar
      chan_iax2: Reload of iax peer results in loss of host address/port · 0dc007e9
      Richard Begg authored
      When using a non-dynamic peer address, build_peer() invalidates the
      peer address structure by setting the address family to unspecified.
      However, if dnsmgr is enabled, the subsequent call to ast_dnsmgr_lookup()
      will not amend the peer address if the cache is still valid, resulting
      in peer connectivity failures.
      To fix this, we call ast_dnsmgr_refresh() instead.
      
      ASTERISK-26865
      
      Change-Id: Id8a89a2f771ebbaf32255a35fe596a6dcb97a082
      0dc007e9
  31. Mar 13, 2017
    • Joshua Colp's avatar
      chan_pjsip: Don't assume a session will have a channel. · 12460b05
      Joshua Colp authored
      When querying for PJSIP specific information using the dialplan
      function CHANNEL() it is possible that the underlying session
      will no longer have a channel associated with it. This is
      most likely to occur when the RTCP HEP module attempts to get
      the channel name. If this happens then a crash will occur.
      
      This change just adds a check that the channel exists on the
      session before querying it.
      
      ASTERISK-26857
      
      Change-Id: I113479cffff6ae64cf8ed089e9e1565223426f01
      12460b05
  32. Mar 09, 2017
  33. Mar 07, 2017
    • Jean Aunis's avatar
      chan_sip: Call not cancelled after receiving a 422 response · d51ca4b4
      Jean Aunis authored
      When receiving a 422 response, the invitestate variable must be reset to
      INV_CALLING.
      
      ASTERISK-26841
      
      Change-Id: Ia0502d6b02192664cefa4e75bafdd2645ce56099
      d51ca4b4
    • Joshua Colp's avatar
      core: Add stream topology changing primitives with tests. · 3ed05bad
      Joshua Colp authored
      This change adds a few things to facilitate stream topology changing:
      
      1. Control frame types have been added for use by the channel driver
      to notify the application that the channel wants to change the stream
      topology or that a stream topology change has been accepted. They are
      also used by the indicate interface to the channel that the application
      uses to indicate it wants to do the same.
      
      2. Legacy behavior has been adopted in ast_read() such that if a
      channel requests a stream topology change it is denied automatically
      and the current stream topology is preserved if the application is
      not capable of handling streams.
      
      Tests have also been written which confirm the multistream and
      non-multistream behavior.
      
      ASTERISK-26839
      
      Change-Id: Ia68ef22bca8e8457265ca4f0f9de600cbcc10bc9
      3ed05bad
  34. Mar 03, 2017
    • Richard Mudgett's avatar
      core: Cleanup ast_get_hint() usage. · c9296b23
      Richard Mudgett authored
      * manager.c:manager_state_cb() Fix potential use of uninitialized hint[]
      if a hint does not exist for the requested extension.  Ran into this when
      developing a testsuite test.  The AMI event ExtensionStatus came out with
      the hint header value containing garbage.  The AMI event PresenceStatus
      also had the same issue.
      
      * manager.c:action_extensionstate() no need to completely initialize the
      hint[].  Only initialize the first element.
      
      * pbx.c:ast_add_hint() Remove unnecessary assignment.
      
      * chan_sip.c: Eliminate an unneeded hint[] local variable.  We only care
      about the return value of ast_get_hint() there.
      
      Change-Id: Ia9a8786f01f93f1f917200f0a50bead0319af97b
      c9296b23
Loading