Index: include/asterisk/res_fax.h
===================================================================
--- include/asterisk/res_fax.h (revision 4)
+++ include/asterisk/res_fax.h (revision 6)
@@ -178,6 +178,8 @@
int gateway_id;
/*! the timeout for this gateway in seconds */
int gateway_timeout;
+ /*! disable v21 modem tone detection for this gateway */
+ int gateway_no_v21_detect;
/*! the id of the faxdetect framehook for this channel */
int faxdetect_id;
};
Index: res/res_fax.c
===================================================================
--- res/res_fax.c (revision 4)
+++ res/res_fax.c (revision 6)
@@ -187,7 +187,7 @@
R/W Modem type (v17/v27/v29).
- R/W T38 fax gateway, with optional fax activity timeout in seconds (yes[,timeout]/no)
+ R/W T38 fax gateway, with optional fax activity timeout in seconds (yes[,timeout]/no,t38)
R/W Enable FAX detect with optional timeout in seconds (yes,t38,cng[,timeout]/no)
@@ -3111,7 +3111,7 @@
return fax_gateway_detect_t38(gateway, chan, peer, active, f);
}
- if (!gateway->detected_v21 && gateway->t38_state == T38_STATE_UNAVAILABLE && f->frametype == AST_FRAME_VOICE) {
+ if (!details->gateway_no_v21_detect && !gateway->detected_v21 && gateway->t38_state == T38_STATE_UNAVAILABLE && f->frametype == AST_FRAME_VOICE) {
/* not in gateway mode and have not detected v21 yet, listen
* for v21 */
ao2_ref(details, -1);
@@ -3915,7 +3915,7 @@
ast_copy_string(buf, details->option.ecm ? "yes" : "no", len);
} else if (!strcasecmp(data, "t38gateway") || !strcasecmp(data, "gateway") ||
!strcasecmp(data, "t38_gateway") || !strcasecmp(data, "faxgateway")) {
- ast_copy_string(buf, details->gateway_id != -1 ? "yes" : "no", len);
+ ast_copy_string(buf, details->gateway_id != -1 ? (details->gateway_no_v21_detect ? "t38" : "yes") : "no", len);
} else if (!strcasecmp(data, "faxdetect")) {
ast_copy_string(buf, details->faxdetect_id != -1 ? "yes" : "no", len);
} else if (!strcasecmp(data, "error")) {
@@ -4001,7 +4001,12 @@
*timeout++ = '\0';
}
- if (ast_true(val)) {
+ if (ast_true(val) || !strcasecmp(val, "t38")) {
+ if (!strcasecmp(val, "t38")) {
+ details->gateway_no_v21_detect = 1;
+ } else {
+ details->gateway_no_v21_detect = 0;
+ }
if (details->gateway_id < 0) {
details->gateway_timeout = 0;
if (timeout) {