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] JobRetryNoAnswer doesn't work?



* Mark Hunting <mark@xxxxxxxxxx> [051125 08:34]:
> To summarize:
> 
> For me the RetryNoAnswer setting works now. In Class2Modem.c++, 
> Class2Modem::dialResponse I changed:
> 
> case 11:        return (NOFCON);  // No answer (T.30 timeout)
> 
> into:
> 
> case 11:        return (NOANSWER);  // No answer (T.30 timeout)

Doh!  I was even looking here and completely overlooked that...  Sory.

> Is this an error in Hylafax, or gives my modem the wrong error message?
> Then, in FaxSend.c++, FaxServer::sendFax I changed:

[SNIP]

> Apparently Hylafax knows it has called my cell phone before. This is a 
> bit strange behaviour. It has called my cell phone before, but of course 
> it can't have delivered any faxes to it. So IMO that's no reason to 
> ignore RetryNoAnswer and call it over and over again?


What is at issue here is that the "Class2" device isn't properly
reporting the real problems.

FHNG: responses of 10-19 are:
	"Transmit Phase A & miscellaneous errors"
A value of 5 means:
	"Ringback detected: Answer with no CED".


So, what we are getting from the device when we get the FHNG:11 is that
we are in Transmit Phase A and something went wrong.  The only correct
assumption for HylaFAX at this point is:
- A carrier was seen, but we there was an issue.

This is why 11 is translated as NOFCON, which is:
	NOFCON     = 7,         // carrier established, but phase A failure

The NOFCON is what is setting calledBefore() to true.

That results the behaviour that HylaFAX is giving you.

So, instead of setting JobRetryNoFCON instead of JobRetryNoANSWER work
if you use the following patch:

===== faxd/FaxSend.c++ 1.42 vs edited =====
--- 1.42/faxd/FaxSend.c++       2005-09-27 15:33:19 -04:00
+++ edited/faxd/FaxSend.c++     2005-11-25 08:59:52 -05:00
@@ -331,7 +331,12 @@ FaxServer::sendFax(FaxRequest& fax, FaxM
        case ClassModem::NOCARRIER:     // no carrier detected on remote side
        case ClassModem::BUSY:          // busy signal
        case ClassModem::NOANSWER:      // no answer or ring back
-           if (!clientInfo.getCalledBefore() && fax.ndials > retryMAX[callstat])
+           // If we are NOFCON, then we *know* we've called before, and want
+           // to error out on retryMAX[NOFCON].
+           // If we've actually called before, then we don't want to give up
+           // on BUSY/NOANSWER/NOCARRIER/DATACONN from retryMAX[*]
+           if ((callstat == ClassModem::NOFCON || !clientInfo.getCalledBefore())
+                       && fax.ndials > retryMAX[callstat])
                sendFailed(fax, send_failed, notice);
            else if (fax.retrytime != 0)
                sendFailed(fax, send_retry, notice, fax.retrytime);




-- 
Aidan Van Dyk                                             aidan@xxxxxxxx
Senior Software Developer                          +1 215 438-4638 x8103
iFAX Solutions, Inc.                                http://www.ifax.com/

Attachment: signature.asc
Description: Digital signature




Project hosted by iFAX Solutions