HYLAFAX-CONFIG(5)
๐ NAME ๐
config โ the HylaFAX configuration database, bestie. it's literally where all the settings live ๐๏ธโจ
๐ธ DESCRIPTION ๐ธ
okay so listen. HylaFAX keeps a whole configuration file for the central queueing agent, and then ANOTHER one for every single facsimile modem attached to the machine. yes, every one. main character energy for each modem, as they deserve ๐
these files are holding info about the modems, and about how the HylaFAX server processes that service those modems should operate. the way that's a whole sentence but we move ๐
where do these files live? they're in the etc subdirectory, no cap:
- the config file for the
faxq(8)program is just namedconfig - the per-modem config files, used by
faxgetty(8),faxsend(8), andpagesend(8), have names shaped likeconfig.devid๐
and devid is an identifier derived from the name of the modem's device file. so for example, ttym2 for /dev/ttym2, and term_10 for /dev/term/10. iykyk ๐ง
๐ฆ the format (it's giving simple, we love that) ๐ฆ
these configuration files have a simple format and are entirely ASCII. a configuration parameter looks like this:
tag: value
where a tag identifies a parameter, and a value is either a string, a number, or a boolean value. slay ๐
comments are introduced by the `#` character and they extend all the way to the end of the line. periodt.
string values start at the first non-blank character after the `:` and continue to the first non-whitespace character โ OR, if you want whitespace included in there, you can wrap it in quote marks (`"`) ๐
and bestie, string values wrapped in quote marks can ALSO use the standard C programming conventions for specifying escape codes. like`\n`for a newline character, and`\xxx`for an octal value. iconic.
numeric values are specified according to the C programming conventions:
- leading
`0x`for hex ๐ฅ - leading
`0`for octal - otherwise decimal
...EXCEPT for a few parameters โ like RecvFileMode, whose value is interpreted strictly as an octal number, and PageChopThreshold, whose value is interpreted strictly as a floating point number. not me getting called out for the exceptions ๐ญ
boolean values are case insensitive, so do whatever with the caps:
- for a true value, use either
`Yes`or`On` - for a false value, use
`No`or`Off`
that's the whole vibe check โ
Okay so bestie, here's the tag table and it's lowkey a whole mood board of every knob HylaFAX lets you turn. The first chunk? That's all about how each server operates. The second chunk? Modem servicing realness. Parameters marked with a ยน are used only by the HylaFAX scheduler process and should appear only in the file named config. Parameters marked with a ยฒ are used by both the scheduler and the per-device applications, so they should appear in all appropriate configuration files (i.e. config and any per-device files that make sense). Parameters with no marker should appear only in per-device configuration files. More detailed info on each item is given after the table. โจ
AdaptiveAnswerโ type:boolean, default:Noโ enable adaptive answer of inbound callsAdminGroupโ type:string, default:faxadminโ System user group for administration (if PAM enabled)AnswerRotaryโ type:string, default:Anyโ alternatives for answering callsAnswerBiasโ type:integer, default:-โ bias to apply to successful rotary answerAreaCodeยฒ โ type:string, default:-โ local area codeAuditHookยน โ type:string, default:-โ command to run for faxq event auditingBadPageHandlingMethodโ type:string, default:RTN-SAVEโ bad page received handling methodBatchLogsยน โ type:boolean, default:Yesโ keep all session logs of a batch in a single logCallIDAnswerLengthโ type:integer, default:-โ answer call when CallIDPattern receivedCallIDPatternโ type:strint, default:-โ call identification pattern stringCIDNameโ type:string, default:-โ equivalent to CallIDPattern (2)CIDNameAnswerLengthโ type:integer, default:0โ equivalent to CallIDAnswerLength (2)CIDNumberโ type:string, default:-โ equivalent to CallIDPattern (1)CIDNumberAnswerLengthโ type:integer, default:0โ equivalent to CallIDAnswerLength (1)ClocalAsRootโ type:boolean, default:Noโ set CLOCAL using root UIDContCoverCmdยน โ type:string, default:bin/mkcoverโ continuation cover page generation scriptContCoverPageยน โ type:string, default:-โ continuation cover page template filenameCountryCodeยฒ โ type:string, default:-โ local country codeCountSkippedPagesโ type:boolean, default:Yesโ Count skipped pages in the page counts/totals when sendingDestControlsยน โ type:obsolete, default:-โ Obsoleted by JobControlDeviceModeโ type:octal, default:0600โ protection mode to use for modem deviceDialStringRulesยฒ โ type:string, default:-โ dial string rules fileDistinctiveRingsโ type:string, default:-โ configuration for distinctive ring cadencesDRingOffโ type:string, default:-โ distinctive ring โoffโ cadence indicatorDRingOnโ type:string, default:-โ distinctive ring โonโ cadence indicatorDynamicConfigโ type:string, default:-โ script for dynamic receive configurationEGettyArgsโ type:string, default:-โ arguments passed to external getty programFAXNumberโ type:string, default:-โ facsimile modem phone numberFaxRcvdCmdโ type:string, default:bin/faxrcvdโ notification script for received facsimileGettyArgsโ type:string, default:-โ arguments passed to getty programIncludeยฒ โ type:string, default:-โ include another fileInternationalPrefixยฒ โ type:string, default:-โ dialing prefix for international callsJobControlCmdยน โ type:string, default:-โ job control commandJobReqBusyโ type:integer, default:180โ requeue interval for BUSY dial resultJobReqDataConnโ type:integer, default:300โ requeue interval for data connection dial resultJobReqErrorโ type:integer, default:300โ requeue interval for ERROR dial resultJobReqNoAnswerโ type:integer, default:300โ requeue interval for NO ANSWER dial resultJobReqNoCarrierโ type:integer, default:300โ requeue interval for NO CARRIER dial resultJobReqNoFConโ type:integer, default:300โ requeue interval for carrier without +FCON dial resultJobReqOtherยฒ โ type:integer, default:300โ requeue interval for โotherโ problemsJobReqProtoโ type:integer, default:60โ requeue interval after fax protocol errorJobRetryBusyโ type:integer, default:-โ number of retries for BUSY dial resultJobRetryDataConnโ type:integer, default:-โ number of retries for data connection dial resultJobRetryErrorโ type:integer, default:-โ number of retries for ERROR dial resultJobRetryNoAnswerโ type:integer, default:-โ number of retries for NO ANSWER dial resultJobRetryNoCarrierโ type:integer, default:1โ number of retries for NO CARRIER dial resultJobRetryOtherโ type:integer, default:-โ number of retries for โotherโ problemsLockDataCallsโ type:boolean, default:Yesโ lock modem for the duration of an inbound data callLockVoiceCallsโ type:boolean, default:Yesโ lock modem for the duration of an inbound voice callLogCallsโ type:boolean, default:Yesโ Log all incoming calls as CALL records in xferfaxlogLogFacilityยฒ โ type:string, default:daemonโ syslog facility name for ServerTracing messagesLogFileModeโ type:octal, default:0600โ protection mode to use for session log filesLocalIdentifierโ type:string, default:-โ local station identification stringLongDistancePrefixโ type:string, default:-โ dialing prefix for long distance callsMaxBatchJobsยน โ type:integer, default:64โ max jobs in a batchMaxConcurrentCallsยน โ type:integer, default:1โ max concurrent jobs to process for a destinationMaxConsecutiveBadLinesโ type:integer, default:5โ max consecutive bad rows for OK page qualityMaxDialsยน โ type:integer, default:12โ max phone calls to make to transmit a jobMaxRecvPagesโ type:integer, default:unlimitedโ max pages to permit in a receiveMaxSendPagesยน โ type:integer, default:unlimitedโ max pages to permit in a sendMaxSetupAttemptsโ type:integer, default:2โ max attempts to initialize a modemMaxTriesยน โ type:integer, default:3โ max attempts to transmit a jobMinAcceptedLineCountโ type:integer, default:10โ min number of rows for OK page qualityModemGroupยน โ type:string, default:-โ define a name for a set of modemsModemPriorityโ type:integer, default:255โ scheduling priority for outbound jobsModemReadyStateโ type:string, default:Rโ โready stateโ sent by faxgettyModemRingResponseโ type:string, default:-โ command to respond after hearing RINGModemRingsBeforeResponseโ type:integer, default:0โ the number of rings before ModemRingResponseNoAnswerVoiceโ type:boolean, default:falseโ disable the answering of voice-indicated callsNoCarrierRetrysโ type:integer, default:-โ Deprecated - See JobRetryNoCarrierNotifyCmdยน โ type:string, default:bin/notifyโ user notification command scriptPageChopยน โ type:string, default:lastโ control automatic truncation of trailing whitespacePageChopThresholdยน โ type:float, default:3.0โ whitespace truncation threshold (inches)PCL2FaxCmdยน โ type:string, default:bin/pcl2faxโ PCL RIP command scriptPercentGoodLinesโ type:integer, default:95โ percentage of good rows for OK page qualityPollLockPokeModemโ type:boolean, default:falseโ check on modem every time the lock is polledPollLockWaitยฒ โ type:integer, default:30โ polling interval for lockfile presence/removal (secs)PollModemWaitโ type:integer, default:30โ polling interval when in โmodem waitโ state (secs)PollRcvdCmdโ type:string, default:bin/pollrcvdโ delivery script for facsimile received by pollingPostScriptTimeoutยน โ type:integer, default:300โ timeout on POSTSCRIPT interpreter runs (secs)PrioritySchedulingโ type:boolean, default:see belowโ use available priority job scheduling mechanismPS2FaxCmdยน โ type:string, default:bin/ps2faxโ POSTSCRIPT RIP command scriptQualifyCIDโ type:obsolete, default:-โ See DynamicConfig and RejectCall for rejecting callsQualifyPWDโ type:string, default:-โ file of PWD patterns for qualifying sendersQualifyTSIโ type:string, default:-โ file of TSI patterns for qualifying sendersRecvDataFormatโ type:string, default:adaptiveโ format for received facsimile dataRecvFileModeโ type:octal, default:0600โ protection mode to use for received facsimile filesRejectCallโ type:boolean, default:falseโ Reject the current callRingDataโ type:string, default:-โ distinctive ring data call identifierRingExtendedโ type:string, default:-โ extended ring message identifierRingFaxโ type:string, default:-โ distinctive ring fax call identifierRingsBeforeAnswerโ type:integer, default:0โ rings to wait before answering phoneRingTimeoutโ type:integer, default:6000โ timeout in ms after RING before resetRingVoiceโ type:string, default:-โ distinctive ring voice call identifierRTNHandlingMethodโ type:string, default:Retransmit-Ignoreโ RTN signal handling methodSaveUnconfirmedPagesโ type:boolean, default:trueโ save or delete unconfirmed pagesSendFaxCmdยน โ type:string, default:bin/faxsendโ fax transmit command scriptSendPageCmdยน โ type:string, default:bin/pagesendโ pager transmit command scriptSendUUCPCmdยน โ type:string, default:bin/uucpsendโ UUCP transmit command scriptServerTracingยฒ โ type:integer, default:1โ non-session server tracingSessionTracingยฒ โ type:integer, default:1โ send and receive session tracingSpeakerVolumeโ type:string, default:Quietโ volume level for modem speakerTagLineCoverNumStringโ type:string, default:-โ String substition when not counting cover pagesTagLineFontโ type:string, default:-โ tag line font filenameTagLineFormatโ type:string, default:see belowโ tag line format stringTIFF2FaxCmdยน โ type:string, default:bin/tiff2faxโ TIFF converter command scriptTimeOfDayยน โ type:string, default:Anyโ default time-of-day restrictions
More deets on each one coming up next, bestie โจ
Use2Dยน(boolean, defaultYes) โ bestie, this one decides if you're allowed to use 2D-encoded fax data. restrict or permit, your call ๐UseJobTSI(boolean, defaultNo) โ wanna use the job-specified TSI instead ofLocalIdentifier? Set this toYesand live your truth โจUseJobTagLine(boolean, defaultYes) โ allows the job-specified Tagline to be used instead ofTagLineFormat. iconic behavior ๐UUCPLockModeยฒ(octal, default0600) โ the protection mode for UUCP lock files. keep it secure, queen ๐UUCPLockDirยฒ(string, defaultsee below) โ where the UUCP lockfile lives. it's giving directory vibes ๐UUCPLockTimeoutยฒ(integer, default30) โ how long before a stale UUCP lockfile gets removed. bye felicia ๐UUCPLockTypeยฒ(string, defaultsee below) โ the type of UUCP lockfile. the way that this mattersโฆ iykyk ๐ฆVGettyArgs(string, default-) โ arguments passed to the voice getty program. lowkey important for voice stuff ๐ฃ๏ธWedgedCmdยน(string, defaultbin/wedged) โ the command to run when your modem is wedged. not me debugging a wedged modem ๐ModemAnswerCmd(string, defaultATA) โ command for answering the phone. pick up, bestie ๐ModemAnswerDataBeginCmd(string, default-) โ command for the start of an answered data call. the beginning of a data moment โจModemAnswerDataCmd(string, defaultATA) โ command for answering a data call. data call? answered ๐ModemAnswerDialCmd(string, defaultATA) โ command for answering a data call. yes, same default as above, no cap ๐งขModemAnswerFaxBeginCmd(string, default-) โ command for the start of an answered fax call. fax era begins ๐ModemAnswerFaxCmd(string, defaultATA) โ command for answering a fax call. fax me, bestie ๐ModemAnswerResponseTimeout(integer, default180000) โ answer command timeout in milliseconds. patience is a virtue โณModemAnswerVoiceBeginCmd(string, default-) โ command for the start of an answered voice call. voice call? answered ๐ฃ๏ธModemAnswerVoiceCmd(string, defaultATA) โ command for answering a voice call. hello? ๐ModemATCmdDelay(integer, default0) โ delay before sending the modem an AT cmd, in ms. wait for itโฆ โฑ๏ธModemBaudRateDelay(integer, default10) โ delay in ms after setting the baud rate. slow down, speed up ๐ModemClassQueryCmd(string, defaultAT+FCLASS=?) โ command for querying modem services. what can you do, modem? ๐คModemCommaPauseTimeCmd(string, defaultATS8=2) โ command for setting the time to pause for,,in the dialing string. pause for the cause โModemDialCmd(string, defaultATDT%s) โ command for dialing.%sis where the number to dial goes. dial up, bestie ๐ModemDialResponseTimeout(integer, default180000) โ dialing command timeout in ms. ring ring, how long? โฐModemDoPhaseCDebug(boolean, defaultNo) โ query modem responses during Phase C transmit. debug girlies rise ๐ModemDTRDropDelay(integer, default75) โ delay in ms between DTR OFF and DTR ON. dtr drop, dtr pop ๐ModemEchoOffCmd(string, defaultATE0) โ command for disabling command echo. no echo, no problem ๐ModemFlowControl(string, defaultXONXOFF) โ DTE-DCE flow control scheme. flow like water ๐ModemFrameFillOrder(string, defaultLSB2MSB) โ bit order for HDLC frames. bits go brrr ๐ModemHardFlowCmd(string, default-) โ command for setting hardware flow control between DTE and DCE. hard flow, soft heart ๐ModemMinSpeed(string, default2400) โ minimum acceptable transmit speed. slow and steady wins the race ๐ขModemMfrQueryCmd(string, default-) โ command for querying the modem manufacturer. who made you? ๐`ModemModelQueryCmd(string, default-) โ command for querying the modem model. what's your type? ๐โโ๏ธModemNoAutoAnswerCmd(string, defaultATS0=0) โ command for disabling auto-answer. not today, auto-answer ๐ซModemNoAutoAnswerCmdDelay(integer, default0) โ time in ms to pause after disabling auto-answer. pause, then no answer โธ๏ธModemNoFlowCmd(string, default-) โ command for disabling hardware flow control between DTE and DCE. no flow, no go ๐ModemOnHookCmd(string, defaultATH0) โ command for placing the phoneon hook. hang up, bestie โ๏ธModemPageDoneTimeout(integer, default180000) โ page send/receive timeout in ms. page done? timeout said no โณModemPageStartTimeout(integer, default180000) โ page send/receive timeout in ms. page start, timeout heart โค๏ธModemRaiseATCommands(boolean, defaultYes) โ raise AT commands in the configuration to upper-case. uppercase energy ๐ModemRate(integer, default19200) โ baud rate to use for DCE-DTE communication. rate it ๐ฏModemReadyCmds(string, default-) โ additional final commands when resetting the modem. ready, set, reset ๐ModemRecvFillOrder(string, defaultsee below) โ bit order for received facsimile data. receive those bits ๐ModemRecvSuccessCmd(string, default-) โ command to send after a successful reception. success! ๐ฏModemResetCmds(string, default-) โ additional commands when resetting the modem. reset era ๐ModemResetDelay(integer, default2600) โ delay in ms after placing DTR ON. wait for the glow up โจModemResultCodesCmd(string, defaultATQ0) โ command for enabling result codes. codes, but make them results ๐ModemRevQueryCmd(string, defaultsee below) โ command for querying the modem firmware revision. what's your firmware, bestie? ๐งฌModemSendBeginCmd(string, default-) โ command to send on establishing carrier. carrier established, send it ๐คModemSendFillOrder(string, defaultLSB2MSB) โ bit order for sending facsimile data. send those bits ๐ModemSetVolumeCmd(string, defaultsee below) โ commands for setting the modem speaker volume level. turn it up ๐ModemSetupAACmd(string, default-) โ command for setting up adaptive answer. adaptive answer? periodt ๐ModemSetupDCDCmd(string, default-) โ command for setting up DCD handling. dcd, but make it handled ๐๏ธModemSetupDTRCmd(string, default-) โ command for setting up DTR handling. dtr, handled ๐โโ๏ธModemSoftFlowCmd(string, default-) โ command for setting software flow control between DTE and DCE. soft flow, soft life ๐ธModemSoftResetCmd(string, defaultATZ) โ command for doing a soft reset. soft reset, hard feelings ๐ญModemSoftResetCmdDelay(integer, default3000) โ time in ms to pause after a soft reset. pause for the reset โธ๏ธModemSoftRTFCC(boolean, defaultYes) โ enable software-driven real-time fax compression conversion. rtfcc, but make it soft ๐ModemType(string, defaultsee below) โ modem type. what type of modem are you? ๐ท๏ธModemVerboseResultsCmd(string, defaultATV1) โ command for enabling verbose result codes. verbose? we love a talkative modem ๐ฃ๏ธModemWaitForConnect(boolean, defaultNo) โ force server to wait forCONNECTresponse on answer. wait for itโฆ ๐ModemWaitTimeCmd(string, defaultATS7=60) โ command for setting the time to wait for carrier when dialing. wait for carrier, bestie ๐กFaxT1Timer(integer, default35000) โ CCITT T.30 T1 timer in ms. timer t1, iconic โฒ๏ธFaxT2Timer(integer, default7000) โ CCITT T.30 T2 timer in ms. timer t2, also iconic โฒ๏ธFaxT4Timer(integer, default3100) โ CCITT T.30 T4 timer in ms. timer t4, the finale โฒ๏ธClass0Cmd(string, defaultAT+FCLASS=0) โ Class 0: command to enter class 0. class 0, enter ๐Class1Cmd(string, defaultAT+FCLASS=1) โ Class 1: command to enter class 1. class 1, enter ๐Class1Cmd(string, defaultAT+FCLASS=1.0) โ Class 1.0: command to enter class 1. class 1.0, enter ๐ (yes, same name, different vibe)Class1AdaptRecvCmd(string, default-) โ Class 1/1.0: command for adaptive reception support. adaptive recv, slay ๐Class1ColorJPEGSupport(boolean, defaultNo) โ Class 1/1.0: to enable color JPEG fax support. color JPEG fax? obsessed ๐Class1EnableV34Cmd(string, default-) โ Class 1/1.0: command to enable V.34-fax support. V.34 fax, enable it ๐Class1ECMSupport(boolean, defaultYes) โ Class 1/1.0: enable T.30-A ECM support. ECM support, yes ma'am โClass1PersistentECM(boolean, defaultYes) โ Class 1/1.0: to continue to correct while in ECM. keep correcting, bestie ๐Class1ECMFrameSize(integer, default256) โ Class 1/1.0: image frame size in ECM protocol. frame size, 256 ๐ฏClass1ExtendedRes(boolean, default-) โ Class 1/1.0: enable extended resolution support. extended res, extended slay ๐Class1HasRHConnectBug(boolean, defaultNo) โ Class 1/1.0: modem can report CONNECT incorrectly. bug alert ๐Class1HFLOCmd(string, default-) โ Class 1/1.0: command to set hardware flow control. hardware flow, set it ๐งClass1FrameOverhead(integer, default4) โ Class 1/1.0: extra bytes in a received HDLC frame. extra bytes, extra love ๐Class1GreyJPEGSupport(boolean, defaultNo) โ Class 1/1.0: to enable grey JPEG fax support. grey JPEG fax? mood ๐ฉถClass1HookSensitivity(integer, default0) โ Class 1/1.0: times to ignore on-hook detection. ignore on-hook, sensitive queen ๐Class1JBIGSupport(string, defaultsee below) โ Class 1/1.0: to enable monochrome JBIG fax support. JBIG fax, monochrome moment ๐คClass1MRSupport(boolean, defaultYes) โ Class 1/1.0: enable 2-D MR support. 2-D MR, yes ๐Class1MMRSupport(boolean, defaultYes) โ Class 1/1.0: enable 2-D MMR support. 2-D MMR, also yes ๐Class1NFLOCmd(string, default-) โ Class 1/1.0: command to set no flow control. no flow, no problem ๐ซClass1PageLengthSupport(integer, default7) โ Class 1/1.0: coded value for modem page length support. page length, coded ๐ปClass1PageWidthSupport(integer, default7) โ Class 1/1.0: coded value for modem page width support. page width, coded ๐ปClass1RecvAbortOK(integer, default200) โ Class 1/1.0: max wait in ms forOKafter recv abort. wait for OK, max 200 โณClass1RecvIdentTimer(integer, default40000) โ Class 1/1.0: max wait in ms for initial ident frame. ident frame, wait for it ๐Class1RMPersistence(integer, default2) โ Class 1/1.0: times to attempt high-speed carrier recv. persistence, 2 times ๐ชClass1SFLOCmd(string, default-) โ Class 1/1.0: command to set software flow control. software flow, set it ๐พClass1PPMWaitCmd(string, defaultAT+FTS=7) โ Class 1/1.0: command to stop and wait before PPM. PPM wait, stop and wait โClass1ResponseWaitCmd(string, default-) โ Class 1/1.0: command to wait before TCF response. wait before TCF response โธ๏ธClass1Resolutions(integer, default0x7F) โ Class 1/1.0: bitmap of supported resolutions. resolutions bitmap, 0x7F ๐Class1RMQueryCmd(string, defaultAT+FRM=?) โ Class 1/1.0: command to query modem data reception rates. query those reception rates ๐Class1TCFWaitCmd(string, defaultAT+FTS=7) โ Class 1/1.0: command to stop and wait before TCF. TCF wait, stop and wait โClass1TMQueryCmd(string, defaultAT+FTM=?) โ Class 1/1.0: command to query modem data transmission rates. query those transmission rates ๐Class1EOPWaitCmd(string, defaultAT+FTS=9) โ Class 1/1.0: command to stop and wait before EOP. EOP wait, stop and wait โClass1ModemHasDLEBug(boolean, defaultNo) โ Class 1/1.0: modem fails to double DLE in V.21. bug in the modem? tragic ๐ญClass1MsgRecvHackCmd(string, default"") โ Class 1/1.0: command to avoid +FCERROR before image data. hack the system ๐ฅ๏ธClass1TCFRecvHackCmd(string, default"") โ Class 1/1.0: command to avoid +FCERROR before TCF. another hack, another slay ๐Class1TCFMaxNonZero(integer, default10) โ Class 1/1.0: max% of non-zero data in good TCF. max non-zero, 10% ๐ฏClass1TCFMinRun(integer, default1000) โ Class 1/1.0: minimum zero run in good TCF. minimum zero run, 1000 ๐โโ๏ธClass1TCFMinRunECMMod(integer, default2) โ Class 1/1.0: modify minimum zero run in ECM by this factor. factor 2, modify it ๐ขClass1TCFRecvTimeout(integer, default4500) โ Class 1/1.0: max wait in ms for TCF. TCF timeout, 4500 โณClass1TMConnectDelay(integer, default0) โ Class 1/1.0: delay between +FTM CONNECT and data transmission. delay, 0 ms โฑ๏ธClass1SwitchingCmd(string, defaultAT+FRS=7) โ Class 1/1.0: command to ensure silence after HDLC reception. silence after HDLC, please ๐คซClass1ValidateV21Frames(boolean, defaultNo) โ Class 1/1.0: check FCS against received frames. validate those frames โClass2Cmd(string, defaultAT+FCLASS=2) โ Class 2: command to enter class 2/2.0. class 2, enter ๐Class2AbortCmd(string, defaultAT+FK) โ Class 2: command to abort active session. abort! abort! ๐Class2APCmd(string, defaultAT+FAP) โ Class 2: enable support for sending and receiving SUB, SEP, and PWD frames. SUB, SEP, and PWD frames? we love support ๐
...and the parameter parade keeps going, bestie ๐ same name, different class, no drama:
Class2APQueryCmdโ string โ defaultAT+FAP=?โ Class 2: query capabilities for sending and receiving SUB, SEP, and PWD framesClass2BORCmdโ string โ defaultAT+FBOR=0โ Class 2: command to setup bit orderClass2BUGCmdโ string โ defaultAT+FBUG=1โ Class 2: command to enable HDLC frame tracingClass2CIGCmdโ string โ defaultAT+FCIGโ Class 2: command to set polling identifierClass2CRCmdโ string โ defaultAT+FCR=1โ Class 2: command to enable receive capabilityClass2CQCmdโ string โ default-โ Class 2: command to setup copy quality parametersClass2CQQueryCmdโ string โ defaultAT+FCQ=?โ Class 2: command to query modem copy quality capabilitiesClass2DCCCmdโ string โ defaultAT+FDCCโ Class 2: command to set modem capabilitiesClass2DCCQueryCmdโ string โ defaultAT+FDCC=?โ Class 2: command to query modem capabilitiesClass2DisableV17Cmdโ string โ default-โ Class 2: command to disable V.17 supportClass2DISCmdโ string โ defaultAT+FDISโ Class 2: command to set session parametersClass2DDISCmdโ string โ default-โ Class 2: command to set session parameters before dialingClass2ECMTypeโ string โ default"2"โ Class 2: ECM specification type to followClass2HexNSFโ boolean โ defaultYesโ Class 2: parse NSF strings as hex valuesClass2HFLOCmdโ string โ default-โ Class 2: command to set hardware flow controlClass2JPEGSupportโ boolean โ defaultNoโ Class 2: use modem JPEG supportClass2LIDCmdโ string โ defaultAT+FLIDโ Class 2: command to set local identifier stringClass2MINSPCmdโ string โ defaultAT+FMINSPโ Class 2: command to set minimum transmit speedClass2NFLOCmdโ string โ default-โ Class 2: command to set no flow controlClass2PACmdโ string โ defaultAT+FPAโ Class 2: set polling address stringClass2PHCTOCmdโ string โ defaultAT+FPHCTO=30โ Class 2: command to set Phase C timeout parameterClass2PTSCmdโ string โ defaultAT+FPTSโ Class 2: command to set received page statusClass2PWCmdโ string โ defaultAT+FPWโ Class 2: set password stringClass2RecvDataTriggerโ string โ default"\21"โ Class 2: character to send to trigger recvClass2RELCmdโ string โ default-โ Class 2: command to enable byte-aligned EOL codesClass2SACmdโ string โ defaultAT+FSAโ Class 2: set destination subaddress stringClass2SendRTCโ boolean โ defaultNoโ Class 2: append RTC to page data on transmitClass2SFLOCmdโ string โ default-โ Class 2: command to set software flow controlClass2SPLCmdโ string โ defaultAT+FSPLโ Class 2: command to set polling requestClass2TBCCmdโ string โ defaultAT+FTBC=0โ Class 2: command to enable stream modeClass2UseLineCountโ boolean โ defaultNoโ Class 2: use the line count from the firmware decoderClass2UseHexโ boolean โ defaultNoโ Class 2: parse capabilities strings as hex valuesClass2XmitWaitForXONโ boolean โ defaultYesโ Class 2: wait for XON before sending facsimile data
โจ and now, the Class 2.0 glow-up โจ same parameter names, but they brought their own defaults to the function, fr fr:
Class2Cmdโ string โ defaultAT+FCLASS=2.0โ Class 2.0: command to enter class 2/2.0Class2AbortCmdโ string โ defaultAT+FKSโ Class 2.0: command to abort active sessionClass2APCmdโ string โ defaultAT+FAPโ Class 2.0: enable support for sending and receiving SUB, SEP, and PWD framesClass2APQueryCmdโ string โ defaultAT+FAP=?โ Class 2.0: query capabilities for sending and receiving SUB, SEP, and PWD framesClass2BORCmdโ string โ defaultAT+FBO=0โ Class 2.0: command to setup bit orderClass2BUGCmdโ string โ defaultAT+FBU=1โ Class 2.0: command to enable HDLC frame tracingClass2CIGCmdโ string โ defaultAT+FPIโ Class 2.0: command to set polling identifierClass2CRCmdโ string โ defaultAT+FCR=1โ Class 2.0: command to enable receive capabilityClass2CQCmdโ string โ default-โ Class 2.0: command to setup copy quality parametersClass2CQQueryCmdโ string โ defaultAT+FCQ=?โ Class 2.0: command to query modem copy quality capabilitiesClass2DCCCmdโ string โ defaultAT+FCCโ Class 2.0: command to set modem capabilitiesClass2DCCQueryCmdโ string โ defaultAT+FCC=?โ Class 2.0: command to query modem capabilitiesClass2DisableV17Cmdโ string โ default-โ Class 2.0: command to disable V.17 supportClass2DISCmdโ string โ defaultAT+FISโ Class 2.0: command to set session parametersClass2ECMTypeโ string โ default"2.0"โ Class 2.0: ECM specification type to followClass2HexNSFโ boolean โ defaultYesโ Class 2.0: parse NSF strings as hex valuesClass2HFLOCmdโ string โ defaultAT+FLO=2โ Class 2.0: command to set hardware flow controlClass2JPEGSupportโ boolean โ defaultNoโ Class 2.0: use modem JPEG supportClass2LIDCmdโ string โ defaultAT+FLIโ Class 2.0: command to set local identifier stringClass2MINSPCmdโ string โ defaultAT+FMSโ Class 2.0: command to set minimum transmit speedClass2NFLOCmdโ string โ defaultAT+FLO=0โ Class 2.0: command to set no flow controlClass2NRCmdโ string โ defaultAT+FNR=1,1,1,1โ Class 2.0: command to set negotiation message reportingClass2PACmdโ string โ defaultAT+FPAโ Class 2.0: set polling address stringClass2PHCTOCmdโ string โ defaultAT+FCT=30โ Class 2.0: command to set Phase C timeout parameterClass2PIECmdโ string โ defaultAT+FIE=0โ Class 2.0: command to set procedure interrupt handlingClass2PWCmdโ string โ defaultAT+FPWโ Class 2.0: set password stringClass2PTSCmdโ string โ defaultAT+FPSโ Class 2.0: command to set received page statusClass2PTSQueryCmdโ string โ defaultAT+FPS?โ Class 2.0: command to query received page statusClass2RecvDataTriggerโ string โ default"\22"โ Class 2.0: character to send to trigger recvClass2RELCmdโ string โ default-โ Class 2.0: command to enable byte-aligned EOL codesClass2RTFCCโ boolean โ defaultNoโ Class 2.0: enable real-time fax compression conversionClass2SACmdโ string โ defaultAT+FSAโ Class 2.0: set destination subaddress stringClass2SendRTCโ boolean โ defaultNoโ Class 2.0: append RTC to page data on transmitClass2SFLOCmdโ string โ defaultAT+FLO=1โ Class 2.0: command to set software flow controlClass2SPLCmdโ string โ defaultAT+FSPโ Class 2.0: command to set polling requestClass2TBCCmdโ string โ defaultAT+FPP=0โ Class 2.0: command to enable stream modeClass2UseLineCountโ boolean โ defaultNoโ Class 2.0: use the line count from the firmware decoderClass2UseHexโ boolean โ defaultNoโ Class 2.0: parse capabilities strings as hex values
okay and then we pivot to pager + IXO/UCP territory ๐ฆ:
PagerSetupCmdsโ string โ default-โ commands for setting up modem for a pager callPagerMaxMsgLengthโ integer โ default128โ max length of a text messageIXOServiceโ string โ default"PG"โ IXO: service identification stringIXODeviceIDโ string โ default"1"โ IXO: device identification stringIXOMaxUnknownโ integer โ default3โ IXO and UCP: max unknown responses before abortIXOIDProbeโ integer โ default2โ IXO: time between sending\rduring ID sequence (secs)IXOIDTimeoutโ integer โ default20โ IXO: max time to wait forID=response (secs)IXOLoginRetriesโ integer โ default3โ IXO: max attempts to loginIXOLoginTimeoutโ integer โ default15โ IXO: max time to complete login (secs)IXOGATimeoutโ integer โ default30โ IXO: max time to wait for Go-Ahead response (secs)IXOXmitRetriesโ integer โ default3โ IXO and UCP: max retries to send text msg blockIXOXmitTimeoutโ integer โ default15โ IXO and UCP: max time to transmit text msg blockIXOAckTimeoutโ integer โ default30โ IXO: max time to wait for msg block ack (secs)
๐ฅ๏ธ SERVER-ORIENTED CONFIGURATION PARAMETERS ๐
These configuration parameters affect the general operation of the fax server. Like, the whole server's personality. Big main character energy for two little lines of config, ngl.
AdaptiveAnswer
Control whether or not an adaptive answering strategy is used whereby an incoming call is answered in multiple ways according to the list specified in the AnswerRotary parameter. ๐
So for example, if adaptive answering is enabled and AnswerRotary specifies ``fax data'', then an incoming call will first be answered as fax using ModemAnswerFaxCmd and then, if that fails, as data using ModemAnswerDataCmd. If the adaptive answer strategy is not enabled, then calls are answered using the appropriate ModemAnswer*Cmd parameter (normally ModemAnswerCmd for unattended operation).
โ ๏ธ bestie, listen. Note that the adaptive answer strategy depends on many factors that limit its usefulness. It's giving "looks great on paper". ๐
When calls are answered first as fax, it typically only works with a Class 1 modem because it is important that the sequence of operations related to answering as fax be completed in a short enough time that a subsequent answer for data be done before the caller times out and hangs up the telephone (for this reason Class1RecvIdentTimer should be set to a value that is shorter than FaxT1Timer.) ๐ญ The timing has to be tight, no cap.
Also, note that it is sometimes necessary to arrange that the phone be placed on-hook between successive answers; this can typically be done by inserting the appropriate command at the start of the second and subsequent ModemAnswer*Cmds. ๐
AdminGroup
Tells PAM what user group is allowed to administer the fax server. ๐
Only useful if the server is compiled with PAM enabled. ๐
AnswerRotaryโ the sequence of answering techniques your server is gonna rotate through when incoming calls show up. The techniques are:faxโ answer it as a fax calldataโ answer it as a data callvoiceโ answer it as a voice callexternโ use thevgettyapplication to answer the callanyโ answer a call of any/unknown type
So when a call doesn't get answered successfully, the server just advances the rotary to the next technique you listed. If AdaptiveAnswer is on, bestie, the server will try all the answering techniques for each incoming call. Otherwise the rotary only gets advanced between unsuccessful phone calls. Example vibes: if AdaptiveAnswer is disabled and AnswerRotary is `fax data`, then calls get answered as fax first until the first call arrives that doesn't look like it's from a fax machine; after that, calls are answered like they came from a data modem until the next unsuccessful call; and after that they go back to being answered as fax. Only the first three techniques listed get used โ anything extra is (silently) ignored. ๐ Also peep AnswerBias.
AnswerBiasโ the index into theAnswerRotarylist that the server should rotate the list to after each successful incoming phone call. List indices start counting at zero. So like, ifAnswerRotaryis`fax data`andAnswerBiasis1, then after every successful inbound call, the next call gets answered as data. โจAreaCodeยฒ โ the local area code where the facsimile modem lives. This value gets passed to the dial string rules that are used, for example, to formulate canonical phone numbers for dialing (peepDialStringRulesbelow).AuditHookยน โ specifies a program command and an interest specification telling which events (as described infaxwatch(8)) should trigger the execution of the program. For example, this config:
AuditHook: "bin/hook: J*S*M*R*"
would cause bin/hook to be executed on every single event. The arguments passed to the hook program are respectively <class>, <mask>, <id>, and optionally [info], whereโฆ
<class> = JOB | SEND | MODEM | RECV
<mask> = the specific event
<id> = id of the job/modem with which the event is associated
[info] = additional information
BadPageHandlingMethodโ (Class 1/1.0 only) specifies how to react to a bad page received from the remote sender: one of`RTN`,`DCN`, or`RTN-SAVE`.
Okay so here's the tea. If a page is received in non-ECM mode with unacceptable quality according to PercentGoodLines or MaxConseutiveBadLines then it can be somewhat difficult to inform the sender of the problem. Historically, HylaFAX has assumed that signalling RTN to the sender will accomplish this. However, some senders are incapable of retransmitting pages, and to reduce burden they treat an RTN signal as a receipt confirmation and proceed to the next page without notifying the sending user of the potential problem in readability on the receive-end. (The assumption there being that the receiving user will notify the sending user if there actually is a readability problem.)
A setting of `RTN` is the historic behavior and assumes that an RTN signal will be enough to get the sender to retransmit or be otherwise informed of a potential readability problem on the receive-end. The previously-received page data is marked to be overwritten by the next page data received from the sender.
A setting of `DCN` tells HylaFAX to transmit a DCN signal in response to the post-page message and should trigger a call abortion by the sender. This should clearly indicate a problem in page readability to the sender, although the receipt of any following pages in a later call cannot be guaranteed. ๐ฌ
A setting of `RTN-SAVE` more closely approximates the behavior of other fax receivers (especially fax machines). It causes HylaFAX to send the RTN signal but it saves the previously received page data and places the next transmitted page data in another page. This is the default setting. However, this could result in multiple copies of the same page image being saved in the same file โ if the sender does indeed retransmit the unacceptable pages during the same call. ๐ซ
BatchLogsยน โ when sending or receiving multiple documents (denoted by EOM), this value determines if the session logs span the entire batch or, if set tono, only contain a single document.CallIDPatternโ a string that identifies the caller's identity in any call identification messages provided by the modem (like Caller*ID or DNIS/DID). The string you specify gets compared against any unrecognized status messages received from the modem beforeModemAnswerCmdis sent to the modem. If there's a match, then the rest of the message is returned asCallIDn where n corresponds to the n'th instance that thisCallIDPatternis from the top in the modem configuration file. For example, for the ZyXEL U-1496 this parameter would be set toCallIDPattern: "CALLER NAME: "(note the trailing space, bestie, it matters ๐ ). If more than one message matches between instances of"RING"messages, then the message remainders are concatenated.
The special CallID value of "SHIELDED_DTMF" is used in conjunction with ModemRingResponse and CallIDAnswerLength. After executing ModemRingResponse, HylaFAX will expect DTMF data (usually DLE-shielded) for CallIDn until CallIDAnswerLength is reached. Note that if the modem is in voice mode to hear these DTMF digits, then it must be returned to fax mode in the ModemAnswerCmd. In order to prevent this feature from losing incoming fax calls, if fax sender CNG is detected while waiting for DTMF or if ten seconds elapse without sufficient DTMF then the remaining expected digits will be populated by whitespace, triggering fax answering. ๐จ
For example, the following settings will cause HylaFAX to enter voice mode and go off-hook when a RING is detected. It will then expect four DTMF digits (presumably for routing), and then it will pause for 100 ms before returning to fax mode and answering the call.
ModemRingResponse: AT+FCLASS=8;H1
CallIDPattern: SHIELDED_DTMF
CallIDAnswerLength: 4
ModemAnswerCmd: <delay:100>AT+FCLASS=1;A
For modems that do not support AT+FCLASS=8 (such as some USR modems) this may be an appropriate equivalent:
ModemRingResponse: "AT#CLS=8\nAT#VLS=4\nATA"
CallIDPattern: SHIELDED_DTMF
CallIDAnswerLength: 4
ModemAnswerCmd: "<delay:100>AT+FCLASS=1\nATA"
Multiple entries of CallIDPattern are used together in one modem configuration file in order to capture multiple CallID responses. For example, the following settings would capture "NDID" responses from the modem as CallID1, "NMBR" responses from the modem as CallID2, "NAME" responses as CallID3, and it would trigger ModemAnswerCmd whenever CallID1 or CallID2 were longer than 7 or 10 characters, respectively.
CallIDPattern: "NDID="
CallIDAnswerLength: 7
CallIDPattern: "NMBR="
CallIDAnswerLength: 10
CallIDPattern: "NAME="
Note that this example is only given as an example, and probably would cause unexpected results. ๐ญ Because pattern-matching ends whenModemAnswerCmdis sent to the modem, if"NDID","NMBR", and"NAME"responses came from the modem in that order, and the"NDID"response was at least7characters long, thenModemAnswerCmdwould be sent to the modem immediately following the"NDID"response, and the"NMBR"and"NAME"responses would be ignored. Generally only oneCallIDAnswerLengthitem should be in a modem configuration file.
CallIDAnswerLengthโ an integer indicating the minimum number of characters in aCallIDmatching the previousCallIDPatternto be received whenModemAnswerCmdis sent to the modem, irrespective of anyRingsBeforeAnswervalue greater than zero. This allows the answering of calls which deliver CID/DID data but not RINGs. For example,
CallIDAnswerLength: "7"
would cause the call to be answered when CallID2 reached a length of seven digits. A value of zero for CallIDAnswerLength disables this feature.
ClocalAsRootโ controls whether operations that set theCLOCALbit on the modem device special file are done with the effective user-ID set to the super-user or the`fax`user. By default such operations are done as thefaxuser, except under IRIX where they are done as the super-user (because IRIX disallows manipulation ofCLOCALby anyone but the super-user).ContCoverCmdยน โ the command to invoke to generate a continuation cover page; peepContCoverPageandmkcover(8).ContCoverPageยน โ a template file to use in creating continuation cover pages. If this parameter is non-null, then the server will pass the filename to the command specified byContCoverCmdto generate cover pages for outbound jobs that are continued after protocol errors. These cover pages identify the receiver and indicate that the document is a continued transmission. If this parameter is not specified or is null, then the server will not generate continuation cover pages. The specified pathname must be relative to the top of the fax server's spooling area. ๐CountryCodeยฒ โ the local country code where the facsimile modem resides. As forAreaCode, this value is passed to the dial string rules for use in formulating canonical phone numbers for dialing (among other things.) ๐
CountSkippedPages ๐ โ the vibe check for skipped pages
Okay so bestie, if a page range has been specified in the job, and pages are being skipped during the send, this controls if the pages skipped are counted in the pages counted and totaled. No cap. If skipped pages are to be counted, it will appear as if the pages were instantly sent in 0:00 with no data. The tagline counts will be incremented on skipped pages, and faxq will notify clients via triggers of them as well. If they are not to be counted, then tagline page counts will act as if the pages never existed, and no faxq trigger notifications will be sent. Periodt. ๐
DeviceMode ๐
The file protection mode that the server should set for the modem device file. Note that this value is given in octal. The default value of 0600 implies that only the facsimile user (usually uucp) can access the modem. See also chmod(2). Itโs giving exclusive access, fr fr. ๐
DialStringRulesยฒ ๐
The pathname of the file that holds the rules for processing user-specified dial strings; c.f. dialrules(5). The specified pathname must be relative to the top of the fax server's spooling area; e.g. etc/dialrules. Lowkey important for your dialing game. โจ
DistinctiveRings ๐ถ
Modern distinctive ring support on most modems indicates the ring cadence rather than the older style of RING1'', RING2'', etc. To indicate the ring cadence, DRingOn and DRingOff values are presented by the modem to the faxgetty process. The modem indicates the entire cadence between ``RING'' indications like this:
RING
DROF=40
DRON=8
DROF=4
DRON=8
RING
The corresponding DistinctiveRings parameter for this ring cadence would be:
DistinctiveRings: F-8-4-8
where F'' tells the `faxgetty` process that the ring cadence is for a facsimile (V'' for voice and ``D'' for data), and the other values describe the ring cadence with leading and ending DRingOff values ignored. Multiple ring cadences are indicated by delimiting them with commas in this fashion:
DistinctiveRings: V-20,F-8-4-8,D-4-2-4-8
Itโs giving ring cadence realness. ๐ฆ
DRingOff ๐
A string that identifies the off'' value in any distinctive ring cadence, for example DROF=''. See also DRingOn and DistinctiveRings. Silence is golden, bestie. ๐
DRingOn ๐
A string that identifies the on'' value in any distinctive ring cadence, for example DRON=''. See also DRingOff and DistinctiveRings. Turn up the volume! ๐ต
DynamicConfig โ๏ธ
The pathname of the optional program, e.g. etc/localid'', that makes dynamic configuration changes, i.e., to `LocalIdentifier`, based on device ID and call identification. The program is passed those values as the parameters (`$1` = device id, `$2` = `CallID1`, `$3` = `CallID2`, `$4` = `CallID3`, ...), when answering an incoming call. The program can then perform local processing as desired to send on standard output the configuration items to change in a parameter:value'' format, i.e. ``LocalIdentifier: +1.800.555.1212''. If there are multiple parameters to be changed, then each item must be on its own line. This is commonly used to dynamically alter the local identification of systems which use DID/DNIS, but it can also be used to allow different modem configurations for different senders. This program can also set the RejectCall options to cause the current call to be rejected instead of answered. Note that this file must be marked as executable by the faxgetty process. Main character energy for your config! ๐
EGettyArgs ๐
A string that indicates whether or not the server should use an external getty application to deduce and possibly handle an incoming call. If the string value is not null, then it is interpreted as a set of arguments to pass to the getty program. Before supplying the arguments, the string is first scanned for %''-escape sequences: any appearance of %l'' is replaced with the tty name and any appearance of %s'' is replaced with the serial port speed (in decimal). Any appearance of escaped numbers 1 through 9 (%1'' through %9'') are replaced by the match to the corresponding `CallIDPattern`, if present. The %'' character can be specified with %%''. If the `EGettyArgs` parameter is not specified in the configuration file or if the string value is null, then extern'' connections will be rejected. Note that in addition to the specified command line arguments, the external getty program is invoked with its standard input, output, and error descriptors directed to the controlling tty device.
When the external getty application completes, its exit status is evaluated and is interpreted to indicate what, if anything, should be done with the call. An exit status of 0'' indicates an unknown call type and that the call should be handled as if the external getty program had not been used. An exit status of 1'' indicates a data connection and that the getty(8) program should be used to handle the call (see GettyArgs) after being answered with ModemAnswerDataBeginCmd . An exit status of 2'' indicates a fax connection that should be handled after being answered with `ModemAnswerFaxBeginCmd`. An exit status of 3'' indicates a voice call and that the vgetty program should be used to handle the call (see VGettyArgs) after being answered with BR ModemAnswerVoiceBeginCmd . An exit status of 4'' is considered to be an error condition. The session will be terminated. An exit status of 5'' is used to indicate that the external getty program handled the call entirely, is not an error condition, and that the session is to be considered terminated.
So many exit codes, so little time! ๐
FAXNumber โ๏ธ
The phone number associated with the facsimile modem. This string is used to generate the Transmitter Subscriber Identification (TSI) and Caller Subscriber Identification (CSI) information passed to remote machinesโunless the LocalIdentifier parameter is explicitly set. The FAXNumber is also used to name the session log file where information for incoming phone calls is recorded; see hylafax-log(5). If this phone number is not a fully qualified number the values of AreaCode and CountryCode are used to generate the transmitted CSI and TSI. Itโs giving caller ID realness. ๐ซถ
Includeยฒ ๐
Include the specified file and parse it as a config file. Just slide it in, bestie. โจ
InternationalPrefixยฒ ๐
The string to use to place an international phone call. In the United States, this is ``011''. This string is passed to the dial string rules. Globetrotting vibes! ๐
JobControlCmdยน ๐๏ธ
The command to invoke to which provides Job Control information for a job. See JobControl(8). Control the narrative. ๐
JobReqBusy โณ
The delay in seconds to wait before retrying a job whose dialing attempt failed with a ``BUSY'' status result. Patience, queen. ๐
JobReqDataConn โณ
The delay in seconds to wait before retrying a facsimile job whose dialing attempt failed because a data modem answered the phone. Wrong number, wrong vibe. ๐
JobReqError โณ
The delay in seconds to wait before retrying a job whose dialing attempt failed with a ``ERROR'' status result. Error, error! ๐
JobReqNoAnswer โณ
The delay in seconds to wait before retrying a job whose dialing attempt failed with a ``NO ANSWER'' status result. Left on read. ๐ญ
JobReqNoCarrier โณ
The delay in seconds to wait before retrying a job whose dialing attempt failed with a ``NO CARRIER'' status result. No signal, no service. ๐ต
JobReqNoFCon โณ
The delay in seconds to wait before retrying a facsimile job whose dialing attempt failed because the initial facsimile protocol handshake failed (i.e. no ``+FCON:'' result was received from a Class 2/2.0 modem). Handshake denied. ๐ค
JobReqOtherยฒ โณ
The delay in seconds to wait before retrying a job that failed for a reason not already covered by one of the JobReq* parameters. Catch-all for the chaos. ๐ช๏ธ
JobReqProto โณ
The delay in seconds to wait before retrying a facsimile job that failed because of a fax protocol error. Protocol tea. โ
JobRetryBusy ๐
The number of times to redial a phone number after receiving a ``BUSY'' status result code when the number has not been successfully dialed before. Keep trying, bestie. ๐ช
JobRetryDataConn ๐
The number of times to redial a phone number after the dialing attempt failed because a data modem answered the phone when the number has not been successfully dialed before. Data drama. ๐
JobRetryError ๐
The number of times to redial a phone number after receiving a ``ERROR'' status result code when the number has not been successfully dialed before. Retry the error? ๐
JobRetryNoAnswer ๐
The number of times to redial a phone number after the dialing attempt failed because of NO ANSWER when the number has not been successfully dialed before. They didnโt pick up. ๐
JobRetryNoCarrier ๐
The number of times to redial a phone number after the dialing attempt failed because of NO CARRIER when the number has not been successfully dialed before. In normal operation the fax server will treat this result code to mean that a facsimile modem/machine did not answer the phone and reject the transmit job. This is done to avoid repeatedly dialing wrong phone numbers and depends on the modem distinguishing between no carrier and no answer. However, some modems are not capable of reliably distinguishing between no carrier and no answer, or when instructed to do so do not identify a busy signal correctly. For these modems one may find it necessary to increase the value of this parameter to compensate.
It is strongly recommended, however, that this value not be set to a large number.
Donโt be extra with this one, okay? ๐ โโ๏ธ
JobRetryOther ๐
The number of times to redial a phone number after the dialing attempt failed for a reason not already covered by one of the other JobRetry* parameters when the number has not been successfully dialed before. The miscellaneous retry! ๐
GettyArgs ๐
Okay so GettyArgs is a string that tells the server whether or not to invoke the getty(8) program when someone calls in from a data modem. If the string value isn't null, it's literally a set of arguments to pass to the getty program. But before handing over those arguments, the string gets scanned for %-escape sequences: any %l gets replaced with the tty name, and any %s gets replaced with the serial port speed (in decimal). Any escaped numbers 1 through 9 (%1 through %9) get replaced by the match to the corresponding CallIDPattern, if there is one. You can specify a literal % character with %%. If GettyArgs isn't in the config file, or if the string value is null, then data connections get rejected. Also note: in addition to the command line arguments you specify, the getty program is invoked with its standard input, output, and error descriptors directed to the controlling tty device.
LocalIdentifier ๐ธ
The local station identification string to use when transmitting TSI and CSI strings (see FAXNumber above). NB: this string can contain any printable ASCII characters, but beware โ CCITT T.30 specifies a restricted character set, and some fax modems and machines may reject or not display non-conforming strings. If the local identifier isn't specified, a canonical form of the FAXNumber is used instead.
LockDataCalls ๐
Hold the UUCP lockfile while an inbound data call is being processed by the external getty program. If this is disabled, the lockfile gets removed just before the getty program is invoked. But note: doing that introduces a race condition where an outbound program can sneak in and take control of the modem after the inbound call has been accepted, but before the getty program has started up and installed its own lockfile. ๐ฌ
LockVoiceCalls ๐
Hold the UUCP lockfile while an inbound data call is being processed by the external voice getty program. If this is disabled, the lockfile gets removed just before the voice getty program is invoked. But note: doing that introduces a race condition where an outbound program can sneak in and take control of the modem after the inbound call has been accepted, but before the voice getty program has started up and installed its own lockfile. ๐ฌ
LogFacilityยฒ ๐
The symbolic name for the syslog(3) facility to use when logging error messages and informational/debugging messages requested through the ServerTracing parameter. The list of facility names is standardized; you can find it in the system include file <syslog.h>; comparisons are case-insensitive.
LogCalls ๐
Log all incoming calls into xferfaxlog as CALL records. This lets you quickly check all incoming calls, regardless of whether the fax completed or not, in a unified way with other fax logs.
LogFileMode ๐ก๏ธ
The file protection mode to use when creating files that hold session logs. Note that this value is given in octal. The default value of 0600 means the log files aren't generally accessible, which is important if sensitive information like calling card access codes gets logged. If log files are meant to be publicly accessible, you can set this value, for example, to 0644. See also chmod(2).
LongDistancePrefixยฒ โ๏ธ
The string to use to place a long distance phone call. In the United States, this is 1.
MaxConcurrentCallsยน ๐ฆ
The default value to use for the maximum number of jobs for the same destination that are processed concurrently. So this parameter defines the maximum number of concurrent phone calls to the same destination. Unless all of your fax destinations have multiple fax lines using the same fax number per destination, MaxConcurrentCalls is probably best left as the default of 1, and exceptions should be accommodated by the JobControl mechanism.
MaxBatchJobsยน ๐ฆ
The maximum number of jobs to batch together in a single call.
MaxConsecutiveBadLines ๐ซ
The maximum number of consecutive erroneous rows of image data that the server will receive before it deems a page to have unacceptable copy quality. Setting this parameter to zero causes the server to not check the quality of received facsimile. Facsimile received with error-correction do not have copy quality checking performed. See also PercentGoodLines.
MaxDialsยน ๐
The default value for the maximum number of times the server will place a call for an outbound job. This value may be overridden by rules in the JobControl mechanism. See also MaxTries.
MaxRecvPages ๐
The maximum number of pages the server will accept in a received facsimile before it aborts the session.
MaxSendPagesยน ๐ค
The default value for the maximum number of pages the server will permit in a transmitted facsimile. Outbound jobs that exceed this limit are rejected. This value may be overridden by rules in the JobControl mechanism.
MaxSetupAttempts ๐ง
The maximum number of times a HylaFAX server program will attempt to initialize a modem before considering it wedged.
MaxTriesยน ๐
The default value for the maximum number of times the server will attempt to communicate with a remote site. Note that for a call to be counted against this limit, carrier must be established; this is in contrast to the value of MaxDials which limits the number of calls that will be placed on behalf of a job. This value may be overridden by rules in the JobControl mechanism. See also MaxDials.
MinAcceptedLineCount ๐
The minimum number of received scanlines allowed on an OK page. The use of this setting prevents confirmation from being sent for very short pages.
ModemGroupยน ๐๏ธ
Define a logical name for a set of modem devices. This parameter can be used to define a name that clients can use to refer to a collection of modems. The syntax is <name><regex> where <name> is the name for the group and <regex> is a regular expression that faxq(8) matches against known modems. Thus for example, the default modem to use for a job, any, is defined as any:.*. This parameter may be specified multiple times to define multiple modem classes. Modem classes may overlap. The actual set of modems in a modem class that are considered for use may vary based on which modems are believed to be ready for use.
ModemPriority ๐ฅ
The scheduling priority to use for a modem. Priority values are in the range 0 to 255 with lesser values signifying higher (more desirable) priority. The HylaFAX scheduler process assigns the highest priority modem that is ready for use when scheduling an outbound job.
If multiple available modems in a job's selected ModemGroup have the same ModemPriority value, then the HylaFAX scheduler assigns jobs to them in a round-robin fashion.
NoAnswerVoice ๐คซ
Whether or not to disable the answering of calls indicated as voice (e.g. by DistinctiveRings).
NoCarrierRetrys ๐
This is mapped onto JobRetryNoCarrier.
ModemReadyState ๐ฆ
Define the state transmitted to the HylaFAX scheduler process each time a modem is made ready by a faxgetty process. State is one of: R (ready for use), B (busy), or D (down). The modem state can be used to control whether or not modems are assigned to outbound jobs. A modem's state is initially set to R (ready). Modem state can be dynamically changed with the faxstate(8) program or by setting this configuration parameter with the faxconfig(8) program.
ModemRingResponse ๐
This can be used to cause the command defined by ModemRingResponse to be sent to the modem after hearing at least ModemRingsBeforeResponse RINGs in order to receive DID-DTMF data, for example.
ModemRingsBeforeResponse ๐
This defines the minimum number of RINGs that must be heard before ModemRingResponse is first sent to the modem.
NotifyCmdยฒ ๐
The command to invoke to notify a client of a job status change; see notify(8).
PageChopยน โ๏ธ
Whether or not to automatically truncate trailing whitespace on pages of outbound facsimile (when possible). If page chopping is enabled, then pages with at least PageChopThreshold trailing whitespace on a page will be transmitted as a short page if the receiver is capable of accepting variable-length pages. The possible values are: last to enable chopping of the last page of each document, all to enable chopping of all pages, or none to disable page chopping.
PageChopThresholdยน ๐
The minimum amount of trailing whitespace that must be present on a page before page chopping will be attempted; see PageChop. Note that this value is specified in inches.
PCL2FaxCmdยน ๐จ๏ธ
The command to invoke to convert a HP-PCL document submitted for transmission to TIFF/F, suitable for transmission.
PercentGoodLines ๐ฏ
The minimum percentage of good rows of image data required for a received facsimile page to be deemed to have acceptable copy quality. Setting this parameter to zero causes the server to not check the quality of received facsimile. Facsimile received with error-correction do not have copy quality checking performed. See also MaxConsecutiveBadLines.
PollLockPokeModem ๐ก
When polling for the presence/removal of a UUCP lockfile, also test to make sure the modem is still reachable. This is useful for scenarios where the modem is apt to become disconnected while the modem is idle, such as an external modem that may lose power, where the administrator wants notification of this (as a wedged condition).
PollLockWait
The wait time, in seconds, between checks when we're polling for a UUCP lockfile to show up or dip out. Why do we even poll? So the fax server doesn't collide with some other process that's got its hands on the modem โ bestie we do not share the modem. ๐ค
PollModemWait
How many seconds to chill between checks while waiting for a modem to become ready for use. This whole polling situation kicks in when a modem fails to reset cleanly โ which, mood, honestly. ๐ญ
PriorityScheduling
Tells the HylaFAX scheduler whether it should use whatever priority job scheduling mechanisms are lying around to boost realtime execution โ especially with Class 1 configurations on older or slower systems. ๐ขโจ
Currently PriorityScheduling is available for IRIX, SVR/4, HP-UX, and POSIX-compliant (i.e. Linux) operating systems. The default value varies so traditional HylaFAX behavior stays intact. On IRIX, SVR/4, and HP-UX systems where the configure script detects one of the functions schedctl(), priocntl() or rtprio(), the default is true. The only other supported priority mechanism is POSIX sched_setscheduler(), which gets used on Linux, OpenServer and possibly other systems. On those systems, and also on systems where no priority scheduling mechanism exists at all, the default is false. ๐
PS2FaxCmdยน
The command to invoke to convert a POSTSCRIPT document submitted for transmission into TIFF/F, suitable for transmission; see ps2fax(8). ๐จ๏ธ
QualifyPWD
A string that says whether or not the identity of calling facsimile machines should be checked against an access control list before receiving facsimile. If QualifyPWD is non-null, then only messages from facsimile machines identified in the file specified by the string (typically etc/passwd) will be accepted; similar to QualifyTSI. ๐
QualifyTSI
A string that says whether or not the identity of calling facsimile machines should be checked against an access control list before receiving facsimile. If QualifyTSI is non-null, then only messages from facsimile machines identified in the file specified by the string (typically etc/tsi) will be accepted; see tsi(5). If QualifyTSI isn't specified in the configuration file, or the value is null, then all incoming facsimile messages will be accepted. ๐ซถ
RecvDataFormat
The data format (compression scheme) to use when writing received facsimile data, but only when copy quality checking is performed on the host. (When copy quality checking isn't done by the server โ for example when error correction protocol is used โ the received facsimile data is written exactly as it is received from the modem. No glow-up, no edits. ๐)
The format may be one of: 1-D MH, 2-D MR, 2-D MMR, or adaptive. An adaptive format causes the received data to be written using the data format negotiated by the sender and receiver. ๐ค
Heads up bestie: while 2-D MMR is the most space-efficient data format, the resultant file may not be viewable โ certain commonly used programs do not properly read multi-strip TIFF with 2-D MMR data. Not me trusting random viewers with my TIFFs ๐
RecvFileMode
The file protection mode used when creating files to hold incoming facsimile. Note that this value is given in octal. The default value of 0600 implies that only the facsimile user can read received facsimile. If incoming facsimile are meant to be publicly accessible, this value may be set, for example, to 0644. See also chmod(2). ๐
RejectCall
If this is set to true, the current call will not be answered, and will be rejected. ๐ซ๐
Okay this one is sneaky: it has no effect if set in the configuration file, but when set by theDynamicConfigprogram, it controls the current call. This option supersedes the obsoleteQualifyCIDoption.
RingData
A modem status string that identifies that an incoming call is for data use. This string should be set when a phone line has been set up with distinctive ring service. See also RingFax and RingVoice. ๐ป
RingExtended
An identifier which matches the initial portion of an extended RING message sent by the modem to relay CID and/or DNIS data instead of sending it formatted on separate lines. ๐
RingFax
A modem status string that identifies that an incoming call is for facsimile use. This string should be set when a phone line has been set up with distinctive ring service. See also RingData and RingVoice. ๐
RingsBeforeAnswer
The number of rings to wait before answering the phone. If this value is set to 0, then the phone will only be answered in response to an explicit answer command; see faxanswer(8). โ๏ธโจ
RingTimeout
If a ring is heard and the call is not answered, the time in ms to wait before reinitializing the modem for the next call. โฑ๏ธ
RingVoice
A modem status string that identifies that an incoming call is for voice use. This string should be set when a phone line has been set up with distinctive ring service. See also RingData and RingFax. ๐ฃ๏ธ
RTNHandlingMethod
Specifies how to react to an RTN signal received from the remote: one of Retransmit, Giveup, Ignore, or Retransmit-Ignore. This one is a whole personality quiz, so let's go one by one. ๐
Retransmitassumes that the page is not received successfully. HylaFAX will make up to two additional attempts to send the page, decreasing signalling rate and retraining. If RTN continues, up to 2 additional calls will be placed. The downside is that if the remote always responds with RTN, the page will be sent 9 times and no following pages will be sent. Many fax machines will not behave this way, although the T.30 specification seems clear that this is the intent of the RTN signal. ๐ตโ๐ซ- Many fax machines will interpret RTN as meaning to not send the same data again. That's because RTN may indicate problems with flow control, incorrectly encoded T.4 data, or some incompatibility other than line noise. Fax machines that interpret RTN this way will disconnect and require a manual retransmission. This "over and out" behaviour can be activated by the
Giveupvalue. The advantage to this behavior is that the same page of image data will not be sent multiple times, but the downside is that the following pages will not be sent. โ๏ธ Ignoreis similar toGiveupin that it makes the assumption the data cannot be automatically accepted by the receiver. However, rather than disconnecting, the page of image data is abandoned and processing moves on to the next. The remote is left to decide what to do with the unacceptable page of image data. The downside to this behavior is that the remote may or may not have kept the page, depending on its interpretation of the RTN signal โ but it does allow us to continue on to the next page. ๐Retransmit-Ignoreis a combination ofRetransmitandIgnore. The page of image data is retransmitted up to two additional times, but rather than disconnecting after a third RTN signal for the same page, processing then continues on to the next page. This approach is an effort to satisfy both interpretations of an RTN signal. It allows the receiver to hopefully receive a better copy of the image data while not failing to send subsequent pages. If the receiver saves or prints a copy of pages for which it transmits RTN, then it could save or print up to three copies of every page. ๐ ๐๐๐
SaveUnconfirmedPages
Whether or not to save a received facsimile image page if the sender disconnects without sending the post-page message, without hearing our message confirmation, without retraining as requested, or otherwise breaks fax protocol following such pages for which the sender should not have a receipt confirmation. ๐ซฃ
SendFaxCmdยน
The command to use to process outbound facsimile jobs; see faxsend(8). ๐ค
SendPageCmdยน
The command to use to process outbound pager jobs; see pagesend(8). ๐
SendUUCPCmdยน
The command to use to process outbound UUCP jobs. This parameter is not currently used, it is for future development. ๐โจ
ServerTracingยฒ โจ
Okay bestie, this one is a number that controls how much tracing info the server generates when it's not actively sending or receiving fax. Tracing is split into areas, and each area has its own little switch. Wanna trace multiple areas at once? Bit-or the flags together and that's your value for this tag. ๐
1(0x00001) โ Server Operation: queue management and general operation2(0x00002) โ FAX/IXO Protocol: T.30 facsimile protocol or IXO/TAP protocol4(0x00004) โ Modem Operations: modem hardware manipulation8(0x00008) โ Modem Communications: commands passed between host and modem16(0x00010) โ Timeouts: timer operations32(0x00020) โ Modem Capabilities: modem capabilities64(0x00040) โ HDLC Frames: binary T.30 HDLC frames128(0x00080) โ Binary Modem I/O: binary communication between host and modem256(0x00100) โ Server State Transitions: server program state transitions512(0x00200) โ Queue Management: job queue management1024(0x00400) โ Copy Quality: copy quality checking of received facsimile2048(0x00800) โ Job Management: low-level job management4096(0x01000) โ IXO Protocol: low-level IXO protocol8192(0x02000) โ Config File Parsing: unknown configuration file parameters16384(0x04000) โ FIFO Messages: inter-application messages32768(0x08000) โ Modem State Transitions: modem state changes (down, busy, ready)65536(0x10000) โ Dial Rules: dialstring rules parsing and execution131072(0x20000) โ Docq Changes: document reference handling262144(0x40000) โ TIFF library: any messages produced by the TIFF library524288(0x80000) โ ECM Frames: binary T.30-A HDLC ECM frames
So like, if you want server operations AND protocol operations traced? That's 1+2=3. Math girlie moment. ๐งฎ
NB: tracing timeouts and/or binary modem I/O can adversely affect the operation of the fax server; enabling these areas should be done with extreme care. no cap, be careful bestie ๐ญ
Server tracing goes to syslog(3) using the facility you set with the LogFacility configuration parameter. Heads up: syslogd(8) has to be configured to capture facility.info, facility.debug, facility.warning, and facility.err messages. Wanna know what actually gets logged? See hylafax-log(5). ๐
SessionTracingยฒ ๐ฆ
Same energy, different moment: this number controls tracing info generated by a server while sending or receiving facsimile. It's interpreted identically to ServerTracing. The one glow-up difference? Session tracing lands in log files in the log subdirectory. See hylafax-log(5) for more. ๐ธ
SpeakerVolume ๐
How loud should the in-modem speaker be while in command mode? Your options, bestie:
Offโ silent ๐คซQuietโ almost inaudibleLowโ tolerable in privacyMediumโ loud enough to hear in the next roomHighโ intolerable ๐
Note: the speaker is always turned off once carrier is established. Also beware โ some modems support fewer volume settings; see ModemSetVolumeCmd.
TagLineCoverNumString ๐
Setting TagLineCoverNumString tells faxsend to not include the cover pages in the normal page numbering mechanism. The page numbers used in tagline generation get adjusted so they don't count the cover pages, and the TagLineCoverNumString value wil be used instead of a page number on the tagline of the cover page. cute, right? โจ
TagLineFont ๐ค
The filename of the font used to image tag lines across the top of each transmitted page. Fonts must be stored in the Portable Compiled Font (PCF) format used by the X11 Window System. Filenames are specified relative to the root of the spooling area; e.g. etc/lutRS18.pcf.
No font specified? Null filename? Font file not readable? Then tag lines just <em>won't be generated</em>. Sorry bestie. ๐ See also TagLineFormat.
TagLineFormat ๐
The format string used when imaging tag lines across the top of each transmitted page. It can include escape codes that interpolate stuff into the imaged tag line. Any escape code supported by strftime(3C) works, plus these server-implemented ones:
%%aโ destination subaddress%%cโ destination company name%%Cโ sender's company name%%dโ destination phone number%%gโ destination geographic location%%Gโ sender's geographic location%%iโ job identifier%%Iโ group identifier%%jโ user-specified job tag%%lโLocalIdentifieror canonicalizedFAXNumber%%mโ sender's electronic mail address%%nโ canonicalizedFAXNumber%%pโ current page number of session%%Pโ current page number of job%%rโ receiver's name%%sโ sender's name%%Sโ subject%%tโ total pages in session%%Tโ total pages in job%%vโ destination voice number%%Vโ sender's voice number%%%โ ``%''
Also!! The format string can center text in multiple equal-sized fields by separating the text with |'' characters. Like, a|b|c'' breaks the tag line into three equal-sized areas with the strings a'', b'', and ``c'' centered in each region. Slay. ๐ซถ
The default tag line format string is ``From %%n|%c|Page %%P of %%T''.
The difference between the %%p or %%P and the %%t or %%T options shows up when a fax job gets retried after an incomplete attempt and only the previously unsent pages are queued in a successive session. iykyk. See also TagLineFont.
TIFF2FaxCmdยน ๐ผ๏ธ
The command to invoke to convert a TIFF submitted for transmission to TIFF/F, suitable for transmission; see tiff2fax(8).
TimeOfDayยน โฐ
The default time-of-day restrictions to apply to outbound jobs. Outbound jobs get processed only during the specified time. Any jobs submitted outside this time period are held until the start of this time. The syntax is designed to be compatible with the syntax used by the UUCP software. Here's the BNF, bestie, verbatim:
Syntax = tod ["," tod]
tod = <days><timerange>
days = "Any" | "Wk" | <dayname>+ | nothing
dayname = "Sun" | "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat"
timerange = <start> "-" <end> | nothing
start = <24hrtime>
end = <24hrtime>
24hrtime = {0-9}{0-9}{0-9}{0-9}
nothing =
Where start and end are 24-hour times, day names can be either 2- or 3-characters, and a null day or time specification means any time or day. White space and other syntactic sugar may be freely inserted between tokens โ but may not be inserted between 24-hour times in the time range. ๐
This value may be overridden by rules in the JobControl mechanism.
Use2Dยน ๐ฅ
Control the use of 2D-encoded data for transmitted facsimile.
UseJobTagLine ๐ท๏ธ
Allow the use of the job-specified tagline instead of the configured TaglineFormat.
UUCPLockModeยฒ ๐
The file protection mode to use when creating UUCP lockfiles. Note that this value is given in octal.
UUCPLockDirยฒ ๐
The pathname of the directory in which UUCP lockfiles are to be created.
UUCPLockTimeoutยฒ โณ
The time in seconds to wait before removing a stale UUCP lockfile (i.e. a lockfile whose owner does not appear to exist). If this value is set to 0, then the fax server will never remove a stale lockfile. periodt.
UUCPLockTypeยฒ ๐๏ธ
A string that specifies the type of UUCP lockfile to create. It can be one of ascii'' or binary'', depending on whether the process-ID of the lock owner is written to the file as an ascii string or as a binary value, respectively.
On top of that, two prefixes control the format of the lock filename:
- Prefix the type string with a ``+'' and you get SVR4-style filenames, generated using the major device number of the tty device and the major and minor device numbers for the filesystem on which the tty device resides.
- Prefix the type string with a
-'' and any upper case letters in the device part of the lockfile name get converted to lower case letters; for example,LCK..ttyA01'' becomes ``LCK..ttya01''.
That upper-to-lower case conversion is useful for systems such as SCO, where the convention is to name devices with upper-case letters but create lockfiles with lower-case letters. iconic. ๐
VGettyArgs ๐
A string that indicates whether or not the server should invoke a voice getty program in response to an incoming voice call. If the string value is not null, it's interpreted as a set of arguments to pass to the vgetty program.
Before supplying the arguments, the string gets scanned for ``%''-escape sequences:
- any appearance of ``%l'' is replaced with the tty name
- any appearance of ``%s'' is replaced with the serial port speed (in decimal)
- any appearance of escaped numbers
1through9(%1'' through%9'') are replaced by the match to the correspondingCallIDPattern, if present - the
%'' character itself can be specified with%%''
If the VGettyArgs parameter isn't specified in the configuration file, or if the string value is null, then voice connections will be rejected. ๐ญ
Note that in addition to the specified command line arguments, the vgetty program is invoked with its standard input, output, and error descriptors directed to the controlling tty device.
WedgedCmdโ the command that gets invoked when a modem is deemed ``wedged''; peepwedged(8)for the whole saga. ๐ซ
โจ MODEM-ORIENTED CONFIGURATION PARAMETERS โจ
Okay bestie, this whole section is about the modem itself โ setting it up, running it, keeping it happy. ๐ Every command has to be written exactly the way it's supposed to hit the modem, no cap.
๐จ Heads up: this is a departure from previous versions of this software, which used to automatically prependATto every line of commands sent to the modem. So you gotta put your ownATin there now. She's grown up, she writes her own prefixes. ๐
When you need multi-line commands, wrap the whole thing in quote marks (") and drop a newline character \n wherever the lines should break. A whole example of a multi-line command string:
AT+FCQ=1\nAT+FBADMUL=20\nAT+FBADLIN=10
๐ฆ Command Escapes ๐ฆ
Command strings sent to the modem can also include command escapes, which force the host to do stuff like change the DTE-DCE communication rate, switch up the flow control scheme between host and modem, delay for a bit, flush input data, or wait for a specific response from the modem. Here's every escape code that gets interpreted:
<none>โ enable no flow control between DTE and DCE<xon>โ enable software flow control between DTE and DCE<rts>โ enable hardware flow control between DTE and DCE<2400>โ set the DCE-DTE baud rate to 2400 bps<4800>โ set the DCE-DTE baud rate to 4800 bps<9600>โ set the DCE-DTE baud rate to 9600 bps<19200>โ set the DCE-DTE baud rate to 19200 bps<38400>โ set the DCE-DTE baud rate to 38400 bps<57600>โ set the DCE-DTE baud rate to 57600 bps<76800>โ set the DCE-DTE baud rate to 76800 bps<115200>โ set the DCE-DTE baud rate to 115200 bps<delay:N>โ delay N x 10 ms on the host (0 <= N <= 255)<flush>โ flush any pending input data from the modem<waitfor:R>โ wait for the response R from the modem (more on this below)<play:filename>โ play the specified audio file (also more on this below)
The way commands to the left of an escape code work is that they get sent to the modem before the associated actions are carried out on the host. This lowkey matters a lot when you're changing baud rates, because the result code from a command might come back at the new baud rate. ๐ตโ๐ซ
Also beware: not all baud rates are supported by all systems and modems. The set of baud rates your host supports is usually listed in stty(1). Check it, bestie, don't guess.
๐ <waitfor:..> ๐
The <waitfor:..> escape lets you override the default behaviour, which is to just wait for an OK response to a command sent to the modem. The possible response codes are:
NOTHINGโ a null responseOKโ the default responseCONNECTโ ``CONNECT...''NOANSWERโ ``NO ANSWER...''NOCARRIERโ ``NO CARRIER...''NODIALTONEโ ``NO DIALTONE...''BUSYโ ``BUSY''OFFHOOKโ ``PHONE OFF-HOOK''RINGโ ``RING...''ERRORโ error status from modemVCONโ voice connection indicatorOTHERโ any unrecognized modem response
Like, for example, ATO\r<waitfor:CONNECT> would send ATO\r to the modem and then wait for a response with a leading CONNECT in it. And ATS99=2\r<delay:2><flush><waitfor:NOTHING> would send ATS99=2\r to the modem, delay 20 ms, flush any input from the modem, and then justโฆ continue. No waiting for any response. She's done. ๐
๐ธ <play:filename> ๐ธ
The <play:filename> escape plays a raw audio file with a voice modem. This is genuinely so useful โ say, to play a brief audio message after picking up the line but before answering. A configuration example might look like:
ModemRingResponse: "AT+FCLASS=8;H1\nAT+VSM=131\nAT+VLS=1\nAT+VTX\n<waitfor:CONNECT><play:/sounds/enter-extension.raw><waitfor:OK>AT+VTS=[933,,150]"
ModemAnswerCmd: "<delay:100>AT+FCLASS=1;A"
CallIDPattern: SHIELDED_DTMF
CallIDAnswerLength: 4
So in this example, using an IS-101 voice-compliant modem: a RING indication from the modem causes the modem to be placed in voice mode, sets ulaw audio compression, and โ via the connected phone line โ plays back the etc/play1.raw audio file, which may say, "After the tone enter a four-digit extension, then start the fax." Following the message, a tone is played. ๐ต
๐ ModemAnswerCmd ๐
The command to answer the phone. If possible, this command should generate a result string that identifies whether the incoming call is from a facsimile, voice, or data modem. Typically this auto-detection is configured ahead of time; e.g. for Class 2 modems with the ``AT+FAA=1'' command.
Here's how the result codes get interpreted by the facsimile server:
CONNECT FAXโ Default: Fax | Class 1:-| Class 2:-| Class2.0:--CONNECTโ Default: Data | Class 1: Unknown | Class 2:-| Class2.0:-NO ANSWERโ Default: No Answer | Class 1:-| Class 2:-| Class2.0:-NO CARRIERโ Default: No Carrier | Class 1:-| Class 2:-| Class2.0:-NO DIALTONEโ Default: No Dialtone | Class 1:-| Class 2:-| Class2.0:-ERRORโ Default: Error | Class 1:-| Class 2:-| Class2.0:-FAXโ Default: Fax | Class 1:-| Class 2:-| Class2.0:-DATAโ Default: Data | Class 1:-| Class 2:-| Class2.0:-+FCONโ Default:-| Class 1:-| Class 2: Fax | Class2.0: Fax+FCOโ Default:-| Class 1:-| Class 2: Fax | Class2.0: Fax+FDMโ Default:-| Class 1:-| Class 2: Data | Class2.0: Data+FHNG:โ Default:-| Class 1:-| Class 2: Error | Class2.0: ErrorVCONโ Default:-| Class 1:-| Class 2: Voice | Class2.0: Voice
Let me translate this table for you, bestie:
The Default''** column is the interpretation made for the result string in either class 1 or 2 โ *unless* it's explicitly overridden. The **Class 1'' column is result strings handled specially for modems operating in class 1. The Class 2''** column is special handling for modems operating in class 2. And the **Class 2.0'' column is special handling for modems operating in class 2.0. ๐
Unknown entries imply that interpretation is based on the way in which the call was answered; if answering is done for an explicit call type, that type is assumed, otherwise a Fax call is presumed. โจ
๐ ModemAnswerDataBeginCmd ๐
The command to send to the modem once a data connection has been established.
๐ ModemAnswerDataCmd ๐
The command to explicitly answer the phone for a data connection. This command must generate a result string that identifies the incoming call is from a data modem. If this parameter isn't specified, or it's null, then the value of ModemAnswerCmd is used instead. See also AdaptiveAnswer and AnswerRotary. ๐ซถ
๐ง ModemAnswerDialCmd ๐ง
The command to explicitly answer the phone for a dialed connection. This command must generate a result string that identifies the incoming call is from a facsimile modem. If this parameter isn't specified, or it's null, then the value of ModemAnswerCmd is used instead.
โญ ModemAnswerFaxBeginCmd โญ
The command to send to the modem once a facsimile connection has been established.
๐ ModemAnswerFaxCmd ๐
The command to explicitly answer the phone for a facsimile connection. This command must generate a result string that identifies the incoming call is from a facsimile modem. If this parameter isn't specified, or it's null, then the value of ModemAnswerCmd is used instead. See also AdaptiveAnswer and AnswerRotary.
๐ธ ModemAnswerVoiceBeginCmd ๐ธ
The command to send to the modem once a voice connection has been established.
๐ ModemAnswerVoiceCmd ๐
The command to explicitly answer the phone for a voice connection. This command must generate a result string that identifies the incoming call is for voice. If this parameter isn't specified, or it's null, then the value of ModemAnswerCmd is used instead. See also AdaptiveAnswer and AnswerRotary.
๐ ModemAnswerResponseTimeout ๐
The maximum time, in milliseconds, to wait for a response from the modem after sending ModemAnswerCmd. Pro tip (from the manpage, not from me): you may want to shorten this value when using the server-based adaptive answer strategy; see AdaptiveAnswer. ๐
๐ฆ ModemATCmdDelay ๐ฆ
A delay, in milliseconds, that should be performed before each ``AT'' command string is sent to the modem. Little breather. She needs a sec. ๐
โจ ModemBaudRateDelay โจ
The amount of time, in milliseconds, to pause after setting the baud rate on the serial line. This is only needed for hosts and modems (such as USRs) where setting the serial line parameters does not take effect immediately. Give her a minute to catch up. ๐
๐ ModemCommaPauseTimeCmd ๐
The command to set the time, in seconds, that the modem should pause when it encounters a ``,'' modifier in the dialing string.
๐ ModemDialCmd ๐
The command to place a phone call. The string is assumed to be suitable for use as a parameter to the sprintf(3S) function; so the %'' character should be escaped as %%''. ๐จ
The dial command must include a single ``%s'' where the number that is to be dialed gets substituted in. Facilities like tone or pulse dialing, outgoing prefixes to route through a PBX, and so on, should all be included in the dialing command string.
It's also important that, if possible, a trailing @'' symbol should be included โ that way the modem returns result codes that distinguish between **no answer** and **no carrier**. Using the @'' permits the server to reduce the probability that a wrong number is continually redialed. (Iconic anti-spam behaviour, honestly. ๐) If the modem doesn't support this facility, then it may be necessary to raise the number of retries done when a ``NO CARRIER'' result is returned.
โญ ModemDialResponseTimeout โญ
The maximum time to wait, in milliseconds, for a response from the modem after sending [the dial command โ the manpage itself drops a word right here, and honestly, relatable ๐ญ]. This value should be longer than the timeout programmed into the modem through the ModemWaitTimeCmd parameter. This additional server-based timeout is provided to guard against modems that can ``lock up'' when dialing the telephone. ๐
ModemDoPhaseCDebugโ bestie, this one is literally just "should we poke the modem for responses while image data is flying across the wire?" ๐ Normally the modem should not be producing any responses during Phase C data transmission, okay? But sometimes, in certain debugging scenarios (like, some Class 2.1 modems will straight-up show debugging info), it may be appropriate to query the modem for responses during the data transmission.ModemDTRDropDelayโ the time, in milliseconds, to pause between placing DTR OFF and DTR ON while resetting a modem. ๐ This value should be at least equal to the time-value of the analogous S-register, usuallyS25. Don't skimp on it, fr fr.ModemEchoOffCmdโ the command to disable echoing of commands sent to the modem. That's it, that's the whole vibe. โจModemFlowControlโ the type of flow control to use between DTE and DCE; one ofNONE,XONXOFFandRTSCTS. This value is used to select the string sent to the modem to initially establish DTE-DCE flow control; one ofModemNoFlowCmd,ModemSoftFlowCmd, andModemHardFlowCmd. The current flow control setting is also used to select the appropriate flow control command to send to the modem when the software switches to Class 1, 2, or 2.0; seeClass1HFLOCmd,Class1NFLOCmd,Class1SFLOCmd,Class2HFLOCmd,Class2NFLOCmd, andClass2SFLOCmd.
The server supports both software and hardware flow control for Class 1, Class 2, and Class 2.0 modems. Whether to use hardware or software flow control depends on the capabilities of the modem and the host hardware and operating system. Communication rates above 9600 baud often require that hardware flow control be used for reliable DTE-DCE communication. However, beware that many modems only support software flow control when sending or receiving facsimile. ๐ญ
Note that modems usually support software flow control even if they have no explicit AT-command to activate it; in this case it is switched on when the modem enters fax mode, having AT+FCLASS=... from DTE.
ModemFrameFillOrderโ the bit order to expect for received HDLC frames and to use when formulating HDLC frames to send. ๐ฆ This value may be eitherLSB2MSBwhen bits are ordered from least-significant-bit to most-significant-bit (as in the CCITT specification) orMSB2LSBwhen bits are ordered in the reverse direction.ModemHardFlowCmdโ the command to setup hardware (RTS/CTS) flow control between DTE and DCE. ๐ซถModemMinSpeedโ the minimum acceptable signalling rate for transmitting facsimile page data. Possible values are:2400,4800,7200,9600,12200, and14400. Pick your fighter. ๐ModemMfrQueryCmdโ the command to send to the modem to get the manufacturer identification string. If this parameter is not set, then it is initialized toAT+FMFR?for Class 2 modems, or toAT+FMI?for Class 2.0 modems, or toATI3for Class 1 modems. If the parameter begins with a!, then the remainder of the string is taken to be the identification string and no command is issued to the modem. iykyk ๐ModemModelQueryCmdโ the command to send to the modem to get the model identification string. If this parameter is not set, then it is initialized to toAT+FMDL?for Class 2 modems, or toAT+FMM?for Class 2.0 modems, or toATI0for Class 1 modems. If the parameter begins with a!, then the remainder of the string is taken to be the identification string and no command is issued to the modem. Same energy as above, just the model flavor. ๐ModemNoAutoAnswerCmdโ the command to stop the modem from automatically answering when the phone rings. No pickin' up, we're busy. ๐ModemNoAutoAnswerCmdDelayโ the time, in milliseconds, to pause after receiving theOKfollowingModemNoAutoAnswerCmdbefore any further commands are sent to the modem. All input from the modem is flushed after pausing.ModemNoFlowCmdโ the command to disable flow control between DTE and DCE.ModemOnHookCmdโ the command to place the phone "on hook" (i.e. hangup). ๐ Bye bestie!ModemPageDoneTimeoutโ the maximum time to wait, in milliseconds, for a response from the modem after sending a page of facsimile data (e.g. the time to wait for a response to a Class 2/2.0AT+FETcommand). โณModemPageStartTimeoutโ the maximum time to wait, in milliseconds, for an initial response from the modem when sending a page of facsimile data (e.g. the time to wait for a response to a Class 2/2.0AT+FDRcommand). The starting timeout, not the done one โ don't mix 'em up. โจModemRaiseATCommandsโ indicates whether or not all configuration AT commands for the modem should be raised to upper-case automatically. The standard is for all upper-case to be used in AT commands, and indeed, some rare modems have been known to malfunction with lower-case commands. ๐ However, sometimes an administrator may want to use lower-case commands in a rare condition such as to work around modem blacklisting of dialed numbers.ModemRateโ the baud rate to use for DCE-DTE communication. This value may be one of:115200,76800,57600,38400,19200,9600,4800,2400,1200. The default value is19200because many modems lock the rate at 19200 when sending or receiving facsimile. Note that not all values are supported by all operating systems and modems; consultstty(1)for the available rates on your system. ๐ฆModemReadyCmdsโ a string of commands to issue to the modem during reception initialization. This string is sent to the modem after the standard set of configuration commands required by the fax server. This is done, for example, to un-busy a DID line so that calls can come through. ๐ModemRecvFillOrderโ the bit order to expect for received facsimile data. This value may be eitherLSB2MSBwhen bits are ordered from least-significant-bit to most-significant-bit (as in the CCITT specification) orMSB2LSBwhen bits are ordered in the reverse direction. According to the various specifications all modems should return data inLSB2MSBorder. However most Class 2 modems (except maybe only Multitech) useMSB2LSBfor compatibility with modems that were built with Rockwell hardware/firmware that included a bug that was too widespread to correct. ๐ญ
If this parameter is not set, then it is autodetected and set to LSB2MSB for Class 1 and Class 2.0 modems and MSB2LSB for non-Multitech Class 2 modems. However this may be wrong for your modem, so you will have to specify this parameter explicitly. No cap.
ModemRecvSuccessCmdโ a string of commands to issue to the modem after a successful receive session before the call is disconnected. ๐ธModemResetCmdsโ a string of commands to issue to the modem during initialization. This string is sent to the modem before the standard set of configuration commands required by the fax server. Note that these commands should not include normal reset commands that are specified through other parameters. For example, commands to setup flow control, DCD handling, DTR handling, etc. should be specified through the appropriate configuration parameters and not through this parameter. In addition the soft reset command (usuallyATZ) should not be included in this string; the servers issue this command explicitly. ๐ โโ๏ธModemResetDelayโ the time, in milliseconds, to pause after setting DTR ON, while resetting a modem. DTR ON does not respond withOK, so this parameter should be long enough to allow the modem time to be ready forModemSoftResetCmdsuccessively. โณModemResultCodesCmdโ the command to enable result codes. Yep, that's the whole thing. โจModemRevQueryCmdโ the command to send to the modem to get a firmware revision identification string. If this parameter is not set, then it is initialized toAT+FREV?for Class 2 modems, or toAT+FMR?for Class 2.0 modems. If the parameter begins with a!, then the remainder of the string is taken to be the identification string and no command is issued to the modem. Same!trick, different query. ๐ModemSendBeginCmdโ the command to send to the modem upon establishing carrier during a transmit operation. This parameter is useful for systems that are incapable of enabling hardware flow control without DCD asserted. ๐ซถModemSendFillOrderโ the bit order the modem expects for transmitted facsimile data. This value may be eitherLSB2MSBorMSB2LSB(see alsoModemRecvFillOrderabove.) Virtually all modems expect transmitted facsimile data inLSB2MSBbit order. ๐ModemSetVolumeCmdโ the commands to use to set the modem speaker volume levels. There should be five whitespace-separated commands, one each for setting the volume to "Off", "Quiet", "Low", "Medium", and "High"; the default is"ATM0 ATL0M1 ATL1M1 ATL2M1 ATL3M1". See alsoSpeakerVolume. ๐ModemSetupAACmdโ the command to setup adaptive answer support in the modem-if available. Adaptive answer is the term used for the ability to distinguish between calls from facsimile, voice, and data sources. Note that this string is the last command issued by the device drivers during setup, so the command string may, if necessary, switch to a different operating mode (e.g. on some Rockwell-based modems it is necessary to issue theAT+FAA=1command in Class 0). ๐ModemSetupDCDCmdโ the command to setup DCD handling. On most systems the facsimile server will enable theCLOCALflag on the tty device to which the modem is connected. This should insure that the system does not close an open file descriptor associated with the modem if carrier is dropped. Thus, for most systems and modemsModemSetupDCDCmdshould setup DCD to reflect carrier. ๐ModemSetupDTRCmdโ the command to setup DTR handling so that the modem is reset when the DTR signal is lowered by the host. The facsimile server uses this facility to insure that modems are not left in a "locked up" state. ๐ฅModemSoftFlowCmdโ the command to setup software (XON/XOFF) flow control between DTE and DCE. ๐ธModemSoftResetCmdโ the command to force a soft reset of the modem. ๐
๐
ModemSoftResetCmdDelay
The time, in milliseconds, to pause after you get the OK back from ModemSoftResetCmd before any further commands get sent to the modem. Like, let it breathe for a sec. ๐
๐ฆ ModemSoftRTFCC
Whether or not to enable software-driven Real-Time Fax Compression Conversion. RTFCC lets HylaFAX convert the image compression between MH, MR and MMR formats, no matter how faxq formatted the image file in the first place. Iconic, honestly.
Heads up though: when you're using RTFCC, the compression format of the file is ignored. So the-1,-2, and-3options forsendfax,ps2fax, and others only influence how the document is prepared byfaxqโ they do not influence the actual negotiated session parameters. Not a single one. ๐
And Class2RTFCC takes precedence over ModemSoftRTFCC. So if both are enabled, software-driven RTFCC does not get performed, because firmware-driven RTFCC is the main character here. ๐
๐ ModemType
This parameter must be set to one of: Class2, Class2.0, or Class1 โ which tells the server your modem is a Class 2-, Class 2.0-, or Class 1-style modem, respectively. If you don't set it, it gets autodetected and the highest supported fax class is used. Slay, autodetection. โจ
๐ธ ModemVerboseResultsCmd
The command to enable verbose result codes, as opposed to numeric ones.
๐ ModemWaitForConnect
If enabled, the facsimile server will not consider a connection established when answering an incoming call until it receives a CONNECT status string. This is mainly useful for Rockwell RC32ACL-based modems, which send FAX and DATA status messages before they send CONNECT. Rude of them, lowkey. ๐ญ
ModemWaitTimeCmd
The command to set the number of seconds to wait for a carrier signal when placing a call or answering the phone.
๐ฅ T.30 PROTOCOL CONFIGURATION PARAMETERS ๐ฅ
Okay bestie, these next ones apply to the implementation of the CCITT T.30 facsimile protocol in the Class 1 device driver. They should not be changed without a full understanding of the operation of the server. I am so serious. ๐ซถ
FaxT1Timer
The value of the T1 timer, in milliseconds. This timer is used to time out the initial session contact; i.e. receipt of DIS/DCS.
FaxT2Timer
The value of the T2 timer, in milliseconds. This timer is used to time out receiving responses and commands.
FaxT4Timer
The value of the T4 timer, in milliseconds. This timer is used to time out the reception of HDLC frames and, usually, trigger frame retransmissions.
๐ CLASS 1 MODEM CONFIGURATION PARAMETERS ๐
The following parameters are specific to the configuration of Class 1-style modems; they should not be changed lightly. Consider yourself warned, gorgeous. ๐
Class1Cmd
The command to set the modem into Class 1 operation.
Class1AdaptRecvCmd
The command used to enable adaptive reception support (usually AT+FAR=1). This feature is new in T.31, and many modems will not support it. It may reduce the number of reception failures caused by errors cascading from +FCERROR messages. New tech, who dis. โจ
Class1ColorJPEGSupport
Whether or not to enable support for T.30-E full-color facsimile with JPEG compression. Enabling this automatically enables Class1GreyJPEGSupport. Package deal, babes. ๐
Class1EnableV34Cmd
The command to enable V.34-fax support with at least the desired maximum primary channel rate.
Class1ECMSupport
Whether or not to support the T.30-A error correction protocol. Heads up: using ECM will require 64 kilobytes of free memory per modem in active use. Budget accordingly. ๐งฎ
Class1PersistentECM
Whether or not to continue to retransmit and allow one to continue to receive image data in ECM protocol which is not accepted as valid after four successive attempts. Determined queen energy. ๐
Class1ECMFrameSize
The size in bytes of image frames to transmit during ECM protocol. This setting will also indicate a preference in receive sessions. The only acceptable values are 64 and 256. A setting of 64 may be useful on high-load systems and possibly environments with extremely poor line quality. Choose wisely. ๐ฆ
Class1ExtendedRes
Whether or not to support resolutions other than normal and fine. This option has been deprecated by Class1Resolutions. It's giving legacy. ๐
Class1FrameOverhead
The number of extraneous bytes in HDLC frames sent to the host in response to an AT+FRH command. For modems that properly implement the Class 1 interface, this number should be 4 (the default).
Class1GreyJPEGSupport
Whether or not to enable support for T.30-E greyscale facsimile with JPEG compression. This is always enabled if Class1ColorJPEGSupport is enabled.
Class1HookSensitivity
The number of times to ignore on-hook detections and merely treat them as command or modem errors. We love a generous queen. ๐
Class1JBIGSupport
Whether or not to enable support for T.85 monochrome facsimile with JBIG compression. Your options are:
trueโ support in both sending and receivingfalseโ no supportsendโ support only in sendingreceiveโ support only in receiving
If, during the build process, a compatible JBIG library was found, then send support is enabled by default. If, during the build process, the TIFF tools are found to support JBIG, then receive support is enabled by default. Build-time fate, bestie. ๐ฎ
Class1HasRHConnectBug
A Class 1 modem should only report CONNECT after AT+FRH=3 when V.21 HDLC data is detected. However, some modems will incorrectly report CONNECT after AT+FRH=3 whenever any carrier is present. In such cases Class1HasRHConnectBug should be set to true. Not me calling out specific modems. ๐
Class1HFLOCmd
The command to setup hardware (RTS/CTS) flow control between DTE and DCE when operating in Class 1. This command is issued immediately after sending the Class1Cmd to switch the modem to Class 1 operation.
Class1MRSupport
Whether or not to enable support for two-dimensional Modified Read (MR) image data format compression.
Class1MMRSupport
Whether or not to enable support for two-dimensional Modified Modified Read (MMR) image data format compression. Note that MMR support also requires ECM support to be enabled. They're a duo, you can't split them. ๐ซถ
Class1NFLOCmd
The command to setup no flow control between DTE and DCE when operating in Class 1. This command is issued immediately after sending the Class1Cmd to switch the modem to Class 1 operation.
Class1PageLengthSupport
The coded value for page lengths supported by the modem. The only correct values and meanings are these:
1โ A4 page length3โ both A4 and B4 page length7โ unlimited page length
Class1PageWidthSupport
The coded value for page widths supported by the modem. The only correct values and meanings are these:
1โ A4 page width3โ both A4 and B4 page width7โ all of A4, B4, and A3 page widths
Class1PPMWaitCmd
The command used to stop and wait before sending the post page message, except before sending EOP, when Class1EOPWaitCmd is used instead. We must ensure that the high-speed carrier has stopped completely. According to T.30, Chapter 5, Note 4, this delay should be 75 +/- 20 ms. Precision, bestie. โฑ๏ธ
Class1ResponseWaitCmd
The command used to stop and wait after sending TCF, before attempting to receive a training response from the remote. Set this to AT+FRS=1 if you experience DIS/DTC received 3 times errors. Been there. ๐ญ
Class1Resolutions
A bitmapped (bit-or'd) value indicating the resolutions to be supported during facsimile operation. Individual resolutions follow Table 21/T.32 and are defined as follows:
- Bit
0(0x00) โ R8 x 3.85 l/mm, Normal - Bit
1(0x01) โ R8 x 7.7 l/mm, Fine - Bit
2(0x02) โ R8 x 15.4 l/mm, Superfine - Bit
4(0x04) โ R16 x 15.4 l/mm, Hyperfine - Bit
8(0x08) โ 200 dpi x 100 l/inch - Bit
16(0x10) โ 200 dpi x 200 l/inch - Bit
32(0x20) โ 200 dpi x 400 l/inch - Bit
64(0x40) โ 300 dpi x 300 l/inch
Thus, a value of 3 would indicate support for normal, fine, and superfine resolutions. Math queen. ๐งฎโจ
Class1RMQueryCmd
The command to send to the modem to get the list of supported reception bit-rates. If the parameter begins with a !, then the remainder of the string is taken to be the modem response and no command is issued to the modem. Sneaky shortcut, iykyk. ๐
Class1TCFWaitCmd
The command used to stop and wait before sending TCF, similar to Class1PPMWaitCmd. According to T.30, Chapter 5, Note 3, this delay should be 75 +/- 20 ms.
Class1TMQueryCmd
The command to send to the modem to get the list of supported transmission bit-rates. If the parameter begins with a !, then the remainder of the string is taken to be the modem response and no command is issued to the modem. Same trick, different direction. ๐
Class1EOPWaitCmd
The command used to stop and wait before sending the post page message, similar to Class1PPMWaitCmd. We allow a different setting in the case of EOP, however, because empirically some machines may need more time. Give them a minute, they're doing their best. ๐
Class1ModemHasDLEBug
Used to indicate that the modem does not correctly duplicate DLE characters in the V.21 communication to the DTE. It's not a bug, it's a feature, apparently. ๐
Class1MsgRecvHackCmd
If receive failures occur due to +FCERROR just prior to image data reception, setting Class1MsgRecvHackCmd to AT+FRS=1 may help. The name literally says hack, bestie, use it as one. ๐ฉน
Class1RecvAbortOK
The time, in milliseconds, to wait for an OK result code from the modem after aborting an HDLC frame receive (AT+FRH=3). If this number is zero, then the modem is assumed to not correctly implement aborting and instead the driver will wait 200ms, flush any input, and then send AT\n and wait 100ms for an OK result. Plan B activated. ๐
Class1RecvIdentTimer
The time, in milliseconds, to wait for an initial DCS when receiving a facsimile. CCITT recommendation T.30 specifies this as the value of the T1 timer. However, adaptive answering schemes such as that described above under the AdaptiveAnswer parameter may require that this timer be shortened. Adapt, queen. ๐ฆ
Class1RMPersistenceโ this one's the number of times we should attempt to receive the high-speed data carrier and get hit with+FCERRORbefore we give up and try the low-speed message carrier reception instead. Some modems are quick to (maybe incorrectly ๐ฌ) return+FCERROR, and for those little drama queens you want a value of2or3. For modems that aren't quick to return+FCERROR, use1. Tuning this properly can serve as a kind of "adaptive reception control" for modems that accurately return+FCERRORwithout supportingClass1AdaptRecvCmd. And for modems that do supportClass1AdaptRecvCmd,Class1RMPersistenceshould probably not be set at1, though+FCERRORshould almost never occur with such modems anyway.
If the modem doesn't support the reporting of +FCERROR or adaptive reception control, then Class1RMPersistence should probably be set at 0, which causes the timeout looking for the high-speed data carrier to be shortened, thus increasing the likelihood of recovery from any dissynchronization. When Class1RMPersistence is other than 0 it is assumed that the +FCERROR reporting or Class1AdaptRecvCmd is functional, and therefore the timeout looking for the high-speed data carrier is lengthened.
Class1SwitchingCmdโ the command we use to make sure the sending facsimile device has turned off its modulator (aka loss-of-carrier), exactly as recommended by T.31: Appendix II.1. โจClass1SFLOCmdโ the command to set up software (XON/XOFF) flow control between DTE and DCE when we're operating in Class 1. It gets issued immediately after sending theClass1Cmdto switch the modem into Class 1 operation.Class1TCFMaxNonZeroโ the maximum percentage of non-zero data bytes permitted in an acceptable received TCF. Heads up bestie: this number does not include any leading non-zero data in the received data. See alsoClass1TCFMinRun.Class1TCFMinRunโ the duration, in milliseconds, of the minimum run of zero data in an acceptable received TCF. This value should be specified according to a 1.5 second transmission of zero data (so like, it should be between0and1500). See alsoClass1TCFMaxNonZeroandClass1TCFMinRunECMMod.Class1TCFMinRunECMModโ the factor by whichClass1TCFMinRunshould be modified in the case of an ECM session. Since ECM protocol allows retransmissions, it's commonly faster to accept a lesser-quality data stream and the subsequent retransmissions than it is to let the communication speed slow down (where the demodulation may still not produce an ideal data stream anyway, so like, why bother ๐ ).Class1TCFRecvHackCmdโ if receive failures keep happening because of+FCERRORjust prior to TCF data reception, settingClass1TCFRecvHackCmdtoAT+FRS=1may help. ๐ฉนClass1TCFRecvTimeoutโ the maximum time to wait, in milliseconds, for the first byte, and again for the entirety of the Training Check (TCF) message data that's received during the training phase of the facsimile reception protocol.Class1TMConnectDelayโ the time, in milliseconds, to delay after receivingCONNECTfollowing+FTMbefore sending image data. T.31 8.3.3 requires the modem to respond withCONNECTbefore the modulation training pattern. If transmission begins before the remote has successfully completed its own modulation training pattern, then data โ especially during TCF โ could be lost. Many modems do not follow T.31 in this regard, and thus the default iszero; however its use with such modems would likely have a negligible effect.Class1ValidateV21Framesโ whether or not to use the FCS bits of received V.21 HDLC frames to check the validity of the frame itself. Most Class 1 modems perform this check independently (per T.31 7.4) and do not require this feature to be enabled. ๐
๐ CLASS 2 AND 2.0 MODEM CONFIGURATION PARAMETERS ๐
The following parameters are specific to the configuration of Class 2- and Class 2.0-style modems, and honestly? They're a whole vibe of their own:
Class2Cmdโ the command to set the modem into Class 2/2.0 operation.Class2AbortCmdโ the command to use to abort an established session. After using this command to abort a session, the fax software will sendModemOnHookCmdand then reset the modem by dropping DTR.Class2APCmdโ a largely unused option for modems supporting ITU-T.32, Class 2.1, standards. This command would be used to enable sending and receiving SUB, SEP, and PWD frames.Class2APQueryCmdโ a largely unused option for modems supporting ITU-T.32, Class 2.1, standards. This command would be used to query the capabilities of sending and receiving SUB, SEP, and PWD frames. The valuenonemay be used if the modem does not support anyClass2APQueryCmd.Class2BORCmdโ the command to set up the bit order of sent and received facsimile data. Usually the commandAT+FBOR=0is used so that data is sent and received in direct bit order (LSB2MSB). Some modems, such as the Everex 24/96D, must use reversed bit order for Phase B and D data exchanges to avoid a bug that results in garbage data being placed in the padding of EOL codes. ๐๏ธ The bit order specified by this command must correspond to the settings of theModemSendFillOrderandModemRecvFillOrderparameters.Class2BUGCmdโ the command to use to enable or disable the tracing of HDLC frames sent and received by the modem. This tracing information should be returned to the host in+FHR:and+FHT:status strings. Note that many Class 2 modems do not support this facility, which is largely used for diagnostic purposes. The valuenonemay be used if the modem does not support anyClass2BUGCmd.Class2CIGCmdโ the command used to set a polling identifier. This string is inserted into the format%s="<id>".Class2CQCmdโ the command to use to set up parameters for copy quality checking. For example, for an Everex 24/96D modem this parameter might be set toAT+FCQ=1\nAT+FBADMUL=20\nAT+FBADLIN=10.Class2CQCmdshould be configured to set up all available copy quality services available perClass2CQQueryCmd. To disable features that are available, configureClass2CQQueryCmdwith a!, and then setClass2CQCmdaccordingly.Class2CQQueryCmdโ the command to send to the modem to get the copy quality capabilities string. If the parameter begins with a!, then the remainder of the string is taken to be the capabilities string and no command is issued to the modem; this can be used together with theClass2CQCmdto force copy quality checking to be done in the server instead of in the modem. See alsoPercentGoodLinesandMaxConsecutiveBadLinesfor parameters used to do server copy quality checking. If copy quality checking is configured to be done by the modem then it is not done by the server.Class2CRCmdโ the command to use to enable the reception of facsimile.Class2DCCCmdโ the command used to set modem capabilities. This string is inserted into the format%s=vr,br,wd,ln,df,ec,bf,st.Class2DCCQueryCmdโ the command to send to the modem to get the Class 2/2.0 capabilities. If the parameter begins with a!, then the remainder of the string is taken to be the capabilities string and no command is issued to the modem.Class2DDISCmdโ the command to set session parameters before dialing. This string is inserted into the format%s=vr,br,wd,ln,df,ec,bf,st. Setting this parameter enables support for Class 2 modems that do not properly implement theAT+FDIScommand by setting up session parameters before dialing the telephone.Class2DISCmdโ the command used to set the current session parameters. This string is inserted into the format%s=vr,br,wd,ln,df,ec,bf,st.Class2ECMTypeโ the interpretation of the EC parameter in the modem DCC response varies between the Class 2,2, and Class 2.0,2.0, specifications. This configuration parameter allows the administrator to specify which type to use. The corresponding specification type is used by default.Class2HexNSFโ whether or not to parse the NSF strings reported by the modem using hexadecimal values. By default, they are parsed as hexadecimal values.Class2HFLOCmdโ the command to set up hardware (RTS/CTS) flow control between DTE and DCE when operating in Class 2/2.0. This command is issued immediately after sending theClass2Cmdto switch the modem to Class 2/2.0 operation. For Class 2.0 operation the default isAT+FLO=2.Class2JPEGSupportโ whether or not to enable and utilize the JPEG support found in the modem. ๐ธClass2LIDCmdโ the command used to set the local identifier string. This string is inserted into the format%s="<id>"Class2MINSPCmdโ the command used to set the minimum acceptable speed to be negotiated for transmitting page data. This string is inserted into the format%s=<speed>Class2NFLOCmdโ the command to set up no flow control between DTE and DCE when operating in Class 2/2.0. This command is issued immediately after sending theClass2Cmdto switch the modem to Class 2 operation. For Class 2.0 operation the default isAT+FLO=0.Class2NRCmdโ (Class 2.0 only) the command to set up negotiation message reporting. For the correct operation of the Class 2.0 driver this command must enable the reporting of: receiver parameters, transmitter parameters, and ID strings. It is not necessary to enable reporting of non-standard frames for correct operation of the Class 2.0 driver.Class2PACmdโ a largely unused option for modems supporting ITU-T.32, Class 2.1, standards. This command would be used to set up the polling address string enabled by theClass2APCmd.Class2PHCTOCmdโ the command that sets the Phase C timeout parameter (in seconds). If your modem doesnโt support anyClass2PHCTOCmd, you can literally usenone. ๐Class2PIECmdโ (Class 2.0 only) the command that controls procedure interrupt handling. And bestie, procedure interrupts should be disabled because HylaFAX does not provide a mechanism for dispatching procedure interrupts to an administrator. Keep that energy off. ๐Class2PTSCmdโ the command that sets the received page status code. When copy quality checking happens in the host, this command may be used to control the post-page response delivered to the sender. Beware: some modems do not properly implement this command, and in that case the server should be configured to not do copy quality check: see thePercentGoodLinesandMaxConsecutiveBadLinesparameters to understand how to defeat copy quality checking. ๐Class2PTSQueryCmdโ the command that queries the received page status code. This command may be used to determine the post-page response returned from the receiver. Beware: some modems do not properly implement this command, in which case this setting should be set tonone. ๐Class2PWCmdโ a largely unused option for modems supporting ITU-T.32, Class 2.1, standards. This command would be used to set up the password string enabled byClass2APCmd. Itโs giving niche. ๐ฆClass2RecvDataTriggerโ the character to send to the modem to trigger the transmission of received data from the modem to the host. This character is specified to be DC1 (octal 21) in the draft specification 2388-A and DC2 (octal 22) in the 2388-B specification. Most Class 2 modems accept DC1 or both DC1 and DC2. Some modems, however, only accept DC2. Note that string parameters may use C-style escape sequences, so DC2, for example, would be specified as"\022". Type it carefully, bestie. ๐ญClass2RELCmdโ the command to use to enable the delivery of byte-aligned EOL codes in received facsimile. If this parameter is defined, then received facsimile data will be marked to indicate that EOL codes are byte-aligned; otherwise they will be marked as not (necessarily) having byte-aligned codes. ๐Class2RTFCCโ whether or not to enable MultiTechโs Real-Time Fax Compression Conversion, which is available in later firmware revisions for theMT5634ZBA-V92,MT5634ZPX-PCI-V92, and other models. RTFCC allows HylaFAX to convert the image compression between MH MR and MMR formats regardless of howfaxqformatted the image file. If RTFCC is available with your firmware, then the response toAT+FFC=?is non-zero. Note that when using RTFCC, the compression format of the file will be ignored, thus the-1,-2, and-3options forsendfax,ps2fax, and others will not influence the actual negotiated session parameters. No cap. ๐ฅClass2SACmdโ another largely unused option for modems supporting ITU-T.32, Class 2.1, standards. This command would be used to set up the destination subaddress string enabled byClass2APCmd. Very specific, very demure. ๐Class2SendRTCโ whether or not to append an explicitReturn To Control(RTC) signal to the page data when transmitting. The Class 2 and Class 2.0 specs (i.e. SP-2388-A and TIA/EIA-592) state that the modem will append RTC when it receives the post-page message command from the host; this parameter is provided in case the modem does not correctly implement this. ๐ซถClass2SFLOCmdโ the command to set up software (XON/XOFF) flow control between DTE and DCE when operating in Class 2/2.0. This command is issued immediately after sending theClass2Cmdto switch the modem to Class 2/2.0 operation. For Class 2.0 operation the default isAT+FLO=1. โจClass2SPLCmdโ the command to use to enable a polling request. The valuenonemay be used if the modem does not support anyClass2SPLCmd. ๐Class2TBCCmdโ the command to use to enable stream-mode communication between the host and modem. Again, the valuenonemay be used if the modem does not support anyClass2TBCCmd. ๐ฆClass2UseLineCountโ whether or not to use the line count reported to HylaFAX by the modem firmware decoder. Simple as that. ๐Class2UseHexโ whether or not to parse the capabilities strings reported by the modem using hexadecimal values. By default, they are parsed as decimal values. Flip it if you need hex energy. ๐Class2XmitWaitForXONโ whether or not to wait for an XON character from the modem before sending facsimile data to the modem for transmission. Note that this is only relevant for modems that conform to the Class 2 spec (i.e. SP-2388-A). The Class 2.0 specification states that the host may transmit data immediately upon receiving CONNECT and that no XON character will be sent to the host. So donโt wait if youโre 2.0, bestie. ๐
๐ธ PAGER-RELATED CONFIGURATION PARAMETERS ๐ธ
The following parameters are specific to the configuration and operation of the IXO/TAP and UCP support for sending pager messages and GSM SM. Parameters not used for UCP are marked with (IXO/TAP only).
PagerSetupCmdsโ the commands to send to a modem to prepare the modem for a call to a pager service provider. Typically these commands place direct the modem to communicate with the service provider at 300 bps using the V.21 protocol. Per-service provider command strings can be setup in the info database; seehylafax-info(5). ๐PagerMaxMsgLengthโ the maximum length for a pager text message. Messages longer than this number are truncated. Per-service provider message lengths can be setup in the info database; seehylafax-info(5). โ๏ธIXOServiceโ (IXO/TAP only) the service identification string transmitted as part of the IXO/TAP protocol. ๐ฆIXODeviceIDโ (IXO/TAP only) the terminal device identification string transmitted as part of the IXO/TAP protocol. ๐IXOMaxUnknownโ the maximum number of unrecognized messages that will be accepted at various stages of the IXO/TAP protocol before the sender will abort and hangup the phone. ๐IXOIDProbeโ (IXO/TAP only) the time, in seconds, between sending a\rduring the initial ID recognition sequence of the IXO/TAP protocol. โฑ๏ธIXOIDTimeoutโ (IXO/TAP only) the maximum time, in seconds, to wait for the initial ID response from the service provider. โณIXOLoginRetriesโ (IXO/TAP only) the maximum number of attempts to login to a service provider. ๐IXOLoginTimeoutโ (IXO/TAP only) the maximum time, in seconds, to wait to complete the login procedure. โIXOGATimeoutโ (IXO/TAP only) the maximum time, in seconds, to wait for a Go-Ahead message from the service provider. ๐ฆIXOXmitRetriesโ the maximum number of times to try sending a text message block in a single call. ๐จIXOXmitTimeoutโ the maximum time, in seconds, to try transmitting a text message block. โฒ๏ธIXOAckTimeoutโ (IXO/TAP only)integer 30 IXO: max time to wait for msg block ack (secs)The maximum time, in seconds, to wait for an acknowledgement to a transmitted message. โ
๐ง PROTOTYPE CONFIGURATION FILES ๐ง
Per-modem configuration files are typically derived from prototype files that have been created for known modems. These prototype files are kept in the config subdirectory and, by convention, have names that identify a brand or type of modem and the DTE-DCE flow control scheme the prototype files configures. The faxaddmodem(8) program that is used to configure a modem for use with HylaFAX selects a prototype configuration file using information retrieved from the modem and comments embedded in the prototype files. For Class 1 modems the product ID code returned by the command ATI0 and the response from the command ATI3 are used to select a prototype configuration file, while for Class 2 modems the manufacturer and model as returned by AT+FMFR? and AT+FMDL?, respectively, are used (or AT+FMI? and AT+FMM? for Class 2.0 modems).
A Class 1 prototype configuration file is identified for use by faxaddmodem by searching for a comment of the form:
# CONFIG:CLASS1:144:.*:RTSCTS: Manufacturer='AT&T' Model=Dataport
In this example 144 is the product ID code for an AT&T DataPort modem, .* is a regular expression matched against the result string returned by the ATI3 command, and RTSCTS indicates the modem is configured to use hardware flow control during fax operation. The remainder of the line is evaluated by sh(1) and used to specify the modemโs manufacturer and model (since Class 1 modems do not have standard commands to query this information).
Class 2 and 2.0 prototype configuration files match the string manufacturer-model-flowcontrol against a sh(1) glob pattern specified in the configuration file, where manufacturer and model are the strings returned by querying the modem and flowcontrol is either RTSCTS for hardware flow control or XONXOFF for software flow control. For example:
# CONFIG: CLASS2: ZyXEL*-RTSCTS
# CONFIG: CLASS2.0: USRobotics*-XONXOFF
are configuration comments that appear in the prototype file for a ZyXEL 1496E with Class 2 support, and for a US Robotics Courier modem with Class 2.0 firmware.
The faxaddmodem program merges server-specific configuration parameters into a prototype configuration according to comments placed in the prototype file. All lines between BEGIN-SERVER and END-SERVER comments are placed with the appropriate server configuration parameters. Note that this means modem-related configuration parameters must be placed outside this area of the file. ๐ซถ
๐ SEE ALSO ๐
Thatโs the whole page, bestie! This was HYLAFAX-CONFIG(5), dated $Date$ โ source: the HylaFAX manual. Now go forth and configure those modems like the icon you are. Periodt. ๐
โจ๐ซถ
๐ฆ where this page comes from
- debian bookworm: hylafax-server 3:6.0.7-5
- debian trixie: hylafax-server 3:6.0.7-11.1
- ubuntu noble: hylafax-server 3:6.0.7-7
- ubuntu questing: hylafax-server 3:6.0.7-13
- ubuntu resolute: hylafax-server 3:6.0.7-13build1
- ubuntu stonking: hylafax-server 3:6.0.7-13build1
- Copyright (c) 1990-1996 Sam Leffler
- Copyright (c) 1991-1996 Silicon Graphics, Inc
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms