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 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 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 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 (mod_ipp.so). 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:
An IPP request is sent from the client to the server.
The Apache web server accepts the connection.
The Apache web server then hands the connection to mod_ipp.
mod_ipp passes the connection and configuration data to libipp-listener.
libipp-listener reads the request by using lipipp-core.
libipp-listener dispatches the request to the operation handler located in lipipp-listener.
The operation handler converts the request to a PAPI call and then makes the call.
The PAPI call is translated to a print service specific request by using psm-lpsched.
The print service responds to the request.
The psm-lpsched command converts the response to PAPI results.
The libpapi operation returns to the libipp-listener operation handler.
The libipp-listener operation handler passes results to dispatcher.
The libipp-listener dispatcher writes results to client by using the libipp-core library.
The dispatcher returns the mod_ipp entry point.