System Administration Guide: Printing

Overview of the IPP Listening Service

The IPP Listening Service, also referred to as the listener, provides an IPP network protocol service that enables print client systems with a means of interacting with a print service on the system that is running the listener. This listener implements server-side IPP support, which includes a set of standard operations and attributes. The listener is implemented on Oracle Solaris as an Apache module and a series of shared libraries containing IPP operation and wire support. The IPP software stack is installed when the Oracle Solaris OS is installed on the system. The IPP listening service is an SMF service that depends on the print service to run. As a result, IPP is automatically enabled on a print server when the first print queue has been added . It is also disabled when the last print queue has been removed.

On the front end, IPP server support is layered on top of HTTP, Version 1.1. The server receives IPP operations through an HTTP POST request. The server then performs the requested operation and sends a response back to the client via HTTP. These operations include, but are not limited to, submitting and canceling a print job, and querying attributes of a printer, a print job, or all the print jobs that have been queued to a printer. On the back end, the IPP listener performs operations by communicating with a print spooler. In the Oracle Solaris OS, this spooler is currently the lpsched daemon.

How the IPP Listening Service Works

The IPP Listening Service implementation (server-side support) is embedded under the Apache web server. The web server receives IPP operations through HTTP POST requests. When an HTTP POST request is received, it is then passed on to the Apache IPP module ( Based on configuration, the Apache web service can also provide an authentication service and be used for encryption between print client and server. The listening service runs as it's own dedicated instance of Apache.

This process is as follows:

  1. An IPP request is sent from the client to the server.

  2. The Apache web server accepts the connection.

  3. The Apache web server then hands the connection to mod_ipp.

  4. mod_ipp passes the connection and configuration data to libipp-listener.

  5. libipp-listener reads the request by using lipipp-core.

  6. libipp-listener dispatches the request to the operation handler located in lipipp-listener.

  7. The operation handler converts the request to a PAPI call and then makes the call.

  8. The PAPI call is translated to a print service specific request by using psm-lpsched.

  9. The print service responds to the request.

  10. The psm-lpsched command converts the response to PAPI results.

  11. The libpapi operation returns to the libipp-listener operation handler.

  12. The libipp-listener operation handler passes results to dispatcher.

  13. The libipp-listener dispatcher writes results to client by using the libipp-core library.

  14. The dispatcher returns the mod_ipp entry point.