HYLAFAX-CONFIG(5F)

๐Ÿ“ฆ
version 7.0.11 ยท 2 versions
, in alpine 3.24, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable

๐ŸŒธ NAME ๐ŸŒธ

config โ€” the HylaFAX configuration database, aka the master vibes file ๐Ÿ’–


โœจ DESCRIPTION โœจ

okay bestie, sit down, hydrate, because this is the blueprint ๐Ÿซถ

HylaFAX keeps a configuration file for the central queueing agent, and also one for every single facsimile modem attached to a machine. That's right, every modem gets its own little personality doc ๐Ÿ’…. These files hold all the info about the modems and about how the HylaFAX server processes that service those modem should operate.

All these files live in the etc subdirectory. No cap.

  • The configuration file for the faxq(8C) program is named config.
  • The per-modem configuration files, used by the faxgetty(8C), faxsend(8C), and pagesend(8C) programs, have names of the form config.devid, where devid is an identifier derived from the name of the modem's device file. For example, ttym2 for /dev/ttym2, and term_10 for /dev/term/10. ๐ŸŽ€

๐Ÿฆ‹ the format, because it's literally so simple ๐Ÿฆ‹

Configuration files have a simple format and are entirely ASCII. A configuration parameter is of the form:

tag: value

where a tag identifies a parameter and a value is either a string, a number, or a boolean value. Slay, that's it.

  • Comments are introduced by the # character and extend to the end of the line. so go ahead and annotate, queen โœ๏ธ
  • String values start at the first non-blank character after the : and continue to the first non-whitespace character โ€” or, if you want whitespace in there, you can enclose them in quote marks ("). String values wrapped in quote marks may also use the standard C programming conventions for specifying escape codes; e.g. \n for a newline character and \xxx for an octal value. iconic behavior honestly ๐ŸŒˆ
  • 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, such as RecvFileMode, whose value is interpreted strictly as an octal number, and PageChopThreshold, whose value is interpreted strictly as a floating point number. โš ๏ธ don't get caught lacking on those two, fr fr.
  • Boolean values are case insensitive. For a true value, either Yes or On should be used. For a false value, use No or Off. periodt ๐Ÿ’€
ngl the whole file is giving "just read the tags and chill" โ€” no fancy syntax, no drama, just tag, colon, value. iykyk ๐Ÿ’œ

okay so real talk: this table is the master list of every tag and what type of value it expects. First half = stuff specific to how each server operates. Second half = stuff about servicing the modem. And the footnote markers? They are not decoration, bestie:

  • ยน means the tag is used only by the HylaFAX scheduler process, so it should appear only in the file named config.
  • ยฒ means both the scheduler and the per-device applications use it, so it should appear in all appropriate configuration files โ€” like config and any per-device files that make sense.
  • No marker? Then it belongs only in per-device configuration files.

More detailed info about each item is coming after the table. For now, here's the whole lineup, no skips, no cap:

  • AdaptiveAnswer โ€” type boolean, default No โ€” enable adaptive answer of inbound calls
  • AdminGroup โ€” type string, default faxadmin โ€” System user group for administration (if PAM enabled)
  • AllowIgnoreModemBusyยน โ€” type boolean, default No โ€” honor job requests to ignore modem busy status
  • AnswerRotary โ€” type string, default Any โ€” alternatives for answering calls
  • AnswerBias โ€” type integer, default - โ€” bias to apply to successful rotary answer
  • AreaCodeยฒ โ€” type string, default - โ€” local area code
  • AuditHookยน โ€” type string, default - โ€” command to run for faxq event auditing
  • BadPageHandlingMethod โ€” type string, default RTN-SAVE โ€” bad page received handling method
  • BatchLogsยน โ€” type boolean, default Yes โ€” keep all session logs of a batch in a single log
  • CallIDAnswerLength โ€” type integer, default - โ€” answer call when CallIDPattern received
  • CallIDDisplay โ€” type boolean, default No โ€” display match in modem status
  • CallIDLabel โ€” type string, default - โ€” label to use in presentation of the match
  • CallIDPattern โ€” type string, default - โ€” call identification pattern string
  • CallIDRecord โ€” type boolean, default Yes โ€” record match in recvq image file
  • CallIDType โ€” type string, default - โ€” type identifier for the CallIDPattern match
  • CIDName โ€” 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 UID
  • ContCoverCmdยน โ€” type string, default bin/mkcover โ€” continuation cover page generation program
  • ContCoverPageยน โ€” type string, default - โ€” continuation cover page template filename
  • CountryCodeยฒ โ€” type string, default - โ€” local country code
  • DestControlsยน โ€” type obsolete, default - โ€” Obsoleted by JobControl
  • DeviceMode โ€” type octal, default 0600 โ€” protection mode to use for modem device
  • DialStringRulesยฒ โ€” type string, default - โ€” dial string rules file
  • DistinctiveRings โ€” type string, default - โ€” configuration for distinctive ring cadences
  • DRingOff โ€” type string, default - โ€” distinctive ring ``off'' cadence indicator
  • DRingOn โ€” type string, default - โ€” distinctive ring ``on'' cadence indicator
  • DynamicConfig โ€” type string, default - โ€” program for dynamic receive configuration
  • EGettyArgs โ€” type string, default - โ€” arguments passed to external getty program
  • FAXNumber โ€” type string, default - โ€” facsimile modem phone number
  • FaxRcvdCmd โ€” type string, default bin/faxrcvd โ€” notification program for received facsimile
  • GettyArgs โ€” type string, default - โ€” arguments passed to getty program
  • Includeยฒ โ€” type string, default - โ€” include another config file
  • InternationalPrefixยฒ โ€” type string, default - โ€” dialing prefix for international calls
  • JobControlCmdยน โ€” type string, default - โ€” job control command
  • JobReqBusy โ€” type integer, default 180 โ€” requeue interval for BUSY dial result
  • JobReqDataConn โ€” type integer, default 300 โ€” requeue interval for data connection dial result
  • JobReqNoAnswer โ€” type integer, default 300 โ€” requeue interval for NO ANSWER dial result
  • JobReqNoCarrier โ€” type integer, default 300 โ€” requeue interval for NO CARRIER dial result
  • JobReqNoFCon โ€” type integer, default 300 โ€” requeue interval for carrier without +FCON dial result
  • JobReqOtherยฒ โ€” type integer, default 300 โ€” requeue interval for ``other'' problems
  • JobReqProto โ€” type integer, default 60 โ€” requeue interval after fax protocol error
  • JobRetryBusy โ€” type integer, default - โ€” number of retries for BUSY dial result
  • JobRetryDataConn โ€” type integer, default - โ€” number of retries for data connection dial result
  • JobRetryNoAnswer โ€” type integer, default - โ€” number of retries for NO ANSWER dial result
  • JobRetryNoCarrier โ€” type integer, default 1 โ€” number of retries for NO CARRIER dial result
  • JobRetryNoFCon โ€” type integer, default - โ€” number of retries for carrier without +FCON dial result
  • JobRetryOther โ€” type integer, default - โ€” number of retries for ``other'' problems
  • LockDataCalls โ€” type boolean, default Yes โ€” lock modem for the duration of an inbound data call
  • LockVoiceCalls โ€” type boolean, default Yes โ€” lock modem for the duration of an inbound voice call
  • LogCalls โ€” type boolean, default Yes โ€” Log all incoming calls as CALL records in xferfaxlog
  • LogFacilityยฒ โ€” type string, default daemon โ€” syslog facility name for ServerTracing messages
  • LogFileMode โ€” type octal, default 0600 โ€” protection mode to use for session log files
  • LogRecv โ€” type boolean, default Yes โ€” Log received faxes as RECV records in xferfaxlog
  • LogSend โ€” type boolean, default Yes โ€” Log sent faxes as SEND records in xferfaxlog
  • LocalIdentifier โ€” type string, default - โ€” local station identification string
  • LongDistancePrefix โ€” type string, default - โ€” dialing prefix for long distance calls
  • MaxBatchJobsยน โ€” type integer, default 64 โ€” max jobs in a batch
  • MaxConcurrentCallsยน โ€” type integer, default 1 โ€” max concurrent jobs to process for a destination
  • MaxConcurrentPrepsยน โ€” type integer, default 1 โ€” maximum number of simultaneous job preparations
  • MaxConsecutiveBadLines โ€” type integer, default 5 โ€” max consecutive bad rows for OK page quality
  • MaxDialsยน โ€” type integer, default 12 โ€” max phone calls to make to transmit a job
  • MaxProxyJobsยน โ€” type integer, default 64 โ€” max number of concurrent proxy jobs
  • MaxRecvPages โ€” type integer, default unlimited โ€” max pages to permit in a receive
  • MaxSendPagesยน โ€” type integer, default unlimited โ€” max pages to permit in a send
  • MaxSetupAttempts โ€” type integer, default 2 โ€” max attempts to initialize a modem
  • MaxTraversalยน โ€” type integer, default 256 โ€” max traversal into queue for batching
  • MaxTriesยน โ€” type integer, default 3 โ€” max attempts to transmit a job
  • MinAcceptedLineCount โ€” type integer, default 10 โ€” min number of rows for OK page quality
  • MissedPageHandlingMethod โ€” type string, default RTN โ€” missed page received handling method
  • ModemGroupยน โ€” type string, default - โ€” define a name for a set of modems
  • ModemPriority โ€” type integer, default 255 โ€” scheduling priority for outbound jobs
  • ModemReadyState โ€” type string, default R โ€” ``ready state'' sent by faxgetty
  • ModemRingResponse โ€” type string, default - โ€” command to respond after hearing RING
  • ModemRingsBeforeResponse โ€” type integer, default 0 โ€” the number of rings before ModemRingResponse
  • NoAnswerVoice โ€” type boolean, default false โ€” disable the answering of voice-indicated calls
  • NoCarrierRetrys โ€” type integer, default - โ€” Deprecated - See JobRetryNoCarrier
  • NotifyCmdยน โ€” type string, default bin/notify โ€” user notification program
  • PageChopยน โ€” type string, default last โ€” control automatic truncation of trailing whitespace
  • PageChopThresholdยน โ€” type float, default 3.0 โ€” whitespace truncation threshold (inches)
  • PCL2FaxCmdยน โ€” type string, default bin/pcl2fax โ€” PCL RIP command script
  • PDF2FaxCmdยน โ€” type string, default bin/pdf2fax โ€” PDF RIP command script
  • PercentGoodLines โ€” type integer, default 95 โ€” percentage of good rows for OK page quality
  • PollLockPokeModem โ€” type boolean, default false โ€” check on modem every time the lock is polled
  • PollLockWaitยฒ โ€” 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 program for facsimile received by polling
  • PostScriptTimeoutยน โ€” type integer, default 180 โ€” timeout on POSTSCRIPT interpreter runs (secs)
  • PriorityScheduling โ€” type boolean, default see below โ€” use available priority job scheduling mechanism
  • PS2FaxCmdยน โ€” type string, default bin/ps2fax โ€” POSTSCRIPT RIP command script
  • QualifyCID โ€” type obsolete, default - โ€” See DynamicConfig and RejectCall for rejecting calls
  • QualifyPWD โ€” type string, default - โ€” file of PWD patterns for qualifying senders
  • QualifyTSI โ€” type string, default - โ€” file of TSI patterns for qualifying senders
  • RecvDataFormat โ€” type string, default adaptive โ€” format for received facsimile data
  • RecvFileMode โ€” type octal, default 0600 โ€” protection mode to use for received facsimile files
  • RejectCall โ€” type boolean, default false โ€” Reject the current call
  • RingData โ€” type string, default - โ€” distinctive ring data call identifier
  • RingExtended โ€” type string, default - โ€” extended ring message identifier
  • RingFax โ€” type string, default - โ€” distinctive ring fax call identifier
  • RingsBeforeAnswer โ€” type integer, default 0 โ€” rings to wait before answering phone
  • RingTimeout โ€” type integer, default 6000 โ€” timeout in ms after RING before reset
  • RingVoice โ€” type string, default - โ€” distinctive ring voice call identifier
  • RTNHandlingMethod โ€” type string, default Retransmit-Ignore โ€” RTN signal handling method
  • SaveUnconfirmedPages โ€” type boolean, default true โ€” save or delete unconfirmed pages

okay bestie, we're still deep in the config parameter section and there is no turning back ๐Ÿ’… every single one is here, no skips, no cap โœจ

  • SendFaxCmdยน โ€” string โ€” default bin/faxsend โ€” the fax transmit command script ๐Ÿ’–
  • SendPageCmdยน โ€” string โ€” default bin/pagesend โ€” the pager transmit command script โœจ
  • SendUUCPCmdยน โ€” string โ€” default bin/uucpsend โ€” the UUCP transmit command script ๐Ÿฆ‹
  • ServerTracingยฒ โ€” integer โ€” default 1 โ€” non-session server tracing, lowkey logging vibe ๐Ÿ‘‘
  • SessionTracingยฒ โ€” integer โ€” default 0xFFF โ€” send and receive session tracing, fr fr ๐Ÿ’œ
  • ShareCallFailuresยฒ โ€” string โ€” default none โ€” which call failures should be shared ๐Ÿ‘€
  • SpeakerVolume โ€” string โ€” default Quiet โ€” volume level for the modem speaker ๐Ÿ”‡
  • StaggerCallsยน โ€” integer โ€” default 0 โ€” time to delay between starting outbound calls โณ
  • TagLineFont โ€” string โ€” default - โ€” tag line font filename ๐ŸŽ€
  • TagLineFormat โ€” string โ€” default see below โ€” tag line format string โœจ
  • TagLineLocale โ€” string โ€” default see below โ€” tag line format locale ๐ŸŒ
  • TIFF2FaxCmdยฒ โ€” string โ€” default bin/tiff2fax โ€” TIFF converter command script ๐Ÿ–ผ๏ธ
  • TimeOfDayยน โ€” string โ€” default Any โ€” default time-of-day restrictions โฐ
  • TSIRecvdCmd โ€” string โ€” default - โ€” program executed after TSI receipt, and yes it can drop calls ๐Ÿ’€
  • Unblockยน โ€” string โ€” default - โ€” force faxq to unblock the specified destination ๐Ÿ”“
  • Use2Dยน โ€” boolean โ€” default Yes โ€” restrict or permit use of 2D-encoded fax data ๐ŸŒ€
  • UseJobTSI โ€” boolean โ€” default No โ€” use job-specified TSI instead of LocalIdentifier ๐Ÿ“ 
  • UseJobTagLine โ€” boolean โ€” default Yes โ€” allow use of job-specified Tagline instead of TagLineFormat ๐Ÿท๏ธ
  • UUCPLockModeยฒ โ€” octal โ€” default 0444 โ€” protection mode for UUCP lock files ๐Ÿ”’
  • UUCPLockDirยฒ โ€” string โ€” default see below โ€” UUCP lockfile directory ๐Ÿ“
  • UUCPLockTimeoutยฒ โ€” integer โ€” default 30 โ€” time before removing a stale UUCP lockfile โฑ๏ธ
  • UUCPLockTypeยฒ โ€” string โ€” default see below โ€” UUCP lockfile type ๐Ÿ”‘
  • VGettyArgs โ€” string โ€” default - โ€” arguments passed to the voice getty program ๐Ÿ—ฃ๏ธ
  • WedgedCmdยน โ€” string โ€” default bin/wedged โ€” program to run when the modem is wedged ๐Ÿ˜ต
  • ModemAnswerCmd โ€” string โ€” default ATA โ€” command for answering the phone ๐Ÿ“ž
  • ModemAnswerAgainCmd โ€” string โ€” default <delay:50>ATA โ€” command for answer recovery ๐Ÿ”
  • ModemAnswerDataBeginCmd โ€” string โ€” default - โ€” command for the start of an answered data call ๐Ÿ’พ
  • ModemAnswerDataCmd โ€” string โ€” default ATA โ€” command for answering a data call ๐Ÿ“ถ
  • ModemAnswerDialCmd โ€” string โ€” default ATA โ€” command for answering a dialed call ๐Ÿ“ฒ
  • ModemAnswerFaxBeginCmd โ€” string โ€” default - โ€” command for the start of an answered fax call ๐Ÿ“ 
  • ModemAnswerFaxCmd โ€” string โ€” default ATA โ€” command for answering a fax call ๐Ÿ–จ๏ธ
  • ModemAnswerResponseTimeout โ€” integer โ€” default 180000 โ€” answer command timeout in ms โณ
  • ModemAnswerVoiceBeginCmd โ€” string โ€” default - โ€” command for the start of an answered voice call ๐ŸŽ™๏ธ
  • ModemAnswerVoiceCmd โ€” string โ€” default ATA โ€” command for answering a voice call โ˜Ž๏ธ
  • ModemATCmdDelay โ€” integer โ€” default 0 โ€” delay before sending the modem an AT cmd, in ms โฒ๏ธ
  • ModemBaudRateDelay โ€” integer โ€” default 10 โ€” delay in ms after setting the baud rate ๐Ÿข
  • ModemCEDCmd โ€” string โ€” default ATA โ€” command to signal CED and start V.21 HDLC transmit ๐Ÿ“ก
  • ModemClassQueryCmd โ€” string โ€” default AT+FCLASS=? โ€” command for querying modem services ๐Ÿ”
  • ModemCNGCmd โ€” string โ€” default ATD โ€” command to signal CNG and listen for V.21 HDLC ๐Ÿ‘‚
  • ModemCommaPauseTimeCmd โ€” string โ€” default ATS8=2 โ€” command for setting time to pause for ``,'' in dialing string โธ๏ธ
  • ModemDialCmd โ€” string โ€” default ATDT%s โ€” command for dialing, where %s is the number to dial ๐Ÿ“ž
  • ModemDialResponseTimeout โ€” integer โ€” default 180000 โ€” dialing command timeout in ms โณ
  • ModemDoPhaseCDebug โ€” boolean โ€” default No โ€” query modem responses during Phase C transmit ๐Ÿ›
  • ModemDTRDropDelay โ€” integer โ€” default 75 โ€” delay in ms between DTR OFF and DTR ON โšก
  • ModemEchoOffCmd โ€” string โ€” default ATE0 โ€” command for disabling command echo ๐Ÿ”‡
  • ModemFlowControl โ€” string โ€” default XONXOFF โ€” DTE-DCE flow control scheme ๐ŸŒŠ
  • ModemFrameFillOrder โ€” string โ€” default LSB2MSB โ€” bit order for HDLC frames ๐Ÿงฌ
  • ModemHardFlowCmd โ€” string โ€” default - โ€” command for setting hardware flow control between DTE and DCE ๐Ÿ”ง
  • ModemMinSpeed โ€” string โ€” default 2400 โ€” minimum acceptable transmit speed ๐ŸŒ
  • ModemMfrQueryCmd โ€” string โ€” default - โ€” command for querying the modem manufacturer ๐Ÿญ
  • ModemModelQueryCmd โ€” string โ€” default - โ€” command for querying the modem model ๐Ÿ”Ž
  • ModemNoAutoAnswerCmd โ€” string โ€” default ATS0=0 โ€” command for disabling auto-answer ๐Ÿ™…
  • ModemNoAutoAnswerCmdDelay โ€” integer โ€” default 0 โ€” time in ms to pause after disabling auto-answer โธ๏ธ
  • ModemNoDialtoneRetries โ€” integer โ€” default 1 โ€” maximum number of attempts to get dialtone ๐Ÿ“ž
  • ModemNoFlowCmd โ€” string โ€” default - โ€” command for disabling hardware flow control between DTE and DCE ๐Ÿšซ
  • ModemOnHookCmd โ€” string โ€” default ATH0 โ€” command for placing the phone ``on hook'' ๐Ÿ“ด
  • ModemPageDoneTimeout โ€” integer โ€” default 180000 โ€” page send/receive timeout in ms โณ
  • ModemPageStartTimeout โ€” integer โ€” default 180000 โ€” page send/receive timeout in ms โณ
  • ModemRaiseATCommands โ€” boolean โ€” default Yes โ€” raise AT commands in configuration to upper-case ๐Ÿ” 
  • ModemRate โ€” integer โ€” default 19200 โ€” baud rate to use for DCE-DTE communication ๐Ÿ“ถ
  • ModemReadyCmds โ€” string โ€” default - โ€” additional final commands when resetting the modem ๐Ÿ”„
  • ModemRecvFillOrder โ€” string โ€” default see below โ€” bit order for received facsimile data ๐Ÿ“ฅ
  • ModemRecvSuccessCmd โ€” string โ€” default - โ€” command to send after a successful reception โœ…
  • ModemResetCmds โ€” string โ€” default - โ€” additional commands when resetting the modem ๐Ÿ”
  • ModemResetDelay โ€” integer โ€” default 2600 โ€” delay in ms after placing DTR ON โฒ๏ธ
  • ModemResultCodesCmd โ€” string โ€” default ATQ0 โ€” command for enabling result codes ๐Ÿ“‹
  • ModemRevQueryCmd โ€” string โ€” default see below โ€” command for querying modem firmware revision ๐Ÿ”ข
  • ModemSecondAnswerCmd โ€” string โ€” default - โ€” command to restart the answer process ๐Ÿ”„
  • ModemSendBeginCmd โ€” string โ€” default - โ€” command to send on establishing carrier ๐Ÿ“ก
  • ModemSendFillOrder โ€” string โ€” default LSB2MSB โ€” bit order for sending facsimile data ๐Ÿ“ค
  • ModemSetOriginCmd โ€” string โ€” default - โ€” command to set call origin information ๐ŸŒ
  • ModemSetVolumeCmd โ€” string โ€” default see below โ€” commands for setting modem speaker volume level ๐Ÿ”Š
  • ModemSetupAACmd โ€” string โ€” default - โ€” command for setting up adaptive answer ๐Ÿง 
  • ModemSetupDCDCmd โ€” string โ€” default - โ€” command for setting up DCD handling ๐Ÿ”Œ
  • ModemSetupDTRCmd โ€” string โ€” default - โ€” command for setting up DTR handling ๐Ÿ”Œ
  • ModemSoftFlowCmd โ€” string โ€” default - โ€” command for setting software flow control between DTE and DCE ๐ŸŒŠ
  • ModemSoftResetCmd โ€” string โ€” default ATZ โ€” command for doing a soft reset ๐Ÿ”„
  • ModemSoftResetCmdDelay โ€” integer โ€” default 3000 โ€” time in ms to pause after a soft reset โธ๏ธ
  • ModemSoftRTFCC โ€” boolean โ€” default Yes โ€” enable software-driven real-time fax compression conversion ๐Ÿ—œ๏ธ
  • ModemType โ€” string โ€” default see below โ€” modem type ๐Ÿ“ 
  • ModemVerboseResultsCmd โ€” string โ€” default ATV1 โ€” command for enabling verbose result codes ๐Ÿ—ฃ๏ธ
  • ModemWaitForConnect โ€” boolean โ€” default No โ€” force server to wait for ``CONNECT'' response on answer โณ
  • ModemWaitTimeCmd โ€” string โ€” default ATS7=60 โ€” command for setting time to wait for carrier when dialing ๐Ÿ“ž
  • FaxT1Timer โ€” integer โ€” default 35000 โ€” CCITT T.30 T1 timer in ms โฑ๏ธ
  • FaxT2Timer โ€” integer โ€” default 7000 โ€” CCITT T.30 T2 timer in ms โฑ๏ธ
  • FaxT4Timer โ€” integer โ€” default 3100 โ€” CCITT T.30 T4 timer in ms โฑ๏ธ
  • Class0Cmd โ€” string โ€” default AT+FCLASS=0 โ€” Class 0: command to enter class 0 ๐ŸŒ€
  • Class1Cmd โ€” string โ€” default AT+FCLASS=1 โ€” Class 1: command to enter class 1 1๏ธโƒฃ
  • Class1Cmd โ€” string โ€” default AT+FCLASS=1.0 โ€” Class 1.0: command to enter class 1 ๐Ÿ’ซ (yes, same name again, it's giving duplicate but we don't make the rules ๐Ÿ’€)
  • Class1AdaptRecvCmd โ€” string โ€” default - โ€” Class 1/1.0: command for adaptive reception support ๐Ÿง 
  • Class10AutoFallback โ€” boolean โ€” default Yes โ€” Class 1.0: modem implements G3 fallback ๐Ÿ”™
  • Class1ColorJPEGSupport โ€” boolean โ€” default No โ€” Class 1/1.0: to enable color JPEG fax support ๐ŸŒˆ
  • Class1EnableV34Cmd โ€” string โ€” default - โ€” Class 1/1.0: command to enable V.34-fax support ๐Ÿš€
  • Class1ECMCheckFrameLength โ€” boolean โ€” default No โ€” Class 1/1.0: require complete ECM frame lengths ๐Ÿ“
  • Class1ECMSupport โ€” boolean โ€” default Yes โ€” Class 1/1.0: enable T.30-A ECM support ๐Ÿ› ๏ธ
  • Class1PersistentECM โ€” boolean โ€” default Yes โ€” Class 1/1.0: to continue to correct while in ECM ๐Ÿ”
  • Class1ECMFrameSize โ€” integer โ€” default 256 โ€” Class 1/1.0: image frame size in ECM protocol ๐Ÿ“ฆ
  • Class1ExtendedRes โ€” boolean โ€” default - โ€” Class 1/1.0: enable extended resolution support ๐Ÿ–ผ๏ธ
  • Class1ExpectedPageSize โ€” integer โ€” default 100000 โ€” Class 1/1.0: expected page size in bytes ๐Ÿ“„
  • Class1HasRHConnectBug โ€” boolean โ€” default No โ€” Class 1/1.0: modem can report CONNECT incorrectly ๐Ÿ›
  • Class1HasRMHookIndication โ€” boolean โ€” default Yes โ€” Class 1/1.0: modem reports ERROR correctly โœ…
  • Class1HFLOCmd โ€” string โ€” default - โ€” Class 1/1.0: command to set hardware flow control ๐Ÿ”ง
  • Class1FrameOverhead โ€” integer โ€” default 4 โ€” Class 1/1.0: extra bytes in a received HDLC frame ๐Ÿงฉ
  • Class1FRHNeedsReset โ€” boolean โ€” default No โ€” Class1/1.0: +FRH=3 command needs resetting sometimes ๐Ÿ”„
  • Class1FullDuplexTrainingSync โ€” boolean โ€” default No โ€” Class 1/1.0: to enable full-duplex during training sync ๐Ÿ”„
  • Class1GreyJPEGSupport โ€” boolean โ€” default No โ€” Class 1/1.0: to enable grey JPEG fax support ๐ŸŒซ๏ธ
  • Class1HookSensitivity โ€” integer โ€” default 0 โ€” Class 1/1.0: times to ignore on-hook detection ๐Ÿ™‰
  • Class1JBIGSupport โ€” string โ€” default see below โ€” Class 1/1.0: to enable monochrome JBIG fax support โšซ
  • Class1MRSupport โ€” boolean โ€” default Yes โ€” Class 1/1.0: enable 2-D MR support ๐Ÿงฌ
  • Class1MMRSupport โ€” boolean โ€” default Yes โ€” Class 1/1.0: enable 2-D MMR support ๐Ÿงฌ
  • Class1NFLOCmd โ€” string โ€” default - โ€” Class 1/1.0: command to set no flow control ๐Ÿšซ
  • Class1PageLengthSupport โ€” integer โ€” default 7 โ€” Class 1/1.0: coded value for modem page length support ๐Ÿ“
  • Class1PageWidthSupport โ€” integer โ€” default 7 โ€” Class 1/1.0: coded value for modem page width support ๐Ÿ“
  • Class1RecvAbortOK โ€” integer โ€” default 200 โ€” Class 1/1.0: max wait in ms for ``OK'' after recv abort โณ
  • Class1RecvIdentTimer โ€” type integer, default 40000 โ€” Class 1/1.0: this is literally the max wait in ms for the initial ident frame, so give it a sec bestie โณโœจ
  • Class1RestrictPoorDestinationsยน โ€” type integer, default 0 โ€” Class 1/1.0: restrict features for destinations with poor quality, no cap ๐Ÿšซ๐Ÿ’…
  • Class1RestrictPoorSenders โ€” type integer, default 0 โ€” Class 1/1.0: restrict features for senders with poor quality, fr fr ๐Ÿ“ต
  • Class1RMPersistence โ€” type integer, default 2 โ€” Class 1/1.0: how many times to attempt high-speed carrier recv, the way it just keeps trying ๐Ÿ˜ค
  • Class1SendNSF โ€” type boolean, default Yes โ€” Class 1/1.0: whether or not to send NSF, it's giving yes energy โœ…
  • Class1SFLOCmd โ€” type string, default - โ€” Class 1/1.0: command to set software flow control, iconic for flow control girlies ๐ŸŽ€
  • Class1PPMWaitCmd โ€” type string, default AT+FTS=7 โ€” Class 1/1.0: command to stop and wait before PPM, periodt โœ‹
  • Class1PhaseBRecvTimeoutCmd โ€” type string, default - โ€” Class 1/1.0: command to issue if Phase B receive times out, not me preparing for the worst ๐Ÿ˜ญ
  • Class1ResponseWaitCmd โ€” type string, default - โ€” Class 1/1.0: command to wait before TCF response, lowkey patient vibes ๐Ÿง˜
  • Class1Resolutions โ€” type integer, default 0x7F โ€” Class 1/1.0: bitmap of supported resolutions, the way it's hex and cute ๐Ÿ”ฅ
  • Class1RMQueryCmd โ€” type string, default AT+FRM=? โ€” Class 1/1.0: command to query modem data reception rates, asking the modem what's tea โ˜•
  • Class1TCFWaitCmd โ€” type string, default AT+FTS=7 โ€” Class 1/1.0: command to stop and wait before TCF, same energy as PPM wait ๐Ÿ’…
  • Class1TMQueryCmd โ€” type string, default AT+FTM=? โ€” Class 1/1.0: command to query modem data transmission rates, transmission rates check โœจ
  • Class1EOPWaitCmd โ€” type string, default AT+FTS=9 โ€” Class 1/1.0: command to stop and wait before EOP, wait before end of page, iconic ๐ŸŽฌ
  • Class1ModemHasDLEBug โ€” type boolean, default No โ€” Class 1/1.0: modem fails to double DLE in V.21, it's giving buggy modem energy ๐Ÿ’€
  • Class1MsgRecvHackCmd โ€” type string, default "" โ€” Class 1/1.0: command to avoid +FCERROR before image data, a little hack, we love to see it ๐Ÿ™ˆ
  • Class1SSLFaxCert โ€” type string, default etc/ssl.pem โ€” Class 1/1.0: PEM certificate file for SSL Fax, secure girlie ๐Ÿ”
  • Class1SSLFaxClientTimeout โ€” type integer, default 5000 โ€” Class 1/1.0: timeout waiting for client connection, don't leave me on read โฐ
  • Class1SSLFaxInfo โ€” type string, default - โ€” Class 1/1.0: hostname and port number for SSL Fax, the info bestie ๐ŸŒ
  • Class1SSLFaxProxy โ€” type string, default - โ€” Class 1/1.0: hostname and port number for SSL Fax Proxy, proxy main character energy ๐Ÿ‘‘
  • Class1SSLFaxSupport โ€” type boolean, default Yes โ€” Class 1/1.0: support for SSL Fax, yes we support it ๐Ÿ’–
  • Class1SSLFaxServerTimeout โ€” type integer, default 2000 โ€” Class 1/1.0: timeout waiting for server connection, server better hurry ๐Ÿƒโ€โ™€๏ธ
  • Class1TCFRecvHackCmd โ€” type string, default "" โ€” Class 1/1.0: command to avoid +FCERROR before TCF, another hack, we stay hacking ๐Ÿ’…
  • Class1TCFMaxNonZero โ€” type integer, default 10 โ€” Class 1/1.0: max% of non-zero data in good TCF, keep it lowkey zero ๐Ÿ“‰
  • Class1TCFMinRun โ€” type integer, default 1000 โ€” Class 1/1.0: minimum zero run in good TCF, a nice long run of zeros ๐Ÿƒ
  • Class1TCFMinRunECMMod โ€” type integer, default 2 โ€” Class 1/1.0: modify minimum zero run in ECM by this factor, math but make it cute โœจ
  • Class1TCFRecvTimeout โ€” type integer, default 4500 โ€” Class 1/1.0: max wait (ms) for TCF, don't wait forever โณ
  • Class1TMConnectDelay โ€” type integer, default 0 โ€” Class 1/1.0: delay between +FTM CONNECT and data transmission, zero delay, we move fast ๐Ÿš€
  • Class1SwitchingCmd โ€” type string, default AT+FRS=7 โ€” Class 1/1.0: command to ensure silence after HDLC reception, shhh ๐Ÿคซ
  • Class1ValidateV21Frames โ€” type boolean, default No โ€” Class 1/1.0: check FCS against received frames, validation era ๐Ÿ’ฏ

  • Class2Cmd โ€” type string, default AT+FCLASS=2 โ€” Class 2: command to enter class 2/2.0, come through class 2 ๐Ÿšช
  • Class2AbortCmd โ€” type string, default AT+FK โ€” Class 2: command to abort active session, abort mission ๐Ÿ›‘
  • Class2APCmd โ€” type string, default AT+FAP โ€” Class 2: enable support for sending and receiving SUB, SEP, and PWD frames, all the frames ๐Ÿ’Œ
  • Class2APQueryCmd โ€” type string, default AT+FAP=? โ€” Class 2: query capabilities for sending and receiving SUB, SEP, and PWD frames, ask and you shall receive โ“
  • Class2BORCmd โ€” type string, default AT+FBOR=0 โ€” Class 2: command to setup bit order, bits in order, periodt ๐Ÿ”ข
  • Class2BUGCmd โ€” type string, default AT+FBUG=1 โ€” Class 2: command to enable HDLC frame tracing, tracing the frames like a detective ๐Ÿ•ต๏ธโ€โ™€๏ธ
  • Class2CIGCmd โ€” type string, default AT+FCIG โ€” Class 2: command to set polling identifier, who's polling? ๐Ÿ‘€
  • Class2CRCmd โ€” type string, default AT+FCR=1 โ€” Class 2: command to enable receive capability, we can receive, yes we can ๐Ÿ“ฅ
  • Class2CQCmd โ€” type string, default - โ€” Class 2: command to setup copy quality parameters, copy quality matters ๐Ÿ’…
  • Class2CQQueryCmd โ€” type string, default AT+FCQ=? โ€” Class 2: command to query modem copy quality capabilities, asking about quality ๐ŸŽจ
  • Class2DCCCmd โ€” type string, default AT+FDCC โ€” Class 2: command to set modem capabilities, capabilities set โœ…
  • Class2DCCQueryCmd โ€” type string, default AT+FDCC=? โ€” Class 2: command to query modem capabilities, what can you do? ๐Ÿค”
  • Class2DisableV17Cmd โ€” type string, default - โ€” Class 2: command to disable V.17 support, bye V.17 ๐Ÿ‘‹
  • Class2DISCmd โ€” type string, default AT+FDIS โ€” Class 2: command to set session parameters, session tea โ˜•
  • Class2DDISCmd โ€” type string, default - โ€” Class 2: command to set session parameters before dialing, pre-dial prep ๐Ÿ“ž
  • Class2ECMType โ€” type string, default ``2'' โ€” Class 2: ECM specification type to follow, following the spec ๐Ÿ“œ
  • Class2HexNSF โ€” type boolean, default Yes โ€” Class 2: parse NSF strings as hex values, hex girlie ๐Ÿ”ข
  • Class2HFLOCmd โ€” type string, default - โ€” Class 2: command to set hardware flow control, hardware flow, we love ๐Ÿ’–
  • Class2LIDCmd โ€” type string, default AT+FLID โ€” Class 2: command to set local identifier string, local ID, main character ๐Ÿชช
  • Class2MINSPCmd โ€” type string, default AT+FMINSP โ€” Class 2: command to set minimum transmit speed, minimum speed but still cute ๐Ÿข
  • Class2NFLOCmd โ€” type string, default - โ€” Class 2: command to set no flow control, no flow, no problem ๐Ÿšซ
  • Class2PACmd โ€” type string, default AT+FPA โ€” Class 2: set polling address string, address bestie ๐Ÿ 
  • Class2PHCTOCmd โ€” type string, default AT+FPHCTO=30 โ€” Class 2: command to set Phase C timeout parameter, Phase C timeout, set it โฒ๏ธ
  • Class2PTSCmd โ€” type string, default AT+FPTS โ€” Class 2: command to set received page status, page status update ๐Ÿ“„
  • Class2PWCmd โ€” type string, default AT+FPW โ€” Class 2: set password string, password protected ๐Ÿ”
  • Class2RecvDataTrigger โ€” type string, default ``\21'' โ€” Class 2: character to send to trigger recv, trigger the receive ๐ŸŽฏ
  • Class2RELCmd โ€” type string, default - โ€” Class 2: command to enable byte-aligned EOL codes, EOL codes aligned ๐Ÿ’ซ
  • Class2SACmd โ€” type string, default AT+FSA โ€” Class 2: set destination subaddress string, subaddress set ๐Ÿ“ฌ
  • Class2SendRTC โ€” type boolean, default No โ€” Class 2: append RTC to page data on transmit, RTC on transmit, maybe later โฐ
  • Class2SFLOCmd โ€” type string, default - โ€” Class 2: command to set software flow control, software flow control, iconic ๐Ÿ’ป
  • Class2SPLCmd โ€” type string, default AT+FSPL โ€” Class 2: command to set polling request, polling request, periodt ๐Ÿ“Š
  • Class2TBCCmd โ€” type string, default AT+FTBC=0 โ€” Class 2: command to enable stream mode, stream mode activated ๐ŸŒŠ
  • Class2UseLineCount โ€” type boolean, default No โ€” Class 2: use the line count from the firmware decoder, line count from firmware, okay ๐Ÿ“
  • Class2UseHex โ€” type boolean, default No โ€” Class 2: parse capabilities strings as hex values, hex parsing, maybe later ๐Ÿ”ฃ
  • Class2XmitWaitForXON โ€” type boolean, default Yes โ€” Class 2: wait for XON before sending facsimile data, wait for XON, patient bestie โœ‹

  • Class2Cmd โ€” type string, default AT+FCLASS=2.0 โ€” Class 2.0: command to enter class 2/2.0, class 2.0 entrance ๐Ÿšช
  • Class2AbortCmd โ€” type string, default AT+FKS โ€” Class 2.0: command to abort active session, abort but class 2.0 style ๐Ÿ›‘
  • Class2APCmd โ€” type string, default AT+FAP โ€” Class 2.0: enable support for sending and receiving SUB, SEP, and PWD frames, frames galore ๐Ÿ’Œ
  • Class2APQueryCmd โ€” type string, default AT+FAP=? โ€” Class 2.0: query capabilities for sending and receiving SUB, SEP, and PWD frames, query the frames โ“
  • Class2BORCmd โ€” type string, default AT+FBO=0 โ€” Class 2.0: command to setup bit order, bit order setup, periodt ๐Ÿ”ข
  • Class2BUGCmd โ€” type string, default AT+FBU=1 โ€” Class 2.0: command to enable HDLC frame tracing, tracing frames, detective mode ๐Ÿ•ต๏ธโ€โ™€๏ธ
  • Class2CIGCmd โ€” type string, default AT+FPI โ€” Class 2.0: command to set polling identifier, polling ID, who dis? ๐Ÿ‘€
  • Class2CRCmd โ€” type string, default AT+FCR=1 โ€” Class 2.0: command to enable receive capability, receive capability, yes ๐Ÿ“ฅ
  • Class2CQCmd โ€” type string, default - โ€” Class 2.0: command to setup copy quality parameters, copy quality, important ๐Ÿ’…
  • Class2CQQueryCmd โ€” type string, default AT+FCQ=? โ€” Class 2.0: command to query modem copy quality capabilities, query quality ๐ŸŽจ
  • Class2DCCCmd โ€” type string, default AT+FCC โ€” Class 2.0: command to set modem capabilities, set capabilities โœ…
  • Class2DCCQueryCmd โ€” type string, default AT+FCC=? โ€” Class 2.0: command to query modem capabilities, query capabilities ๐Ÿค”
  • Class2DisableV17Cmd โ€” type string, default - โ€” Class 2.0: command to disable V.17 support, bye V.17 again ๐Ÿ‘‹
  • Class2DisableV34Cmd โ€” type string, default - โ€” Class 2.0: command to disable V.34 support, bye V.34 ๐Ÿ‘‹
  • Class2DISCmd โ€” type string, default AT+FIS โ€” Class 2.0: command to set session parameters, session parameters, set them โ˜•
  • Class2ECMType โ€” type string, default ``2.0'' โ€” Class 2.0: ECM specification type to follow, following the spec 2.0 ๐Ÿ“œ
  • Class2HexNSF โ€” type boolean, default Yes โ€” Class 2.0: parse NSF strings as hex values, hex parsing, yes ๐Ÿ”ข
  • Class2HFLOCmd โ€” type string, default AT+FLO=2 โ€” Class 2.0: command to set hardware flow control, hardware flow control, iconic ๐Ÿ’–
  • Class2JBIGSupport โ€” type string, default see below โ€” Class 2.0: to enable monochrome JBIG fax support, JBIG support, see below bestie ๐Ÿ‘‡
  • Class2JPEGSupport โ€” type boolean, default No โ€” Class 2.0: use modem JPEG support, JPEG support, maybe later ๐Ÿ“ท
  • Class2LIDCmd โ€” type string, default AT+FLI โ€” Class 2.0: command to set local identifier string, local ID, main character ๐Ÿชช
  • Class2MINSPCmd โ€” type string, default AT+FMS โ€” Class 2.0: command to set minimum transmit speed, minimum transmit speed ๐Ÿข
  • Class2NFLOCmd โ€” type string, default AT+FLO=0 โ€” Class 2.0: command to set no flow control, no flow control, periodt ๐Ÿšซ
  • Class2NRCmd โ€” type string, default AT+FNR=1,1,1,1 โ€” Class 2.0: command to set negotiation message reporting, negotiation messages, report them ๐Ÿ“ข
  • Class2PACmd โ€” type string, default AT+FPA โ€” Class 2.0: set polling address string, polling address ๐Ÿ 
  • Class2PHCTOCmd โ€” type string, default AT+FCT=30 โ€” Class 2.0: command to set Phase C timeout parameter, Phase C timeout, set it โฒ๏ธ
  • Class2PIECmd โ€” type string, default AT+FIE=0 โ€” Class 2.0: command to set procedure interrupt handling, procedure interrupt handling, handle it ๐Ÿ› ๏ธ
  • Class2PWCmd โ€” type string, default AT+FPW โ€” Class 2.0: set password string, password, protected ๐Ÿ”
  • Class2PTSCmd โ€” type string, default AT+FPS โ€” Class 2.0: command to set received page status, page status, set it ๐Ÿ“„
  • Class2PTSQueryCmd โ€” type string, default AT+FPS? โ€” Class 2.0: command to query received page status, query page status โ“
  • Class2RecvDataTrigger โ€” type string, default ``\22'' โ€” Class 2.0: character to send to trigger recv, trigger the receive ๐ŸŽฏ
  • Class2RELCmd โ€” type string, default - โ€” Class 2.0: command to enable byte-aligned EOL codes, EOL codes, aligned ๐Ÿ’ซ
  • Class2RTFCC โ€” type boolean, default No โ€” Class 2.0: enable real-time fax compression conversion, real-time compression conversion, fancy โœจ
  • Class2SACmd โ€” type string, default AT+FSA โ€” Class 2.0: set destination subaddress string, subaddress, set it ๐Ÿ“ฌ
  • Class2SendRTC โ€” type boolean, default No โ€” Class 2.0: append RTC to page data on transmit, RTC on transmit, maybe later โฐ
  • Class2SFLOCmd โ€” type string, default AT+FLO=1 โ€” Class 2.0: command to set software flow control, software flow control ๐Ÿ’ป
  • Class2SPLCmd โ€” type string, default AT+FSP โ€” Class 2.0: command to set polling request, polling request, periodt ๐Ÿ“Š
  • Class2TBCCmd โ€” type string, default AT+FPP=0 โ€” Class 2.0: command to enable stream mode, stream mode, activated ๐ŸŒŠ
  • Class2UseLineCount โ€” type boolean, default No โ€” Class 2.0: use the line count from the firmware decoder, line count from firmware ๐Ÿ“
  • Class2UseHex โ€” type boolean, default No โ€” Class 2.0: parse capabilities strings as hex values, hex parsing, maybe later ๐Ÿ”ฃ
  • PagerSetupCmds โ€” type string, default - โ€” commands for setting up modem for a pager call, pager call setup, iconic ๐Ÿ“Ÿ
  • PagerMaxMsgLength integer โ€” default 128 โ€” the longest a text message can be, bestie.
  • IXOService string โ€” default PG โ€” IXO: the service identification string.
  • IXODeviceID string โ€” default 1 โ€” IXO: the device identification string.
  • IXOMaxUnknown integer โ€” default 3 โ€” IXO and UCP: how many unknown responses we put up with before we abort. ๐Ÿ’€
  • IXOIDProbe integer โ€” default 2 โ€” IXO: time between sending \r during the ID sequence, in secs.
  • IXOIDTimeout integer โ€” default 20 โ€” IXO: max time to wait for the ID= response, in secs.
  • IXOLoginRetries integer โ€” default 3 โ€” IXO: max attempts to log in.
  • IXOLoginTimeout integer โ€” default 15 โ€” IXO: max time to complete login, in secs.
  • IXOGATimeout integer โ€” default 30 โ€” IXO: max time to wait for the Go-Ahead response, in secs.
  • IXOXmitRetries integer โ€” default 3 โ€” IXO and UCP: max retries to send a text msg block.
  • IXOXmitTimeout integer โ€” default 15 โ€” IXO and UCP: max time to transmit a text msg block.
  • IXOAckTimeout integer โ€” default 30 โ€” IXO: max time to wait for a msg block ack, in secs.

๐Ÿ‘‘ SERVER-ORIENTED CONFIGURATION PARAMETERS ๐Ÿ‘‘

Okay so these ones? These are the ones that run the whole fax server's general vibe. The big-picture settings. Let's get into it, no cap. ๐Ÿซถ

  • AdaptiveAnswer โ€” Controls whether we do the adaptive answering thing or not. Adaptive answering = an incoming call gets answered in multiple ways, following the list you put in AnswerRotary. So like, if adaptive answering is on and AnswerRotary says fax data, then an incoming call gets answered first as fax using ModemAnswerFaxCmd, and then, if that fails, as data using ModemAnswerDataCmd. If adaptive answering is not enabled, calls just get answered with the appropriate ModemAnswer*Cmd parameter (normally ModemAnswerCmd for unattended operation). Heads up though โ€” adaptive answering depends on a lot of factors, and those factors limit how useful it actually is. When calls get answered as fax first, it typically only works with a Class 1 modem, because it matters that the whole answering-as-fax sequence finish fast enough that the follow-up data answer happens before the caller times out and hangs up the phone. (That's why Class1RecvIdentTimer should be set shorter than FaxT1Timer.) Also, sometimes you gotta arrange for the phone to go on-hook between successive answers โ€” usually done by sticking the right command at the start of the second and subsequent ModemAnswer*Cmds. โœจ
  • AdminGroup โ€” Tells PAM which user group is allowed to administer the fax server. Only useful if the server was compiled with PAM enabled.
  • AllowIgnoreModemBusyยน โ€” Whether or not to honor job requests that say "ignore modem busy status" when allocating jobs to a modem. The intended use here is letting configurations where a DynamicConfig program can send a fax to an incoming caller (which is contrary to T.30 protocol for sending or polling).
  • AnswerRotary โ€” The sequence of answering techniques the server should rotate through when answering incoming calls. The techniques are:
    • fax โ€” answer a fax call
    • data โ€” answer a data call
    • voice โ€” answer a voice call
    • extern โ€” use the vgetty application to answer a call
    • any โ€” answer a call of any/unknown type

When a call isn't answered successfully, the server advances the rotary to the next specified answering technique. If AdaptiveAnswer is enabled, the server will try all the answering techniques for each incoming call. Otherwise, the rotary advances between unsuccessful phone calls. So like, if AdaptiveAnswer is disabled and AnswerRotary is fax data, calls get answered as fax until the first call comes in that doesn't look like it's from a fax machine; after that, calls get answered as if 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 are used โ€” any extra ones are (silently) ignored. See also AnswerBias. ๐Ÿ’…

  • AnswerBias โ€” The index into the AnswerRotary list that the server should rotate the list to after each successful incoming phone call. List indices start numbering at zero. Example: if AnswerRotary is fax data and AnswerBias is 1, then after each 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, which are used (for example) to formulate canonical phone numbers for dialing โ€” see DialStringRules below.
  • **AuditHookยน โ€” Specifies a program command and an interest specification saying which events (as described in faxwatch(8C)) should trigger the execution of that program. For example, this configuration:
    AuditHook: "bin/hook: J*S*M*R*"

would cause bin/hook to be executed upon every 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.

If a page is received in non-ECM mode with unacceptable quality according to PercentGoodLines or MaxConseutiveBadLines, then it can be a little bit hard to tell the sender about the problem. Historically, HylaFAX has assumed that signalling RTN to the sender will get the job done. But some senders literally cannot retransmit pages, and to reduce burden they treat an RTN signal as a receipt confirmation and just move on to the next page without notifying the sending user that there might be a readability problem on the receive-end. (The assumption there being that the receiving user will tell the sending user if there actually is a readability problem.)

A setting of RTN is the historic behavior, and it assumes an RTN signal is enough to get the sender to retransmit or otherwise be 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, which should trigger a call abortion by the sender. This should clearly indicate a problem in page readability to the sender, although receiving any following pages in a later call can't be guaranteed. ๐Ÿ˜ญ

A setting of RTN-SAVE more closely approximates how other fax receivers (especially fax machines) behave. It causes HylaFAX to send the RTN signal, but it saves the previously received page data and puts the next transmitted page data in another page. This is the default setting. However, it 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 to no, only contain a single document.
  • CallIDPattern โ€” A string that identifies the caller's identity in any call identification messages the modem provides (like Caller*ID or DNIS/DID). The specified string is compared against any unrecognized status messages received from the modem before ModemAnswerCmd is sent to the modem. If there's a match, then the remainder of the message is returned as CallIDn where n corresponds to the n'th instance that this CallIDPattern is from the top in the modem configuration file. For example, for the ZyXEL U-1496 this parameter would be set to CallIDPattern: "CALLER NAME: " (note the trailing space). 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 together 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. And to keep 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, which triggers 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 don't support AT+FCLASS=8 (like 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="

Okay bestie, but listen โ€” this example is only an example, and it probably would cause unexpected results. ๐Ÿ’€ Here's why: pattern-matching ends when ModemAnswerCmd is sent to the modem. So if "NDID", "NMBR", and "NAME" responses came from the modem in that order, and the "NDID" response was at least 7 characters long, then ModemAnswerCmd would be sent to the modem immediately following the "NDID" response, and the "NMBR" and "NAME" responses would be ignored. ๐Ÿ™ˆ Generally only one CallIDAnswerLength item should be in a modem configuration file.

Call identification data is usually only sent once by the telco or PBX, and the timing of its arrival varies upon the telco or PBX and the type of line. If HylaFAX is configured to answer via RingsBeforeAnswer prior to the arrival of the data, then all CallID values will be null. ๐Ÿ˜ญ For example, on US analog lines, caller-ID data is usually sent between RINGs 1 and 2. In this situation, RingsBeforeAnswer should be set to `2` or greater. (iykyk)

โœจ CallIDAnswerLength โœจ

An integer indicating the minimum number of characters in a CallID matching the previous CallIDPattern to be received when ModemAnswerCmd is sent to the modem irrespective of any RingsBeforeAnswer value 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.

๐Ÿ’… CallIDDisplay ๐Ÿ’…

Whether or not to display the CallIDPattern match in the modem status line. ๐Ÿ‘€

๐ŸŽ€ CallIDLabel ๐ŸŽ€

The label to use in the presentation of any CallIDPattern match. (For example, when CallIDDisplay or CallIDRecord indicate to display or record the match.) ๐Ÿท๏ธ

๐Ÿฆ‹ CallIDRecord ๐Ÿฆ‹

Whether or not to record the CallIDPattern match in the received image file. ๐Ÿ“

โญ CallIDType โญ

Identifies the type of indicator in the associated CallIDPattern match. The special type `calling-number` enables the faxgetty process to utilize an associated entry in the info database for items such as senderDataSent, senderDataMissed, senderConfusesRTN, senderConfusesPIN, senderFumblesECM, senderHasV17Trouble, and senderSkipsV29. See hylafax-info(5F).

๐ŸŒˆ ClocalAsRoot ๐ŸŒˆ

Control whether operations that set the CLOCAL bit 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 the fax user, except under IRIX where they are done as the super-user (because IRIX disallows manipulation of CLOCAL by anyone but the super-user). ๐Ÿ‘‘

๐Ÿ”ฅ ContCoverCmdยน ๐Ÿ”ฅ

The program to invoke to generate a continuation cover page; see ContCoverPage and mkcover(8C).

๐Ÿ”ฅ 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 by ContCoverCmd to 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 in which the facsimile modem resides. As for AreaCode, this value is passed to the dial string rules for use in formulating canonical phone numbers for dialing (among other things.) โ˜Ž๏ธ

๐Ÿ”ง 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).

๐Ÿ“ž DialStringRulesยฒ ๐Ÿ“ž

The pathname of the file that holds the rules for processing user-specified dial strings; c.f. dialrules(5F). The specified pathname must be relative to the top of the fax server's spooling area; e.g. etc/dialrules.

๐ŸŽถ 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

๐Ÿ”• DRingOff ๐Ÿ”•

A string that identifies the `off` value in any distinctive ring cadence, for example `DROF=`. See also DRingOn and DistinctiveRings.

๐Ÿ”” DRingOn ๐Ÿ””

A string that identifies the `on` value in any distinctive ring cadence, for example `DRON=`. See also DRingOff and DistinctiveRings.

๐Ÿงš 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. โš ๏ธ

๐Ÿ’œ EGettyArgs ๐Ÿ’œ

A string that indicates whether or not the server should use an an external getty application (egetty) to perhaps 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 egetty. 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, egetty is invoked with its standard input, output, and error descriptors directed to the controlling tty device.


When egetty finishes up, bestie, we gotta read its exit status, because that number is literally the whole plot twist โ€” it tells us what to do with the call. Here's the tea ๐Ÿต:

  • Exit status 0 โ€” unknown call type, no clue what this is. Handle the call like egetty was never even involved, periodt.
  • Exit status 1 โ€” it's a data connection! So use the getty(8C) program to handle it if it's configured (peep GettyArgs). If it's not configured, we just assume the call got answered and the data connection is up, and we keep it moving by sending ModemAnswerDataBeginCmd to the modem (if that's configured, obvi).
  • Exit status 2 โ€” a fax connection is established ๐ŸŽ€, so we proceed by issuing ModemAnswerFaxBeginCmd to the modem (if configured).
  • Exit status 3 โ€” it's a voice call ๐Ÿ“ž, so use the vgetty program if it's configured (see VGettyArgs). If not, we assume the call was answered and the voice connection is established, and we proceed by issuing ModemAnswerVoiceBeginCmd to the modem (if configured).
  • Exit status 4 โ€” this one's an ERROR condition. The session gets terminated. Bye.
  • Exit status 5 โ€” egetty handled the whole call by itself, it's not an error, and the session is considered terminated. Clean exit, slay โœจ.
  • Exit statuses 11, 12, and 13 โ€” these are the same as 1, 2, and 3 respectively, EXCEPT they mean the call hasn't been answered yet with a data, fax, or voice connection. So if GettyArgs isn't configured, ModemAnswerDataCmd gets issued to the modem first for an exit status of 11; ModemAnswerFaxCmd gets issued first for 12; and if VGettyArgs isn't configured, ModemAnswerVoiceCmd gets issued first for 13.

๐Ÿ’– FAXNumber

The phone number that belongs to the facsimile modem. This string gets used to build the Transmitter Subscriber Identification (TSI) and Caller Subscriber Identification (CSI) info we send to remote machines โ€” unless the LocalIdentifier parameter is explicitly set, in which case that wins. The FAXNumber is also what names the session log file where incoming-call info gets recorded; check hylafax-log(5F) for that. And if this phone number isn't fully qualified, then the values of AreaCode and CountryCode step in to generate the transmitted CSI and TSI. ๐Ÿซถ

โœจ Includeยฒ

Include the config file you name, as if it were literally part of this config file. Copy-paste energy, but make it official.

๐ŸŒ InternationalPrefixยฒ

The string you use to place an international phone call. In the United States, this is ``011''. This string gets passed along to the dial string rules.

๐ŸŽ€ JobControlCmdยน

The command to invoke that provides Job Control information for a job. See jobcontrol(8C).

โณ JobReqBusy

The delay, in seconds, to wait before retrying a job whose dialing attempt failed with a ``BUSY'' status result.

๐Ÿ“ž JobReqDataConn

The delay in seconds to wait before retrying a facsimile job whose dialing attempt failed because a data modem picked up the phone. Rude, honestly.

๐Ÿ•ณ๏ธ JobReqNoAnswer

The delay in seconds to wait before retrying a job whose dialing attempt failed with a ``NO ANSWER'' status result.

๐Ÿ“ต JobReqNoCarrier

The delay in seconds to wait before retrying a job whose dialing attempt failed with a ``NO CARRIER'' status result.

๐Ÿ’€ JobReqNoFCon

The delay in seconds to wait before retrying a facsimile job whose dialing attempt failed because the initial facsimile protocol handshake flopped (aka no ``+FCON:'' result came back from a Class 2/2.0 modem).

๐Ÿ” 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. The catch-all, the safety net, the bestie who covers your shift.

๐Ÿงฌ JobReqProto

The delay in seconds to wait before retrying a facsimile job that failed because of a fax protocol error.

๐Ÿ”ฅ JobRetryBusy

The number of times to redial a phone number after getting a ``BUSY'' result code, when the number has not been successfully dialed before.

๐ŸŒธ 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.

๐Ÿ˜ญ 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.

๐Ÿซ  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.

So here's the vibe: in normal operation the fax server treats this result code as meaning a facsimile modem/machine did not answer the phone, and it rejects the transmit job. Why? To avoid repeatedly dialing wrong phone numbers โ€” and this whole thing depends on the modem being able to tell the difference between no carrier and no answer. But plot twist: some modems genuinely cannot reliably distinguish between no carrier and no answer, or when you tell them to, they don't identify a busy signal correctly. For those modems you might find it necessary to bump up this parameter's value to compensate.

โš ๏ธ It is strongly recommended, however, that you do NOT set this value to a large number. Fr fr. Do not do it. ๐Ÿ’€

๐ŸŒˆ 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.

๐Ÿ‘‘ GettyArgs

A string that says whether or not the server should invoke the getty(8C) program in response to an incoming call from a data modem.

If the string value is not null, then it's interpreted as a set of arguments to pass to the getty program. Before the arguments get supplied, the string is first scanned for ``%''-escape sequences:

  • any appearance of ``%l'' gets replaced with the tty name
  • any appearance of ``%s'' gets replaced with the serial port speed (in decimal)
  • any appearance of escaped numbers 1 through 9 (%1'' through %9'') gets replaced by the match to the corresponding CallIDPattern, if present
  • the %'' character itself can be specified with %%''

If the GettyArgs parameter isn't specified in the configuration file, or if the string value is null, then data connections get rejected. Bye bestie ๐Ÿ™ˆ.

Also note โ€” on top of 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. Iykyk.

๐Ÿ’… LocalIdentifier

The local station identification string to use when transmitting TSI and CSI strings (see FAXNumber above).

NB: while this string may contain any printable ASCII characters, beware that CCITT T.30 specifies a restricted character set, and some fax modems and machines may reject or not display non-conforming strings. So maybe don't get too creative, babe.

If the local identifier isn't specified, a canonical form of the FAXNumber is used instead.

๐Ÿ”’ LockDataCalls

Hold the UUCP lockfile during the time an inbound data call is being processed by the external getty program. If this is disabled, then the lockfile gets removed just before the getty program is invoked.

โš ๏ธ But note: doing that introduces a race condition โ€” an outbound program may 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. Sneaky sneaky. ๐Ÿ

๐ŸŽ™๏ธ LockVoiceCalls

Hold the UUCP lockfile during the time an inbound data call is processed by the external voice getty program. If this is disabled, then the lockfile gets removed just before the voice getty program is invoked.

โš ๏ธ Same warning, same energy: this introduces a race condition where an outbound program may sneak in and grab 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'll find it in the system include file <syslog.h> โ€” and comparisons are case-insensitive.

๐Ÿ“ž LogCalls

Log all incoming calls into xferfaxlog as CALL records. This gives you a quick check of all incoming calls, whether the fax completed or not, all unified and tidy with the other fax logs. Chef's kiss. ๐Ÿ˜˜

๐Ÿ” LogFileMode

The file protection mode to use when creating files that hold session logs. Heads up: this value is given in octal. The default value of 0600 means the log files aren't generally accessible โ€” which matters a LOT if sensitive info like calling card access codes is getting logged. If log files are meant to be publicly accessible, you may set this value to, for example, 0644. See also chmod(2).

๐Ÿ“ฅ LogRecv

Log all received faxes into xferfaxlog as RECV records.

๐Ÿ“ค LogSend

Log all sent faxes into xferfaxlog as SEND records.

โ˜Ž๏ธ LongDistancePrefixยฒ

The string to use to place a long distance phone call. In the United States, this is ``1''.

MaxConcurrentCallsยน

okay so this one is the default value for the max number of jobs for the same destination that get processed at the same time. so basically it's the ceiling on how many phone calls can be happening concurrently to one destination. ๐Ÿ’…

ngl unless literally all of your fax destinations have multiple fax lines using the same fax number per destination, you should just leave this at the default of 1 and handle the exceptions with the JobControl mechanism instead. lowkey the move.

BUT for high-throughput applications there's a special value of "0" you can use โ€” that tells the server to allow limitless concurrent calls to the same destination, provided that all existing calls to that destination have connected. and in that setup, if a busy signal happens on a concurrent call, the various "dials" counters are not incremented, and further concurrent calls get temporarily stalled. ๐Ÿซถ

MaxConcurrentPrepsยน

the maximum number of job preparations that may be run simultaneously. its whole job is to stop the scheduler from kicking off so many job preparations that system resources get constrained in the operations. protect the vibes, protect the CPU. โœจ

MaxBatchJobsยน

the maximum number of jobs to batch together in a single call. that's it, that's the whole thing. ๐ŸŽ€

MaxConsecutiveBadLines

the maximum number of consecutive erroneous rows of image data that the server will receive before it decides a page has unacceptable copy quality. ๐Ÿšซ

set this to zero and the server justโ€ฆ won't check the quality of received facsimile at all. facsimile received with error-correction do not have copy quality checking performed. see also PercentGoodLines.

MaxDialsยน

the default value for the max number of times the server will place a call for an outbound job. this can be overridden by rules in the JobControl mechanism. ๐Ÿ‘‘

heads up bestie: this feature is completely distinct from the identically-named feature in the client-server communication, and jobs triggering these limits get handled differently for each one. see also MaxTries.

MaxProxyJobsยน

the maximum number of jobs that can be concurrently delivered to a proxy for transmission. this limit exists so proxy use doesn't overwhelm the available system processes. ๐ŸŒธ

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 get rejected, no negotiation. 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". it's giving "we tried, we really did". ๐Ÿ˜ญ

MaxTraversalยน

the maximum depth into the job queues that the scheduler will traverse when it's attempting to batch jobs together into a single call. the whole point is to stop the scheduler from burning a ton of CPU on batching attempts when the job queues get very long โ€” which is exactly when batching is unlikely to be useful anyway. ๐Ÿงš

MaxTriesยน

the default value for the maximum number of times the server will attempt to communicate with a remote site. ๐Ÿ“ž

note the difference fr fr: for a call to be counted against this limit, carrier must be established. this is in contrast to 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. and again โ€” this feature is completely distinct from the identically-named feature in the client-server communication, and jobs triggering these limits are handled differently for each. see also MaxDials.

MinAcceptedLineCount

the minimum number of received scanlines allowed on an "OK" page. using this setting stops confirmation from being sent for very short pages. tiny page? not today. ๐Ÿ™ˆ

MissedPageHandlingMethod

(Class 1/1.0 only) โ€” specifies how to react to a missed page received from the remote sender. it's one of: "RTN", "PIN", "DCN", or "CFR". ๐Ÿ‘‘

if a page is missed (meaning the modem does not train on the Phase C carrier) in non-ECM mode, then โ€” like BadPageHandlingMethod โ€” it can be somewhat difficult to inform the sender of the problem. ๐Ÿ˜ญ

here's the tea on each option:

  • "RTN" โ€” the proper behavior that fax protocol employs to request the sender retransmit the page after retraining. unfortunately, though, some senders will perceive this as a receipt confirmation and won't retransmit the page at all. if senderConfusesRTN is set to "yes" in the associated hylafax-info(5F) file for this sender, then this method will not be used.
  • "PIN" โ€” the proper behavior that fax protocol employs to request the sender retransmit the page after a procedural interrupt. however, procedural interrupts are rarely used and may not be widely supported by other systems. if senderConfusesPIN is set to "yes" in the associated hylafax-info(5F) file for this sender, then this method will not be used.
  • "DCN" โ€” should trigger a call abortion by the sender. this should clearly indicate a problem to the sender, although a retransmission attempt in a later call cannot be guaranteed.
  • "CFR" โ€” causes an out-of-spec behavior where the CFR signal is used in response to the post-page message. while other HylaFAX senders should handle this signal in a way that leads to a retransmission of the page without retraining, most senders will disconnect after receiving this signal, since it is not a permitted response in Phase D โ€” and the sender response will be undefined. this method will only be used if it is explicitly configured for use.

historically, HylaFAX has employed both "RTN" and "DCN" behaviors by default, with complaints using either. the "PIN" and "CFR" behaviors were developed in order to evaluate whether other systems besides HylaFAX would tolerate them. ๐Ÿงช

MissedPageHandlingMethod is designed to give the administrator the opportunity to vary between these options through the DynamicConfig feature, to achieve a more nuanced approach. main character admin energy honestly. ๐Ÿ’…

ModemGroupยน

define a logical name for a set of modem devices. this parameter lets you define a name that clients can use to refer to a collection of modems. ๐ŸŒˆ

the syntax is:

<name>:<definition>

where <name> is the name for the group, and <definition> is of the syntax:

[<limit>:]<regex>

where <limit> is an optional formatted expression of the limits for this ModemGroup, and <regex> is a regular expression that faxq(8C) matches against known modems.

presently <limit> only refers to a number that is the minimum number of modems in the group that must be left to stay idle (for receiving) after assigning an active job to the ModemGroup. the default for <limit> is 0.

so for example, the default modem to use for a job, any, is defined as:

any:0:.*

this parameter may be specified multiple times to define multiple modem classes. modem classes may overlap. โœจ and 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. fair and balanced, we love to see it. ๐ŸŽ€

NoAnswerVoice

whether or not to disable the answering of calls indicated as voice (e.g. by DistinctiveRings). ๐Ÿ”‡

NoCarrierRetrys

this is mapped onto JobRetryNoCarrier. (yep, that's the whole description, bestie, don't @ me.) ๐Ÿ™ˆ

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
  • "D" โ€” down
  • "E" โ€” exempt

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(8C) program, or by setting this configuration parameter with the faxconfig(8C) program.

the HylaFAX scheduler process will not assign jobs to a modem with a ModemReadyState of anything other than "R". ๐Ÿšซ

the differences between "B", "D", and "E":

  • "B" refers to a temporary condition that will automatically clear in the passing of time (as if the modem were in-use with receiving a fax).
  • "D" refers to a condition that will not automatically clear (such as a wedged condition).
  • "E" refers to a permanent condition as configured by the administrator (as for a receive-only modem).

if a user submits a job to a specific modem that has a ModemReadyState of "B" or "D", then the job will wait in the queue until the modem is made available, or until the job times out. in contrast, jobs submitted to a specific modem with a ModemReadyState of "E" will be rejected outright. ๐Ÿ’€

exempt modems should be removed from any ModemGroup to which they belong (i.e. "any").

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 program to invoke to notify a client of a job status change; see notify(8C). ๐Ÿ’Œ

  • PageChopยน โ€” do we auto-truncate the trailing whitespace on outbound fax pages (when we can)? Obsessed with efficiency, honestly. If chopping is on, then any page with at least PageChopThreshold trailing whitespace gets sent as a short page'' โ€” but only if the receiver can handle variable-length pages. Your values are: last'' = chop just the last page of each doc, all'' = chop every single page, or none'' = no chopping, we're keeping the whitespace, bestie. โœจ
  • PageChopThresholdยน โ€” the minimum amount of trailing whitespace that has to be sitting on a page before page chopping even gets attempted; peep PageChop. Heads up: this value is in inches. ๐Ÿ“
  • PCL2FaxCmdยน โ€” the command to invoke to convert an HP-PCL document submitted for transmission into TIFF/F, suitable for transmission. ๐Ÿ’…
  • PDF2FaxCmdยน โ€” the command to invoke to convert a PDF document submitted for transmission into TIFF/F, suitable for transmission.
  • PercentGoodLines โ€” the minimum percentage of good rows of image data required for a received fax page to be deemed acceptable copy quality. Set this to zero and the server just... does not check received fax quality at all, no thoughts head empty. Also: fax received with error-correction don't get copy quality checking performed, periodt. See also MaxConsecutiveBadLines. ๐Ÿ‘‘
  • PollLockPokeModem โ€” when we're polling for a UUCP lockfile to show up or disappear, also test that the modem is still reachable. Genuinely useful for when the modem is apt to become disconnected while it's idle โ€” like an external modem that might lose power โ€” and the admin wants to get notified of that (as a ``wedged'' condition). ๐Ÿซ 
  • PollLockWait โ€” when polling for the presence/removal of a UUCP lockfile, the time (in seconds) to wait between checks. Lockfile polling exists so the fax server doesn't collide with another process that's using the modem. Sharing is caring, but locks are law.
  • PollModemWait โ€” the time (in seconds) to wait between checks for a modem to become ready for use. Modem polling happens when a modem fails to reset cleanly. ๐Ÿ˜ญ
  • PriorityScheduling โ€” should the HylaFAX scheduler use the available priority job scheduling mechanisms to boost realtime execution, especially with Class 1 configurations on older or slower systems?

As of right now, 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 is maintained. 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(8C). ๐ŸŽ€
  • QualifyPWD โ€” a string that says whether or not the identity of calling fax machines should be checked against an access control list before receiving fax. If QualifyPWD is non-null, then only messages from fax machines identified in the file specified by that string (typically etc/passwd) will be accepted; it's similar to QualifyTSI. ๐Ÿ”
  • QualifyTSI โ€” a string that says whether or not the identity of calling fax machines should be checked against an access control list before receiving fax. If QualifyTSI is non-null, then only messages from fax machines identified in the file specified by that string (typically etc/tsi) will be accepted; see tsi(5F). If QualifyTSI isn't specified in the config file, or the value is null, then literally every incoming fax message gets accepted. Come one, come all.
  • RecvDataFormat โ€” the data format (compression scheme) to write received fax data in when copy quality checking is performed on the host. (When copy quality checking is not done by the server โ€” say, when the error correction protocol is in use โ€” the received fax data gets written exactly as it came off the modem.) The format can be one of: 1-D MH'', 2-D MR'', 2-D MMR'', or adaptive''. An ``adaptive'' format makes the received data get written using whatever data format the sender and receiver negotiated. Heads up though: 2-D MMR is the most space-efficient data format, but the resulting file may not be viewable โ€” some commonly used programs do not properly read multi-strip TIFF with 2-D MMR data. ๐Ÿ™ˆ
  • RecvFileMode โ€” the file protection mode to use when creating files that hold incoming fax. Note that this value is given in octal. The default value of 0600 means only the fax user can read received fax. If incoming fax are meant to be publicly accessible, you can set this, for example, to 0644. See also chmod(2). ๐Ÿงš
  • RejectCall โ€” set this to true and the current call will not be answered, it'll be rejected. This option has no effect if it's set in the configuration file โ€” but when it's set by the DynamicConfig program, it controls the current call. This option supersedes the obsolete QualifyCID option. Not me rejecting your call fr fr.
  • RingData โ€” a modem status string that identifies an incoming call as being for data use. Set this string when a phone line has been set up with distinctive ring service. See also RingFax and RingVoice. ๐ŸŒˆ
  • RingExtended โ€” an identifier that matches the initial portion of an extended RING message sent by the modem, used to relay CID and/or DNIS data instead of sending it formatted on separate lines. โญ
  • RingFax โ€” a modem status string that identifies an incoming call as being for fax use. Set this string when a phone line has been set up with distinctive ring service. See also RingData and RingVoice. ๐Ÿ’œ
  • RingsBeforeAnswer โ€” how many rings to wait before answering the phone. If this value is set to 0, then the phone only gets answered in response to an explicit answer command; see faxanswer(8C). โ˜Ž๏ธ
  • RingTimeout โ€” if a ring is heard and the call isn't answered, the time in ms to wait before reinitializing the modem for the next call. โณ
  • RingVoice โ€” a modem status string that identifies an incoming call as being for voice use. Set this string 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''. Pick your fighter.

``Retransmit'' assumes the page was not received successfully. HylaFAX will make up to two additional attempts to send that page, decreasing the signalling rate and retraining. If the RTN keeps coming, up to 2 additional calls will be placed. The downside? If the remote always responds with RTN, the page gets sent 9 times and no following pages get sent at all. Many fax machines will not behave this way, even though the T.30 specification seems clear that this is the intent of the RTN signal. ๐Ÿ˜ตโ€๐Ÿ’ซ

Some fax machines interpret RTN as meaning don't 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 read RTN this way will disconnect and require a manual retransmission. This over and out'' behavior can be activated with the Giveup'' value. The advantage here is that the same page of image data won't get sent multiple times โ€” but the downside is that the following pages will not be sent. ๐Ÿ’€

Ignore'' is similar to Giveup'' in that it makes the assumption the data cannot be automatically accepted by the receiver. But instead of disconnecting, the page of image data is abandoned and processing moves on to the next one. The remote is left to decide what to do with that unacceptable page of image data. The downside of this behavior is that the remote may or may not have kept the page, depending on how it interpreted the RTN signal โ€” but it does let us continue on to the next page. ๐Ÿคทโ€โ™€๏ธ

Retransmit-Ignore'' is a combo of Retransmit'' and ``Ignore''. The page of image data gets 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 lets the receiver hopefully get a better copy of the image data while not failing to send subsequent pages. And if the receiver saves or prints a copy of pages it transmits RTN for, then it could save or print up to three copies of every page. ๐Ÿ˜ญ

  • SaveUnconfirmedPages โ€” whether or not to save a received fax 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 fax jobs; see faxsend(8C). ๐Ÿ”ฅ
  • SendPageCmdยน โ€” the command to use to process outbound pager jobs; see pagesend(8C). ๐Ÿ“Ÿ
  • SendUUCPCmdยน โ€” the command to use to process outbound UUCP jobs. This parameter is not currently used, it's there for future development. Main character in waiting, lowkey.

ServerTracingยฒ

Okay so bestie, this one is a number that controls the generation of tracing information by a server when it is not actively sending or receiving facsimile. ๐Ÿ‘€

Tracing is split into areas, and every area is controlled on its own. To trace multiple areas at once, you bit-or the flag for each area together and that combined value is what you put in this tag. Math but make it fax. ๐Ÿ’…

  • 1 (0x00001) โ€” Server Operation: queue management and general operation
  • 2 (0x00002) โ€” FAX/IXO Protocol: T.30 facsimile protocol or IXO/TAP protocol
  • 4 (0x00004) โ€” Modem Operations: modem hardware manipulation
  • 8 (0x00008) โ€” Modem Communications: commands passed between host and modem
  • 16 (0x00010) โ€” Timeouts: timer operations
  • 32 (0x00020) โ€” Modem Capabilities: modem capabilities
  • 64 (0x00040) โ€” HDLC Frames: binary T.30 HDLC frames
  • 128 (0x00080) โ€” Binary Modem I/O: binary communication between host and modem
  • 256 (0x00100) โ€” Server State Transitions: server program state transitions
  • 512 (0x00200) โ€” Queue Management: job queue management
  • 1024 (0x00400) โ€” Copy Quality: copy quality checking of received facsimile
  • 2048 (0x00800) โ€” Job Management: low-level job management
  • 4096 (0x01000) โ€” IXO Protocol: low-level IXO protocol
  • 8192 (0x02000) โ€” Config File Parsing: unknown configuration file parameters
  • 16384 (0x04000) โ€” FIFO Messages: inter-application messages
  • 32768 (0x08000) โ€” Modem State Transitions: modem state changes (down, busy, ready)
  • 65536 (0x10000) โ€” Dial Rules: dialstring rules parsing and execution
  • 131072 (0x20000) โ€” Docq Changes: document reference handling
  • 262144 (0x40000) โ€” TIFF library: any messages produced by the TIFF library
  • 524288 (0x80000) โ€” ECM Frames: binary T.30-A HDLC ECM frames
  • 1048576 (0x100000) โ€” SSL Fax data: SSL Fax data bytes

So like, if you wanna trace server operations and protocol operations, you'd put 1+2=3. Periodt. ๐ŸŽ€

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. ๐Ÿ˜ญ Not a drill, bestie โ€” treat those two like a hot stove.

Server tracing gets directed to syslog(3) using the facility you picked with the LogFacility configuration parameter. And heads up: syslogd(8C) must be configured to capture facility.info, facility.debug, facility.warning, and facility.err messages. See hylafax-log(5F) for a description of the logged messages. ๐Ÿฆ‹


SessionTracingยฒ

A number that controls the generation of tracing information by a server while it's sending or receiving facsimile. โœจ The number is interpreted identically to ServerTracing โ€” same vibe, different moment.

Important lil difference tho: session tracing goes into log files in the log subdirectory; peep hylafax-log(5F) for more info. ๐Ÿ’–


ShareCallFailuresยฒ

A string that says which types of call failures should get shared to blocked jobs (in the scheduler config file) or to batched jobs (in the per-device configuration files). ๐Ÿซถ

Why tho? To stop a big ol' pile of jobs headed to the same destination from just stalling in the queue forever and repeatedly yeeting out failed delivery attempts because of call-related errors โ€” think an incorrectly-entered destination number. ๐Ÿ’€ Jobs that are batched or blocked (depends which config file you're in) get the same failure indication and the same ``dials'' increment as the job that was active and running at the time (or the one leading the batch). Iconic, honestly.

