HylaFAX The world's most advanced open source fax server

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [hylafax-users] Regarding Hylafax and V34




Sorry for my late reply. I didn't have access to any computer during a few days.

I tried your patch and I've been able to send 148 pages in V34 at 33600 bits/s. So far it seems perfect. I will increase my tests and will keep you updated if anything goes wrong. Thanks again for your help.


Best regards,
Bertrand D

--- On Sat, 5/31/08, Lee Howard <faxguy@xxxxxxxxxxxxxxxx> wrote:
From: Lee Howard <faxguy@xxxxxxxxxxxxxxxx>
Subject: Re: [hylafax-users] Regarding Hylafax and V34
To: "Bertrand D" <bertrand.work@xxxxxxxxx>
Cc: "Hylafax-users Mailing List" <hylafax-users@xxxxxxxxxxx>, hylafax-users@xxxxxxxxxxxxxxxxxxxxx
Date: Saturday, May 31, 2008, 5:29 PM

Bertrand D wrote:
> Please find attached the new log file.
>

Thanks,

The log shows that the receiver is re-sending MCF and that the DCE
cannot immediately switch to the V.34 primary rate due to that. So the
solution, I think, is just to try again.

It would seem that the ECM block-building is taking a bit longer than it
should... and that's slowing down our responsiveness as a sender...
causing the receiver to repeat MCF.

Please try/test the attached patch (which was made against HylaFAX+
5.2.5 but should apply cleanly to your version). I hope that it will
resolve the matter.

Lee.
--- hylafax.orig/faxd/Class1Send.c++ 2008-05-22 00:48:33.000000000 -0700 +++ hylafax/faxd/Class1Send.c++ 2008-06-01 00:14:35.320481472 -0700 @@ -1125,9 +1125,24 @@ if (useV34) { // switch to primary channel buf[0] = DLE; buf[1] = 0x6B; // - if (!putModemData(buf, 2)) return (false); + HDLCFrame rtncframe(conf.class1FrameOverhead); + u_short limit = 5; + bool gotprate, gotrtncframe = false; // wait for the ready indicator, - if (!waitForDCEChannel(false)) return (false); + do { + if (!putModemData(buf, 2)) return (false); + gotprate = waitForDCEChannel(false); + if (!gotprate && ctrlFrameRcvd != fxStr::null) { + /* + * Maybe we took so long to assemble the block that + * the receiver has retransmitted CFR or MCF. + */ + for (u_int i = 0; i < ctrlFrameRcvd.length(); i++) + rtncframe.put(frameRev[ctrlFrameRcvd[i] & 0xFF]); + traceHDLCFrame("-->", rtncframe); + gotrtncframe = true; + } + } while (!gotprate && gotrtncframe && --limit); if (renegotiate) { // Although spec says this can be done any time, // in practice it must be done at this moment.




Project hosted by iFAX Solutions