Skip to content
Snippets Groups Projects
  1. Mar 27, 2015
  2. Mar 26, 2015
  3. Mar 25, 2015
  4. Mar 24, 2015
    • Richard Mudgett's avatar
      chan_pjsip: Add "rpid_immediate" option to prevent unnecessary "180 Ringing" messages. · b1e9552b
      Richard Mudgett authored
      Incoming PJSIP call legs that have not been answered yet send unnecessary
      "180 Ringing" or "183 Progress" messages every time a connected line
      update happens.  If the outgoing channel is also PJSIP then the incoming
      channel will always send a "180 Ringing" or "183 Progress" message when
      the outgoing channel sends the INVITE.
      
      Consequences of these unnecessary messages:
      
      * The caller can start hearing ringback before the far end even gets the
      call.
      
      * Many phones tend to grab the first connected line information and refuse
      to update the display if it changes.  The first information is not likely
      to be correct if the call goes to an endpoint not under the control of the
      first Asterisk box.
      
      When connected line first went into Asterisk in v1.8, chan_sip received an
      undocumented option "rpid_immediate" that defaults to disabled.  When
      enabled, the option immediately passes connected line update information
      to the caller in "180 Ringing" or "183 Progress" messages as described
      above.
      
      * Added "rpid_immediate" option to prevent unnecessary "180 Ringing" or
      "183 Progress" messages.  The default is "no" to disable sending the
      unnecessary messages.
      
      ASTERISK-24781 #close
      Reported by: Richard Mudgett
      
      Review: https://reviewboard.asterisk.org/r/4473/
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@433338 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      b1e9552b
  5. Mar 22, 2015
  6. Mar 20, 2015
  7. Mar 19, 2015
  8. Mar 18, 2015
  9. Mar 17, 2015
  10. Mar 14, 2015
  11. Mar 13, 2015
  12. Mar 12, 2015
    • Matthew Jordan's avatar
      main/audiohook: Update internal sample rate on reads · b9fd61f2
      Matthew Jordan authored
      When an audiohook is created (which is used by the various Spy applications
      and Snoop channel in Asterisk 13+), it initially is given a sample rate of
      8kHz. It is expected, however, that this rate may change based on the media
      that passes through the audiohook. However, the read/write operations on the
      audiohook behave very differently.
      
      When a frame is written to the audiohook, the format of the frame is checked
      against the internal sample rate. If the rate of the format does not match
      the internal sample rate, the internal sample rate is updated and a new SLIN
      format is chosen based on that sample rate. This works just fine.
      
      When a frame is read, however, we do something quite different. If the format
      rate matches the internal sample rate, all is fine. However, if the rates
      don't match, the audiohook attempts to "fix up" the number of samples that
      were requested. This can result in some seriously large number of samples
      being requested from the read/write factories.
      
      Consider the worst case - 192kHz SLIN. If we attempt to read 20ms worth of
      audio produced at that rate, we'd request 3840 samples (192000 / (1000 / 20)).
      However, if the audiohook is still expecting an internal sample rate of 8000,
      we'll attempt to "fix up" the requested samples to:
      
        samples_converted = samples * (ast_format_get_sample_rate(format) /
                                       (float) audiohook->hook_internal_samp_rate);
      
        which is:
      
        92160 = 3840 * (192000 / 8000)
      
      This results in us attempting to read 92160 samples from our factories, as
      opposed to the 3840 that we actually wanted. On a 64-bit machine, this
      miraculously survives - despite allocating up to two buffers of length 92160
      on the stack. The 32-bit machines aren't quite so lucky. Even in the case where
      this works, we will either (a) get way more samples than we wanted; or (b) get
      about 3840 samples, assuming the timing is pretty good on the machine.
      
      Either way, the calculation being performed is wrong, based on the API users
      expectations.
      
      My first inclination was to allocate the buffers on the heap. As it is,
      however, there's at least two drawbacks with doing this:
      (1) It's a bit complicated, as the size of the buffers may change during the
          lifetime of the audiohook (ew).
      (2) The stack is faster (yay); the heap is slower (boo).
      
      Since our calculation is flat out wrong in the first place, this patch fixes
      this issue by instead updating the internal sample rate based on the format
      passed into the read operation. This causes us to read the correct number of
      samples, and has the added benefit of setting the audihook with the right
      SLIN format.
      
      Note that this issue was caught by the Asterisk Test Suite as a result of
      r432195 in the 13 branch. Because this issue is also theoretically possible
      in Asterisk 11, the change is being made here as well.
      
      Review: https://reviewboard.asterisk.org/r/4475/
      ........
      
      Merged revisions 432810 from http://svn.asterisk.org/svn/asterisk/branches/11
      
      
      git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432811 65c4cc65-6c06-0410-ace0-fbb531ad65f3
      b9fd61f2
Loading