]> git.ipfire.org Git - thirdparty/HylaFAX.git/commitdiff
Bug 232: fix a potential pprcount problem
authorLee Howard <faxguy@howardsilvan.com>
Wed, 2 Mar 2005 20:36:04 +0000 (20:36 +0000)
committerLee Howard <faxguy@howardsilvan.com>
Wed, 2 Mar 2005 20:36:04 +0000 (20:36 +0000)
         handle PPS after the 4th PPR

CHANGES
faxd/Class1Recv.c++

diff --git a/CHANGES b/CHANGES
index fd5ac3af44dc8e33b3b323eeec6aedf33239a88f..e7ff40d4538b7089e24b356fb8aa941154317770 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,8 @@
 
 Changelog for HylaFAX
 
+* handle PPS after 4th PPR (2 Mar 2005)
+* fix potential error in counting of PPR signals (2 Mar 2005)
 * handle EOT after PPS (28 Feb 2005)
 * add Class1AdaptRecvCmd config option, AT+FAR=1 support, (28 Feb 2005)
 * fix DCS scanline-time error when sending to systems without
index c1ff711d3990bdb1e92cd7b773be13573936854b..b3d5d3432a8364f688fe78cf71f6d564c4abc11e 100644 (file)
@@ -1070,6 +1070,7 @@ Class1Modem::recvPageECMData(TIFF* tif, const Class2Params& params, fxStr& emsg)
                                        (void) transmitFrame(FCF_CTR|FCF_RCVR);
                                        tracePPR("RECV send", FCF_CTR);
                                        dolongtrain = true;
+                                       pprcnt = 0;
                                        break;
                                    }
                                case FCF_DCN:
@@ -1265,6 +1266,7 @@ Class1Modem::recvPageECMData(TIFF* tif, const Class2Params& params, fxStr& emsg)
                                    transmitFrame(FCF_PPR, fxStr(ppr, 32));
                                    tracePPR("RECV send", FCF_PPR);
                                    pprcnt++;
+                                   if (pprcnt > 4) pprcnt = 4;         // could've been 4 before increment
                                }
                                if (pprcnt == 4 && (!useV34 || !conf.class1PersistentECM)) {
                                    HDLCFrame rtnframe(conf.class1FrameOverhead);
@@ -1277,8 +1279,27 @@ Class1Modem::recvPageECMData(TIFF* tif, const Class2Params& params, fxStr& emsg)
                                    }
                                    pprcnt = 0;
                                    if (signalRcvd != 0 || recvFrame(rtnframe, conf.t2Timer)) {
+                                       bool gotrtnframe = true;
                                        if (signalRcvd == 0) tracePPM("RECV recv", rtnframe.getFCF());
                                        else signalRcvd = 0;            // reset it, we're in-sync now
+                                       recvFrameCount = 0;
+                                       while (rtnframe.getFCF() == FCF_PPS && recvFrameCount < 20 && gotrtnframe) {
+                                           // we sent PPR, but got PPS again...
+                                           if (!useV34 && !atCmd(conf.class1SwitchingCmd, AT_OK)) {
+                                               emsg = "Failure to receive silence.";
+                                               if (conf.saveUnconfirmedPages && pagedataseen) {
+                                                   protoTrace("RECV keeping unconfirmed page");
+                                                   writeECMData(tif, block, (fcount * frameSize), params, (seq |= 2));
+                                                   prevPage = true;
+                                               }
+                                               free(block);
+                                               return (false);
+                                           }
+                                           transmitFrame(FCF_PPR, fxStr(ppr, 32));
+                                           tracePPR("RECV send", FCF_PPR);
+                                           gotrtnframe = recvFrame(rtnframe, conf.t2Timer);
+                                           recvFrameCount++;
+                                       }
                                        u_int dcs;                      // possible bits 1-16 of DCS in FIF
                                        switch (rtnframe.getFCF()) {
                                            case FCF_CTC: