-
achk FLAG Accounting check at start
-
af=Accounting File
-
ar FLAG Remote printer accounting enabled
-
as=Accounting at start
-
connect_grace=Time between jobs
-
connect_interval=Connection interval
-
connect_timeout=Connection timeout
-
control_filter=Control file filter
-
ff=form
feed
-
fo FLAG form feed on open
-
la FLAG Local printer accounting enabled
-
ld=leader
on open (initialization string)
-
lk FLAG Lock IO device
-
lp=IO
device pathname
-
nb FLAG Nonblocking device open
-
network_connect_grace=Interval in secs between jobs
-
of=of
filter
-
retry_econnrefused FLAG Retry if open failed
-
retry_nolink FLAG Retry if open failed
-
rm=the
remote machine to send the job to
-
rp=the
remote print queue to send the job to
-
rw FLAG device opened RW flag
-
server_tmp_dir=temporary directory
-
During the server operations, it will try to create
temporary files in the print queue spool directory. If
this is not desirable, it will create them in the server_tmp_dir directory.
-
If the accounting file specified by af exists, it is opened (af_fd) and the
af_fd is passed as file descriptor 3 to all filters. If
the af value has the form af=|/program then the program is
started and the program STDIN is used as af_fd. If the af value has the form af=host%port, then a TCP/IP connection to
the corresponding port on the remote host is made and the
port used as af_fd. In the latter two cases, the filter
STDIN (file descriptor 0) is
actually opened read/write, and is used when information
is needed from the accounting filter or remote server.
See Accounting Printcap
Options for more information on the LPRng accounting support.
-
If la (local accounting) is true and we are
printing a job or ar (remote
accounting) is true and we are transferring a job, the
as value is examined. If it is a
filter (program) specification, then the program is
started with its STDIN
attached to /dev/null, STDOUT will be read by the print
spooler, STDERR output will
be written to the error log, and file descriptor 3 output
will be appended to the accounting file. The lpd program
will wait until the accounting filter program terminates,
and examine the error code for action, as for the filters
(see errorcodes
below). If the exit status is 0, (JSUCC) then the
printing process will continue, if JHOLD the job will be
held, if JREMOVE the job will be removed, if JFAIL the
job processing will terminate with a JFAIL indication,
otherwise the job processing will terminate with a JABORT
indication.
-
If the accounting filter exited with a JSUCC (no error
code) and the achk (accounting
check) flag is set, the line read from the accounting
filter STDOUT will be
examined. This line should be accept, hold, fail, remove, otherwise the job processing
terminates with a JABORT indication. An accept will allow the job to be printed,
hold will hold the job, fail will cause the job to fail, remove will cause the job to be
removed.
-
If the connect_grace value is
non-zero and the server is opening a device or network_connect_grace is non-zero and a
network connection is being made, the server will pause
the specified time. This is to accommodate devices which
need a recovery time between jobs.
-
The lp option is checked to
determine the type of IO device.
-
The IO device specified by lp
is opened write-only or read-write if the rw flag is true, and the resulting file
descriptor is io_fd. If the nb
flag is set, a non-blocking open will be done as well. If
the lk (lock device) flag is
true, the device will be locked against use by other lpd servers.
-
If a host%port combination, a
TCP/IP connection will be opened to the remote port and
the connection will be used as io_fd.
-
If a filter program is specified, the filter program
will be run and the STDIN of
the filter will be used as the device file
descriptor.
-
If a rp@rm combination, or
none of the above combinations are true and the rm and rp
values are non-zero, then the job will be transferred to
a remote printer. The type of operation will be a job
transfer, rather than printing operation.
-
If the connect_timeout value
is non-zero, a timeout is setup for the device or socket
open. If the device or connection open does not succeed
within the timeout, then the open operation fails.
-
If a connection is to a network address (i.e. - connect() system call) and the
connection attempt fails with an ECONNREFUSED error, if the retry_econnrefused flag is set then the
connection attempt is retried, but this time using an
alternative port number. See RFC1179 for details. This is
repeated until all of the possible originating port
numbers are exhausted.
-
If the open or connect operation fails, and the retry_nolink flag is set, then the
server will pause for a minimum of connect_grace plus a multiple of connect_interval seconds based on
the number of attempts before retrying the open
operation. Note that the interval may increase as the
number of attempts increases.
-
If printing a job and the :of
filter is specified, it is created with its STDOUT (fd 1) attached to the io_fd. Its
stdin (of_fd) will be used in the steps listed below. If
there is no :of filter, then the
of_fd value will be the io_fd descriptor.
-
If transferring a job and the control_filter option is specified, then
the program specified by the control_filter value will be run. It will
have its STDIN set to the
control file, and its STDOUT
output will be used as the new value of the control file
to transfer to the remote host. See Filter Command Line Options and
Environment Variables for details of options passed
to the control filter, and errorcodes for the exit
codes of the filter.
-
If the operation is a job transfer, the operation
proceeds as outlined in RFC1179, and then the Normal Termination operations are
carried out.
-
If the operation is a print operation and the ld (leader on open) value is
provided, the string is translated (escapes removed) and
written to the of_fd file descriptor.
-
If the fo (form feed on open)
flag is true, then the ff (form
feed) string is translated (escapes removed) and written
to the of_fd file descriptor.