summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--res/res_fax.c54
1 files changed, 34 insertions, 20 deletions
diff --git a/res/res_fax.c b/res/res_fax.c
index 5d666085f..c926d95db 100644
--- a/res/res_fax.c
+++ b/res/res_fax.c
@@ -74,6 +74,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<option name="f">
<para>Allow audio fallback FAX transfer on T.38 capable channels.</para>
</option>
+ <option name="n">
+ <para>Disable usage of T.38 on otherwise T.38 capable channels.</para>
+ </option>
<option name="s">
<para>Send progress Manager events (overrides statusevents setting in res_fax.conf).</para>
</option>
@@ -107,6 +110,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<option name="f">
<para>Allow audio fallback FAX transfer on T.38 capable channels.</para>
</option>
+ <option name="n">
+ <para>Disable usage of T.38 on otherwise T.38 capable channels.</para>
+ </option>
<option name="s">
<para>Send progress Manager events (overrides statusevents setting in res_fax.conf).</para>
</option>
@@ -267,6 +273,7 @@ enum {
OPT_STATUS = (1 << 3),
OPT_ALLOWAUDIO = (1 << 5),
OPT_REQUEST_T38 = (1 << 6),
+ OPT_DISABLE_T38 = (1 << 7),
};
AST_APP_OPTIONS(fax_exec_options, BEGIN_OPTIONS
@@ -274,6 +281,7 @@ AST_APP_OPTIONS(fax_exec_options, BEGIN_OPTIONS
AST_APP_OPTION('c', OPT_CALLERMODE),
AST_APP_OPTION('d', OPT_DEBUG),
AST_APP_OPTION('f', OPT_ALLOWAUDIO),
+ AST_APP_OPTION('n', OPT_DISABLE_T38),
AST_APP_OPTION('s', OPT_STATUS),
AST_APP_OPTION('z', OPT_REQUEST_T38),
END_OPTIONS);
@@ -1619,7 +1627,8 @@ static int receivefax_exec(struct ast_channel *chan, const char *data)
}
if ((ast_channel_get_t38_state(chan) == T38_STATE_UNAVAILABLE) ||
- ast_test_flag(&opts, OPT_ALLOWAUDIO)) {
+ ast_test_flag(&opts, OPT_ALLOWAUDIO) ||
+ ast_test_flag(&opts, OPT_DISABLE_T38)) {
details->option.allow_audio = AST_FAX_OPTFLAG_TRUE;
}
@@ -1644,17 +1653,19 @@ static int receivefax_exec(struct ast_channel *chan, const char *data)
}
}
- if (set_fax_t38_caps(chan, details)) {
- ast_string_field_set(details, error, "T38_NEG_ERROR");
- ast_string_field_set(details, resultstr, "error negotiating T.38");
- set_channel_variables(chan, details);
- fax_session_release(s, token);
- ao2_ref(s, -1);
- ao2_ref(details, -1);
- return -1;
+ if (!ast_test_flag(&opts, OPT_DISABLE_T38)) {
+ if (set_fax_t38_caps(chan, details)) {
+ ast_string_field_set(details, error, "T38_NEG_ERROR");
+ ast_string_field_set(details, resultstr, "error negotiating T.38");
+ set_channel_variables(chan, details);
+ fax_session_release(s, token);
+ ao2_ref(s, -1);
+ ao2_ref(details, -1);
+ return -1;
+ }
}
- if (details->caps & AST_FAX_TECH_T38) {
+ if (!ast_test_flag(&opts, OPT_DISABLE_T38) && (details->caps & AST_FAX_TECH_T38)) {
if (receivefax_t38_init(chan, details)) {
ast_string_field_set(details, error, "T38_NEG_ERROR");
ast_string_field_set(details, resultstr, "error negotiating T.38");
@@ -2094,7 +2105,8 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
}
if ((ast_channel_get_t38_state(chan) == T38_STATE_UNAVAILABLE) ||
- ast_test_flag(&opts, OPT_ALLOWAUDIO)) {
+ ast_test_flag(&opts, OPT_ALLOWAUDIO) ||
+ ast_test_flag(&opts, OPT_DISABLE_T38)) {
details->option.allow_audio = AST_FAX_OPTFLAG_TRUE;
}
@@ -2123,17 +2135,19 @@ static int sendfax_exec(struct ast_channel *chan, const char *data)
}
}
- if (set_fax_t38_caps(chan, details)) {
- ast_string_field_set(details, error, "T38_NEG_ERROR");
- ast_string_field_set(details, resultstr, "error negotiating T.38");
- set_channel_variables(chan, details);
- fax_session_release(s, token);
- ao2_ref(s, -1);
- ao2_ref(details, -1);
- return -1;
+ if (!ast_test_flag(&opts, OPT_DISABLE_T38)) {
+ if (set_fax_t38_caps(chan, details)) {
+ ast_string_field_set(details, error, "T38_NEG_ERROR");
+ ast_string_field_set(details, resultstr, "error negotiating T.38");
+ set_channel_variables(chan, details);
+ fax_session_release(s, token);
+ ao2_ref(s, -1);
+ ao2_ref(details, -1);
+ return -1;
+ }
}
- if (details->caps & AST_FAX_TECH_T38) {
+ if (!ast_test_flag(&opts, OPT_DISABLE_T38) && (details->caps & AST_FAX_TECH_T38)) {
if (sendfax_t38_init(chan, details)) {
ast_string_field_set(details, error, "T38_NEG_ERROR");
ast_string_field_set(details, resultstr, "error negotiating T.38");