mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 11:58:52 +00:00
Merged revisions 330706 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10 ................ r330706 | kmoore | 2011-08-03 08:39:06 -0500 (Wed, 03 Aug 2011) | 17 lines Merged revisions 330705 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r330705 | kmoore | 2011-08-03 08:38:17 -0500 (Wed, 03 Aug 2011) | 10 lines Call pickup broken for DAHDI channels when beginning with # The call pickup feature did not work on DAHDI devices for anything other than feature codes beginning with * since all feature codes in chan_dahdi were originally hard-coded to begin with *. This patch is also applied to chan_dahdi.c to fix this bug with radio modes. (closes issue AST-621) Review: https://reviewboard.asterisk.org/r/1336/ ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@330707 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1702,6 +1702,33 @@ static int analog_get_sub_fd(struct analog_pvt *p, enum analog_sub sub)
|
||||
|
||||
#define ANALOG_NEED_MFDETECT(p) (((p)->sig == ANALOG_SIG_FEATDMF) || ((p)->sig == ANALOG_SIG_FEATDMF_TA) || ((p)->sig == ANALOG_SIG_E911) || ((p)->sig == ANALOG_SIG_FGC_CAMA) || ((p)->sig == ANALOG_SIG_FGC_CAMAMF) || ((p)->sig == ANALOG_SIG_FEATB))
|
||||
|
||||
static int analog_canmatch_featurecode(const char *exten)
|
||||
{
|
||||
int extlen = strlen(exten);
|
||||
const char *pickup_ext;
|
||||
if (!extlen) {
|
||||
return 1;
|
||||
}
|
||||
pickup_ext = ast_pickup_ext();
|
||||
if (extlen < strlen(pickup_ext) && !strncmp(pickup_ext, exten, extlen)) {
|
||||
return 1;
|
||||
}
|
||||
/* hardcoded features are *60, *67, *69, *70, *72, *73, *78, *79, *82, *0 */
|
||||
if (exten[0] == '*' && extlen < 3) {
|
||||
if (extlen == 1) {
|
||||
return 1;
|
||||
}
|
||||
/* "*0" should be processed before it gets here */
|
||||
switch (exten[1]) {
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void *__analog_ss_thread(void *data)
|
||||
{
|
||||
struct analog_pvt *p = data;
|
||||
@@ -2296,7 +2323,7 @@ static void *__analog_ss_thread(void *data)
|
||||
}
|
||||
} else if (!ast_canmatch_extension(chan, chan->context, exten, 1,
|
||||
chan->caller.id.number.valid ? chan->caller.id.number.str : NULL)
|
||||
&& ((exten[0] != '*') || (strlen(exten) > 2))) {
|
||||
&& !analog_canmatch_featurecode(exten)) {
|
||||
ast_debug(1, "Can't match %s from '%s' in context %s\n", exten,
|
||||
chan->caller.id.number.valid && chan->caller.id.number.str
|
||||
? chan->caller.id.number.str : "<Unknown Caller>",
|
||||
|
Reference in New Issue
Block a user