ShareCallFailures may contain these key words, in any order, with any deliniation:

  • busy โ€” Busy signal detected
  • nocarrier โ€” No carrier detected
  • noanswer โ€” No answer from remote
  • nodialtone โ€” No local dialtone

Alternatively, you can set ShareCallFailures exactly to always'' โ€” that makes it apply to **all** of the call failure types listed above and is synonymous with busy nocarrier noanswer nodialtone''. ๐ŸŒˆ


SpeakerVolume

The volume level the in-modem speaker should be adjusted to while in command mode. ๐Ÿ”ฅ The possible values are:

  • Off โ€” silent
  • Quiet โ€” almost inaudible
  • Low โ€” tolerable in privacy
  • Medium โ€” loud enough to hear in the next room
  • High โ€” intolerable

Note that the speaker is always turned off once carrier is established. Also, beware that some modems support fewer volume settings; see ModemSetVolumeCmd. ๐Ÿ™ˆ


StaggerCallsยน

The time, in seconds, to delay between initiating outbound job calls. โณ

So if HylaFAX is using a single phone line shared for both sending and receiving of faxes, a StaggerCalls setting of, for example, 300 would ensure that outbound calls are made in succession no more frequently than every 5 minutes โ€” which leaves time between jobs for incoming calls to be received. Giving your line a lil breather, as it deserves. ๐ŸŒธ


