» Content »pkg://papi-1.0_beta.tar.bz2:358460
/ info downloads
$Id: README,v 1.2 2005/08/19 21:39:33 njacobs Exp $
This package contains implentations of the Free Standards Group (FSG)
Open Printing API (PAPI) (v1.0) and client software that uses it.
The implemenations of the API are designed so that they can be used
individually to support client application interaction with a particular
type of print service or together to interact with a variety of different
print service types.
If you plan on working on this software, it would be nice if you registered
with the "OpenPrinting" SourceForge project. It's not required, but it
would be nice. Just send mail to one of the project admins and we will
get you added.
The source is broken down as follows:
source/bsd-sysv-commands (see docs/README.bsd-sysv-commands)
Implementations of the BSD and SYSV printing commands layered on
top of the PAPI. The command implementation are intended to be
reasonably faithful to their counterparts on a Solaris system.
They should be reasonably faithful to pretty much any implementation
of these commands. This should allow them to be dropped on a system
and used in place of any prior version of the commands without
causing layered scripts and software to break.
The commands covered are:
BSD: lpr(1b), lpq(1b), lprm(1b), lpc(1m)
SYSV: lp(1), lpstat(1), cancel(1), accept(1m), reject(1m),
source/libpapi-common (see docs/README.libpapi-common)
This directory contains some interfaces that are shared across
PAPI implementations. This includes PAPI attribute support,
strings, lists, and uris. If it doesn't make sense now, read on
and it probably will.
source/libpapi-dynamic (see docs/README.libpapi-dynamic)
This is a "meta" implementation of the PAPI. It's sole purpose is
currently to resolve queue names passed into API calls, potentially
using a variety of name service (user, files, nis, nis+, ldap, ...)
and call an appropriate PAPI implementation supporting the print
service where the queue actually resides.
source/libpapi-lpd (see docs/README.libpapi-lpd)
This contains an implementation of the PAPI on top of RFC-1179(lpd)
protocol. Since the protocol is very limitted in what it can do,
PAPI functions supported are very limitted. This support includes
job submission, cancelation, query, print queue query, and print
Since the protocol requires the client to connect from a reserved
port in the range of XXX-XXX, the library makes use of a "helper"
application to actually connect to the remote print service. This
enables unpriviliged applications to use the API and still communicate
with a remote LPD server. The helper application preforms some portion
of the protocol interaction and returns a connected file descriptor to
the calling application.
On solaris, the fd is passed via a pipe and ioctl(SENDFD) on other
platforms it is sent using sockets and sendmsg()/recvmsg().
Also, on Solaris, the helper application uses privileges to reduce
the ability to be exploited to gain additional privilege. On other
platforms, it uses seteuid()/setuid(). In both cases, it drops
as much privilege as it can as soon as it can and perminantly drops
all elevated privilege once it has it's reserved port.
source/libpapi-ipp (see docs/README.libpapi-ipp)
This contains an implementation of the PAPI on top of IPP. The
implementation makes use of standard IPP operations where available.
Where no IPP operation is available, a CUPS extension is used. This
allows the IPP support to interact with a maximum set of IPP based
The support makes use of a common IPP marshalling/unmarshalling
library used by the Apache IPP listener (described below) for it's
on-the-wire protocol support. This library make use of a caller
supplied http transport.
This contain HTTP transport code pulled directly from libcups. This
transport code is used by libpapi-ipp (psm-ipp.so) to send/receive
IPP requests/responses. Alternate HTTP transports like that available
from libsoup could just as easily have been used for this as well.
source/libipp-core (see docs/README.ipp-listener)
This contains IPP marshalling/unmarshalling and on-the-wire protocol
support for IPP. It requires an HTTP transport be handled by the
caller. This includes connection negotiationbe completed, as well
as, read and write routines supplied to various calls.
source/libipp-listener (see docs/README.ipp-listener)
This contains server side IPP operation handling support. A number of
the "standard" IPP operations are implemented here, as well as a
few CUPS extensions to the protocol. These extensions were required
to allow a CUPS client to interact with a server using this libarary.
This is because CUPS clients (lp/lpr/lpstat/lpq/cancel/lprm/...) make
use of extended protocol operations at the beginning of execution and
require a "correct" response from the server in order to continue and
perform their submision, cancelation, or query.A
source/mod_ipp (see docs/README.ipp-listener)
Glue code to glue the listener library under Apache.
This contains a slightly modified version of the PAPI code
written by Alan Hlava of IBM for CUPS. This code is layered
directly on top of libcups and allows applications to use the
PAPI on top of CUPS.
Sample code that makes use of the API to do marginally