diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-07-10 15:36:39 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-07-10 15:36:39 +0000 |
commit | 2034286df9bfb97f3ab540e162c0c645dc713c07 (patch) | |
tree | 27b166a1f7e228213034d949538945d31ef8f88b | |
parent | 9b28b5b7b8194942449f066b41e3d036c2ecc41d (diff) |
Merged revisions 205770 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r205770 | kpfleming | 2009-07-10 10:28:11 -0500 (Fri, 10 Jul 2009) | 12 lines
Fix some remaining T.38 negotiation problems in app_fax.
Revision 205696 did not quite fix all the issues with the T.38 negotiation
changes and app_fax; this patch corrects them, along with a couple of other
minor issues.
(closes issue #15480)
Reported by: dimas
Patches:
test2-15480.patch uploaded by dimas (license 88)
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@205773 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | apps/app_fax.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/apps/app_fax.c b/apps/app_fax.c index 54928791a..31a45cce4 100644 --- a/apps/app_fax.c +++ b/apps/app_fax.c @@ -497,6 +497,7 @@ static int transmit_audio(fax_session *s) 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; @@ -508,12 +509,10 @@ static int transmit_audio(fax_session *s) } /* 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 */ } } @@ -598,7 +597,8 @@ static int transmit_t38(fax_session *s) } if (s->t38parameters.transcoding_mmr) { t38_set_mmr_transcoding(t38state, TRUE); - } else if (s->t38parameters.transcoding_jbig) { + } + if (s->t38parameters.transcoding_jbig) { t38_set_jbig_transcoding(t38state, TRUE); } @@ -647,9 +647,8 @@ static int transmit_t38(fax_session *s) } } else if (inf->frametype == AST_FRAME_CONTROL && inf->subclass == AST_CONTROL_T38_PARAMETERS) { struct ast_control_t38_parameters *parameters = inf->data.ptr; - if (parameters->request_response == AST_T38_TERMINATED || parameters->request_response == AST_T38_REFUSED) { - ast_debug(1, "T38 down, terminating\n"); - res = -1; + if (parameters->request_response == AST_T38_TERMINATED) { + ast_debug(1, "T38 down, finishing\n"); break; } } |