TagLineFont

The filename of the font to use in imaging 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 or etc/LiberationSans-25.pcf.

If no font is specified, if a null filename is specified, or if the specified font file is not readable, then tag lines will not be generated. ๐Ÿ˜ญ

Note that the etc/lutRS18.pcf TagLineFont that has historically been the default with HylaFAX does not have glyphs available beyond basic ASCII โ€” and to show non-ASCII characters you need a different file that has characters matching those characters found in TagLineFormat as decoded by the TagLineLocale setting. For this reason, the etc/LiberationSans-25.pcf is now considered the default, since it has unicode support for Latin, Greek, and Cyrillic characters. ๐ŸŒ๐Ÿ’œ


TagLineFormat

The format string to use when imaging tag lines across the top of each transmitted page. โœจ This string may include escape codes that cause various items to be interpolated into the imaged tag line.

Any escape code supported by strftime(3C) (which use a single ``%'') may be used, as well as the following server-implemented codes:

  • %%a โ€” destination subaddress
  • %%c โ€” destination company name
  • %%C โ€” sender's company name
  • %%d โ€” destination phone number
  • %%g โ€” sender's geographic location
  • %%G โ€” destination geographic location
  • %%i โ€” job identifier
  • %%I โ€” group identifier
  • %%j โ€” user-specified job tag
  • %%l โ€” job TSI or LocalIdentifier or canonicalized FAXNumber
  • %%m โ€” sender's electronic mail address
  • %%n โ€” canonicalized FAXNumber
  • %%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 โ€” sender's voice number
  • %%V โ€” destination voice number
  • %%% โ€” a literal ``%''

