[asterisk-commits] kpfleming: trunk r304342 - /trunk/res/res_fax.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jan 26 16:39:11 CST 2011


Author: kpfleming
Date: Wed Jan 26 16:39:07 2011
New Revision: 304342

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=304342
Log:
Add ability to disable T.38 usage for specific SendFAX/ReceiveFAX sessions.

Sometimes during troubleshooting it can be useful to disable T.38 usage in order
to narrow down a problem. This patch adds an 'n' option to SendFAX and ReceiveFAX
so that can be done without having to disable T.38 usage entirely for the peer
that Asterisk is communicating with.

(inspired by trying to assist Bryant Zimmerman on asterisk-users)


Modified:
    trunk/res/res_fax.c

Modified: trunk/res/res_fax.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_fax.c?view=diff&rev=304342&r1=304341&r2=304342
==============================================================================
--- trunk/res/res_fax.c (original)
+++ trunk/res/res_fax.c Wed Jan 26 16:39:07 2011
@@ -73,6 +73,9 @@
 					</option>
 					<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>
@@ -106,6 +109,9 @@
 					</option>
 					<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>
@@ -267,6 +273,7 @@
 	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_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 @@
 	}
 
 	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 @@
 		}
 	}
 
-	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)) {
+		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) && (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 @@
 	}
 
 	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 @@
 		}
 	}
 
-	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)) {
+		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) && (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");




More information about the asterisk-commits mailing list