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 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20100525/ab27af29/attachment.htm
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
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. -- Kevin P. Fleming Digium, Inc. | Director of Software Technologies 445 Jan Davis Drive NW - Huntsville, AL 35806 - USA skype: kpfleming | jabber: kfleming at digium.com Check us out at www.digium.com & www.asterisk.org
Possibly Parallel Threads
- Movistar sip Mexico
- problem with T.38 media headers
- asterisk 13.16 / pjsip / t.38: res_pjsip_t38.c:207 t38_automatic_reject: Automatically rejecting T.38 request on channel 'PJSIP/91-00000007'
- T.38 - By reinvitation only?
- asterisk 13.16 / pjsip / t.38: res_pjsip_t38.c:207 t38_automatic_reject: Automatically rejecting T.38 request on channel 'PJSIP/91-00000007'