There are numerous date and time format options available through strftime(3C). Bestie, go read its documentation for the elaboration โ€” it's giving rich. ๐Ÿ“š Used by default, %c'' is defined as The preferred date and time representation for the current locale.''

In addition, the format string may indicate that text is to be broken into multiple equal-sized fields by separating text with ``|'' characters. ๐ŸŽฏ Here's the rules:

  • If the first character in the field is a ``{'' then the text is left-aligned.
  • If the first character in the field is a ``}'' then the text is right-aligned.
  • Otherwise, the text is centered in the field.

For example, {a|b|}c'' would cause the tag line to be broken up into three equal-sized areas, with the string a'' left-aligned in the first region, b'' centered in the second region, and c'' right-aligned in the third region. โœจ

The default tag line format string is:

From %%n|%c|Page %%P of %%T

The differences between the %%p or %%P and the %%t or %%T options are noticed when a fax job is retried after an incomplete attempt, and only the previously unsent pages are then queued in a successive session. ๐Ÿ‘‘ See also TagLineFont.


TagLineLocale

The locale setting for handling TagLineFormat, for example, ``en_US.UTF-8''. ๐ŸŒธ If TagLineFormat is encoded via UTF-8 then the correct setting of TagLineLocale is requisite for proper decoding by the parser. By default the environment settings are used. ๐Ÿ’…


TIFF2FaxCmdยฒ

The command to invoke to convert a TIFF submitted for transmission to TIFF/F, suitable for transmission; see tiff2fax(8C). ๐Ÿฆ‹

In the scheduler configuration file this is used in outbound job preparation. In the per-device configuration files this is used in conjunction with RTFCC features for comparing relative data sizes between different formats. โœจ

TimeOfDayยน The default time-of-day restrictions to apply to outbound jobs. Outbound jobs will be processed only during the specified time. Any jobs submitted outside this time period will be held until the start of this time. The syntax for time-of-day restrictions is designed to be compatible with the syntax used by the UUCP software. The following BNF describes the syntax: 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.

TSIRecvdCmd The pathname of the optional program, e.g. ``etc/tsirecvd'', that similar to DynamicConfig can set the RejectCall option to cause the current call to be rejected instead of continued. TSIRecvdCmd should provide a more capable mechanism than QualifyTSI for those wishing to screen calls based on received TSI. Note that this file must be marked as executable by the faxgetty process. Note also that any configuration modifications made by the TSIRecvdCmd script other than RejectCall is unsupported and has undefined results.

Unblockยน Intended to only be used from the faxconfig(8C) utility, this will force faxq(8C) to unblock one call to the value-specified destination number. The destination number should be provided in the format known by faxq(8C), as seen in the hylafax-info(5F) database files.

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 that should be used 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.

