Commit Graph

214 Commits

Author SHA1 Message Date
Mark Michelson
f4f7637e62 Allow PLC to function properly when channels use SLIN for audio.
If a channel involved in a bridge was using SLIN audio, then translation
paths were not guaranteed to be set up properly since in all likelihood
the number of translation steps was only 1.

This patch enforces the transcode_via_slin behavior if transcode_via_slin
or generic_plc is enabled and one of the formats to make compatible is
SLIN.

AST-352



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@278618 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-07-22 14:55:04 +00:00
Matthew Nicholson
cc8a3986cf For pass through DTMF tones, measure the actual duration between the begin and end packets on the wire. If it is detected to be less than AST_MIN_DTMF_DURATION, trigger dtmf emulation.
AST-362


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@277247 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-07-16 17:29:57 +00:00
Jeff Peeler
4fbc487659 In a perfect world, the frame source would never be NULL. In the meantime, don't crash when it is.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@276652 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-07-15 13:48:58 +00:00
Jeff Peeler
cd054ab3b4 Change ast_write to not stop generator when called from ast_prod.
For SIP channels configured with the progressinband option on, the ringback was
being immediately stopped. This problem was due to ast_prod being moved for a
deadlock fix in 259858. Prodding the channel after setting up the generator
triggered the check in ast_write to stop the generator. The fix here should
write the frame the same as was done before the call to ast_prod was moved.

