Skip to content
Snippets Groups Projects
  1. Jul 07, 2014
    • Matthew Jordan's avatar
      ARI/res_stasis: Subscribe to both Local channel halves when originating to app · d4b436d0
      Matthew Jordan authored
      This patch fixes two bugs:
      
      1. When originating a channel into a Stasis application, we already create a
         subscription for the channel that is going into our Stasis app.
         Unfortunately, when you create a Local channel and pass it off to a Stasis
         app, you really aren't creating just one channel: you're creating two. This
         patch snags the second half of the Local channel pair (assuming it is a
         Local channel pair, but luckily core_local is kind about such assumptions)
         and subscribes to it as well.
      
      2. Subscriptions are a bit sticky right now. If a subscription is made, the
         'interest' count gets bumped on the Stasis subscription - but unless
         something explicitly unsubscribes the channel, said subscription sticks
         around. This is not much of a problem is a user is creating the subscription
         - if they made it, they must want it. However, when we are creating
         implicit subscriptions, we need to make sure something clears them out.
         This patch takes a pessimistic approach: it watches the cache updates
         coming from Stasis and, if we notice that the cache just cleared out an
         object, we delete our subscription object. This keeps our ao2 container of
         Stasis forwards in an application from growing out of hand; it also is a
         bit more forgiving for end users who may not realize they were supposed to
         unsubscribe from that channel that just hung up.
      
      Review: https://reviewboard.asterisk.org/r/3710/
      #ASTERISK-23939 #close
      ........
      
      Merged revisions 418089 from http://svn.asterisk.org/svn/asterisk/branches/12
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@418090 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      d4b436d0
  2. Jul 03, 2014
  3. Jul 02, 2014
  4. Jun 26, 2014
    • Matthew Jordan's avatar
      res_http_websocket: Close websocket correctly and use careful fwrite · 365ae752
      Matthew Jordan authored
      When a client takes a long time to process information received from Asterisk,
      a write operation using fwrite may fail to write all information. This causes
      the underlying file stream to be in an unknown state, such that the socket
      must be disconnected. Unfortunately, there are two problems with this in
      Asterisk's existing websocket code:
      1. Periodically, during the read loop, Asterisk must write to the connected
         websocket to respond to pings. As such, Asterisk maintains a reference to
         the session during the loop. When ast_http_websocket_write fails, it may
         cause the session to decrement its ref count, but this in and of itself
         does not break the read loop. The read loop's write, on the other hand,
         does not break the loop if it fails. This causes the socket to get in a
         'stuck' state, preventing the client from reconnecting to the server.
      2. More importantly, however, is that the fwrite in ast_http_websocket_write
         fails with a large volume of data when the client takes awhile to process
         the information. When it does fail, it fails writing only a portion of
         the bytes. With some debugging, it was shown that this was failing in a
         similar fashion to ASTERISK-12767. Switching this over to ast_careful_fwrite
         with a long enough timeout solved the problem.
      
      Note that this version of the patch, unlike r417310 in Asterisk 11, exposes
      configuration options beyond just chan_sip's sip.conf. Configuration options
      to configure the write timeout have also been added to pjsip.conf and ari.conf.
      
      #ASTERISK-23917 #close
      Reported by: Matt Jordan
      
      Review: https://reviewboard.asterisk.org/r/3624/
      ........
      
      Merged revisions 417310 from http://svn.asterisk.org/svn/asterisk/branches/11
      ........
      
      Merged revisions 417311 from http://svn.asterisk.org/svn/asterisk/branches/12
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@417317 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      365ae752
  5. Jun 13, 2014
    • Matthew Jordan's avatar
      stasis: Reduce creation of channel snapshots to improve performance · 9cc1a8e8
      Matthew Jordan authored
      During some performance testing of Asterisk with AGI, ARI, and lots of Local
      channels, we noticed that there's quite a hit in performance during channel
      creation and releasing to the dialplan (ARI continue). After investigating
      the performance spike that occurs during channel creation, we discovered
      that we create a lot of channel snapshots that are technically unnecessary.
      This includes creating snapshots during:
       * AGI execution
       * Returning objects for ARI commands
       * During some Local channel operations
       * During some dialling operations
       * During variable setting
       * During some bridging operations
      And more.
      
      This patch does the following:
       - It removes a number of fields from channel snapshots. These fields were
         rarely used, were expensive to have on the snapshot, and hurt performance.
         This included formats, translation paths, Log Call ID, callgroup, pickup
         group, and all channel variables. As a result, AMI Status,
         "core show channel", "core show channelvar", and "pjsip show channel" were
         modified to either hit the live channel or not show certain pieces of data.
         While this is unfortunate, the performance gain from this patch is worth
         the loss in behaviour.
       - It adds a mechanism to publish a cached snapshot + blob. A large number of
         publications were changed to use this, including:
         - During Dial begin
         - During Variable assignment (if no AMI variables are emitted - if AMI
           variables are set, we have to make snapshots when a variable is changed)
         - During channel pickup
         - When a channel is put on hold/unhold
         - When a DTMF digit is begun/ended
         - When creating a bridge snapshot
         - When an AOC event is raised
         - During Local channel optimization/Local bridging
         - When endpoint snapshots are generated
         - All AGI events
         - All ARI responses that return a channel
         - Events in the AgentPool, MeetMe, and some in Queue
       - Additionally, some extraneous channel snapshots were being made that were
         unnecessary. These were removed.
       - The result of ast_hashtab_hash_string is now cached in stasis_cache. This
         reduces a large number of calls to ast_hashtab_hash_string, which reduced
         the amount of time spent in this function in gprof by around 50%.
      
      #ASTERISK-23811 #close
      Reported by: Matt Jordan
      
      Review: https://reviewboard.asterisk.org/r/3568/
      ........
      
      Merged revisions 416211 from http://svn.asterisk.org/svn/asterisk/branches/12
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@416216 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      9cc1a8e8
  6. May 30, 2014
  7. May 22, 2014
    • Scott Griepentrog's avatar
      ARI: Add ability to raise arbitrary User Events · cf21644d
      Scott Griepentrog authored
      User events can now be generated from ARI.  Events can be signalled with
      arbitrary json variables, and include one or more of channel, bridge, or
      endpoint snapshots.  An application must be specified which will receive
      the event message (other applications can subscribe to it).  The message
      will also be delivered via AMI provided a channel is attached.  Dialplan
      generated user event messages are still transmitted via the channel, and
      will only be received by a stasis application they are attached to or if
      the channel is subscribed to.
      
      This change also introduces the multi object blob mechanism used to send
      multiple snapshot types in a single message.  The dialplan app UserEvent
      was also changed to use multi object blob, and a new stasis message type
      created to handle them.
      
      ASTERISK-22697 #close
      Review: https://reviewboard.asterisk.org/r/3494/
      ........
      
      Merged revisions 414405 from http://svn.asterisk.org/svn/asterisk/branches/12
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@414406 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      cf21644d
  8. Apr 18, 2014
  9. Apr 17, 2014
  10. Apr 15, 2014
  11. Apr 11, 2014
  12. Mar 25, 2014
  13. Mar 20, 2014
    • Richard Mudgett's avatar
      assigned-uniqueids: Miscellaneous cleanup and fixes. · 1ba13718
      Richard Mudgett authored
      * Fix memory leak in ast_unreal_new_channels().  Made it generate the ;2
      uniqueid on a stack variable instead of mallocing it.
      
      * Made send error response to ARI and AMI requests instead of just logging
      excessive uniqueid length and allowing truncation.  action_originate() and
      ari_channels_handle_originate_with_id().
      
      * Fixed minor truncating uniqueid hole when generating the ;2 uniqueid
      string length.  Created public and internal lengths of uniqueid.  The
      internal length can handle a max public uniqueid plus an appended ;2.
      
      * free() and ast_free() are NULL tolerant so they don't need a NULL test
      before calling.
      
      * Made use better struct initialization format instead of the position
      dependent initialization format.  Also anything not explicitly initialized
      in the struct is initialized to zero by the compiler.
      
      * Made ast_channel_internal_set_fake_ids() use the safer
      ast_copy_string() instead of strncpy().
      
      Review: https://reviewboard.asterisk.org/r/3371/
      ........
      
      Merged revisions 410949 from http://svn.asterisk.org/svn/asterisk/branches/12
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410950 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      1ba13718
  14. Mar 19, 2014
  15. Mar 14, 2014
  16. Mar 10, 2014
  17. Mar 08, 2014
  18. Mar 07, 2014
    • Scott Griepentrog's avatar
      uniqueid: channel linkedid, ami, ari object creation with id's · 80ef9a21
      Scott Griepentrog authored
      Much needed was a way to assign id to objects on creation, and
      much change was necessary to accomplish it.  Channel uniqueids
      and linkedids are split into separate string and creation time
      components without breaking linkedid propgation.  This allowed
      the uniqueid to be specified by the user interface - and those
      values are now carried through to channel creation, adding the
      assignedids value to every function in the chain including the
      channel drivers. For local channels, the second channel can be
      specified or left to default to a ;2 suffix of first.  In ARI,
      bridge, playback, and snoop objects can also be created with a
      specified uniqueid.
      
      Along the way, the args order to allocating channels was fixed
      in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
      masquerade occurs.
      
      (closes issue ASTERISK-23120)
      Review: https://reviewboard.asterisk.org/r/3191/
      ........
      
      Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      80ef9a21
  19. Mar 06, 2014
  20. Feb 21, 2014
  21. Feb 11, 2014
  22. Feb 01, 2014
  23. Jan 21, 2014
  24. Jan 14, 2014
  25. Jan 12, 2014
  26. Dec 20, 2013
  27. Dec 17, 2013
  28. Dec 14, 2013
  29. Dec 13, 2013
  30. Nov 30, 2013
  31. Nov 23, 2013
  32. Nov 22, 2013
    • Kinsey Moore's avatar
      ARI: Don't leak implementation details · d9015a53
      Kinsey Moore authored
      This change prevents channels used as implementation details from
      leaking out to ARI. It does this by preventing creation of JSON blobs
      of channel snapshots created from those channels and sanitizing JSON
      blobs of bridge snapshots as they are created. This introduces a
      framework for excluding information from output targeted at Stasis
      applications on a consumer-by-consumer basis using channel sanitization
      callbacks which could be extended to bridges or endpoints if necessary.
      
      This prevents unhelpful error messages from being generated by
      ast_json_pack.
      
      This also corrects a bug where BridgeCreated events would not be
      created.
      
      (closes issue ASTERISK-22744)
      Review: https://reviewboard.asterisk.org/r/2987/
      Reported by: David M. Lee
      ........
      
      Merged revisions 403069 from http://svn.asterisk.org/svn/asterisk/branches/12
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@403070 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      d9015a53
Loading