UUCPLockTypeยฒ A string that specifies the type of UUCP lockfile to create. The string may 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. In addition, two prefixes may be used to control the format of the lock filename. If the type string is prefixed with a +'', then SVR4-style filenames are 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. If the type string is prefixed with a -'', then any upper case letters in the device part of the lockfile name are converted to lower case letters; for example, LCK..ttyA01'' is converted to LCK..ttya01''. This 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.

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, then it is interpreted as a set of arguments to pass to the vgetty 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 VGettyArgs parameter is not 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 program to invoke when a modem is deemed ``wedged''; see wedged(8C).

MODEM-ORIENTED CONFIGURATION PARAMETERS This section lists configuration parameters that are specific to the setup and operation of the modem. All commands must be specified exactly as they are to be transmitted to the modem (note that this is a departure from previous versions of this software that automatically prepended AT'' to each line of commands sent to the modem). When multi-line commands are required, enclose the commands in quote marks ("'') and insert a newline character \n'' where lines should be broken. An example of a multi-line command string is AT+FCQ=1\nAT+FBADMUL=20\nAT+FBADLIN=10''.

Command strings sent to the modem may include command escapes that force the host to alter the DTE-DCE communication rate, the flow control scheme used between the host and modem, delay for a period of time, flush input data, and wait for a specific response from the modem. The following escape codes are interpreted: Escape Effect <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 (see below) <play:C> play the etc/playC.raw audio file (see below) Note that commands to the left of an escape code are sent to the modem before the associated actions are carried out on the host. This may be important when changing baud rates, as the result code from a command may be returned at the new baud rate. Also, beware that not all baud rates are supported by all systems and modems; the set of baud rates supported by a host is usually listed in stty(1).

The <waitfor:..>'' escape can be used to override the default behavior which is to wait for an OK'' response to a command sent to the modem. The possible response codes are: NOTHING a null response OK the default response CONNECT CONNECT...'' NOANSWER NO ANSWER...'' NOCARRIER NO CARRIER...'' NODIALTONE NO DIALTONE...'' BUSY BUSY'' OFFHOOK PHONE OFF-HOOK'' RING RING...'' ERROR error status from modem VCON voice connection indicator OTHER any unrecognized modem response 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 continue (not wait for any response).

The <play:C>'' escape can be used to play a raw audio file with a voice modem. The files are named etc/playC.raw where C'' is any character. This feature can be used, for example, to play a brief audio message after picking up the line but before answering. A configuration example may be:

ModemRingResponse: "AT+FCLASS=8;H1\nAT+VSM=131\nAT+VLS=1\nAT+VTX\n<waitfor:CONNECT><play:1><waitfor:OK>AT+VTS=[933,,150]" ModemAnswerCmd: "<delay:100>AT+FCLASS=1;A" CallIDPattern: SHIELDED_DTMF CallIDAnswerLength: 4

In this example using an IS-101 voice-compliant modem, a RING indication from the modem will cause the modem to be placed in voice mode, set ulaw audio compression, and via the connected phone line play 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.

The following table describes how the result codes are interpreted by the facsimile server. ๐Ÿ‘‘

  • CONNECT FAX โ€” Default: Fax ยท Class 1: - ยท Class 2: - ยท Class 2.0: --
  • CONNECT โ€” Default: Data ยท Class 1: Unknown ยท Class 2: - ยท Class 2.0: -
  • NO ANSWER โ€” Default: No Answer ยท Class 1: - ยท Class 2: - ยท Class 2.0: -
  • NO CARRIER โ€” Default: No Carrier ยท Class 1: - ยท Class 2: - ยท Class 2.0: -
  • NO DIALTONE โ€” Default: No Dialtone ยท Class 1: - ยท Class 2: - ยท Class 2.0: -
  • ERROR โ€” Default: Error ยท Class 1: - ยท Class 2: - ยท Class 2.0: -
  • FAX โ€” Default: Fax ยท Class 1: - ยท Class 2: - ยท Class 2.0: -
  • DATA โ€” Default: Data ยท Class 1: - ยท Class 2: - ยท Class 2.0: -
  • +FCON โ€” Default: - ยท Class 1: - ยท Class 2: Fax ยท Class 2.0: Fax
  • +FCO โ€” Default: - ยท Class 1: - ยท Class 2: Fax ยท Class 2.0: Fax
  • +FDM โ€” Default: - ยท Class 1: - ยท Class 2: Data ยท Class 2.0: Data
  • +FHNG: โ€” Default: - ยท Class 1: - ยท Class 2: Error ยท Class 2.0: Error
  • VCON โ€” Default: - ยท Class 1: - ยท Class 2: Voice ยท Class 2.0: Voice

Okay so real talk about those columns, bestie. The Default''</purple> column tells you how that result string gets read in <hotpink>either class 1 or 2</hotpink>, unless something explicitly overrides it. The <purple>Class 1'' column is all about result strings that get special handling for modems running in class 1, the Class 2''</purple> column is the special handling for class 2 modems, and the <purple>Class 2.0'' column is the special handling for class 2.0 modems. ๐Ÿ’…

And if you see Unknown in there? That just means the interpretation depends on how the call got answered โ€” if the answering happened for an explicit call type, that type is what's assumed; otherwise a Fax call is presumed. Not guessing, that's literally the rule. ๐Ÿฆ‹


ModemAnswerAgainCmd

The command to answer the phone if ModemAnswerCmd looks like it just got ignored ๐Ÿ™ˆ. Typically this should include a delay escape, so the timing of the answer sits away from the ring โ€” because if the modem can't answer that closely following the ring, you're gonna have a bad time.

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 as coming from a data modem. If this parameter isn't specified, or it's null, then the value of ModemAnswerCmd is used instead. Also peep 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 as coming 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 as coming 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 as being 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. Heads up though โ€” you may wanna shorten this value when you're using the server-based adaptive answer strategy; go look at AdaptiveAnswer. ๐Ÿ‘€

ModemATCmdDelay

A delay, in milliseconds, that should be performed before each ``AT'' command string gets sent to the modem. โณ

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 (think USRs) where setting the serial line parameters does not take effect immediately.

ModemCEDCmd

The command to signal CED and raise the V.21 HDLC transmit carrier after a session has started. This gets used after a procedure interrupt. Normally this command is ATA'', but if the modem doesn't permit ATA'' after a session has started, then ``AT+FTH=3'' should probably be used instead.

ModemCNGCmd

The command to signal CNG and listen for V.21 HDLC after a session has started. This gets used after a procedure interrupt. Normally this command is ATD'', but if the modem doesn't permit ATD'' after a session has started, then ``AT+FRH=3'' should probably be used instead.

ModemCommaPauseTimeCmd

The command to set the time, in seconds, that the modem should pause when it hits 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's to be dialed gets substituted. The command may include a single %d'' where the origin number gets substituted.

Facilities like tone or pulse dialing, outgoing prefixes to route through a PBX, and so on, should all be baked into the dialing command string. Also super important: if possible, a trailing @'' symbol should be included so the modem returns result codes that distinguish between **no answer** and **no carrier**. Using the @'' lets the server reduce the probability that a wrong number is continually redialed. If your modem doesn't support this facility, then it may be necessary to raise the number of retries done when a ``NO CARRIER'' result comes back. ๐Ÿ”ฅ

ModemDialResponseTimeout

The maximum time to wait, in milliseconds, for a response from the modem after sending [the original text just kind of stops right there, bestie โ€” no cap ๐Ÿ’€] This value should be longer than the timeout programmed into the modem through the ModemWaitTimeCmd parameter. This extra server-based timeout exists to guard against modems that can ``lock up'' while dialing the telephone. ๐Ÿ˜ญ

ModemDoPhaseCDebug

Whether or not to query the modem for responses during image data transmission. Normally the modem shouldn't produce any responses during Phase C data transmission. However, in some debugging scenarios (i.e. some Class 2.1 modems may show debugging information) 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, usually S25. This so-called DTR drop can be bypassed entirely by setting ModemDTRDropDelay to 0 โ€” but that should likely only be used for debugging purposes. ๐Ÿ™ˆ

ModemEchoOffCmd

The command to disable echoing of commands sent to the modem.

ModemFlowControl

The type of flow control to use between DTE and DCE; one of NONE'', XONXOFF'' and ``RTSCTS''. This value is used to select the string sent to the modem to initially establish DTE-DCE flow control; one of ModemNoFlowCmd, ModemSoftFlowCmd, and ModemHardFlowCmd. 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; see Class1HFLOCmd, Class1NFLOCmd, Class1SFLOCmd, Class2HFLOCmd, Class2NFLOCmd, and Class2SFLOCmd. โœจ

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 โ€” 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 gets 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 either LSB2MSB when bits are ordered from least-significant-bit to most-significant-bit (as in the CCITT specification) or MSB2LSB when 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, 12000, and 14400. โšก

ModemMfrQueryCmd

The command to send to the modem to get the manufacturer identification string. If this parameter isn't set, then it gets initialized to AT+FMFR?'' for Class 2 modems, or to AT+FMI?'' for Class 2.0 modems, or to ATI3'' for Class 1 modems. And 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. ๐Ÿ‘‘

ModemModelQueryCmd

The command to send to the modem to get the model identification string. If this parameter isn't set, then it gets initialized to to AT+FMDL?'' for Class 2 modems, or to AT+FMM?'' for Class 2.0 modems, or to ATI0'' for Class 1 modems. And 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. ๐Ÿ’œ

  • ModemNoAutoAnswerCmd โ€” the command that stops the modem from picking up all by itself when the phone rings. we do NOT do auto-answer here ๐Ÿ›‘
  • ModemNoAutoAnswerCmdDelay โ€” how long to pause, in milliseconds, after you get the OK back from ModemNoAutoAnswerCmd before you send literally anything else to the modem. and bestie, all input coming in from the modem gets flushed once that pause is over. ๐Ÿซง
  • ModemNoDialtoneRetries โ€” the max number of attempts to snag a dialtone off the line when you're placing a call. how many times we're willing to try ๐Ÿ”
  • ModemNoFlowCmd โ€” the command that turns OFF flow control between DTE and DCE. goodbye flow control ๐Ÿšซ
  • ModemOnHookCmd โ€” the command that puts the phone on hook, aka hangs it up. like actually ending the call ๐Ÿ’€โ˜Ž๏ธ
  • ModemPageDoneTimeout โ€” the max time to wait, in milliseconds, for the modem to say something back after you send a whole page of facsimile data. think: waiting for the response to a Class 2/2.0 AT+FET command. we are waiting, respectfully โณ
  • ModemPageStartTimeout โ€” the max time to wait, in milliseconds, for that first response from the modem when you start sending a page of facsimile data. think: waiting for the response to a Class 2/2.0 AT+FDR command. the opening beat of the page ๐ŸŽฌ
  • ModemRaiseATCommands โ€” says whether ALL the config AT commands for the modem should get auto-raised to upper-case. the standard is upper-case everything in AT commands, and honestly some rare modems are known to act a whole mess with lower-case commands. BUT sometimes an admin wants lower-case commands for a rare edge case, like working around a modem that blacklists dialed numbers. upper-case is the moment, but exceptions exist ๐Ÿ” 
  • ModemRate โ€” the baud rate for DCE-DTE communication. this value can be one of: 115200, 76800, 57600, 38400, 19200, 9600, 4800, 2400, 1200. the default is 19200 because so many modems lock the rate at 19200 when they're sending or receiving facsimile. โš ๏ธ heads up: not every value is supported by every operating system and modem, so go consult stty(1) for the rates your system actually has. default 19200, no cap ๐Ÿ“ถ
  • ModemReadyCmds โ€” a string of commands to throw at the modem during reception initialization. this string goes out to the modem after the standard set of configuration commands the fax server needs. why tho? for stuff like un-busying a DID line so calls can actually come through. let the calls in!! ๐Ÿšชโœจ
  • ModemRecvFillOrder โ€” the bit order to expect for received facsimile data. this value can be either LSB2MSB when bits are ordered from least-significant-bit to most-significant-bit (that's the CCITT specification way) or MSB2LSB when bits are ordered the other direction. per all the various specs, every modem should return data in LSB2MSB order. HOWEVER ๐Ÿ’€ most Class 2 modems (except maybe only Multitech) use MSB2LSB for compatibility with modems built on Rockwell hardware/firmware that shipped with a bug that was way too widespread to ever correct.

if this parameter isn't set, it gets autodetected and set to LSB2MSB for Class 1 and Class 2.0 modems, and MSB2LSB for non-Multitech Class 2 modems. but that autodetect may be straight-up wrong for your modem, so you'll have to specify this parameter explicitly. autodetect is giving best guess energy ๐Ÿ”

  • ModemRecvSuccessCmd โ€” a string of commands to send to the modem after a successful receive session, before the call gets disconnected. victory lap commands ๐Ÿ†
  • ModemResetCmds โ€” a string of commands to send to the modem during initialization. this string goes to the modem before the standard set of configuration commands the fax server requires. โš ๏ธ important: these commands should NOT include normal reset commands that are already specified through other parameters. for example, commands to set up flow control, DCD handling, DTR handling, etc. belong in the appropriate configuration parameters, NOT in this one. also, the soft reset command (usually ATZ) should NOT be included in this string โ€” the servers issue that command explicitly. do not double up, bestie, the servers handle it ๐Ÿ™…โ€โ™€๏ธ
  • ModemResetDelay โ€” the time, in milliseconds, to pause after setting DTR ON while resetting a modem. here's the thing: DTR ON doesn't respond with OK, so this parameter has to be long enough to give the modem time to be ready for ModemSoftResetCmd next. give it a sec to wake up ๐Ÿ˜ด
  • ModemResultCodesCmd โ€” the command that enables result codes. turn the codes on โœ…
  • ModemRevQueryCmd โ€” the command you send to the modem to get a firmware revision identification string back. if this parameter isn't set, it's initialized to AT+FREV? for Class 2 modems, or to AT+FMR? for Class 2.0 modems. and if the parameter starts with a !, then the rest of the string is just taken as the identification string and no command gets issued to the modem at all. sneaky little shortcut ๐Ÿ•ต๏ธโ€โ™€๏ธ
  • ModemSecondAnswerCmd โ€” the command to send to the modem in case that first answer command comes back with OK instead of the indication you'd otherwise expect. this command exists to resume the answer procedure right where the first one left off. take two, continue from where we were ๐ŸŽฏ
  • ModemSendBeginCmd โ€” the command to send to the modem once carrier is established during a transmit operation. this parameter is genuinely useful for systems that can't enable hardware flow control without DCD asserted. niche but iconic ๐Ÿ”ง
  • ModemSendFillOrder โ€” the bit order the modem expects for transmitted facsimile data. this value can be either LSB2MSB or MSB2LSB (peep ModemRecvFillOrder above for the full lore). virtually every modem expects transmitted facsimile data in LSB2MSB bit order. LSB2MSB, basically always ๐Ÿ“ค
  • ModemSetOriginCmd โ€” the command used to set the call origin information before placing a call. the command can include a single %d, which is where the job request faxnumber string gets substituted. it can also include a single %s, which is where the job request faxname string gets substituted. templating era ๐Ÿช„
  • ModemSetVolumeCmd โ€” the commands used 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". also see SpeakerVolume. ๐Ÿ”Šโœจ
  • ModemSetupAACmd โ€” the command to set up adaptive answer support in the modem, if it's available. "adaptive answer" is the term for the ability to tell apart calls coming from facsimile, voice, and data sources. ๐Ÿ“ note that this string is the LAST command issued by the device drivers during setup, so if it needs to, the command string can switch to a different operating mode (for example, on some Rockwell-based modems you have to issue the AT+FAA=1 command in Class 0). last one in, so it can change the vibe ๐ŸŽญ
  • ModemSetupDCDCmd โ€” the command to set up DCD handling. on most systems the facsimile server enables the CLOCAL flag on the tty device the modem is connected to. this should make sure the system does NOT close an open file descriptor associated with the modem when carrier gets dropped. so for most systems and modems, ModemSetupDCDCmd should set up DCD to reflect carrier. carrier dropped โ‰  hang up the fd ๐Ÿ“ก
  • ModemSetupDTRCmd โ€” the command to set up DTR handling so the modem gets reset when the host lowers the DTR signal. the facsimile server uses this facility to make sure modems don't get left in a "locked up" state. nobody likes a stuck modem ๐Ÿ”’
  • ModemSoftFlowCmd โ€” the command to set up software (XON/XOFF) flow control between DTE and DCE. soft flow, soft life ๐ŸŒŠ
  • ModemSoftResetCmd โ€” the command that forces a soft reset of the modem. gentle reset, not a hard one ๐Ÿ”„
  • ModemSoftResetCmdDelay โ€” the time, in milliseconds, to pause after receiving the OK following ModemSoftResetCmd, before any further commands get sent to the modem. let it breathe ๐ŸŒฌ๏ธ
  • 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, regardless of how faxq formatted the image file. ๐Ÿšจ note that when you're using RTFCC, the compression format of the file gets IGNORED, which means the -1, -2, and -3 options for sendfax, ps2fax, and others will only influence how the document is prepared by faxq โ€” they will NOT influence the actual negotiated session parameters. also, Class2RTFCC takes precedence over ModemSoftRTFCC, and if both are enabled, then software-driven RTFCC will not be performed in favor of the firmware-driven RTFCC. firmware wins the tiebreak, periodt โš”๏ธ
  • ModemType โ€” this parameter MUST be set to one of: Class2, Class2.0, Class1, or Class1.0, to indicate that the modem is a Class 2-, Class 2.0-, Class 1-, or Class 1.0-style modem, respectively. if this parameter isn't set, HylaFAX detects which classes the modem supports and makes an internal decision on which one to use. historically, that decision picks Class 2.1 over Class 2.0 over Class 2 over Class 1.0 over Class 1. BUT some exceptions get made โ€” for instance, with US Robotics modems, where Class 2.0 support is avoided. the class hierarchy is real ๐Ÿ‘‘
  • ModemVerboseResultsCmd โ€” the command that enables verbose result codes, as opposed to numeric ones. words not numbers ๐Ÿ’ฌ
  • ModemWaitForConnect โ€” if this is 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. wait for the CONNECT, bestie, it's coming โฑ๏ธ
  • ModemWaitTimeCmd โ€” the command that sets the number of seconds to wait for a carrier signal when placing a call or answering the phone. carrier signal, please show up ๐Ÿ“ž

โœจ T.30 PROTOCOL CONFIGURATION PARAMETERS โœจ

Okay so these parameters are all about the implementation of the CCITT T.30 facsimile protocol inside the Class 1 device driver. And listen โ€” do not go changing these unless you have a full, deep, spiritually-complete understanding of how the server operates. Like, fully. ๐Ÿ’€ These are not vibe-check-and-see settings.

  • FaxT1Timer โ€” the value of the T1 timer, in milliseconds. This one times out the initial session contact, i.e. the receipt of DIS/DCS.
  • FaxT2Timer โ€” the value of the T2 timer, in milliseconds. This one caps how long we wait for expected HDLC frame commands from the remote. Example: waiting on the PPS signal during Phase D. The spec says this should be 6.0s +/- 15%. Usually when this timer expires it means the fax session has failed, periodt. ๐Ÿ˜ญ
  • FaxT4Timer โ€” the value of the T4 timer, in milliseconds. This one caps how long we wait for HDLC frame responses from the remote. Example: waiting for the response to the PPS signal during Phase D. The spec gives this as 3.0s +/- 15% for automatic units and 4.5s +/- 15% for manual units. Usually when this one expires it triggers retransmissions of commands.

๐Ÿฆ‹ CLASS 1 MODEM CONFIGURATION PARAMETERS ๐Ÿฆ‹

These ones are specific to configuring Class 1-style modems. And fr fr, they should not be changed lightly:

  • Class1Cmd โ€” the command that puts 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 ngl a lot of modems just won't support it. But when it works? It may reduce the number of reception failures caused by errors cascading from +FCERROR messages. ๐Ÿ’…
  • Class10AutoFallback โ€” whether or not the modem implements an automatic fallback to G3 mode when V.8 handshaking ANSam is not detected for a Class 1.0 V.34-Fax (SuperG3) call.
  • Class1ColorJPEGSupport โ€” whether or not to enable support for T.30-E full-color facsimile with JPEG compression. Turning this on automatically turns on Class1GreyJPEGSupport too. Iconic.
  • Class1EnableV34Cmd โ€” the command to enable V.34-fax support with at least the desired maximum primary channel rate.
  • Class1ECMCheckFrameLength โ€” whether or not to require the frame length for ECM data frames to be complete when checking for frame integrity. Normally this is not beneficial (and it can be problematic for some senders), but in some cases the frame CRC isn't reliable because of modem behavior. ๐Ÿซถ
  • Class1ECMSupport โ€” whether or not to support the T.30-A error correction protocol. Heads up: using ECM requires 64 kilobytes of free memory per modem in active use.
  • Class1PersistentECM โ€” whether or not to keep retransmitting and allow you to keep receiving image data in ECM protocol that isn't accepted as valid after four successive attempts.
  • Class1ECMFrameSize โ€” the size in bytes of image frames to transmit during ECM protocol. This setting also indicates 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 in environments with extremely poor line quality.
  • Class1ExtendedRes โ€” whether or not to support resolutions other than normal and fine. This option has been deprecated by Class1Resolutions. ๐Ÿ™ˆ
  • Class1ExpectedPageSize โ€” the expected receive page size in bytes, used to calculate wait times for non-ECM Phase D if a premature Phase C carrier loss occurs.
  • 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).
  • Class1FRHNeedsReset โ€” if the modem's +FRH=3 command sometimes needs to be reset in order to do its job, enable this. Doing so limits the wait time for the +FRH=3 command before re-issuing it.
  • Class1FullDuplexTrainingSync โ€” whether or not to enable support for a full-duplex modem feature while receiving training, for when the sender doesn't readily sync.
  • 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.
  • Class1JBIGSupport โ€” whether or not to enable support for T.85 monochrome facsimile with JBIG compression. The options are:
    • true โ€” support in both sending and receiving
    • false โ€” no support
    • send โ€” support only in sending
    • receive โ€” support only in receiving

And also: if a compatible JBIG library was found during the build process, then send support is enabled by default. If the TIFF tools were found to support JBIG during the build process, then receive support is enabled by default. ๐ŸŽ€

  • 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: MMR support also requires ECM support to be enabled. They're a package deal, bestie. ๐Ÿซถ
  • Class1HasRHConnectBug โ€” a Class 1 modem should only report CONNECT after AT+FRH=3 when V.21 HDLC data is detected. But some modems will incorrectly report CONNECT after AT+FRH=3 whenever any carrier is present. In those cases, Class1HasRHConnectBug should be set to true. ๐Ÿ˜ญ
  • Class1HasRMHookIndication โ€” a Class 1 modem should return ERROR after AT+FRM=<mod> when it is on hook. But some modems will incorrectly use ERROR to report a carrier detection mismatch. In those cases, Class1HasRMHookIndication should be set to false.
  • Class1HFLOCmd โ€” the command to set up 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.
  • Class1NFLOCmd โ€” the command to set up 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 their meanings are exactly these:
    • 1 โ€” A4 page length
    • 3 โ€” both A4 and B4 page length
    • 7 โ€” unlimited page length
  • Class1PageWidthSupport โ€” the coded value for page widths supported by the modem. The only correct values and their meanings are exactly these:
    • 1 โ€” A4 page width
    • 3 โ€” both A4 and B4 page width
    • 7 โ€” 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, where Class1EOPWaitCmd is used instead. We have to make sure the high-speed carrier has completely stopped. Per T.30, Chapter 5, Note 4, this delay should be 75 +/- 20 ms.
  • Class1PhaseBRecvTimeoutCmd โ€” in the event that Phase B receive times out without receiving signaling, this command is issued after each attempt. Some callers can require the callee to do something (besides the usual fax signaling) to bridge the call.
  • 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+FTS=1 if the modem responds OK before actually dropping the high-speed TCF carrier.
  • Class1Resolutions โ€” a bitmapped (bit-or'd) value indicating the resolutions to be supported during facsimile operation. The 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

So like, a value of 3 would indicate support for normal, fine, and superfine resolutions. Math is giving โœจ

  • 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 rest of the string is taken to be the modem response and no command is issued to the modem.
  • Class1TCFWaitCmd โ€” the command used to stop and wait before sending TCF, similar to Class1PPMWaitCmd. Per 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 rest of the string is taken to be the modem response and no command is issued to the modem.
  • 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 though, because empirically some machines may need more time. ๐Ÿ˜ฎโ€๐Ÿ’จ
  • Class1ModemHasDLEBug โ€” used to indicate that the modem does not correctly duplicate DLE characters in the V.21 communication to the DTE.
  • Class1MsgRecvHackCmd โ€” if receive failures occur due to +FCERROR just prior to image data reception, setting Class1MsgRecvHackCmd to AT+FRS=1 may help.
  • 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 send AT\n and wait 500ms for an OK result. If this number is zero, then the same is assumed for aborting AT+FRM=n. ๐Ÿซ 

Class1RecvIdentTimer โ€” how long, in milliseconds, you're gonna sit there waiting for that very first DCS when you're receiving a fax. CCITT recommendation T.30 says this should be the value of the T1 timer, periodt. BUT. If you're running one of those adaptive answering schemes โ€” you know, like the one described above under the AdaptiveAnswer parameter โ€” you might need to shorten this timer. She's flexible like that. ๐Ÿ’…

Class1RestrictPoorDestinationsยน โ€” the threshold of destination audio quality corruption at which resolution support gets restricted to ``normal'' and color support gets switched off. Why? To reduce the amount of image data we even try to send to a destination with trash audio quality, which cuts the call duration down, which should make a successful session more likely. Iconic problem-solving honestly. ๐ŸŒธ

The threshold is a ratio โ€” an integer percentage โ€” of the data the destination flagged as corrupt versus the total data sent to that destination across the previous three fax sessions. And okay so, Class1RestrictPoorDestinations does work for destinations with a history of both ECM and non-ECM sessions, but the ECM session history is preferred and weighted considerably higher than the non-ECM session history. ECM stays the main character. ๐Ÿ‘‘

Class1RestrictPoorSenders โ€” same energy, sender edition. This is the threshold of sender audio quality corruption at which resolution support gets restricted to ``normal'' and color support gets disabled. The goal is to reduce the amount of image data a sender with poor audio quality will try to transmit, cutting call duration and improving the odds of a successful session. ๐Ÿซถ

The threshold is the ratio, expressed as an integer percentage, of corrupt data received compared to total data received from the current sender in the previous three fax sessions. Heads up though: Class1RestrictPoorSenders requires a CallIDType of ``calling-number'' to be configured, otherwise it can't match a sender to an entry in the info database. No CallIDType, no vibes. ๐Ÿฆ‹

Class1RMPersistence โ€” how many times we attempt to receive the high-speed data carrier (which results in +FCERROR) before we go ahead and attempt low-speed message carrier reception. Some modems are quick to (maybe incorrectly ๐Ÿ˜ญ) return +FCERROR, and for those lil guys you want a value of 2 or 3. For modems that aren't quick about it, use 1. Tuning this right gives you a kind of "adaptive reception control" for modems that accurately return +FCERROR without supporting Class1AdaptRecvCmd. And for modems that do support Class1AdaptRecvCmd, Class1RMPersistence should probably not be set at 1 โ€” although honestly +FCERROR should almost never happen with those modems anyway.

If your modem doesn't support reporting +FCERROR or adaptive reception control at all, then Class1RMPersistence should probably be set at 0, which shortens the timeout spent looking for the high-speed data carrier โ€” increasing the likelihood of recovery from any dissynchronization. But when Class1RMPersistence is anything other than 0, it's assumed that +FCERROR reporting or Class1AdaptRecvCmd is functional, so the timeout looking for the high-speed data carrier gets lengthened. Pick your fighter. ๐Ÿ’€

Class1SwitchingCmd โ€” the command used to make sure the sending facsimile device has turned its modulator off (i.e. loss-of-carrier), exactly as recommended by T.31: Appendix II.1. โœจ

Class1SendNSF โ€” whether or not to send an NSF signal when answering a fax call. That's it, that's the whole thing. ๐Ÿ™ˆ

Class1SFLOCmd โ€” the command to set up software (XON/XOFF) flow control between DTE and DCE when operating in Class 1. This one gets issued immediately after sending the Class1Cmd to flip the modem into Class 1 operation. Timing is everything bestie. โญ

Class1SSLFaxCert โ€” the relative path to the PEM certificate file for SSL Fax use. Normally this is created for you by faxsetup(8C). ๐ŸŽ€

Class1SSLFaxClientTimeout โ€” the time, in milliseconds, that the SSL Fax server should wait for the client connection to complete before it gives up on SSL Fax and proceeds with a traditional fax operation. ๐Ÿงš

Class1SSLFaxInfo โ€” the formatted hostname and port number for the SSL Fax connection for this modem. (And yes, every modem should use a different port number, don't be messy.) This tells the remote system how to connect through the IP network to this system acting as an SSL Fax server. ๐Ÿ”ฅ

Firewalling and port forwarding should be carefully addressed prior to using this configuration. Do not skip this step, I'm literally begging. ๐Ÿ˜ญ

The format for Class1SSLFaxInfo is <hostname>:<port>. During fax protocol, this information gets made into a URL by prepending ssl://<passcode>@ and it's communicated as part of CSA and TSA signals for SSL Fax. (<passcode> is a string of random characters, very mysterious of it.)

<hostname> may be specified as an IP address โ€” however, in those cases it should be bracketed, like this: [<address>]:<port>. This prevents confusion, especially with IPv6 addresses. ๐Ÿ’œ

Either the sender or the receiver (or both!) must signal an SSL Fax URL in order for SSL Fax to operate at all. And if no Class1SSLFaxInfo is configured for one system, then that system is always dependent on the remote systems to operate as the SSL Fax server. No solo missions. ๐ŸŒˆ

Class1SSLFaxProxy โ€” the formatted password, hostname, and port number (<passcode@<hostname>:<port>) for an SSL Fax proxy connection, to be used if no Class1SSLFaxInfo is configured. This makes HylaFAX establish an outbound SSL Fax connection to a configured SSL Fax proxy server when fax connections to remote systems support SSL Fax. The proxy server then hands the proxied SSL Fax URL back to HylaFAX, which uses it in the CSA and TSA signals for SSL Fax. Middleman but make it slay. ๐Ÿ’…

Class1SSLFaxServerTimeout โ€” the time, in milliseconds, that the SSL Fax client should wait for the connection to the server to complete before abandoning SSL Fax and proceeding with a traditional fax operation. Usually this has to be shorter than 3 seconds. Clock's ticking bestie โณ

Class1SSLFaxSupport โ€” whether or not to enable SSL Fax support. Toggle away. โœจ

Class1TCFMaxNonZero โ€” the maximum percentage of non-zero data bytes permitted in an acceptable received TCF. Important note: this number does not include any leading non-zero data in the received data. See also Class1TCFMinRun. ๐ŸŒธ

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, meaning it should be between 0 and 1500. See also Class1TCFMaxNonZero and Class1TCFMinRunECMMod. ๐Ÿฆ‹

Class1TCFMinRunECMMod โ€” the factor by which Class1TCFMinRun should 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 deal with 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 you're getting receive failures due to +FCERROR right before TCF data reception, setting Class1TCFRecvHackCmd to AT+FRS=1 may help. It's a hack, it's in the name, but it works. ๐Ÿ™ˆ

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 gets received during the training phase of the facsimile reception protocol. Two waits, one parameter. ๐Ÿ’…

Class1TMConnectDelay โ€” the time, in milliseconds, to delay after receiving CONNECT following +FTM before sending image data. Here's the lore: T.31 8.3.3 requires the modem to respond with CONNECT before the modulation training pattern. But if the modem can't buffer all the data sent to it before successful modulation training, then data โ€” especially during TCF, since it's so short โ€” could be lost. ๐Ÿ˜ญ

Many modems reasonably do not follow T.31 in this regard, and thus the default is zero; however, using it with such modems would likely have a negligible effect. And when you're using modems that can buffer data during the training period, the default is also functional. So it's giving "everyone's fine either way". ๐Ÿซถ

The modulator training time period varies by modulation and bitrate. V.17 fast train and V.29 both take less than 400 ms. However, V.27ter can take twice that long, and V.17 slow train can take four times as long. So the early CONNECT stipulation by T.31 8.3.3 becomes programmatically cumbersome for the DTE. Not the vibe. ๐Ÿ˜ฎโ€๐Ÿ’จ

T.31 8.3.3 also requires the modem to transmit constant ones after modulator training completes and before the DTE supplies data. Because of that, some receivers have become dependent on seeing a 1-to-0 bit transition at the outset of Phase C ECM data โ€” and honestly, that same expectation for TCF would not be surprising either, since both Phase C ECM and TCF involve predictable patterns. So, when not using SSL Fax or SuperG3 V.34-Fax, HylaFAX transmits a single byte of ones at the outset of both TCF and Phase C ECM image data to make sure there's a 1-to-0 bit transition. โญ

Such a thing does not seem necessary at the outset of non-ECM Phase C data, though โ€” that data pattern isn't so predictable, and any data loss is likely to go unnoticed anyway. โœจ

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 don't require this feature to be enabled. So like, it's there if you need it bestie. ๐Ÿ‘‘


๐ŸŒˆ 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. Different modem, different rules. ๐ŸŽ€

Class2Cmd โ€” the command to set the modem into Class 2/2.0 operation. The switch-flipper. ๐Ÿ’…

Class2AbortCmd โ€” the command to use to abort an established session. And listen: after using this command to abort a session, the fax software will send ModemOnHookCmd and then reset the modem by dropping DTR. So it's a whole sequence, not just a one-and-done. ๐Ÿฆ‹

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. Would. If you used it. Which, largely, you don't. ๐Ÿ’€

  • Class2APQueryCmd โ€” the lowkey forgotten one ๐Ÿ’… it's a mostly-unused option for modems that ride with ITU-T.32, Class 2.1, standards. It'd be the command you use to query the capabilities of sending and receiving SUB, SEP, and PWD frames. If your modem doesn't support any Class2APQueryCmd, just set it to none and move on bestie ๐Ÿซถ
  • Class2BORCmd โ€” this sets the bit order of sent and received facsimile data. Normally you'd use AT+FBOR=0 so data goes out and comes in as direct bit order (LSB2MSB). But some modems, like the Everex 24/96D, have to use reversed bit order for Phase B and D data exchanges, otherwise a bug drops straight-up garbage into the padding of EOL codes ๐Ÿ˜ญ. Whatever bit order this command picks, it must match up with the ModemSendFillOrder and ModemRecvFillOrder parameters. no cap.
  • Class2BUGCmd โ€” turns tracing of HDLC frames (sent + received by the modem) on or off. That tracing info is supposed to come back to the host in +FHR: and +FHT: status strings. Heads up though: lots of Class 2 modems don't support this at all, and it's basically a diagnostic thing. If your modem has zero support, use none ๐Ÿ’€
  • Class2CIGCmd โ€” the command that sets a polling identifier. Your string gets inserted into the format %s="<id>".
  • Class2CQCmd โ€” the command that sets up the parameters for copy quality checking. Say, for an Everex 24/96D you might set this to AT+FCQ=1\nAT+FBADMUL=20\nAT+FBADLIN=10. You should configure Class2CQCmd to set up all the available copy quality services that Class2CQQueryCmd says you've got. Wanna disable some of those available features? Configure Class2CQQueryCmd with a !, then set Class2CQCmd to match โœจ
  • Class2CQQueryCmd โ€” the command you send to the modem to get the copy quality capabilities string. Fun trick: if the parameter starts with a !, then the rest of the string is taken as the capabilities string and no command goes to the modem at all. That lets you pair it with Class2CQCmd to force copy quality checking to happen in the server instead of the modem. Peep PercentGoodLines and MaxConsecutiveBadLines for the server-side copy quality checking params ๐Ÿ‘€. Oh and โ€” if copy quality checking is configured to be done by the modem, then it is not done by the server. one or the other, bestie.
  • Class2CRCmd โ€” the command used to enable the reception of facsimile.
  • Class2DCCCmd โ€” the command used to set modem capabilities. Inserted into the format %s=vr,br,wd,ln,df,ec,bf,st.
  • Class2DCCQueryCmd โ€” the command you send to the modem to get the Class 2/2.0 capabilities. Same little trick as before: if the parameter starts with a !, the rest of the string is taken as the capabilities string and nothing gets sent to the modem ๐Ÿ’…
  • Class2DDISCmd โ€” the command to set session parameters before dialing. Inserted into the format %s=vr,br,wd,ln,df,ec,bf,st. Setting this parameter turns on support for those Class 2 modems that don't properly implement the AT+FDIS command, by setting up session parameters before the telephone gets dialed. iconic workaround fr.
  • Class2DISCmd โ€” the command used to set the current session parameters. Inserted into the format %s=vr,br,wd,ln,df,ec,bf,st.
  • Class2ECMType โ€” the way the EC parameter in the modem DCC response gets interpreted actually differs between the Class 2 spec (that's 2) and the Class 2.0 spec (that's 2.0). This config parameter lets the administrator pick which type to use. By default, the spec type that corresponds is the one used ๐ŸŽ€
  • Class2HexNSF โ€” whether or not to parse the NSF strings the modem reports 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 while running in Class 2/2.0. It gets issued right after sending the Class2Cmd to flip the modem into Class 2/2.0 operation. For Class 2.0 operation the default is AT+FLO=2.
  • Class2JBIGSupport โ€” whether or not to enable support for T.85 monochrome facsimile with JBIG compression. Your options: true for support in both sending and receiving, false for no support at all, send for sending only, and receive for receiving only. If the modem supports JBIG and a compatible JBIG library was found during the build process, then send support is on by default. And if the modem supports JBIG and the TIFF tools were found during the build to support JBIG, then receive support is on by default ๐ŸŒธ
  • Class2JPEGSupport โ€” whether or not to enable and actually 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 while running in Class 2/2.0. It's issued immediately after sending the Class2Cmd to flip the modem into Class 2 operation. For Class 2.0 operation the default is AT+FLO=0.
  • Class2NRCmd โ€” (Class 2.0 only, bestie ๐Ÿ‘‘) the command to set up negotiation message reporting. For the Class 2.0 driver to work correctly, 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 Class 2.0 driver operation.
  • Class2PACmd โ€” another largely-unused option for modems that support ITU-T.32, Class 2.1, standards. It'd set up the polling address string that's enabled by Class2APCmd.
  • Class2PHCTOCmd โ€” the command to set the Phase C timeout parameter (in seconds). If your modem doesn't support any Class2PHCTOCmd, use none ๐Ÿ’…
  • Class2PIECmd โ€” (Class 2.0 only) the command to control procedure interrupt handling. Procedure interrupts should be disabled, because HylaFAX doesn't provide any mechanism for dispatching procedure interrupts to an administrator. so like, don't.
  • Class2PTSCmd โ€” the command to set the received page status code. When copy quality checking happens in the host, this command can control the post-page response delivered to the sender. But beware โš ๏ธ some modems don't implement this command properly โ€” in that case the server should be configured to not do copy quality check. Check out the PercentGoodLines and MaxConsecutiveBadLines parameters to understand how to defeat copy quality checking.
  • Class2PTSQueryCmd โ€” the command to query the received page status code. You can use it to figure out the post-page response that came back from the receiver. Beware again though ๐Ÿ™ˆ some modems don't implement this one properly either, and in that case you should set this setting to none.
  • Class2PWCmd โ€” yet another largely-unused option for modems supporting ITU-T.32, Class 2.1, standards. It'd set up the password string enabled by Class2APCmd.
  • Class2RecvDataTrigger โ€” the character you send to the modem to trigger it to send received data from the modem over to the host. In draft specification 2388-A this character is specified as DC1 (octal 21), and in the 2388-B specification it's DC2 (octal 22). Most Class 2 modems accept DC1, or both DC1 and DC2. Some modems, though, only accept DC2 ๐Ÿ˜ญ. Note that string parameters can use C-style escape sequences, so DC2, for example, would be specified as "\022".
  • Class2RELCmd โ€” the command to enable delivery of byte-aligned EOL codes in received facsimile. If this parameter is defined, then received facsimile data gets marked to indicate that EOL codes are byte-aligned; otherwise they'll be marked as not (necessarily) having byte-aligned codes.
  • Class2RTFCC โ€” whether or not to enable MultiTech's Real-Time Fax Compression Conversion, which shows up in later firmware revisions for the MT5634ZBA-V92, MT5634ZPX-PCI-V92, and other models. RTFCC lets HylaFAX convert the image compression between MH, MR, and MMR formats no matter how faxq formatted the image file ๐Ÿ”ฅ. If RTFCC is available with your firmware, then the response to AT+FFC=? is non-zero. Note that when you're using RTFCC, the compression format of the file gets ignored โ€” so the -1, -2, and -3 options for sendfax, ps2fax, and others will not influence the actual negotiated session parameters. iykyk.
  • Class2SACmd โ€” a largely-unused option for modems supporting ITU-T.32, Class 2.1, standards. It'd set up the destination subaddress string enabled by Class2APCmd.
  • Class2SendRTC โ€” whether or not to append an explicit "Return To Control" (RTC) signal to the page data when transmitting. The Class 2 and Class 2.0 specs (that's 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 exists just in case your modem doesn't correctly implement that ๐Ÿซถ
  • Class2SFLOCmd โ€” the command to set up software (XON/XOFF) flow control between DTE and DCE while running in Class 2/2.0. It gets issued immediately after sending the Class2Cmd to flip the modem into Class 2/2.0 operation. For Class 2.0 operation the default is AT+FLO=1.
  • Class2SPLCmd โ€” the command to enable a polling request. If your modem doesn't support any Class2SPLCmd, the value none is there for you โœจ
  • Class2TBCCmd โ€” the command you use to turn on stream-mode communication between the host and the modem. If your modem doesn't support any Class2TBCCmd, you can use the value none. slay ๐Ÿ’…
  • Class2UseLineCount โ€” whether or not to use the line count that the modem firmware decoder reports to HylaFAX. simple as that ๐Ÿ‘‘
  • Class2UseHex โ€” whether or not to parse the capability strings your modem reports using hexadecimal values. By default, they're parsed as decimal values. math girlie moment ๐Ÿ”ข
  • Class2XmitWaitForXON โ€” whether or not to wait for an XON character from the modem before sending facsimile data to the modem for transmission. important note, bestie: 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. ๐Ÿซถ

These 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). iykyk โœจ

  • PagerSetupCmds โ€” the commands to send to a modem to prepare the modem for a call to a pager service provider. Typically these commands direct the modem to communicate with the service provider at 300 bps using the V.21 protocol. Per-service provider command strings can be set up in the info database; see hylafax-info(5F). ๐Ÿ“Ÿ
  • PagerMaxMsgLength โ€” the maximum length for a pager text message. Messages longer than this number are truncated. Per-service provider message lengths can be set up in the info database; see hylafax-info(5F). โœ‚๏ธ
  • 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 hang up the phone. no cap, it hangs up ๐Ÿšซ
  • IXOIDProbe โ€” (IXO/TAP only) the time, in seconds, between sending a \r during 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. ack wait vibes ๐Ÿ’Œ

๐Ÿฆ‹ 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(8C) 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). the detective work is real ๐Ÿ”

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 the 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). AT&T DataPort said hello ๐Ÿ‘‘

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. ZyXEL and US Robotics eating โœจ

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. so keep modem stuff out of that zone, bestie ๐Ÿšง


๐ŸŒˆ SEE ALSO ๐ŸŒˆ

  • faxaddmodem(8C)
  • faxq(8C)
  • faxgetty(8C)
  • faxsend(8C)
  • hylafax-server(5F)

and that's a wrap, bestie ๐Ÿ’– the footer says this page's source/version is $Date: 2013-02-26 15:46:36 -0800 and it's the HYLAFAX-CONFIG(5F) manual, dated Tue, 26 Feb 20... vintage 2013 energy, periodt โœจ๐Ÿซถ

๐Ÿ“ฆ where this page comes from