HylaFAX The world's most advanced open source fax server |
* 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