mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-08 10:58:15 +00:00
Flipflop the sections for two options, since the section for 'X' (exit context)
may otherwise absorb keypresses meant for 's' (admin/user menu). (closes issue #12836) Reported by: blitzrage Patches: 20080611__bug12836.diff.txt uploaded by Corydon76 (license 14) Tested by: blitzrage git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@122137 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1909,6 +1909,8 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
||||
break;
|
||||
|
||||
if (c) {
|
||||
char dtmfstr[2] = "";
|
||||
|
||||
if (c->fds[0] != origfd || (user->zapchannel && (c->audiohooks || c->monitor))) {
|
||||
if (using_pseudo) {
|
||||
/* Kill old pseudo */
|
||||
@@ -1926,6 +1928,11 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
||||
f = ast_read(c);
|
||||
if (!f)
|
||||
break;
|
||||
if (f->frametype == AST_FRAME_DTMF) {
|
||||
dtmfstr[0] = f->subclass;
|
||||
dtmfstr[1] = '\0';
|
||||
}
|
||||
|
||||
if ((f->frametype == AST_FRAME_VOICE) && (f->subclass == AST_FORMAT_SLINEAR)) {
|
||||
if (user->talk.actual)
|
||||
ast_frame_adjust_volume(f, user->talk.actual);
|
||||
@@ -1976,21 +1983,6 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
||||
if (user->talking || !(confflags & CONFFLAG_OPTIMIZETALKER))
|
||||
careful_write(fd, f->data, f->datalen, 0);
|
||||
}
|
||||
} else if ((f->frametype == AST_FRAME_DTMF) && (confflags & CONFFLAG_EXIT_CONTEXT)) {
|
||||
char tmp[2];
|
||||
|
||||
if (confflags & CONFFLAG_PASS_DTMF)
|
||||
conf_queue_dtmf(conf, user, f);
|
||||
|
||||
tmp[0] = f->subclass;
|
||||
tmp[1] = '\0';
|
||||
if (!ast_goto_if_exists(chan, exitcontext, tmp, 1)) {
|
||||
ast_log(LOG_DEBUG, "Got DTMF %c, goto context %s\n", tmp[0], exitcontext);
|
||||
ret = 0;
|
||||
ast_frfree(f);
|
||||
break;
|
||||
} else if (option_debug > 1)
|
||||
ast_log(LOG_DEBUG, "Exit by single digit did not work in meetme. Extension %s does not exist in context %s\n", tmp, exitcontext);
|
||||
} else if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '#') && (confflags & CONFFLAG_POUNDEXIT)) {
|
||||
if (confflags & CONFFLAG_PASS_DTMF)
|
||||
conf_queue_dtmf(conf, user, f);
|
||||
@@ -2154,6 +2146,18 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c
|
||||
}
|
||||
|
||||
conf_flush(fd, chan);
|
||||
/* Since this option could absorb dtmf for the previous, we have to check this one last */
|
||||
} else if ((f->frametype == AST_FRAME_DTMF) && (confflags & CONFFLAG_EXIT_CONTEXT) && ast_exists_extension(chan, exitcontext, dtmfstr, 1, "")) {
|
||||
if (confflags & CONFFLAG_PASS_DTMF)
|
||||
conf_queue_dtmf(conf, user, f);
|
||||
|
||||
if (!ast_goto_if_exists(chan, exitcontext, dtmfstr, 1)) {
|
||||
ast_log(LOG_DEBUG, "Got DTMF %c, goto context %s\n", dtmfstr[0], exitcontext);
|
||||
ret = 0;
|
||||
ast_frfree(f);
|
||||
break;
|
||||
} else if (option_debug > 1)
|
||||
ast_log(LOG_DEBUG, "Exit by single digit did not work in meetme. Extension '%s' does not exist in context '%s'\n", dtmfstr, exitcontext);
|
||||
} else if ((f->frametype == AST_FRAME_DTMF_BEGIN || f->frametype == AST_FRAME_DTMF_END)
|
||||
&& confflags & CONFFLAG_PASS_DTMF) {
|
||||
conf_queue_dtmf(conf, user, f);
|
||||
|
||||
Reference in New Issue
Block a user