<?Pub UDT _bookmark _target?><?Pub UDT __target_1 _target?><?Pub UDT registeredtm trademark?><appendix id="fddwm"><?Pub Tag atict:info tracking="off" ref="1"?><?Pub Tag atict:user
user="jonj" fullname="Juanita Heieck"?><?Pub Tag atict:user user="jh118764"
fullname="Juanita Heieck"?><?Pub Tag atict:user user="wsm" fullname=""?><title>Using
the Internet Printing Protocol</title><highlights><para>This appendix includes information for using the Internet Printing Protocol
(IPP) in the Solaris OS. IPP provides interoperability for CUPS and Windows
clients. In the Solaris OS, the PAPI implementation of IPP provides both server-side
and client-side printing support.</para><itemizedlist><para>The following information is included in this appendix:</para><listitem><para><olink targetptr="gdqrc" remap="internal">Overview of Solaris IPP Support</olink></para>
</listitem><listitem><para><olink targetptr="gfipj" remap="internal">Overview of the IPP Listening Service</olink></para>
</listitem><listitem><para><olink targetptr="gdtbc" remap="internal">IPP Components</olink></para>
</listitem><listitem><para><olink targetptr="gfkwk" remap="internal">IPP Support Model</olink></para>
</listitem><listitem><para><olink targetptr="gdxsq" remap="internal">IPP Server-Side Support</olink></para>
</listitem><listitem><para><olink targetptr="gdxth" remap="internal">IPP Client-Side Support </olink></para>
</listitem><listitem><para><olink targetptr="gdtcv" remap="internal">IPP Attributes</olink></para>
</listitem><listitem><para><olink targetptr="gedvz" remap="internal">IPP Operation Keywords</olink></para>
</listitem>
</itemizedlist><itemizedlist><para>For more information about open printing, go to the following web sites:</para><listitem><para><ulink url="http://www.opensolaris.org/os/community/printing/" type="url"></ulink></para>
</listitem><listitem><para><ulink url="http://sf.net/projects/openprinting" type="url"></ulink></para>
</listitem>
</itemizedlist>
</highlights><sect1 id="gdqrc"><title>Overview of Solaris IPP Support</title><para>IPP is an application level network printing protocol that can be used
for distributed printing though the use of Internet tools and technologies.
The protocol was initiated to provide universal solutions for printing documents
from the Internet. IPP is employed by several system and printer vendors because
the protocol includes tools that are necessary to make a broad set of standard
requests and receive standard responses from print client systems. IPP provides
versioning, extensibility, and security, as well as enhanced functionality,
including improvements in job and printer status retrieval.</para><para>IPP support in the Solaris release is comprised of client-side support
and server-side support. Both the client-side and the server-side support
share some common elements, as well as elements that are unique to either
client or server operations. IPP client and server support shares a base code
that implements some of these common components. Server-side support for IPP
is available, starting with the <emphasis role="strong">Solaris 10 3/05</emphasis> release.
Client-side support was introduced in the <emphasis role="strong">Solaris
10 5/08</emphasis> release.</para><itemizedlist><para>With IPP, you can perform the following tasks:</para><listitem><para>Find out about a printer's capabilities</para>
</listitem><listitem><para>Submit print jobs to a printer</para>
</listitem><listitem><para>Determine the status of a printer or a print job</para>
</listitem><listitem><para>Cancel a previously submitted print job</para>
</listitem><listitem><para>Hold, release, and restart print jobs</para>
</listitem><listitem><para>Modify print jobs</para>
</listitem><listitem><para>Move print jobs between queues</para>
</listitem><listitem><para>Accept, reject, enable, and disable print queues</para>
</listitem><listitem><para>Modify and delete printers</para>
</listitem>
</itemizedlist><para>IPP includes a simplified model for printing that abstracts the various
facets of real world printing solutions. This model uses objects, attributes,
and a set of operations that are performed against these objects. IPP uses
these abstracts to communicate information between print service consumers,
or customers, and print service providers in a detailed, standard, extensible,
and secure manner.</para>
</sect1><sect1 id="gfipj"><title>Overview of the IPP Listening Service</title><para>The IPP Listening Service, also referred to as the <emphasis>listener</emphasis>,
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.</para><para>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 <command>lpsched</command> daemon.</para><sect2 id="gfipx"><title>How the IPP Listening Service Works</title><para>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 (<command>mod_ipp.so</command>). 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.</para><para>This process is as follows:</para><orderedlist><listitem><para> An IPP request is sent from the client to the server.</para>
</listitem><listitem><para>The Apache web server accepts the connection.</para>
</listitem><listitem><para>The Apache web server then hands the connection to <command>mod_ipp</command>.</para>
</listitem><listitem><para><command>mod_ipp</command> passes the connection and configuration
data to <command>libipp-listener</command>.</para>
</listitem><listitem><para>l<command>ibipp-listener</command> reads the request by using <command>lipipp-core</command>.</para>
</listitem><listitem><para><command>libipp-listener</command> dispatches the request
to the operation handler located in l<command>ipipp-listener</command>. </para>
</listitem><listitem><para>The operation handler converts the request to a PAPI call
and then makes the call.</para>
</listitem><listitem><para>The PAPI call is translated to a print service specific request
by using <command>psm-lpsched</command>.</para>
</listitem><listitem><para>The print service responds to the request.</para>
</listitem><listitem><para>The <command>psm-lpsched</command> command converts the response
to PAPI results.</para>
</listitem><listitem><para>The <command>libpapi</command> operation returns to the <command>libipp-listener</command> operation handler. </para>
</listitem><listitem><para>The <command>libipp-listener</command> operation handler passes
results to dispatcher.</para>
</listitem><listitem><para>The <command>libipp-listener</command> dispatcher writes results
to client by using the <command>libipp-core</command> library.</para>
</listitem><listitem><para>The dispatcher returns the <command>mod_ipp</command> entry
point.</para>
</listitem>
</orderedlist>
</sect2>
</sect1><sect1 id="gdtbc"><title>IPP Components</title><para>The following table describes the components that make up IPP support
in the Solaris OS:</para><table frame="all" id="geddv"><title>IPP Components</title><indexterm><primary>IPP supported components</primary>
</indexterm><indexterm><primary>supported IPP components</primary>
</indexterm><indexterm><primary>functions of the IPP components</primary>
</indexterm><indexterm><primary><command>httpd</command></primary><secondary>IPP component</secondary>
</indexterm><indexterm><primary>IPP component</primary><secondary><command>httpd</command></secondary>
</indexterm><tgroup cols="2" colsep="1" rowsep="1"><colspec colwidth="33.05*"/><colspec colwidth="66.95*"/><thead><row><entry><para>Component</para>
</entry><entry><para>Function</para>
</entry>
</row>
</thead><tbody><row><entry><para><command>httpd</command></para>
</entry><entry><para>The Apache Web Server. This provides an HTTP transport listener that
can listen for HTTP requests on the IANA registered IPP port of tcp/631. Once
a request has been received, it is passed on to the IPP Apache module.</para>
</entry>
</row><row><entry><para><command>mod_ipp.so</command></para><para><indexterm><primary><command>mod_ipp.so</command></primary><secondary>IPP component</secondary></indexterm><indexterm><primary>IPP component</primary><secondary><command>mod_ipp.so</command></secondary></indexterm></para>
</entry><entry><para>The Apache IPP module. This Apache module looks at the clients HTTP
request to determine if it looks like an IPP request (mime-type of <filename>application/ipp</filename> and HTTP POST operation). Once it has been determined to be an
IPP request it is passed on to the IPP listener library. This module also
introduces and processes IPP-specific Apache configuration directives.</para>
</entry>
</row><row><entry><para><command>libipp-listener.so</command></para><para><indexterm><primary>IPP component</primary><secondary><command>libipp-listener.so</command></secondary></indexterm><indexterm><primary><command>libipp-listener.so</command></primary><secondary>IPP component</secondary></indexterm></para>
</entry><entry><para>The IPP listener library. This library makes use of a core IPP marshaling
library to decode the IPP request and dispatch it to one of it's IPP operation
implementation functions. These functions convert the IPP request into PAPI
calls to interact with the local print service. Once serviced, the listener
library encodes and sends the results back to the requesting client.</para>
</entry>
</row><row><entry><para><command>libipp-core.so</command></para><para><indexterm><primary><command>libipp-core.so</command></primary><secondary>IPP component</secondary></indexterm><indexterm><primary>IPP component</primary><secondary><command>libipp-core.so</command></secondary></indexterm></para>
</entry><entry><para> The IPP marshaling library decodes and encodes IPP byte streams for
reception and transmission on the wire.</para>
</entry>
</row><row><entry><para><command>libpapi.so</command></para><para><indexterm><primary><command>libpapi.so</command></primary><secondary>IPP component</secondary></indexterm><indexterm><primary>IPP component</primary><secondary><command>libpapi.so</command></secondary></indexterm></para>
</entry><entry><para> The PAPI library provides applications like the IPP listening service
a means of interacting with the print service.</para>
</entry>
</row>
</tbody>
</tgroup>
</table><sect2 id="gdxss"><title>IPP Libraries</title><para><emphasis role="strong">The IPP Listening Service library</emphasis> (<command>libipp-listener</command>) &ndash; Is where the bulk of the protocol request
processing occurs. The library reads and validates requests by using the core
IPP library, <command>libipp-core.so</command>. After the request has been
validated, the request is translated to a series of client API calls. The
result of these calls are then translated into an appropriate IPP response
by using the core IPP library. The response is returned to the client system
by the web server. The interface to the listening service library is a project
private interface that is specific to the IPP server-side implementation.</para><para><emphasis role="strong">The IPP Core library</emphasis> (<command>libipp-core.so</command>) &ndash; Is shared between client and server operation. The IPP
core library contains routines that enable it to read and write protocol requests
and responses. The library converts IPP request and response data between
the standard binary representation and a set of common data structures. Ultimately,
this common data representation is used in translating requests to and from
a print service neutral representation and passed between a generic printing
interface, <command>libpapi.so</command>. Since both client-side and server-side
IPP support must perform this function, this is shared by clients and servers.</para><para><emphasis role="strong">The PAPI library</emphasis> (<command>libpapi.so</command>) &ndash;
Provides applications a print service independent means of interacting with
a print service or protocol. In this instance, it provides the Apache IPP
listening service a means of interacting with the local LP service. It determines
the print service to interact with based on client-side queue configuration
data stored in the <command>printers.conf</command> configuration database.</para>
</sect2>
</sect1><sect1 id="gfkwk"><title>IPP Support Model</title><para>The sections that follow describe the various aspects of the IPP support
model.</para><sect2 id="gfhzz"><title>IPP Object Model</title><para>IPP contains two basic object types: Printer and Job. Each object type
contains characteristics of a real printer or a real print job. Each object
type is defined as a set of possible attributes that can be supported by that
particular object type.</para><para>To enable all Printer and Job objects to be unambiguously referenced,
they are all identified by a Uniform Resource Identifier (URI). The URI concept
and implementation as an identifier is useful because it provides a means
of uniquely identifying both the method of communicating with the print service
(IPP) and a distinct network identifier for a printer queue (<filename>//server/printers/queue</filename>) or job.</para><para>When a print request is created, the IPP protocol message generated
must contain the <literal>printer-uri</literal> of the Printer object the
operation is to be performed against. Possible values for a <literal>printer-uri</literal> can
be retrieved from a printer object or naming service <literal>printer-uri-supported</literal> attribute.</para>
</sect2><sect2 id="gdsva"><title>IPP Printer Object</title><para>The Printer object is the main object in the IPP model. The Printer
object provides the server-side support for IPP. The Printer object contains
the functions that are normally associated with physical output devices. These
functions include spooling, scheduling, transformation, and managing of multiple
devices that are associated with the print server. Printer objects are uniquely
identified by a <literal>printer-uri</literal>. They can be registered as
entries in a directory for the purpose of searching and locating static information
about the Printer object, such as name, context, and printer capabilities.
Dynamic information, for example, the number of jobs that are queued to the
printer, errors and warnings, are associated with the Printer object itself.</para><note><para>A Printer object can be used to represent a real or virtual device,
as long as the semantics are consistent with those of a Printer object.</para>
</note><para>IPP clients implement the protocol on the client-side, providing you,
or a program running on your behalf, the ability to query Printer objects
for the purpose of submitting and managing print jobs. The IPP server is the
part of the Printer object that implements the application semantics of the
print service. Printer objects can be embedded in an output device or they
can be implemented on network host that communicates with an output device.</para><para>When a job is submitted to a Printer object, the Printer object validates
the attributes in the request and then creates the Job object. When you query
a job status or monitor its progress, you are interacting with the Job object.
If you cancel a print job, you are using the Job objects's Cancel-job operation.
For more information about Job object operations, see <olink targetptr="gedvz" remap="internal">IPP
Operation Keywords</olink>.</para>
</sect2><sect2 id="gdsuv"><title>IPP Job Object</title><para id="gdsvd">A Job object is used to model a print job. Job objects contain
documents. The information that is required to create a Job object is sent
to the print sever in the form of a create request when you initiate a print
request through the IPP client to the Printer object. The Printer object validates
the create request, and if accepted, the Printer object then creates a new
Job object. This object is uniquely identified by a combination of <literal>printer-uri</literal> and <literal>job-id</literal> attributes or a<literal> job-uri</literal> attribute.
See <olink targetptr="gedvz" remap="internal">IPP Operation Keywords</olink> for more details.</para>
</sect2>
</sect1><sect1 id="gdxsq"><title>IPP Server-Side Support</title><para>The IPP listening service provides an IPP network protocol service that
enables print client systems a means of interacting with a print service on
the system that is running the listener. This listener implements server-side
IPP protocol support that includes a broad set of standard operations and
attributes. The listener is implemented in the Solaris OS as an Apache module
and a series of shared libraries that contain 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 . IPP is disabled when the last
print queue has been removed.</para><para>Server-side support for IPP starts with the IPP module, <command>mod_ipp</command>.
The listening service uses the Apache web server because the Solaris OS already
ships with Apache software. The Apache module uses the Dynamic Shared Object
(DSO) interface to plug in under the web server. Using the DSO interface,
the module includes configuration support for the IPP Listening service and
an entry point for the web server to hand the listener the HTTP connection.
This modular approach enables the IPP support to reuse Apache delivered encryption
and authentication mechanisms</para><mediaobject><imageobject><imagedata entityref="IPP_comp" width="133"/>
</imageobject><textobject><simpara>Figure of components that make up the IPP server configuration.
Further explanation included in surrounding text.</simpara>
</textobject>
</mediaobject><sect2 id="gdxtk"><title>Configuration of IPP Server-Side Data</title><para>The IPP listening service configuration file, <filename>/etc/apache/httpd-standalone-ipp.conf</filename>, is like any normal Apache 1.3 configuration file. The configuration
files takes any Apache 1.3 configuration directives that you want to use. </para><itemizedlist><para>The default configuration includes the following features:</para><listitem><para>Listening on port 631.</para>
</listitem><listitem><para>Loading of a minimal set of Apache modules.</para>
</listitem><listitem><para>Enabling all supported IPP operations at the <filename>/printers/path</filename> (<filename>ipp://server/printers/</filename>) without requiring
authentication.</para>
</listitem>
</itemizedlist><para>The default operations that are enabled for <filename>/printers/</filename> is
limited to a set of operations that poses less of a security risk. However,
all operations are enabled at the <filename>/admin/path</filename> (<filename>ipp://server/admin/</filename>), with basic authentication required.</para><para>The <command>mod_ipp</command> Apache configuration options to choose
from are described in the following table:</para><table frame="all" id="gdxsh"><title><command>mod_ipp</command> Apache Module
Configuration Options:</title><tgroup cols="2" colsep="1" rowsep="1"><colspec colwidth="50*"/><colspec colwidth="50*"/><thead><row><entry><para><emphasis role="strong">Value</emphasis></para>
</entry><entry><para><emphasis role="strong">Description</emphasis></para>
</entry>
</row>
</thead><tbody><row><entry><para><literal>ipp-conformance</literal></para>
</entry><entry><para>Selects level of protocol checking. The default is <emphasis>automatic</emphasis>,
which provides maximal client interaction.</para>
</entry>
</row><row><entry><para><literal>ipp-operation</literal></para>
</entry><entry><para>Enables you to selectively enable or disable IPP operation support for
one more IPP operations.</para>
</entry>
</row><row><entry><para><literal>ipp-default-user</literal></para>
</entry><entry><para>Selects the user name to use when contacting the local print service.
 The default is the <literal>lp</literal> print user, which enables more functional
proxying.</para>
</entry>
</row><row><entry><para><literal>ip-default-service</literal></para>
</entry><entry><para>Selects the default print service to direct requests to.  The default
is the <command>lpsched</command> daemon and currently only has been tested
against <command>lpsched</command>.</para>
</entry>
</row>
</tbody>
</tgroup>
</table><para>The following table shows the conformance checking types for the Apache
Web Server Configuration. The syntax to use is:</para><screen>ipp-conformance <replaceable>value</replaceable></screen><table><title>Apache Web Server Conformance Checking Types</title><tgroup cols="2"><?PubTbl tgroup dispwid="956.00px"?><colspec colname="col1" colwidth="0.62*"/><colspec colname="col2" colwidth="1.38*"/><tbody><row><entry><para><emphasis role="strong">Value</emphasis></para>
</entry><entry><para><emphasis role="strong">Meaning</emphasis></para>
</entry>
</row><row><entry><para>Automatic</para>
</entry><entry><para>Only check that the requested operation is supported by the protocol
listener. (default)</para>
</entry>
</row><row><entry><para>1.0</para>
</entry><entry><para>Check that the request conforms to IPP/1.0.</para>
</entry>
</row><row><entry><para>1.1</para>
</entry><entry><para> Check that the request conforms to IPP/1.1.</para>
</entry>
</row>
</tbody>
</tgroup>
</table><para>The following is an annotated example of an apache configuration file:</para><programlisting>if mod_ipp is loaded User lp run as "lp"
URI: ipp://{host]/printers/{queue}
SetHandler application/ipp use mod_ipp for this location
ipp-conformance strict enable strict protocol checking (default)
ipp-operation all enable enable all supported operations</programlisting>
</sect2><sect2 id="gedvz"><title>IPP Operation Keywords</title><para>IPP objects support operations. An operation consists of a request and
a response. When a print client communicates with an IPP object, the client
issues an operation request to the URI for that object. Operation requests
and responses have parameters that identify the operation. Operations also
have attributes that affect the run time characteristics of the operation.
These operation-specific attributes are defined as operation attributes. Print
requests contain operation attributes, object attributes, and the required
document data to perform the specific operation. Each request requires a response
from the object. Each response indicates success or failure of the operation
with a corresponding status code as a response parameter. Responses contain
operation attributes, object attributes, and status messages that are generated
during the operation request.</para><para>The following table describes the IPP operation keywords
for the Apache Web Server Configuration.</para><table><title>IPP Operation Keywords</title><tgroup cols="2"><?PubTbl tgroup dispwid="950.00px"?><colspec colname="col1" colwidth="0.61*"/><colspec colname="col2" colwidth="1.39*"/><tbody><row><entry><para><emphasis role="strong">Value</emphasis></para>
</entry><entry><para><emphasis role="strong">Meaning</emphasis></para>
</entry>
</row><row><entry><para><literal>All</literal></para>
</entry><entry><para>This keyword is used in place of an operation. The keyword is meant
to signify that all operations that are supported by <command>mod_ipp</command> are
selected.</para>
</entry>
</row><row><entry><para><literal>Required</literal></para>
</entry><entry><para>This keyword is used in place of an operation. The keyword is meant
to signify that all the required operations, as defined in RFC-2911, are selected,
including the following: <literal>print-job</literal>, <literal>cancel-job</literal>, <literal>get-job-attributes</literal>, <literal>get-jobs</literal>, and <literal>get-printer-attributes</literal>.</para>
</entry>
</row><row><entry><para><literal>Print-job</literal></para>
</entry><entry><para> A client wants to submit a print job with only a single document. The
document data is sent with the request.</para>
</entry>
</row><row><entry><para><literal>Print-uri</literal></para>
</entry><entry><para>Unsupported</para>
</entry>
</row><row><entry><para><literal>Validate-job</literal></para>
</entry><entry><para> A client wants to validate that a print job can be handled by the scheduler
before submitting a print job.</para>
</entry>
</row><row><entry><para><literal>Create-job</literal></para>
</entry><entry><para>A client wants to submit a print job with multiple documents. The documents
are sent with the <literal>send-document</literal> and <literal>send-uri</literal> operations.</para>
</entry>
</row><row><entry><para><literal>Send-document</literal></para>
</entry><entry><para>A client wants to add a document to a print job that is created with
the <literal>print-job</literal> operation. The document data is sent with
the request.</para>
</entry>
</row><row><entry><para><literal>Send-uri</literal></para>
</entry><entry><para>Unsupported</para>
</entry>
</row><row><entry><para><literal>Cancel-job</literal></para>
</entry><entry><para> A client wants to cancel a print job.</para>
</entry>
</row><row><entry><para><literal>Get-job-attributes</literal></para>
</entry><entry><para> A client wants to gather information about a print job.</para>
</entry>
</row><row><entry><para><literal>Get-jobs</literal></para>
</entry><entry><para> A client wants to gather a list of print jobs in a particular print
queue.</para>
</entry>
</row><row><entry><para><literal>Get-printer-attributes</literal></para>
</entry><entry><para> A client wants to gather information about a particular print queue.</para>
</entry>
</row><row><entry><para><literal>Hold-job</literal></para>
</entry><entry><para> A client wants to hold a particular print job.</para>
</entry>
</row><row><entry><para><literal>Release-job</literal></para>
</entry><entry><para>A client wants to release a particular print job.</para>
</entry>
</row><row><entry><para><literal>Restart-job</literal></para>
</entry><entry><para>A client wants to restart a particular print </para>
</entry>
</row><row><entry><para><literal>Pause-printer</literal></para>
</entry><entry><para>	 A client wants to pause (disable) a particular print queue. This operation
will stop the processing of print requests in the queue. Note that the operation
does not stop the queue from accepting jobs.</para>
</entry>
</row><row><entry><para><literal>Resume-printer</literal></para>
</entry><entry><para>A client wants to resume (enable) processing of jobs in a particular
print queue.</para>
</entry>
</row><row><entry><para><literal>Purge-jobs</literal></para>
</entry><entry><para>A client wants to remove all jobs from a particular print queue.</para>
</entry>
</row><row><entry><para><literal>Set-printer-attributes</literal></para>
</entry><entry><para>Create or modify attributes of a printer.</para>
</entry>
</row><row><entry><para><literal>Set-job-attributes</literal></para>
</entry><entry><para>Modify attributes of an existing print job.</para>
</entry>
</row><row><entry><para><literal>Enable-printer</literal></para>
</entry><entry><para>Resume (accept) queueing of print jobs.</para>
</entry>
</row><row><entry><para><literal>Disable-printer</literal></para>
</entry><entry><para>Disable (reject) queueing of print jobs.</para>
</entry>
</row><row><entry><para><literal>cups-get-default</literal></para>
</entry><entry><para>Retrieve the default destination for a print service.</para>
</entry>
</row><row><entry><para><literal>cups-get-printers</literal></para>
</entry><entry><para>Enumerate all printers available from the print service.</para>
</entry>
</row><row><entry><para><literal>cups-get-classes</literal></para>
</entry><entry><para>Enumerate all classes available from the print service.</para>
</entry>
</row><row><entry><para><literal>cups-accept-jobs</literal></para>
</entry><entry><para>CUPS specific equivalent of Enable-printer.</para>
</entry>
</row><row><entry><para><literal>cups-reject-jobs</literal></para>
</entry><entry><para>CUPS specific equivalent of Disable-printer.</para>
</entry>
</row><row><entry><para><literal>cups-move-jobs</literal></para>
</entry><entry><para>Move jobs between queues in the same print service.</para>
</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
</sect1><sect1 id="gdxth"><title>IPP Client-Side Support </title><para>The IPP client-side support in Solaris is implemented underneath the
PAPI. This support enables any applications that are using the PAPI to use
IPP, as well as other print services and protocols.</para><itemizedlist><para>Applications include the following:</para><listitem><para>GNOME Desktop Environment - Applications using <command>libgnomeprint</command></para>
</listitem><listitem><para>BSD commands - BSD UNIX LPD print service commands:</para><itemizedlist><listitem><para><command>lpr</command></para>
</listitem><listitem><para><command>lpq</command></para>
</listitem><listitem><para><command>lprm</command></para>
</listitem><listitem><para><command>lpc</command></para>
</listitem>
</itemizedlist>
</listitem><listitem><para>LP commands - System V UNIX LP print service commands:</para><itemizedlist><listitem><para><command>lp</command></para>
</listitem><listitem><para><command>lpstat</command></para>
</listitem><listitem><para><command>lpmove</command></para>
</listitem><listitem><para><command>accept</command></para>
</listitem><listitem><para><command>reject</command></para>
</listitem><listitem><para><command>enable</command></para>
</listitem><listitem><para><command>disable</command></para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist><para>The IPP client-side support for applications is provided through a loadable
module, <command>psm-ipp.so</command>, that is loaded at runtime, based on
the <literal>printer-uri</literal> for the printer or job that is being manipulated.</para><para>Because IPP is layered on top of an HTTP transport, both client-side
and server-side support need the ability to read and write HTTP protocol.
On the server-side, this support is provided by the Apache web server. On
the client-side, this support is provided by an HTTP library, <command>libhttp-core.so</command>.</para><sect2 id="gdxtm"><title><command>lpsched</command> Support</title><para><command>psm-lpsched</command> provides a translation between the print
service independent representation of the PAPI and the LP print spooler (<command>lpsched</command>). It takes the PAPI attributes passed into various PAPI
functions and converts them into an internal <command>lpsched</command> representation
of the data. It then contacts <command>lpsched</command> to perform the requested
operation. Once performed, it converts the results back into a print service
neutral PAPI representation and returns them to the caller.</para><para>The LP print spooler (<command>lpsched</command>), provides a spooling
service, translations of job data to a printer ready format, and transmission
of the job data to the physical printer.</para>
</sect2>
</sect1><sect1 id="gdtcv"><title>IPP Attributes</title><para>For each object instance, there is a set of supported attributes and
values that describes a specific implementation of that object. </para><itemizedlist><para>An object's attributes and values include the following information
about that object:</para><listitem><para>State</para>
</listitem><listitem><para>Capabilities</para>
</listitem><listitem><para>Features</para>
</listitem><listitem><para>Job processing functions</para>
</listitem><listitem><para>Default behaviors</para>
</listitem><listitem><para>Default characteristics</para>
</listitem>
</itemizedlist><para>Each attribute that defines an object is included in a set. This set
of attributes for a specific object includes all of the attributes that the
object could potentially support. For attributes that are labeled as REQUIRED,
each object must support the attribute. If an attribute is labeled <literal>OPTIONAL</literal>, then each object may support the attribute.</para><para>Printer attributes are divided in to two groups:</para><variablelist><varlistentry><term>job-template</term><listitem><para>These attributes describe the supported job processing capabilities
and defaults for the Printer object.</para>
</listitem>
</varlistentry><varlistentry><term>printer-description</term><listitem><para>These attributes include identification, state, location,
and references to other sources of information about the Printer object.</para>
</listitem>
</varlistentry>
</variablelist><itemizedlist><para>Examples of configurations that support a Printer object include the
following:</para><listitem><para>Output device with no spooling capabilities</para>
</listitem><listitem><para>Output device with a built-in spooler</para>
</listitem><listitem><para>Print server that supports IPP, with one or more associated
output devices where the following applies:</para><itemizedlist><listitem><para>Might or might not be capable of spooling jobs</para>
</listitem><listitem><para>Might or might not support IPP</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist><para>The characteristics of a Job object are also described by its attributes.</para><itemizedlist><para>Job attributes are grouped into two groups:</para><listitem><para>job-template &ndash; These attributes are supplied by you
or the print client. The attributes include job processing instructions that
are intended to override any Printer object defaults or instructions that
might be embedded within the document data.</para>
</listitem><listitem><para>job-description &ndash; These attributes include the following
information about the Job object:</para><itemizedlist><listitem><para>Identification</para>
</listitem><listitem><para>State</para>
</listitem><listitem><para>Size</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist><para>Note that the print client supplies some of these attributes, while
the Printer object generates others. An implementation can support multiple
documents per Job object, but it must support at least one document per Job
object.</para><note><para>In IPP, Version 1.0 and Version 1.1, a document is not modeled
as an IPP object. Therefore, the document has no object identifier or associated
attributes. All job processing instruction are modeled as Job object attributes.
These attributes are called Job Template attributes. These attributes apply
equally to all documents within a Job object.</para>
</note><para>IPP objects have relationships that are maintain persistently along
with the persistent storage of the object attributes.</para><para>For task related information, see <olink targetptr="geduc" remap="internal">Setting Up
the Internet Printing Protocol</olink> and <olink targetptr="gedvp" remap="internal">Administering
Printers by Using the Internet Printing Protocol (Task Map)</olink>.</para>
</sect1>
</appendix><?Pub *0000036916 0?>