Commit Graph

340 Commits

Author SHA1 Message Date
Terry Wilson
5a1bd8ffbc Fix app_dial ring groups
Revert part of r315643. We need to remove the datastore here as well.
The code in bridging code will catch anything that app_dial might miss.

(closes issue #19311)
Reported by: mspuhler
Patches: 
      issue_19311_no_answer.diff uploaded by elguero (license 37)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@319527 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-05-18 19:56:08 +00:00
Terry Wilson
77acf5b626 Allow transfer loops without allowing forwarding loops
We try to avoid the situation where two phones may be forwarded to each other
causing an infinite loop by storing each dialed interface in a channel
datastore and checking the list before dialing out. This works, but currently
breaks situations like A calls B, A transfers B to C, B transfers C to A, and A
transfers C to B. Since human interaction is happening here and not an
automated forwarding loop, it should be allowed.

This patch removes the dialed_interfaces datastore when a call is bridged (a
suggestion from the brilliant mmichelson). If a call is being bridged, it
should be safe to assume that we aren't stuck in a loop.

Since we are now handling this is the bridge code, the previous attempts at
handling it in app_dial and app_queue are removed.

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


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@315596 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-04-26 21:16:10 +00:00
Jason Parker
e03c6ed738 Prevent a crash when dialing a technology with no destination (ex: Dial(SIP/))
chan_iax2 and other channel drivers already had code to prevent this.  The
attempt that app_dial was making to prevent it was not correct, so I fixed that.

(closes issue #18371)
Reported by: gbour
Patches: 
      18371.patch uploaded by gbour (license 1162)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@305252 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-01-31 22:56:54 +00:00
Leif Madsen
9f2050cc3d Option L() is milliseconds, not seconds.
Change the verbose output of option L() to say milliseconds and not seconds
as the value is in milliseconds.

(closes issue #18264)
Reported by: jacco
Patches: 
      app_dial_patch.txt uploaded by lmadsen (license 10)
Tested by: lmadsen, jacco

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@302916 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-01-20 15:38:33 +00:00
Russell Bryant
72d3cd8b47 Handle failures building translation paths more effectively.
The problem scenario occurred on a heavily loaded system that was using the
codec_dahdi module and exceeded the hardware transcoding capacity.  The failure
mode at that point was not good.  The report came in to us as an Asterisk
lock-up.  The "core show locks" shows a ton of threads locked up (but no
obvious deadlock).  Upon deeper investigation, when the system is in this
state, the CPU was maxed out.  The CPU was being consumed by the Asterisk
logger spewing messages on every audio frame for calls set up after transcoder
capacity was reached.

The purpose of this patch is to make Asterisk handle failures to create a
translation path in a more graceful manner.  If we can't translate, then the
call just needs to be dropped, as it's not going to work.  These are the
changes:

1) In set_format() of channel.c (which is called by set_read_format() and
set_write_format()), it was ignoring if ast_translator_build_path() failed and
returned NULL.  It now pays attention to that case and returns a result
reflecting failure.  With this change in place, the bridging code will
immediately detect a failure and end the bridge instead of proceeding to try to
bridge frames that can't be translated and making channel drivers freak out by
sending them frames in a format they weren't expecting.

2) In ast_indicate_data() of channel.c, failure of ast_playtones_start() was
ignored.  It is now reflected in the return value of the function.  This didn't
turn out to have any affect on the bug, but seemed like a good change to leave
in.

3) In app_dial(), when only sending a call to a single endpoint, it will
attempt to do some bridging of its own of early audio.  It uses
make_compatible() when it's going to do this.  However, it ignored failure from
make compatible.  So, even with the fix from #1, if there was early audio going
through app_dial, there would still be a period of invalid frames passing
through.  After detecting failure here, Dial() exits.

ABE-2658


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@296000 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-11-24 16:48:39 +00:00
Paul Belanger
c560e9994b Record priv-recordintro as sln, not gsm
This removes the gsm->sln step when transcoding
priv-recordintro.

