Skip to content
Snippets Groups Projects
  1. Feb 26, 2021
    • George Joseph's avatar
      res_pjsip_refer: Refactor progress locking and serialization · 4c9c5c98
      George Joseph authored
      Although refer_progress_notify() always runs in the progress
      serializer, the pjproject evsub module itself can cause the
      subscription to be destroyed which then triggers
      refer_progress_on_evsub_state() to clean it up.  In this case,
      it's possible that refer_progress_notify() could get the
      subscription pulled out from under it while it's trying to use
      it.
      
      At one point we tried to have refer_progress_on_evsub_state()
      push the cleanup to the serializer and wait for its return before
      returning to pjproject but since pjproject calls its state
      callbacks with the dialog locked, this required us to unlock the
      dialog while waiting for the serialized cleanup, then lock it
      again before returning to pjproject. There were also still some
      cases where other callers of refer_progress_notify() weren't
      using the serializer and crashes were resulting.
      
      Although all callers of refer_progress_notify() now use the
      progress serializer, we decided to simplify the locking so we
      didn't have to unlock and relock the dialog in
      refer_progress_on_evsub_state().
      
      Now, refer_progress_notify() holds the dialog lock for its
      duration and since pjproject also holds the dialog lock while
      calling refer_progress_on_evsub_state() (which does the cleanup),
      there should be no more chances for the subscription to be
      cleaned up while still being used to send NOTIFYs.
      
      To be extra safe, we also now increment the session count on
      the dialog when we create a progress object and decrement
      the count when the progress is destroyed.
      
      ASTERISK-29313
      
      Change-Id: I97a8bb01771a3c85345649b8124507f7622a8480
      4c9c5c98
    • Kevin Harwell's avatar
      res_rtp_asterisk: Add packet subtype during RTCP debug when relevant · e5e49d7e
      Kevin Harwell authored
      For some RTCP packet types the report count is actually the packet's subtype.
      This was not being reflected in the packet debug output.
      
      This patch makes it so for some RTCP packet types a "Packet Subtype" is
      now output in the debug replacing the "Reception reports" (i.e count).
      
      Change-Id: Id4f4b77bb37077a4c4f039abd6a069287bfefcb8
      e5e49d7e
  2. Feb 25, 2021
    • Joshua C. Colp's avatar
      res_pjsip_session: Always produce offer on re-INVITE without SDP. · a81d07ea
      Joshua C. Colp authored
      When PJSIP receives a re-INVITE without an SDP offer the INVITE
      session library will first call the on_create_offer callback and
      if unavailable then use the active negotiated SDP as the offer.
      
      In some cases this would result in a different SDP then was
      previously used without an incremented SDP version number. The two
      known cases are:
      
      1. Sending an initial INVITE with a set of codecs and having the
      remote side answer with a subset. The active negotiated SDP would
      have the pruned list but would not have an incremented SDP version
      number.
      
      2. Using re-INVITE for unhold. We would modify the active negotiated
      SDP but would not increment the SDP version.
      
      To solve these, and potential other unknown cases, the on_create_offer
      callback has now been implemented which produces a fresh offer with
      incremented SDP version number. This better fits within the model
      provided by the INVITE session library.
      
      ASTERISK-28452
      
      Change-Id: I2d81048d54edcb80fe38fdbb954a86f0a58281a1
      a81d07ea
    • Jaco Kroon's avatar
      res_odbc_transaction: correctly initialise forcecommit value from DSN. · 6d2614be
      Jaco Kroon authored
      
      Also improve the in-process documentation to clarify that the value is
      initialised from the DSN and not default false, but that the DSN's value
      is default false if unset.
      
      ASTERISK-29311 #close
      
      Change-Id: I46e2379f7b0656034442bce77cb37ccd4e61098d
      Signed-off-by: default avatarJaco Kroon <jaco@uls.co.za>
      6d2614be
    • Ben Ford's avatar
      res_pjsip_session.c: Check topology on re-invite. · e1126ffc
      Ben Ford authored
      Removes an unnecessary check for the conditional that compares the
      stream topologies to see if they are equal to suppress re-invites. This
      was a problem when a Digium phone received an INVITE that offered codecs
      different than what it supported, causing Asterisk to send the
      re-invite.
      
      ASTERISK-29303
      
      Change-Id: I04dc91befb2387904e28a9aaeaa3bcdbcaa7fa63
      e1126ffc
    • Boris P. Korzun's avatar
      res_config_pgsql: Limit realtime_pgsql() to return one (no more) record. · b046e960
      Boris P. Korzun authored
      Added a SELECT 'LIMIT' clause to realtime_pgsql() and refactored the function.
      
      ASTERISK-29293 #close
      
      Change-Id: If5a6d4b1072ea2e6e89059b21139d554a74b34f5
      b046e960
  3. Feb 18, 2021
    • Kevin Harwell's avatar
      AST-2021-002: Remote crash possible when negotiating T.38 · 5e998d8b
      Kevin Harwell authored
      When an endpoint requests to re-negotiate for fax and the incoming
      re-invite is received prior to Asterisk sending out the 200 OK for
      the initial invite the re-invite gets delayed. When Asterisk does
      finally send the re-inivite the SDP includes streams for both audio
      and T.38.
      
      This happens because when the pending topology and active topologies
      differ (pending stream is not in the active) in the delayed scenario
      the pending stream is appended to the active topology. However, in
      the fax case the pending stream should replace the active.
      
      This patch makes it so when a delay occurs during fax negotiation,
      to or from, the audio stream is replaced by the T.38 stream, or vice
      versa instead of being appended.
      
      Further when Asterisk sent the re-invite with both audio and T.38,
      and the endpoint responded with a declined T.38 stream then Asterisk
      would crash when attempting to change the T.38 state.
      
      This patch also puts in a check that ensures the media state has a
      valid fax session (associated udptl object) before changing the
      T.38 state internally.
      
      ASTERISK-29203 #close
      
      Change-Id: I407f4fa58651255b6a9030d34fd6578cf65ccf09
      5e998d8b
    • Alexander Traud's avatar
      rtp: Enable srtp replay protection · 389b8b07
      Alexander Traud authored
      Add option "srtpreplayprotection" rtp.conf to enable srtp
      replay protection.
      
      ASTERISK-29260
      Reported by: Alexander Traud
      
      Change-Id: I5cd346e3c6b6812039d1901aa4b7be688173b458
      389b8b07
    • Ivan Poddubnyi's avatar
      res_pjsip_diversion: Fix adding more than one histinfo to Supported · 7d15655f
      Ivan Poddubnyi authored
      New responses sent within a PJSIP sessions are based on those that were
      sent before. Therefore, adding/modifying a header once causes it to be
      sent on all responses that follow.
      
      Sending 181 Call Is Being Forwarded many times first adds "histinfo"
      duplicated more and more, and eventually overflows past the array
      boundary.
      
      This commit adds a check preventing adding "histinfo" more than once,
      and skipping it if there is no more space in the header.
      
      Similar overflow situations can also occur in res_pjsip_path and
      res_pjsip_outbound_registration so those were also modified to
      check the bounds and suppress duplicate Supported values.
      
      ASTERISK-29227
      Reported by: Ivan Poddubny
      
      Change-Id: Id43704a1f1a0293e35cc7f844026f0b04f2ac322
      7d15655f
    • Sean Bright's avatar
      res_rtp_asterisk.c: Fix signed mismatch that leads to overflow · e7b13df3
      Sean Bright authored
      ASTERISK-29205 #close
      
      Change-Id: Ib7aa65644e8df76e2378d7613ee7cf751b9d0bea
      e7b13df3
  4. Feb 17, 2021
    • George Joseph's avatar
      res_pjsip_refer: Always serialize calls to refer_progress_notify · 15b40806
      George Joseph authored
      refer_progress_notify wasn't always being called from the progress
      serializer.  This could allow clearing notification->progress->sub
      in one thread while another was trying to use it.
      
      * Instances where refer_progress_notify was being called in-line,
        have been changed to use ast_sip_push_task().
      
      Change-Id: Idcf1934c4e873f2c82e2d106f8d9f040caf9fa1e
      15b40806
  5. Jan 27, 2021
    • roadkill's avatar
      res/res_pjsip.c: allow user=phone when number contain *# · 9b5d20e3
      roadkill authored
      if From number contain * or # asterisk will not add user=phone
      
      Currently only number that uses AST_DIGIT_ANYNUM can have "user=phone" but the validation should use AST_DIGIT_ANY
      this is a problem when you want to send call to ISUP
      as they will disregard the From header and either replace From with anonymous or with p-asserted-identity
      
      ASTERISK-29261
      Reported by: Mark Petersen
      Tested by: Mark Petersen
      
      Change-Id: I3307bdbf757582740bfee4110e85f7b6c9291cc4
      9b5d20e3
  6. Jan 25, 2021
  7. Jan 18, 2021
  8. Jan 14, 2021
    • Robert Cripps's avatar
      res/res_pjsip_session.c: Check that media type matches in · 24e678b9
      Robert Cripps authored
      function ast_sip_session_media_state_add.
      
      Check ast_media_type matches when a ast_sip_session_media is found
      otherwise when transitioning from say image to audio, the wrong
      session is returned in the first if statement.
      
      ASTERISK-29220 #close
      
      Change-Id: I6f6efa9b821ebe8881bb4c8c957f8802ddcb4b5d
      24e678b9
  9. Jan 13, 2021
    • Jean Aunis's avatar
      Stasis/messaging: tech subscriptions conflict with endpoint subscriptions. · c5596678
      Jean Aunis authored
      When both a tech subscription and an endpoint subscription exist for a given
      endpoint, TextMessageReceived events are dispatched to the tech subscription
      only.
      
      ASTERISK-29229
      
      Change-Id: I9eac4cba5f9e27285a282509395347abc58fc2b8
      c5596678
    • Ivan Poddubnyi's avatar
      chan_pjsip: Assign SIPDOMAIN after creating a channel · f2aa6c70
      Ivan Poddubnyi authored
      session->channel doesn't exist until chan_pjsip creates it, so intead of
      setting a channel variable every new incoming call sets one and the same
      global variable.
      
      This patch moves the code to chan_pjsip so that SIPDOMAIN is set on
      a newly created channel, it also removes a misleading reference to
      channel->session used to fetch call pickup configuraion.
      
      ASTERISK-29240
      
      Change-Id: I90c9bbbed01f5d8863585631a29322ae4e046755
      f2aa6c70
  10. Jan 11, 2021
  11. Jan 04, 2021
  12. Dec 28, 2020
  13. Dec 23, 2020
  14. Dec 17, 2020
    • Sean Bright's avatar
      app_chanspy: Spyee information missing in ChanSpyStop AMI Event · 357510ce
      Sean Bright authored
      The documentation in the wiki says there should be spyee-channel
      information elements in the ChanSpyStop AMI event.
      
          https://wiki.asterisk.org/wiki/x/Xc5uAg
      
      However, this is not the case in Asterisk <= 16.10.0 Version. We're
      using these Spyee* arguments since Asterisk 11.x, so these arguments
      vanished in Asterisk 12 or higher.
      
      For maximum compatibility, we still send the ChanSpyStop event even if
      we are not able to find any 'Spyee' information.
      
      ASTERISK-28883 #close
      
      Change-Id: I81ce397a3fd614c094d043ffe5b1b1d76188835f
      357510ce
    • Sungtae Kim's avatar
      res_ari: Fix wrong media uri handle for channel play · 91fc57f5
      Sungtae Kim authored
      Fixed wrong null object handle in
      /channels/<channel_id>/play request handler.
      
      ASTERISK-29188
      
      Change-Id: I6691c640247a51ad15f23e4a203ca8430809bafe
      91fc57f5
    • Pirmin Walthert's avatar
      res_pjsip_nat.c: Create deep copies of strings when appropriate · 0b109958
      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
      0b109958
  15. Dec 16, 2020
  16. Dec 09, 2020
    • Joshua C. Colp's avatar
      pjsip: Match lifetime of INVITE session to our session. · 6475fe3d
      Joshua C. Colp authored
      In some circumstances it was possible for an INVITE
      session to be destroyed while we were still using it.
      This occurred due to the reference on the INVITE session
      being released internally as a result of its state
      changing to DISCONNECTED.
      
      This change adds a reference to the INVITE session
      which is released when our own session is destroyed,
      ensuring that the INVITE session remains valid for
      the lifetime of our session.
      
      ASTERISK-29022
      
      Change-Id: I300c6d9005ff0e6efbe1132daefc7e47ca6228c9
      6475fe3d
    • Sean Bright's avatar
      res_http_media_cache.c: Set reasonable number of redirects · 90fd1fd9
      Sean Bright authored
      By default libcurl does not follow redirects, so we explicitly enable
      it by setting CURLOPT_FOLLOWLOCATION. Once that is enabled, libcurl
      will follow up to CURLOPT_MAXREDIRS redirects, which by default is
      configured to be unlimited.
      
      This patch sets CURLOPT_MAXREDIRS to a more reasonable default (8). If
      we determine at some point that this needs to be increased on
      configurable it is a trivial change.
      
      ASTERISK-29173 #close
      
      Change-Id: I4925ebbcf0c7d728bb9252b3795b3479ae225b30
      90fd1fd9
  17. Dec 01, 2020
    • Stanislav's avatar
      res_pjsip_stir_shaken: Fix module description · ab7a08b4
      Stanislav authored
      the 'J' is missing in module description.
      "PSIP STIR/SHAKEN Module for Asterisk" -> "PJSIP STIR/SHAKEN Module for Asterisk"
      
      ASTERISK-29175 #close
      
      Change-Id: I17da008540ee2e8496b644d05f995b320b54ad7a
      ab7a08b4
  18. Nov 20, 2020
  19. Nov 19, 2020
    • Alexander Greiner-Baer's avatar
      res_pjsip: set Accept-Encoding to identity in OPTIONS response · fba10fb5
      Alexander Greiner-Baer authored
      
      RFC 3261 says that the Accept-Encoding header should be present
      in an options response. Permitted values according to RFC 2616
      are only compression algorithms like gzip or the default identity
      encoding. Therefore "text/plain" is not a correct value here.
      As long as the header is hard coded, it should be set to "identity".
      
      Without this fix an Alcatel OmniPCX periodically logs warnings like
      "[sip_acceptIncorrectHeader] Header Accept-Encoding is malformed"
      on a SIP Trunk.
      
      ASTERISK-29165 #close
      
      Change-Id: I0aa2211ebf0b4c2ed554ac7cda794523803a3840
      fba10fb5
  20. Nov 10, 2020
    • George Joseph's avatar
      res_pjsip_outbound_registration.c: Use our own scheduler and other stuff · 2fe76dd8
      George Joseph authored
      * Instead of using the pjproject timer heap, we now use our own
        pjsip_scheduler.  This allows us to more easily debug and allows us to
        see times in "pjsip show/list registrations" as well as being able to
        see the registrations in "pjsip show scheduled_tasks".
      
      * Added the last registration time, registration interval, and the next
        registration time to the CLI output.
      
      * Removed calls to pjsip_regc_info() except where absolutely necessary.
        Most of the calls were just to get the server and client URIs for log
        messages so we now just save them on the client_state object when we
        create it.
      
      * Added log messages where needed and updated most of the existong ones
        to include the registration object name at the start of the message.
      
      Change-Id: I4534a0fc78c7cb69f23b7b449dda9748c90daca2
      2fe76dd8
  21. Nov 09, 2020
    • George Joseph's avatar
      pjsip_scheduler.c: Add type ONESHOT and enhance cli show command · 5a4640d2
      George Joseph authored
      * Added a ONESHOT type that never reschedules.
      
      * Added "like" capability to "pjsip show scheduled_tasks" so you can do
        the following:
      
        CLI> pjsip show scheduled_tasks like outreg
        PJSIP Scheduled Tasks:
      
        Task Name                                     Interval  Times Run ...
        ============================================= ========= ========= ...
        pjsip/outreg/testtrunk-reg-0-00000074            50.000   oneshot ...
        pjsip/outreg/voipms-reg-0-00000073              110.000   oneshot ...
      
      * Fixed incorrect display of "Next Start".
      
      * Compacted the displays of times in the CLI.
      
      * Added two new functions (ast_sip_sched_task_get_times2,
        ast_sip_sched_task_get_times_by_name2) that retrieve the interval,
        next start time, and next run time in addition to the times already
        returned by ast_sip_sched_task_get_times().
      
      Change-Id: Ie718ca9fd30490b8a167bedf6b0b06d619dc52f3
      5a4640d2
    • Alexander Traud's avatar
      res_pjsip/config_transport: Load and run without OpenSSL. · b52acb87
      Alexander Traud authored
      ASTERISK-28933
      Reported-by: Walter Doekes
      
      Change-Id: I65eac49e5b0a79261ea80e2b9b38a836886ed59f
      b52acb87
    • Alexander Traud's avatar
      res_stir_shaken: Include OpenSSL headers where used actually. · 64d2de19
      Alexander Traud authored
      This avoids the inclusion of the OpenSSL headers in the public header,
      which avoids one external library dependency in res_pjsip_stir_shaken.
      
      Change-Id: I6a07e2d81d2b5442e24e99b8cc733a99f881dcf4
      64d2de19
  22. Nov 05, 2020
    • Kevin Harwell's avatar
      AST-2020-001 - res_pjsip: Return dialog locked and referenced · b82f8806
      Kevin Harwell authored
      pjproject returns the dialog locked and with a reference. However,
      in Asterisk the method that handles this decrements the reference
      and removes the lock prior to returning. This makes it possible,
      under some circumstances, for another thread to free said dialog
      before the thread that created it attempts to use it again. Of
      course when the thread that created it tries to use a freed dialog
      a crash can occur.
      
      This patch makes it so Asterisk now returns the newly created
      dialog both locked, and with an added reference. This allows the
      caller to de-reference, and unlock the dialog when it is safe to
      do so.
      
      In the case of a new SIP Invite the lock, and reference are now
      held for the entirety of the new invite handling process.
      Otherwise it's possible for the dialog, or its dependent objects,
      like the transaction, to disappear. For example if there is a TCP
      transport error.
      
      ASTERISK-29057 #close
      
      Change-Id: I5ef645a47829596f402cf383dc02c629c618969e
      (cherry picked from commit 6baa4b53)
      b82f8806
    • Ben Ford's avatar
      AST-2020-002 - res_pjsip: Stop sending INVITEs after challenge limit. · cd8f8b94
      Ben Ford authored
      If Asterisk sends out and INVITE and receives a challenge with a
      different nonce value each time, it will continually send out INVITEs,
      even if the call is hung up. The endpoint must be configured for
      outbound authentication in order for this to occur. A limit has been set
      on outbound INVITEs so that, once reached, Asterisk will stop sending
      INVITEs and the transaction will terminate.
      
      ASTERISK-29013
      
      Change-Id: I2d001ca745b00ca8aa12030f2240cd72363b46f7
      cd8f8b94
Loading