mirror of
https://github.com/asterisk/asterisk.git
synced 2026-06-27 02:44:13 -07:00
Merged revisions 337219 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10 ........ r337219 | oej | 2011-09-21 11:32:50 +0200 (Ons, 21 Sep 2011) | 13 lines Make ast_pbx_run() not default to s@default if extension is not found Review: https://reviewboard.asterisk.org/r/1446/ This is a bug - or architecture mistake - that has been in Asterisk for a very long time. It was exposed by the AMI originate action and possibly some other applications. Most channel drivers checks if an extension exists BEFORE starting a pbx on an inbound call, so most calls will not depend on this issue. Thanks everyone involved in the review and on IRC and the mailing list for a quick review and all the feedback. (closes issue ASTERISK-18578) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@337220 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -249,7 +249,7 @@ Asterisk Modules
|
||||
|
||||
IAX2 Changes
|
||||
------------
|
||||
* authdebug is now disabled by default. To enable this functionaility again
|
||||
* authdebug is now disabled by default. To enable this functionaility again
|
||||
set authdebug = yes in iax.conf.
|
||||
|
||||
RTP Changes
|
||||
@@ -257,6 +257,21 @@ RTP Changes
|
||||
* The rtp.conf setting "strictrtp" is now enabled by default. In previous
|
||||
releases it was disabled.
|
||||
|
||||
PBX Core
|
||||
--------
|
||||
* The PBX core previously made a call with a non-existing extension test for
|
||||
extension s@default and jump there if the extension existed.
|
||||
This was a bad default behaviour and violated the principle of least surprise.
|
||||
It has therefore been changed in this release. It may affect some
|
||||
applications and configurations that rely on this behaviour. Most channel
|
||||
drivers have avoided this for many releases by testing whether the extension
|
||||
called exists before starting the PBX and generating a local error.
|
||||
This behaviour still exists and works as before.
|
||||
|
||||
Extension "s" is used when no extension is given in a channel driver,
|
||||
like immediate answer in DAHDI or calling to a domain with no user part
|
||||
in a SIP uri.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
--- Functionality changes from Asterisk 1.6.2 to Asterisk 1.8 ----------------
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
@@ -285,6 +285,10 @@ include => dundi-e164-switch
|
||||
; In macros, it is the start extension. In most other cases,
|
||||
; you have to goto "s" to execute that extension.
|
||||
;
|
||||
; Note: In old versions of Asterisk the PBX in some cases defaulted to
|
||||
; extension "s" when a given extension was wrong (like in AMI originate).
|
||||
; This is no longer the case.
|
||||
;
|
||||
; For wildcard matches, see above - all pattern matches start with
|
||||
; an underscore.
|
||||
exten => s,1,Goto(${ARG1},1)
|
||||
|
||||
+4
-11
@@ -4977,23 +4977,16 @@ static enum ast_pbx_result __ast_pbx_run(struct ast_channel *c,
|
||||
autoloopflag = ast_test_flag(c, AST_FLAG_IN_AUTOLOOP); /* save value to restore at the end */
|
||||
ast_set_flag(c, AST_FLAG_IN_AUTOLOOP);
|
||||
|
||||
/* Start by trying whatever the channel is set to */
|
||||
if (!ast_exists_extension(c, c->context, c->exten, c->priority,
|
||||
S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
|
||||
/* If not successful fall back to 's' */
|
||||
if (ast_strlen_zero(c->exten)) {
|
||||
/* If not successful fall back to 's' - but only if there is no given exten */
|
||||
ast_verb(2, "Starting %s at %s,%s,%d failed so falling back to exten 's'\n", c->name, c->context, c->exten, c->priority);
|
||||
/* XXX the original code used the existing priority in the call to
|
||||
* ast_exists_extension(), and reset it to 1 afterwards.
|
||||
* I believe the correct thing is to set it to 1 immediately.
|
||||
*/
|
||||
*/
|
||||
set_ext_pri(c, "s", 1);
|
||||
if (!ast_exists_extension(c, c->context, c->exten, c->priority,
|
||||
S_COR(c->caller.id.number.valid, c->caller.id.number.str, NULL))) {
|
||||
/* JK02: And finally back to default if everything else failed */
|
||||
ast_verb(2, "Starting %s at %s,%s,%d still failed so falling back to context 'default'\n", c->name, c->context, c->exten, c->priority);
|
||||
ast_copy_string(c->context, "default", sizeof(c->context));
|
||||
}
|
||||
}
|
||||
|
||||
if (c->cdr) {
|
||||
/* allow CDR variables that have been collected after channel was created to be visible during call */
|
||||
ast_cdr_update(c);
|
||||
|
||||
Reference in New Issue
Block a user