]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
The chan_dahdi faxdetect option only works for the first FAX call.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 13 Oct 2010 20:21:02 +0000 (20:21 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 13 Oct 2010 20:21:02 +0000 (20:21 +0000)
The chan_dahdi faxdetect option only works for the first call.  After that
the option no longer works.  The struct dahdi_pvt.callprogress member is
the encoded user config setting for the callprogress and faxdetect config
options.  Changing this value alters the configuration for all following
calls until the chan_dahdi.conf file is reloaded.

* Fixed the chan_dahdi ast_channel_setoption callback to not change the
users faxdetect config setting except for the current call.

* Fixed the chan_dahdi ast_channel_queryoption callback to read the active
DSP setting of the faxdetect option.

* Made actually disable the active faxdetect DSP setting for the current
call on the analog port.  my_handle_dtmfup() is used for normal analog
ports.  dahdi_handle_dtmfup() is the legacy code and is no longer used
unless in a radio mode.

(closes issue #18116)
Reported by: seandarcy
Patches:
      issue18116_v1.8.patch uploaded by rmudgett (license 664)

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

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@291541 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_dahdi.c

index c47535d5abc1e8100c413d49ce56abca0c85d519..4d6a3fae42830c55ffa8ceaff9cd5147e346b2c9 100644 (file)
@@ -2005,6 +2005,11 @@ static void my_handle_dtmfup(void *pvt, struct ast_channel *ast, enum analog_sub
                                }
                        }
                        p->faxhandled = 1;
+                       if (p->dsp) {
+                               p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
+                               ast_dsp_set_features(p->dsp, p->dsp_features);
+                               ast_debug(1, "Disabling FAX tone detection on %s after tone received\n", ast->name);
+                       }
                        if (strcmp(ast->exten, "fax")) {
                                const char *target_context = S_OR(ast->macrocontext, ast->context);
 
@@ -6393,7 +6398,7 @@ static int dahdi_queryoption(struct ast_channel *chan, int option, void *data, i
                break;
        case AST_OPTION_FAX_DETECT:
                cp = (char *) data;
-               *cp = (p->callprogress & CALLPROGRESS_FAX) ? 0 : 1;
+               *cp = (p->dsp_features & DSP_FEATURE_FAX_DETECT) ? 0 : 1;
                ast_debug(1, "Reporting fax tone detection %sabled on %s\n", *cp ? "en" : "dis", chan->name);
                break;
        case AST_OPTION_CC_AGENT_TYPE:
@@ -6619,10 +6624,8 @@ static int dahdi_setoption(struct ast_channel *chan, int option, void *data, int
                if (p->dsp) {
                        ast_debug(1, "%sabling fax tone detection on %s\n", *cp ? "En" : "Dis", chan->name);
                        if (*cp) {
-                               p->callprogress |= CALLPROGRESS_FAX;
                                p->dsp_features |= DSP_FEATURE_FAX_DETECT;
                        } else {
-                               p->callprogress &= ~CALLPROGRESS_FAX;
                                p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
                        }
                        ast_dsp_set_features(p->dsp, p->dsp_features);
@@ -7432,10 +7435,11 @@ static void dahdi_handle_dtmfup(struct ast_channel *ast, int idx, struct ast_fra
                                }
                        }
                        p->faxhandled = 1;
-                       p->callprogress &= ~CALLPROGRESS_FAX;
-                       p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
-                       ast_dsp_set_features(p->dsp, p->dsp_features);
-                       ast_debug(1, "Disabling FAX tone detection on %s after tone received\n", ast->name);
+                       if (p->dsp) {
+                               p->dsp_features &= ~DSP_FEATURE_FAX_DETECT;
+                               ast_dsp_set_features(p->dsp, p->dsp_features);
+                               ast_debug(1, "Disabling FAX tone detection on %s after tone received\n", ast->name);
+                       }
                        if (strcmp(ast->exten, "fax")) {
                                const char *target_context = S_OR(ast->macrocontext, ast->context);