Index: apps/app_fax.c =================================================================== --- apps/app_fax.c (revision 205726) +++ apps/app_fax.c (working copy) @@ -452,6 +452,7 @@ res = 1; break; } else if (parameters->request_response == AST_T38_REQUEST_NEGOTIATE) { + ast_debug(1, "T38 request received, accepting\n"); if (parameters->version > 0) { /* Only T.38 Version 0 is supported at this time */ parameters->version = 0; @@ -463,12 +464,10 @@ } /* we only support bit rates up to 9.6kbps */ parameters->rate = AST_T38_RATE_9600; + /* Complete T38 switchover */ ast_indicate_data(s->chan, AST_CONTROL_T38_PARAMETERS, parameters, sizeof(*parameters)); - /* T38 switchover completed */ - s->t38parameters = *parameters; - ast_debug(1, "T38 negotiated, finishing audio loop\n"); - res = 1; - break; + /* Do not break audio loop, wait until channel driver finally acks switchover + with AST_T38_NEGOTIATED */ } } @@ -603,8 +602,7 @@ } else if (inf->frametype == AST_FRAME_CONTROL && inf->subclass == AST_CONTROL_T38_PARAMETERS) { struct ast_control_t38_parameters *parameters = inf->data; if (parameters->request_response == AST_T38_TERMINATED || parameters->request_response == AST_T38_REFUSED) { - ast_debug(1, "T38 down, terminating\n"); - res = -1; + ast_debug(1, "T38 down, finishing\n"); break; } }