(closes issue #18176)
Reported by: pabelanger
Patches: 
      chan_sip.diff uploaded by pabelanger (license 224)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@292411 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-10-21 00:00:51 +00:00
Russell Bryant
1c72a8ab49 Reset visible indication after answer.
(closes issue #17641)
Reported by: klaus3000
Patches:
      ast1.6.2.9-app_dial-visible_indication.patch.txt uploaded by klaus3000 (license 65)
Tested by: schmidts


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@281566 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-08-10 17:45:45 +00:00
Richard Mudgett
08883af231 SIP promiscuous redirect could fail to dial the redirect.
The ast_channel was created with one variable to ast_request() but the
call to ast_call() that initiates the outgoing call was using a different
variable.  The two variables are not equivalent if the call_forward string
included a channel technology specifier.  e.g., SIP/200


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@279206 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-07-23 21:56:44 +00:00
Matthew Nicholson
fa79e11a91 Clear the AST_CDR_FLAG_DIALED flag for channels going into the pbx via the G option in app_dial
(closes issue #17592)
Reported by: jamicque
Patches:
      G-flag-cdr-fix1.diff uploaded by mnicholson (license 96)
Tested by: jamicque, mnicholson


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@275027 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-07-09 16:04:21 +00:00
Leif Madsen
1d9be78f12 Add documentation clarifying when 't' and 'T' can be used.
(closes issue #17021)
Reported by: kovzol
Tested by: lmadsen, kovzol, davidw, ebroad

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@255503 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-03-31 17:42:58 +00:00
Russell Bryant
43393bd1a9 Resolve a number of FreeBSD build issues.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@253631 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2010-03-20 19:17:28 +00:00
David Vossel
c79e242ada fixes solaris segfault on dial with verbosity >= 3
(closes issue #16193)
Reported by: asgaroth
Patches:
      bug_16193_1.4.21.2_vers.diff uploaded by snuffy (license 35)
Tested by: asgaroth, snuffy



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@231235 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-25 21:38:32 +00:00
Matthew Nicholson
3c256882d6 This patch modifies the Dial application to monitor the calling channel for hangups while playing back announcements.
(closes issue #16005)
Reported by: falves11
Patches:
      dial-announce-hangup-fix1.diff uploaded by mnicholson (license 96)
Tested by: mnicholson, falves11

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


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@227827 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-04 20:52:27 +00:00
Joshua Colp
ed413ec76c Fix a bug where the recorded privacy introduction file would not get removed if the caller hung up
while the called party had not yet answered.

This was fixed by introducing an argument to the 'n' option which, when enabled, removes the introduction
file under all scenarios. This was done to preserve the behavior that has existed for quite some time.

(closes issue #14674)
Reported by: ulogic
Patches:
      bug14674.patch uploaded by jpeeler (license 325)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@226889 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-11-02 18:08:11 +00:00
Joshua Colp
926a033bf9 Do not attempt early media bridging (ie: direct RTP setup) if options are enabled that should prevent it.
(closes issue #14763)
Reported by: cupotka


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@224565 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-10-19 19:47:50 +00:00
Jeff Peeler
e3464ac40a Ensure ringing continues for branched calls after progress is received
While waiting for an answer, don't send progress for branched calls
for which ringing was sent.

(closes issue #15028)
Reported by: fnordian


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@223804 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-10-12 23:12:50 +00:00
Mark Michelson
a9317f6cbe Fix potential memory leak in app_dial.c
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@223213 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-10-09 18:17:12 +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
Russell Bryant
55d9c2ecaf Do not log an ERROR if autoservice_stop() returns -1.
This does not indicate an error.  A return of -1 just means that the channel
has been hung up.

(reported in #asterisk-dev)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@208592 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-07-24 18:38:24 +00:00
Sean Bright
48253ef901 Treat an empty FORWARD_CONTEXT the same way we treat a missing one.
(closes issue #15056)
Reported by: p_lindheimer
Patches:
      05292009_bug15056.diff uploaded by seanbright (license 71)
Tested by: p_lindheimer


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@198251 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-05-30 02:46:41 +00:00
Terry Wilson
59ee389e31 Update CDR appropriately when AST_CAUSE_NO_ANSWER is set
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@189465 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-04-20 21:10:27 +00:00
Terry Wilson
ef9ef40c19 Don't treat a NOANSWER like a CHANUNAVAIL
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@189463 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-04-20 21:00:52 +00:00
Mark Michelson
8e31a331b4 Fix a crash due to too few arguments to RetryDial.
(closes issue #14852)
Reported by: junky
Patches:
      retry_fix.diff uploaded by junky (license 177)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@187135 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-04-08 19:16:49 +00:00
Terry Wilson
2da89b3022 Add missing datastore inherit (exists in all other branches)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@183481 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-03-19 23:37:59 +00:00
David Vossel
f42e9eb6bf Cleaning up a few things in detect disconnect patch
Initialized ast_call_feature in detect_disconnect to avoid accessing uninitialized memory.  Cleaned up /param tags in features.h.  No longer send dynamic features in ast_feature_detect. 

issue #11583


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@183386 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-03-19 19:40:07 +00:00
David Vossel
dd17912d68 Allow disconnect feature before a call is bridged
feature.conf has a disconnect option.  By default this option is set to '*', but it could be anything.  If a user wishes to disconnect a call before the other side answers, only '*' will work, regardless if the disconnect option is set to something else.  This is because features are unavailable until bridging takes place.  The default disconnect option, '*', was hardcoded in app_dial, which doesn't make any sense from a user perspective since they may expect it to be something different.  This patch allows features to be detected from outside of the bridge, but not operated on.  In this case, the disconnect feature can be detected before briding and handled outside of features.c.

(closes issue #11583)
Reported by: sobomax
Patches:
	patch-apps__app_dial.c uploaded by sobomax (license 359)
	11583.latest-patch uploaded by murf (license 17)
	detect_disconnect.diff uploaded by dvossel (license 671)
Tested by: sobomax, dvossel
Review: http://reviewboard.digium.com/r/195/






git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@183126 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-03-19 16:15:16 +00:00
Terry Wilson
4e069885ce Fix feature inheritance with builtin features
When using builtin features like parking and transfers, the AST_FEATURE_* flags
would not be set correctly for all instances when either performing a builtin
attended transfer, or parking a call and getting the timeout callback.  Also,
there was no way on a per-call basis to specify what features someone should
have on picking up a parked call (since that doesn't involve the Dial() command).
There was a global option for setting whether or not all users who pickup a
parked call should have AST_FEATURE_REDIRECT set, but nothing for DISCONNECT,
AUTOMON, or PARKCALL.

This patch:
1) adds the BRIDGE_FEATURES dialplan variable which can be set either in the
dialplan or with setvar in channels that support it.  This variable can be set
to any combination of 't', 'k', 'w', and 'h' (case insensitive matching of the
equivalent dial options), to set what features should be activated on this
channel.  The patch moves the setting of the features datastores into the
bridging code instead of app_dial to help facilitate this.

2) adds global options parkedcallparking, parkedcallhangup, and
parkedcallrecording to be similar to the parkedcalltransfers option for
globally setting features.

3) has builtin_atxfer call builtin_parkcall if being transfered to the parking
extension since tracking everything through multiple masquerades, etc. is
difficult and error-prone

4) attempts to fix all cases of return calls from parking and completed builtin
transfers not having the correct permissions
(closes issue #14274)
Reported by: aragon
Patches: 
      fix_feature_inheritence.diff.txt uploaded by otherwiseguy (license 396)
Tested by: aragon, otherwiseguy

Review http://reviewboard.digium.com/r/138/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@172517 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-30 17:47:41 +00:00
Joshua Colp
8a1faf0a58 When a call is forwarded stop any active indications. The new channel will provide an indication, if need be, itself.
(closes issue #14310)
Reported by: RadicAlish


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@170568 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2009-01-23 19:06:54 +00:00
Steve Murphy
e3700a13a4 This merges the masqpark branch into 1.4
These changes eliminate the need for (and use of)
the KEEPALIVE return code in res_features.c;
There are other places that use this result code
for similar purposes at a higher level, these appear
to be left alone in 1.4, but attacked in trunk.

The reason these changes are being made in 1.4, is
that parking ends a channel's life, in some situations,
and the code in the bridge (and some other places),
was not checking the result code properly, and dereferencing
the channel pointer, which could lead to memory corruption
and crashes.

Calling the masq_park function eliminates this danger 
in higher levels.

A series of previous commits have replaced some parking calls
with masq_park, but this patch puts them ALL to rest,
(except one, purposely left alone because a masquerade
is done anyway), and gets rid of the code that tests
the KEEPALIVE result, and the NOHANGUP_PEER result codes.

While bug 13820 inspired this work, this patch does
not solve all the problems mentioned there.

I have tested this patch (again) to make sure I have
not introduced regressions. 

Crashes that occurred when a parked party hung up
while the parking party was listening to the numbers
of the parking stall being assigned, is eliminated.

These are the cases where parking code may be activated:

1. Feature one touch (eg. *3)
2. Feature blind xfer to parking lot (eg ##700)
3. Run Park() app from dialplan (eg sip xfer to 700)
   (eg. dahdi hookflash xfer to 700)
4. Run Park via manager.

The interesting testing cases for parking are:
I. A calls B, A parks B
    a. B hangs up while A is getting the numbers announced.
    b. B hangs up after A gets the announcement, but 
       before the parking time expires
    c. B waits, time expires, A is redialed,
       A answers, B and A are connected, after
       which, B hangs up.
    d. C picks up B while still in parking lot.

II. A calls B, B parks A
    a. A hangs up while B is getting the numbers announced.
    b. A hangs up after B gets the announcement, but 
       before the parking time expires
    c. A waits, time expires, B is redialed,
       B answers, A and B are connected, after
       which, A hangs up.
    d. C picks up A while still in parking lot.

Testing this throroughly involves acting all the permutations
of I and II, in situations 1,2,3, and 4.

Since I added a few more changes (ALL references to KEEPALIVE in the bridge
code eliimated (I missed one earlier), I retested
most of the above cases, and no crashes.

H-extension weirdness.

Current h-extension execution is not completely
correct for several of the cases.

For the case where A calls B, and A parks B, the
'h' exten is run on A's channel as soon as the park
is accomplished. This is expected behavior.

But when A calls B, and B parks A, this will be
current behavior:

After B parks A, B is hung up by the system, and
the 'h' (hangup) exten gets run, but the channel
mentioned will be a derivative of A's...

Thus, if A is DAHDI/1, and B is DAHDI/2,
the h-extension will be run on channel
Parked/DAHDI/1-1<ZOMBIE>, and the 
start/answer/end info will be those 
relating to Channel A.

And, in the case where A is reconnected to
B after the park time expires, when both parties
hang up after the joyful reunion, no h-exten
will be run at all.

In the case where C picks up A from the 
parking lot, when either A or C hang up,
the h-exten will be run for the C channel.

CDR's are a separate issue, and not addressed
here.

As to WHY this strange behavior occurs, 
the answer lies in the procedure followed
to accomplish handing over the channel
to the parking manager thread. This procedure
is called masquerading. In the process,
a duplicate copy of the channel is created,
and most of the active data is given to the
new copy. The original channel gets its name
changed to XXX<ZOMBIE> and keeps the PBX
information for the sake of the original
thread (preserving its role as a call 
originator, if it had this role to begin
with), while the new channel is without
this info and becomes a call target (a
"peer").

In this case, the parking lot manager
thread is handed the new (masqueraded)
channel. It will not run an h-exten
on the channel if it hangs up while
in the parking lot. The h exten will
be run on the original channel instead,
in the original thread, after the bridge
completes.

See bug 13820 for our intentions as
to how to clean up the h exten behavior.

Review: http://reviewboard.digium.com/r/29/



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@166093 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-19 22:30:32 +00:00
Joshua Colp
dfa5f7c4b4 Can we try not to assign an unsigned int to -1?
(closes issue #14074)
Reported by: wetwired


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@164204 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-15 15:05:08 +00:00
Tilghman Lesher
d8ff8d169d Change the default calldurationlimit from the special value 0 to -1, so we
can better detect an exceptional case.  This follows on to the changes made
in revision 156386.  Related to issue #13851.
(closes issue #13974)
 Reported by: paradise
 Patches: 
       20081208__bug13974.diff.txt uploaded by Corydon76 (license 14)
 Tested by: file, blitzrage, ZX81


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@164082 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-12-13 23:22:02 +00:00
Mark Michelson
3a1a981e2e Make sure to set the hangup cause on the calling channel in the case
that ast_call() fails. For incoming SIP channels, this was causing
us to send a 603 instead of a 486 when the call-limit was reached on
the destination channel.

(closes issue #13867)
Reported by: still_nsk
Patches:
      13867.diff uploaded by putnopvut (license 60)
Tested by: blitzrage



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@158053 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-20 17:33:06 +00:00
Mark Michelson
3429c9de5e Fix a crash in the end_bridge_callback of app_dial and
app_followme which would occur at the end of an attended
transfer. The error occurred because we initially stored
a pointer to an ast_channel which then was hung up due
to a masquerade.

This commit adds a "fixup" callback to the bridge_config
structure to allow for end_bridge_callback_data to be
changed in the case that a new channel pointer is needed
for the end_bridge_callback.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@157305 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-18 18:25:55 +00:00
Tilghman Lesher
382459fac8 When using call limits under 1 second, infinite call lengths are allowed,
instead.
(closes issue #13851)
 Reported by: ruddy


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@156386 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-12 21:18:57 +00:00
Mark Michelson
bd9001e16b When doing some tests, I was having a crash at the end of every call
if an attended transfer occurred during the call. I traced the cause to
the CDR on one of the channels being NULL. murf suggested a check in
the end bridge callback to be sure the CDR is non-NULL before proceeding,
so that's what I'm adding.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@156167 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-12 17:38:33 +00:00
Sean Bright
f2ecc4c80e Use static functions here instead of nested ones. This requires a small
change to the ast_bridge_config struct as well.  To understand the reason
for this change, see the following post:

    http://gcc.gnu.org/ml/gcc-help/2008-11/msg00049.html


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@155553 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-11-09 01:08:07 +00:00
Terry Wilson
6280e04736 Recent CDR fixes moved execution of the 'h' exten into the bridging code, so variables that were set after ast_bridge_call was called would not show up in the 'h' exten. Added a callback function to handle setting variables, etc. from w/in the bridging code. Calls back into a nested function within the function calling ast_bridge_call
(closes issue #13793)
Reported by: greenfieldtech


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@153095 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-10-31 15:45:29 +00:00
Steve Murphy
fffb7722be A little documentation cross-ref between features and
dial and queue... I wasted some time (stupidly) trying
to get the one-touch parking stuff working, because it
didn't occur to me that I had to also have the corresponding
options in the dial command! Duh! (In all this time, I never
set this up before!)
So, to keep some poor fool from suffering the same fate,
I made the features.conf.sample file mention the corresponding
opts in dial/queue; and the docs for dial/app specifically
mention the corresponding decls in the feature.conf file.

I hope this doesn't spoil some vast, eternal plan...



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@152538 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-10-29 05:19:04 +00:00
Steve Murphy
961bc7e758 The magic trick to avoid this crash is not to
try to find the channel by name in the list,
which is slow and resource consuming, but rather
to pay attention to the result codes from the
ast_bridge_call, to which I added the 
AST_PBX_NO_HANGUP_PEER_PARKED value, which
now are returned when a channel is parked.

If you get AST_PBX_KEEPALIVE,
then don't touch the channel pointer.

If you get AST_PBX_NO_HANGUP_PEER, or
AST_PBX_NO_HANGUP_PEER_PARKED, then don't
touch the peer pointer.

Updated the several places where the results
from a bridge were not being properly obeyed,
and fixed some code I had introduced so that
the results of the bridge were not overridden 
(in trunk).

All the places that previously tested for 
AST_PBX_NO_HANGUP_PEER now have to check for
both AST_PBX_NO_HANGUP_PEER and AST_PBX_NO_HANGUP_PEER_PARKED.

I tested this against the 4 common parking
scenarios:


1. A calls B; B answers; A parks B; B hangs up while A is getting the parking
slot announcement, immediately after being put on hold.

2. A calls B; B answers; A parks B; B hangs up after A has been hung up, but
before the park times out.

3. A calls B; B answers; B parks A; A hangs up while B is getting the parking slot announcement, immediately after being put on hold.

4. A calls B; B answers; B parks A; A hangs up after B has been hung up, but before the park times out.


No crash.

I also ran the scenarios above against valgrind, and accesses looked good.




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@152535 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-10-29 04:36:32 +00:00
Tilghman Lesher
785f27a29a Reset all DIAL variables back to blank, in case Dial is called multiple times
per call (which could otherwise lead to inconsistent status reports).
(closes issue #13216)
 Reported by: ruddy
 Patches: 
       20081014__bug13216.diff.txt uploaded by Corydon76 (license 14)
 Tested by: ruddy


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@152368 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-10-28 17:04:56 +00:00
Steve Murphy
eccd14d7f0 Tested by: sergee, murf, chris-mac, andrew, KNK
This is a "second attempt" to restore the previous "endbeforeh" behavior
in 1.4 and up. In order to capture information concerning all the
legs of transfers in all their infinite combinations, I was forced
to this particular solution by a chain of logical necessities, the
first being that I was not allowed to rewrite the CDR mechanism from 
the ground up!

This change basically leaves the original machinery alone, which allows
IVR and local channel type situations to generate CDR's as normal, but
a channel flag can be set to suppress the normal running of the h exten.
That flag would be set by the code that runs the h exten from the
ast_bridge_call routine, to prevent the h exten from being run twice.
Also, a flag in the ast_bridge_config struct passed into ast_bridge_call
can be used to suppress the running of the h exten in that routine. This
would happen, for instance, if you use the 'g' option in the Dial app.

Running this routine 'early' allows not only the CDR() func to be used
in the h extension for reading CDR variables, but also allows them to
be modified before the CDR is posted to the backends.

While I dearly hope that this patch overcomes all problems, and 
introduces no new problems, reality suggests that surely someone
will have problems. In this case, please re-open 13251 (or 13289),
and we'll see if we can't fix any remaining issues.




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@142675 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-09-12 04:29:34 +00:00
Steve Murphy
ee8adb313e (closes issue #12982)
Reported by: bcnit
Tested by: murf

I discovered that also, in the previous bug fixes and changes,
the cdr.conf 'unanswered' option is not being obeyed, so
I fixed this.

And, yes, there are two 'answer' times involved in this
scenario, and I would agree with you, that the first 
answer time is the time that should appear in the CDR.
(the second 'answer' time is the time that the bridge
was begun).

I made the necessary adjustments, recording the first
answer time into the peer cdr, and then using that to
override the bridge cdr's value.

To get the 'unanswered' CDRs to appear, I purposely
output them, using the dial cmd to mark them as
DIALED (with a new flag), and outputting them if
they bear that flag, and you are in the right mode.

I also corrected one small mention of the Zap device
to equally consider the dahdi device.

I heavily tested 10-sec-wait macros in dial, and
without the macro call; I tested hangups while the
macro was running vs. letting the macro complete
and the bridge form. Looks OK. Removed all the
instrumentation and debug.




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@135799 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-08-05 23:13:20 +00:00
Mark Michelson
cb503c4cb4 Add a check to the CAN_EARLY_BRIDGE macro in app_dial to
be sure there are no audiohooks present on the channels
involved. This fixed a one-way audio situation I had in
my test setup. I couldn't find any open issues that suggested
one-way audio with regards to mixmonitor (or other audiohook)
usage, though.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@130792 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-14 17:50:21 +00:00
Tilghman Lesher
e46bb5f5bc Cause SIP to return a 480 instead of a 404 when a sip peer exists, but is not
registered.
(closes issue #12885)
 Reported by: ibc
 Patches: 
       20080701__bug12885__2.diff.txt uploaded by Corydon76 (license 14)
 Tested by: ibc


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@129149 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-07-08 20:27:47 +00:00
Terry Wilson
d432d18723 Remove extra option from previous solution attempt
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@122617 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-13 17:45:55 +00:00
Terry Wilson
e128c2a314 This should fix the behavior of the 'T' dial feature being passed incorrectly to the transferee when builtin_atxfers are used.
Also, doing a builtin_atxfer to parking was broken and is fixed here as well.

(closes issue #11898)
	Reported by: sergee
	Tested by: otherwiseguy


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@122589 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-13 16:29:07 +00:00
Terry Wilson
c340004d76 Backport fix for 11520--for some reason I didn't do this back in February when I patched for trunk.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@121992 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-11 23:47:23 +00:00
Russell Bryant
c6c26f7c34 Fix another typo in documentation
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@119530 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-02 01:03:22 +00:00
Michiel van Baak
383a1ece6b small typo fix 'retires' => 'retries'
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@119478 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-06-01 20:47:55 +00:00
Mark Michelson
f1683753b8 If the datastore has been moved to another channel due to a masquerade, then
freeing the datastore here causes an eventual double free when the new channel
hangs up. We should only free the datastore if we were able to successfully remove
it from the channel we are referencing (i.e. the datastore was not moved).

(closes issue #12359)
Reported by: pguido



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114112 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-14 16:24:22 +00:00