[asterisk-users] Little t38 bug?
Steve Underwood
steveu at coppice.org
Tue May 25 08:28:57 CDT 2010
On 05/25/2010 07:54 PM, Kevin P. Fleming wrote:
> On 05/25/2010 05:48 AM, Alexandru Oniciuc wrote:
>
>> 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))) ??
>>
> No. You aren't understanding the code :-) It's comparing a string buffer
> against various patterns, and the string can't match all the patterns at
> the same time.
>
> This code is executed as each line of the SDP is processed, and each one
> will match one of the branches of this tree, and it's values will be
> extracted and stored for later use.
>
> In other words... this is not the cause of your problem.
>
Quite true, but the space in "T38MaxBitRate: %d\n" might be a problem,
as the number doesn't necessarily have a space in front of it.
Steve
More information about the asterisk-users
mailing list