[asterisk-users] Little t38 bug?

Miguel Amez villalvilla at gmail.com
Tue May 25 06:06:52 CDT 2010


You are completely right!
You are my hero!
I'm experiencing the same error with hylafax + t38modem implementation, and
t38modem ALLWAYS sends out at 2400!!!
I have 1.6.0.22 too, so this is definetly what's happening!

1 month looking for the error and now Alexandru has it...whoa!

regards,

Miguel Amez

2010/5/25 Alexandru Oniciuc <Alexandru.Oniciuc at trivenet.it>

>  Hello List,
>
>
>
>                 I think I’ve discovered a little bug in t.38 bug in
> 1.6.0.22 regarding the speed (T38MaxBitRate) used to send the faxes.
>
>
>
>                 Asterisk always responds  with a=T38MaxBitRate:2400. I’ve
> tried with Patton and Grandstream devices and the result is always the same.
>
>                 Patton ignores the parameter and sends the fax at 9600.
>
>                 Grandstream doesn’t, and all the faxes are going in and out
> at 2400.
>
>
>
>                 Looking at the code I found this in chan_sip.c (line 7736):
>
>
>
> if ((sscanf(a, "T38FaxMaxBuffer:%30u", &x) == 1)) {
>
>                 ast_debug(3, "MaxBufferSize:%d\n", x);
>
>                 found = TRUE;
>
>         } else if ((sscanf(a, "T38MaxBitRate:%30u", &x) == 1) || (sscanf(a,
> "T38FaxMaxRate:%30u", &x) == 1)) {
>
>                 ast_debug(3, "T38MaxBitRate: %d\n", x);
>
>                 switch (x) {
>
>                 case 14400:
>
>                         p->t38.their_parms.rate = AST_T38_RATE_14400;
>
>                         break;
>
>                 case 12000:
>
>                         p->t38.their_parms.rate = AST_T38_RATE_12000;
>
>                         break;
>
>                 case 9600:
>
>                         p->t38.their_parms.rate = AST_T38_RATE_9600;
>
>                         break;
>
>                 case 7200:
>
>                         p->t38.their_parms.rate = AST_T38_RATE_7200;
>
>                         break;
>
>                 case 4800:
>
>                         p->t38.their_parms.rate = AST_T38_RATE_4800;
>
>                         break;
>
>                 case 2400:
>
>                         p->t38.their_parms.rate = AST_T38_RATE_2400;
>
>                         break;
>
>                 }
>
>                 found = TRUE;
>
> else if {…
>
>
>
>
>
>
>
> If I’m not misteaking the second “if else” condition will never be true if
> the other device sends “T38FaxMaxBuffer” (wich they all usually do).
>
>
>
> Shouldn’t it be
>
>
>
> if((sscanf(a, "T38FaxMaxBuffer:%30u", &x) == 1) && ((sscanf(a,
> "T38MaxBitRate:%30u", &x) == 0) || (sscanf(a, "T38FaxMaxRate:%30u", &x) ==
> 0))) ??
>
>
>
> Thanks,
>
> Alex
>
> --
> _____________________________________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
> New to Asterisk? Join us for a live introductory webinar every Thurs:
>               http://www.asterisk.org/hello
>
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>   http://lists.digium.com/mailman/listinfo/asterisk-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20100525/183cb294/attachment.htm 


More information about the asterisk-users mailing list