(closes issue #17372)
Reported by: tech_admin


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@275665 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-07-12 16:58:39 +00:00
Russell Bryant
2a18c6627d Don't return a partially initialized datastore.
If memory allocation fails in ast_strdup(), don't return a partially
initialized datastore.  Bad things may happen.

(related to ABE-2415)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@273565 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-07-01 22:09:19 +00:00
Tilghman Lesher
96e6915e83 _Really_ skip the channel... don't just retry for another 200 cycles.
(Closes issue SWP-1652, ABE-2240)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@273057 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-06-29 22:58:58 +00:00
Mark Michelson
7a7326f8e9 Fix potential crash when writing raw SLIN audio on a PLC-enabled channel.
The issue here was that the frame created when adjusting for PLC had no offset
to its audio data. If this frame were translated to another format prior to
being sent out an RTP socket, all went well because the translation code would
put an appropriate offset into the frame. However, if the SLIN audio were not
translated before being sent out the RTP socket, bad things would happen.
Specifically, the ast_rtp_raw_write makes the assumption that the frame has
at least enough of an offset that it can accommodate an RTP header. This was
not the case. As such, data was being written prior to the allocation, likely
corrupting the data the memory allocator had written. Thus when the time came
to free the data, all hell broke loose. ....Well, Asterisk crashed at least.

The fix was just what one would expect. Offset the data in the frame by a reasonable
amount. The method I used is a bit odd since the data in the frame is 16 bit integers
and not bytes. I left a big ol' comment about it. This can be improved on if someone
is interested. I was more interested in getting the crash resolved.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@269821 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-06-10 19:30:12 +00:00
David Vossel
6105e07933 fixes segfault when using generic plc
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@265365 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-05-24 19:37:55 +00:00
Mark Michelson
b91ff0498e Allow ast_safe_sleep to defer specific frames until after the sleep has concluded.
From reviewboard

Background:
A Digium customer discovered a somewhat odd bug. The setup is that parties A
and B are bridged, and party A places party B on hold. While party B is 
listening to hold music, he mashes a bunch of DTMF. Party A takes party
B off hold while this is happening, but party B continues to hear hold
music. I could reproduce this about 1 in 5 times.

The issue:
When DTMF features are enabled and a user presses keys, the channel that
the DTMF is streamed to is placed in an ast_safe_sleep for 100 ms, the
duration of the emulated tone. If an AST_CONTROL_UNHOLD frame is read
from the channel during the sleep, the frame is dropped. Thus the
unhold indication is never made to the channel that was originally placed
on hold.

The fix:
Originally, I discussed with Kevin possible ways of fixing the specific
problem reported. However, we determined that the same type of problem
could happen in other situations where ast_safe_sleep() is used. Using
autoservice as a model, I modified ast_safe_sleep_conditional() to
defer specific frame types so they can be re-queued once the sleep has
finished. I made a common function for determining if a frame should
be deferred so that there are not two identical switch blocks to
maintain.

Review: https://reviewboard.asterisk.org/r/674/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@264996 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-05-21 16:28:34 +00:00
Mark Michelson
610c1dc6bf 1.4 version of PLC fix.
Analogous to trunk revision 264452, but without the change
to chan_sip since it is not necessary in this branch.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@264541 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-05-20 15:59:44 +00:00
Jeff Peeler
93a73ba6a7 Fix internal timing not working with Zaptel
dahdi_compat.h was not being included in channel.c when used with 
Zaptel and wasn't in file.c at all.

(closes issue #15250)
Reported by: mneuhauser
Patches: 
      dahdi_compat.patch uploaded by mneuhauser (license 425)
Tested by: IgorG


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@263112 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-05-13 23:08:13 +00:00
Tilghman Lesher
c842507c3e Add a tiny corner case to the previous commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@261094 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-05-04 23:47:08 +00:00
Tilghman Lesher
6acbf688e6 Protect against overflow, when calculating how long to wait for a frame.
(closes issue #17128)
 Reported by: under
 Patches: 
       d.diff uploaded by under (license 914)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@261093 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-05-04 23:36:53 +00:00
David Vossel
2077fcfc6d resolves deadlocks in chan_local
Issue_1.
In the local_hangup() 3 locks must be held at the same time... pvt, pvt->chan,
and pvt->owner.  Proper deadlock avoidance is done when the channel to hangup
is the outbound chan_local channel, but when it is not the outbound channel we
have an issue... We attempt to do deadlock avoidance only on the tech pvt, when
both the tech pvt and the pvt->owner are locked coming into that loop.  By
never giving up the pvt->owner channel deadlock avoidance is not entirely possible.
This patch resolves that by doing deadlock avoidance on both the pvt->owner and the pvt
when trying to get the pvt->chan lock.

Issue_2.
ast_prod() is used in ast_activate_generator() to queue a frame on the channel
and make the channel's read function get called.  This function is used in
ast_activate_generator() while the channel is locked, which mean's the channel
will have a lock both from the generator code and the frame_queue code by the
time it gets to chan_local.c's local_queue_frame code... local_queue_frame
contains some of the same crazy deadlock avoidance that local_hangup requires,
and this recursive lock prevents that deadlock avoidance from happening correctly.
This patch removes ast_prod() from the channel lock so only one lock is held during
the local_queue_frame function.

(closes issue #17185)
Reported by: schmoozecom
Patches:
      issue_17185_v1.diff uploaded by dvossel (license 671)
      issue_17185_v2.diff uploaded by dvossel (license 671)
Tested by: schmoozecom, GameGamer43

Review: https://reviewboard.asterisk.org/r/631/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@259858 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-04-28 21:16:03 +00:00
Mark Michelson
d4637b864c Let compilation succeed warning-free when DONT_OPTIMIZE is turned off.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@259104 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-04-26 21:44:43 +00:00
Mark Michelson
a06794cf7a Prevent Newchannel manager events for dummy channels.
No Newchannel manager event will be fired for channels that are
allocated to not match a registered technology type. Thus bogus
channels allocated solely for variable substitution or CDR
operations do not result in a Newchannel event.

(closes issue #16957)
Reported by: atis

Review: https://reviewboard.asterisk.org/r/601



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@259018 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-04-26 21:03:08 +00:00
Matthew Nicholson
5375985fa9 Fix broken CDR behavior.
This change allows a CDR record previously marked with disposition ANSWERED to be set as BUSY or NO ANSWER.

Additionally this change partially reverts r235635 and does not set the AST_CDR_FLAG_ORIGINATED flag on CDRs generated from ast_call().  To preserve proper CDR behavior, the AST_CDR_FLAG_DIALED flag is now cleared from all brige CDRs in ast_bridge_call().

(closes issue #16797)
Reported by: VarnishedOtter
Tested by: mnicholson



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@258670 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-04-22 21:49:07 +00:00
Russell Bryant
cd40a4681f Remove extremely verbose debug message.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@256009 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-04-02 23:30:15 +00:00
Jason Parker
8371df4e7b Revert revisions 254046 and 254098.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@254161 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-03-23 22:45:55 +00:00
Jason Parker
16a9a742a4 Allow out-of-tree modules to load, regardless of DEBUG_THREADS/DEBUG_CHANNEL_LOCKS differences.
This can be guaranteed by forcing the ABI to no longer change when these compiler flags are set.
An unfortunate side-effect to this is that there is an ABI change here.  However, there is some
mitigation.  Existing modules *will* fail to load since they would require functions that no
longer exist.

Review: https://reviewboard.asterisk.org/r/508/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@254046 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-03-23 21:07:54 +00:00
Terry Wilson
529e8af144 Merged revisions 252089 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk

........
  r252089 | twilson | 2010-03-12 16:04:51 -0600 (Fri, 12 Mar 2010) | 20 lines
  
  Only change the RTP ssrc when we see that it has changed
  
  This change basically reverts the change reviewed in
  https://reviewboard.asterisk.org/r/374/ and instead limits the
  updating of the RTP synchronization source to only those times when we
  detect that the other side of the conversation has changed the ssrc.
  
  The problem is that SRCUPDATE control frames are sent many times where
  we don't want a new ssrc, including whenever Asterisk has to send DTMF
  in a normal bridge. This is also not the first time that this mistake
  has been made. The initial implementation of the ast_rtp_new_source
  function also changed the ssrc--and then it was removed because of
  this same issue. Then, we put it back in again to fix a different
  issue. This patch attempts to only change the ssrc when we see that
  the other side of the conversation has changed the ssrc.
  
  It also renames some functions to make their purpose more clear.
  
  Review: https://reviewboard.asterisk.org/r/540/
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@252175 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-03-13 00:30:04 +00:00
David Vossel
ff6dd92e3e lock channel during datastore removal
On channel destruction the channel's datastores are removed and
destroyed.  Since there are public API calls to find and remove
datastores on a channel, a lock should be held whenever datastores are
removed and destroyed.  This resolves a crash caused by a race
condition in app_chanspy.c.

(closes issue #16678)
Reported by: tim_ringenbach
Patches:
      datastore_destroy_race.diff uploaded by tim ringenbach (license 540)
Tested by: dvossel




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@246545 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-12 23:30:17 +00:00
Jason Parker
403eb70599 Fix some silly formatting, and remove unnecessary option_debug checks
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@246460 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-12 18:52:28 +00:00
Tilghman Lesher
72af53a885 Revert previous chan_local fix (r236981) and fix instead by destroying expired frames in the queue.
(closes issue #16525)
 Reported by: kobaz
 Patches: 
       20100126__issue16525.diff.txt uploaded by tilghman (license 14)
       20100129__issue16525__1.6.0.diff.txt uploaded by tilghman (license 14)
 Tested by: kobaz, atis

(closes issue #16581)
 Reported by: ZX81

(closes issue #16681)
 Reported by: alexr1



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@244070 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-02-01 17:46:31 +00:00
Jeff Peeler
b024a9452d Remove unnecessary code in ast_read as issue 16058 has been fully solved now.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@243258 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-01-26 18:19:10 +00:00
David Vossel
6c6a857e1c add silence gen to wait apps
asterisk.conf's 'transmit_silence' option existed before
this patch, but was limited to only generating silence
while recording and sending DTMF. Now enabling the
transmit_silence option generates silence during wait
times as well.
  
To achieve this, ast_safe_sleep has been modified to
generate silence anytime no other generators are present
and transmit_silence is enabled. Wait apps not using
ast_safe_sleep now generate silence when transmit_silence
is enabled as well.

(closes issue 0016524)
Reported by: kobaz

(closes issue 0016523)
Reported by: kobaz
Tested by: dvossel
  
Review: https://reviewboard.asterisk.org/r/456/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@239718 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-01-13 17:16:12 +00:00
Jeff Peeler
8291fb5083 Correct CDR dispositions for BUSY/FAILED
This patch is simple in that it reorders the disposition defines so that the fix
for issue 12946 works properly (the default CDR disposition was changed to
AST_CDR_NOANSWER). Also, the AST_CDR_FLAG_ORIGINATED flag was set in ast_call to
ensure all CDR records are written.

The side effects of CDR changes are scary, so I'm documenting the test cases
performed to attempt to catch any regressions. The following tests were all
performed using 1.4 rev 195881 vs head (235571) + patch:

A calls B
C calls B (busy)
Hangup C
Hangup A

(Both SIP and features)
A calls B
A blind transfers to C
Hangup C

(Both SIP and features)
A calls B
A attended transfers to C
Hangup C

A calls B
A attended transfers to C (SIP)
C blind transfers to A (features)
Hangup A

All of the test scenario CDRs matched.

The following tests were performed just with the patch to ensure proper operation
(with unanswered=yes):

exten =>s,1,Answer
exten =>s,n,ResetCDR(w)
exten =>s,n,ResetCDR(w)

exten =>s,1,ResetCDR(w)
exten =>s,n,ResetCDR(w)

(closes issue #16180)
Reported by: aatef
Patches: 
      bug16180.patch uploaded by jpeeler (license 325)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@235635 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-12-18 22:29:51 +00:00
Russell Bryant
a10f93404d Only do frame payload check for HOLD frames.
This code was added for helping to debug the source of invalid HOLD frames.
However, a side effect of this is that it will incorrectly report errors for
frames that have an integer payload.  Make the check for this block specific
to the HOLD frame case.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@233092 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-12-04 17:12:47 +00:00
Terry Wilson
c2c8cea691 Fix compiling without devmode
(closes issue #16367)
 Reported by: falves11


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@232165 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-12-02 04:05:09 +00:00
Jeff Peeler
8d6faec4b6 log channel name in dev mode as well
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@231926 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-12-01 21:52:39 +00:00
Jeff Peeler
9405b9e2b7 Fix crash with invalid frame data
The crash was happening as a result of a frame containing an invalid data
pointer, but was set with data length of zero. The few times the issue was
reproduced it _seemed_ that the frame was queued properly, that is the data
pointer was set to NULL. I never could reproduce the crash so as a last resort
the crash has been fixed, but a check in __ast_read has been added to give as
much information about the source of problematic frames in the future.

(closes issue #16058)
Reported by: atis


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@231911 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-12-01 21:29:31 +00:00
Tilghman Lesher
85cce5cb4b After a frame duplication failure, unlock the channel before returning.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@231298 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-25 22:31:57 +00:00
Leif Madsen
446f9a0e47 Update WARNING message.
Update a WARNING message to give a suggested fix when encountered.

(closes issue #16198)
Reported by: atis
Tested by: atis

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@228896 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-09 15:37:43 +00:00
David Vossel
8939eece6a fixes audiohook write crash occuring in chan_spy whisper mode.
After writing to the audiohook list in ast_write(), frames
were being freed incorrectly.  Under certain conditions this
resulted in a double free crash.

(closes issue #16133)
Reported by: wetwired

(closes issue #16045)
Reported by: bluecrow76
Patches:
      issue16045.diff uploaded by dvossel (license 671)
Tested by: bluecrow76, dvossel, habile


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@228692 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-06 22:33:27 +00:00
Matthew Nicholson
99a8ffb52c Signal timeouts by returning AST_CONTROL_RINGING when originating calls.
(closes issue #15104)
Reported by: nblasgen
Patches:
      manager-timeout1.diff uploaded by mnicholson (license 96)
Tested by: nblasgen, mnicholson



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@223225 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-10-09 18:20:11 +00:00
Tilghman Lesher
727d91d733 Avoid a potential NULL dereference.
(closes issue #15865)
 Reported by: kobaz
 Patches: 
       20090915__issue15865.diff.txt uploaded by tilghman (license 14)
 Tested by: kobaz


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@221200 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-09-30 16:55:21 +00:00
Matthew Nicholson
ea3f81a68f Prevent a potential race condition and crash when hanging up a channel by removing the channel from the channel list before begining channel tear down.
This fix may potentially cause problems with CDR backends that access the channel a CDR is associated with via the channel list.  This fix makes the channel unavabile at the time when the CDR backend is invoked.  This has been documented in include/asterisk/cdr.h.

(closes issue #15316)
Reported by: vmarrone
Tested by: mnicholson

Review: https://reviewboard.asterisk.org/r/362/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@219136 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-09-17 14:58:39 +00:00
Tilghman Lesher
fafa668b04 Modify comment to be a bit more accurate.
We have kept this comment around long enough, that it's pretty clear that we're
keeping the code, because changing the code would require a pretty fundamental
architectural shift.  We've also taken criticism in some quarters, because it
was believed that it was referring to the code being nasty.  No, the code isn't
nasty, just the operation itself is rather odd.  Fixed for eternity (probably
not).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@214701 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-28 20:13:32 +00:00
David Vossel
899272c2cc ast_write() ignores ast_audiohook_write() results
In ast_write(), if a channel has a list of audiohooks, those
lists are written to and the resulting frame is what ast_write()
should continue with.  The problem was the returned audiohook frame
was not being handled at all, and the original frame passed
into it did not contain the mixed audio, so essentially audio
was being lost.  One result of this was chan_spy's whisper
mode no longer worked.  To complicate the issue, frames
passed into ast_write may either be a single frame, or a list
of frames.  So, as the list of frames is processed in the
audiohook_write, the returned frames had to be added to a new
list.

(closes issue #15660)
Reported by: corruptor
Tested by: dvossel



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@214194 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-26 16:36:42 +00:00
Tilghman Lesher
63cc189747 AST-2009-005
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@211528 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-10 19:15:57 +00:00
Tilghman Lesher
e87d76cb94 Because channel information can be accessed outside of the channel thread, we must lock the channel prior to modifying it.
(closes issue #15397)
 Reported by: caspy
 Patches: 
       20090714__issue15397.diff.txt uploaded by tilghman (license 14)
 Tested by: caspy


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@210913 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-08-06 21:45:01 +00:00
Russell Bryant
8b67a33369 Only do the chan->fdno check in ast_read() in a developer build.
I changed this check to only happen in a dev-mode build.  I also added a
comment explaining what is going on.  I also made it so that detection of
this situation does not affect ast_read() operation.

(closes issue #14723)
Reported by: seadweller


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@207360 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-07-20 16:26:24 +00:00
Russell Bryant
72b285ed96 Report CallerID change during a masquerade.
Reported by: markster


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@202496 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-06-22 20:08:53 +00:00
Mark Michelson
03909de702 Change the datastore traversal in ast_do_masquerade to use a safe list traversal.
It is possible for datastore fixup functions to remove the datastore from the list
and free it. In particular, the queue_transfer_fixup in app_queue does this. While
I don't yet know of this causing any crashes, it certainly could.

Found while discussing a separate issue with Brian Degenhardt.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@201450 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-06-17 19:59:31 +00:00
Kevin P. Fleming
94fa4d11b5 Improve support for media paths that can generate multiple frames at once.
There are various media paths in Asterisk (codec translators and UDPTL, primarily)
that can generate more than one frame to be generated when the application calling
them expects only a single frame. This patch addresses a number of those cases,
at least the primary ones to solve the known problems. In addition it removes the
broken TRACE_FRAMES support, fixes a number of bugs in various frame-related API
functions, and cleans up various code paths affected by these changes.

https://reviewboard.asterisk.org/r/175/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@200991 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-06-16 17:05:38 +00:00
Mark Michelson
af2e7f5eab Suppress a warning message and give a better return code when generating
inband ringing after a call is answered.

(closes issue #15158)
Reported by: madkins
Patches:
      15158.patch uploaded by mmichelson (license 60)
Tested by: madkins



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@200360 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-06-12 19:06:41 +00:00
David Vossel
ddb4e3f2e7 Generic call forward api, ast_call_forward()
The function ast_call_forward() forwards a call to an extension specified in an ast_channel's call_forward string.  After an ast_channel is called, if the channel's call_forward string is set this function can be used to forward the call to a new channel and terminate the original one.  I have included this api call in both channel.c's ast_request_and_dial() and res_feature.c's feature_request_and_dial().  App_dial and app_queue already contain call forward logic specific for their application and options.

(closes issue #13630)
Reported by: festr

Review: https://reviewboard.asterisk.org/r/271/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@198891 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-06-03 15:49:46 +00:00
Matthew Nicholson
aa2fd9a4c2 Use AST_CDR_NOANSWER instead of AST_CDR_NULL as the default CDR disposition.
This change also involves the addition of an AST_CDR_FLAG_ORIGINATED flag that is used on originated channels to distinguish: them from dialed channels.

(closes issue #12946)
Reported by: meral
Patches:
      null-cdr2.diff uploaded by mnicholson (license 96)
Tested by: mnicholson, dbrooks

(closes issue #15122)
Reported by: sum
Tested by: sum



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@198068 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-05-29 18:53:01 +00:00
Jeff Peeler
829907e467 Fix broken attended transfers
The bridge was terminating immediately after the attended transfer was 
completed. The problem was because upon reentering ast_channel_bridge
nexteventts was checked to see if it was set and if so could possibly
return AST_BRIDGE_COMPLETE.

(closes issue #15183)
Reported by: andrebarbosa
Tested by: andrebarbosa, tootai, loloski



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@197124 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-05-27 16:49:38 +00:00
Mark Michelson
7189d75805 Remove an extraneous unlocking operation from ast_channel_free.
In the case that we could not remove the desired channel from the
list of channels, there was an extra call to unlock the channel list.
Since we unlock the list later on in the function anyway, this results
in the list being unlocked twice yet only being locked once.

(closes issue #15098)
Reported by: tim_ringenbach
Patches:
      remove_extra_unlock.diff uploaded by tim (license 540)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@194356 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-05-13 19:41:44 +00:00