LPRng-HOWTO: 15 Oct 2001 (For LPRng-3.7.9)
Prev | Chapter 15. Job Processing | Next

# 15.10. Forwarding Jobs

Options:

- `bk` Berkeley compatible control file

- `bq_format=`format of filtered output

- `lpd_bounce` filter job and transfer output

- `control_filter=`Control file filter

- `control_file_line_order=`Control file line order

- `nline_after_file` N line after data file

- `send_data_first` send data files first

If a spool queue is doing store and forward operations, then rather than printing a job the control files and data files are sent to the remote printer. In order to do this, the following items must be arranged.

- If necessary, the job must be processed by filters on the local host.

- The control file must be prepared and updated according to the requirements of the remote site.

- A connection must be established to the remote site.

- The data files and control files must be transferred to the remote site.

One of the more serious problems is when a print spooler (LPR) program does not generate print jobs in a manner compatible with a remote system. While LPRng performs checks for improper implementations of RFC1179, it will try to accept a job even under the most severe abuse of the protocol. However, other spoolers are not so forgiving. Some spoolers require that the contents of the control file be in exactly the order that the original 1988 BSD lpr software generated them. While some entries can be missing, all the entries present in the file must be in an explicit order.

The `bk` (Berkeley lpd compatible control file) option causes lpr and lpd to reformat the control file, removing objectionable entries. The control file of a job being sent to a remote printer will have its control file entries restricted to letters in (and the same order) as HPJCLIMWT1234. You can use the `control_file_line_order` option to specify an even more restricted set, and use the `nline_after_file` option to have the file information line (`N` value) come after the data file entry.

However, there are some very odd commercial implementations that require more information than is present. To assist with this, the `control_filter` option can be used. This specifies a program that will process the control file before it is sent to a remote destination. The `control_filter` program is run with the standard set of filter options. STDIN is attached to the control file and the STDOUT will be used as the control file value sent to the remote host.

The exit code of the `control_filter` is used to determine whether to proceed in processing. See Errorcodes for details.

Sequence of Operations:

1. A copy of the control file information is made and the copy will be modified during processing, rather than the original.

2. If the `lpd_bounce` option is specified then a temporary file is created and the job is printed using the procedures for printing to a device, but to the file. This includes all of the filter operations, banners, and so forth. The working copy of the control file is set to have the temporary file as the data file to be sent to the remote destination, and the data file format is set to the `bq_format` value.

3. The control file is rewritten according to the requirements of the routing information, if any. For each destination in the routing information and each copy, a new job identifier value will be generated.

4. The control file is rewritten according to the `bk` and `control_file_line_order` options. If a control filter is specified, the control filter program is run and the output of the program is used as the new control file.

5. A connection is made to the remote host, and the data and control files are transferred to the remote host using the RFC1179 protocol. If the `send_data_first` option is specified the data files are sent first.

6. If the job was sent successfully, the job status is updated in the same manner as for a printed job.

Prev | Home | Next
Abnormal Termination | Up | Debugging