-CHANGES.txt - 2.0b1 - 2014-07-30
---------------------------------
+CHANGES.txt - 2.0rc1 - 2014-09-02
+---------------------------------
+
+CHANGES IN CUPS V2.0rc1
+
+ - Documentation updates (STR #4464)
+ - The scheduler now monitors the AC power status on OS X, allowing for
+ "sleep printing" when sharing printers (<rdar://problem/17325852>)
+ - The scheduler incorrectly called launch_activate_socket multiple times
+ on OS X (<rdar://problem/17523218>)
+ - The ippserver test program now passes the IPP Everywhere self-
+ certification tests (STR #4101)
+ - Relaxed the new OS X filter sandbox slightly (STR #4471,
+ <rdar://problem/17483959>)
+ - Dropped the old Epson Stylus Color/Photo sample drivers since they
+ don't work with any current printers and there are free alternatives
+ that produce much better output (<rdar://problem/18036889>)
+ - Log and configuration files that are not world-readable are again
+ accessible via the web interface (STR #4461)
+ - PPD files are now created using the permissions specified by the
+ ConfigFilePerm directive.
+ - Fixed RPM build issues (STR #4459)
+ - Fixed the spinner image and restart page when reconfiguring the
+ scheduler through the web interface (STR #4475)
+
CHANGES IN CUPS V2.0b1
-INSTALL - CUPS v2.0b1 - 2014-07-30
-----------------------------------
+INSTALL - CUPS v2.0rc1 - 2014-09-02
+-----------------------------------
This file describes how to compile and install CUPS from source code. For more
information on CUPS see the file called "README.txt". A complete change log can
following:
epm - Builds a script + tarfile package
- aix - Builds an AIX package
bsd - Builds a *BSD package
deb - Builds a Debian package
- depot - Builds a HP-UX package (also swinstall)
- inst - Builds an IRIX package (also tardist)
pkg - Builds a Solaris package
rpm - Builds a RPM package
- setld - Build a Tru64 UNIX package
slackware - Build a Slackware package
- swinstall - Build a HP-UX package (also depot)
- tardist - Builds an IRIX package (also inst)
GETTING DEBUG LOGGING FROM CUPS
#
-# "$Id: Makefile 12074 2014-07-31 01:10:14Z msweet $"
+# "$Id: Makefile 12145 2014-09-02 15:00:50Z msweet $"
#
# Top-level Makefile for CUPS.
#
EPMFLAGS = -v --output-dir dist $(EPMARCH)
-bsd deb pkg slackware tardist:
+bsd deb pkg slackware:
epm $(EPMFLAGS) -f $@ cups packaging/cups.list
epm:
#
-# End of "$Id: Makefile 12074 2014-07-31 01:10:14Z msweet $".
+# End of "$Id: Makefile 12145 2014-09-02 15:00:50Z msweet $".
#
-README - CUPS v2.0b1 - 2014-07-30
----------------------------------
+README - CUPS v2.0rc1 - 2014-09-02
+----------------------------------
********************************************************************************
********************************************************************************
GETTING SUPPORT AND OTHER RESOURCES
- If you have problems, READ THE DOCUMENTATION FIRST! We also provide many
- discussion forums which are available at:
+ If you have problems, READ THE DOCUMENTATION FIRST! We also provide two
+ mailing lists which are available at:
- http://www.cups.org/newsgroups.php
+ http://www.cups.org/lists.php
See the CUPS web site at "http://www.cups.org/" for other resources.
----------------------------- ------------------------------
Dymo Label Printers drv:///sample.drv/dymo.ppd
Intellitech Intellibar drv:///sample.drv/intelbar.ppd
- EPSON Stylus Color Series drv:///sample.drv/stcolor.ppd
- EPSON Stylus Photo Series drv:///sample.drv/stphoto.ppd
- EPSON Stylus New Color Series drv:///sample.drv/stcolor2.ppd
- EPSON Stylus New Photo Series drv:///sample.drv/stphoto2.ppd
EPSON 9-pin Series drv:///sample.drv/epson9.ppd
EPSON 24-pin Series drv:///sample.drv/epson24.ppd
Generic PCL Laser Printer drv:///sample.drv/generpcl.ppd
lpadmin -p printername -E -v lpd://11.22.33.44/ -m ppd-name
The sample drivers provide basic printing capabilities, but generally do not
- exercise the full potential of the printers or CUPS. The CUPS web site
- provides links and drivers:
-
- http://www.cups.org/ppd.php PPD files
- http://www.cups.org/links.php Links to other drivers
+ exercise the full potential of the printers or CUPS.
PRINTING FILES
lpr -o media=A4 -o resolution=600dpi filename
CUPS recognizes many types of images files as well as PDF, PostScript,
- HP-GL/2, and text files, so you can print those files directly rather than
- through an application.
+ and text files, so you can print those files directly rather than through
+ an application.
If you have an application that generates output specifically for your
printer then you need to use the "-oraw" or "-l" options:
lp -o raw filename
lpr -l filename
- This will prevent the filters from misinterpreting your print
- file.
+ This will prevent the filters from misinterpreting your print file.
LEGAL STUFF
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
- This software is based in part on the work of the Independent JPEG Group.
-
CUPS is provided under the terms of version 2 of the GNU General Public
License and GNU Library General Public License. This program is distributed
in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
/*
- * "$Id: network.c 11970 2014-07-01 14:35:25Z msweet $"
+ * "$Id: network.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Common backend network APIs for CUPS.
*
{
case CUPS_ASN1_BOOLEAN :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%d", packet.object_value.boolean);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_INTEGER :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%d",
packet.object_value.integer);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_BIT_STRING :
memcpy(dataptr, packet.object_value.string.bytes, i);
- datalen += i;
+ datalen += (int)i;
break;
case CUPS_ASN1_OID :
_cupsSNMPOIDToString(packet.object_value.oid, dataptr,
sizeof(data) - (size_t)(dataptr - data));
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_HEX_STRING :
dataptr < (data + sizeof(data) - 3);
i ++, dataptr += 2)
sprintf(dataptr, "%02X", packet.object_value.string.bytes[i]);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_COUNTER :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.counter);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_GAUGE :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.gauge);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
case CUPS_ASN1_TIMETICKS :
snprintf(dataptr, sizeof(data) - (size_t)(dataptr - data), "%u", packet.object_value.timeticks);
- datalen += strlen(dataptr);
+ datalen += (int)strlen(dataptr);
break;
default :
/*
- * End of "$Id: network.c 11970 2014-07-01 14:35:25Z msweet $".
+ * End of "$Id: network.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: usb-unix.c 11342 2013-10-18 20:36:01Z msweet $"
+ * "$Id: usb-unix.c 12124 2014-08-28 15:37:22Z msweet $"
*
* USB port backend for CUPS.
*
tcgetattr(device_fd, &opts);
- opts.c_lflag &= ~(ICANON | ECHO | ISIG); /* Raw mode */
+ opts.c_lflag &= ~(unsigned)(ICANON | ECHO | ISIG); /* Raw mode */
/**** No options supported yet ****/
/*
- * End of "$Id: usb-unix.c 11342 2013-10-18 20:36:01Z msweet $".
+ * End of "$Id: usb-unix.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: admin.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: admin.c 12123 2014-08-28 14:24:45Z msweet $"
*
* Administration CGI for CUPS.
*
}
else
{
- cgiSetVariable("refresh_page", "5;URL=/admin/?OP=redirect");
+ cgiSetVariable("refresh_page", "5;URL=/admin/");
cgiStartHTML(cgiText(_("Edit Configuration File")));
cgiCopyTemplateLang("restart.tmpl");
/*
- * End of "$Id: admin.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: admin.c 12123 2014-08-28 14:24:45Z msweet $".
*/
dnl
-dnl "$Id: cups-common.m4 12073 2014-07-31 00:58:00Z msweet $"
+dnl "$Id: cups-common.m4 12140 2014-08-30 01:51:22Z msweet $"
dnl
dnl Common configuration stuff for CUPS.
dnl
AC_CONFIG_HEADER(config.h)
dnl Version number information...
-CUPS_VERSION=2.0b1
+CUPS_VERSION=2.0rc1
CUPS_REVISION=
#if test -z "$CUPS_REVISION" -a -d .svn; then
# CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
AC_CHECK_HEADER(membershipPriv.h,AC_DEFINE(HAVE_MEMBERSHIPPRIV_H))
AC_CHECK_FUNCS(mbr_uid_to_uuid)
- dnl Check for the vproc_transaction_begin/end stuff...
- AC_CHECK_FUNCS(vproc_transaction_begin)
-
dnl Need <dlfcn.h> header...
AC_CHECK_HEADER(dlfcn.h,AC_DEFINE(HAVE_DLFCN_H))
AC_SUBST(BUILDDIRS)
dnl
-dnl End of "$Id: cups-common.m4 12073 2014-07-31 00:58:00Z msweet $".
+dnl End of "$Id: cups-common.m4 12140 2014-08-30 01:51:22Z msweet $".
dnl
dnl
-dnl "$Id: cups-compiler.m4 11683 2014-03-05 20:00:54Z msweet $"
+dnl "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $"
dnl
dnl Compiler stuff for CUPS.
dnl
# The -fstack-protector option is available with some versions of
# GCC and adds "stack canaries" which detect when the return address
# has been overwritten, preventing many types of exploit attacks.
- AC_MSG_CHECKING(if GCC supports -fstack-protector)
+ AC_MSG_CHECKING(whether compiler supports -fstack-protector)
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fstack-protector"
AC_TRY_LINK(,,
# exploits that depend on a fixed address for common functions.
#
# Not available to LSB binaries...
- AC_MSG_CHECKING(if GCC supports -fPIE)
+ AC_MSG_CHECKING(whether compiler supports -fPIE)
OLDCFLAGS="$CFLAGS"
case "$uname" in
Darwin*)
if test "x$with_optim" = x; then
# Add useful warning options for tracking down problems...
- OPTIM="-Wall -Wno-format-y2k -Wsign-conversion -Wunused $OPTIM"
+ OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
- AC_MSG_CHECKING(if GCC supports -Wno-tautological-compare)
+ AC_MSG_CHECKING(whether compiler supports -Wsign-conversion)
+ OLDCFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wsign-conversion"
+ AC_TRY_COMPILE(,,
+ [OPTIM="$OPTIM -Wsign-conversion"
+ AC_MSG_RESULT(yes)],
+ AC_MSG_RESULT(no))
+ CFLAGS="$OLDCFLAGS"
+
+ AC_MSG_CHECKING(whether compiler supports -Wno-tautological-compare)
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
AC_TRY_COMPILE(,,
# should contribute the necessary options to
# cups-support@cups.org...
echo "Building CUPS with default compiler optimizations; contact"
- echo "cups-bugs@cups.org with uname and compiler options needed"
+ echo "cups-devel@cups.org with uname and compiler options needed"
echo "for your platform, or set the CFLAGS and LDFLAGS environment"
echo "variables before running configure."
;;
esac
dnl
-dnl End of "$Id: cups-compiler.m4 11683 2014-03-05 20:00:54Z msweet $".
+dnl End of "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $".
dnl
dnl
-dnl "$Id: cups-ssl.m4 11911 2014-06-10 13:54:53Z msweet $"
+dnl "$Id: cups-ssl.m4 12122 2014-08-28 12:55:52Z msweet $"
dnl
dnl TLS stuff for CUPS.
dnl
if test $have_ssl = 1; then
CUPS_SERVERCERT="ssl/server.crt"
CUPS_SERVERKEY="ssl/server.key"
+
+ SAVELIBS="$LIBS"
+ LIBS="$LIBS $SSLLIBS"
+ AC_CHECK_FUNC(gnutls_transport_set_pull_timeout_function, AC_DEFINE(HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION))
+ LIBS="$SAVELIBS"
fi
fi
fi
AC_SUBST(EXPORT_SSLLIBS)
dnl
-dnl End of "$Id: cups-ssl.m4 11911 2014-06-10 13:54:53Z msweet $".
+dnl End of "$Id: cups-ssl.m4 12122 2014-08-28 12:55:52Z msweet $".
dnl
/*
- * "$Id: config.h.in 11717 2014-03-21 16:42:53Z msweet $"
+ * "$Id: config.h.in 12140 2014-08-30 01:51:22Z msweet $"
*
* Configuration file for CUPS.
*
* Default MaxCopies value...
*/
-#define CUPS_DEFAULT_MAX_COPIES 100
+#define CUPS_DEFAULT_MAX_COPIES 9999
/*
* Do we have PAM stuff?
*/
-#ifndef HAVE_LIBPAM
#define HAVE_LIBPAM 0
-#endif /* !HAVE_LIBPAM */
-
#undef HAVE_PAM_PAM_APPL_H
#undef HAVE_PAM_SET_ITEM
#undef HAVE_PAM_SETCRED
#undef HAVE_CDSASSL
#undef HAVE_GNUTLS
+#undef HAVE_SSPISSL
#undef HAVE_SSL
+/*
+ * Do we have the gnutls_transport_set_pull_timeout_function function?
+ */
+
+#undef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION
+
+
/*
* What Security framework headers do we have?
*/
#endif /* HAVE_ARC4RANDOM */
-/*
- * Do we have vproc_transaction_begin/end?
- */
-
-#undef HAVE_VPROC_TRANSACTION_BEGIN
-
-
/*
* Do we have libusb?
*/
#endif /* !_CUPS_CONFIG_H_ */
/*
- * End of "$Id: config.h.in 11717 2014-03-21 16:42:53Z msweet $".
+ * End of "$Id: config.h.in 12140 2014-08-30 01:51:22Z msweet $".
*/
ac_config_headers="$ac_config_headers config.h"
-CUPS_VERSION=2.0b1
+CUPS_VERSION=2.0rc1
CUPS_REVISION=
#if test -z "$CUPS_REVISION" -a -d .svn; then
# CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
#define HAVE_MBR_UID_TO_UUID 1
_ACEOF
-fi
-done
-
-
- for ac_func in vproc_transaction_begin
-do :
- ac_fn_c_check_func "$LINENO" "vproc_transaction_begin" "ac_cv_func_vproc_transaction_begin"
-if test "x$ac_cv_func_vproc_transaction_begin" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_VPROC_TRANSACTION_BEGIN 1
-_ACEOF
-
fi
done
# The -fstack-protector option is available with some versions of
# GCC and adds "stack canaries" which detect when the return address
# has been overwritten, preventing many types of exploit attacks.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fstack-protector" >&5
-$as_echo_n "checking if GCC supports -fstack-protector... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fstack-protector" >&5
+$as_echo_n "checking whether compiler supports -fstack-protector... " >&6; }
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fstack-protector"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
# exploits that depend on a fixed address for common functions.
#
# Not available to LSB binaries...
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fPIE" >&5
-$as_echo_n "checking if GCC supports -fPIE... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fPIE" >&5
+$as_echo_n "checking whether compiler supports -fPIE... " >&6; }
OLDCFLAGS="$CFLAGS"
case "$uname" in
Darwin*)
if test "x$with_optim" = x; then
# Add useful warning options for tracking down problems...
- OPTIM="-Wall -Wno-format-y2k -Wsign-conversion -Wunused $OPTIM"
+ OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wsign-conversion" >&5
+$as_echo_n "checking whether compiler supports -Wsign-conversion... " >&6; }
+ OLDCFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wsign-conversion"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ OPTIM="$OPTIM -Wsign-conversion"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CFLAGS="$OLDCFLAGS"
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -Wno-tautological-compare" >&5
-$as_echo_n "checking if GCC supports -Wno-tautological-compare... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wno-tautological-compare" >&5
+$as_echo_n "checking whether compiler supports -Wno-tautological-compare... " >&6; }
OLDCFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror -Wno-tautological-compare"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
# should contribute the necessary options to
# cups-support@cups.org...
echo "Building CUPS with default compiler optimizations; contact"
- echo "cups-bugs@cups.org with uname and compiler options needed"
+ echo "cups-devel@cups.org with uname and compiler options needed"
echo "for your platform, or set the CFLAGS and LDFLAGS environment"
echo "variables before running configure."
;;
if test $have_ssl = 1; then
CUPS_SERVERCERT="ssl/server.crt"
CUPS_SERVERKEY="ssl/server.key"
+
+ SAVELIBS="$LIBS"
+ LIBS="$LIBS $SSLLIBS"
+ ac_fn_c_check_func "$LINENO" "gnutls_transport_set_pull_timeout_function" "ac_cv_func_gnutls_transport_set_pull_timeout_function"
+if test "x$ac_cv_func_gnutls_transport_set_pull_timeout_function" = xyes; then :
+ $as_echo "#define HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION 1" >>confdefs.h
+
+fi
+
+ LIBS="$SAVELIBS"
fi
fi
fi
md5-private.h language-private.h ../cups/transcode.h pwg-private.h \
../cups/cups.h file.h pwg.h ppd-private.h ../cups/ppd.h \
thread-private.h adminutil.h
-array.o: array.c string-private.h ../config.h debug-private.h \
- ../cups/versioning.h array-private.h ../cups/array.h
+array.o: array.c ../cups/cups.h file.h versioning.h ipp.h http.h array.h \
+ language.h pwg.h string-private.h ../config.h debug-private.h \
+ array-private.h
attr.o: attr.c cups-private.h string-private.h ../config.h \
debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \
ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \
../cups/cups.h file.h pwg.h ppd-private.h ../cups/ppd.h \
thread-private.h snmp-private.h
snprintf.o: snprintf.c string-private.h ../config.h
-string.o: string.c string-private.h ../config.h debug-private.h \
- ../cups/versioning.h thread-private.h array.h
+string.o: string.c cups-private.h string-private.h ../config.h \
+ debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \
+ ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \
+ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \
+ ../cups/cups.h file.h pwg.h ppd-private.h ../cups/ppd.h \
+ thread-private.h
tempfile.o: tempfile.c cups-private.h string-private.h ../config.h \
debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \
ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \
Filter and backend programming introduction for CUPS.
- Copyright 2007-2013 by Apple Inc.
+ Copyright 2007-2014 by Apple Inc.
Copyright 1997-2006 by Easy Software Products, all rights reserved.
These coded instructions, statements, and computer programs are the
<p>In addition, some operating systems provide additional security mechanisms
that further limit file system access, even for backends running as root. On
-OS X, for example, no backend may write to a user's home directory.</p>
+OS X, for example, no backend may write to a user's home directory. See the <a href="#SANDBOXING">Sandboxing on OS X</a> section for more information.</p>
</blockquote>
<h3><a name="SIGNALS">Canceled Jobs and Signal Handling</a></h3>
<a href="#cupsSideChannelSNMPWalk">cupsSNMPSideChannelWalk</a>(".1.3.6.1.2.1.43", 5.0, my_callback, my_data);
</pre>
+
+<h2><a name="SANDBOXING">Sandboxing on OS X</a></h2>
+
+<p>Starting with OS X 10.6, filters and backends are run inside a security "sandbox" which further limits (beyond the normal UNIX user/group permissions) what a filter or backend can do. This helps to both secure the printing system from malicious software and enforce the functional separation of components in the CUPS filter chain. What follows is a list of actions that are explicitly allowed for all filters and backends:</p>
+
+<ol>
+
+ <li>Reading of files: pursuant to normal UNIX file permissions, filters and backends can read files for the current job from the <var>/private/var/spool/cups</var> directory and other files on mounted filesystems <em>except</em> for user home directories under <var>/Users</var>.</li>
+
+ <li>Writing of files: pursuant to normal UNIX file permissions, filters and backends can read/write files to the cache directory specified by the <code>CUPS_CACHEDIR</code> environment variable, to the state directory specified by the <code>CUPS_STATEDIR</code> environment variable, to the temporary directory specified by the <code>TMPDIR</code> environment variable, and under the <var>/private/var/db</var>, <var>/private/var/folders</var>, <var>/private/var/lib</var>, <var>/private/var/mysql</var>, <var>/private/var/run</var>, <var>/private/var/spool</var> (except <var>/private/var/spool/cups</var>), <var>/Library/Application Support</var>, <var>/Library/Caches</var>, <var>/Library/Logs</var>, <var>/Library/Preferences</var>, <var>/Library/WebServer</var>, and <var>/Users/Shared</var> directories.</li>
+
+ <li>Execution of programs: pursuant to normal UNIX file permissions, filters and backends can execute any program not located under the <var>/Users</var> directory. Child processes inherit the sandbox and are subject to the same restrictions as the parent.</li>
+
+ <li>Bluetooth and USB: backends can access Bluetooth and USB printers through IOKit. <em>Filters cannot access Bluetooth and USB printers directly.</em></li>
+
+ <li>Network: filters and backends can access UNIX domain sockets under the <var>/private/tmp</var>, <var>/private/var/run</var>, and <var>/private/var/tmp</var> directories. Backends can also create IPv4 and IPv6 TCP (outgoing) and UDP (incoming and outgoing) socket, and bind to local source ports. <em>Filters cannot directly create IPv4 and IPv6 TCP or UDP sockets.</em></li>
+
+ <li>Notifications: filters and backends can send notifications via the Darwin <code>notify_post()</code> API.</li>
+
+</ol>
+
+<blockquote><b>Note:</b> The sandbox profile used in CUPS 2.0 still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.</blockquote>
/*
- * "$Id: cups.h 11884 2014-05-16 21:54:22Z msweet $"
+ * "$Id: cups.h 12094 2014-08-19 12:15:11Z msweet $"
*
* API definitions for CUPS.
*
extern void cupsSetUserAgent(const char *user_agent) _CUPS_API_1_7;
extern const char *cupsUserAgent(void) _CUPS_API_1_7;
-/* New in CUPS 2.0 */
+/* New in CUPS 2.0/OS X 10.10 */
extern cups_dest_t *cupsGetDestWithURI(const char *name, const char *uri) _CUPS_API_2_0;
extern const char *cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, unsigned flags, cups_size_t *size) _CUPS_API_2_0;
extern int cupsMakeServerCredentials(const char *path, const char *common_name, int num_alt_names, const char **alt_names, time_t expiration_date) _CUPS_API_2_0;
#endif /* !_CUPS_CUPS_H_ */
/*
- * End of "$Id: cups.h 11884 2014-05-16 21:54:22Z msweet $".
+ * End of "$Id: cups.h 12094 2014-08-19 12:15:11Z msweet $".
*/
/*
- * "$Id: dest-localization.c 11894 2014-05-23 03:18:00Z msweet $"
+ * "$Id: dest-localization.c 12094 2014-08-19 12:15:11Z msweet $"
*
* Destination localization support for CUPS.
*
* The returned string is stored in the destination information and will become
* invalid if the destination information is deleted.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
const char * /* O - Localized string */
/*
- * End of "$Id: dest-localization.c 11894 2014-05-23 03:18:00Z msweet $".
+ * End of "$Id: dest-localization.c 12094 2014-08-19 12:15:11Z msweet $".
*/
/*
- * "$Id: dest.c 11959 2014-06-26 18:30:19Z msweet $"
+ * "$Id: dest.c 12094 2014-08-19 12:15:11Z msweet $"
*
* User-defined destination (and option) support for CUPS.
*
*
* "uri" is the "ipp" or "ipps" URI for the printer.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
cups_dest_t * /* O - Destination or @code NULL@ */
/*
- * End of "$Id: dest.c 11959 2014-06-26 18:30:19Z msweet $".
+ * End of "$Id: dest.c 12094 2014-08-19 12:15:11Z msweet $".
*/
/*
- * "$Id: globals.c 11851 2014-05-07 23:55:35Z msweet $"
+ * "$Id: globals.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Global variable access routines for CUPS.
*
httpClose(cg->http);
+#ifdef HAVE_SSL
_httpFreeCredentials(cg->tls_credentials);
+#endif /* HAVE_SSL */
cupsFileClose(cg->stdio_files[0]);
cupsFileClose(cg->stdio_files[1]);
/*
- * End of "$Id: globals.c 11851 2014-05-07 23:55:35Z msweet $".
+ * End of "$Id: globals.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: http-addr.c 11627 2014-02-20 16:15:09Z msweet $"
+ * "$Id: http-addr.c 12129 2014-08-28 19:26:31Z msweet $"
*
* HTTP address routines for CUPS.
*
* listen address for sockets created with @link httpAddrListen@. This will
* ensure that domain sockets are removed when closed.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 0 on success, -1 on failure */
*
* Returns @code NULL@ if the socket is currently unconnected.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_addr_t * /* O - Connected address or @code NULL@ */
}
#endif /* HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME */
}
+
+ /*
+ * Make sure .local hostnames end with a period...
+ */
+
+ if (strlen(s) > 6 && !strcmp(s + strlen(s) - 6, ".local"))
+ strlcat(s, ".", (size_t)slen);
}
/*
* 'httpResolveHostname()' - Resolve the hostname of the HTTP connection
* address.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
const char * /* O - Resolved hostname or @code NULL@ */
/*
- * End of "$Id: http-addr.c 11627 2014-02-20 16:15:09Z msweet $".
+ * End of "$Id: http-addr.c 12129 2014-08-28 19:26:31Z msweet $".
*/
/*
- * "$Id: http-private.h 12044 2014-07-17 21:21:21Z msweet $"
+ * "$Id: http-private.h 12126 2014-08-28 16:02:00Z msweet $"
*
* Private HTTP definitions for CUPS.
*
# ifdef HAVE_GNUTLS
# include <gnutls/gnutls.h>
# include <gnutls/x509.h>
-# include <gcrypt.h>
# elif defined(HAVE_CDSASSL)
# include <CoreFoundation/CoreFoundation.h>
# include <Security/Security.h>
#endif /* !_CUPS_HTTP_PRIVATE_H_ */
/*
- * End of "$Id: http-private.h 12044 2014-07-17 21:21:21Z msweet $".
+ * End of "$Id: http-private.h 12126 2014-08-28 16:02:00Z msweet $".
*/
/*
- * "$Id: http-support.c 11844 2014-05-02 11:58:54Z msweet $"
+ * "$Id: http-support.c 12124 2014-08-28 15:37:22Z msweet $"
*
* HTTP support routines for CUPS.
*
break;
case 3 :
if (outptr < outend)
- *outptr++ |= base64;
+ *outptr++ |= (char)base64;
pos = 0;
break;
}
/*
* 'httpStateString()' - Return the string describing a HTTP state value.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
const char * /* O - State string */
/*
* 'httpURIStatusString()' - Return a string describing a URI status code.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
const char * /* O - Localized status string */
/*
- * End of "$Id: http-support.c 11844 2014-05-02 11:58:54Z msweet $".
+ * End of "$Id: http-support.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: http.c 12034 2014-07-16 19:37:34Z msweet $"
+ * "$Id: http.c 12125 2014-08-28 15:49:29Z msweet $"
*
* HTTP routines for CUPS.
*
/*
* 'httpCompareCredentials()' - Compare two sets of X.509 credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if they match, 0 if they do not */
*
* The return value is the UNIX time of the last read or write.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
time_t /* O - Time of last read or write */
* @link httpIsEncrypted@ function to determine whether a TLS session has
* been established.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_encryption_t /* O - Current encryption mode */
/*
* 'httpGetKeepAlive()' - Get the current Keep-Alive state of the connection.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_keepalive_t /* O - Keep-Alive state */
/*
* 'httpGetPending()' - Get the number of bytes that are buffered for writing.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Number of bytes buffered */
/*
* 'httpGetReady()' - Get the number of bytes that can be read without blocking.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Number of bytes available */
* The @link httpIsChunked@ function can be used to determine whether the
* message body is chunked or fixed-length.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Remaining bytes */
* This function returns non-zero if the message body is composed of
* variable-length chunks.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if chunked, 0 if not */
*
* This function returns non-zero if the connection is currently encrypted.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if encrypted, 0 if not */
memcpy(http->sbuffer + http->stream.avail_in, http->buffer, buflen);
http->stream.avail_in += buflen;
- http->used -= buflen;
- http->data_remaining -= buflen;
+ http->used -= (int)buflen;
+ http->data_remaining -= (off_t)buflen;
if (http->used > 0)
memmove(http->buffer, http->buffer + buflen, (size_t)http->used);
if (!http || cupsArrayCount(credentials) < 1)
return (-1);
+#ifdef HAVE_SSL
_httpFreeCredentials(http->tls_credentials);
http->tls_credentials = _httpCreateCredentials(credentials);
+#endif /* HAVE_SSL */
return (http->tls_credentials ? 0 : -1);
}
/*
* 'httpSetKeepAlive()' - Set the current Keep-Alive state of a connection.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
void
/*
* 'httpShutdown()' - Shutdown one side of an HTTP connection.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
void
if (!http || http->fd < 0)
return;
+#ifdef HAVE_SSL
if (http->tls)
_httpTLSStop(http);
+#endif /* HAVE_SSL */
#ifdef WIN32
shutdown(http->fd, SD_RECEIVE); /* Microsoft-ism... */
/*
- * End of "$Id: http.c 12034 2014-07-16 19:37:34Z msweet $".
+ * End of "$Id: http.c 12125 2014-08-28 15:49:29Z msweet $".
*/
/*
- * "$Id: http.h 11850 2014-05-07 23:12:48Z msweet $"
+ * "$Id: http.h 12094 2014-08-19 12:15:11Z msweet $"
*
* Hyper-Text Transport Protocol definitions for CUPS.
*
# endif /* !_CUPS_NO_DEPRECATED */
} http_status_t;
-typedef enum http_trust_e /**** Level of trust for credentials @since CUPS 2.0@ */
+typedef enum http_trust_e /**** Level of trust for credentials @since CUPS 2.0/OS 10.10@ */
{
HTTP_TRUST_OK = 0, /* Credentials are OK/trusted */
HTTP_TRUST_INVALID, /* Credentials are invalid */
extern http_state_t httpWriteResponse(http_t *http,
http_status_t status) _CUPS_API_1_7;
-/* New in CUPS 2.0 */
+/* New in CUPS 2.0/OS X 10.10 */
extern int httpAddrClose(http_addr_t *addr, int fd) _CUPS_API_2_0;
extern int httpAddrFamily(http_addr_t *addr) _CUPS_API_2_0;
extern int httpCompareCredentials(cups_array_t *cred1, cups_array_t *cred2) _CUPS_API_2_0;
#endif /* !_CUPS_HTTP_H_ */
/*
- * End of "$Id: http.h 11850 2014-05-07 23:12:48Z msweet $".
+ * End of "$Id: http.h 12094 2014-08-19 12:15:11Z msweet $".
*/
/*
- * "$Id: ipp-support.c 11806 2014-04-09 16:12:27Z msweet $"
+ * "$Id: ipp-support.c 12095 2014-08-19 16:16:06Z msweet $"
*
* Internet Printing Protocol support functions for CUPS.
*
break;
case IPP_TAG_RESOLUTION :
- if (buffer && bufptr < bufend)
+ if (val->resolution.xres == val->resolution.yres)
+ {
+ if (buffer && bufptr < bufend)
+ bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%d%s", val->resolution.xres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ else
+ bufptr += snprintf(temp, sizeof(temp), "%d%s", val->resolution.xres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ }
+ else if (buffer && bufptr < bufend)
bufptr += snprintf(bufptr, (size_t)(bufend - bufptr + 1), "%dx%d%s", val->resolution.xres, val->resolution.yres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
else
bufptr += snprintf(temp, sizeof(temp), "%dx%d%s", val->resolution.xres, val->resolution.yres, val->resolution.units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
/*
* 'ippStateString()' - Return the name corresponding to a state value.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
const char * /* O - State name */
/*
- * End of "$Id: ipp-support.c 11806 2014-04-09 16:12:27Z msweet $".
+ * End of "$Id: ipp-support.c 12095 2014-08-19 16:16:06Z msweet $".
*/
/*
- * "$Id: ipp.c 11840 2014-04-29 15:57:26Z msweet $"
+ * "$Id: ipp.c 12093 2014-08-19 12:10:17Z msweet $"
*
* Internet Printing Protocol functions for CUPS.
*
/*
* 'ippCopyAttributes()' - Copy attributes from one IPP message to another.
*
- * Zero or more attributes are copied from the source IPP message, @code@ src, to the
+ * Zero or more attributes are copied from the source IPP message, @code src@, to the
* destination IPP message, @code dst@. When @code quickcopy@ is non-zero, a "shallow"
* reference copy of the attribute is created - this should only be done as long as the
* original source IPP message will not be freed for the life of the destination.
/*
- * End of "$Id: ipp.c 11840 2014-04-29 15:57:26Z msweet $".
+ * End of "$Id: ipp.c 12093 2014-08-19 12:10:17Z msweet $".
*/
/*
- * "$Id: md5.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: md5.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Private MD5 implementation for CUPS.
*
for (i = 0; i < 8; ++i)
data[i] = (unsigned char)(pms->count[i >> 2] >> ((i & 3) << 3));
/* Pad to 56 bytes mod 64. */
- _cupsMD5Append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
+ _cupsMD5Append(pms, pad, (int)((55 - (pms->count[0] >> 3)) & 63) + 1);
/* Append the length. */
_cupsMD5Append(pms, data, 8);
for (i = 0; i < 16; ++i)
/*
- * End of "$Id: md5.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: md5.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: ppd-cache.c 11832 2014-04-24 15:04:00Z msweet $"
+ * "$Id: ppd-cache.c 12124 2014-08-28 15:37:22Z msweet $"
*
* PPD cache implementation for CUPS.
*
_pwg_finishings_t *a, /* I - First finishings value */
_pwg_finishings_t *b) /* I - Second finishings value */
{
- return (b->value - a->value);
+ return ((int)b->value - (int)a->value);
}
/*
- * End of "$Id: ppd-cache.c 11832 2014-04-24 15:04:00Z msweet $".
+ * End of "$Id: ppd-cache.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: sidechannel.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: sidechannel.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Side-channel API code for CUPS.
*
real_data[real_datalen] = '\0';
real_oidlen = strlen(real_data) + 1;
- real_datalen -= real_oidlen;
+ real_datalen -= (int)real_oidlen;
/*
* Call the callback with the OID and data...
/*
- * End of "$Id: sidechannel.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: sidechannel.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: tls-darwin.c 12029 2014-07-15 18:59:26Z msweet $"
+ * "$Id: tls-darwin.c 12094 2014-08-19 12:15:11Z msweet $"
*
* TLS support code for CUPS on OS X.
*
/*
* 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
* Note: The server credentials are used by all threads in the running process.
* This function is threadsafe.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
int /* O - 1 on success, 0 on failure */
/*
* 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
int /* O - 1 if valid, 0 otherwise */
/*
* 'httpCredentialsGetTrust()' - Return the trust of credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
http_trust_t /* O - Level of trust */
/*
* 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
time_t /* O - Expiration date of credentials */
/*
* 'httpCredentialsString()' - Return a string representing the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS X 10.10@
*/
size_t /* O - Total size of credentials string */
/*
* 'httpLoadCredentials()' - Load X.509 credentials from a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 0 on success, -1 on error */
/*
* 'httpSaveCredentials()' - Save X.509 credentials to a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - -1 on error, 0 on success */
/*
- * End of "$Id: tls-darwin.c 12029 2014-07-15 18:59:26Z msweet $".
+ * End of "$Id: tls-darwin.c 12094 2014-08-19 12:15:11Z msweet $".
*/
/*
- * "$Id: tls-gnutls.c 12050 2014-07-18 16:51:12Z msweet $"
+ * "$Id: tls-gnutls.c 12125 2014-08-28 15:49:29Z msweet $"
*
* TLS support code for CUPS using GNU TLS.
*
/*
* 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
* Note: The server credentials are used by all threads in the running process.
* This function is threadsafe.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
/*
* 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if valid, 0 otherwise */
/*
* 'httpCredentialsGetTrust()' - Return the trust of credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_trust_t /* O - Level of trust */
/*
* 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
time_t /* O - Expiration date of credentials */
/*
* 'httpCredentialsString()' - Return a string representing the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Total size of credentials string */
/*
* 'httpLoadCredentials()' - Load X.509 credentials from a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 0 on success, -1 on error */
/*
* 'httpSaveCredentials()' - Save X.509 credentials to a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - -1 on error, 0 on success */
gnutls_transport_set_ptr(http->tls, (gnutls_transport_ptr_t)http);
gnutls_transport_set_pull_function(http->tls, http_gnutls_read);
+#ifdef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION
gnutls_transport_set_pull_timeout_function(http->tls, (gnutls_pull_timeout_func)httpWait);
+#endif /* HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION */
gnutls_transport_set_push_function(http->tls, http_gnutls_write);
while ((status = gnutls_handshake(http->tls)) != GNUTLS_E_SUCCESS)
/*
- * End of "$Id: tls-gnutls.c 12050 2014-07-18 16:51:12Z msweet $".
+ * End of "$Id: tls-gnutls.c 12125 2014-08-28 15:49:29Z msweet $".
*/
/*
- * "$Id: tls-sspi.c 12047 2014-07-18 13:53:34Z msweet $"
+ * "$Id: tls-sspi.c 12094 2014-08-19 12:15:11Z msweet $"
*
* TLS support for CUPS on Windows using SSPI.
*
/*
* 'cupsMakeServerCredentials()' - Make a self-signed certificate and private key pair.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
* Note: The server credentials are used by all threads in the running process.
* This function is threadsafe.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 on success, 0 on failure */
/*
* 'httpCredentialsAreValidForName()' - Return whether the credentials are valid for the given name.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 1 if valid, 0 otherwise */
/*
* 'httpCredentialsGetTrust()' - Return the trust of credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
http_trust_t /* O - Level of trust */
/*
* 'httpCredentialsGetExpiration()' - Return the expiration date of the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
time_t /* O - Expiration date of credentials */
/*
* 'httpCredentialsString()' - Return a string representing the credentials.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
size_t /* O - Total size of credentials string */
/*
* 'httpLoadCredentials()' - Load X.509 credentials from a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - 0 on success, -1 on error */
/*
* 'httpSaveCredentials()' - Save X.509 credentials to a keychain file.
*
- * @since CUPS 2.0@
+ * @since CUPS 2.0/OS 10.10@
*/
int /* O - -1 on error, 0 on success */
/*
- * End of "$Id: tls-sspi.c 12047 2014-07-18 13:53:34Z msweet $".
+ * End of "$Id: tls-sspi.c 12094 2014-08-19 12:15:11Z msweet $".
*/
/*
- * "$Id: tls.c 11841 2014-04-29 16:39:25Z msweet $"
+ * "$Id: tls.c 12136 2014-08-29 15:19:40Z msweet $"
*
* TLS routines for CUPS.
*
# include "tls-gnutls.c"
# elif defined(HAVE_CDSASSL)
# include "tls-darwin.c"
-# else
+# elif defined(HAVE_SSPISSL)
# include "tls-sspi.c"
# endif /* HAVE_GNUTLS */
+#else
+/* Stubs for when TLS is not supported/available */
+int
+httpCopyCredentials(http_t *http, cups_array_t **credentials)
+{
+ (void)http;
+ if (credentials)
+ *credentials = NULL;
+ return (-1);
+}
+int
+httpCredentialsAreValidForName(cups_array_t *credentials, const char *common_name)
+{
+ (void)credentials;
+ (void)common_name;
+ return (1);
+}
+time_t
+httpCredentialsGetExpiration(cups_array_t *credentials)
+{
+ (void)credentials;
+ return (INT_MAX);
+}
+http_trust_t
+httpCredentialsGetTrust(cups_array_t *credentials, const char *common_name)
+{
+ (void)credentials;
+ (void)common_name;
+ return (HTTP_TRUST_OK);
+}
+size_t
+httpCredentialsString(cups_array_t *credentials, char *buffer, size_t bufsize)
+{
+ (void)credentials;
+ (void)bufsize;
+ if (buffer)
+ *buffer = '\0';
+ return (0);
+}
+int
+httpLoadCredentials(const char *path, cups_array_t **credentials, const char *common_name)
+{
+ (void)path;
+ (void)credentials;
+ (void)common_name;
+ return (-1);
+}
+int
+httpSaveCredentials(const char *path, cups_array_t *credentials, const char *common_name)
+{
+ (void)path;
+ (void)credentials;
+ (void)common_name;
+ return (-1);
+}
#endif /* HAVE_SSL */
/*
- * End of "$Id: tls.c 11841 2014-04-29 16:39:25Z msweet $".
+ * End of "$Id: tls.c 12136 2014-08-29 15:19:40Z msweet $".
*/
/*
- * "$Id: usersys.c 11908 2014-06-09 18:57:44Z msweet $"
+ * "$Id: usersys.c 12124 2014-08-28 15:37:22Z msweet $"
*
* User, system, and password routines for CUPS.
*
if (cupsArrayCount(credentials) < 1)
return (-1);
+#ifdef HAVE_SSL
_httpFreeCredentials(cg->tls_credentials);
cg->tls_credentials = _httpCreateCredentials(credentials);
+#endif /* HAVE_SSL */
return (cg->tls_credentials ? 0 : -1);
}
/*
- * End of "$Id: usersys.c 11908 2014-06-09 18:57:44Z msweet $".
+ * End of "$Id: usersys.c 12124 2014-08-28 15:37:22Z msweet $".
*/
borderless size, typically US Letter or A4, but sometimes 4x6 photo media.
</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="cupsGetDestWithURI">cupsGetDestWithURI</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS X 10.10 </span><a name="cupsGetDestWithURI">cupsGetDestWithURI</a></h3>
<p class="description">Get a destination associated with a URI.</p>
<p class="code">
<a href="#cups_dest_t">cups_dest_t</a> *cupsGetDestWithURI (<br>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">Language data</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="cupsLocalizeDestMedia">cupsLocalizeDestMedia</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS X 10.10 </span><a name="cupsLocalizeDestMedia">cupsLocalizeDestMedia</a></h3>
<p class="description">Get the localized string for a destination media
size.</p>
<p class="code">
<li><a href="#COMMUNICATING_FILTER">Communicating with Filters</a></li>
<li><a href="#SNMP">Doing SNMP Queries with Network Printers</a></li>
</ul></li>
+<li><a href="#SANDBOXING">Sandboxing on OS X</a></li>
<li><a href="#FUNCTIONS">Functions</a><ul class="code">
<li><a href="#cupsBackChannelRead" title="Read data from the backchannel.">cupsBackChannelRead</a></li>
<li><a href="#cupsBackChannelWrite" title="Write data to the backchannel.">cupsBackChannelWrite</a></li>
Filter and backend programming introduction for CUPS.
- Copyright 2007-2013 by Apple Inc.
+ Copyright 2007-2014 by Apple Inc.
Copyright 1997-2006 by Easy Software Products, all rights reserved.
These coded instructions, statements, and computer programs are the
<p>In addition, some operating systems provide additional security mechanisms
that further limit file system access, even for backends running as root. On
-OS X, for example, no backend may write to a user's home directory.</p>
+OS X, for example, no backend may write to a user's home directory. See the <a href="#SANDBOXING">Sandboxing on OS X</a> section for more information.</p>
</blockquote>
<h3><a name="SIGNALS">Canceled Jobs and Signal Handling</a></h3>
<a href="#cupsSideChannelSNMPWalk">cupsSNMPSideChannelWalk</a>(".1.3.6.1.2.1.43", 5.0, my_callback, my_data);
</pre>
+
+<h2><a name="SANDBOXING">Sandboxing on OS X</a></h2>
+
+<p>Starting with OS X 10.6, filters and backends are run inside a security "sandbox" which further limits (beyond the normal UNIX user/group permissions) what a filter or backend can do. This helps to both secure the printing system from malicious software and enforce the functional separation of components in the CUPS filter chain. What follows is a list of actions that are explicitly allowed for all filters and backends:</p>
+
+<ol>
+
+ <li>Reading of files: pursuant to normal UNIX file permissions, filters and backends can read files for the current job from the <var>/private/var/spool/cups</var> directory and other files on mounted filesystems <em>except</em> for user home directories under <var>/Users</var>.</li>
+
+ <li>Writing of files: pursuant to normal UNIX file permissions, filters and backends can read/write files to the cache directory specified by the <code>CUPS_CACHEDIR</code> environment variable, to the state directory specified by the <code>CUPS_STATEDIR</code> environment variable, to the temporary directory specified by the <code>TMPDIR</code> environment variable, and under the <var>/private/var/db</var>, <var>/private/var/folders</var>, <var>/private/var/lib</var>, <var>/private/var/mysql</var>, <var>/private/var/run</var>, <var>/private/var/spool</var> (except <var>/private/var/spool/cups</var>), <var>/Library/Application Support</var>, <var>/Library/Caches</var>, <var>/Library/Logs</var>, <var>/Library/Preferences</var>, <var>/Library/WebServer</var>, and <var>/Users/Shared</var> directories.</li>
+
+ <li>Execution of programs: pursuant to normal UNIX file permissions, filters and backends can execute any program not located under the <var>/Users</var> directory. Child processes inherit the sandbox and are subject to the same restrictions as the parent.</li>
+
+ <li>Bluetooth and USB: backends can access Bluetooth and USB printers through IOKit. <em>Filters cannot access Bluetooth and USB printers directly.</em></li>
+
+ <li>Network: filters and backends can access UNIX domain sockets under the <var>/private/tmp</var>, <var>/private/var/run</var>, and <var>/private/var/tmp</var> directories. Backends can also create IPv4 and IPv6 TCP (outgoing) and UDP (incoming and outgoing) socket, and bind to local source ports. <em>Filters cannot directly create IPv4 and IPv6 TCP or UDP sockets.</em></li>
+
+ <li>Notifications: filters and backends can send notifications via the Darwin <code>notify_post()</code> API.</li>
+
+</ol>
+
+<blockquote><b>Note:</b> The sandbox profile used in CUPS 2.0 still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.</blockquote>
<h2 class="title"><a name="FUNCTIONS">Functions</a></h2>
<h3 class="function"><span class="info"> CUPS 1.2/OS X 10.5 </span><a name="cupsBackChannelRead">cupsBackChannelRead</a></h3>
<p class="description">Read data from the backchannel.</p>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">1 if "any", 0 otherwise</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpAddrClose">httpAddrClose</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpAddrClose">httpAddrClose</a></h3>
<p class="description">Close a socket created by <a href="#httpAddrConnect"><code>httpAddrConnect</code></a> or
<a href="#httpAddrListen"><code>httpAddrListen</code></a>.</p>
<p class="code">
<dt>http</dt>
<dd class="description">HTTP connection</dd>
</dl>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpCompareCredentials">httpCompareCredentials</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpCompareCredentials">httpCompareCredentials</a></h3>
<p class="description">Compare two sets of X.509 credentials.</p>
<p class="code">
int httpCompareCredentials (<br>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpGetActivity">httpGetActivity</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpGetActivity">httpGetActivity</a></h3>
<p class="description">Get the most recent activity for a connection.</p>
<p class="code">
time_t httpGetActivity (<br>
<p class="discussion">The return value is the UNIX time of the last read or write.
</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpGetAddress">httpGetAddress</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpGetAddress">httpGetAddress</a></h3>
<p class="description">Get the address of the connected peer of a connection.</p>
<p class="code">
<a href="#http_addr_t">http_addr_t</a> *httpGetAddress (<br>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">UNIX time</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpGetEncryption">httpGetEncryption</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpGetEncryption">httpGetEncryption</a></h3>
<p class="description">Get the current encryption mode of a connection.</p>
<p class="code">
<a href="#http_encryption_t">http_encryption_t</a> httpGetEncryption (<br>
and gethostbyname() to get the local hostname with domain.
</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpGetKeepAlive">httpGetKeepAlive</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpGetKeepAlive">httpGetKeepAlive</a></h3>
<p class="description">Get the current Keep-Alive state of the connection.</p>
<p class="code">
<a href="#http_keepalive_t">http_keepalive_t</a> httpGetKeepAlive (<br>
content larger than 2^31 - 1.
</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpGetPending">httpGetPending</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpGetPending">httpGetPending</a></h3>
<p class="description">Get the number of bytes that are buffered for writing.</p>
<p class="code">
size_t httpGetPending (<br>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">Number of bytes buffered</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpGetReady">httpGetReady</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpGetReady">httpGetReady</a></h3>
<p class="description">Get the number of bytes that can be read without blocking.</p>
<p class="code">
size_t httpGetReady (<br>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">Number of bytes available</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpGetRemaining">httpGetRemaining</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpGetRemaining">httpGetRemaining</a></h3>
<p class="description">Get the number of remaining bytes in the message
body or current chunk.</p>
<p class="code">
default HTTP proxy (if any).</p>
<p class="code">
void httpInitialize (void);</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpIsChunked">httpIsChunked</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpIsChunked">httpIsChunked</a></h3>
<p class="description">Report whether a message body is chunked.</p>
<p class="code">
int httpIsChunked (<br>
variable-length chunks.
</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpIsEncrypted">httpIsEncrypted</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpIsEncrypted">httpIsEncrypted</a></h3>
<p class="description">Report whether a connection is encrypted.</p>
<p class="code">
int httpIsEncrypted (<br>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">0 on success, non-zero on failure</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpResolveHostname">httpResolveHostname</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpResolveHostname">httpResolveHostname</a></h3>
<p class="description">Resolve the hostname of the HTTP connection
address.</p>
<p class="code">
<dt>value</dt>
<dd class="description">Value</dd>
</dl>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpSetKeepAlive">httpSetKeepAlive</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpSetKeepAlive">httpSetKeepAlive</a></h3>
<p class="description">Set the current Keep-Alive state of a connection.</p>
<p class="code">
void httpSetKeepAlive (<br>
data pointer and must return 1 to continue or 0 to error (time) out.
</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpShutdown">httpShutdown</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpShutdown">httpShutdown</a></h3>
<p class="description">Shutdown one side of an HTTP connection.</p>
<p class="code">
void httpShutdown (<br>
<dt>http</dt>
<dd class="description">HTTP connection</dd>
</dl>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpStateString">httpStateString</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpStateString">httpStateString</a></h3>
<p class="description">Return the string describing a HTTP state value.</p>
<p class="code">
const char *httpStateString (<br>
</dl>
<h4 class="returnvalue">Return Value</h4>
<p class="description">Status of call (0 = success)</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="httpURIStatusString">httpURIStatusString</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="httpURIStatusString">httpURIStatusString</a></h3>
<p class="description">Return a string describing a URI status code.</p>
<p class="code">
const char *httpURIStatusString (<br>
<h4 class="returnvalue">Return Value</h4>
<p class="description">1 on success, 0 on error</p>
<h4 class="discussion">Discussion</h4>
-<p class="discussion">Zero or more attributes are copied from the source IPP message, @code@ src, to the
+<p class="discussion">Zero or more attributes are copied from the source IPP message, <code>src</code>, to the
destination IPP message, <code>dst</code>. When <code>quickcopy</code> is non-zero, a "shallow"
reference copy of the attribute is created - this should only be done as long as the
original source IPP message will not be freed for the life of the destination.<br>
The valid version numbers are currently 1.0, 1.1, 2.0, 2.1, and 2.2.
</p>
-<h3 class="function"><span class="info"> CUPS 2.0 </span><a name="ippStateString">ippStateString</a></h3>
+<h3 class="function"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="ippStateString">ippStateString</a></h3>
<p class="description">Return the name corresponding to a state value.</p>
<p class="code">
const char *ippStateString (<br>
<p class="code">
typedef int (*http_timeout_cb_t)(<a href="#http_t">http_t</a> *http, void *user_data);
</p>
-<h3 class="typedef"><span class="info"> CUPS 2.0 </span><a name="http_trust_t">http_trust_t</a></h3>
+<h3 class="typedef"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="http_trust_t">http_trust_t</a></h3>
<p class="description">Level of trust for credentials </p>
<p class="code">
typedef enum <a href="#http_trust_e">http_trust_e</a> http_trust_t;
<dt>HTTP_STATUS_USE_PROXY </dt>
<dd class="description">Must use a proxy to access this URI</dd>
</dl>
-<h3 class="enumeration"><span class="info"> CUPS 2.0 </span><a name="http_trust_e">http_trust_e</a></h3>
+<h3 class="enumeration"><span class="info"> CUPS 2.0/OS 10.10 </span><a name="http_trust_e">http_trust_e</a></h3>
<p class="description">Level of trust for credentials </p>
<h4 class="constants">Constants</h4>
<dl>
<b>ipptool</b>
sends IPP requests to the specified
<i>printer-uri</i>
-and tests and/or displays the results. Each named
+and tests and/or displays the results.
+Each named
<i>testfile</i>
-defines one or more requests, including the expected response status, attributes, and values. Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed. The
+defines one or more requests, including the expected response status, attributes, and values.
+Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed.
+The
<i>testfile</i>
format is described in
<a href="man-ipptoolfile.html?TOPIC=Man+Pages"><b>ipptoolfile</b>(5).</a>
<b>ipptool</b>
must connect to the printer or server using IPv6.
<dt><b>-C</b>
-<dd style="margin-left: 5.0em">Specifies that requests should be sent using the HTTP/1.1 "Transfer-Encoding: chunked" header, which is required for conformance by all versions of IPP. The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
+<dd style="margin-left: 5.0em">Specifies that requests should be sent using the HTTP/1.1 "Transfer-Encoding: chunked" header, which is required for conformance by all versions of IPP.
+The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
<dt><b>-E</b>
<dd style="margin-left: 5.0em">Forces TLS encryption when connecting to the server using the HTTP "Upgrade" header.
<dt><b>-I</b>
<b>ipptool</b>
will continue past errors.
<dt><b>-L</b>
-<dd style="margin-left: 5.0em">Specifies that requests should be sent using the HTTP/1.0 "Content-Length:" header, which is required for conformance by all versions of IPP. The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
+<dd style="margin-left: 5.0em">Specifies that requests should be sent using the HTTP/1.0 "Content-Length:" header, which is required for conformance by all versions of IPP.
+The default is to use "Transfer-Encoding: chunked" for requests with attached files and "Content-Length:" for requests without attached files.
<dt><b>-P</b><i> filename.plist</i>
-<dd style="margin-left: 5.0em">Specifies that the test results should be written to the named XML (Apple plist) file in addition to the plain text report. This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
+<dd style="margin-left: 5.0em">Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (<b>-t</b>).
+This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
<dt><b>-S</b>
<dd style="margin-left: 5.0em">Forces (dedicated) TLS encryption when connecting to the server.
<dt><b>-T</b><i> seconds</i>
<dt><b>-V</b><i> version</i>
<dd style="margin-left: 5.0em">Specifies the default IPP version to use: 1.0, 1.1, 2.0, 2.1, or 2.2. If not specified, version 1.1 is used.
<dt><b>-X</b>
-<dd style="margin-left: 5.0em">Specifies that XML (Apple plist) output is desired instead of the plain text report. This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
+<dd style="margin-left: 5.0em">Specifies that XML (Apple plist) output is desired instead of the plain text report.
+This option is incompatible with the <b>-i</b> (interval) and <b>-n</b> (repeat-count) options.
<dt><b>-c</b>
<dd style="margin-left: 5.0em">Specifies that CSV (comma-separated values) output is desired instead of the plain text output.
<dt><b>-d</b><i> name=value</i>
<dt><b>-i</b><i> seconds</i>
<dd style="margin-left: 5.0em">Specifies that the (last)
<i>testfile</i>
-should be repeated at the specified interval. This option is incompatible with the <b>-X</b> (XML plist output) option.
+should be repeated at the specified interval.
+This option is incompatible with the <b>-X</b> (XML plist output) option.
<dt><b>-l</b>
<dd style="margin-left: 5.0em">Specifies that plain text output is desired.
<dt><b>-n</b><i> repeat-count</i>
<dd style="margin-left: 5.0em">Specifies that the (last)
<i>testfile</i>
-should be repeated the specified number of times. This option is incompatible with the <i>-X</i> (XML plist output) option.
+should be repeated the specified number of times.
+This option is incompatible with the <i>-X</i> (XML plist output) option.
+<dt><b>-q</b>
+<dd style="margin-left: 5.0em">Be quiet and produce no output.
<dt><b>-t</b>
<dd style="margin-left: 5.0em">Specifies that CUPS test report output is desired instead of the plain text output.
<dt><b>-v</b>
-<dd style="margin-left: 5.0em">Specifies that all request and response attributes should be output in CUPS test mode (<b>-t</b>). This is the default for XML output.
+<dd style="margin-left: 5.0em">Specifies that all request and response attributes should be output in CUPS test mode (<b>-t</b>).
+This is the default for XML output.
</dl>
<h2 class="title"><a name="EXIT_STATUS">Exit Status</a></h2>
The
/*
- * "$Id: raster.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: raster.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Raster file routines for CUPS.
*
if (!cups_raster_read(r, &byte, 1))
return (0);
- r->count = byte + 1;
+ r->count = (unsigned)byte + 1;
if (r->count > 1)
ptr = r->pixels;
* Repeat the next N bytes...
*/
- count = (byte + 1) * r->bpp;
+ count = ((unsigned)byte + 1) * r->bpp;
if (count > (unsigned)bytes)
count = (unsigned)bytes;
/*
- * End of "$Id: raster.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: raster.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: rastertoepson.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: rastertoepson.c 12124 2014-08-28 15:37:22Z msweet $"
*
* EPSON ESC/P and ESC/P2 filter for CUPS.
*
if (Model < EPSON_ICOLOR)
{
pwrite("\033(U\001\000", 5); /* Resolution/units */
- putchar(3600 / header->HWResolution[1]);
+ putchar((int)(3600 / header->HWResolution[1]));
}
else
{
pwrite("\033(U\005\000", 5);
- putchar(1440 / header->HWResolution[1]);
- putchar(1440 / header->HWResolution[1]);
- putchar(1440 / header->HWResolution[0]);
+ putchar((int)(1440 / header->HWResolution[1]));
+ putchar((int)(1440 / header->HWResolution[1]));
+ putchar((int)(1440 / header->HWResolution[0]));
putchar(0xa0); /* n/1440ths... */
putchar(0x05);
}
{
putchar(0x1b);
putchar('$');
- putchar(i & 255);
- putchar(i >> 8);
+ putchar((int)(i & 255));
+ putchar((int)(i >> 8));
}
/*
}
n = dot_count / DotBytes;
- putchar(n & 255);
- putchar(n / 256);
+ putchar((int)(n & 255));
+ putchar((int)(n / 256));
/*
* Write the graphics data...
{
putchar(0x1b);
putchar('$');
- putchar(i & 255);
- putchar(i >> 8);
+ putchar((int)(i & 255));
+ putchar((int)(i >> 8));
}
if (header->HWResolution[0] == 120)
printf("\033*\003"); /* Select bit image */
n = (unsigned)dot_count / DotBytes;
- putchar(n & 255);
- putchar(n / 256);
+ putchar((int)(n & 255));
+ putchar((int)(n / 256));
for (n = dot_count / 2, ptr = dot_ptr + 1; n > 0; n --, ptr += 2)
{
/*
- * End of "$Id: rastertoepson.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: rastertoepson.c 12124 2014-08-28 15:37:22Z msweet $".
*/
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: systemv/lpstat.c:1864 systemv/lpstat.c:1987
+#: systemv/lpstat.c:1867 systemv/lpstat.c:1990
msgid "\t\t(all)"
msgstr ""
-#: systemv/lpstat.c:1867 systemv/lpstat.c:1870 systemv/lpstat.c:1990
-#: systemv/lpstat.c:1993
+#: systemv/lpstat.c:1870 systemv/lpstat.c:1873 systemv/lpstat.c:1993
+#: systemv/lpstat.c:1996
msgid "\t\t(none)"
msgstr ""
msgid "\t%s"
msgstr ""
-#: systemv/lpstat.c:1845 systemv/lpstat.c:1968
+#: systemv/lpstat.c:1848 systemv/lpstat.c:1971
msgid "\tAfter fault: continue"
msgstr ""
-#: systemv/lpstat.c:1468 systemv/lpstat.c:1814 systemv/lpstat.c:1938
+#: systemv/lpstat.c:1471 systemv/lpstat.c:1817 systemv/lpstat.c:1941
#, c-format
msgid "\tAlerts: %s"
msgstr ""
-#: systemv/lpstat.c:1868 systemv/lpstat.c:1991
+#: systemv/lpstat.c:1871 systemv/lpstat.c:1994
msgid "\tBanner required"
msgstr ""
-#: systemv/lpstat.c:1869 systemv/lpstat.c:1992
+#: systemv/lpstat.c:1872 systemv/lpstat.c:1995
msgid "\tCharset sets:"
msgstr ""
-#: systemv/lpstat.c:1833 systemv/lpstat.c:1956
+#: systemv/lpstat.c:1836 systemv/lpstat.c:1959
msgid "\tConnection: direct"
msgstr ""
-#: systemv/lpstat.c:1824 systemv/lpstat.c:1948
+#: systemv/lpstat.c:1827 systemv/lpstat.c:1951
msgid "\tConnection: remote"
msgstr ""
-#: systemv/lpstat.c:1790 systemv/lpstat.c:1914
+#: systemv/lpstat.c:1793 systemv/lpstat.c:1917
msgid "\tContent types: any"
msgstr ""
-#: systemv/lpstat.c:1872 systemv/lpstat.c:1995
+#: systemv/lpstat.c:1875 systemv/lpstat.c:1998
msgid "\tDefault page size:"
msgstr ""
-#: systemv/lpstat.c:1871 systemv/lpstat.c:1994
+#: systemv/lpstat.c:1874 systemv/lpstat.c:1997
msgid "\tDefault pitch:"
msgstr ""
-#: systemv/lpstat.c:1873 systemv/lpstat.c:1996
+#: systemv/lpstat.c:1876 systemv/lpstat.c:1999
msgid "\tDefault port settings:"
msgstr ""
-#: systemv/lpstat.c:1796 systemv/lpstat.c:1920
+#: systemv/lpstat.c:1799 systemv/lpstat.c:1923
#, c-format
msgid "\tDescription: %s"
msgstr ""
-#: systemv/lpstat.c:1789 systemv/lpstat.c:1913
+#: systemv/lpstat.c:1792 systemv/lpstat.c:1916
msgid "\tForm mounted:"
msgstr ""
-#: systemv/lpstat.c:1866 systemv/lpstat.c:1989
+#: systemv/lpstat.c:1869 systemv/lpstat.c:1992
msgid "\tForms allowed:"
msgstr ""
-#: systemv/lpstat.c:1828 systemv/lpstat.c:1952
+#: systemv/lpstat.c:1831 systemv/lpstat.c:1955
#, c-format
msgid "\tInterface: %s.ppd"
msgstr ""
-#: systemv/lpstat.c:1837 systemv/lpstat.c:1960
+#: systemv/lpstat.c:1840 systemv/lpstat.c:1963
#, c-format
msgid "\tInterface: %s/interfaces/%s"
msgstr ""
-#: systemv/lpstat.c:1841 systemv/lpstat.c:1964
+#: systemv/lpstat.c:1844 systemv/lpstat.c:1967
#, c-format
msgid "\tInterface: %s/ppd/%s.ppd"
msgstr ""
-#: systemv/lpstat.c:1819 systemv/lpstat.c:1943
+#: systemv/lpstat.c:1822 systemv/lpstat.c:1946
#, c-format
msgid "\tLocation: %s"
msgstr ""
-#: systemv/lpstat.c:1844 systemv/lpstat.c:1967
+#: systemv/lpstat.c:1847 systemv/lpstat.c:1970
msgid "\tOn fault: no alert"
msgstr ""
-#: systemv/lpstat.c:1791 systemv/lpstat.c:1915
+#: systemv/lpstat.c:1794 systemv/lpstat.c:1918
msgid "\tPrinter types: unknown"
msgstr ""
-#: systemv/lpstat.c:1451
+#: systemv/lpstat.c:1454
#, c-format
msgid "\tStatus: %s"
msgstr ""
-#: systemv/lpstat.c:1849 systemv/lpstat.c:1863 systemv/lpstat.c:1972
-#: systemv/lpstat.c:1986
+#: systemv/lpstat.c:1852 systemv/lpstat.c:1866 systemv/lpstat.c:1975
+#: systemv/lpstat.c:1989
msgid "\tUsers allowed:"
msgstr ""
-#: systemv/lpstat.c:1856 systemv/lpstat.c:1979
+#: systemv/lpstat.c:1859 systemv/lpstat.c:1982
msgid "\tUsers denied:"
msgstr ""
msgid "\tprinting is enabled"
msgstr ""
-#: systemv/lpstat.c:1471
+#: systemv/lpstat.c:1474
#, c-format
msgid "\tqueued for %s"
msgstr ""
msgid "\tqueuing is enabled"
msgstr ""
-#: systemv/lpstat.c:1782 systemv/lpstat.c:1906
+#: systemv/lpstat.c:1785 systemv/lpstat.c:1909
msgid "\treason unknown"
msgstr ""
msgid " Warning: obsolete DSC version %.1f in file."
msgstr ""
-#: test/ippfind.c:2758
+#: test/ippfind.c:2788
msgid " ! expression Unary NOT of expression."
msgstr ""
-#: test/ippfind.c:2757
+#: test/ippfind.c:2787
msgid " ( expressions ) Group expressions."
msgstr ""
msgid " --crlf End lines with CR + LF (Windows)."
msgstr ""
-#: test/ippfind.c:2739
+#: test/ippfind.c:2769
msgid " --domain regex Match domain to regular expression."
msgstr ""
-#: test/ippfind.c:2740
+#: test/ippfind.c:2770
msgid ""
" --exec utility [argument ...] ;\n"
" Execute program if true."
msgstr ""
-#: test/ippfind.c:2760
+#: test/ippfind.c:2790
msgid " --false Always false."
msgstr ""
-#: test/ippfind.c:2722
+#: test/ipptool.c:4806
+msgid " --help Show help."
+msgstr ""
+
+#: test/ippfind.c:2752
msgid " --help Show this help."
msgstr ""
-#: test/ippfind.c:2742
+#: test/ippfind.c:2772
msgid " --host regex Match hostname to regular expression."
msgstr ""
msgid " --list-filters List filters that will be used."
msgstr ""
-#: test/ippfind.c:2744
+#: test/ippfind.c:2774
msgid " --local True if service is local."
msgstr ""
-#: test/ippfind.c:2743
+#: test/ippfind.c:2773
msgid " --ls List attributes."
msgstr ""
-#: test/ippfind.c:2745
+#: test/ippfind.c:2775
msgid " --name regex Match service name to regular expression."
msgstr ""
-#: test/ippfind.c:2759
+#: test/ippfind.c:2789
msgid " --not expression Unary NOT of expression."
msgstr ""
-#: test/ippfind.c:2746
+#: test/ippfind.c:2776
msgid " --path regex Match resource path to regular expression."
msgstr ""
-#: test/ippfind.c:2747
+#: test/ippfind.c:2777
msgid " --port number[-number] Match port to number or range."
msgstr ""
-#: test/ippfind.c:2748
+#: test/ippfind.c:2778
msgid " --print Print URI if true."
msgstr ""
-#: test/ippfind.c:2749
+#: test/ippfind.c:2779
msgid " --print-name Print service name if true."
msgstr ""
-#: test/ippfind.c:2750
+#: test/ippfind.c:2780
msgid " --quiet Quietly report match via exit code."
msgstr ""
-#: test/ippfind.c:2751
+#: test/ippfind.c:2781
msgid " --remote True if service is remote."
msgstr ""
-#: test/ippfind.c:2761
+#: test/ipptool.c:4807
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
+#: test/ippfind.c:2791
msgid " --true Always true."
msgstr ""
-#: test/ippfind.c:2752
+#: test/ippfind.c:2782
msgid " --txt key True if the TXT record contains the key."
msgstr ""
-#: test/ippfind.c:2753
+#: test/ippfind.c:2783
msgid " --txt-* regex Match TXT record key to regular expression."
msgstr ""
-#: test/ippfind.c:2754
+#: test/ippfind.c:2784
msgid " --uri regex Match URI to regular expression."
msgstr ""
-#: test/ippfind.c:2723
+#: test/ippfind.c:2753
msgid " --version Show program version."
msgstr ""
-#: test/ippfind.c:2716 test/ipptool.c:4714
+#: test/ipptool.c:4809
+msgid " --version Show version."
+msgstr ""
+
+#: test/ippfind.c:2746 test/ipptool.c:4810
msgid " -4 Connect using IPv4."
msgstr ""
-#: test/ippfind.c:2717 test/ipptool.c:4715
+#: test/ippfind.c:2747 test/ipptool.c:4811
msgid " -6 Connect using IPv6."
msgstr ""
-#: test/ipptool.c:4716
+#: test/ipptool.c:4812
msgid " -C Send requests using chunking (default)."
msgstr ""
msgid " -E Encrypt the connection."
msgstr ""
-#: test/ipptool.c:4718
+#: test/ipptool.c:4814
msgid " -E Test with HTTP Upgrade to TLS."
msgstr ""
-#: scheduler/main.c:2161
+#: scheduler/main.c:2149
msgid " -F Run in the foreground but detach from console."
msgstr ""
msgid " -H samba-server Use the named SAMBA server."
msgstr ""
-#: test/ipptool.c:4720
+#: test/ipptool.c:4816
msgid " -I Ignore errors."
msgstr ""
msgid " -I {filename,filters,none,profiles}"
msgstr ""
-#: test/ipptool.c:4721
+#: test/ipptool.c:4817
msgid " -L Send requests using content-length."
msgstr ""
+#: test/ipptool.c:4819
+msgid " -P filename.plist Produce XML plist to a file and test report to standard output."
+msgstr ""
+
#: scheduler/cupsfilter.c:1485
msgid " -P filename.ppd Set PPD file."
msgstr ""
-#: test/ippfind.c:2726
+#: test/ippfind.c:2756
msgid " -P number[-number] Match port to number or range."
msgstr ""
msgid " -R root-directory Set alternate root."
msgstr ""
-#: test/ipptool.c:4723
+#: test/ipptool.c:4820
msgid " -S Test with SSL encryption."
msgstr ""
-#: test/ippfind.c:2718
+#: test/ippfind.c:2748
msgid " -T seconds Set the browse timeout in seconds."
msgstr ""
-#: test/ipptool.c:4725
+#: test/ipptool.c:4822
msgid " -T seconds Set the receive/send timeout in seconds."
msgstr ""
msgid " -U username Specify username."
msgstr ""
-#: test/ippfind.c:2720 test/ipptool.c:4727
+#: test/ippfind.c:2750 test/ipptool.c:4824
msgid " -V version Set default IPP version."
msgstr ""
msgid " -W {all,none,constraints,defaults,duplex,filters,profiles,sizes,translations}"
msgstr ""
-#: test/ipptool.c:4729
+#: test/ipptool.c:4826
msgid " -X Produce XML plist instead of plain text."
msgstr ""
msgid " -a Export all printers."
msgstr ""
+#: test/ipptool.c:4828
+msgid " -c Produce CSV output."
+msgstr ""
+
#: ppdc/ppdc.cxx:437
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
msgid " -c cups-files.conf Set cups-files.conf file to use."
msgstr ""
-#: scheduler/main.c:2159
+#: scheduler/main.c:2147
msgid " -c cupsd.conf Set cupsd.conf file to use."
msgstr ""
msgid " -d domain Browse/resolve in specified domain."
msgstr ""
-#: test/ipptool.c:4731
+#: test/ipptool.c:4829
msgid " -d name=value Set named variable to value."
msgstr ""
msgid " -d printer Use the named printer."
msgstr ""
-#: test/ippfind.c:2727
+#: test/ippfind.c:2757
msgid " -d regex Match domain to regular expression."
msgstr ""
msgid " -e Use every filter from the PPD file."
msgstr ""
-#: scheduler/main.c:2160
+#: scheduler/main.c:2148
msgid " -f Run in the foreground."
msgstr ""
-#: test/ipptool.c:4733
+#: test/ipptool.c:4831
msgid " -f filename Set default request filename."
msgstr ""
-#: scheduler/main.c:2163
+#: scheduler/main.c:2151
msgid " -h Show this usage message."
msgstr ""
-#: test/ippfind.c:2728
+#: test/ippfind.c:2758
msgid " -h regex Match hostname to regular expression."
msgstr ""
msgid " -i mime/type Set input MIME type (otherwise auto-typed)."
msgstr ""
-#: test/ipptool.c:4735
+#: test/ipptool.c:4833
msgid " -i seconds Repeat the last file with the given time interval."
msgstr ""
msgid " -j job-id[,N] Filter file N from the specified job (default is file 1)."
msgstr ""
-#: test/ippfind.c:2729
+#: test/ippfind.c:2759
msgid " -l List attributes."
msgstr ""
-#: scheduler/main.c:2164
+#: test/ipptool.c:4835
+msgid " -l Produce plain text output."
+msgstr ""
+
+#: scheduler/main.c:2152
msgid " -l Run cupsd on demand."
msgstr ""
msgid " -n copies Set number of copies."
msgstr ""
-#: test/ipptool.c:4737
+#: test/ipptool.c:4836
msgid " -n count Repeat the last file the given number of times."
msgstr ""
-#: test/ippfind.c:2730
+#: test/ippfind.c:2760
msgid " -n regex Match service name to regular expression."
msgstr ""
msgid " -o name=value Set option(s)."
msgstr ""
-#: test/ippfind.c:2731
+#: test/ippfind.c:2761
msgid " -p Print URI if true."
msgstr ""
msgid " -p program Run specified program for each service."
msgstr ""
-#: test/ippfind.c:2732
+#: test/ippfind.c:2762
msgid " -q Quietly report match via exit code."
msgstr ""
-#: systemv/cupstestppd.c:3826 test/ipptool.c:4739
+#: systemv/cupstestppd.c:3826 test/ipptool.c:4838
msgid " -q Run silently."
msgstr ""
-#: test/ippfind.c:2733
+#: test/ippfind.c:2763
msgid " -r True if service is remote."
msgstr ""
msgid " -r Use 'relaxed' open mode."
msgstr ""
-#: test/ippfind.c:2734
+#: test/ippfind.c:2764
msgid " -s Print service name if true."
msgstr ""
-#: test/ipptool.c:4740
+#: test/ipptool.c:4839
msgid " -t Produce a test report."
msgstr ""
msgid " -t Test PPDs instead of generating them."
msgstr ""
-#: scheduler/main.c:2165
+#: scheduler/main.c:2153
msgid " -t Test the configuration file."
msgstr ""
-#: test/ippfind.c:2735
+#: test/ippfind.c:2765
msgid " -t key True if the TXT record contains the key."
msgstr ""
msgid " -u Remove the PPD file when finished."
msgstr ""
-#: test/ippfind.c:2736
+#: test/ippfind.c:2766
msgid " -u regex Match URI to regular expression."
msgstr ""
-#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4741
+#: systemv/cupsaddsmb.c:291 systemv/cupstestppd.c:3828 test/ipptool.c:4840
#: ppdc/ppdc.cxx:447 ppdc/ppdpo.cxx:259
msgid " -v Be verbose."
msgstr ""
msgid " -vv Be very verbose."
msgstr ""
-#: test/ippfind.c:2737
+#: test/ippfind.c:2767
msgid ""
" -x utility [argument ...] ;\n"
" Execute program if true."
msgid " -z Compress PPD files using GNU zip."
msgstr ""
-#: test/ippfind.c:2780
+#: test/ippfind.c:2810
msgid " IPPFIND_SERVICE_DOMAIN Domain name"
msgstr ""
-#: test/ippfind.c:2781
+#: test/ippfind.c:2811
msgid ""
" IPPFIND_SERVICE_HOSTNAME\n"
" Fully-qualified domain name"
msgstr ""
-#: test/ippfind.c:2783
+#: test/ippfind.c:2813
msgid " IPPFIND_SERVICE_NAME Service instance name"
msgstr ""
-#: test/ippfind.c:2784
+#: test/ippfind.c:2814
msgid " IPPFIND_SERVICE_PORT Port number"
msgstr ""
-#: test/ippfind.c:2785
+#: test/ippfind.c:2815
msgid " IPPFIND_SERVICE_REGTYPE DNS-SD registration type"
msgstr ""
-#: test/ippfind.c:2786
+#: test/ippfind.c:2816
msgid " IPPFIND_SERVICE_SCHEME URI scheme"
msgstr ""
-#: test/ippfind.c:2787
+#: test/ippfind.c:2817
msgid " IPPFIND_SERVICE_URI URI"
msgstr ""
-#: test/ippfind.c:2788
+#: test/ippfind.c:2818
msgid " IPPFIND_TXT_* Value of TXT record key"
msgstr ""
-#: test/ippfind.c:2763
+#: test/ippfind.c:2793
msgid ""
" expression --and expression\n"
" Logical AND."
msgstr ""
-#: test/ippfind.c:2765
+#: test/ippfind.c:2795
msgid ""
" expression --or expression\n"
" Logical OR."
msgstr ""
-#: test/ippfind.c:2762
+#: test/ippfind.c:2792
msgid " expression expression Logical AND."
msgstr ""
-#: test/ippfind.c:2770
+#: test/ippfind.c:2800
msgid " {service_domain} Domain name"
msgstr ""
-#: test/ippfind.c:2771
+#: test/ippfind.c:2801
msgid " {service_hostname} Fully-qualified domain name"
msgstr ""
-#: test/ippfind.c:2772
+#: test/ippfind.c:2802
msgid " {service_name} Service instance name"
msgstr ""
-#: test/ippfind.c:2773
+#: test/ippfind.c:2803
msgid " {service_port} Port number"
msgstr ""
-#: test/ippfind.c:2774
+#: test/ippfind.c:2804
msgid " {service_regtype} DNS-SD registration type"
msgstr ""
-#: test/ippfind.c:2775
+#: test/ippfind.c:2805
msgid " {service_scheme} URI scheme"
msgstr ""
-#: test/ippfind.c:2776
+#: test/ippfind.c:2806
msgid " {service_uri} URI"
msgstr ""
-#: test/ippfind.c:2777
+#: test/ippfind.c:2807
msgid " {txt_*} Value of TXT record key"
msgstr ""
-#: test/ippfind.c:2769
+#: test/ippfind.c:2799
msgid " {} URI"
msgstr ""
msgid "%s accepting requests since %s"
msgstr ""
-#: scheduler/ipp.c:9841
+#: scheduler/ipp.c:9952
#, c-format
msgid "%s cannot be changed."
msgstr ""
msgid "%s: %s failed: %s"
msgstr ""
-#: test/ippfind.c:773 test/ipptool.c:376
+#: test/ippfind.c:777 test/ipptool.c:378
#, c-format
msgid "%s: Bad version %s for \"-V\"."
msgstr ""
#: systemv/lpstat.c:195 systemv/lpstat.c:241 systemv/lpstat.c:332
#: systemv/lpstat.c:361 systemv/lpstat.c:385 systemv/lpstat.c:444
#: systemv/lpstat.c:510 systemv/lpstat.c:571 systemv/lpstat.c:696
-#: systemv/lpstat.c:880 systemv/lpstat.c:1141 systemv/lpstat.c:1338
-#: systemv/lpstat.c:1576
+#: systemv/lpstat.c:880 systemv/lpstat.c:1141 systemv/lpstat.c:1339
+#: systemv/lpstat.c:1579
#, c-format
msgid "%s: Error - add '/version=1.1' to server name."
msgstr ""
msgid "%s: Invalid filter string \"%s\"."
msgstr ""
-#: test/ipptool.c:307
+#: test/ipptool.c:309
#, c-format
msgid "%s: Missing filename for \"-P\"."
msgstr ""
-#: test/ippfind.c:745 test/ipptool.c:344
+#: test/ippfind.c:749 test/ipptool.c:346
#, c-format
msgid "%s: Missing timeout for \"-T\"."
msgstr ""
-#: test/ippfind.c:758 test/ipptool.c:358
+#: test/ippfind.c:762 test/ipptool.c:360
#, c-format
msgid "%s: Missing version for \"-V\"."
msgstr ""
#: berkeley/lpq.c:83 berkeley/lpr.c:67 berkeley/lprm.c:67 systemv/cancel.c:82
#: systemv/cupsaccept.c:88 systemv/cupsaddsmb.c:86 systemv/lp.c:96
#: systemv/lpadmin.c:225 systemv/lpinfo.c:88 systemv/lpmove.c:73
-#: systemv/lpstat.c:88 test/ipptool.c:289 test/ipptool.c:333
+#: systemv/lpstat.c:88 test/ipptool.c:291 test/ipptool.c:335
#, c-format
msgid "%s: Sorry, no encryption support."
msgstr ""
msgid "%s: Unable to determine MIME type of \"%s\"."
msgstr ""
-#: test/ipptool.c:316
+#: test/ipptool.c:318
#, c-format
msgid "%s: Unable to open \"%s\": %s"
msgstr ""
msgid "%s: Unknown option \"%c\"."
msgstr ""
-#: test/ippfind.c:644
+#: test/ippfind.c:648
#, c-format
msgid "%s: Unknown option \"%s\"."
msgstr ""
-#: test/ippfind.c:924
+#: test/ippfind.c:928
#, c-format
msgid "%s: Unknown option \"-%c\"."
msgstr ""
msgid "%s: Warning - mode option ignored."
msgstr ""
-#: ppdc/sample.c:310
+#: ppdc/sample.c:305
msgid "-1"
msgstr ""
-#: ppdc/sample.c:301
+#: ppdc/sample.c:296
msgid "-10"
msgstr ""
-#: ppdc/sample.c:393
+#: ppdc/sample.c:388
msgid "-100"
msgstr ""
-#: ppdc/sample.c:392
+#: ppdc/sample.c:387
msgid "-105"
msgstr ""
-#: ppdc/sample.c:300
+#: ppdc/sample.c:295
msgid "-11"
msgstr ""
-#: ppdc/sample.c:391
+#: ppdc/sample.c:386
msgid "-110"
msgstr ""
-#: ppdc/sample.c:390
+#: ppdc/sample.c:385
msgid "-115"
msgstr ""
-#: ppdc/sample.c:299
+#: ppdc/sample.c:294
msgid "-12"
msgstr ""
-#: ppdc/sample.c:389
+#: ppdc/sample.c:384
msgid "-120"
msgstr ""
-#: ppdc/sample.c:298
+#: ppdc/sample.c:293
msgid "-13"
msgstr ""
-#: ppdc/sample.c:297
+#: ppdc/sample.c:292
msgid "-14"
msgstr ""
-#: ppdc/sample.c:296
+#: ppdc/sample.c:291
msgid "-15"
msgstr ""
-#: ppdc/sample.c:309
+#: ppdc/sample.c:304
msgid "-2"
msgstr ""
-#: ppdc/sample.c:409
+#: ppdc/sample.c:404
msgid "-20"
msgstr ""
-#: ppdc/sample.c:408
+#: ppdc/sample.c:403
msgid "-25"
msgstr ""
-#: ppdc/sample.c:308
+#: ppdc/sample.c:303
msgid "-3"
msgstr ""
-#: ppdc/sample.c:407
+#: ppdc/sample.c:402
msgid "-30"
msgstr ""
-#: ppdc/sample.c:406
+#: ppdc/sample.c:401
msgid "-35"
msgstr ""
-#: ppdc/sample.c:307
+#: ppdc/sample.c:302
msgid "-4"
msgstr ""
-#: ppdc/sample.c:405
+#: ppdc/sample.c:400
msgid "-40"
msgstr ""
-#: ppdc/sample.c:404
+#: ppdc/sample.c:399
msgid "-45"
msgstr ""
-#: ppdc/sample.c:306
+#: ppdc/sample.c:301
msgid "-5"
msgstr ""
-#: ppdc/sample.c:403
+#: ppdc/sample.c:398
msgid "-50"
msgstr ""
-#: ppdc/sample.c:402
+#: ppdc/sample.c:397
msgid "-55"
msgstr ""
-#: ppdc/sample.c:305
+#: ppdc/sample.c:300
msgid "-6"
msgstr ""
-#: ppdc/sample.c:401
+#: ppdc/sample.c:396
msgid "-60"
msgstr ""
-#: ppdc/sample.c:400
+#: ppdc/sample.c:395
msgid "-65"
msgstr ""
-#: ppdc/sample.c:304
+#: ppdc/sample.c:299
msgid "-7"
msgstr ""
-#: ppdc/sample.c:399
+#: ppdc/sample.c:394
msgid "-70"
msgstr ""
-#: ppdc/sample.c:398
+#: ppdc/sample.c:393
msgid "-75"
msgstr ""
-#: ppdc/sample.c:303
+#: ppdc/sample.c:298
msgid "-8"
msgstr ""
-#: ppdc/sample.c:397
+#: ppdc/sample.c:392
msgid "-80"
msgstr ""
-#: ppdc/sample.c:396
+#: ppdc/sample.c:391
msgid "-85"
msgstr ""
-#: ppdc/sample.c:302
+#: ppdc/sample.c:297
msgid "-9"
msgstr ""
-#: ppdc/sample.c:395
+#: ppdc/sample.c:390
msgid "-90"
msgstr ""
-#: ppdc/sample.c:394
+#: ppdc/sample.c:389
msgid "-95"
msgstr ""
-#: ppdc/sample.c:311
+#: ppdc/sample.c:306
msgid "0"
msgstr ""
-#: ppdc/sample.c:312
+#: ppdc/sample.c:307
msgid "1"
msgstr ""
-#: ppdc/sample.c:384
+#: ppdc/sample.c:379
msgid "1 inch/sec."
msgstr ""
msgid "1.25x2.25\""
msgstr ""
-#: ppdc/sample.c:432
+#: ppdc/sample.c:427
msgid "1.5 inch/sec."
msgstr ""
msgid "1.50x2.00\""
msgstr ""
-#: ppdc/sample.c:321
+#: ppdc/sample.c:316
msgid "10"
msgstr ""
-#: ppdc/sample.c:443
+#: ppdc/sample.c:438
msgid "10 inches/sec."
msgstr ""
msgid "10 x 14"
msgstr ""
-#: ppdc/sample.c:423
+#: ppdc/sample.c:418
msgid "100"
msgstr ""
-#: ppdc/sample.c:334
+#: ppdc/sample.c:329
msgid "100 mm/sec."
msgstr ""
-#: ppdc/sample.c:424
+#: ppdc/sample.c:419
msgid "105"
msgstr ""
-#: ppdc/sample.c:322
+#: ppdc/sample.c:317
msgid "11"
msgstr ""
-#: ppdc/sample.c:444
+#: ppdc/sample.c:439
msgid "11 inches/sec."
msgstr ""
-#: ppdc/sample.c:425
+#: ppdc/sample.c:420
msgid "110"
msgstr ""
-#: ppdc/sample.c:426
+#: ppdc/sample.c:421
msgid "115"
msgstr ""
-#: ppdc/sample.c:323
+#: ppdc/sample.c:318
msgid "12"
msgstr ""
-#: ppdc/sample.c:445
+#: ppdc/sample.c:440
msgid "12 inches/sec."
msgstr ""
msgid "12 x 11"
msgstr ""
-#: ppdc/sample.c:427
+#: ppdc/sample.c:422
msgid "120"
msgstr ""
-#: ppdc/sample.c:335
+#: ppdc/sample.c:330
msgid "120 mm/sec."
msgstr ""
msgid "120x72dpi"
msgstr ""
-#: ppdc/sample.c:324
+#: ppdc/sample.c:319
msgid "13"
msgstr ""
msgid "136dpi"
msgstr ""
-#: ppdc/sample.c:325
+#: ppdc/sample.c:320
msgid "14"
msgstr ""
-#: ppdc/sample.c:326
+#: ppdc/sample.c:321
msgid "15"
msgstr ""
-#: ppdc/sample.c:328
+#: ppdc/sample.c:323
msgid "15 mm/sec."
msgstr ""
msgid "15 x 11"
msgstr ""
-#: ppdc/sample.c:336
+#: ppdc/sample.c:331
msgid "150 mm/sec."
msgstr ""
-#: ppdc/sample.c:283
+#: ppdc/sample.c:278
msgid "150dpi"
msgstr ""
-#: ppdc/sample.c:368
+#: ppdc/sample.c:363
msgid "16"
msgstr ""
-#: ppdc/sample.c:369
+#: ppdc/sample.c:364
msgid "17"
msgstr ""
-#: ppdc/sample.c:370
+#: ppdc/sample.c:365
msgid "18"
msgstr ""
msgid "180dpi"
msgstr ""
-#: ppdc/sample.c:371
+#: ppdc/sample.c:366
msgid "19"
msgstr ""
-#: ppdc/sample.c:313
+#: ppdc/sample.c:308
msgid "2"
msgstr ""
-#: ppdc/sample.c:385
+#: ppdc/sample.c:380
msgid "2 inches/sec."
msgstr ""
-#: ppdc/sample.c:270
+#: ppdc/sample.c:262
msgid "2-Sided Printing"
msgstr ""
msgid "2.38x5.50\""
msgstr ""
-#: ppdc/sample.c:433
+#: ppdc/sample.c:428
msgid "2.5 inches/sec."
msgstr ""
msgid "2.9 x 1\""
msgstr ""
-#: ppdc/sample.c:372
+#: ppdc/sample.c:367
msgid "20"
msgstr ""
-#: ppdc/sample.c:329
+#: ppdc/sample.c:324
msgid "20 mm/sec."
msgstr ""
-#: ppdc/sample.c:337
+#: ppdc/sample.c:332
msgid "200 mm/sec."
msgstr ""
msgid "203dpi"
msgstr ""
-#: ppdc/sample.c:373
+#: ppdc/sample.c:368
msgid "21"
msgstr ""
-#: ppdc/sample.c:374
+#: ppdc/sample.c:369
msgid "22"
msgstr ""
-#: ppdc/sample.c:375
+#: ppdc/sample.c:370
msgid "23"
msgstr ""
-#: ppdc/sample.c:376
+#: ppdc/sample.c:371
msgid "24"
msgstr ""
msgid "240x72dpi"
msgstr ""
-#: ppdc/sample.c:377
+#: ppdc/sample.c:372
msgid "25"
msgstr ""
-#: ppdc/sample.c:338
+#: ppdc/sample.c:333
msgid "250 mm/sec."
msgstr ""
-#: ppdc/sample.c:378
+#: ppdc/sample.c:373
msgid "26"
msgstr ""
-#: ppdc/sample.c:379
+#: ppdc/sample.c:374
msgid "27"
msgstr ""
-#: ppdc/sample.c:380
+#: ppdc/sample.c:375
msgid "28"
msgstr ""
-#: ppdc/sample.c:381
+#: ppdc/sample.c:376
msgid "29"
msgstr ""
-#: ppdc/sample.c:314
+#: ppdc/sample.c:309
msgid "3"
msgstr ""
-#: ppdc/sample.c:386
+#: ppdc/sample.c:381
msgid "3 inches/sec."
msgstr ""
msgid "3.50x1.00\""
msgstr ""
-#: ppdc/sample.c:382
+#: ppdc/sample.c:377
msgid "30"
msgstr ""
-#: ppdc/sample.c:330
+#: ppdc/sample.c:325
msgid "30 mm/sec."
msgstr ""
-#: ppdc/sample.c:339
+#: ppdc/sample.c:334
msgid "300 mm/sec."
msgstr ""
msgid "300dpi"
msgstr ""
-#: ppdc/sample.c:410
+#: ppdc/sample.c:405
msgid "35"
msgstr ""
msgid "360x180dpi"
msgstr ""
-#: ppdc/sample.c:315
+#: ppdc/sample.c:310
msgid "4"
msgstr ""
-#: ppdc/sample.c:387
+#: ppdc/sample.c:382
msgid "4 inches/sec."
msgstr ""
msgid "4.00x6.50\""
msgstr ""
-#: ppdc/sample.c:411
+#: ppdc/sample.c:406
msgid "40"
msgstr ""
-#: ppdc/sample.c:331
+#: ppdc/sample.c:326
msgid "40 mm/sec."
msgstr ""
-#: ppdc/sample.c:412
+#: ppdc/sample.c:407
msgid "45"
msgstr ""
-#: ppdc/sample.c:316
+#: ppdc/sample.c:311
msgid "5"
msgstr ""
-#: ppdc/sample.c:437
+#: ppdc/sample.c:432
msgid "5 inches/sec."
msgstr ""
msgid "5 x 7"
msgstr ""
-#: ppdc/sample.c:413
+#: ppdc/sample.c:408
msgid "50"
msgstr ""
-#: ppdc/sample.c:414
+#: ppdc/sample.c:409
msgid "55"
msgstr ""
-#: ppdc/sample.c:317
+#: ppdc/sample.c:312
msgid "6"
msgstr ""
-#: ppdc/sample.c:438
+#: ppdc/sample.c:433
msgid "6 inches/sec."
msgstr ""
msgid "6.00x6.50\""
msgstr ""
-#: ppdc/sample.c:415
+#: ppdc/sample.c:410
msgid "60"
msgstr ""
-#: ppdc/sample.c:332
+#: ppdc/sample.c:327
msgid "60 mm/sec."
msgstr ""
-#: ppdc/sample.c:261
+#: ppdc/sample.c:253
msgid "600dpi"
msgstr ""
msgid "60x72dpi"
msgstr ""
-#: ppdc/sample.c:416
+#: ppdc/sample.c:411
msgid "65"
msgstr ""
-#: ppdc/sample.c:318
+#: ppdc/sample.c:313
msgid "7"
msgstr ""
-#: ppdc/sample.c:440
+#: ppdc/sample.c:435
msgid "7 inches/sec."
msgstr ""
msgid "7 x 9"
msgstr ""
-#: ppdc/sample.c:417
+#: ppdc/sample.c:412
msgid "70"
msgstr ""
-#: ppdc/sample.c:252
-msgid "720dpi"
-msgstr ""
-
-#: ppdc/sample.c:418
+#: ppdc/sample.c:413
msgid "75"
msgstr ""
-#: ppdc/sample.c:319
+#: ppdc/sample.c:314
msgid "8"
msgstr ""
-#: ppdc/sample.c:441
+#: ppdc/sample.c:436
msgid "8 inches/sec."
msgstr ""
msgid "8.00x6.50\""
msgstr ""
-#: ppdc/sample.c:419
+#: ppdc/sample.c:414
msgid "80"
msgstr ""
-#: ppdc/sample.c:333
+#: ppdc/sample.c:328
msgid "80 mm/sec."
msgstr ""
-#: ppdc/sample.c:420
+#: ppdc/sample.c:415
msgid "85"
msgstr ""
-#: ppdc/sample.c:320
+#: ppdc/sample.c:315
msgid "9"
msgstr ""
-#: ppdc/sample.c:442
+#: ppdc/sample.c:437
msgid "9 inches/sec."
msgstr ""
msgid "9-Pin Series"
msgstr ""
-#: ppdc/sample.c:421
+#: ppdc/sample.c:416
msgid "90"
msgstr ""
-#: ppdc/sample.c:422
+#: ppdc/sample.c:417
msgid "95"
msgstr ""
msgid "A Samba username is required to export printer drivers"
msgstr ""
-#: scheduler/ipp.c:2273
+#: scheduler/ipp.c:2274
#, c-format
msgid "A class named \"%s\" already exists."
msgstr ""
msgid "Administration"
msgstr ""
-#: ppdc/sample.c:429
+#: ppdc/sample.c:424
msgid "Always"
msgstr ""
msgid "AppSocket/HP JetDirect"
msgstr ""
-#: ppdc/sample.c:450
+#: ppdc/sample.c:445
msgid "Applicator"
msgstr ""
msgid "B9"
msgstr ""
-#: scheduler/ipp.c:10764
+#: scheduler/ipp.c:10877
#, c-format
msgid "Bad 'document-format' value \"%s\"."
msgstr ""
msgid "Bad custom parameter"
msgstr ""
-#: cups/http-support.c:1598 scheduler/ipp.c:2359
+#: cups/http-support.c:1598 scheduler/ipp.c:2360
#, c-format
msgid "Bad device-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2398
+#: scheduler/ipp.c:2399
#, c-format
msgid "Bad device-uri scheme \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8016 scheduler/ipp.c:8032 scheduler/ipp.c:9250
+#: scheduler/ipp.c:8125 scheduler/ipp.c:8141 scheduler/ipp.c:9360
#, c-format
msgid "Bad document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9266
+#: scheduler/ipp.c:9376
#, c-format
msgid "Bad document-format-default \"%s\"."
msgstr ""
-#: cups/util.c:896
+#: cups/util.c:823
msgid "Bad filename buffer"
msgstr ""
msgid "Bad hostname/address in URI"
msgstr ""
-#: scheduler/ipp.c:1528
+#: scheduler/ipp.c:1527
#, c-format
msgid "Bad job-name value: %s"
msgstr ""
-#: scheduler/ipp.c:1521
+#: scheduler/ipp.c:1520
msgid "Bad job-name value: Wrong type or count."
msgstr ""
-#: scheduler/ipp.c:9856
+#: scheduler/ipp.c:9967
msgid "Bad job-priority value."
msgstr ""
msgid "Bad job-sheets value type."
msgstr ""
-#: scheduler/ipp.c:9886
+#: scheduler/ipp.c:9997
msgid "Bad job-state value."
msgstr ""
-#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5881
-#: scheduler/ipp.c:6028 scheduler/ipp.c:7450 scheduler/ipp.c:7719
-#: scheduler/ipp.c:8568 scheduler/ipp.c:8794 scheduler/ipp.c:9146
-#: scheduler/ipp.c:9749
+#: scheduler/ipp.c:2981 scheduler/ipp.c:3441 scheduler/ipp.c:5930
+#: scheduler/ipp.c:6077 scheduler/ipp.c:7559 scheduler/ipp.c:7828
+#: scheduler/ipp.c:8678 scheduler/ipp.c:8904 scheduler/ipp.c:9256
+#: scheduler/ipp.c:9860
#, c-format
msgid "Bad job-uri \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2039 scheduler/ipp.c:5419
+#: scheduler/ipp.c:2040 scheduler/ipp.c:5468
#, c-format
msgid "Bad notify-pull-method \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2003 scheduler/ipp.c:5383
+#: scheduler/ipp.c:2004 scheduler/ipp.c:5432
#, c-format
msgid "Bad notify-recipient-uri \"%s\"."
msgstr ""
msgid "Bad port number in URI"
msgstr ""
-#: scheduler/ipp.c:2441
+#: scheduler/ipp.c:2442
#, c-format
msgid "Bad port-monitor \"%s\"."
msgstr ""
-#: scheduler/ipp.c:2502
+#: scheduler/ipp.c:2503
#, c-format
msgid "Bad printer-state value %d."
msgstr ""
msgid "Banners"
msgstr ""
-#: ppdc/sample.c:287
+#: ppdc/sample.c:282
msgid "Bond Paper"
msgstr ""
msgid "Buffer overflow detected, aborting."
msgstr ""
-#: ppdc/sample.c:254
+#: ppdc/sample.c:277
msgid "CMYK"
msgstr ""
-#: ppdc/sample.c:363
+#: ppdc/sample.c:358
msgid "CPCL Label Printer"
msgstr ""
msgid "Cancel RSS Subscription"
msgstr ""
-#: backend/ipp.c:2186
+#: backend/ipp.c:2198
msgid "Canceling print job."
msgstr ""
-#: scheduler/ipp.c:2482
+#: scheduler/ipp.c:2483
msgid "Cannot share a remote Kerberized printer."
msgstr ""
-#: ppdc/sample.c:279
+#: ppdc/sample.c:271
msgid "Cassette"
msgstr ""
msgid "Change Settings"
msgstr ""
-#: scheduler/ipp.c:2051 scheduler/ipp.c:5431
+#: scheduler/ipp.c:2052 scheduler/ipp.c:5480
#, c-format
msgid "Character set \"%s\" not supported."
msgstr ""
msgid "Close-Job doesn't support the job-uri attribute."
msgstr ""
-#: ppdc/sample.c:282
+#: ppdc/sample.c:276
msgid "Color"
msgstr ""
-#: ppdc/sample.c:253
+#: ppdc/sample.c:274
msgid "Color Mode"
msgstr ""
msgid "Community name uses indefinite length"
msgstr ""
-#: backend/ipp.c:842 backend/lpd.c:879 backend/socket.c:400
+#: backend/ipp.c:854 backend/lpd.c:879 backend/socket.c:400
msgid "Connected to printer."
msgstr ""
-#: backend/ipp.c:747 backend/lpd.c:702 backend/socket.c:319
+#: backend/ipp.c:759 backend/lpd.c:702 backend/socket.c:319
msgid "Connecting to printer."
msgstr ""
msgid "Continue"
msgstr ""
-#: ppdc/sample.c:365
+#: ppdc/sample.c:360
msgid "Continuous"
msgstr ""
msgid "Control file sent successfully."
msgstr ""
-#: backend/ipp.c:1337 backend/lpd.c:472
+#: backend/ipp.c:1349 backend/lpd.c:472
msgid "Copying print data."
msgstr ""
msgid "Custom"
msgstr ""
-#: ppdc/sample.c:359
+#: ppdc/sample.c:354
msgid "CustominCutInterval"
msgstr ""
-#: ppdc/sample.c:357
+#: ppdc/sample.c:352
msgid "CustominTearInterval"
msgstr ""
-#: ppdc/sample.c:343
+#: ppdc/sample.c:338
msgid "Cut"
msgstr ""
-#: ppdc/sample.c:451
+#: ppdc/sample.c:446
msgid "Cutter"
msgstr ""
msgid "Delete Printer"
msgstr ""
-#: ppdc/sample.c:281
+#: ppdc/sample.c:273
msgid "DeskJet Series"
msgstr ""
" location = %s"
msgstr ""
-#: ppdc/sample.c:436
+#: ppdc/sample.c:431
msgid "Direct Thermal Media"
msgstr ""
msgid "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)."
msgstr ""
-#: ppdc/sample.c:345
+#: ppdc/sample.c:340
msgid "Disabled"
msgstr ""
-#: scheduler/ipp.c:5930
+#: scheduler/ipp.c:5979
#, c-format
msgid "Document #%d does not exist in job #%d."
msgstr ""
-#: ppdc/sample.c:275
+#: ppdc/sample.c:267
msgid "Duplexer"
msgstr ""
msgid "Dymo"
msgstr ""
-#: ppdc/sample.c:431
+#: ppdc/sample.c:426
msgid "EPL1 Label Printer"
msgstr ""
-#: ppdc/sample.c:434
+#: ppdc/sample.c:429
msgid "EPL2 Label Printer"
msgstr ""
msgid "Empty PPD file."
msgstr ""
-#: cups/http.c:4609
+#: cups/http.c:4624
msgid "Encryption is not supported."
msgstr ""
msgid "English"
msgstr ""
-#: scheduler/client.c:2203
+#: scheduler/client.c:2209
msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."
msgstr ""
msgid "Envelope DL"
msgstr ""
-#: ppdc/sample.c:269
+#: ppdc/sample.c:261
msgid "Envelope Feed"
msgstr ""
msgid "Envelope You4 Long Edge"
msgstr ""
-#: test/ippfind.c:2779
+#: test/ippfind.c:2809
msgid "Environment Variables:"
msgstr ""
msgid "Error: need hostname after \"-h\" option."
msgstr ""
-#: ppdc/sample.c:355
+#: ppdc/sample.c:350
msgid "Every 10 Labels"
msgstr ""
-#: ppdc/sample.c:347
+#: ppdc/sample.c:342
msgid "Every 2 Labels"
msgstr ""
-#: ppdc/sample.c:348
+#: ppdc/sample.c:343
msgid "Every 3 Labels"
msgstr ""
-#: ppdc/sample.c:349
+#: ppdc/sample.c:344
msgid "Every 4 Labels"
msgstr ""
-#: ppdc/sample.c:350
+#: ppdc/sample.c:345
msgid "Every 5 Labels"
msgstr ""
-#: ppdc/sample.c:351
+#: ppdc/sample.c:346
msgid "Every 6 Labels"
msgstr ""
-#: ppdc/sample.c:352
+#: ppdc/sample.c:347
msgid "Every 7 Labels"
msgstr ""
-#: ppdc/sample.c:353
+#: ppdc/sample.c:348
msgid "Every 8 Labels"
msgstr ""
-#: ppdc/sample.c:354
+#: ppdc/sample.c:349
msgid "Every 9 Labels"
msgstr ""
-#: ppdc/sample.c:346
+#: ppdc/sample.c:341
msgid "Every Label"
msgstr ""
msgid "Export Printers to Samba"
msgstr ""
-#: test/ippfind.c:2725
+#: test/ippfind.c:2755
msgid "Expressions:"
msgstr ""
msgid "File Folder "
msgstr ""
-#: scheduler/ipp.c:2377
+#: scheduler/ipp.c:2378
#, c-format
msgid "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"."
msgstr ""
msgid "General"
msgstr ""
-#: ppdc/sample.c:259
+#: ppdc/sample.c:251
msgid "Generic"
msgstr ""
msgid "Get-Response-PDU uses indefinite length"
msgstr ""
-#: ppdc/sample.c:290
+#: ppdc/sample.c:285
msgid "Glossy Paper"
msgstr ""
#: scheduler/ipp.c:2959 scheduler/ipp.c:3367 scheduler/ipp.c:3905
-#: scheduler/ipp.c:5859 scheduler/ipp.c:6006 scheduler/ipp.c:7427
-#: scheduler/ipp.c:8546 scheduler/ipp.c:8772 scheduler/ipp.c:9124
-#: scheduler/ipp.c:9727
+#: scheduler/ipp.c:5908 scheduler/ipp.c:6055 scheduler/ipp.c:7536
+#: scheduler/ipp.c:8656 scheduler/ipp.c:8882 scheduler/ipp.c:9234
+#: scheduler/ipp.c:9838
msgid "Got a printer-uri attribute but no job-id."
msgstr ""
-#: ppdc/sample.c:255
+#: ppdc/sample.c:275
msgid "Grayscale"
msgstr ""
-#: ppdc/sample.c:280
+#: ppdc/sample.c:272
msgid "HP"
msgstr ""
msgid "Illegal whitespace character"
msgstr ""
-#: ppdc/sample.c:274
+#: ppdc/sample.c:266
msgid "Installable Options"
msgstr ""
-#: ppdc/sample.c:277
+#: ppdc/sample.c:269
msgid "Installed"
msgstr ""
-#: ppdc/sample.c:293
+#: ppdc/sample.c:288
msgid "IntelliBar Label Printer"
msgstr ""
-#: ppdc/sample.c:292
+#: ppdc/sample.c:287
msgid "Intellitech"
msgstr ""
msgid "JIS B9"
msgstr ""
-#: scheduler/ipp.c:8844
+#: scheduler/ipp.c:8954
#, c-format
msgid "Job #%d cannot be restarted - no files."
msgstr ""
#: scheduler/ipp.c:2999 scheduler/ipp.c:3233 scheduler/ipp.c:3292
-#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5517
-#: scheduler/ipp.c:5899 scheduler/ipp.c:6046 scheduler/ipp.c:6335
-#: scheduler/ipp.c:7274 scheduler/ipp.c:7296 scheduler/ipp.c:7468
-#: scheduler/ipp.c:7693 scheduler/ipp.c:7736 scheduler/ipp.c:8586
-#: scheduler/ipp.c:8812 scheduler/ipp.c:9164 scheduler/ipp.c:9767
+#: scheduler/ipp.c:3469 scheduler/ipp.c:3915 scheduler/ipp.c:5566
+#: scheduler/ipp.c:5948 scheduler/ipp.c:6095 scheduler/ipp.c:6433
+#: scheduler/ipp.c:7383 scheduler/ipp.c:7405 scheduler/ipp.c:7577
+#: scheduler/ipp.c:7802 scheduler/ipp.c:7845 scheduler/ipp.c:8696
+#: scheduler/ipp.c:8922 scheduler/ipp.c:9274 scheduler/ipp.c:9878
#, c-format
msgid "Job #%d does not exist."
msgstr ""
msgid "Job #%d is already completed - can't cancel."
msgstr ""
-#: scheduler/ipp.c:7494 scheduler/ipp.c:7778 scheduler/ipp.c:9782
+#: scheduler/ipp.c:7603 scheduler/ipp.c:7887 scheduler/ipp.c:9893
#, c-format
msgid "Job #%d is finished and cannot be altered."
msgstr ""
-#: scheduler/ipp.c:8826
+#: scheduler/ipp.c:8936
#, c-format
msgid "Job #%d is not complete."
msgstr ""
msgid "Job #%d is not held for authentication."
msgstr ""
-#: scheduler/ipp.c:8600
+#: scheduler/ipp.c:8710
#, c-format
msgid "Job #%d is not held."
msgstr ""
msgid "Job Stopped"
msgstr ""
-#: scheduler/ipp.c:9864
+#: scheduler/ipp.c:9975
msgid "Job is completed and cannot be changed."
msgstr ""
msgid "Job operation failed"
msgstr ""
-#: scheduler/ipp.c:9900 scheduler/ipp.c:9917 scheduler/ipp.c:9928
+#: scheduler/ipp.c:10011 scheduler/ipp.c:10028 scheduler/ipp.c:10039
msgid "Job state cannot be changed."
msgstr ""
-#: scheduler/ipp.c:8692
+#: scheduler/ipp.c:8802
msgid "Job subscriptions cannot be renewed."
msgstr ""
msgid "Label Printer"
msgstr ""
-#: ppdc/sample.c:446
+#: ppdc/sample.c:441
msgid "Label Top"
msgstr ""
-#: scheduler/ipp.c:2060 scheduler/ipp.c:5440
+#: scheduler/ipp.c:2061 scheduler/ipp.c:5489
#, c-format
msgid "Language \"%s\" not supported."
msgstr ""
msgid "Large Address"
msgstr ""
-#: ppdc/sample.c:291
+#: ppdc/sample.c:286
msgid "LaserJet Series PCL 4/5"
msgstr ""
msgid "Load paper."
msgstr ""
-#: ppdc/sample.c:272
+#: ppdc/sample.c:264
msgid "Long-Edge (Portrait)"
msgstr ""
msgid "Looking for printer."
msgstr ""
-#: ppdc/sample.c:268
+#: ppdc/sample.c:260
msgid "Manual Feed"
msgstr ""
msgid "Media Size"
msgstr ""
-#: cups/ppd.c:751 cups/ppd.c:1317 ppdc/sample.c:262
+#: cups/ppd.c:751 cups/ppd.c:1317 ppdc/sample.c:254
msgid "Media Source"
msgstr ""
-#: ppdc/sample.c:364
+#: ppdc/sample.c:359
msgid "Media Tracking"
msgstr ""
-#: cups/ppd.c:749 cups/ppd.c:1315 ppdc/sample.c:285
+#: cups/ppd.c:749 cups/ppd.c:1315 ppdc/sample.c:280
msgid "Media Type"
msgstr ""
msgid "Missing asterisk in column 1"
msgstr ""
-#: scheduler/ipp.c:5922
+#: scheduler/ipp.c:5971
msgid "Missing document-number attribute."
msgstr ""
msgid "Missing form variable"
msgstr ""
-#: scheduler/ipp.c:9218
+#: scheduler/ipp.c:9328
msgid "Missing last-document attribute in request."
msgstr ""
msgid "Missing media-size in media-col."
msgstr ""
-#: scheduler/ipp.c:6465
+#: scheduler/ipp.c:6574
msgid "Missing notify-subscription-ids attribute."
msgstr ""
" device-id = %s"
msgstr ""
-#: test/ippfind.c:2756
+#: test/ippfind.c:2786
msgid "Modifiers:"
msgstr ""
msgid "Nested classes are not allowed."
msgstr ""
-#: ppdc/sample.c:430
+#: ppdc/sample.c:425
msgid "Never"
msgstr ""
-#: ppdc/sample.c:256
-msgid "New Stylus Color Series"
-msgstr ""
-
-#: ppdc/sample.c:258
-msgid "New Stylus Photo Series"
-msgstr ""
-
#: cups/ppd.c:1904
msgid "No"
msgstr ""
msgid "No Content"
msgstr ""
-#: cups/util.c:1283
+#: cups/util.c:1123
msgid "No PPD name"
msgstr ""
msgid "No community name"
msgstr ""
-#: scheduler/ipp.c:5722
+#: scheduler/ipp.c:5771
msgid "No default printer."
msgstr ""
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7040
+#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7149
msgid "No destinations added."
msgstr ""
msgid "No error-status"
msgstr ""
-#: scheduler/ipp.c:7982 scheduler/ipp.c:9232
+#: scheduler/ipp.c:8091 scheduler/ipp.c:9342
msgid "No file in print request."
msgstr ""
-#: cups/util.c:890
+#: cups/util.c:817
msgid "No modification time"
msgstr ""
msgid "No pages were found."
msgstr ""
-#: cups/util.c:884
+#: cups/util.c:811
msgid "No printer name"
msgstr ""
-#: cups/util.c:1807
+#: cups/util.c:1647
msgid "No printer-uri found"
msgstr ""
-#: cups/util.c:1791
+#: cups/util.c:1631
msgid "No printer-uri found for class"
msgstr ""
-#: scheduler/ipp.c:6125
+#: scheduler/ipp.c:6179
msgid "No printer-uri in request."
msgstr ""
msgid "No request-id"
msgstr ""
-#: scheduler/ipp.c:5325
+#: scheduler/ipp.c:5374
msgid "No subscription attributes in request."
msgstr ""
-#: scheduler/ipp.c:7367
+#: scheduler/ipp.c:7476
msgid "No subscriptions found."
msgstr ""
msgid "No version number"
msgstr ""
-#: ppdc/sample.c:367
+#: ppdc/sample.c:362
msgid "Non-continuous (Mark sensing)"
msgstr ""
-#: ppdc/sample.c:366
+#: ppdc/sample.c:361
msgid "Non-continuous (Web sensing)"
msgstr ""
msgid "Not Implemented"
msgstr ""
-#: ppdc/sample.c:276
+#: ppdc/sample.c:268
msgid "Not Installed"
msgstr ""
msgid "Not Supported"
msgstr ""
-#: scheduler/ipp.c:1490 scheduler/ipp.c:10461
+#: scheduler/ipp.c:1490 scheduler/ipp.c:10572
msgid "Not allowed to print."
msgstr ""
msgid "OK"
msgstr ""
-#: ppdc/sample.c:271
+#: ppdc/sample.c:263
msgid "Off (1-Sided)"
msgstr ""
-#: ppdc/sample.c:361
+#: ppdc/sample.c:356
msgid "Oki"
msgstr ""
msgid "Options Installed"
msgstr ""
-#: scheduler/cupsfilter.c:1482 scheduler/main.c:2158 systemv/cupsaddsmb.c:284
+#: scheduler/cupsfilter.c:1482 scheduler/main.c:2146 systemv/cupsaddsmb.c:284
#: systemv/cupsctl.c:203 systemv/cupstestdsc.c:429 systemv/cupstestppd.c:3817
-#: test/ippfind.c:2715 test/ipptool.c:4713 ppdc/ppdc.cxx:432
+#: test/ippfind.c:2745 test/ipptool.c:4805 ppdc/ppdc.cxx:432
#: ppdc/ppdhtml.cxx:174 ppdc/ppdi.cxx:130 ppdc/ppdmerge.cxx:363
#: ppdc/ppdpo.cxx:254
msgid "Options:"
msgid "PASS"
msgstr ""
-#: ppdc/sample.c:260
+#: ppdc/sample.c:252
msgid "PCL Laser Printer"
msgstr ""
msgid "Paper tray is missing."
msgstr ""
-#: ppdc/sample.c:360
+#: ppdc/sample.c:355
msgid "ParamCustominCutInterval"
msgstr ""
-#: ppdc/sample.c:358
+#: ppdc/sample.c:353
msgid "ParamCustominTearInterval"
msgstr ""
msgid "Pause Printer"
msgstr ""
-#: ppdc/sample.c:448
+#: ppdc/sample.c:443
msgid "Peel-Off"
msgstr ""
msgid "Photo Labels"
msgstr ""
-#: ppdc/sample.c:286
+#: ppdc/sample.c:281
msgid "Plain Paper"
msgstr ""
msgid "Port Monitor"
msgstr ""
-#: ppdc/sample.c:278
+#: ppdc/sample.c:270
msgid "PostScript Printer"
msgstr ""
msgid "Postcard Long Edge"
msgstr ""
-#: backend/ipp.c:949 backend/ipp.c:957
+#: backend/ipp.c:961 backend/ipp.c:969
msgid "Preparing to print."
msgstr ""
-#: ppdc/sample.c:295
+#: ppdc/sample.c:290
msgid "Print Density"
msgstr ""
msgid "Print Job:"
msgstr ""
-#: ppdc/sample.c:340
+#: ppdc/sample.c:335
msgid "Print Mode"
msgstr ""
-#: ppdc/sample.c:383
+#: ppdc/sample.c:378
msgid "Print Rate"
msgstr ""
msgid "Print Self-Test Page"
msgstr ""
-#: ppdc/sample.c:327
+#: ppdc/sample.c:322
msgid "Print Speed"
msgstr ""
msgid "Print Test Page"
msgstr ""
-#: ppdc/sample.c:356
+#: ppdc/sample.c:351
msgid "Print and Cut"
msgstr ""
-#: ppdc/sample.c:344
+#: ppdc/sample.c:339
msgid "Print and Tear"
msgstr ""
msgid "Print file sent."
msgstr ""
-#: backend/ipp.c:2160
+#: backend/ipp.c:2172
msgid "Print job canceled at printer."
msgstr ""
-#: backend/ipp.c:2152
+#: backend/ipp.c:2164
msgid "Print job too large."
msgstr ""
-#: backend/ipp.c:1630
+#: backend/ipp.c:1642
msgid "Print job was not accepted."
msgstr ""
msgid "Printer Added"
msgstr ""
-#: ppdc/sample.c:263
+#: ppdc/sample.c:255
msgid "Printer Default"
msgstr ""
msgid "Printer Paused"
msgstr ""
-#: ppdc/sample.c:294
+#: ppdc/sample.c:289
msgid "Printer Settings"
msgstr ""
-#: backend/ipp.c:2155
+#: backend/ipp.c:2167
msgid "Printer cannot print supplied content."
msgstr ""
-#: backend/ipp.c:2158
+#: backend/ipp.c:2170
msgid "Printer cannot print with supplied options."
msgstr ""
msgid "Quarto"
msgstr ""
-#: scheduler/ipp.c:1485 scheduler/ipp.c:10456
+#: scheduler/ipp.c:1485 scheduler/ipp.c:10567
msgid "Quota limit reached."
msgstr ""
msgid "Remote host did not accept data file (%d)."
msgstr ""
-#: ppdc/sample.c:428
+#: ppdc/sample.c:423
msgid "Reprint After Error"
msgstr ""
msgid "Return Address"
msgstr ""
-#: ppdc/sample.c:449
+#: ppdc/sample.c:444
msgid "Rewind"
msgstr ""
msgid "Server Stopped"
msgstr ""
-#: cups/tls-darwin.c:1028
+#: cups/tls-darwin.c:1008 cups/tls-gnutls.c:1024
msgid "Server credentials not set."
msgstr ""
msgid "Shipping Address"
msgstr ""
-#: ppdc/sample.c:273
+#: ppdc/sample.c:265
msgid "Short-Edge (Landscape)"
msgstr ""
-#: ppdc/sample.c:288
+#: ppdc/sample.c:283
msgid "Special Paper"
msgstr ""
msgid "Spooling job, %.0f%% complete."
msgstr ""
-#: ppdc/sample.c:341
+#: ppdc/sample.c:336
msgid "Standard"
msgstr ""
msgid "Statement"
msgstr ""
-#: ppdc/sample.c:251
-msgid "Stylus Color Series"
-msgstr ""
-
-#: ppdc/sample.c:257
-msgid "Stylus Photo Series"
-msgstr ""
-
-#: scheduler/ipp.c:3564 scheduler/ipp.c:6481 scheduler/ipp.c:7180
-#: scheduler/ipp.c:8680
+#: scheduler/ipp.c:3564 scheduler/ipp.c:6590 scheduler/ipp.c:7289
+#: scheduler/ipp.c:8790
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
-#: test/ippfind.c:2768
+#: test/ippfind.c:2798
msgid "Substitutions:"
msgstr ""
msgid "Tabloid Oversize Long Edge"
msgstr ""
-#: ppdc/sample.c:342
+#: ppdc/sample.c:337
msgid "Tear"
msgstr ""
-#: ppdc/sample.c:447
+#: ppdc/sample.c:442
msgid "Tear-Off"
msgstr ""
-#: ppdc/sample.c:388
+#: ppdc/sample.c:383
msgid "Tear-Off Adjust Position"
msgstr ""
msgid "The \"%s\" attribute is required for print jobs."
msgstr ""
-#: scheduler/ipp.c:6196 scheduler/ipp.c:6274 scheduler/ipp.c:6290
-#: scheduler/ipp.c:6308
+#: scheduler/ipp.c:6250 scheduler/ipp.c:6330 scheduler/ipp.c:6343
+#: scheduler/ipp.c:6355 scheduler/ipp.c:6370
#, c-format
msgid "The %s attribute cannot be provided with job-ids."
msgstr ""
msgid "The '%s' Job Description attribute cannot be supplied in a job creation request."
msgstr ""
-#: scheduler/ipp.c:5134
+#: scheduler/ipp.c:5183
#, c-format
msgid "The '%s' operation attribute cannot be supplied in a Create-Job request."
msgstr ""
-#: scheduler/ipp.c:6711
+#: scheduler/ipp.c:6820
#, c-format
msgid "The PPD file \"%s\" could not be found."
msgstr ""
-#: scheduler/ipp.c:6698
+#: scheduler/ipp.c:6807
#, c-format
msgid "The PPD file \"%s\" could not be opened: %s"
msgstr ""
msgid "The fuser's temperature is low."
msgstr ""
-#: scheduler/ipp.c:2087
+#: scheduler/ipp.c:2088
msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
msgstr ""
-#: scheduler/ipp.c:2070 scheduler/ipp.c:5450
+#: scheduler/ipp.c:2071 scheduler/ipp.c:5499
#, c-format
msgid "The notify-user-data value is too large (%d > 63 octets)."
msgstr ""
msgid "The optical photoconductor will need to be replaced soon."
msgstr ""
-#: backend/ipp.c:969
+#: backend/ipp.c:981
msgid "The printer configuration is incorrect or the printer no longer exists."
msgstr ""
msgid "The printer did not respond."
msgstr ""
-#: backend/ipp.c:813 backend/ipp.c:932 backend/ipp.c:1046 backend/ipp.c:1437
-#: backend/ipp.c:1602 backend/lpd.c:836 backend/socket.c:379
+#: backend/ipp.c:825 backend/ipp.c:944 backend/ipp.c:1058 backend/ipp.c:1449
+#: backend/ipp.c:1614 backend/lpd.c:836 backend/socket.c:379
#: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
msgid "The printer is in use."
msgstr ""
msgid "The printer is not connected."
msgstr ""
-#: backend/ipp.c:791 backend/ipp.c:824 backend/ipp.c:928 backend/lpd.c:815
+#: backend/ipp.c:803 backend/ipp.c:836 backend/ipp.c:940 backend/lpd.c:815
#: backend/lpd.c:856 backend/socket.c:358 backend/socket.c:391
msgid "The printer is not responding."
msgstr ""
msgid "The printer is offline."
msgstr ""
-#: backend/ipp.c:806 backend/lpd.c:829 backend/socket.c:372
+#: backend/ipp.c:818 backend/lpd.c:829 backend/socket.c:372
msgid "The printer is unreachable at this time."
msgstr ""
msgid "The printer may be out of toner."
msgstr ""
-#: backend/ipp.c:800 backend/lpd.c:823 backend/socket.c:366
+#: backend/ipp.c:812 backend/lpd.c:823 backend/socket.c:366
msgid "The printer may not exist or is unavailable at this time."
msgstr ""
msgstr ""
#: scheduler/ipp.c:788 scheduler/ipp.c:1048 scheduler/ipp.c:3205
-#: scheduler/ipp.c:3384 scheduler/ipp.c:5117 scheduler/ipp.c:5284
-#: scheduler/ipp.c:5598 scheduler/ipp.c:6162 scheduler/ipp.c:6916
-#: scheduler/ipp.c:6972 scheduler/ipp.c:7286 scheduler/ipp.c:7552
-#: scheduler/ipp.c:7641 scheduler/ipp.c:7674 scheduler/ipp.c:7997
-#: scheduler/ipp.c:8390 scheduler/ipp.c:8472 scheduler/ipp.c:9636
-#: scheduler/ipp.c:10088 scheduler/ipp.c:10419 scheduler/ipp.c:10501
-#: scheduler/ipp.c:10874
+#: scheduler/ipp.c:3384 scheduler/ipp.c:5166 scheduler/ipp.c:5333
+#: scheduler/ipp.c:5647 scheduler/ipp.c:6216 scheduler/ipp.c:7025
+#: scheduler/ipp.c:7081 scheduler/ipp.c:7395 scheduler/ipp.c:7661
+#: scheduler/ipp.c:7750 scheduler/ipp.c:7783 scheduler/ipp.c:8106
+#: scheduler/ipp.c:8500 scheduler/ipp.c:8582 scheduler/ipp.c:9747
+#: scheduler/ipp.c:10199 scheduler/ipp.c:10530 scheduler/ipp.c:10612
+#: scheduler/ipp.c:10987
msgid "The printer or class does not exist."
msgstr ""
msgid "The printer's waste bin is full."
msgstr ""
-#: scheduler/ipp.c:894 scheduler/ipp.c:2251
+#: scheduler/ipp.c:894 scheduler/ipp.c:2252
#, c-format
msgid "The printer-uri \"%s\" contains invalid characters."
msgstr ""
msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
msgstr ""
-#: scheduler/ipp.c:2235
+#: scheduler/ipp.c:2236
msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
msgstr ""
msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
msgstr ""
-#: scheduler/client.c:2226
+#: scheduler/client.c:2232
msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
msgstr ""
-#: scheduler/ipp.c:6257
+#: scheduler/ipp.c:6314
#, c-format
msgid "The which-jobs value \"%s\" is not supported."
msgstr ""
-#: scheduler/ipp.c:5528
+#: scheduler/ipp.c:5577
msgid "There are too many subscriptions."
msgstr ""
msgid "There was an unrecoverable USB error."
msgstr ""
-#: ppdc/sample.c:435
+#: ppdc/sample.c:430
msgid "Thermal Transfer Media"
msgstr ""
msgid "Too many job-sheets values (%d > 2)."
msgstr ""
-#: scheduler/ipp.c:2536
+#: scheduler/ipp.c:2537
#, c-format
msgid "Too many printer-state-reasons values (%d > %d)."
msgstr ""
-#: ppdc/sample.c:289
+#: ppdc/sample.c:284
msgid "Transparency"
msgstr ""
-#: ppdc/sample.c:284
+#: ppdc/sample.c:279
msgid "Tray"
msgstr ""
-#: ppdc/sample.c:264
+#: ppdc/sample.c:256
msgid "Tray 1"
msgstr ""
-#: ppdc/sample.c:265
+#: ppdc/sample.c:257
msgid "Tray 2"
msgstr ""
-#: ppdc/sample.c:266
+#: ppdc/sample.c:258
msgid "Tray 3"
msgstr ""
-#: ppdc/sample.c:267
+#: ppdc/sample.c:259
msgid "Tray 4"
msgstr ""
msgid "Unable to add class"
msgstr ""
-#: backend/ipp.c:1784
+#: backend/ipp.c:1796
msgid "Unable to add document to print job."
msgstr ""
-#: scheduler/ipp.c:1538
+#: scheduler/ipp.c:1537
#, c-format
msgid "Unable to add job for destination \"%s\"."
msgstr ""
msgid "Unable to cancel RSS subscription"
msgstr ""
-#: backend/ipp.c:2065 backend/ipp.c:2500
+#: backend/ipp.c:2077 backend/ipp.c:2512
msgid "Unable to cancel print job."
msgstr ""
msgid "Unable to connect to host."
msgstr ""
-#: backend/ipp.c:769 backend/ipp.c:1242 backend/lpd.c:795 backend/socket.c:338
+#: backend/ipp.c:781 backend/ipp.c:1254 backend/lpd.c:795 backend/socket.c:338
#: backend/usb-unix.c:110
msgid "Unable to contact printer, queuing on next printer in class."
msgstr ""
msgid "Unable to copy CUPS printer driver files (%d)."
msgstr ""
-#: scheduler/ipp.c:2656
+#: scheduler/ipp.c:2657
#, c-format
msgid "Unable to copy PPD file - %s"
msgstr ""
-#: scheduler/ipp.c:2711
+#: scheduler/ipp.c:2712
msgid "Unable to copy PPD file."
msgstr ""
msgid "Unable to copy Windows 9x printer driver files (%d)."
msgstr ""
-#: scheduler/ipp.c:2633
+#: scheduler/ipp.c:2634
#, c-format
msgid "Unable to copy interface script - %s"
msgstr ""
-#: cups/util.c:569 cups/util.c:1639
+#: cups/util.c:496 cups/util.c:1479
msgid "Unable to create printer-uri"
msgstr ""
-#: cups/tls-darwin.c:1136
+#: cups/tls-darwin.c:1116 cups/tls-gnutls.c:1157
msgid "Unable to create server credentials."
msgstr ""
msgid "Unable to edit cupsd.conf files larger than 1MB"
msgstr ""
-#: cups/tls-darwin.c:1304 cups/tls-sspi.c:493
+#: cups/tls-darwin.c:1284
msgid "Unable to establish a secure connection to host (certificate chain invalid)."
msgstr ""
-#: cups/tls-darwin.c:1294 cups/tls-sspi.c:483
+#: cups/tls-darwin.c:1274
msgid "Unable to establish a secure connection to host (certificate not yet valid)."
msgstr ""
-#: cups/tls-darwin.c:1289 cups/tls-sspi.c:478
+#: cups/tls-darwin.c:1269
msgid "Unable to establish a secure connection to host (expired certificate)."
msgstr ""
-#: cups/tls-darwin.c:1299 cups/tls-sspi.c:488
+#: cups/tls-darwin.c:1279
msgid "Unable to establish a secure connection to host (host name mismatch)."
msgstr ""
-#: cups/tls-darwin.c:1309 cups/tls-sspi.c:498
+#: cups/tls-darwin.c:1289
msgid "Unable to establish a secure connection to host (peer dropped connection before responding)."
msgstr ""
-#: cups/tls-darwin.c:1284 cups/tls-sspi.c:473
+#: cups/tls-darwin.c:1264
msgid "Unable to establish a secure connection to host (self-signed certificate)."
msgstr ""
-#: cups/tls-darwin.c:1279 cups/tls-sspi.c:468
+#: cups/tls-darwin.c:1259
msgid "Unable to establish a secure connection to host (untrusted certificate)."
msgstr ""
-#: cups/tls-darwin.c:1336 cups/tls-sspi.c:269 cups/tls-sspi.c:525
-#: cups/tls-sspi.c:558 cups/tls-sspi.c:575
+#: cups/tls-darwin.c:1316 cups/tls-sspi.c:1247 cups/tls-sspi.c:1264
msgid "Unable to establish a secure connection to host."
msgstr ""
msgid "Unable to find printer."
msgstr ""
-#: cups/tls-darwin.c:1150
+#: cups/tls-darwin.c:1130
msgid "Unable to find server credentials."
msgstr ""
-#: backend/ipp.c:3481
+#: backend/ipp.c:3493
msgid "Unable to get backend exit status."
msgstr ""
msgid "Unable to get printer status"
msgstr ""
-#: backend/ipp.c:993
+#: backend/ipp.c:1005
msgid "Unable to get printer status."
msgstr ""
msgid "Unable to open device file"
msgstr ""
-#: scheduler/ipp.c:5943
+#: scheduler/ipp.c:5992
#, c-format
msgid "Unable to open document #%d in job #%d."
msgstr ""
msgid "Unable to open help file."
msgstr ""
-#: backend/ipp.c:378 backend/ipp.c:1531 backend/ipp.c:1739 backend/lpd.c:496
+#: backend/ipp.c:378 backend/ipp.c:1543 backend/ipp.c:1751 backend/lpd.c:496
#: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:67
#: filter/pstops.c:267
msgid "Unable to open print file"
msgid "Unable to set server default"
msgstr ""
-#: backend/ipp.c:3340 backend/ipp.c:3417 backend/ipp.c:3425
+#: backend/ipp.c:3352 backend/ipp.c:3429 backend/ipp.c:3437
msgid "Unable to start backend process."
msgstr ""
msgid "Unknown print mode: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10290
+#: scheduler/ipp.c:10401
#, c-format
msgid "Unknown printer-error-policy \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10273
+#: scheduler/ipp.c:10384
#, c-format
msgid "Unknown printer-op-policy \"%s\"."
msgstr ""
msgid "Unknown version option value: \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10745
+#: scheduler/ipp.c:10858
#, c-format
msgid "Unsupported 'compression' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10775
+#: scheduler/ipp.c:10888
#, c-format
msgid "Unsupported 'document-format' value \"%s\"."
msgstr ""
-#: scheduler/ipp.c:10850
+#: scheduler/ipp.c:10963
msgid "Unsupported 'job-name' value."
msgstr ""
msgid "Unsupported character set \"%s\"."
msgstr ""
-#: scheduler/ipp.c:7963 scheduler/ipp.c:9197
+#: scheduler/ipp.c:8072 scheduler/ipp.c:9307
#, c-format
msgid "Unsupported compression \"%s\"."
msgstr ""
-#: scheduler/ipp.c:8097 scheduler/ipp.c:9347
+#: scheduler/ipp.c:8206 scheduler/ipp.c:9457
#, c-format
msgid "Unsupported document-format \"%s\"."
msgstr ""
-#: scheduler/ipp.c:9330
+#: scheduler/ipp.c:9440
#, c-format
msgid "Unsupported document-format \"%s/%s\"."
msgstr ""
msgid "Usage: cupsctl [options] [param=value ... paramN=valueN]"
msgstr ""
-#: scheduler/main.c:2157
+#: scheduler/main.c:2145
msgid "Usage: cupsd [options]"
msgstr ""
"Options:"
msgstr ""
-#: test/ippfind.c:2708
+#: test/ippfind.c:2738
msgid ""
"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n"
" ippfind [options] name[.regtype[.domain.]] ... [expression]\n"
" ippfind --version"
msgstr ""
-#: test/ipptool.c:4711
+#: test/ipptool.c:4803
msgid "Usage: ipptool [options] URI filename [ ... filenameN ]"
msgstr ""
msgid "Version uses indefinite length"
msgstr ""
-#: backend/ipp.c:1901
+#: backend/ipp.c:1913
msgid "Waiting for job to complete."
msgstr ""
msgid "Yes"
msgstr ""
-#: scheduler/client.c:2213
+#: scheduler/client.c:2219
#, c-format
msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
msgstr ""
-#: ppdc/sample.c:439
+#: ppdc/sample.c:434
msgid "ZPL Label Printer"
msgstr ""
-#: ppdc/sample.c:362
+#: ppdc/sample.c:357
msgid "Zebra"
msgstr ""
msgid "completed"
msgstr ""
-#: scheduler/ipp.c:5815
+#: scheduler/ipp.c:5864
msgid "cups-deviced failed to execute."
msgstr ""
-#: scheduler/ipp.c:6634 scheduler/ipp.c:6883
+#: scheduler/ipp.c:6743 scheduler/ipp.c:6992
msgid "cups-driverd failed to execute."
msgstr ""
msgid "cupsctl: Unknown option \"-%c\""
msgstr ""
-#: scheduler/main.c:172
+#: scheduler/main.c:171
msgid "cupsd: Expected config filename after \"-c\" option."
msgstr ""
-#: scheduler/main.c:259
+#: scheduler/main.c:258
msgid "cupsd: Expected cups-files.conf filename after \"-s\" option."
msgstr ""
-#: scheduler/main.c:237
+#: scheduler/main.c:236
msgid "cupsd: On-demand support not compiled in, running in normal mode."
msgstr ""
-#: scheduler/main.c:270
+#: scheduler/main.c:269
msgid "cupsd: Relative cups-files.conf filename not allowed."
msgstr ""
-#: scheduler/main.c:203 scheduler/main.c:210
+#: scheduler/main.c:202 scheduler/main.c:209
msgid "cupsd: Unable to get current directory."
msgstr ""
-#: scheduler/main.c:317 scheduler/main.c:326
+#: scheduler/main.c:316 scheduler/main.c:325
msgid "cupsd: Unable to get path to cups-files.conf file."
msgstr ""
-#: scheduler/main.c:299
+#: scheduler/main.c:298
#, c-format
msgid "cupsd: Unknown argument \"%s\" - aborting."
msgstr ""
-#: scheduler/main.c:292
+#: scheduler/main.c:291
#, c-format
msgid "cupsd: Unknown option \"%c\" - aborting."
msgstr ""
msgid "idle"
msgstr ""
-#: test/ippfind.c:2435
+#: test/ippfind.c:2465
#, c-format
msgid "ippfind: Bad regular expression: %s"
msgstr ""
-#: test/ippfind.c:324
+#: test/ippfind.c:328
msgid "ippfind: Cannot use --and after --or."
msgstr ""
-#: test/ippfind.c:597
+#: test/ippfind.c:601
#, c-format
msgid "ippfind: Expected key name after %s."
msgstr ""
-#: test/ippfind.c:547 test/ippfind.c:730
+#: test/ippfind.c:551 test/ippfind.c:734
#, c-format
msgid "ippfind: Expected port range after %s."
msgstr ""
-#: test/ippfind.c:357
+#: test/ippfind.c:361
#, c-format
msgid "ippfind: Expected program after %s."
msgstr ""
-#: test/ippfind.c:374
+#: test/ippfind.c:378
#, c-format
msgid "ippfind: Expected semi-colon after %s."
msgstr ""
-#: test/ippfind.c:1958
+#: test/ippfind.c:1965
msgid "ippfind: Missing close brace in substitution."
msgstr ""
-#: test/ippfind.c:1049
+#: test/ippfind.c:1053
msgid "ippfind: Missing close parenthesis."
msgstr ""
-#: test/ippfind.c:331
+#: test/ippfind.c:335
msgid "ippfind: Missing expression before \"--and\"."
msgstr ""
-#: test/ippfind.c:444
+#: test/ippfind.c:448
msgid "ippfind: Missing expression before \"--or\"."
msgstr ""
-#: test/ippfind.c:867
+#: test/ippfind.c:871
#, c-format
msgid "ippfind: Missing key name after %s."
msgstr ""
-#: test/ippfind.c:1020
+#: test/ippfind.c:1024
msgid "ippfind: Missing open parenthesis."
msgstr ""
-#: test/ippfind.c:897
+#: test/ippfind.c:901
#, c-format
msgid "ippfind: Missing program after %s."
msgstr ""
-#: test/ippfind.c:343 test/ippfind.c:397 test/ippfind.c:426 test/ippfind.c:532
-#: test/ippfind.c:614 test/ippfind.c:629 test/ippfind.c:784 test/ippfind.c:799
-#: test/ippfind.c:822 test/ippfind.c:882
+#: test/ippfind.c:347 test/ippfind.c:401 test/ippfind.c:430 test/ippfind.c:536
+#: test/ippfind.c:618 test/ippfind.c:633 test/ippfind.c:788 test/ippfind.c:803
+#: test/ippfind.c:826 test/ippfind.c:886
#, c-format
msgid "ippfind: Missing regular expression after %s."
msgstr ""
-#: test/ippfind.c:915
+#: test/ippfind.c:919
#, c-format
msgid "ippfind: Missing semi-colon after %s."
msgstr ""
-#: test/ippfind.c:1905 test/ippfind.c:1930
+#: test/ippfind.c:1912 test/ippfind.c:1937
msgid "ippfind: Out of memory."
msgstr ""
-#: test/ippfind.c:993
+#: test/ippfind.c:997
msgid "ippfind: Too many parenthesis."
msgstr ""
-#: test/ippfind.c:1262 test/ippfind.c:1398 test/ippfind.c:2527
+#: test/ippfind.c:1266 test/ippfind.c:1402 test/ippfind.c:2557
#, c-format
msgid "ippfind: Unable to browse or resolve: %s"
msgstr ""
-#: test/ippfind.c:2017 test/ippfind.c:2044
+#: test/ippfind.c:2035 test/ippfind.c:2062
#, c-format
msgid "ippfind: Unable to execute \"%s\": %s"
msgstr ""
-#: test/ippfind.c:1139 test/ippfind.c:1147 test/ippfind.c:1158
+#: test/ippfind.c:1143 test/ippfind.c:1151 test/ippfind.c:1162
#, c-format
msgid "ippfind: Unable to use Bonjour: %s"
msgstr ""
-#: test/ippfind.c:1987
+#: test/ippfind.c:1994
#, c-format
msgid "ippfind: Unknown variable \"{%s}\"."
msgstr ""
-#: test/ipptool.c:324 test/ipptool.c:387 test/ipptool.c:542 test/ipptool.c:565
+#: test/ipptool.c:326 test/ipptool.c:389 test/ipptool.c:544 test/ipptool.c:567
msgid "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"."
msgstr ""
-#: test/ipptool.c:621
+#: test/ipptool.c:623
#, c-format
msgid "ipptool: Bad URI - %s."
msgstr ""
-#: test/ipptool.c:535
+#: test/ipptool.c:537
msgid "ipptool: Invalid seconds for \"-i\"."
msgstr ""
-#: test/ipptool.c:602
+#: test/ipptool.c:604
msgid "ipptool: May only specify a single URI."
msgstr ""
-#: test/ipptool.c:557
+#: test/ipptool.c:559
msgid "ipptool: Missing count for \"-n\"."
msgstr ""
-#: test/ipptool.c:421
+#: test/ipptool.c:423
msgid "ipptool: Missing filename for \"-f\"."
msgstr ""
-#: test/ipptool.c:402
+#: test/ipptool.c:404
msgid "ipptool: Missing name=value for \"-d\"."
msgstr ""
-#: test/ipptool.c:525
+#: test/ipptool.c:527
msgid "ipptool: Missing seconds for \"-i\"."
msgstr ""
-#: test/ipptool.c:647
+#: test/ipptool.c:649
msgid "ipptool: URI required before test file."
msgstr ""
-#: test/ipptool.c:583
+#: test/ipptool.c:585
#, c-format
msgid "ipptool: Unknown option \"-%c\"."
msgstr ""
-#: scheduler/ipp.c:7630
+#: scheduler/ipp.c:7739
msgid "job-printer-uri attribute missing."
msgstr ""
msgid "no system default destination"
msgstr ""
-#: scheduler/ipp.c:5499
+#: scheduler/ipp.c:5548
msgid "notify-events not specified."
msgstr ""
-#: scheduler/ipp.c:2024 scheduler/ipp.c:5404
+#: scheduler/ipp.c:2025 scheduler/ipp.c:5453
#, c-format
msgid "notify-recipient-uri URI \"%s\" is already used."
msgstr ""
-#: scheduler/ipp.c:2014 scheduler/ipp.c:5394
+#: scheduler/ipp.c:2015 scheduler/ipp.c:5443
#, c-format
msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
msgstr ""
msgid "ppdmerge: Unable to backup %s to %s - %s"
msgstr ""
-#: systemv/lpstat.c:1774
+#: systemv/lpstat.c:1777
#, c-format
msgid "printer %s disabled since %s -"
msgstr ""
-#: systemv/lpstat.c:1763
+#: systemv/lpstat.c:1766
#, c-format
msgid "printer %s is idle. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1768
+#: systemv/lpstat.c:1771
#, c-format
msgid "printer %s now printing %s-%d. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1897
+#: systemv/lpstat.c:1900
#, c-format
msgid "printer %s/%s disabled since %s -"
msgstr ""
-#: systemv/lpstat.c:1883
+#: systemv/lpstat.c:1886
#, c-format
msgid "printer %s/%s is idle. enabled since %s"
msgstr ""
-#: systemv/lpstat.c:1890
+#: systemv/lpstat.c:1893
#, c-format
msgid "printer %s/%s now printing %s-%d. enabled since %s"
msgstr ""
msgid "request-id uses indefinite length"
msgstr ""
-#: systemv/lpstat.c:2029
+#: systemv/lpstat.c:2032
msgid "scheduler is not running"
msgstr ""
-#: systemv/lpstat.c:2025
+#: systemv/lpstat.c:2028
msgid "scheduler is running"
msgstr ""
" --domain regex Match domain to regular expression." = " --domain regex Match domain to regular expression.";
" --exec utility [argument ...] ;\n Execute program if true." = " --exec utility [argument ...] ;\n Execute program if true.";
" --false Always false." = " --false Always false.";
+" --help Show help." = " --help Show help.";
" --help Show this help." = " --help Show this help.";
" --host regex Match hostname to regular expression." = " --host regex Match hostname to regular expression.";
" --lf End lines with LF (UNIX/Linux/OS X)." = " --lf End lines with LF (UNIX/Linux/OS X).";
" --print-name Print service name if true." = " --print-name Print service name if true.";
" --quiet Quietly report match via exit code." = " --quiet Quietly report match via exit code.";
" --remote True if service is remote." = " --remote True if service is remote.";
+" --stop-after-include-error\n Stop tests after a failed INCLUDE." = " --stop-after-include-error\n Stop tests after a failed INCLUDE.";
" --true Always true." = " --true Always true.";
" --txt key True if the TXT record contains the key." = " --txt key True if the TXT record contains the key.";
" --txt-* regex Match TXT record key to regular expression." = " --txt-* regex Match TXT record key to regular expression.";
" --uri regex Match URI to regular expression." = " --uri regex Match URI to regular expression.";
" --version Show program version." = " --version Show program version.";
+" --version Show version." = " --version Show version.";
" -4 Connect using IPv4." = " -4 Connect using IPv4.";
" -6 Connect using IPv6." = " -6 Connect using IPv6.";
" -C Send requests using chunking (default)." = " -C Send requests using chunking (default).";
" -I include-dir Add include directory to search path." = " -I include-dir Add include directory to search path.";
" -I {filename,filters,none,profiles}" = " -I {filename,filters,none,profiles}";
" -L Send requests using content-length." = " -L Send requests using content-length.";
+" -P filename.plist Produce XML plist to a file and test report to standard output." = " -P filename.plist Produce XML plist to a file and test report to standard output.";
" -P filename.ppd Set PPD file." = " -P filename.ppd Set PPD file.";
" -P number[-number] Match port to number or range." = " -P number[-number] Match port to number or range.";
" -R root-directory Set alternate root." = " -R root-directory Set alternate root.";
" -X Produce XML plist instead of plain text." = " -X Produce XML plist instead of plain text.";
" -a Browse for all services." = " -a Browse for all services.";
" -a Export all printers." = " -a Export all printers.";
+" -c Produce CSV output." = " -c Produce CSV output.";
" -c catalog.po Load the specified message catalog." = " -c catalog.po Load the specified message catalog.";
" -c cups-files.conf Set cups-files.conf file to use." = " -c cups-files.conf Set cups-files.conf file to use.";
" -c cupsd.conf Set cupsd.conf file to use." = " -c cupsd.conf Set cupsd.conf file to use.";
" -i seconds Repeat the last file with the given time interval." = " -i seconds Repeat the last file with the given time interval.";
" -j job-id[,N] Filter file N from the specified job (default is file 1)." = " -j job-id[,N] Filter file N from the specified job (default is file 1).";
" -l List attributes." = " -l List attributes.";
+" -l Produce plain text output." = " -l Produce plain text output.";
" -l Run cupsd on demand." = " -l Run cupsd on demand.";
" -l lang[,lang,...] Specify the output language(s) (locale)." = " -l lang[,lang,...] Specify the output language(s) (locale).";
" -m Use the ModelName value as the filename." = " -m Use the ModelName value as the filename.";
"7 inches/sec." = "7 inches/sec.";
"7 x 9" = "7 x 9";
"70" = "70";
-"720dpi" = "720dpi";
"75" = "75";
"8" = "8";
"8 inches/sec." = "8 inches/sec.";
"Name OID uses indefinite length" = "Name OID uses indefinite length";
"Nested classes are not allowed." = "Nested classes are not allowed.";
"Never" = "Never";
-"New Stylus Color Series" = "New Stylus Color Series";
-"New Stylus Photo Series" = "New Stylus Photo Series";
"No" = "No";
"No Content" = "No Content";
"No PPD name" = "No PPD name";
"Starting Banner" = "Starting Banner";
"Starting page %d." = "Starting page %d.";
"Statement" = "Statement";
-"Stylus Color Series" = "Stylus Color Series";
-"Stylus Photo Series" = "Stylus Photo Series";
"Subscription #%d does not exist." = "Subscription #%d does not exist.";
"Substitutions:" = "Substitutions:";
"Super A" = "Super A";
msgstr ""
"Project-Id-Version: CUPS 1.4.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2012-09-29 11:21+0200\n"
"Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr " -4 Connecta fent servir IPv4."
msgstr ""
" -L Envia les peticions fent servir content-length."
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr " -P nomfitxer.ppd Estableix el fitxer PPD."
msgid " -a Export all printers."
msgstr " -a Exporta totes les impressores."
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr " -c catàleg.po Carrega el catàleg de missatges indicat."
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720ppp"
-
msgid "75"
msgstr "75"
msgid "Never"
msgstr "Mai"
-msgid "New Stylus Color Series"
-msgstr "Sèrie New Stylus Color"
-
-msgid "New Stylus Photo Series"
-msgstr "Sèrie New Stylus Photo"
-
msgid "No"
msgstr "No"
msgid "Statement"
msgstr "Declaració"
-msgid "Stylus Color Series"
-msgstr "Sèrie Stylus Color"
-
-msgid "Stylus Photo Series"
-msgstr "Sèrie Stylus Photo"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr "La subscripció #%d no existeix."
#~ msgid "3.5\" Disk - 2 1/8 x 2 3/4\""
#~ msgstr "Disc de 3.5 - 2 1/8 x 2 3/4\""
+#~ msgid "720dpi"
+#~ msgstr "720ppp"
+
#~ msgid "Address - 1 1/8 x 3 1/2\""
#~ msgstr "Adreça - 1 1/8 x 3 1/2\""
#~ msgid "Large Address - 1 4/10 x 3 1/2\""
#~ msgstr "Adreça gran - 1 4/10 x 3 1/2\""
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Sèrie New Stylus Color"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Sèrie New Stylus Photo"
+
#~ msgid "Output for printer %s is sent to %s"
#~ msgstr "La sortida de la impressora %s s'envia a %s"
#~ msgid "Shipping Address - 2 5/16 x 4\""
#~ msgstr "Adreça de lliurament - 2 5/16 x 4\""
+#~ msgid "Stylus Color Series"
+#~ msgstr "Sèrie Stylus Color"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Sèrie Stylus Photo"
+
#~ msgid "The output bin is almost full."
#~ msgstr "La safata de sortida és gairebé plena."
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2012-09-14 10:26+0100\n"
"Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
"Language-Team: Czech\n"
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr ""
msgid " -L Send requests using content-length."
msgstr ""
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr ""
msgid " -a Export all printers."
msgstr ""
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720 dpi"
-
msgid "75"
msgstr "75"
msgid "Never"
msgstr "Nikdy"
-msgid "New Stylus Color Series"
-msgstr "New Stylus Color Series"
-
-msgid "New Stylus Photo Series"
-msgstr "New Stylus Photo Series"
-
msgid "No"
msgstr "Ne"
msgid "Statement"
msgstr "Prohlášení"
-msgid "Stylus Color Series"
-msgstr "Stylus Color Series"
-
-msgid "Stylus Photo Series"
-msgstr "Stylus Photo Series"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
msgid "variable-bindings uses indefinite length"
msgstr "\"variable-bindings\" má neomezenou délku"
+#~ msgid "720dpi"
+#~ msgstr "720 dpi"
+
#~ msgid "Enter old password:"
#~ msgstr "Zadejte původní heslo:"
#~ msgid "Enter password:"
#~ msgstr "Zadejte heslo:"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "New Stylus Color Series"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "New Stylus Photo Series"
+
#~ msgid "Purge Jobs"
#~ msgstr "Výmaz úloh"
+
+#~ msgid "Stylus Color Series"
+#~ msgstr "Stylus Color Series"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Stylus Photo Series"
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2012-07-01 20:21+0100\n"
"Last-Translator: Juan Pablo González Riopedre <riopedre13@yahoo.es>\n"
"Language-Team: Spanish\n"
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr " -4 Conectar usando IPv4."
msgid " -L Send requests using content-length."
msgstr " -L Envía peticiones usando content-length."
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr " -P nombre_archivo.ppd Establece archivo PPD."
msgid " -a Export all printers."
msgstr " -a Exporta todas las impresoras."
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr " -c catálogo.po Carga el catálogo de mensajes especificado."
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720ppp"
-
msgid "75"
msgstr "75"
msgid "Never"
msgstr "Nunca"
-msgid "New Stylus Color Series"
-msgstr "Nueva Stylus Color Series"
-
-msgid "New Stylus Photo Series"
-msgstr "Nueva Stylus Photo Series"
-
msgid "No"
msgstr "No"
msgid "Statement"
msgstr "Declaración"
-msgid "Stylus Color Series"
-msgstr "Stylus Color Series"
-
-msgid "Stylus Photo Series"
-msgstr "Stylus Photo Series"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr "Subscripción #%d no existe."
#~ msgid "%s: Error - expected destination after \"-b\" option."
#~ msgstr "%s: Error - se esperaba un destino tras la opción \"-b\"."
+#~ msgid "720dpi"
+#~ msgstr "720ppp"
+
#~ msgid "Bad printer URI."
#~ msgstr "URI de impresora incorrecto."
#~ msgid "Enter password:"
#~ msgstr "Introduzca la contraseña:"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Nueva Stylus Color Series"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Nueva Stylus Photo Series"
+
#~ msgid "Output for printer %s is sent to %s"
#~ msgstr "La salida de la impresora %s se ha enviado a %s"
#~ msgstr ""
#~ "Rango Propiet. Pri Trabajo Archivos Tamaño total"
+#~ msgid "Stylus Color Series"
+#~ msgstr "Stylus Color Series"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Stylus Photo Series"
+
#~ msgid "The output bin is almost full."
#~ msgstr "Recipiente de salida casi lleno"
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2012-12-12 11:12+0100\n"
"Last-Translator: denis meramdjougoma <dcmeram@libertysurf.fr>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr ""
msgid " -L Send requests using content-length."
msgstr ""
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr ""
msgid " -a Export all printers."
msgstr ""
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720 ppp"
-
msgid "75"
msgstr "75"
msgid "Never"
msgstr "Jamais"
-msgid "New Stylus Color Series"
-msgstr "Nouvelles série Stylus Color"
-
-msgid "New Stylus Photo Series"
-msgstr "Nouvelles série Stylus Photo"
-
msgid "No"
msgstr "Non"
msgid "Statement"
msgstr "Déclaration"
-msgid "Stylus Color Series"
-msgstr "Série Stylus Color"
-
-msgid "Stylus Photo Series"
-msgstr "Série Stylus Photo"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
msgid "variable-bindings uses indefinite length"
msgstr ""
+#~ msgid "720dpi"
+#~ msgstr "720 ppp"
+
#~ msgid "Enter old password:"
#~ msgstr "Ancien mot de passe :"
#~ msgid "Enter password:"
#~ msgstr "Entrez le nouveau mot de passe :"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Nouvelles série Stylus Color"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Nouvelles série Stylus Photo"
+
#~ msgid "Purge Jobs"
#~ msgstr "Purger les tâches"
+
+#~ msgid "Stylus Color Series"
+#~ msgstr "Série Stylus Color"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Série Stylus Photo"
msgstr ""
"Project-Id-Version: CUPS 1.6\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2013-07-14 12:00+0200\n"
"Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
"Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
msgid " --false Always false."
msgstr " --false Sempre falso."
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr " --help Mostra questo aiuto."
msgid " --remote True if service is remote."
msgstr " --remote Vero se il servizio è remoto."
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr " --true Sempre vero."
msgid " --version Show program version."
msgstr " --version Mostra la versione del programma."
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr " -4 Connetti utilizzando IPv4."
msgid " -L Send requests using content-length."
msgstr " -L Invia richieste utilizzando content-length."
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr " -P filename.ppd Imposta il file PPD."
msgid " -a Export all printers."
msgstr " -a Esporta tutte le stampanti."
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
" -c catalog.po Carica il catalogo del messaggio specificato."
msgid " -l List attributes."
msgstr " -l Elenca gli attributi."
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720dpi"
-
msgid "75"
msgstr "75"
msgid "Never"
msgstr "Mai"
-msgid "New Stylus Color Series"
-msgstr "Nuova Stylus Color Series"
-
-msgid "New Stylus Photo Series"
-msgstr "Nuova Stylus Photo Series"
-
msgid "No"
msgstr "No"
msgid "Statement"
msgstr "Rapporto"
-msgid "Stylus Color Series"
-msgstr "Stylus Color Series"
-
-msgid "Stylus Photo Series"
-msgstr "Stylus Photo Series"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr "La sottoscrizione #%d non esiste."
#~ msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes"
#~ msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f byte"
+#~ msgid "720dpi"
+#~ msgstr "720dpi"
+
#~ msgid "Bad printer URI."
#~ msgstr "L'URI della stampante non è valido."
#~ msgid "Enter password:"
#~ msgstr "Digitare la password:"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Nuova Stylus Color Series"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Nuova Stylus Photo Series"
+
#~ msgid "Output for printer %s is sent to %s"
#~ msgstr "L'output della stampante %s è stato inviato a %s"
#~ msgstr ""
#~ "Rank Owner Pri Job Files Total Size"
+#~ msgid "Stylus Color Series"
+#~ msgstr "Stylus Color Series"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Stylus Photo Series"
+
#~ msgid "The output bin is almost full."
#~ msgstr "Il raccoglitore di uscita è quasi pieno."
msgstr ""
"Project-Id-Version: CUPS 1.7\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2013-08-19 11:51+0900\n"
"Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
"Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
msgid " --false Always false."
msgstr " --false 常に失敗。"
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr " --help このヘルプを表示する。"
msgid " --remote True if service is remote."
msgstr " --remote サービスがリモートなら真。"
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr " --true 常に真。"
msgid " --version Show program version."
msgstr " --version プログラムのバージョンを表示。"
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr " -4 IPv4 で接続する。"
msgid " -L Send requests using content-length."
msgstr " -L content-length を用いてリクエストを送る。"
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr " -P filename.ppd PPD ファイルを指定する。"
msgid " -a Export all printers."
msgstr " -a すべてのプリンターをエクスポートする。"
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr " -c catalog.po 指定したメッセージカタログをロードする。"
msgid " -l List attributes."
msgstr " -l 属性の一覧を表示する。"
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720dpi"
-
msgid "75"
msgstr "75"
msgid "Never"
msgstr "Never"
-msgid "New Stylus Color Series"
-msgstr "New Stylus Color シリーズ"
-
-msgid "New Stylus Photo Series"
-msgstr "New Stylus Photo シリーズ"
-
msgid "No"
msgstr "いいえ"
msgid "Statement"
msgstr "記述"
-msgid "Stylus Color Series"
-msgstr "Stylus Color シリーズ"
-
-msgid "Stylus Photo Series"
-msgstr "Stylus Photo シリーズ"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr "サブスクリプション番号 %d は存在しません。"
#~ msgid "%s: Error - expected destination after \"-b\" option."
#~ msgstr "%s: エラー - \"-b\" オプションのあとに宛先が必要です。"
+#~ msgid "720dpi"
+#~ msgstr "720dpi"
+
#~ msgid "Bad printer URI."
#~ msgstr "不正なプリンター URI です。"
#~ msgid "Enter password:"
#~ msgstr "パスワードを入力:"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "New Stylus Color シリーズ"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "New Stylus Photo シリーズ"
+
#~ msgid "Output for printer %s is sent to %s"
#~ msgstr "プリンター %s の出力は %s に送られます"
#~ msgstr ""
#~ "ランク 所有者 優先 ジョブ ファイル 合計サイズ"
+#~ msgid "Stylus Color Series"
+#~ msgstr "Stylus Color シリーズ"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Stylus Photo シリーズ"
+
#~ msgid "The output bin is almost full."
#~ msgstr "排紙トレイがほとんど一杯です。"
msgstr ""
"Project-Id-Version: CUPS 1.4\n"
"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2014-06-26 14:29-0400\n"
+"POT-Creation-Date: 2014-08-29 22:25-0400\n"
"PO-Revision-Date: 2009-02-16 12:00-0800\n"
"Last-Translator: Apple Inc.\n"
"Language-Team: Apple Inc.\n"
msgid " --false Always false."
msgstr ""
+msgid " --help Show help."
+msgstr ""
+
msgid " --help Show this help."
msgstr ""
msgid " --remote True if service is remote."
msgstr ""
+msgid ""
+" --stop-after-include-error\n"
+" Stop tests after a failed INCLUDE."
+msgstr ""
+
msgid " --true Always true."
msgstr ""
msgid " --version Show program version."
msgstr ""
+msgid " --version Show version."
+msgstr ""
+
msgid " -4 Connect using IPv4."
msgstr ""
msgid " -L Send requests using content-length."
msgstr ""
+msgid ""
+" -P filename.plist Produce XML plist to a file and test report to "
+"standard output."
+msgstr ""
+
msgid " -P filename.ppd Set PPD file."
msgstr ""
msgid " -a Export all printers."
msgstr ""
+msgid " -c Produce CSV output."
+msgstr ""
+
msgid " -c catalog.po Load the specified message catalog."
msgstr ""
msgid " -l List attributes."
msgstr ""
+msgid " -l Produce plain text output."
+msgstr ""
+
msgid " -l Run cupsd on demand."
msgstr ""
msgid "70"
msgstr "70"
-msgid "720dpi"
-msgstr "720dpi"
-
msgid "75"
msgstr "75"
msgid "Never"
msgstr "Никогда"
-msgid "New Stylus Color Series"
-msgstr "Серия Stylus Color нового поколения"
-
-msgid "New Stylus Photo Series"
-msgstr "Серия Stylus Photo нового поколения"
-
msgid "No"
msgstr "Нет"
msgid "Statement"
msgstr "Оператор"
-msgid "Stylus Color Series"
-msgstr "Серия Stylus Color"
-
-msgid "Stylus Photo Series"
-msgstr "Серия Stylus Photo"
-
#, c-format
msgid "Subscription #%d does not exist."
msgstr ""
#~ msgid "7 x 9\""
#~ msgstr "7 x 9\""
+#~ msgid "720dpi"
+#~ msgstr "720dpi"
+
#~ msgid "8 x 10\""
#~ msgstr "8 x 10\""
#~ msgid "Nested classes are not allowed"
#~ msgstr "Вложенные группы не допускаются"
+#~ msgid "New Stylus Color Series"
+#~ msgstr "Серия Stylus Color нового поколения"
+
+#~ msgid "New Stylus Photo Series"
+#~ msgstr "Серия Stylus Photo нового поколения"
+
#~ msgid "No PPD name!"
#~ msgstr "Нет имени PPD!"
#~ msgid "Shipping Address - 2 5/16 x 4\""
#~ msgstr "Адрес доставки - 2 5/16 x 4\""
+#~ msgid "Stylus Color Series"
+#~ msgstr "Серия Stylus Color"
+
+#~ msgid "Stylus Photo Series"
+#~ msgstr "Серия Stylus Photo"
+
#~ msgid "Tabloid (Oversize)"
#~ msgstr "Tabloid (расширенный)"
.\"
-.\" "$Id: ipptool.man 11880 2014-05-16 06:14:11Z msweet $"
+.\" "$Id: ipptool.man 12140 2014-08-30 01:51:22Z msweet $"
.\"
.\" ipptool man page for CUPS.
.\"
.\" which should have been included with this file. If this file is
.\" file is missing or damaged, see the license at "http://www.cups.org/".
.\"
-.TH ipptool 1 "CUPS" "15 May 2014" "Apple Inc."
+.TH ipptool 1 "CUPS" "29 August 2014" "Apple Inc."
.SH NAME
ipptool \- perform internet printing protocol requests
.SH SYNOPSIS
.B ipptool
sends IPP requests to the specified
.I printer-uri
-and tests and/or displays the results. Each named
+and tests and/or displays the results.
+Each named
.I testfile
-defines one or more requests, including the expected response status, attributes, and values. Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed. The
+defines one or more requests, including the expected response status, attributes, and values.
+Output is either a plain text, formatted text, CSV, or XML report on the standard output, with a non-zero exit status indicating that one or more tests have failed.
+The
.I testfile
format is described in
.BR ipptoolfile (5).
must connect to the printer or server using IPv6.
.TP 5
.B \-C
-Specifies that requests should be sent using the HTTP/1.1 "Transfer\-Encoding: chunked" header, which is required for conformance by all versions of IPP. The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files.
+Specifies that requests should be sent using the HTTP/1.1 "Transfer\-Encoding: chunked" header, which is required for conformance by all versions of IPP.
+The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files.
.TP 5
.B \-E
Forces TLS encryption when connecting to the server using the HTTP "Upgrade" header.
will continue past errors.
.TP 5
.B \-L
-Specifies that requests should be sent using the HTTP/1.0 "Content\-Length:" header, which is required for conformance by all versions of IPP. The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files.
+Specifies that requests should be sent using the HTTP/1.0 "Content\-Length:" header, which is required for conformance by all versions of IPP.
+The default is to use "Transfer\-Encoding: chunked" for requests with attached files and "Content\-Length:" for requests without attached files.
.TP 5
.BI \-P \ filename.plist
-Specifies that the test results should be written to the named XML (Apple plist) file in addition to the plain text report. This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
+Specifies that the test results should be written to the named XML (Apple plist) file in addition to the regular test report (\fB\-t\fR).
+This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
.TP 5
.B \-S
Forces (dedicated) TLS encryption when connecting to the server.
Specifies the default IPP version to use: 1.0, 1.1, 2.0, 2.1, or 2.2. If not specified, version 1.1 is used.
.TP 5
.B \-X
-Specifies that XML (Apple plist) output is desired instead of the plain text report. This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
+Specifies that XML (Apple plist) output is desired instead of the plain text report.
+This option is incompatible with the \fB\-i\fR (interval) and \fB\-n\fR (repeat\-count) options.
.TP 5
.B \-c
Specifies that CSV (comma\-separated values) output is desired instead of the plain text output.
.BI \-i \ seconds
Specifies that the (last)
.I testfile
-should be repeated at the specified interval. This option is incompatible with the \fB\-X\fR (XML plist output) option.
+should be repeated at the specified interval.
+This option is incompatible with the \fB\-X\fR (XML plist output) option.
.TP 5
.B \-l
Specifies that plain text output is desired.
.BI \-n \ repeat\-count
Specifies that the (last)
.I testfile
-should be repeated the specified number of times. This option is incompatible with the \fI\-X\fR (XML plist output) option.
+should be repeated the specified number of times.
+This option is incompatible with the \fI\-X\fR (XML plist output) option.
+.TP 5
+.B \-q
+Be quiet and produce no output.
.TP 5
.B \-t
Specifies that CUPS test report output is desired instead of the plain text output.
.TP 5
.B \-v
-Specifies that all request and response attributes should be output in CUPS test mode (\fB\-t\fR). This is the default for XML output.
+Specifies that all request and response attributes should be output in CUPS test mode (\fB\-t\fR).
+This is the default for XML output.
.SH EXIT STATUS
The
.B ipptool
.SH COPYRIGHT
Copyright \[co] 2007-2014 by Apple Inc.
.\"
-.\" End of "$Id: ipptool.man 11880 2014-05-16 06:14:11Z msweet $".
+.\" End of "$Id: ipptool.man 12140 2014-08-30 01:51:22Z msweet $".
.\"
/*
- * "$Id: rss.c 10996 2013-05-29 11:51:34Z msweet $"
+ * "$Id: rss.c 12128 2014-08-28 19:23:23Z msweet $"
*
- * RSS notifier for CUPS.
+ * RSS notifier for CUPS.
*
- * Copyright 2007-2012 by Apple Inc.
- * Copyright 2007 by Easy Software Products.
+ * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007 by Easy Software Products.
*
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file. If this file is
- * file is missing or damaged, see the license at "http://www.cups.org/".
- *
- * Contents:
- *
- * main() - Main entry for the test notifier.
- * compare_rss() - Compare two messages.
- * delete_message() - Free all memory used by a message.
- * load_rss() - Load an existing RSS feed file.
- * new_message() - Create a new RSS message.
- * password_cb() - Return the cached password.
- * save_rss() - Save messages to a RSS file.
- * xml_escape() - Copy a string, escaping &, <, and > as needed.
+ * These coded instructions, statements, and computer programs are the
+ * property of Apple Inc. and are protected by Federal copyright
+ * law. Distribution and use rights are outlined in the file "LICENSE.txt"
+ * which should have been included with this file. If this file is
+ * file is missing or damaged, see the license at "http://www.cups.org/".
*/
/*
*/
#include <cups/cups.h>
+#include <sys/stat.h>
#include <cups/language.h>
#include <cups/string-private.h>
#include <cups/array.h>
return (0);
}
+ fchmod(fileno(fp), 0644);
+
fputs("<?xml version=\"1.0\"?>\n", fp);
fputs("<rss version=\"2.0\">\n", fp);
fputs(" <channel>\n", fp);
/*
- * End of "$Id: rss.c 10996 2013-05-29 11:51:34Z msweet $".
+ * End of "$Id: rss.c 12128 2014-08-28 19:23:23Z msweet $".
*/
Summary: CUPS
Name: cups
-Version: 2.0b1
+Version: 2.0rc1
Release: 1
Epoch: 1
License: GPL
Group: System Environment/Daemons
-Source: http://www.cups.org/software/2.0b1/cups-2.0b1-source.tar.bz2
+Source: http://www.cups.org/software/2.0rc1/cups-2.0rc1-source.tar.bz2
Url: http://www.cups.org
Packager: Anonymous <anonymous@foo.com>
Vendor: Apple Inc.
//
-// "$Id: sample.drv 11800 2014-04-08 19:53:57Z msweet $"
+// "$Id: sample.drv 12105 2014-08-20 15:27:43Z msweet $"
//
// Driver info file for CUPS-supplied PPDs.
//
*Resolution k 1 8 0 0 120x72dpi
Resolution k 1 8 0 0 240x72dpi
}
-
- // Epson Stylus Color Series
- {
- ModelName "Stylus Color Series"
- Attribute NickName "" "Epson Stylus Color Series"
- PCFileName "stcolor.ppd"
- ModelNumber $EPSON_COLOR
- ColorDevice Yes
-
- HWMargins 8.6 39.6 8.6 25.51
- *MediaSize Letter
- MediaSize Legal
- MediaSize A4
-
- Resolution - 1 0 0 0 180dpi
- *Resolution - 1 0 0 0 360dpi
- Resolution - 1 0 0 0 720dpi
-
- *ColorModel CMYK cmyk banded 1
- ColorModel Gray/Grayscale k chunky 1
- }
-
- // Epson New Stylus Color Series
- {
- ModelName "New Stylus Color Series"
- Attribute NickName "" "Epson New Stylus Color Series"
- PCFileName "stcolor2.ppd"
- ModelNumber $EPSON_ICOLOR
- ColorDevice Yes
-
- HWMargins 8.6 39.6 8.6 25.51
- *MediaSize Letter
- MediaSize Legal
- MediaSize A4
-
- Resolution - 1 0 0 0 180dpi
- *Resolution - 1 0 0 0 360dpi
- Resolution - 1 0 0 0 720dpi
-
- *ColorModel CMYK cmyk banded 1
- ColorModel Gray/Grayscale k chunky 1
- }
-
- // Epson Stylus Color Series
- {
- ModelName "Stylus Photo Series"
- Attribute NickName "" "Epson Stylus Photo Series"
- PCFileName "stphoto.ppd"
- ModelNumber $EPSON_PHOTO
- ColorDevice Yes
-
- HWMargins 8.6 39.6 8.6 25.51
- *MediaSize Letter
- MediaSize Legal
- MediaSize A4
-
- Resolution - 1 0 0 0 180dpi
- *Resolution - 1 0 0 0 360dpi
- Resolution - 1 0 0 0 720dpi
-
- *ColorModel CMYK cmykcm banded 1
- ColorModel Gray/Grayscale k chunky 1
- }
-
- // Epson New Stylus Color Series
- {
- ModelName "New Stylus Photo Series"
- Attribute NickName "" "Epson New Stylus Photo Series"
- PCFileName "stphoto2.ppd"
- ModelNumber $EPSON_IPHOTO
- ColorDevice Yes
-
- HWMargins 8.6 39.6 8.6 25.51
- *MediaSize Letter
- MediaSize Legal
- MediaSize A4
-
- Resolution - 1 0 0 0 180dpi
- *Resolution - 1 0 0 0 360dpi
- Resolution - 1 0 0 0 720dpi
-
- *ColorModel CMYK cmykcm banded 1
- ColorModel Gray/Grayscale k chunky 1
- }
}
// Generic drivers
}
//
-// End of "$Id: sample.drv 11800 2014-04-08 19:53:57Z msweet $".
+// End of "$Id: sample.drv 12105 2014-08-20 15:27:43Z msweet $".
//
#
-# "$Id: Makefile 11718 2014-03-21 18:04:48Z msweet $"
+# "$Id: Makefile 12132 2014-08-29 11:27:18Z msweet $"
#
# Scheduler Makefile for CUPS.
#
echo Creating $(REQUESTS)/tmp...
$(INSTALL_DIR) -m 1770 -g $(CUPS_GROUP) $(REQUESTS)/tmp
echo Creating $(CACHEDIR)...
- $(INSTALL_DIR) -m 775 -g $(CUPS_GROUP) $(CACHEDIR)
+ $(INSTALL_DIR) -m 770 -g $(CUPS_GROUP) $(CACHEDIR)
if test "x$(INITDIR)" != x; then \
echo Installing init scripts...; \
$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/init.d; \
#
-# End of "$Id: Makefile 11718 2014-03-21 18:04:48Z msweet $".
+# End of "$Id: Makefile 12132 2014-08-29 11:27:18Z msweet $".
#
/*
- * "$Id: auth.c 11776 2014-03-28 19:16:05Z msweet $"
+ * "$Id: auth.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Authorization routines for the CUPS scheduler.
*
* Copy the final sum to the result string and return...
*/
- memcpy(result, salt, salt_end - salt);
+ memcpy(result, salt, (size_t)(salt_end - salt));
ptr = result + (salt_end - salt);
*ptr++ = '$';
for (i = 0; i < 5; i ++, ptr += 4)
{
- n = (((digest[i] << 8) | digest[i + 6]) << 8);
+ n = ((((unsigned)digest[i] << 8) | (unsigned)digest[i + 6]) << 8);
if (i < 4)
- n |= digest[i + 12];
+ n |= (unsigned)digest[i + 12];
else
- n |= digest[5];
+ n |= (unsigned)digest[5];
to64(ptr, n, 4);
}
- to64(ptr, digest[11], 2);
+ to64(ptr, (unsigned)digest[11], 2);
ptr += 2;
*ptr = '\0';
/*
- * End of "$Id: auth.c 11776 2014-03-28 19:16:05Z msweet $".
+ * End of "$Id: auth.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: client.c 12056 2014-07-22 14:02:56Z msweet $"
+ * "$Id: client.c 12124 2014-08-28 15:37:22Z msweet $"
*
* Client routines for the CUPS scheduler.
*
return;
}
#else
- if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED, CUPSD_AUTH_NONE))
+ if (!cupsdSendError(con, HTTP_STATUS_NOT_IMPLEMENTED, CUPSD_AUTH_NONE))
{
cupsdCloseClient(con);
return;
return;
}
#else
- if (!cupsdSendError(con, HTTP_NOT_IMPLEMENTED, CUPSD_AUTH_NONE))
+ if (!cupsdSendError(con, HTTP_STATUS_NOT_IMPLEMENTED, CUPSD_AUTH_NONE))
{
cupsdCloseClient(con);
return;
con->request->request.op.version[1],
ippOpString(con->request->request.op.operation_id),
con->request->request.op.request_id);
- con->bytes += ippLength(con->request);
+ con->bytes += (off_t)ippLength(con->request);
}
}
char *ptr; /* Pointer info filename */
size_t plen; /* Remaining length after pointer */
char language[7]; /* Language subdirectory, if any */
+ int perm_check = 1; /* Do permissions check? */
/*
language[0] = '\0';
if (!strncmp(con->uri, "/ppd/", 5) && !strchr(con->uri + 5, '/'))
+ {
snprintf(filename, len, "%s%s", ServerRoot, con->uri);
+
+ perm_check = 0;
+ }
else if (!strncmp(con->uri, "/icons/", 7) && !strchr(con->uri + 7, '/'))
{
snprintf(filename, len, "%s/%s", CacheDir, con->uri + 7);
if (access(filename, F_OK) < 0)
snprintf(filename, len, "%s/images/generic.png", DocumentRoot);
+
+ perm_check = 0;
}
else if (!strncmp(con->uri, "/rss/", 5) && !strchr(con->uri + 5, '/'))
snprintf(filename, len, "%s/rss/%s", CacheDir, con->uri + 5);
- else if (!strncmp(con->uri, "/admin/conf/", 12))
- snprintf(filename, len, "%s%s", ServerRoot, con->uri + 11);
+ else if (!strcmp(con->uri, "/admin/conf/cupsd.conf"))
+ {
+ strlcpy(filename, ConfigurationFile, len);
+
+ perm_check = 0;
+ }
else if (!strncmp(con->uri, "/admin/log/", 11))
{
if (!strncmp(con->uri + 11, "access_log", 10) && AccessLog[0] == '/')
strlcpy(filename, PageLog, len);
else
return (NULL);
+
+ perm_check = 0;
}
else if (con->language)
{
* not allow access...
*/
- if (!status && !(filestats->st_mode & S_IROTH))
+ if (!status && perm_check && !(filestats->st_mode & S_IROTH))
{
cupsdLogClient(con, CUPSD_LOG_INFO, "Files/directories such as \"%s\" must be world-readable.", filename);
return (NULL);
* not allow access...
*/
- if (!status && !(filestats->st_mode & S_IROTH))
+ if (!status && perm_check && !(filestats->st_mode & S_IROTH))
{
cupsdLogClient(con, CUPSD_LOG_INFO, "Files/directories such as \"%s\" must be world-readable.", filename);
return (NULL);
/*
- * End of "$Id: client.c 12056 2014-07-22 14:02:56Z msweet $".
+ * End of "$Id: client.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: conf.c 11931 2014-06-16 16:10:58Z msweet $"
+ * "$Id: conf.c 12132 2014-08-29 11:27:18Z msweet $"
*
* Configuration routines for the CUPS scheduler.
*
if ((cupsdCheckPermissions(RequestRoot, NULL, 0710, RunUser,
Group, 1, 1) < 0 ||
- cupsdCheckPermissions(CacheDir, NULL, 0775, RunUser,
+ cupsdCheckPermissions(CacheDir, NULL, 0770, RunUser,
Group, 1, 1) < 0 ||
cupsdCheckPermissions(temp, NULL, 0775, RunUser,
Group, 1, 1) < 0 ||
/*
- * End of "$Id: conf.c 11931 2014-06-16 16:10:58Z msweet $".
+ * End of "$Id: conf.c 12132 2014-08-29 11:27:18Z msweet $".
*/
/*
- * "$Id: cups-driverd.cxx 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: cups-driverd.cxx 12124 2014-08-28 15:37:22Z msweet $"
*
* PPD/driver support for CUPS.
*
if (device_id_re &&
!regexec(device_id_re, ppd->record.device_id,
- (int)(sizeof(re_matches) / sizeof(re_matches[0])),
+ (size_t)(sizeof(re_matches) / sizeof(re_matches[0])),
re_matches, 0))
{
/*
if (make_and_model_re &&
!regexec(make_and_model_re, ppd->record.make_and_model,
- (int)(sizeof(re_matches) / sizeof(re_matches[0])),
+ (size_t)(sizeof(re_matches) / sizeof(re_matches[0])),
re_matches, 0))
{
// See how much of the make-and-model string we matched...
/*
- * End of "$Id: cups-driverd.cxx 11558 2014-02-06 18:33:34Z msweet $".
+ * End of "$Id: cups-driverd.cxx 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: ipp.c 12067 2014-07-31 00:02:30Z msweet $"
+ * "$Id: ipp.c 12124 2014-08-28 15:37:22Z msweet $"
*
* IPP routines for the CUPS scheduler.
*
cupsdLogMessage(CUPSD_LOG_DEBUG,
"Copied PPD file successfully");
- chmod(dstfile, 0644);
}
}
* Open the destination file for a copy...
*/
- if ((dst = cupsFileOpen(to, "wb")) == NULL)
+ if ((dst = cupsdCreateConfFile(to, ConfigFilePerm)) == NULL)
{
cupsFreeOptions(num_defaults, defaults);
cupsFileClose(src);
unlink(tempfile);
- return (cupsFileClose(dst));
+ return (cupsdCloseCreatedConfFile(dst, to));
}
ipp_attribute_t *uri) /* I - Printer URI */
{
http_status_t status; /* Policy status */
- ipp_attribute_t *attr, /* Current attribute */
- *auth_info; /* auth-info attribute */
+ ipp_attribute_t *attr; /* Current attribute */
+#ifdef HAVE_SSL
+ ipp_attribute_t *auth_info; /* auth-info attribute */
+#endif /* HAVE_SSL */
ipp_attribute_t *format, /* Document-format attribute */
*name; /* Job-name attribute */
cups_ptype_t dtype; /* Destination type (printer/class) */
* Check policy...
*/
+#ifdef HAVE_SSL
auth_info = ippFindAttribute(con->request, "auth-info", IPP_TAG_TEXT);
+#endif /* HAVE_SSL */
if ((status = cupsdCheckPolicy(printer->op_policy_ptr, con, NULL)) != HTTP_OK)
{
/*
- * End of "$Id: ipp.c 12067 2014-07-31 00:02:30Z msweet $".
+ * End of "$Id: ipp.c 12124 2014-08-28 15:37:22Z msweet $".
*/
/*
- * "$Id: job.c 12067 2014-07-31 00:02:30Z msweet $"
+ * "$Id: job.c 12140 2014-08-30 01:51:22Z msweet $"
*
* Job management routines for the CUPS scheduler.
*
curtime = time(NULL);
- cupsdLogMessage(CUPSD_LOG_DEBUG2,
- "cupsdCheckJobs: %d active jobs, sleeping=%d, reload=%d, "
- "curtime=%ld", cupsArrayCount(ActiveJobs), Sleeping,
- NeedReload, (long)curtime);
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdCheckJobs: %d active jobs, sleeping=%d, ac-power=%d, reload=%d, curtime=%ld", cupsArrayCount(ActiveJobs), Sleeping, ACPower, NeedReload, (long)curtime);
for (job = (cupsd_job_t *)cupsArrayFirst(ActiveJobs);
job;
*/
if (job->state_value == IPP_JOB_PENDING && !NeedReload &&
- !Sleeping && !DoingShutdown && !job->printer)
+ (!Sleeping || ACPower) && !DoingShutdown && !job->printer)
{
printer = cupsdFindDest(job->dest);
pclass = NULL;
/*
- * End of "$Id: job.c 12067 2014-07-31 00:02:30Z msweet $".
+ * End of "$Id: job.c 12140 2014-08-30 01:51:22Z msweet $".
*/
/*
- * "$Id: listen.c 11717 2014-03-21 16:42:53Z msweet $"
+ * "$Id: listen.c 12080 2014-08-04 13:23:50Z msweet $"
*
* Server listening routines for the CUPS scheduler.
*
lis;
lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
{
-#ifdef HAVE_SYSTEMD
+#if defined(HAVE_LAUNCHD) || defined(HAVE_SYSTEMD)
if (lis->fd != -1 && !lis->on_demand)
httpAddrClose(&(lis->address), lis->fd);
-#elif defined(HAVE_LAUNCHD)
- if (lis->fd != -1)
- {
- if (lis->on_demand)
- httpAddrClose(NULL, lis->fd);
- else
- httpAddrClose(&(lis->address), lis->fd);
- }
-
#else
if (lis->fd != -1)
httpAddrClose(&(lis->address), lis->fd);
-#endif /* HAVE_SYSTEMD */
+#endif /* HAVE_LAUNCHD || HAVE_SYSTEMD */
lis->fd = -1;
}
/*
- * End of "$Id: listen.c 11717 2014-03-21 16:42:53Z msweet $".
+ * End of "$Id: listen.c 12080 2014-08-04 13:23:50Z msweet $".
*/
/*
- * "$Id: main.c 11722 2014-03-21 18:28:30Z msweet $"
+ * "$Id: main.c 12140 2014-08-30 01:51:22Z msweet $"
*
* Main loop for the CUPS scheduler.
*
int run_as_child = 0;
/* Needed for background fork/exec */
#ifdef __APPLE__
- int use_sysman = !getuid();
- /* Use system management functions? */
+ int use_sysman = 1; /* Use system management functions? */
#else
time_t netif_time = 0; /* Time since last network update */
#endif /* __APPLE__ */
if (getuid() != geteuid())
{
- fputs("cupsd: Cannot run as a setuid program\n", stderr);
+ fputs("cupsd: Cannot run as a setuid program.\n", stderr);
return (1);
}
#endif /* HAVE_GETEUID */
break;
}
-#if defined(HAVE_LAUNCHD) || defined(HAVE_SYSTEMD)
- if (OnDemand)
- {
- /*
- * If we were started by launchd or systemd, get the listen socket file
- * descriptors...
- */
-
- service_checkin();
- service_checkout();
- }
-#endif /* HAVE_LAUNCHD || HAVE_SYSTEMD */
-
/*
* Startup the server...
*/
# endif /* HAVE_SSL */
}
+ free(ld_sockets);
+
# elif defined(HAVE_LAUNCHD)
size_t i, /* Looping var */
count; /* Number of listeners */
/*
- * End of "$Id: main.c 11722 2014-03-21 18:28:30Z msweet $".
+ * End of "$Id: main.c 12140 2014-08-30 01:51:22Z msweet $".
*/
/*
- * "$Id: process.c 12034 2014-07-16 19:37:34Z msweet $"
+ * "$Id: process.c 12102 2014-08-20 15:19:09Z msweet $"
*
* Process management routines for the CUPS scheduler.
*
" #\"^/private/var/mysql$\""
" #\"^/private/var/run$\""
" #\"^/private/var/spool$\""
+ " #\"^/private/var/tmp$\""
+ " #\"^/private/var/tmp/\""
" #\"^/usr/bin$\"" /* /usr/bin */
" #\"^/usr/bin/\"" /* /usr/bin/... */
" #\"^/usr/libexec/cups$\"" /* /usr/libexec/cups */
" #\"^/usr/libexec/fax/\"" /* /usr/libexec/fax/... */
" #\"^/usr/sbin$\"" /* /usr/sbin */
" #\"^/usr/sbin/\"" /* /usr/sbin/... */
- " #\"^/Library/Application Support$\""
- " #\"^/Library/Application Support/\""
- " #\"^/Library/Caches$\""
- " #\"^/Library/ColorSync$\""
- " #\"^/Library/ColorSync/Profiles$\""
- " #\"^/Library/ColorSync/Profiles/\""
- " #\"^/Library/Fonts$\""
- " #\"^/Library/Fonts/\""
- " #\"^/Library/Frameworks$\""
- " #\"^/Library/Frameworks/\""
- " #\"^/Library/Keychains$\""
- " #\"^/Library/Keychains/\""
- " #\"^/Library/Logs$\""
- " #\"^/Library/Printers$\""
- " #\"^/Library/Printers/\""
- " #\"^/Library/Security$\""
- " #\"^/Library/Security/\""
- " #\"^/Library/WebServer$\""
- " #\"^/System/Library/ColorSync$\""
- " #\"^/System/Library/ColorSync/Profiles$\""
- " #\"^/System/Library/ColorSync/Profiles/\""
+ " #\"^/Library$\"" /* /Library */
+ " #\"^/Library/\"" /* /Library/... */
+ " #\"^/System$\"" /* /System */
+ " #\"^/System/\"" /* /System/... */
" #\"^%s/Library$\"" /* RequestRoot/Library */
" #\"^%s/Library/\"" /* RequestRoot/Library/... */
" #\"^%s$\"" /* ServerBin */
" #\"^%s/\"" /* CUPS_TESTROOT/... */
"))\n",
testroot);
+ cupsFilePrintf(fp, "(allow sysctl*)\n");
}
if (job_id)
{
cupsFilePuts(fp, "(allow distributed-notification-post)\n");
/* Allow outbound networking to local services */
cupsFilePuts(fp, "(allow network-outbound"
- "\n (regex #\"^/private/var/run/\" #\"^/private/tmp/\")");
+ "\n (regex #\"^/private/var/run/\" #\"^/private/tmp/\" #\"^/private/var/tmp/\")");
for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners);
lis;
lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
/*
- * End of "$Id: process.c 12034 2014-07-16 19:37:34Z msweet $".
+ * End of "$Id: process.c 12102 2014-08-20 15:19:09Z msweet $".
*/
/*
- * "$Id: sysman.c 11406 2013-11-07 12:47:57Z msweet $"
+ * "$Id: sysman.c 12140 2014-08-30 01:51:22Z msweet $"
*
* System management functions for the CUPS scheduler.
*
- * Copyright 2007-2013 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
* Copyright 2006 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
*/
#include "cupsd.h"
-#ifdef HAVE_VPROC_TRANSACTION_BEGIN
-# include <vproc.h>
-#endif /* HAVE_VPROC_TRANSACTION_BEGIN */
#ifdef __APPLE__
+# include <vproc.h>
# include <IOKit/pwr_mgt/IOPMLib.h>
#endif /* __APPLE__ */
/*
* The system management functions cover disk and power management which
- * are primarily used on portable computers.
+ * are primarily used for portable computers.
*
* Disk management involves delaying the write of certain configuration
* and state files to minimize the number of times the disk has to spin
- * up.
+ * up or flash to be written to.
*
* Power management support is currently only implemented on OS X, but
* essentially we use four functions to let the OS know when it is OK to
* put the system to sleep, typically when we are not in the middle of
- * printing a job.
- *
- * Once put to sleep, we invalidate all remote printers since it is common
- * to wake up in a new location/on a new wireless network.
+ * printing a job. And on OS X we can also "sleep print" - basically the
+ * system only wakes up long enough to service network requests and process
+ * print jobs.
*/
+
/*
* 'cupsdCleanDirty()' - Write dirty config and state files.
*/
"Active clients and printing jobs",
"Active clients, printing jobs, and dirty files"
};
-#ifdef HAVE_VPROC_TRANSACTION_BEGIN
+#ifdef __APPLE__
static vproc_transaction_t vtran = 0; /* Current busy transaction */
-#endif /* HAVE_VPROC_TRANSACTION_BEGIN */
+ static IOPMAssertionID keep_awake = 0;/* Keep the system awake while printing */
+#endif /* __APPLE__ */
/*
{
busy = newbusy;
-#ifdef HAVE_VPROC_TRANSACTION_BEGIN
+#ifdef __APPLE__
if (busy && !vtran)
vtran = vproc_transaction_begin(NULL);
else if (!busy && vtran)
vproc_transaction_end(NULL, vtran);
vtran = 0;
}
-#endif /* HAVE_VPROC_TRANSACTION_BEGIN */
+#endif /* __APPLE__ */
+ }
+
+#ifdef __APPLE__
+ if (cupsArrayCount(PrintingJobs) > 0 && !keep_awake)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Asserting NetworkClientActive.");
+
+ IOPMAssertionCreateWithName(kIOPMAssertNetworkClientActive,
+ kIOPMAssertionLevelOn,
+ CFSTR("org.cups.cupsd"), &keep_awake);
}
+ else if (cupsArrayCount(PrintingJobs) == 0 && keep_awake)
+ {
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "Releasing power assertion.");
+ IOPMAssertionRelease(keep_awake);
+ keep_awake = 0;
+ }
+#endif /* __APPLE__ */
}
* Include MacOS-specific headers...
*/
+# include <notify.h>
# include <IOKit/IOKitLib.h>
# include <IOKit/IOMessage.h>
+# include <IOKit/ps/IOPowerSources.h>
# include <IOKit/pwr_mgt/IOPMLib.h>
# include <SystemConfiguration/SystemConfiguration.h>
# include <pthread.h>
/* Netowrk interface key */
static cupsd_sysevent_t LastSysEvent; /* Last system event (for delayed sleep) */
static int NameChanged = 0;/* Did we get a 'name changed' event during sleep? */
+static int PSToken = 0; /* Power source notifications */
/*
int flags; /* fcntl flags on pipe */
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSystemMonitor()");
+
if (cupsdOpenPipe(SysEventPipes))
{
cupsdLogMessage(CUPSD_LOG_ERROR, "System event monitor pipe() failed - %s!",
pthread_mutex_init(&SysEventThreadMutex, NULL);
pthread_cond_init(&SysEventThreadCond, NULL);
pthread_create(&SysEventThread, NULL, (void *(*)())sysEventThreadEntry, NULL);
+
+ /*
+ * Monitor for power source changes via dispatch queue...
+ */
+
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStartSystemMonitor: IOPSGetTimeRemainingEstimate=%f", IOPSGetTimeRemainingEstimate());
+ ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited;
+ notify_register_dispatch(kIOPSNotifyPowerSource, &PSToken, dispatch_get_main_queue(), ^(int t) { ACPower = IOPSGetTimeRemainingEstimate() == kIOPSTimeRemainingUnlimited; });
}
CFRunLoopRef rl; /* The event handler runloop */
+ cupsdLogMessage(CUPSD_LOG_DEBUG2, "cupsdStopSystemMonitor()");
+
if (SysEventThread)
{
/*
cupsdRemoveSelect(SysEventPipes[0]);
cupsdClosePipe(SysEventPipes);
}
+
+ if (PSToken != 0)
+ {
+ notify_cancel(PSToken);
+ PSToken = 0;
+ }
}
/*
- * End of "$Id: sysman.c 11406 2013-11-07 12:47:57Z msweet $".
+ * End of "$Id: sysman.c 12140 2014-08-30 01:51:22Z msweet $".
*/
/*
- * "$Id: sysman.h 10996 2013-05-29 11:51:34Z msweet $"
+ * "$Id: sysman.h 12140 2014-08-30 01:51:22Z msweet $"
*
- * System management definitions for the CUPS scheduler.
+ * System management definitions for the CUPS scheduler.
*
- * Copyright 2007-2011 by Apple Inc.
- * Copyright 2006 by Easy Software Products.
+ * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2006 by Easy Software Products.
*
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file. If this file is
- * file is missing or damaged, see the license at "http://www.cups.org/".
+ * These coded instructions, statements, and computer programs are the
+ * property of Apple Inc. and are protected by Federal copyright
+ * law. Distribution and use rights are outlined in the file "LICENSE.txt"
+ * which should have been included with this file. If this file is
+ * file is missing or damaged, see the license at "http://www.cups.org/".
*/
/*
/* How often do we write dirty files? */
VAR time_t DirtyCleanTime VALUE(0);
/* When to clean dirty files next */
-VAR int Sleeping VALUE(0);
+VAR int ACPower VALUE(-1),
+ /* Is the system on AC power? */
+ Sleeping VALUE(0);
/* Non-zero if machine is entering or *
* in a sleep state... */
VAR time_t SleepJobs VALUE(0);
/*
- * End of "$Id: sysman.h 10996 2013-05-29 11:51:34Z msweet $".
+ * End of "$Id: sysman.h 12140 2014-08-30 01:51:22Z msweet $".
*/
/*
- * "$Id: lpstat.c 12066 2014-07-30 18:30:44Z msweet $"
+ * "$Id: lpstat.c 12124 2014-08-28 15:37:22Z msweet $"
*
* "lpstat" command for CUPS.
*
*reasons; /* Job state reasons attribute */
const char *dest, /* Pointer into job-printer-uri */
*username, /* Pointer to job-originating-user-name */
- *title, /* Pointer to job-name */
*message, /* Pointer to job-printer-state-message */
*time_at; /* time-at-xxx attribute name to use */
int rank, /* Rank in queue */
username = NULL;
dest = NULL;
jobtime = 0;
- title = "no title";
message = NULL;
reasons = NULL;
else if (!strcmp(attr->name, "job-originating-user-name") &&
attr->value_tag == IPP_TAG_NAME)
username = attr->values[0].string.text;
- else if (!strcmp(attr->name, "job-name") &&
- attr->value_tag == IPP_TAG_NAME)
- title = attr->values[0].string.text;
else if (!strcmp(attr->name, "job-state-reasons") &&
attr->value_tag == IPP_TAG_KEYWORD)
reasons = attr;
/*
- * End of "$Id: lpstat.c 12066 2014-07-30 18:30:44Z msweet $".
+ * End of "$Id: lpstat.c 12124 2014-08-28 15:37:22Z msweet $".
*/
<H2 CLASS="title">Change Settings</H2>
-<P><IMG SRC="/images/wait.gif" WIDTH="16" HEIGHT="16" ALIGN="ABSMIDDLE"
+<P><IMG SRC="data:image/gif;base64,R0lGODlhEAAQAIQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaP///////////////////////////////////////////////////////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQABQD/ACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAEFAB8ALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQBBQAfACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQBBQAfACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkEAQUAHwAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkEAQUAHwAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkEAQUAHwAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAEFAB8ALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkEAQUAHwAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAEFAB8ALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQBBQAfACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQBBQAfACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOw==" WIDTH="16" HEIGHT="16" ALIGN="ABSMIDDLE"
ALT="Busy Indicator"> Please stand by while the server restarts...</P>
../cups/ppd-private.h ../cups/ppd.h ../cups/thread-private.h
ippserver.o: ippserver.c ../cups/cups.h ../cups/file.h \
../cups/versioning.h ../cups/ipp.h ../cups/http.h ../cups/array.h \
- ../cups/language.h ../cups/pwg.h ../config.h ../cups/string-private.h \
- ../cups/thread-private.h
+ ../cups/language.h ../cups/pwg.h ../config.h ../cups/thread-private.h
ipptool.o: ipptool.c ../cups/cups-private.h ../cups/string-private.h \
../config.h ../cups/debug-private.h ../cups/versioning.h \
../cups/array-private.h ../cups/array.h ../cups/ipp-private.h \
#
-# "$Id: get-completed-jobs.test 11398 2013-11-06 20:11:11Z msweet $"
+# "$Id: get-completed-jobs.test 12088 2014-08-07 01:09:21Z msweet $"
#
# Get list of completed jobs.
#
-# Copyright 2007-2012 by Apple Inc.
+# Copyright 2007-2014 by Apple Inc.
# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
# These coded instructions, statements, and computer programs are the
ATTR uri printer-uri $uri
ATTR keyword which-jobs completed
ATTR keyword requested-attributes
- job-id,job-state,job-state-reasons,job-name,job-originating-user-name,job-media-sheets-completed
+ job-id,job-uri,job-state,job-state-reasons,job-name,job-originating-user-name,job-media-sheets-completed
# What statuses are OK?
STATUS successful-ok
#
-# End of "$Id: get-completed-jobs.test 11398 2013-11-06 20:11:11Z msweet $".
+# End of "$Id: get-completed-jobs.test 12088 2014-08-07 01:09:21Z msweet $".
#
#
-# "$Id: get-jobs.test 11398 2013-11-06 20:11:11Z msweet $"
+# "$Id: get-jobs.test 12088 2014-08-07 01:09:21Z msweet $"
#
# Get list of not-completed jobs.
#
-# Copyright 2007-2012 by Apple Inc.
+# Copyright 2007-2014 by Apple Inc.
# Copyright 2001-2006 by Easy Software Products. All rights reserved.
#
# These coded instructions, statements, and computer programs are the
ATTR language attributes-natural-language en
ATTR uri printer-uri $uri
ATTR keyword requested-attributes
- job-id,job-state,job-state-reasons,job-name,job-originating-user-name,job-media-sheets,job-media-sheets-completed,job-impressions,job-impressions-completed
+ job-id,job-uri,job-state,job-state-reasons,job-name,job-originating-user-name,job-media-sheets,job-media-sheets-completed,job-impressions,job-impressions-completed
# What statuses are OK?
STATUS successful-ok
#
-# End of "$Id: get-jobs.test 11398 2013-11-06 20:11:11Z msweet $".
+# End of "$Id: get-jobs.test 12088 2014-08-07 01:09:21Z msweet $".
#
--- /dev/null
+# Make the printer beep
+{
+ # The name of the test...
+ NAME "Identify Printer with Sound"
+
+ # The operation to use
+ OPERATION Identify-Printer
+
+ # Attributes, starting in the operation group...
+ GROUP operation-attributes-tag
+ ATTR charset attributes-charset utf-8
+ ATTR language attributes-natural-language en
+ ATTR uri printer-uri $uri
+ ATTR name requesting-user-name $user
+ ATTR keyword identify-actions sound
+
+ # What statuses are OK?
+ STATUS successful-ok
+ STATUS successful-ok-ignored-or-substituted-attributes
+}
/*
- * "$Id: ippfind.c 11594 2014-02-14 20:09:01Z msweet $"
+ * "$Id: ippfind.c 12139 2014-08-29 17:50:38Z msweet $"
*
* Utility to find IPP printers via Bonjour/DNS-SD and optionally run
* commands such as IPP and Bonjour conformance tests. This tool is
{
int i, /* Looping var */
have_output = 0,/* Have output expression */
- status = IPPFIND_EXIT_TRUE;
+ status = IPPFIND_EXIT_FALSE;
/* Exit status */
const char *opt, /* Option character */
*search; /* Current browse/resolve string */
* Parse command-line...
*/
+ if (getenv("IPPFIND_DEBUG"))
+ for (i = 1; i < argc; i ++)
+ fprintf(stderr, "argv[%d]=\"%s\"\n", i, argv[i]);
+
for (i = 1; i < argc; i ++)
{
if (argv[i][0] == '-')
NULL)) == NULL)
return (IPPFIND_EXIT_MEMORY);
}
- else if (!strncmp(argv[i], "--txt-", 5))
+ else if (!strncmp(argv[i], "--txt-", 6))
{
- const char *key = argv[i] + 5;/* TXT key */
+ const char *key = argv[i] + 6;/* TXT key */
i ++;
if (i >= argc)
service->ref = NULL;
}
- if (!eval_expr(service, expressions))
- status = IPPFIND_EXIT_FALSE;
+ if (eval_expr(service, expressions))
+ status = IPPFIND_EXIT_TRUE;
service->is_processed = 1;
}
result = !regexec(&(expression->re), val, 0, NULL, 0);
else
result = 0;
+
+ if (getenv("IPPFIND_DEBUG"))
+ printf("TXT_REGEX of \"%s\": %d\n", val, result);
break;
case IPPFIND_OP_URI_REGEX :
result = !regexec(&(expression->re), service->uri, 0, NULL, 0);
strlcpy(tptr, scheme + 22, sizeof(temp) - (size_t)(tptr - temp));
else if (!strncmp(keyword, "txt_", 4))
{
- if ((ptr = (char *)cupsGetOption(keyword + 4, service->num_txt,
- service->txt)) != NULL)
- strlcpy(tptr, strdup(ptr), sizeof(temp) - (size_t)(tptr - temp));
+ const char *txt = cupsGetOption(keyword + 4, service->num_txt, service->txt);
+ if (txt)
+ strlcpy(tptr, txt, sizeof(temp) - (size_t)(tptr - temp));
else
*tptr = '\0';
}
}
#ifdef WIN32
+ if (getenv("IPPFIND_DEBUG"))
+ {
+ printf("\nProgram:\n %s\n", args[0]);
+ puts("\nArguments:");
+ for (i = 0; i < num_args; i ++)
+ printf(" %s\n", myargv[i]);
+ puts("\nEnvironment:");
+ for (i = 0; i < myenvc; i ++)
+ printf(" %s\n", myenvp[i]);
+ }
+
status = _spawnvpe(_P_WAIT, args[0], myargv, myenvp);
#else
* Return whether the program succeeded or crashed...
*/
+ if (getenv("IPPFIND_DEBUG"))
+ {
+#ifdef WIN32
+ printf("Exit Status: %d\n", status);
+#else
+ if (WIFEXITED(status))
+ printf("Exit Status: %d\n", WEXITSTATUS(status));
+ else
+ printf("Terminating Signal: %d\n", WTERMSIG(status));
+#endif /* WIN32 */
+ }
+
return (status == 0);
}
/*
- * End of "$Id: ippfind.c 11594 2014-02-14 20:09:01Z msweet $".
+ * End of "$Id: ippfind.c 12139 2014-08-29 17:50:38Z msweet $".
*/
/*
- * "$Id: ippserver.c 11986 2014-07-02 15:52:01Z msweet $"
+ * "$Id: ippserver.c 12136 2014-08-29 15:19:40Z msweet $"
*
- * Sample IPP/2.0 server for CUPS.
+ * Sample IPP Everywhere server for CUPS.
*
* Copyright 2010-2014 by Apple Inc.
*
* Include necessary headers...
*/
-#include <cups/cups.h> /* Public API */
#include <config.h> /* CUPS configuration header */
-#include <cups/string-private.h> /* For string functions */
+#include <cups/cups.h> /* Public API */
+#include <cups/string-private.h> /* CUPS string functions */
#include <cups/thread-private.h> /* For multithreading functions */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <sys/stat.h>
+
+#ifdef WIN32
+# include <fcntl.h>
+# include <io.h>
+# include <process.h>
+# define WEXITSTATUS(s) (s)
+# include <winsock2.h>
+typedef ULONG nfds_t;
+# define poll WSAPoll
+#else
+extern char **environ;
-#include <sys/wait.h>
+# include <sys/fcntl.h>
+# include <sys/wait.h>
+# include <poll.h>
+#endif /* WIN32 */
#ifdef HAVE_DNSSD
# include <dns_sd.h>
#endif /* HAVE_DNSSD */
-#include <limits.h>
-#include <sys/stat.h>
-#include <sys/fcntl.h>
-#include <poll.h>
#ifdef HAVE_SYS_MOUNT_H
# include <sys/mount.h>
#endif /* HAVE_SYS_MOUNT_H */
* Constants...
*/
-enum _ipp_preasons_e /* printer-state-reasons bit values */
+enum _ipp_preason_e /* printer-state-reasons bit values */
{
- _IPP_PSTATE_NONE = 0x0000, /* none */
- _IPP_PSTATE_OTHER = 0x0001, /* other */
- _IPP_PSTATE_COVER_OPEN = 0x0002, /* cover-open */
- _IPP_PSTATE_INPUT_TRAY_MISSING = 0x0004,
+ _IPP_PREASON_NONE = 0x0000, /* none */
+ _IPP_PREASON_OTHER = 0x0001, /* other */
+ _IPP_PREASON_COVER_OPEN = 0x0002, /* cover-open */
+ _IPP_PREASON_INPUT_TRAY_MISSING = 0x0004,
/* input-tray-missing */
- _IPP_PSTATE_MARKER_SUPPLY_EMPTY = 0x0008,
+ _IPP_PREASON_MARKER_SUPPLY_EMPTY = 0x0008,
/* marker-supply-empty */
- _IPP_PSTATE_MARKER_SUPPLY_LOW = 0x0010,
- /* marker-suply-low */
- _IPP_PSTATE_MARKER_WASTE_ALMOST_FULL = 0x0020,
+ _IPP_PREASON_MARKER_SUPPLY_LOW = 0x0010,
+ /* marker-supply-low */
+ _IPP_PREASON_MARKER_WASTE_ALMOST_FULL = 0x0020,
/* marker-waste-almost-full */
- _IPP_PSTATE_MARKER_WASTE_FULL = 0x0040,
+ _IPP_PREASON_MARKER_WASTE_FULL = 0x0040,
/* marker-waste-full */
- _IPP_PSTATE_MEDIA_EMPTY = 0x0080, /* media-empty */
- _IPP_PSTATE_MEDIA_JAM = 0x0100, /* media-jam */
- _IPP_PSTATE_MEDIA_LOW = 0x0200, /* media-low */
- _IPP_PSTATE_MEDIA_NEEDED = 0x0400, /* media-needed */
- _IPP_PSTATE_MOVING_TO_PAUSED = 0x0800,
+ _IPP_PREASON_MEDIA_EMPTY = 0x0080, /* media-empty */
+ _IPP_PREASON_MEDIA_JAM = 0x0100, /* media-jam */
+ _IPP_PREASON_MEDIA_LOW = 0x0200, /* media-low */
+ _IPP_PREASON_MEDIA_NEEDED = 0x0400, /* media-needed */
+ _IPP_PREASON_MOVING_TO_PAUSED = 0x0800,
/* moving-to-paused */
- _IPP_PSTATE_PAUSED = 0x1000, /* paused */
- _IPP_PSTATE_SPOOL_AREA_FULL = 0x2000,/* spool-area-full */
- _IPP_PSTATE_TONER_EMPTY = 0x4000, /* toner-empty */
- _IPP_PSTATE_TONER_LOW = 0x8000 /* toner-low */
+ _IPP_PREASON_PAUSED = 0x1000, /* paused */
+ _IPP_PREASON_SPOOL_AREA_FULL = 0x2000,/* spool-area-full */
+ _IPP_PREASON_TONER_EMPTY = 0x4000, /* toner-empty */
+ _IPP_PREASON_TONER_LOW = 0x8000 /* toner-low */
};
-typedef unsigned int _ipp_preasons_t; /* Bitfield for printer-state-reasons */
+typedef unsigned int _ipp_preason_t; /* Bitfield for printer-state-reasons */
typedef enum _ipp_media_class_e
{
_IPP_ENV_ONLY /* Envelope-only size */
} _ipp_media_class_t;
+typedef enum _ipp_media_size_e
+{
+ _IPP_MEDIA_SIZE_NONE = -1,
+ _IPP_MEDIA_SIZE_A4,
+ _IPP_MEDIA_SIZE_A5,
+ _IPP_MEDIA_SIZE_A6,
+ _IPP_MEDIA_SIZE_DL,
+ _IPP_MEDIA_SIZE_LEGAL,
+ _IPP_MEDIA_SIZE_LETTER,
+ _IPP_MEDIA_SIZE_COM10,
+ _IPP_MEDIA_SIZE_3x5,
+ _IPP_MEDIA_SIZE_L,
+ _IPP_MEDIA_SIZE_4x6,
+ _IPP_MEDIA_SIZE_5x7
+} _ipp_media_size_t;
static const char * const media_supported[] =
{ /* media-supported values */
"iso_a4_210x297mm", /* A4 */
{ 10160, 15240, _IPP_PHOTO_ONLY }, /* 4x6 */
{ 12700, 17780, _IPP_PHOTO_ONLY } /* 5x7 aka 2L */
};
+
+typedef enum _ipp_media_source_e
+{
+ _IPP_MEDIA_SOURCE_NONE = -1,
+ _IPP_MEDIA_SOURCE_AUTO,
+ _IPP_MEDIA_SOURCE_MAIN,
+ _IPP_MEDIA_SOURCE_MANUAL,
+ _IPP_MEDIA_SOURCE_ENVELOPE,
+ _IPP_MEDIA_SOURCE_PHOTO
+} _ipp_media_source_t;
+static const char * const media_source_supported[] =
+ /* media-source-supported values */
+{
+ "auto",
+ "main",
+ "manual",
+ "envelope",
+ "photo"
+};
+
+typedef enum _ipp_media_type_e
+{
+ _IPP_MEDIA_TYPE_NONE = -1,
+ _IPP_MEDIA_TYPE_AUTO,
+ _IPP_MEDIA_TYPE_CARDSTOCK,
+ _IPP_MEDIA_TYPE_ENVELOPE,
+ _IPP_MEDIA_TYPE_LABELS,
+ _IPP_MEDIA_TYPE_OTHER,
+ _IPP_MEDIA_TYPE_GLOSSY,
+ _IPP_MEDIA_TYPE_HIGH_GLOSS,
+ _IPP_MEDIA_TYPE_MATTE,
+ _IPP_MEDIA_TYPE_SATIN,
+ _IPP_MEDIA_TYPE_SEMI_GLOSS,
+ _IPP_MEDIA_TYPE_STATIONERY,
+ _IPP_MEDIA_TYPE_LETTERHEAD,
+ _IPP_MEDIA_TYPE_TRANSPARENCY
+} _ipp_media_type_t;
static const char * const media_type_supported[] =
/* media-type-supported values */
{
"transparency"
};
+typedef enum _ipp_supply_e
+{
+ _IPP_SUPPLY_CYAN, /* Cyan Toner */
+ _IPP_SUPPLY_MAGENTA, /* Magenta Toner */
+ _IPP_SUPPLY_YELLOW, /* Yellow Toner */
+ _IPP_SUPPLY_BLACK, /* Black Toner */
+ _IPP_SUPPLY_WASTE /* Waste Toner */
+} _ipp_supply_t;
+static const char * const printer_supplies[] =
+{ /* printer-supply-description values */
+ "Cyan Toner",
+ "Magenta Toner",
+ "Yellow Toner",
+ "Black Toner",
+ "Toner Waste"
+};
+
/*
* Structures...
*/
+typedef struct _ipp_filter_s /**** Attribute filter ****/
+{
+ cups_array_t *ra; /* Requested attributes */
+ ipp_tag_t group_tag; /* Group to copy */
+} _ipp_filter_t;
+
typedef struct _ipp_job_s _ipp_job_t;
typedef struct _ipp_printer_s /**** Printer data ****/
int port; /* Port */
size_t urilen; /* Length of printer URI */
ipp_t *attrs; /* Static attributes */
+ time_t start_time; /* Startup time */
+ time_t config_time; /* printer-config-change-time */
ipp_pstate_t state; /* printer-state value */
- _ipp_preasons_t state_reasons; /* printer-state-reasons values */
+ _ipp_preason_t state_reasons; /* printer-state-reasons values */
+ time_t state_time; /* printer-state-change-time */
cups_array_t *jobs; /* Jobs */
_ipp_job_t *active_job; /* Current active/pending job */
int next_job_id; /* Next job-id value */
_cups_rwlock_t rwlock; /* Printer lock */
+ _ipp_media_size_t main_size; /* Ready media */
+ _ipp_media_type_t main_type;
+ int main_level;
+ _ipp_media_size_t envelope_size;
+ int envelope_level;
+ _ipp_media_size_t photo_size;
+ _ipp_media_type_t photo_type;
+ int photo_level;
+ int supplies[5]; /* Supply levels (0-100) */
} _ipp_printer_t;
struct _ipp_job_s /**** Job data ****/
*username, /* job-originating-user-name */
*format; /* document-format */
ipp_jstate_t state; /* job-state value */
- time_t processing, /* time-at-processing value */
+ time_t created, /* time-at-creation value */
+ processing, /* time-at-processing value */
completed; /* time-at-completed value */
+ int impressions, /* job-impressions value */
+ impcompleted; /* job-impressions-completed value */
ipp_t *attrs; /* Static attributes */
int cancel; /* Non-zero when job canceled */
char *filename; /* Print file name */
time_t start; /* Request start time */
http_state_t operation; /* Request operation */
ipp_op_t operation_id; /* IPP operation-id */
- char uri[1024]; /* Request URI */
+ char uri[1024], /* Request URI */
+ *options; /* URI options */
http_addr_t addr; /* Client address */
char hostname[256]; /* Client hostname */
_ipp_printer_t *printer; /* Printer */
_ipp_job_t *job, cups_array_t *ra);
static _ipp_client_t *create_client(_ipp_printer_t *printer, int sock);
static _ipp_job_t *create_job(_ipp_client_t *client);
-static int create_listener(int family, int *port);
-static ipp_t *create_media_col(const char *media, const char *type,
- int width, int length, int margins);
+static int create_listener(int family, int port);
+static ipp_t *create_media_col(const char *media, const char *source, const char *type, int width, int length, int margins);
static ipp_t *create_media_size(int width, int length);
static _ipp_printer_t *create_printer(const char *servername,
const char *name, const char *location,
const char *domain,
_ipp_printer_t *printer);
#endif /* HAVE_DNSSD */
+static int filter_cb(_ipp_filter_t *filter, ipp_t *dst, ipp_attribute_t *attr);
static _ipp_job_t *find_job(_ipp_client_t *client);
static void html_escape(_ipp_client_t *client, const char *s,
size_t slen);
+static void html_footer(_ipp_client_t *client);
+static void html_header(_ipp_client_t *client, const char *title);
static void html_printf(_ipp_client_t *client, const char *format,
...) __attribute__((__format__(__printf__,
2, 3)));
static void ipp_cancel_job(_ipp_client_t *client);
+static void ipp_close_job(_ipp_client_t *client);
static void ipp_create_job(_ipp_client_t *client);
static void ipp_get_job_attributes(_ipp_client_t *client);
static void ipp_get_jobs(_ipp_client_t *client);
static void ipp_get_printer_attributes(_ipp_client_t *client);
+static void ipp_identify_printer(_ipp_client_t *client);
static void ipp_print_job(_ipp_client_t *client);
static void ipp_print_uri(_ipp_client_t *client);
static void ipp_send_document(_ipp_client_t *client);
static void ipp_send_uri(_ipp_client_t *client);
static void ipp_validate_job(_ipp_client_t *client);
+static int parse_options(_ipp_client_t *client, cups_option_t **options);
static void *process_client(_ipp_client_t *client);
static int process_http(_ipp_client_t *client);
static int process_ipp(_ipp_client_t *client);
static void *process_job(_ipp_job_t *job);
#ifdef HAVE_DNSSD
-static int register_printer(_ipp_printer_t *printer,
- const char *location, const char *make,
- const char *model, const char *formats,
- const char *adminurl, int color,
- int duplex, const char *regtype);
+static int register_printer(_ipp_printer_t *printer, const char *location, const char *make, const char *model, const char *formats, const char *adminurl, const char *uuid, int color, int duplex, const char *regtype);
#endif /* HAVE_DNSSD */
static int respond_http(_ipp_client_t *client, http_status_t code,
const char *content_coding,
static void respond_unsupported(_ipp_client_t *client,
ipp_attribute_t *attr);
static void run_printer(_ipp_printer_t *printer);
+static char *time_string(time_t tv, char *buffer, size_t bufsize);
static void usage(int status) __attribute__((noreturn));
static int valid_doc_attributes(_ipp_client_t *client);
static int valid_job_attributes(_ipp_client_t *client);
#ifdef HAVE_DNSSD
const char *subtype = "_print"; /* Bonjour service subtype */
#endif /* HAVE_DNSSD */
- int port = 8631, /* Port number (0 = auto) */
+ int port = 0, /* Port number (0 = auto) */
duplex = 0, /* Duplex mode */
ppm = 10, /* Pages per minute for mono */
ppm_color = 0, /* Pages per minute for color */
pin = 0; /* PIN printing mode? */
- char directory[1024] = ""; /* Spool directory */
+ char directory[1024] = "", /* Spool directory */
+ hostname[1024]; /* Auto-detected hostname */
_ipp_printer_t *printer; /* Printer object */
* Apply defaults as needed...
*/
+ if (!servername)
+ servername = httpGetHostname(NULL, hostname, sizeof(hostname));
+
+ if (!port)
+ {
+#ifdef WIN32
+ /*
+ * Windows is almost always used as a single user system, so use a default port
+ * number of 8631.
+ */
+
+ port = 8631;
+
+#else
+ /*
+ * Use 8000 + UID mod 1000 for the default port number...
+ */
+
+ port = 8000 + ((int)getuid() % 1000);
+#endif /* WIN32 */
+
+ fprintf(stderr, "Listening on port %d.\n", port);
+ }
+
if (!directory[0])
{
snprintf(directory, sizeof(directory), "/tmp/ippserver.%d", (int)getpid());
ipp_tag_t group_tag, /* I - Group to copy */
int quickcopy) /* I - Do a quick copy? */
{
- ipp_attribute_t *fromattr; /* Source attribute */
-
-
- if (!to || !from)
- return;
-
- for (fromattr = ippFirstAttribute(from);
- fromattr;
- fromattr = ippNextAttribute(from))
- {
- /*
- * Filter attributes as needed...
- */
+ _ipp_filter_t filter; /* Filter data */
- ipp_tag_t fromgroup = ippGetGroupTag(fromattr);
- const char *fromname = ippGetName(fromattr);
- if ((group_tag != IPP_TAG_ZERO && fromgroup != group_tag &&
- fromgroup != IPP_TAG_ZERO) || !fromname)
- continue;
+ filter.ra = ra;
+ filter.group_tag = group_tag;
- if (!ra || cupsArrayFind(ra, (void *)fromname))
- ippCopyAttribute(to, fromattr, quickcopy);
- }
+ ippCopyAttributes(to, from, quickcopy, (ipp_copycb_t)filter_cb, &filter);
}
{
copy_attributes(client->response, job->attrs, ra, IPP_TAG_JOB, 0);
+ if (!ra || cupsArrayFind(ra, "date-time-at-completed"))
+ {
+ if (job->completed)
+ ippAddDate(client->response, IPP_TAG_JOB, "date-time-at-completed", ippTimeToDate(job->completed));
+ else
+ ippAddOutOfBand(client->response, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-completed");
+ }
+
+ if (!ra || cupsArrayFind(ra, "date-time-at-processing"))
+ {
+ if (job->processing)
+ ippAddDate(client->response, IPP_TAG_JOB, "date-time-at-processing", ippTimeToDate(job->processing));
+ else
+ ippAddOutOfBand(client->response, IPP_TAG_JOB, IPP_TAG_NOVALUE, "date-time-at-processing");
+ }
+
+ if (!ra || cupsArrayFind(ra, "job-impressions"))
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions", job->impressions);
+
+ if (!ra || cupsArrayFind(ra, "job-impressions-completed"))
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-impressions-completed", job->impcompleted);
+
if (!ra || cupsArrayFind(ra, "job-printer-up-time"))
- ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER,
- "job-printer-up-time", (int)time(NULL));
+ ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-printer-up-time", (int)(time(NULL) - client->printer->start_time));
if (!ra || cupsArrayFind(ra, "job-state"))
ippAddInteger(client->response, IPP_TAG_JOB, IPP_TAG_ENUM,
"job-state", job->state);
+ if (!ra || cupsArrayFind(ra, "job-state-message"))
+ {
+ switch (job->state)
+ {
+ case IPP_JSTATE_PENDING :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job pending.");
+ break;
+
+ case IPP_JSTATE_HELD :
+ if (job->fd >= 0)
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job incoming.");
+ else if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_ZERO))
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job held.");
+ else
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job created.");
+ break;
+
+ case IPP_JSTATE_PROCESSING :
+ if (job->cancel)
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job canceling.");
+ else
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job printing.");
+ break;
+
+ case IPP_JSTATE_STOPPED :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job stopped.");
+ break;
+
+ case IPP_JSTATE_CANCELED :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job canceled.");
+ break;
+
+ case IPP_JSTATE_ABORTED :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job aborted.");
+ break;
+
+ case IPP_JSTATE_COMPLETED :
+ ippAddString(client->response, IPP_TAG_JOB, IPP_CONST_TAG(IPP_TAG_TEXT), "job-state-message", NULL, "Job completed.");
+ break;
+ }
+ }
+
if (!ra || cupsArrayFind(ra, "job-state-reasons"))
{
switch (job->state)
if (!ra || cupsArrayFind(ra, "time-at-completed"))
ippAddInteger(client->response, IPP_TAG_JOB,
job->completed ? IPP_TAG_INTEGER : IPP_TAG_NOVALUE,
- "time-at-completed", (int)job->completed);
+ "time-at-completed", (int)(job->completed - client->printer->start_time));
if (!ra || cupsArrayFind(ra, "time-at-processing"))
ippAddInteger(client->response, IPP_TAG_JOB,
job->processing ? IPP_TAG_INTEGER : IPP_TAG_NOVALUE,
- "time-at-processing", (int)job->processing);
+ "time-at-processing", (int)(job->processing - client->printer->start_time));
}
{
_ipp_job_t *job; /* Job */
ipp_attribute_t *attr; /* Job attribute */
- char uri[1024]; /* job-uri value */
+ char uri[1024], /* job-uri value */
+ uuid[64]; /* job-uuid value */
_cupsRWLockWrite(&(client->printer->rwlock));
}
job->printer = client->printer;
- job->attrs = client->request;
+ job->attrs = ippNew();
job->state = IPP_JSTATE_HELD;
job->fd = -1;
- client->request = NULL;
/*
- * Set all but the first two attributes to the job attributes group...
+ * Copy all of the job attributes...
*/
- for (ippFirstAttribute(job->attrs),
- ippNextAttribute(job->attrs),
- attr = ippNextAttribute(job->attrs);
- attr;
- attr = ippNextAttribute(job->attrs))
- ippSetGroupTag(job->attrs, &attr, IPP_TAG_JOB);
+ copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0);
/*
* Get the requesting-user-name, document format, and priority...
*/
- if ((attr = ippFindAttribute(job->attrs, "requesting-user-name",
- IPP_TAG_NAME)) != NULL)
- ippSetName(job->attrs, &attr, "job-originating-user-name");
- else
- attr = ippAddString(job->attrs, IPP_TAG_JOB,
- IPP_CONST_TAG(IPP_TAG_NAME),
- "job-originating-user-name", NULL, "anonymous");
-
- if (attr)
+ if ((attr = ippFindAttribute(client->request, "requesting-user-name", IPP_TAG_NAME)) != NULL)
job->username = ippGetString(attr, 0, NULL);
else
job->username = "anonymous";
- if ((attr = ippFindAttribute(job->attrs, "document-format",
- IPP_TAG_MIMETYPE)) != NULL)
- job->format = ippGetString(attr, 0, NULL);
- else
- job->format = "application/octet-stream";
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_NAME, "job-originating-user-name", NULL, job->username);
+
+ if (ippGetOperation(client->request) != IPP_OP_CREATE_JOB)
+ {
+ if ((attr = ippFindAttribute(job->attrs, "document-format-detected", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else if ((attr = ippFindAttribute(job->attrs, "document-format-supplied", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else
+ job->format = "application/octet-stream";
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_INTEGER)) != NULL)
+ job->impressions = ippGetInteger(attr, 0);
+
+ if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_NAME)) != NULL)
+ job->name = ippGetString(attr, 0, NULL);
/*
* Add job description attributes and add to the jobs array...
job->id = client->printer->next_job_id ++;
snprintf(uri, sizeof(uri), "%s/%d", client->printer->uri, job->id);
+ httpAssembleUUID(client->printer->hostname, client->printer->port, client->printer->name, job->id, uuid, sizeof(uuid));
+ ippAddDate(job->attrs, IPP_TAG_JOB, "date-time-at-creation", ippTimeToDate(time(&job->created)));
ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "job-id", job->id);
ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uri", NULL, uri);
- ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL,
- client->printer->uri);
- ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation",
- (int)time(NULL));
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-uuid", NULL, uuid);
+ ippAddString(job->attrs, IPP_TAG_JOB, IPP_TAG_URI, "job-printer-uri", NULL, client->printer->uri);
+ ippAddInteger(job->attrs, IPP_TAG_JOB, IPP_TAG_INTEGER, "time-at-creation", (int)(job->created - client->printer->start_time));
cupsArrayAdd(client->printer->jobs, job);
client->printer->active_job = job;
}
+/*
+ * 'create_job_filename()' - Create the filename for a document in a job.
+ */
+
+static void create_job_filename(
+ _ipp_printer_t *printer, /* I - Printer */
+ _ipp_job_t *job, /* I - Job */
+ char *fname, /* I - Filename buffer */
+ size_t fnamesize) /* I - Size of filename buffer */
+{
+ char name[256], /* "Safe" filename */
+ *nameptr; /* Pointer into filename */
+ const char *ext, /* Filename extension */
+ *job_name; /* job-name value */
+ ipp_attribute_t *job_name_attr; /* job-name attribute */
+
+
+ /*
+ * Make a name from the job-name attribute...
+ */
+
+ if ((job_name_attr = ippFindAttribute(job->attrs, "job-name", IPP_TAG_NAME)) != NULL)
+ job_name = ippGetString(job_name_attr, 0, NULL);
+ else
+ job_name = "untitled";
+
+ for (nameptr = name; *job_name && nameptr < (name + sizeof(name) - 1); job_name ++)
+ if (isalnum(*job_name & 255) || *job_name == '-')
+ *nameptr++ = (char)tolower(*job_name & 255);
+ else
+ *nameptr++ = '_';
+
+ *nameptr = '\0';
+
+ /*
+ * Figure out the extension...
+ */
+
+ if (!strcasecmp(job->format, "image/jpeg"))
+ ext = "jpg";
+ else if (!strcasecmp(job->format, "image/png"))
+ ext = "png";
+ else if (!strcasecmp(job->format, "image/pwg-raster"))
+ ext = "ras";
+ else if (!strcasecmp(job->format, "image/urf"))
+ ext = "urf";
+ else if (!strcasecmp(job->format, "application/pdf"))
+ ext = "pdf";
+ else if (!strcasecmp(job->format, "application/postscript"))
+ ext = "ps";
+ else
+ ext = "prn";
+
+ /*
+ * Create a filename with the job-id, job-name, and document-format (extension)...
+ */
+
+ snprintf(fname, fnamesize, "%s/%d-%s.%s", printer->directory, job->id, name, ext);
+}
+
+
/*
* 'create_listener()' - Create a listener socket.
*/
-static int /* O - Listener socket or -1 on error */
-create_listener(int family, /* I - Address family */
- int *port) /* IO - Port number */
+static int /* O - Listener socket or -1 on error */
+create_listener(int family, /* I - Address family */
+ int port) /* I - Port number */
{
int sock; /* Listener socket */
http_addrlist_t *addrlist; /* Listen address */
char service[255]; /* Service port */
- if (!*port)
- {
- *port = 8000 + (getuid() % 1000);
- fprintf(stderr, "Listening on port %d.\n", *port);
- }
-
- snprintf(service, sizeof(service), "%d", *port);
+ snprintf(service, sizeof(service), "%d", port);
if ((addrlist = httpAddrGetList(NULL, family, service)) == NULL)
return (-1);
- sock = httpAddrListen(&(addrlist->addr), *port);
+ sock = httpAddrListen(&(addrlist->addr), port);
httpAddrFreeList(addrlist);
static ipp_t * /* O - media-col collection */
create_media_col(const char *media, /* I - Media name */
- const char *type, /* I - Nedua type */
+ const char *source, /* I - Media source */
+ const char *type, /* I - Media type */
int width, /* I - x-dimension in 2540ths */
int length, /* I - y-dimension in 2540ths */
int margins) /* I - Value for margins */
char media_key[256]; /* media-key value */
- snprintf(media_key, sizeof(media_key), "%s_%s%s", media, type,
- margins == 0 ? "_borderless" : "");
+ if (type && source)
+ snprintf(media_key, sizeof(media_key), "%s_%s_%s%s", media, source, type, margins == 0 ? "_borderless" : "");
+ else if (type)
+ snprintf(media_key, sizeof(media_key), "%s__%s%s", media, type, margins == 0 ? "_borderless" : "");
+ else if (source)
+ snprintf(media_key, sizeof(media_key), "%s_%s%s", media, source, margins == 0 ? "_borderless" : "");
+ else
+ snprintf(media_key, sizeof(media_key), "%s%s", media, margins == 0 ? "_borderless" : "");
ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-key", NULL,
media_key);
ippAddCollection(media_col, IPP_TAG_PRINTER, "media-size", media_size);
+ ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-size-name", NULL, media);
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"media-bottom-margin", margins);
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"media-right-margin", margins);
ippAddInteger(media_col, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"media-top-margin", margins);
- ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type",
- NULL, type);
+ if (source)
+ ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-source", NULL, source);
+ if (type)
+ ippAddString(media_col, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "media-type", NULL, type);
ippDelete(media_size);
{
int i, j; /* Looping vars */
_ipp_printer_t *printer; /* Printer */
- char hostname[256], /* Hostname */
- uri[1024], /* Printer URI */
+#ifndef WIN32
+ char path[1024]; /* Full path to command */
+#endif /* !WIN32 */
+ char uri[1024], /* Printer URI */
icons[1024], /* printer-icons URI */
adminurl[1024], /* printer-more-info URI */
+ supplyurl[1024],/* printer-supply-info-uri URI */
device_id[1024],/* printer-device-id */
- make_model[128];/* printer-make-and-model */
+ make_model[128],/* printer-make-and-model */
+ uuid[128]; /* printer-uuid */
int num_formats; /* Number of document-format-supported values */
char *defformat, /* document-format-default value */
*formats[100], /* document-format-supported values */
"1.1",
"2.0"
};
+ static const char * const features[] =/* ipp-features-supported values */
+ {
+ "ipp-everywhere"
+ };
static const int ops[] = /* operations-supported values */
{
IPP_OP_PRINT_JOB,
IPP_OP_CANCEL_JOB,
IPP_OP_GET_JOB_ATTRIBUTES,
IPP_OP_GET_JOBS,
- IPP_OP_GET_PRINTER_ATTRIBUTES
+ IPP_OP_GET_PRINTER_ATTRIBUTES,
+ IPP_OP_CANCEL_MY_JOBS,
+ IPP_OP_CLOSE_JOB,
+ IPP_OP_IDENTIFY_PRINTER
};
static const char * const charsets[] =/* charset-supported values */
{
#endif /* HAVE_LIBZ */
"none"
};
+ static const char * const identify_actions[] =
+ {
+ "display",
+ "sound"
+ };
static const char * const job_creation[] =
{ /* job-creation-attributes-supported values */
"copies",
"media-left-margin",
"media-right-margin",
"media-size",
+ "media-source",
"media-top-margin",
"media-type"
};
"separate-documents-uncollated-copies",
"separate-documents-collated-copies"
};
+ static const char * const overrides[] =
+ { /* overrides-supported */
+ "document-number",
+ "pages"
+ };
+ static const char * const print_color_mode_supported[] =
+ { /* print-color-mode-supported values */
+ "auto",
+ "color",
+ "monochrome"
+ };
static const int print_quality_supported[] =
{ /* print-quality-supported values */
IPP_QUALITY_DRAFT,
"two-sided-long-edge",
"two-sided-short-edge"
};
+ static const char * const urf_supported[] =
+ { /* urf-supported values */
+ "CP1",
+ "IS1-5-7",
+ "MT1-2-3-4-5-6-8-9-10-11-12-13",
+ "RS600",
+ "SRGB24",
+ "V1.4",
+ "W8",
+ "DM1"
+ };
static const char * const which_jobs[] =
{ /* which-jobs-supported values */
"completed",
};
+#ifndef WIN32
+ /*
+ * If a command was specified, make sure it exists and is executable...
+ */
+
+ if (command)
+ {
+ if (*command == '/' || !strncmp(command, "./", 2))
+ {
+ if (access(command, X_OK))
+ {
+ fprintf(stderr, "ippserver: Unable to execute command \"%s\": %s\n", command, strerror(errno));
+ return (NULL);
+ }
+ }
+ else
+ {
+ if (!cupsFileFind(command, getenv("PATH"), 1, path, sizeof(path)))
+ {
+ fprintf(stderr, "ippserver: Unable to find command \"%s\".\n", command);
+ return (NULL);
+ }
+
+ command = path;
+ }
+ }
+#endif /* !WIN32 */
+
/*
* Allocate memory for the printer...
*/
if ((printer = calloc(1, sizeof(_ipp_printer_t))) == NULL)
{
- perror("Unable to allocate memory for printer");
+ perror("ippserver: Unable to allocate memory for printer");
return (NULL);
}
#endif /* HAVE_DNSSD */
printer->command = command ? strdup(command) : NULL;
printer->directory = strdup(directory);
- printer->hostname = strdup(servername ? servername :
- httpGetHostname(NULL, hostname,
- sizeof(hostname)));
+ printer->hostname = strdup(servername);
printer->port = port;
+ printer->start_time = time(NULL);
+ printer->config_time = printer->start_time;
printer->state = IPP_PSTATE_IDLE;
- printer->state_reasons = _IPP_PSTATE_NONE;
+ printer->state_reasons = _IPP_PREASON_NONE;
+ printer->state_time = printer->start_time;
printer->jobs = cupsArrayNew((cups_array_func_t)compare_jobs, NULL);
printer->next_job_id = 1;
if (icon)
printer->icon = strdup(icon);
+ printer->main_size = _IPP_MEDIA_SIZE_A4;
+ printer->main_type = _IPP_MEDIA_TYPE_STATIONERY;
+ printer->main_level = 500;
+
+ printer->envelope_size = _IPP_MEDIA_SIZE_NONE;
+ printer->envelope_level = 0;
+
+ printer->photo_size = _IPP_MEDIA_SIZE_NONE;
+ printer->photo_type = _IPP_MEDIA_TYPE_NONE;
+ printer->photo_level = 0;
+
+ printer->supplies[_IPP_SUPPLY_CYAN] = 100;
+ printer->supplies[_IPP_SUPPLY_MAGENTA] = 100;
+ printer->supplies[_IPP_SUPPLY_YELLOW] = 100;
+ printer->supplies[_IPP_SUPPLY_BLACK] = 100;
+ printer->supplies[_IPP_SUPPLY_WASTE] = 0;
+
_cupsRWInit(&(printer->rwlock));
/*
* Create the listener sockets...
*/
- if ((printer->ipv4 = create_listener(AF_INET, &(printer->port))) < 0)
+ if ((printer->ipv4 = create_listener(AF_INET, printer->port)) < 0)
{
perror("Unable to create IPv4 listener");
goto bad_printer;
}
- if ((printer->ipv6 = create_listener(AF_INET6, &(printer->port))) < 0)
+ if ((printer->ipv6 = create_listener(AF_INET6, printer->port)) < 0)
{
perror("Unable to create IPv6 listener");
goto bad_printer;
httpAssembleURI(HTTP_URI_CODING_ALL, icons, sizeof(icons), "http", NULL,
printer->hostname, printer->port, "/icon.png");
- httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), "http", NULL,
- printer->hostname, printer->port, "/");
+ httpAssembleURI(HTTP_URI_CODING_ALL, adminurl, sizeof(adminurl), "http", NULL, printer->hostname, printer->port, "/");
+ httpAssembleURI(HTTP_URI_CODING_ALL, supplyurl, sizeof(supplyurl), "http", NULL, printer->hostname, printer->port, "/supplies");
if (Verbosity)
{
fprintf(stderr, "printer-more-info=\"%s\"\n", adminurl);
+ fprintf(stderr, "printer-supply-info-uri=\"%s\"\n", supplyurl);
fprintf(stderr, "printer-uri=\"%s\"\n", uri);
}
*ptr++ = '\0';
formats[num_formats++] = ptr;
- if (!_cups_strcasecmp(ptr, "application/octet-stream"))
+ if (!strcasecmp(ptr, "application/octet-stream"))
defformat = ptr;
}
prefix = "CMD:";
for (i = 0; i < num_formats; i ++)
{
- if (!_cups_strcasecmp(formats[i], "application/pdf"))
+ if (!strcasecmp(formats[i], "application/pdf"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPDF", prefix);
- else if (!_cups_strcasecmp(formats[i], "application/postscript"))
+ else if (!strcasecmp(formats[i], "application/postscript"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPS", prefix);
- else if (!_cups_strcasecmp(formats[i], "application/vnd.hp-PCL"))
+ else if (!strcasecmp(formats[i], "application/vnd.hp-PCL"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPCL", prefix);
- else if (!_cups_strcasecmp(formats[i], "image/jpeg"))
+ else if (!strcasecmp(formats[i], "image/jpeg"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sJPEG", prefix);
- else if (!_cups_strcasecmp(formats[i], "image/png"))
+ else if (!strcasecmp(formats[i], "image/png"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%sPNG", prefix);
- else if (_cups_strcasecmp(formats[i], "application/octet-stream"))
+ else if (strcasecmp(formats[i], "application/octet-stream"))
snprintf(ptr, sizeof(device_id) - (size_t)(ptr - device_id), "%s%s", prefix, formats[i]);
ptr += strlen(ptr);
prefix = ",";
}
- strlcat(device_id, ";", sizeof(device_id));
+ if (ptr < (device_id + sizeof(device_id) - 1))
+ {
+ *ptr++ = ';';
+ *ptr = '\0';
+ }
/*
* Get the maximum spool size based on the size of the filesystem used for
"document-format-supported", num_formats, NULL,
(const char * const *)formats);
+ /* document-password-supported */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "document-password-supported", 127);
+
/* finishings-default */
ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
"finishings-default", IPP_FINISHINGS_NONE);
IPP_CONST_TAG(IPP_TAG_LANGUAGE),
"generated-natural-language-supported", NULL, "en");
+ /* identify-actions-default */
+ ippAddString (printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "identify-actions-default", NULL, "sound");
+
+ /* identify-actions-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "identify-actions-supported", sizeof(identify_actions) / sizeof(identify_actions[0]), NULL, identify_actions);
+
+ /* ipp-features-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-features-supported", sizeof(features) / sizeof(features[0]), NULL, features);
+
/* ipp-versions-supported */
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
- IPP_CONST_TAG(IPP_TAG_KEYWORD),
- "ipp-versions-supported",
- sizeof(versions) / sizeof(versions[0]), NULL, versions);
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "ipp-versions-supported", sizeof(versions) / sizeof(versions[0]), NULL, versions);
+
+ /* job-account-id-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_NAME), "job-account-id-default", NULL, "");
/* job-account-id-supported */
ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-account-id-supported", 1);
+ /* job-accounting-user-id-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_NAME), "job-accounting-user-id-default", NULL, "");
+
/* job-accounting-user-id-supported */
- ippAddBoolean(printer->attrs, IPP_TAG_PRINTER,
- "job-accounting-user-id-supported", 1);
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-accounting-user-id-supported", 1);
/* job-creation-attributes-supported */
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
- IPP_CONST_TAG(IPP_TAG_KEYWORD),
- "job-creation-attributes-supported",
- sizeof(job_creation) / sizeof(job_creation[0]),
- NULL, job_creation);
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "job-creation-attributes-supported", sizeof(job_creation) / sizeof(job_creation[0]), NULL, job_creation);
+
+ /* job-ids-supported */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-ids-supported", 1);
/* job-k-octets-supported */
ippAddRange(printer->attrs, IPP_TAG_PRINTER, "job-k-octets-supported", 0,
ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"job-password-supported", 4);
+ /* job-preferred-attributes-supported */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "job-preferred-attributes-supported", 0);
+
/* job-priority-default */
ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"job-priority-default", 50);
i ++)
{
if (media_col_sizes[i][2] == _IPP_ENV_ONLY)
- num_database += 2; /* auto + envelope */
+ num_database += 3; /* auto + manual + envelope */
else if (media_col_sizes[i][2] == _IPP_PHOTO_ONLY)
- num_database += 12; /* auto + photographic-* + borderless */
+ num_database += 6 * 3; /* auto + photographic-* from auto, manual, and photo */
else
- num_database += (int)(sizeof(media_type_supported) /
- sizeof(media_type_supported[0])) + 6;
- /* All types + borderless */
+ num_database += 2; /* Regular + borderless */
}
media_col_database = ippAddCollections(printer->attrs, IPP_TAG_PRINTER,
i < (int)(sizeof(media_col_sizes) / sizeof(media_col_sizes[0]));
i ++)
{
- for (j = 0;
- j < (int)(sizeof(media_type_supported) /
- sizeof(media_type_supported[0]));
- j ++)
+ switch (media_col_sizes[i][2])
{
- if (media_col_sizes[i][2] == _IPP_ENV_ONLY &&
- strcmp(media_type_supported[j], "auto") &&
- strcmp(media_type_supported[j], "envelope"))
- continue;
- else if (media_col_sizes[i][2] == _IPP_PHOTO_ONLY &&
- strcmp(media_type_supported[j], "auto") &&
- strncmp(media_type_supported[j], "photographic-", 13))
- continue;
+ case _IPP_GENERAL :
+ /*
+ * Regular + borderless for the general class; no source/type
+ * selectors...
+ */
- ippSetCollection(printer->attrs, &media_col_database, media_col_index,
- create_media_col(media_supported[i],
- media_type_supported[j],
- media_col_sizes[i][0],
- media_col_sizes[i][1],
- media_xxx_margin_supported[1]));
- media_col_index ++;
-
- if (media_col_sizes[i][2] != _IPP_ENV_ONLY &&
- (!strcmp(media_type_supported[j], "auto") ||
- !strncmp(media_type_supported[j], "photographic-", 13)))
- {
- /*
- * Add borderless version for this combination...
- */
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], NULL, NULL, media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[1]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], NULL, NULL, media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[0]));
+ break;
- ippSetCollection(printer->attrs, &media_col_database, media_col_index,
- create_media_col(media_supported[i],
- media_type_supported[j],
- media_col_sizes[i][0],
- media_col_sizes[i][1],
- media_xxx_margin_supported[0]));
- media_col_index ++;
- }
+ case _IPP_ENV_ONLY :
+ /*
+ * Regular margins for "auto", "manual", and "envelope" sources.
+ */
+
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "auto", "envelope", media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[1]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "manual", "envelope", media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[1]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "envelope", "envelope", media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[1]));
+ break;
+ case _IPP_PHOTO_ONLY :
+ /*
+ * Photos have specific media types and can only be printed via
+ * the auto, manual, and photo sources...
+ */
+
+ for (j = 0;
+ j < (int)(sizeof(media_type_supported) /
+ sizeof(media_type_supported[0]));
+ j ++)
+ {
+ if (strcmp(media_type_supported[j], "auto") && strncmp(media_type_supported[j], "photographic-", 13))
+ continue;
+
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "auto", media_type_supported[j], media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[0]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "manual", media_type_supported[j], media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[0]));
+ ippSetCollection(printer->attrs, &media_col_database, media_col_index ++, create_media_col(media_supported[i], "photo", media_type_supported[j], media_col_sizes[i][0], media_col_sizes[i][1], media_xxx_margin_supported[0]));
+ }
+ break;
}
}
/* media-col-default */
media_col_default = create_media_col(media_supported[0],
+ media_source_supported[0],
media_type_supported[0],
media_col_sizes[0][0],
media_col_sizes[0][1],
create_media_size(media_col_sizes[i][0],
media_col_sizes[i][1]));
+ /* media-source-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-source-supported", (int)(sizeof(media_source_supported) / sizeof(media_source_supported[0])), NULL, media_source_supported);
+
/* media-top-margin-supported */
ippAddIntegers(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"media-top-margin-supported",
media_xxx_margin_supported);
/* media-type-supported */
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
- IPP_CONST_TAG(IPP_TAG_KEYWORD),
- "media-type-supported",
- (int)(sizeof(media_type_supported) /
- sizeof(media_type_supported[0])),
- NULL, media_type_supported);
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-type-supported", (int)(sizeof(media_type_supported) / sizeof(media_type_supported[0])), NULL, media_type_supported);
/* multiple-document-handling-supported */
- ippAddStrings(printer->attrs, IPP_TAG_PRINTER,
- IPP_CONST_TAG(IPP_TAG_KEYWORD),
- "multiple-document-handling-supported",
- sizeof(multiple_document_handling) /
- sizeof(multiple_document_handling[0]), NULL,
- multiple_document_handling);
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-document-handling-supported", sizeof(multiple_document_handling) / sizeof(multiple_document_handling[0]), NULL, multiple_document_handling);
/* multiple-document-jobs-supported */
- ippAddBoolean(printer->attrs, IPP_TAG_PRINTER,
- "multiple-document-jobs-supported", 0);
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "multiple-document-jobs-supported", 0);
+
+ /* multiple-operation-time-out */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "multiple-operation-time-out", 60);
+
+ /* multiple-operation-time-out-action */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "multiple-operation-time-out-action", NULL, "abort-job");
/* natural-language-configured */
ippAddString(printer->attrs, IPP_TAG_PRINTER,
IPP_CONST_TAG(IPP_TAG_KEYWORD),
"output-bin-supported", NULL, "face-down");
+ /* overrides-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "overrides-supported", (int)(sizeof(overrides) / sizeof(overrides[0])), NULL, overrides);
+
+ /* page-ranges-supported */
+ ippAddBoolean(printer->attrs, IPP_TAG_PRINTER, "page-ranges-supported", 1);
+
/* pages-per-minute */
ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
"pages-per-minute", ppm);
IPP_CONST_TAG(IPP_TAG_KEYWORD),
"pdl-override-supported", NULL, "attempted");
+ /* print-color-mode-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-color-mode-default", NULL, "auto");
+
+ /* print-color-mode-supported */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-color-mode-supported", (int)(sizeof(print_color_mode_supported) / sizeof(print_color_mode_supported[0])), NULL, print_color_mode_supported);
+
+ /* print-content-optimize-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-content-optimize-default", NULL, "auto");
+
+ /* print-content-optimize-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-content-optimize-supported", NULL, "auto");
+
+ /* print-rendering-intent-default */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-rendering-intent-default", NULL, "auto");
+
+ /* print-rendering-intent-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "print-rendering-intent-supported", NULL, "auto");
+
/* print-quality-default */
- ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
- "print-quality-default", IPP_QUALITY_NORMAL);
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "print-quality-default", IPP_QUALITY_NORMAL);
/* print-quality-supported */
- ippAddIntegers(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM,
- "print-quality-supported",
- (int)(sizeof(print_quality_supported) /
- sizeof(print_quality_supported[0])),
- print_quality_supported);
+ ippAddIntegers(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_ENUM, "print-quality-supported", (int)(sizeof(print_quality_supported) / sizeof(print_quality_supported[0])), print_quality_supported);
/* printer-device-id */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT,
"printer-device-id", NULL, device_id);
+ /* printer-get-attributes-supported */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "printer-get-attributes-supported", NULL, "document-format");
+
+ /* printer-geo-location */
+ ippAddInteger(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_UNKNOWN, "printer-geo-location", 0);
+
/* printer-icons */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI,
"printer-icons", NULL, icons);
}
/* printer-more-info */
- ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI,
- "printer-more-info", NULL, adminurl);
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, adminurl);
/* printer-name */
ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-name",
NULL, name);
+ /* printer-organization */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-organization", NULL, "Apple Inc.");
+
+ /* printer-organizational-unit */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-organizational-unit", NULL, "Printing Engineering");
+
/* printer-resolution-default */
ippAddResolution(printer->attrs, IPP_TAG_PRINTER,
"printer-resolution-default", IPP_RES_PER_INCH, 600, 600);
ippAddResolution(printer->attrs, IPP_TAG_PRINTER,
"printer-resolution-supported", IPP_RES_PER_INCH, 600, 600);
+ /* printer-supply-description */
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-supply-description", (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])), NULL, printer_supplies);
+
+ /* printer-supply-info-uri */
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-supply-info-uri", NULL, supplyurl);
+
/* printer-uri-supported */
- ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI,
- "printer-uri-supported", NULL, uri);
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, uri);
+
+ /* printer-uuid */
+ httpAssembleUUID(printer->hostname, port, name, 0, uuid, sizeof(uuid));
+ ippAddString(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uuid", NULL, uuid);
/* pwg-raster-document-xxx-supported */
for (i = 0; i < num_formats; i ++)
- if (!_cups_strcasecmp(formats[i], "image/pwg-raster"))
+ if (!strcasecmp(formats[i], "image/pwg-raster"))
break;
if (i < num_formats)
IPP_CONST_TAG(IPP_TAG_KEYWORD),
"sides-supported", duplex ? 3 : 1, NULL, sides_supported);
+ /* urf-supported */
+ for (i = 0; i < num_formats; i ++)
+ if (!strcasecmp(formats[i], "image/urf"))
+ break;
+
+ if (i < num_formats)
+ ippAddStrings(printer->attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "urf-supported", (int)(sizeof(urf_supported) / sizeof(urf_supported[0])) - !duplex, NULL, urf_supported);
+
/* uri-authentication-supported */
ippAddString(printer->attrs, IPP_TAG_PRINTER,
IPP_CONST_TAG(IPP_TAG_KEYWORD),
* Register the printer with Bonjour...
*/
- if (!register_printer(printer, location, make, model, docformats, adminurl,
- ppm_color > 0, duplex, subtype))
+ if (!register_printer(printer, location, make, model, docformats, adminurl, uuid + 9, ppm_color > 0, duplex, subtype))
goto bad_printer;
#endif /* HAVE_DNSSD */
regtype, (int)errorCode);
return;
}
- else if (_cups_strcasecmp(name, printer->dnssd_name))
+ else if (strcasecmp(name, printer->dnssd_name))
{
if (Verbosity)
fprintf(stderr, "Now using DNS-SD service name \"%s\".\n", name);
#endif /* HAVE_DNSSD */
+/*
+ * 'filter_cb()' - Filter printer attributes based on the requested array.
+ */
+
+static int /* O - 1 to copy, 0 to ignore */
+filter_cb(_ipp_filter_t *filter, /* I - Filter parameters */
+ ipp_t *dst, /* I - Destination (unused) */
+ ipp_attribute_t *attr) /* I - Source attribute */
+{
+ /*
+ * Filter attributes as needed...
+ */
+
+// (void)dst;
+
+ ipp_tag_t group = ippGetGroupTag(attr);
+ const char *name = ippGetName(attr);
+
+ if ((filter->group_tag != IPP_TAG_ZERO && group != filter->group_tag && group != IPP_TAG_ZERO) || !name || (!strcmp(name, "media-col-database") && !cupsArrayFind(filter->ra, (void *)name)))
+ return (0);
+
+ return (!filter->ra || cupsArrayFind(filter->ra, (void *)name) != NULL);
+}
+
+
/*
* 'find_job()' - Find a job specified in a request.
*/
*job; /* Matching job, if any */
- key.id = 0;
-
- if ((attr = ippFindAttribute(client->request, "job-uri",
- IPP_TAG_URI)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "job-uri", IPP_TAG_URI)) != NULL)
{
const char *uri = ippGetString(attr, 0, NULL);
if (!strncmp(uri, client->printer->uri, client->printer->urilen) &&
uri[client->printer->urilen] == '/')
key.id = atoi(uri + client->printer->urilen + 1);
+ else
+ return (NULL);
}
- else if ((attr = ippFindAttribute(client->request, "job-id",
- IPP_TAG_INTEGER)) != NULL)
+ else if ((attr = ippFindAttribute(client->request, "job-id", IPP_TAG_INTEGER)) != NULL)
key.id = ippGetInteger(attr, 0);
_cupsRWLockRead(&(client->printer->rwlock));
}
+/*
+ * 'html_footer()' - Show the web interface footer.
+ *
+ * This function also writes the trailing 0-length chunk.
+ */
+
+static void
+html_footer(_ipp_client_t *client) /* I - Client */
+{
+ html_printf(client,
+ "</div>\n"
+ "</body>\n"
+ "</html>\n");
+ httpWrite2(client->http, "", 0);
+}
+
+
+/*
+ * 'html_header()' - Show the web interface header and title.
+ */
+
+static void
+html_header(_ipp_client_t *client, /* I - Client */
+ const char *title) /* I - Title */
+{
+ html_printf(client,
+ "<!doctype html>\n"
+ "<html>\n"
+ "<head>\n"
+ "<title>%s</title>\n"
+ "<link rel=\"shortcut icon\" href=\"/icon.png\" type=\"image/png\">\n"
+ "<link rel=\"apple-touch-icon\" href=\"/icon.png\" type=\"image/png\">\n"
+ "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\">\n"
+ "<meta name=\"viewport\" content=\"width=device-width\">\n"
+ "<style>\n"
+ "body { font-family: sans-serif; margin: 0; }\n"
+ "div.body { padding: 0px 10px 10px; }\n"
+ "blockquote { background: #dfd; border-radius: 5px; color: #006; padding: 10px; }\n"
+ "table.form { border-collapse: collapse; margin-top: 10px; width: 100%%; }\n"
+ "table.form td, table.form th { padding: 5px 2px; width: 50%%; }\n"
+ "table.form th { text-align: right; }\n"
+ "table.striped { border-bottom: solid thin black; border-collapse: collapse; width: 100%%; }\n"
+ "table.striped tr:nth-child(even) { background: #fcfcfc; }\n"
+ "table.striped tr:nth-child(odd) { background: #f0f0f0; }\n"
+ "table.striped th { background: white; border-bottom: solid thin black; text-align: left; vertical-align: bottom; }\n"
+ "table.striped td { margin: 0; padding: 5px; vertical-align: top; }\n"
+ "table.nav { border-collapse: collapse; width: 100%%; }\n"
+ "table.nav td { margin: 0; text-align: center; }\n"
+ "td.nav a, td.nav a:active, td.nav a:hover, td.nav a:hover:link, td.nav a:hover:link:visited, td.nav a:link, td.nav a:link:visited, td.nav a:visited { background: inherit; color: inherit; font-size: 80%%; text-decoration: none; }\n"
+ "td.nav { background: #333; color: #fff; padding: 4px 8px; width: 33%%; }\n"
+ "td.nav.sel { background: #fff; color: #000; font-weight: bold; }\n"
+ "td.nav:hover { background: #666; color: #fff; }\n"
+ "td.nav:active { background: #000; color: #ff0; }\n"
+ "</style>\n"
+ "</head>\n"
+ "<body>\n"
+ "<table class=\"nav\"><tr>"
+ "<td class=\"nav%s\"><a href=\"/\">Status</a></td>"
+ "<td class=\"nav%s\"><a href=\"/supplies\">Supplies</a></td>"
+ "<td class=\"nav%s\"><a href=\"/media\">Media</a></td>"
+ "</tr></table>\n"
+ "<div class=\"body\">\n", title, !strcmp(client->uri, "/") ? " sel" : "", !strcmp(client->uri, "/supplies") ? " sel" : "", !strcmp(client->uri, "/media") ? " sel" : "");
+}
+
+
/*
* 'html_printf()' - Send formatted text to the client, quoting as needed.
*/
{
httpWrite2(client->http, "%", 1);
format ++;
+ start = format;
continue;
}
else if (strchr(" -+#\'", *format))
}
+/*
+ * 'ipp_close_job()' - Close an open job.
+ */
+
+static void
+ipp_close_job(_ipp_client_t *client) /* I - Client */
+{
+ _ipp_job_t *job; /* Job information */
+
+
+ /*
+ * Get the job...
+ */
+
+ if ((job = find_job(client)) == NULL)
+ {
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_FOUND, "Job does not exist.");
+ return;
+ }
+
+ /*
+ * See if the job is already completed, canceled, or aborted; if so,
+ * we can't cancel...
+ */
+
+ switch (job->state)
+ {
+ case IPP_JSTATE_CANCELED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is canceled - can\'t close.", job->id);
+ break;
+
+ case IPP_JSTATE_ABORTED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is aborted - can\'t close.", job->id);
+ break;
+
+ case IPP_JSTATE_COMPLETED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is completed - can\'t close.", job->id);
+ break;
+
+ case IPP_JSTATE_PROCESSING :
+ case IPP_JSTATE_STOPPED :
+ respond_ipp(client, IPP_STATUS_ERROR_NOT_POSSIBLE,
+ "Job #%d is already closed.", job->id);
+ break;
+
+ default :
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+ break;
+ }
+}
+
+
/*
* 'ipp_create_job()' - Create a job object.
*/
ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
cupsArrayAdd(ra, "job-id");
cupsArrayAdd(ra, "job-state");
+ cupsArrayAdd(ra, "job-state-message");
cupsArrayAdd(ra, "job-state-reasons");
cupsArrayAdd(ra, "job-uri");
(job_comparison > 0 && job->state < job_state) ||
job->id < first_job_id ||
(username && job->username &&
- _cups_strcasecmp(username, job->username)))
+ strcasecmp(username, job->username)))
continue;
if (count > 0)
_ipp_printer_t *printer; /* Printer */
- /*
- * Send the attributes...
- */
+ /*
+ * Send the attributes...
+ */
+
+ ra = ippCreateRequestedArray(client->request);
+ printer = client->printer;
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+
+ _cupsRWLockRead(&(printer->rwlock));
+
+ copy_attributes(client->response, printer->attrs, ra, IPP_TAG_ZERO,
+ IPP_TAG_CUPS_CONST);
+
+ if (!ra || cupsArrayFind(ra, "media-col-ready"))
+ {
+ int i, /* Looping var */
+ num_ready = 0; /* Number of ready media */
+ ipp_t *ready[3]; /* Ready media */
+
+ if (printer->main_size != _IPP_MEDIA_SIZE_NONE)
+ {
+ if (printer->main_type != _IPP_MEDIA_TYPE_NONE)
+ ready[num_ready ++] = create_media_col(media_supported[printer->main_size], "main", media_type_supported[printer->main_type], media_col_sizes[printer->main_size][0], media_col_sizes[printer->main_size][1], 635);
+ else
+ ready[num_ready ++] = create_media_col(media_supported[printer->main_size], "main", NULL, media_col_sizes[printer->main_size][0], media_col_sizes[printer->main_size][1], 635);
+ }
+ if (printer->envelope_size != _IPP_MEDIA_SIZE_NONE)
+ ready[num_ready ++] = create_media_col(media_supported[printer->envelope_size], "envelope", NULL, media_col_sizes[printer->envelope_size][0], media_col_sizes[printer->envelope_size][1], 635);
+ if (printer->photo_size != _IPP_MEDIA_SIZE_NONE)
+ {
+ if (printer->photo_type != _IPP_MEDIA_TYPE_NONE)
+ ready[num_ready ++] = create_media_col(media_supported[printer->photo_size], "photo", media_type_supported[printer->photo_type], media_col_sizes[printer->photo_size][0], media_col_sizes[printer->photo_size][1], 0);
+ else
+ ready[num_ready ++] = create_media_col(media_supported[printer->photo_size], "photo", NULL, media_col_sizes[printer->photo_size][0], media_col_sizes[printer->photo_size][1], 0);
+ }
+
+ if (num_ready)
+ {
+ ippAddCollections(client->response, IPP_TAG_PRINTER, "media-col-ready", num_ready, (const ipp_t **)ready);
+ for (i = 0; i < num_ready; i ++)
+ ippDelete(ready[i]);
+ }
+ else
+ ippAddOutOfBand(client->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "media-col-ready");
+ }
+
+ if (!ra || cupsArrayFind(ra, "media-ready"))
+ {
+ int num_ready = 0; /* Number of ready media */
+ const char *ready[3]; /* Ready media */
+
+ if (printer->main_size != _IPP_MEDIA_SIZE_NONE)
+ ready[num_ready ++] = media_supported[printer->main_size];
+
+ if (printer->envelope_size != _IPP_MEDIA_SIZE_NONE)
+ ready[num_ready ++] = media_supported[printer->envelope_size];
+
+ if (printer->photo_size != _IPP_MEDIA_SIZE_NONE)
+ ready[num_ready ++] = media_supported[printer->photo_size];
+
+ if (num_ready)
+ ippAddStrings(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_KEYWORD), "media-ready", num_ready, NULL, ready);
+ else
+ ippAddOutOfBand(client->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "media-ready");
+ }
- ra = ippCreateRequestedArray(client->request);
- printer = client->printer;
+ if (!ra || cupsArrayFind(ra, "printer-config-change-date-time"))
+ ippAddDate(client->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time));
- respond_ipp(client, IPP_STATUS_OK, NULL);
+ if (!ra || cupsArrayFind(ra, "printer-config-change-time"))
+ ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-config-change-time", (int)(printer->config_time - printer->start_time));
- _cupsRWLockRead(&(printer->rwlock));
+ if (!ra || cupsArrayFind(ra, "printer-current-time"))
+ ippAddDate(client->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(time(NULL)));
- copy_attributes(client->response, printer->attrs, ra, IPP_TAG_ZERO,
- IPP_TAG_CUPS_CONST);
if (!ra || cupsArrayFind(ra, "printer-state"))
ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_ENUM,
"printer-state", printer->state);
+ if (!ra || cupsArrayFind(ra, "printer-state-change-date-time"))
+ ippAddDate(client->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time));
+
+ if (!ra || cupsArrayFind(ra, "printer-state-change-time"))
+ ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-state-change-time", (int)(printer->state_time - printer->start_time));
+
+ if (!ra || cupsArrayFind(ra, "printer-state-message"))
+ {
+ static const char * const messages[] = { "Idle.", "Printing.", "Stopped." };
+
+ ippAddString(client->response, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "printer-state-message", NULL, messages[printer->state - IPP_PSTATE_IDLE]);
+ }
+
if (!ra || cupsArrayFind(ra, "printer-state-reasons"))
{
- if (printer->state_reasons == _IPP_PSTATE_NONE)
+ if (printer->state_reasons == _IPP_PREASON_NONE)
ippAddString(client->response, IPP_TAG_PRINTER,
IPP_CONST_TAG(IPP_TAG_KEYWORD),
"printer-state-reasons", NULL, "none");
int num_reasons = 0;/* Number of reasons */
const char *reasons[32]; /* Reason strings */
- if (printer->state_reasons & _IPP_PSTATE_OTHER)
+ if (printer->state_reasons & _IPP_PREASON_OTHER)
reasons[num_reasons ++] = "other";
- if (printer->state_reasons & _IPP_PSTATE_COVER_OPEN)
+ if (printer->state_reasons & _IPP_PREASON_COVER_OPEN)
reasons[num_reasons ++] = "cover-open";
- if (printer->state_reasons & _IPP_PSTATE_INPUT_TRAY_MISSING)
+ if (printer->state_reasons & _IPP_PREASON_INPUT_TRAY_MISSING)
reasons[num_reasons ++] = "input-tray-missing";
- if (printer->state_reasons & _IPP_PSTATE_MARKER_SUPPLY_EMPTY)
+ if (printer->state_reasons & _IPP_PREASON_MARKER_SUPPLY_EMPTY)
reasons[num_reasons ++] = "marker-supply-empty-warning";
- if (printer->state_reasons & _IPP_PSTATE_MARKER_SUPPLY_LOW)
+ if (printer->state_reasons & _IPP_PREASON_MARKER_SUPPLY_LOW)
reasons[num_reasons ++] = "marker-supply-low-report";
- if (printer->state_reasons & _IPP_PSTATE_MARKER_WASTE_ALMOST_FULL)
+ if (printer->state_reasons & _IPP_PREASON_MARKER_WASTE_ALMOST_FULL)
reasons[num_reasons ++] = "marker-waste-almost-full-report";
- if (printer->state_reasons & _IPP_PSTATE_MARKER_WASTE_FULL)
+ if (printer->state_reasons & _IPP_PREASON_MARKER_WASTE_FULL)
reasons[num_reasons ++] = "marker-waste-full-warning";
- if (printer->state_reasons & _IPP_PSTATE_MEDIA_EMPTY)
+ if (printer->state_reasons & _IPP_PREASON_MEDIA_EMPTY)
reasons[num_reasons ++] = "media-empty-warning";
- if (printer->state_reasons & _IPP_PSTATE_MEDIA_JAM)
+ if (printer->state_reasons & _IPP_PREASON_MEDIA_JAM)
reasons[num_reasons ++] = "media-jam-warning";
- if (printer->state_reasons & _IPP_PSTATE_MEDIA_LOW)
+ if (printer->state_reasons & _IPP_PREASON_MEDIA_LOW)
reasons[num_reasons ++] = "media-low-report";
- if (printer->state_reasons & _IPP_PSTATE_MEDIA_NEEDED)
+ if (printer->state_reasons & _IPP_PREASON_MEDIA_NEEDED)
reasons[num_reasons ++] = "media-needed-report";
- if (printer->state_reasons & _IPP_PSTATE_MOVING_TO_PAUSED)
+ if (printer->state_reasons & _IPP_PREASON_MOVING_TO_PAUSED)
reasons[num_reasons ++] = "moving-to-paused";
- if (printer->state_reasons & _IPP_PSTATE_PAUSED)
+ if (printer->state_reasons & _IPP_PREASON_PAUSED)
reasons[num_reasons ++] = "paused";
- if (printer->state_reasons & _IPP_PSTATE_SPOOL_AREA_FULL)
+ if (printer->state_reasons & _IPP_PREASON_SPOOL_AREA_FULL)
reasons[num_reasons ++] = "spool-area-full";
- if (printer->state_reasons & _IPP_PSTATE_TONER_EMPTY)
+ if (printer->state_reasons & _IPP_PREASON_TONER_EMPTY)
reasons[num_reasons ++] = "toner-empty-warning";
- if (printer->state_reasons & _IPP_PSTATE_TONER_LOW)
+ if (printer->state_reasons & _IPP_PREASON_TONER_LOW)
reasons[num_reasons ++] = "toner-low-report";
ippAddStrings(client->response, IPP_TAG_PRINTER,
}
}
+ if (!ra || cupsArrayFind(ra, "printer-supply"))
+ {
+ int i; /* Looping var */
+ char buffer[256]; /* Supply value buffer */
+ ipp_attribute_t *attr = NULL; /* Attribute */
+ static const char * const colorants[] = { "cyan", "magenta", "yellow", "black", "unknown" };
+
+ for (i = 0; i < 5; i ++)
+ {
+ snprintf(buffer, sizeof(buffer), "index=%d;class=%s;type=%s;unit=percent;maxcapacity=100;level=%d;colorantname=%s;", i + 1, i < 4 ? "supplyThatIsConsumed" : "receptacleThatIsFilled", i < 4 ? "toner" : "wasteToner", printer->supplies[i], colorants[i]);
+
+ if (!attr)
+ attr = ippAddOctetString(client->response, IPP_TAG_PRINTER, "printer-supply", buffer, (int)strlen(buffer));
+ else
+ ippSetOctetString(client->response, &attr, i, buffer, (int)strlen(buffer));
+ }
+ }
+
if (!ra || cupsArrayFind(ra, "printer-up-time"))
- ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
- "printer-up-time", (int)time(NULL));
+ ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", (int)(time(NULL) - printer->start_time));
if (!ra || cupsArrayFind(ra, "queued-job-count"))
ippAddInteger(client->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
- "queued-job-count",
- printer->active_job &&
- printer->active_job->state < IPP_JSTATE_CANCELED);
+ "queued-job-count", printer->active_job && printer->active_job->state < IPP_JSTATE_CANCELED);
_cupsRWUnlock(&(printer->rwlock));
}
+/*
+ * 'ipp_identify_printer()' - Beep or display a message.
+ */
+
+static void
+ipp_identify_printer(
+ _ipp_client_t *client) /* I - Client */
+{
+ /* TODO: Do something */
+
+ respond_ipp(client, IPP_STATUS_OK, NULL);
+}
+
+
/*
* 'ipp_print_job()' - Create a job object with an attached document.
*/
* Create a file for the request data...
*/
- if (!_cups_strcasecmp(job->format, "image/jpeg"))
- snprintf(filename, sizeof(filename), "%s/%d.jpg",
- client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "image/png"))
- snprintf(filename, sizeof(filename), "%s/%d.png",
- client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "image/pwg-raster"))
- snprintf(filename, sizeof(filename), "%s/%d.ras",
- client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "application/pdf"))
- snprintf(filename, sizeof(filename), "%s/%d.pdf",
- client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "application/postscript"))
- snprintf(filename, sizeof(filename), "%s/%d.ps",
- client->printer->directory, job->id);
- else
- snprintf(filename, sizeof(filename), "%s/%d.prn",
- client->printer->directory, job->id);
+ create_job_filename(client->printer, job, filename, sizeof(filename));
if (Verbosity)
fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format);
* Process the job...
*/
-#if 0
if (!_cupsThreadCreate((_cups_thread_func_t)process_job, job))
{
job->state = IPP_JSTATE_ABORTED;
return;
}
-#else
- process_job(job);
-#endif /* 0 */
-
/*
* Return the job info...
*/
ra = cupsArrayNew((cups_array_func_t)strcmp, NULL);
cupsArrayAdd(ra, "job-id");
cupsArrayAdd(ra, "job-state");
+ cupsArrayAdd(ra, "job-state-message");
cupsArrayAdd(ra, "job-state-reasons");
cupsArrayAdd(ra, "job-uri");
* Create a file for the request data...
*/
- if (!_cups_strcasecmp(job->format, "image/jpeg"))
+ if (!strcasecmp(job->format, "image/jpeg"))
snprintf(filename, sizeof(filename), "%s/%d.jpg",
client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "image/png"))
+ else if (!strcasecmp(job->format, "image/png"))
snprintf(filename, sizeof(filename), "%s/%d.png",
client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "application/pdf"))
+ else if (!strcasecmp(job->format, "application/pdf"))
snprintf(filename, sizeof(filename), "%s/%d.pdf",
client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "application/postscript"))
+ else if (!strcasecmp(job->format, "application/postscript"))
snprintf(filename, sizeof(filename), "%s/%d.ps",
client->printer->directory, job->id);
else
return;
}
+ copy_attributes(job->attrs, client->request, NULL, IPP_TAG_JOB, 0);
+
/*
* Get the document format for the job...
*/
_cupsRWLockWrite(&(client->printer->rwlock));
- if ((attr = ippFindAttribute(client->request, "document-format", IPP_TAG_MIMETYPE)) != NULL)
+ if ((attr = ippFindAttribute(job->attrs, "document-format-detected", IPP_TAG_MIMETYPE)) != NULL)
+ job->format = ippGetString(attr, 0, NULL);
+ else if ((attr = ippFindAttribute(job->attrs, "document-format-supplied", IPP_TAG_MIMETYPE)) != NULL)
job->format = ippGetString(attr, 0, NULL);
else
job->format = "application/octet-stream";
* Create a file for the request data...
*/
- if (!_cups_strcasecmp(job->format, "image/jpeg"))
- snprintf(filename, sizeof(filename), "%s/%d.jpg",
- client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "image/png"))
- snprintf(filename, sizeof(filename), "%s/%d.png",
- client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "application/pdf"))
- snprintf(filename, sizeof(filename), "%s/%d.pdf",
- client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "application/postscript"))
- snprintf(filename, sizeof(filename), "%s/%d.ps",
- client->printer->directory, job->id);
- else
- snprintf(filename, sizeof(filename), "%s/%d.prn",
- client->printer->directory, job->id);
+ create_job_filename(client->printer, job, filename, sizeof(filename));
if (Verbosity)
fprintf(stderr, "Creating job file \"%s\", format \"%s\".\n", filename, job->format);
* Create a file for the request data...
*/
- if (!_cups_strcasecmp(job->format, "image/jpeg"))
+ if (!strcasecmp(job->format, "image/jpeg"))
snprintf(filename, sizeof(filename), "%s/%d.jpg",
client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "image/png"))
+ else if (!strcasecmp(job->format, "image/png"))
snprintf(filename, sizeof(filename), "%s/%d.png",
client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "application/pdf"))
+ else if (!strcasecmp(job->format, "application/pdf"))
snprintf(filename, sizeof(filename), "%s/%d.pdf",
client->printer->directory, job->id);
- else if (!_cups_strcasecmp(job->format, "application/postscript"))
+ else if (!strcasecmp(job->format, "application/postscript"))
snprintf(filename, sizeof(filename), "%s/%d.ps",
client->printer->directory, job->id);
else
}
+/*
+ * 'parse_options()' - Parse URL options into CUPS options.
+ *
+ * The client->options string is destroyed by this function.
+ */
+
+static int /* O - Number of options */
+parse_options(_ipp_client_t *client, /* I - Client */
+ cups_option_t **options) /* O - Options */
+{
+ char *name, /* Name */
+ *value, /* Value */
+ *next; /* Next name=value pair */
+ int num_options = 0; /* Number of options */
+
+
+ *options = NULL;
+
+ for (name = client->options; name && *name; name = next)
+ {
+ if ((value = strchr(name, '=')) == NULL)
+ break;
+
+ *value++ = '\0';
+ if ((next = strchr(value, '&')) != NULL)
+ *next++ = '\0';
+
+ num_options = cupsAddOption(name, value, num_options, options);
+ }
+
+ return (num_options);
+}
+
+
/*
* 'process_client()' - Process client requests on a thread.
*/
if (recv(httpGetFd(client->http), buf, 1, MSG_PEEK) == 1 && (!buf[0] || !strchr("DGHOPT", buf[0])))
{
- fprintf(stderr, "%s Negotiating TLS session.\n", client->hostname);
+ fprintf(stderr, "%s Starting HTTPS session.\n", client->hostname);
if (httpEncryption(client->http, HTTP_ENCRYPTION_ALWAYS))
{
fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString());
break;
}
+
+ fprintf(stderr, "%s Connection now encrypted.\n", client->hostname);
}
first_time = 0;
if (httpSeparateURI(HTTP_URI_CODING_MOST, uri, scheme, sizeof(scheme),
userpass, sizeof(userpass),
hostname, sizeof(hostname), &port,
- client->uri, sizeof(client->uri)) < HTTP_URI_STATUS_OK)
+ client->uri, sizeof(client->uri)) < HTTP_URI_STATUS_OK &&
+ (http_state != HTTP_STATE_OPTIONS || strcmp(uri, "*")))
{
fprintf(stderr, "%s Bad URI \"%s\".\n", client->hostname, uri);
respond_http(client, HTTP_STATUS_BAD_REQUEST, NULL, NULL, 0);
return (0);
}
+ if ((client->options = strchr(client->uri, '?')) != NULL)
+ *(client->options)++ = '\0';
+
/*
* Process the request...
*/
* Handle HTTP Upgrade...
*/
- if (!_cups_strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION),
+ if (!strcasecmp(httpGetField(client->http, HTTP_FIELD_CONNECTION),
"Upgrade"))
{
+#ifdef HAVE_SSL
+ if (strstr(httpGetField(client->http, HTTP_FIELD_UPGRADE), "TLS/") != NULL && !httpIsEncrypted(client->http))
+ {
+ if (!respond_http(client, HTTP_STATUS_SWITCHING_PROTOCOLS, NULL, NULL, 0))
+ return (0);
+
+ fprintf(stderr, "%s Upgrading to encrypted connection.\n", client->hostname);
+
+ if (httpEncryption(client->http, HTTP_ENCRYPTION_REQUIRED))
+ {
+ fprintf(stderr, "%s Unable to encrypt connection: %s\n", client->hostname, cupsLastErrorString());
+ return (0);
+ }
+
+ fprintf(stderr, "%s Connection now encrypted.\n", client->hostname);
+ }
+ else
+#endif /* HAVE_SSL */
+
if (!respond_http(client, HTTP_STATUS_NOT_IMPLEMENTED, NULL, NULL, 0))
return (0);
}
{
case HTTP_STATE_OPTIONS :
/*
- * Do HEAD/OPTIONS command...
+ * Do OPTIONS command...
*/
return (respond_http(client, HTTP_STATUS_OK, NULL, NULL, 0));
case HTTP_STATE_HEAD :
if (!strcmp(client->uri, "/icon.png"))
return (respond_http(client, HTTP_STATUS_OK, NULL, "image/png", 0));
- else if (!strcmp(client->uri, "/"))
+ else if (!strcmp(client->uri, "/") || !strcmp(client->uri, "/media") || !strcmp(client->uri, "/supplies"))
return (respond_http(client, HTTP_STATUS_OK, NULL, "text/html", 0));
else
return (respond_http(client, HTTP_STATUS_NOT_FOUND, NULL, NULL, 0));
* Show web status page...
*/
+ _ipp_job_t *job; /* Current job */
+ int i; /* Looping var */
+ _ipp_preason_t reason; /* Current reason */
+ static const char * const reasons[] =
+ { /* Reason strings */
+ "Other",
+ "Cover Open",
+ "Input Tray Missing",
+ "Marker Supply Empty",
+ "Marker Supply Low",
+ "Marker Waste Almost Full",
+ "Marker Waste Full",
+ "Media Empty",
+ "Media Jam",
+ "Media Low",
+ "Media Needed",
+ "Moving to Paused",
+ "Paused",
+ "Spool Area Full",
+ "Toner Empty",
+ "Toner Low"
+ };
+
+ if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+ return (0);
+
+ html_header(client, client->printer->name);
+ html_printf(client,
+ "<p><img align=\"right\" src=\"/icon.png\" width=\"64\" height=\"64\"><b>ippserver (" CUPS_SVERSION ")</b></p>\n"
+ "<p>%s, %d job(s).", client->printer->state == IPP_PSTATE_IDLE ? "Idle" : client->printer->state == IPP_PSTATE_PROCESSING ? "Printing" : "Stopped", cupsArrayCount(client->printer->jobs));
+ for (i = 0, reason = 1; i < (int)(sizeof(reasons) / sizeof(reasons[0])); i ++, reason <<= 1)
+ if (client->printer->state_reasons & reason)
+ html_printf(client, "\n<br> %s", reasons[i]);
+ html_printf(client, "</p>\n");
+
+ if (cupsArrayCount(client->printer->jobs) > 0)
+ {
+ _cupsRWLockRead(&(client->printer->rwlock));
+
+ html_printf(client, "<table class=\"striped\" summary=\"Jobs\"><thead><tr><th>Job #</th><th>Name</th><th>Owner</th><th>When</th></tr></thead><tbody>\n");
+ for (job = (_ipp_job_t *)cupsArrayFirst(client->printer->jobs); job; job = (_ipp_job_t *)cupsArrayNext(client->printer->jobs))
+ {
+ char when[256], /* When job queued/started/finished */
+ hhmmss[64]; /* Time HH:MM:SS */
+
+ switch (job->state)
+ {
+ case IPP_JSTATE_PENDING :
+ case IPP_JSTATE_HELD :
+ snprintf(when, sizeof(when), "Queued at %s", time_string(job->created, hhmmss, sizeof(hhmmss)));
+ break;
+ case IPP_JSTATE_PROCESSING :
+ case IPP_JSTATE_STOPPED :
+ snprintf(when, sizeof(when), "Started at %s", time_string(job->processing, hhmmss, sizeof(hhmmss)));
+ break;
+ case IPP_JSTATE_ABORTED :
+ snprintf(when, sizeof(when), "Aborted at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+ break;
+ case IPP_JSTATE_CANCELED :
+ snprintf(when, sizeof(when), "Canceled at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+ break;
+ case IPP_JSTATE_COMPLETED :
+ snprintf(when, sizeof(when), "Completed at %s", time_string(job->completed, hhmmss, sizeof(hhmmss)));
+ break;
+ }
+
+ html_printf(client, "<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td></tr>\n", job->id, job->name, job->username, when);
+ }
+ html_printf(client, "</tbody></table>\n");
+
+ _cupsRWUnlock(&(client->printer->rwlock));
+ }
+ html_footer(client);
+
+ return (1);
+ }
+ else if (!strcmp(client->uri, "/media"))
+ {
+ /*
+ * Show web media page...
+ */
+
+ int i, /* Looping var */
+ num_options; /* Number of form options */
+ cups_option_t *options; /* Form options */
+ static const char * const sizes[] =
+ { /* Size strings */
+ "ISO A4",
+ "ISO A5",
+ "ISO A6",
+ "DL Envelope",
+ "US Legal",
+ "US Letter",
+ "#10 Envelope",
+ "3x5 Photo",
+ "3.5x5 Photo",
+ "4x6 Photo",
+ "5x7 Photo"
+ };
+ static const char * const types[] =
+ /* Type strings */
+ {
+ "Auto",
+ "Cardstock",
+ "Envelope",
+ "Labels",
+ "Other",
+ "Glossy Photo",
+ "High-Gloss Photo",
+ "Matte Photo",
+ "Satin Photo",
+ "Semi-Gloss Photo",
+ "Plain",
+ "Letterhead",
+ "Transparency"
+ };
+ static const int sheets[] = /* Number of sheets */
+ {
+ 250,
+ 100,
+ 25,
+ 5,
+ 0
+ };
+
if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
return (0);
+ html_header(client, client->printer->name);
+
+ if ((num_options = parse_options(client, &options)) > 0)
+ {
+ /*
+ * WARNING: A real printer/server implementation MUST NOT implement
+ * media updates via a GET request - GET requests are supposed to be
+ * idempotent (without side-effects) and we obviously are not
+ * authenticating access here. This form is provided solely to
+ * enable testing and development!
+ */
+
+ const char *val; /* Form value */
+
+ if ((val = cupsGetOption("main_size", num_options, options)) != NULL)
+ client->printer->main_size = atoi(val);
+ if ((val = cupsGetOption("main_type", num_options, options)) != NULL)
+ client->printer->main_type = atoi(val);
+ if ((val = cupsGetOption("main_level", num_options, options)) != NULL)
+ client->printer->main_level = atoi(val);
+
+ if ((val = cupsGetOption("envelope_size", num_options, options)) != NULL)
+ client->printer->envelope_size = atoi(val);
+ if ((val = cupsGetOption("envelope_level", num_options, options)) != NULL)
+ client->printer->envelope_level = atoi(val);
+
+ if ((val = cupsGetOption("photo_size", num_options, options)) != NULL)
+ client->printer->photo_size = atoi(val);
+ if ((val = cupsGetOption("photo_type", num_options, options)) != NULL)
+ client->printer->photo_type = atoi(val);
+ if ((val = cupsGetOption("photo_level", num_options, options)) != NULL)
+ client->printer->photo_level = atoi(val);
+
+ if ((client->printer->main_level < 100 && client->printer->main_level > 0) || (client->printer->envelope_level < 25 && client->printer->envelope_level > 0) || (client->printer->photo_level < 25 && client->printer->photo_level > 0))
+ client->printer->state_reasons |= _IPP_PREASON_MEDIA_LOW;
+ else
+ client->printer->state_reasons &= (_ipp_preason_t)~_IPP_PREASON_MEDIA_LOW;
+
+ if ((client->printer->main_level == 0 && client->printer->main_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->envelope_level == 0 && client->printer->envelope_size > _IPP_MEDIA_SIZE_NONE) || (client->printer->photo_level == 0 && client->printer->photo_size > _IPP_MEDIA_SIZE_NONE))
+ {
+ client->printer->state_reasons |= _IPP_PREASON_MEDIA_EMPTY;
+ if (client->printer->active_job)
+ client->printer->state_reasons |= _IPP_PREASON_MEDIA_NEEDED;
+ }
+ else
+ client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MEDIA_EMPTY | _IPP_PREASON_MEDIA_NEEDED);
+
+ html_printf(client, "<blockquote>Media updated.</blockquote>\n");
+ }
+
+ html_printf(client, "<form method=\"GET\" action=\"/media\">\n");
+
+ html_printf(client, "<table class=\"form\" summary=\"Media\">\n");
+ html_printf(client, "<tr><th>Main Tray:</th><td><select name=\"main_size\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+ if (!strstr(sizes[i], "Envelope") && !strstr(sizes[i], "Photo"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->main_size ? " selected" : "", sizes[i]);
+ html_printf(client, "</select> <select name=\"main_type\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++)
+ if (!strstr(types[i], "Photo"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->main_type ? " selected" : "", types[i]);
+ html_printf(client, "</select> <select name=\"main_level\">");
+ for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+ html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->main_level ? " selected" : "", sheets[i]);
+ html_printf(client, "</select></td></tr>\n");
+
html_printf(client,
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" "
- "\"http://www.w3.org/TR/html4/strict.dtd\">\n"
- "<html>\n"
- "<head>\n"
- "<title>%s</title>\n"
- "<link rel=\"SHORTCUT ICON\" href=\"/icon.png\" "
- "type=\"image/png\">\n"
- "</head>\n"
- "<body>\n"
- "</body>\n"
- "<h1><img align=\"right\" src=\"/icon.png\">%s</h1>\n"
- "<p>%s, %d job(s).</p>\n"
- "</body>\n"
- "</html>\n",
- client->printer->name, client->printer->name,
- client->printer->state == IPP_PSTATE_IDLE ? "Idle" :
- client->printer->state == IPP_PSTATE_PROCESSING ?
- "Printing" : "Stopped",
- cupsArrayCount(client->printer->jobs));
- httpWrite2(client->http, "", 0);
+ "<tr><th>Envelope Feeder:</th><td><select name=\"envelope_size\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+ if (strstr(sizes[i], "Envelope"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->envelope_size ? " selected" : "", sizes[i]);
+ html_printf(client, "</select> <select name=\"envelope_level\">");
+ for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+ html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->envelope_level ? " selected" : "", sheets[i]);
+ html_printf(client, "</select></td></tr>\n");
+
+ html_printf(client,
+ "<tr><th>Photo Tray:</th><td><select name=\"photo_size\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(sizes) / sizeof(sizes[0])); i ++)
+ if (strstr(sizes[i], "Photo"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->photo_size ? " selected" : "", sizes[i]);
+ html_printf(client, "</select> <select name=\"photo_type\"><option value=\"-1\">None</option>");
+ for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i ++)
+ if (strstr(types[i], "Photo"))
+ html_printf(client, "<option value=\"%d\"%s>%s</option>", i, i == client->printer->photo_type ? " selected" : "", types[i]);
+ html_printf(client, "</select> <select name=\"photo_level\">");
+ for (i = 0; i < (int)(sizeof(sheets) / sizeof(sheets[0])); i ++)
+ html_printf(client, "<option value=\"%d\"%s>%d sheets</option>", sheets[i], sheets[i] == client->printer->photo_level ? " selected" : "", sheets[i]);
+ html_printf(client, "</select></td></tr>\n");
+
+ html_printf(client, "<tr><td></td><td><input type=\"submit\" value=\"Update Media\"></td></tr></table></form>\n");
+ html_footer(client);
+
+ return (1);
+ }
+ else if (!strcmp(client->uri, "/supplies"))
+ {
+ /*
+ * Show web supplies page...
+ */
+
+ int i, j, /* Looping vars */
+ num_options; /* Number of form options */
+ cups_option_t *options; /* Form options */
+ static const int levels[] = { 0, 5, 10, 25, 50, 75, 90, 95, 100 };
+
+ if (!respond_http(client, HTTP_STATUS_OK, encoding, "text/html", 0))
+ return (0);
+
+ html_header(client, client->printer->name);
+
+ if ((num_options = parse_options(client, &options)) > 0)
+ {
+ /*
+ * WARNING: A real printer/server implementation MUST NOT implement
+ * supply updates via a GET request - GET requests are supposed to be
+ * idempotent (without side-effects) and we obviously are not
+ * authenticating access here. This form is provided solely to
+ * enable testing and development!
+ */
+
+ char name[64]; /* Form field */
+ const char *val; /* Form value */
+
+ client->printer->state_reasons &= (_ipp_preason_t)~(_IPP_PREASON_MARKER_SUPPLY_EMPTY | _IPP_PREASON_MARKER_SUPPLY_LOW | _IPP_PREASON_MARKER_WASTE_ALMOST_FULL | _IPP_PREASON_MARKER_WASTE_FULL | _IPP_PREASON_TONER_EMPTY | _IPP_PREASON_TONER_LOW);
+
+ for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++)
+ {
+ snprintf(name, sizeof(name), "supply_%d", i);
+ if ((val = cupsGetOption(name, num_options, options)) != NULL)
+ {
+ int level = client->printer->supplies[i] = atoi(val);
+ /* New level */
+
+ if (i < 4)
+ {
+ if (level == 0)
+ client->printer->state_reasons |= _IPP_PREASON_TONER_EMPTY;
+ else if (level < 10)
+ client->printer->state_reasons |= _IPP_PREASON_TONER_LOW;
+ }
+ else
+ {
+ if (level == 100)
+ client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_FULL;
+ else if (level > 90)
+ client->printer->state_reasons |= _IPP_PREASON_MARKER_WASTE_ALMOST_FULL;
+ }
+ }
+ }
+
+ html_printf(client, "<blockquote>Supplies updated.</blockquote>\n");
+ }
+
+ html_printf(client, "<form method=\"GET\" action=\"/supplies\">\n");
+
+ html_printf(client, "<table class=\"form\" summary=\"Supplies\">\n");
+ for (i = 0; i < (int)(sizeof(printer_supplies) / sizeof(printer_supplies[0])); i ++)
+ {
+ html_printf(client, "<tr><th>%s:</th><td><select name=\"supply_%d\">", printer_supplies[i], i);
+ for (j = 0; j < (int)(sizeof(levels) / sizeof(levels[0])); j ++)
+ html_printf(client, "<option value=\"%d\"%s>%d%%</option>", levels[j], levels[j] == client->printer->supplies[i] ? " selected" : "", levels[j]);
+ html_printf(client, "</select></td></tr>\n");
+ }
+ html_printf(client, "<tr><td></td><td><input type=\"submit\" value=\"Update Supplies\"></td></tr>\n</table>\n</form>\n");
+ html_footer(client);
return (1);
}
uri = NULL;
if (charset &&
- _cups_strcasecmp(ippGetString(charset, 0, NULL), "us-ascii") &&
- _cups_strcasecmp(ippGetString(charset, 0, NULL), "utf-8"))
+ strcasecmp(ippGetString(charset, 0, NULL), "us-ascii") &&
+ strcasecmp(ippGetString(charset, 0, NULL), "utf-8"))
{
/*
* Bad character set...
ipp_get_printer_attributes(client);
break;
+ case IPP_OP_CLOSE_JOB :
+ ipp_close_job(client);
+ break;
+
+ case IPP_OP_IDENTIFY_PRINTER :
+ ipp_identify_printer(client);
+ break;
+
default :
respond_ipp(client, IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED,
"Operation not supported.");
{
job->state = IPP_JSTATE_PROCESSING;
job->printer->state = IPP_PSTATE_PROCESSING;
+ job->processing = time(NULL);
+
+ while (job->printer->state_reasons & _IPP_PREASON_MEDIA_EMPTY)
+ {
+ job->printer->state_reasons |= _IPP_PREASON_MEDIA_NEEDED;
+
+ sleep(1);
+ }
+
+ job->printer->state_reasons &= (_ipp_preason_t)~_IPP_PREASON_MEDIA_NEEDED;
if (job->printer->command)
{
status; /* Exit status */
time_t start, /* Start time */
end; /* End time */
+ char *myargv[3], /* Command-line arguments */
+ *myenvp[200]; /* Environment variables */
+ int myenvc; /* Number of environment variables */
+ ipp_attribute_t *attr; /* Job attribute */
+ char val[1280], /* IPP_NAME=value */
+ *valptr; /* Pointer into string */
fprintf(stderr, "Running command \"%s %s\".\n", job->printer->command,
job->filename);
time(&start);
+ /*
+ * Setup the command-line arguments...
+ */
+
+ myargv[0] = job->printer->command;
+ myargv[1] = job->filename;
+ myargv[2] = NULL;
+
+ /*
+ * Copy the current environment, then add ENV variables for every Job
+ * attribute...
+ */
+
+ for (myenvc = 0; environ[myenvc] && myenvc < (int)(sizeof(myenvp) / sizeof(myenvp[0]) - 1); myenvc ++)
+ myenvp[myenvc] = strdup(environ[myenvc]);
+
+ for (attr = ippFirstAttribute(job->attrs); attr && myenvc < (int)(sizeof(myenvp) / sizeof(myenvp[0]) - 1); attr = ippNextAttribute(job->attrs))
+ {
+ /*
+ * Convert "attribute-name" to "IPP_ATTRIBUTE_NAME=" and then add the
+ * value(s) from the attribute.
+ */
+
+ const char *name = ippGetName(attr);
+ if (!name)
+ continue;
+
+ valptr = val;
+ *valptr++ = 'I';
+ *valptr++ = 'P';
+ *valptr++ = 'P';
+ *valptr++ = '_';
+ while (*name && valptr < (val + sizeof(val) - 2))
+ {
+ if (*name == '-')
+ *valptr++ = '_';
+ else
+ *valptr++ = (char)toupper(*name & 255);
+
+ name ++;
+ }
+ *valptr++ = '=';
+ ippAttributeString(attr, valptr, sizeof(val) - (size_t)(valptr - val));
+
+ myenvp[myenvc++] = strdup(val);
+ }
+ myenvp[myenvc] = NULL;
+
+ /*
+ * Now run the program...
+ */
+
+#ifdef WIN32
+ status = _spawnvpe(_P_WAIT, job->printer->command, myargv, myenvp);
+#else
if ((pid = fork()) == 0)
{
/*
* Child comes here...
*/
- execlp(job->printer->command, job->printer->command, job->filename,
- (void *)NULL);
+ execve(job->printer->command, myargv, myenvp);
exit(errno);
}
else if (pid < 0)
*/
perror("Unable to start job processing command");
+ status = -1;
}
else
{
+ /*
+ * Free memory used for environment...
+ */
+
+ while (myenvc > 0)
+ free(myenvp[-- myenvc]);
+
/*
* Wait for child to complete...
*/
-#ifdef HAVE_WAITPID
+# ifdef HAVE_WAITPID
while (waitpid(pid, &status, 0) < 0);
-#else
+# else
while (wait(&status) < 0);
-#endif /* HAVE_WAITPID */
+# endif /* HAVE_WAITPID */
+ }
+#endif /* WIN32 */
- if (status)
- {
- if (WIFEXITED(status))
- fprintf(stderr, "Command \"%s\" exited with status %d.\n",
- job->printer->command, WEXITSTATUS(status));
- else
- fprintf(stderr, "Command \"%s\" terminated with signal %d.\n",
- job->printer->command, WTERMSIG(status));
- }
+ if (status)
+ {
+#ifndef WIN32
+ if (WIFEXITED(status))
+#endif /* !WIN32 */
+ fprintf(stderr, "Command \"%s\" exited with status %d.\n",
+ job->printer->command, WEXITSTATUS(status));
+#ifndef WIN32
else
- fprintf(stderr, "Command \"%s\" completed successfully.\n",
- job->printer->command);
+ fprintf(stderr, "Command \"%s\" terminated with signal %d.\n",
+ job->printer->command, WTERMSIG(status));
+#endif /* !WIN32 */
+ job->state = IPP_JSTATE_ABORTED;
}
+ else if (status < 0)
+ job->state = IPP_JSTATE_ABORTED;
+ else
+ fprintf(stderr, "Command \"%s\" completed successfully.\n",
+ job->printer->command);
/*
* Make sure processing takes at least 5 seconds...
* Sleep for a random amount of time to simulate job processing.
*/
- sleep(5 + (rand() % 11));
+ sleep((unsigned)(5 + (rand() % 11)));
}
if (job->cancel)
job->state = IPP_JSTATE_CANCELED;
- else
+ else if (job->state == IPP_JSTATE_PROCESSING)
job->state = IPP_JSTATE_COMPLETED;
job->completed = time(NULL);
const char *model, /* I - Model name */
const char *formats, /* I - Supported formats */
const char *adminurl, /* I - Web interface URL */
+ const char *uuid, /* I - Printer UUID */
int color, /* I - 1 = color, 0 = monochrome */
int duplex, /* I - 1 = duplex, 0 = simplex */
const char *subtype) /* I - Service subtype */
make);
TXTRecordSetValue(&(printer->ipp_txt), "usb_MDL", (uint8_t)strlen(model),
model);
+ TXTRecordSetValue(&(printer->ipp_txt), "UUID", (uint8_t)strlen(uuid), uuid);
+# ifdef HAVE_SSL
+ TXTRecordSetValue(&(printer->ipp_txt), "TLS", 3, "1.2");
+# endif /* HAVE_SSL */
/*
* Create a shared service reference for Bonjour...
* Format an error message...
*/
- if (!type && !length && code != HTTP_STATUS_OK)
+ if (!type && !length && code != HTTP_STATUS_OK && code != HTTP_STATUS_SWITCHING_PROTOCOLS)
{
snprintf(message, sizeof(message), "%d - %s\n", code, httpStatus(code));
}
+/*
+ * 'time_string()' - Return the local time in hours, minutes, and seconds.
+ */
+
+static char *
+time_string(time_t tv, /* I - Time value */
+ char *buffer, /* I - Buffer */
+ size_t bufsize) /* I - Size of buffer */
+{
+ struct tm *curtime = localtime(&tv);
+ /* Local time */
+
+ strftime(buffer, bufsize, "%X", curtime);
+ return (buffer);
+}
+
+
/*
* 'usage()' - Show program usage.
*/
* Check operation attributes...
*/
- if ((attr = ippFindAttribute(client->request, "compression",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "compression", IPP_TAG_ZERO)) != NULL)
{
/*
* If compression is specified, only accept a supported value in a Print-Job
}
else
{
- fprintf(stderr, "%s %s compression=\"%s\"\n",
- client->hostname, op_name, compression);
+ fprintf(stderr, "%s %s compression=\"%s\"\n", client->hostname, op_name, compression);
+
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_KEYWORD, "compression-supplied", NULL, compression);
if (strcmp(compression, "none"))
+ {
+ if (Verbosity)
+ fprintf(stderr, "Receiving job file with \"%s\" compression.\n", compression);
httpSetField(client->http, HTTP_FIELD_CONTENT_ENCODING, compression);
+ }
}
}
* Is it a format we support?
*/
- if ((attr = ippFindAttribute(client->request, "document-format",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "document-format", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_MIMETYPE ||
ippGetGroupTag(attr) != IPP_TAG_OPERATION)
fprintf(stderr, "%s %s document-format=\"%s\"\n",
client->hostname, op_name, format);
+
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-supplied", NULL, format);
}
}
else
{
- format = ippGetString(ippFindAttribute(client->printer->attrs,
- "document-format-default",
- IPP_TAG_MIMETYPE), 0, NULL);
+ format = ippGetString(ippFindAttribute(client->printer->attrs, "document-format-default", IPP_TAG_MIMETYPE), 0, NULL);
if (!format)
format = "application/octet-stream"; /* Should never happen */
- attr = ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE,
- "document-format", NULL, format);
+ attr = ippAddString(client->request, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format", NULL, format);
}
- if (!strcmp(format, "application/octet-stream") &&
- (ippGetOperation(client->request) == IPP_OP_PRINT_JOB ||
- ippGetOperation(client->request) == IPP_OP_SEND_DOCUMENT))
+ if (!strcmp(format, "application/octet-stream") && (ippGetOperation(client->request) == IPP_OP_PRINT_JOB || ippGetOperation(client->request) == IPP_OP_SEND_DOCUMENT))
{
/*
- * Auto-type the file using the first 4 bytes of the file...
+ * Auto-type the file using the first 8 bytes of the file...
*/
- unsigned char header[4]; /* First 4 bytes of file */
+ unsigned char header[8]; /* First 8 bytes of file */
memset(header, 0, sizeof(header));
httpPeek(client->http, (char *)header, sizeof(header));
format = "application/pdf";
else if (!memcmp(header, "%!", 2))
format = "application/postscript";
- else if (!memcmp(header, "\377\330\377", 3) &&
- header[3] >= 0xe0 && header[3] <= 0xef)
+ else if (!memcmp(header, "\377\330\377", 3) && header[3] >= 0xe0 && header[3] <= 0xef)
format = "image/jpeg";
else if (!memcmp(header, "\211PNG", 4))
format = "image/png";
+ else if (!memcmp(header, "RAS2", 4))
+ format = "image/pwg-raster";
+ else if (!memcmp(header, "UNIRAST", 8))
+ format = "image/urf";
+ else
+ format = NULL;
if (format)
+ {
fprintf(stderr, "%s %s Auto-typed document-format=\"%s\"\n",
client->hostname, op_name, format);
- if (!attr)
- attr = ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE,
- "document-format", NULL, format);
- else
- ippSetString(client->request, &attr, 0, format);
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format-detected", NULL, format);
+ }
}
- if (op != IPP_OP_CREATE_JOB &&
- (supported = ippFindAttribute(client->printer->attrs,
- "document-format-supported",
- IPP_TAG_MIMETYPE)) != NULL &&
- !ippContainsString(supported, format))
+ if (op != IPP_OP_CREATE_JOB && (supported = ippFindAttribute(client->printer->attrs, "document-format-supported", IPP_TAG_MIMETYPE)) != NULL && !ippContainsString(supported, format))
{
respond_unsupported(client, attr);
valid = 0;
}
+ /*
+ * document-name
+ */
+
+ if ((attr = ippFindAttribute(client->request, "document-name", IPP_TAG_NAME)) != NULL)
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "document-name-supplied", NULL, ippGetString(attr, 0, NULL));
+
return (valid);
}
* Check the various job template attributes...
*/
- if ((attr = ippFindAttribute(client->request, "copies",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "copies", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER ||
ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 999)
}
}
- if ((attr = ippFindAttribute(client->request, "ipp-attribute-fidelity",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "ipp-attribute-fidelity", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_BOOLEAN)
{
}
}
- if ((attr = ippFindAttribute(client->request, "job-hold-until",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "job-hold-until", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 ||
(ippGetValueTag(attr) != IPP_TAG_NAME &&
}
}
- if ((attr = ippFindAttribute(client->request, "job-name",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "job-impressions", IPP_TAG_ZERO)) != NULL)
+ {
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER || ippGetInteger(attr, 0) < 0)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
+
+ if ((attr = ippFindAttribute(client->request, "job-name", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 ||
(ippGetValueTag(attr) != IPP_TAG_NAME &&
respond_unsupported(client, attr);
valid = 0;
}
+
+ ippSetGroupTag(client->request, &attr, IPP_TAG_JOB);
}
+ else
+ ippAddString(client->request, IPP_TAG_JOB, IPP_TAG_NAME, "job-name", NULL, "Untitled");
- if ((attr = ippFindAttribute(client->request, "job-priority",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "job-priority", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_INTEGER ||
ippGetInteger(attr, 0) < 1 || ippGetInteger(attr, 0) > 100)
}
}
- if ((attr = ippFindAttribute(client->request, "job-sheets",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "job-sheets", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 ||
(ippGetValueTag(attr) != IPP_TAG_NAME &&
}
}
- if ((attr = ippFindAttribute(client->request, "media",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "media", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 ||
(ippGetValueTag(attr) != IPP_TAG_NAME &&
}
}
- if ((attr = ippFindAttribute(client->request, "media-col",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "media-col", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 ||
ippGetValueTag(attr) != IPP_TAG_BEGIN_COLLECTION)
/* TODO: check for valid media-col */
}
- if ((attr = ippFindAttribute(client->request, "multiple-document-handling",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "multiple-document-handling", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD ||
(strcmp(ippGetString(attr, 0, NULL),
}
}
- if ((attr = ippFindAttribute(client->request, "orientation-requested",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "orientation-requested", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM ||
ippGetInteger(attr, 0) < IPP_ORIENT_PORTRAIT ||
}
}
- if ((attr = ippFindAttribute(client->request, "page-ranges",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "page-ranges", IPP_TAG_ZERO)) != NULL)
{
- respond_unsupported(client, attr);
+ if (ippGetValueTag(attr) != IPP_TAG_RANGE)
+ {
+ respond_unsupported(client, attr);
valid = 0;
+ }
}
- if ((attr = ippFindAttribute(client->request, "print-quality",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "print-quality", IPP_TAG_ZERO)) != NULL)
{
if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_ENUM ||
ippGetInteger(attr, 0) < IPP_QUALITY_DRAFT ||
}
}
- if ((attr = ippFindAttribute(client->request, "printer-resolution",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "printer-resolution", IPP_TAG_ZERO)) != NULL)
{
- respond_unsupported(client, attr);
- valid = 0;
+ supported = ippFindAttribute(client->printer->attrs, "printer-resolution-supported", IPP_TAG_RESOLUTION);
+
+ if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_RESOLUTION ||
+ !supported)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ else
+ {
+ int count, /* Number of supported values */
+ xdpi, /* Horizontal resolution for job template attribute */
+ ydpi, /* Vertical resolution for job template attribute */
+ sydpi; /* Vertical resolution for supported value */
+ ipp_res_t units, /* Units for job template attribute */
+ sunits; /* Units for supported value */
+
+ xdpi = ippGetResolution(attr, 0, &ydpi, &units);
+ count = ippGetCount(supported);
+
+ for (i = 0; i < count; i ++)
+ {
+ if (xdpi == ippGetResolution(supported, i, &sydpi, &sunits) && ydpi == sydpi && units == sunits)
+ break;
+ }
+
+ if (i >= count)
+ {
+ respond_unsupported(client, attr);
+ valid = 0;
+ }
+ }
}
- if ((attr = ippFindAttribute(client->request, "sides",
- IPP_TAG_ZERO)) != NULL)
+ if ((attr = ippFindAttribute(client->request, "sides", IPP_TAG_ZERO)) != NULL)
{
- const char *sides = NULL; /* "sides" value... */
+ const char *sides = ippGetString(attr, 0, NULL);
+ /* "sides" value... */
if (ippGetCount(attr) != 1 || ippGetValueTag(attr) != IPP_TAG_KEYWORD)
{
respond_unsupported(client, attr);
valid = 0;
}
-
- sides = ippGetString(attr, 0, NULL);
-
- if ((supported = ippFindAttribute(client->printer->attrs, "sides-supported",
- IPP_TAG_KEYWORD)) != NULL)
+ else if ((supported = ippFindAttribute(client->printer->attrs, "sides-supported", IPP_TAG_KEYWORD)) != NULL)
{
if (!ippContainsString(supported, sides))
{
/*
- * End of "$Id: ippserver.c 11986 2014-07-02 15:52:01Z msweet $".
+ * End of "$Id: ippserver.c 12136 2014-08-29 15:19:40Z msweet $".
*/
--- /dev/null
+.\"
+.\" "$Id$"
+.\"
+.\" ippserver man page for CUPS.
+.\"
+.\" Copyright 2014 by Apple Inc.
+.\"
+.\" These coded instructions, statements, and computer programs are the
+.\" property of Apple Inc. and are protected by Federal copyright
+.\" law. Distribution and use rights are outlined in the file "LICENSE.txt"
+.\" which should have been included with this file. If this file is
+.\" file is missing or damaged, see the license at "http://www.cups.org/".
+.\"
+.TH ippserver 1 "CUPS" "28 August 2014" "Apple Inc."
+.SH NAME
+ippserver \- a simple internet printing protocol server
+.SH SYNOPSIS
+.B ippserver
+[
+.B \-2
+] [
+.B \-M
+.I manufacturer
+] [
+.B \-P
+] [
+.B \-c
+.I command
+] [
+.B \-d
+.I spool-directory
+] [
+.B \-f
+.I type/subtype[,...]
+] [
+.B \-h
+] [
+.B \-i
+.I iconfile.png
+] [
+.B \-k
+] [
+.B \-l
+.I location
+] [
+.B \-m
+.I model
+] [
+.B \-n
+.I hostname
+] [
+.B \-p
+.I port
+] [
+.B \-r
+.I subtype
+] [
+.B \-s
+.I speed[,color-speed]
+] [
+.B \-v[vvv]
+]
+.I service-name
+.SH DESCRIPTION
+.B ippserver
+is a simple Internet Printing Protocol (IPP) server conforming to the IPP Everywhere (PWG 5100.14) specification. It can be used to test client software or act as a very basic print server that runs a command for every job that is printed.
+.SH OPTIONS
+The following options are recognized by
+.B ippserver:
+.TP 5
+.B \-2
+Report support for two-sided (duplex) printing.
+.TP 5
+\fB\-M \fImanufacturer\fR
+Set the manufacturer of the printer.
+The default is "Test".
+.TP 5
+.B \-P
+Report support for PIN printing.
+.TP 5
+\fB\-c \fIcommand\fR
+Run the specified command for each document that is printed.
+.TP 5
+\fB\-d \fIspool-directory\fR
+Specifies the directory that will hold the print files.
+The default is a directory under the user's current temporary directory.
+.TP 5
+\fB\-f \fItype/subtype[,...]\fR
+Specifies a list of MIME media types that the server will accept.
+The default is "application/pdf,image/jpeg,image/pwg-raster".
+.TP 5
+.B \-h
+Shows program help.
+.TP 5
+\fB\-i \fIiconfile.png\fR
+Specifies the printer icon file for the server.
+The default is "printer.png".
+.TP 5
+.B \-k
+Keeps the print documents in the spool directory rather than deleting them.
+.TP 5
+\fB\-l \fIlocation\fR
+Specifies the human-readable location string that is reported by the server.
+The default is the empty string.
+.TP 5
+\fB\-m \fImodel\fR
+Specifies the model name of the printer.
+The default is "Printer".
+.TP 5
+\fB\-n \fIhostname\fR
+Specifies the hostname that is reported by the server.
+The default is the name returned by the
+.BR hostname (1)
+command.
+.TP 5
+\fB\-p \fIport\fR
+Specifies the port number to listen on.
+The default is a user-specific number from 8000 to 8999.
+.TP 5
+\fB\-r \fIsubtype\fR
+Specifies the Bonjour subtype(s) to advertise.
+Separate multiple subtypes with a comma.
+The default is "_print".
+.TP 5
+\fB\-s \fIspeed[,color-speed]\fR
+Specifies the printer speed in pages per minute.
+If two numbers are specified and the second number is greater than zero, the server will report support for color printing.
+The default is "10,0".
+.TP 5
+.B \-v[vvv]
+Be (very) verbose when logging activity to the standard output.
+.SH EXIT STATUS
+The
+.B ippserver
+program returns 1 if it is unable to process the command-line arguments or register the IPP service.
+Otherwise
+.B ippserver
+will run continuously until terminated.
+.SH CONFORMING TO
+The
+.B ippserver
+program is unique to CUPS and conforms to the IPP Everywhere (PWG 5100.14) specification.
+.SH ENVIRONMENT
+.B ippserver
+adds environment variables starting with "IPP_" for all IPP Job attributes in the print request.
+For example, when executing a command for an IPP Job containing the "media" Job Template attribute, the "IPP_MEDIA" environment variable will be set to the value of that attribute.
+.LP
+Enumerated values are converted to their keyword equivalents.
+For example, a "print-quality" Job Template attribute with a enum value of 3 will become the "IPP_PRINT_QUALITY" environment variable with a value of "draft".
+.SH EXAMPLES
+Run
+.B ippserver
+with a service name of My Cool Printer:
+.nf
+
+ ippserver "My Cool Printer"
+.fi
+.LP
+Run the
+.BR file (1)
+command whenever a job is sent to the server:
+.nf
+
+ ippserver \-c file "My Cool Printer"
+.fi
+.SH SEE ALSO
+PWG Internet Printing Protocol Workgroup (http://www.pwg.org/ipp)
+.SH COPYRIGHT
+Copyright \[co] 2007-2014 by Apple Inc.
+.\"
+.\" End of "$Id$".
+.\"
/*
- * "$Id: ipptool.c 12031 2014-07-15 19:57:59Z msweet $"
+ * "$Id: ipptool.c 12143 2014-09-02 13:37:30Z msweet $"
*
* ipptool command for CUPS.
*
if (!vars.uri)
{
_cupsLangPuts(stderr, _("ipptool: URI required before test file."));
+ _cupsLangPuts(stderr, argv[i]);
usage();
}
* Name of test...
*/
- get_token(fp, name, sizeof(name), &linenum);
+ get_token(fp, temp, sizeof(temp), &linenum);
+ expand_variables(vars, name, temp, sizeof(name));
}
else if (!_cups_strcasecmp(token, "PAUSE"))
{
{
fputs("<key>Successful</key>\n", outfile);
fputs("<true />\n", outfile);
+ fputs("<key>Skipped</key>\n", outfile);
+ fputs("<true />\n", outfile);
fputs("<key>StatusCode</key>\n", outfile);
print_xml_string(outfile, "string", "skip");
fputs("<key>ResponseAttributes</key>\n", outfile);
set_variable(outfile, vars, expect->define_match, "1");
if (found && expect->define_value)
+ {
+ if (!expect->with_value)
+ {
+ int last = ippGetCount(found) - 1;
+ /* Last element in attribute */
+
+ switch (ippGetValueTag(found))
+ {
+ case IPP_TAG_ENUM :
+ case IPP_TAG_INTEGER :
+ snprintf(buffer, sizeof(buffer), "%d", ippGetInteger(found, last));
+ break;
+
+ case IPP_TAG_BOOLEAN :
+ if (ippGetBoolean(found, last))
+ strlcpy(buffer, "true", sizeof(buffer));
+ else
+ strlcpy(buffer, "false", sizeof(buffer));
+ break;
+
+ case IPP_TAG_RESOLUTION :
+ {
+ int xres, /* Horizontal resolution */
+ yres; /* Vertical resolution */
+ ipp_res_t units; /* Resolution units */
+
+ xres = ippGetResolution(found, last, &yres, &units);
+
+ if (xres == yres)
+ snprintf(buffer, sizeof(buffer), "%d%s", xres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ else
+ snprintf(buffer, sizeof(buffer), "%dx%d%s", xres, yres, units == IPP_RES_PER_INCH ? "dpi" : "dpcm");
+ }
+ break;
+
+ case IPP_TAG_CHARSET :
+ case IPP_TAG_KEYWORD :
+ case IPP_TAG_LANGUAGE :
+ case IPP_TAG_MIMETYPE :
+ case IPP_TAG_NAME :
+ case IPP_TAG_NAMELANG :
+ case IPP_TAG_TEXT :
+ case IPP_TAG_TEXTLANG :
+ case IPP_TAG_URI :
+ case IPP_TAG_URISCHEME :
+ strlcpy(buffer, ippGetString(found, last, NULL), sizeof(buffer));
+ break;
+
+ default :
+ ippAttributeString(found, buffer, sizeof(buffer));
+ break;
+ }
+ }
+
set_variable(outfile, vars, expect->define_value, buffer);
+ }
if (found && expect->repeat_match &&
repeat_count < expect->repeat_limit)
{
printf("%04d]\n", repeat_count);
fflush(stdout);
+
+ if (num_displayed > 0)
+ {
+ for (attrptr = ippFirstAttribute(response); attrptr; attrptr = ippNextAttribute(response))
+ {
+ const char *attrname = ippGetName(attrptr);
+ if (attrname)
+ {
+ for (i = 0; i < num_displayed; i ++)
+ {
+ if (!strcmp(displayed[i], attrname))
+ {
+ print_attr(stdout, _CUPS_OUTPUT_TEST, attrptr, NULL);
+ break;
+ }
+ }
+ }
+ }
+ }
}
sleep((unsigned)repeat_interval);
printf(" status-code = %s (%s)\n", ippErrorString(cupsLastError()),
cupsLastErrorString());
- if (response)
+ if (Verbosity && response)
{
for (attrptr = response->attrs;
attrptr != NULL;
}
}
}
- else if (!prev_pass)
+ else if (!prev_pass && Output != _CUPS_OUTPUT_QUIET)
fprintf(stderr, "%s\n", cupsLastErrorString());
if (prev_pass && Output >= _CUPS_OUTPUT_LIST && !Verbosity &&
}
}
- if (num_displayed > 0 && !Verbosity && response && Output == _CUPS_OUTPUT_TEST)
+ if (num_displayed > 0 && !Verbosity && response && (Output == _CUPS_OUTPUT_TEST || (Output == _CUPS_OUTPUT_PLIST && outfile != stdout)))
{
for (attrptr = response->attrs;
attrptr != NULL;
}
else if (vars)
{
- strlcpy(temp, src + 1, sizeof(temp));
+ if (src[1] == '{')
+ {
+ src += 2;
+ strlcpy(temp, src, sizeof(temp));
+ if ((tempptr = strchr(temp, '}')) != NULL)
+ *tempptr = '\0';
+ else
+ tempptr = temp + strlen(temp);
+ }
+ else
+ {
+ strlcpy(temp, src + 1, sizeof(temp));
- for (tempptr = temp; *tempptr; tempptr ++)
- if (!isalnum(*tempptr & 255) && *tempptr != '-' && *tempptr != '_')
- break;
+ for (tempptr = temp; *tempptr; tempptr ++)
+ if (!isalnum(*tempptr & 255) && *tempptr != '-' && *tempptr != '_')
+ break;
- if (*tempptr)
- *tempptr = '\0';
+ if (*tempptr)
+ *tempptr = '\0';
+ }
if (!strcmp(temp, "uri"))
value = vars->uri;
_cupsLangPuts(stderr, _("Usage: ipptool [options] URI filename [ ... "
"filenameN ]"));
_cupsLangPuts(stderr, _("Options:"));
+ _cupsLangPuts(stderr, _(" --help Show help."));
+ _cupsLangPuts(stderr, _(" --stop-after-include-error\n"
+ " Stop tests after a failed INCLUDE."));
+ _cupsLangPuts(stderr, _(" --version Show version."));
_cupsLangPuts(stderr, _(" -4 Connect using IPv4."));
_cupsLangPuts(stderr, _(" -6 Connect using IPv6."));
_cupsLangPuts(stderr, _(" -C Send requests using "
_cupsLangPuts(stderr, _(" -I Ignore errors."));
_cupsLangPuts(stderr, _(" -L Send requests using "
"content-length."));
+ _cupsLangPuts(stderr, _(" -P filename.plist Produce XML plist to a file and test report to standard output."));
_cupsLangPuts(stderr, _(" -S Test with SSL "
"encryption."));
_cupsLangPuts(stderr, _(" -T seconds Set the receive/send "
"version."));
_cupsLangPuts(stderr, _(" -X Produce XML plist instead "
"of plain text."));
+ _cupsLangPuts(stderr, _(" -c Produce CSV output."));
_cupsLangPuts(stderr, _(" -d name=value Set named variable to "
"value."));
_cupsLangPuts(stderr, _(" -f filename Set default request "
"filename."));
_cupsLangPuts(stderr, _(" -i seconds Repeat the last file with "
"the given time interval."));
+ _cupsLangPuts(stderr, _(" -l Produce plain text output."));
_cupsLangPuts(stderr, _(" -n count Repeat the last file the "
"given number of times."));
_cupsLangPuts(stderr, _(" -q Run silently."));
/*
- * End of "$Id: ipptool.c 12031 2014-07-15 19:57:59Z msweet $".
+ * End of "$Id: ipptool.c 12143 2014-09-02 13:37:30Z msweet $".
*/
#!/bin/sh
#
-# "$Id: run-stp-tests.sh 12065 2014-07-30 17:56:35Z msweet $"
+# "$Id: run-stp-tests.sh 12101 2014-08-20 15:10:51Z msweet $"
#
# Perform the complete set of IPP compliance tests specified in the
# CUPS Software Test Plan.
echo ""
if test `uname` = Darwin -a "x$VALGRIND" = x; then
- DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib
- ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
+ DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
else
$VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
fi
fi
done
+#
+# Log all allocations made by the scheduler...
+#
+if test `uname` = Darwin -a "x$VALGRIND" = x; then
+ malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
+fi
+
#
# Restart the server...
#
kill -HUP $cupsd
while true; do
+ sleep 10
+
running=`../systemv/lpstat -r 2>/dev/null`
if test "x$running" = "xscheduler is running"; then
break
fi
-
- sleep 10
done
description="`lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
fi
#
-# End of "$Id: run-stp-tests.sh 12065 2014-07-30 17:56:35Z msweet $"
+# End of "$Id: run-stp-tests.sh 12101 2014-08-20 15:10:51Z msweet $"
#
/*
- * "$Id: config.h 12031 2014-07-15 19:57:59Z msweet $"
+ * "$Id: config.h 12136 2014-08-29 15:19:40Z msweet $"
*
* Configuration file for CUPS on Windows.
*
- * Copyright 2007-2013 by Apple Inc.
+ * Copyright 2007-2014 by Apple Inc.
* Copyright 1997-2007 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
#define write _write
+/*
+ * Map the POSIX strcasecmp() and strncasecmp() functions to the Win32 stricmp()
+ * and strnicmp() functions...
+ */
+
+#define strcasecmp stricmp
+#define strncasecmp strnicmp
+
+
/*
* Map the POSIX sleep() and usleep() functions to the Win32 Sleep() function...
*/
# define R_OK 04
# define O_RDONLY _O_RDONLY
# define O_WRONLY _O_WRONLY
-# define O_CREATE _O_CREAT
+# define O_CREAT _O_CREAT
# define O_TRUNC _O_TRUNC
/*
- * Do we have domain socket support?
+ * Do we have domain socket support, and if so what is the default one?
*/
#undef CUPS_DEFAULT_DOMAINSOCKET
#define CUPS_STATEDIR "C:/CUPS/run"
+/*
+ * Do we have posix_spawn?
+ */
+
+/* #undef HAVE_POSIX_SPAWN */
+
+
/*
* Do we have ZLIB?
*/
* Do we have PAM stuff?
*/
-#ifndef HAVE_LIBPAM
#define HAVE_LIBPAM 0
-#endif /* !HAVE_LIBPAM */
-
/* #undef HAVE_PAM_PAM_APPL_H */
/* #undef HAVE_PAM_SET_ITEM */
/* #undef HAVE_PAM_SETCRED */
#define HAVE_SSL
+/*
+ * Do we have the gnutls_transport_set_pull_timeout_function function?
+ */
+
+/* #undef HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION */
+
+
/*
* What Security framework headers do we have?
*/
/* #undef HAVE_CSSMERRORSTRING */
+/*
+ * Do we have the SecGenerateSelfSignedCertificate function?
+ */
+
+/* #undef HAVE_SECGENERATESELFSIGNEDCERTIFICATE */
+
+
+/*
+ * Do we have the SecKeychainOpen function?
+ */
+
+/* #undef HAVE_SECKEYCHAINOPEN */
+
+
/*
* Do we have libpaper?
*/
/* #undef HAVE_LAUNCHD */
+/*
+ * Do we have systemd support?
+ */
+
+/* #undef HAVE_SYSTEMD */
+
+
/*
* Various scripting languages...
*/
/* #undef HAVE_DBUS */
/* #undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND */
+/* #undef HAVE_DBUS_THREADS_INIT */
/*
#endif /* !_CUPS_CONFIG_H_ */
/*
- * End of "$Id: config.h 12031 2014-07-15 19:57:59Z msweet $".
+ * End of "$Id: config.h 12136 2014-08-29 15:19:40Z msweet $".
*/
{CB4AA6F2-3E84-45BE-B505-95CD375E8BE3} = {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}\r
EndProjectSection\r
EndProject\r
+Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "sw-ippeveselfcert10", "sw-ippeveselfcert10.vdproj", "{7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ippserver", "ippserver.vcproj", "{82A03BC7-0746-4B85-8908-3C7A3FAA58A9}"\r
+ ProjectSection(ProjectDependencies) = postProject\r
+ {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3} = {CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}\r
+ EndProjectSection\r
+EndProject\r
Global\r
GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
Debug|Win32 = Debug|Win32\r
{B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|Win32.Build.0 = Release|Win32\r
{B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|x64.ActiveCfg = Release|x64\r
{B484DA0C-62C8-4C32-83B6-CCEB58968B85}.Release|x64.Build.0 = Release|x64\r
+ {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Debug|Win32.ActiveCfg = Debug\r
+ {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Debug|Win32.Build.0 = Debug\r
+ {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Debug|x64.ActiveCfg = Debug\r
+ {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Debug|x64.Build.0 = Debug\r
+ {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Release|Win32.ActiveCfg = Release\r
+ {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Release|Win32.Build.0 = Release\r
+ {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Release|x64.ActiveCfg = Release\r
+ {7F6DD7F5-7DCC-4C7A-8647-E253E4E00A37}.Release|x64.Build.0 = Release\r
+ {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|Win32.ActiveCfg = Debug|Win32\r
+ {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|Win32.Build.0 = Debug|Win32\r
+ {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|x64.ActiveCfg = Debug|x64\r
+ {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Debug|x64.Build.0 = Debug|x64\r
+ {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|Win32.ActiveCfg = Release|Win32\r
+ {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|Win32.Build.0 = Release|Win32\r
+ {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|x64.ActiveCfg = Release|x64\r
+ {82A03BC7-0746-4B85-8908-3C7A3FAA58A9}.Release|x64.Build.0 = Release|x64\r
EndGlobalSection\r
GlobalSection(SolutionProperties) = preSolution\r
HideSolutionNode = FALSE\r
--- /dev/null
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+ ProjectType="Visual C++"\r
+ Version="9.00"\r
+ Name="ippserver"\r
+ ProjectGUID="{82A03BC7-0746-4B85-8908-3C7A3FAA58A9}"\r
+ RootNamespace="ippserver"\r
+ Keyword="Win32Proj"\r
+ TargetFrameworkVersion="131072"\r
+ >\r
+ <Platforms>\r
+ <Platform\r
+ Name="Win32"\r
+ />\r
+ <Platform\r
+ Name="x64"\r
+ />\r
+ </Platforms>\r
+ <ToolFiles>\r
+ </ToolFiles>\r
+ <Configurations>\r
+ <Configuration\r
+ Name="Debug|Win32"\r
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\vcnet;..;..\vcnet\regex"\r
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="3"\r
+ RuntimeLibrary="3"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="1"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="4"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="dnssd.lib ws2_32.lib"\r
+ LinkIncremental="2"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Debug|x64"\r
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ Optimization="0"\r
+ AdditionalIncludeDirectories="..\vcnet;..;..\vcnet\regex"\r
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"\r
+ MinimalRebuild="true"\r
+ BasicRuntimeChecks="3"\r
+ RuntimeLibrary="3"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="1"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="dnssd.lib ws2_32.lib"\r
+ LinkIncremental="2"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|Win32"\r
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories="..\vcnet;..;..\vcnet\regex"\r
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"\r
+ RuntimeLibrary="2"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="1"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="dnssd.lib ws2_32.lib"\r
+ LinkIncremental="1"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="1"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ <Configuration\r
+ Name="Release|x64"\r
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"\r
+ ConfigurationType="1"\r
+ CharacterSet="1"\r
+ WholeProgramOptimization="1"\r
+ >\r
+ <Tool\r
+ Name="VCPreBuildEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCCustomBuildTool"\r
+ />\r
+ <Tool\r
+ Name="VCXMLDataGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCWebServiceProxyGeneratorTool"\r
+ />\r
+ <Tool\r
+ Name="VCMIDLTool"\r
+ TargetEnvironment="3"\r
+ />\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ AdditionalIncludeDirectories="..\vcnet;..;..\vcnet\regex"\r
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_DEPRECATE"\r
+ RuntimeLibrary="2"\r
+ UsePrecompiledHeader="0"\r
+ WarningLevel="1"\r
+ Detect64BitPortabilityProblems="false"\r
+ DebugInformationFormat="3"\r
+ />\r
+ <Tool\r
+ Name="VCManagedResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCResourceCompilerTool"\r
+ />\r
+ <Tool\r
+ Name="VCPreLinkEventTool"\r
+ />\r
+ <Tool\r
+ Name="VCLinkerTool"\r
+ AdditionalDependencies="dnssd.lib ws2_32.lib"\r
+ LinkIncremental="1"\r
+ GenerateDebugInformation="true"\r
+ SubSystem="1"\r
+ OptimizeReferences="2"\r
+ EnableCOMDATFolding="2"\r
+ RandomizedBaseAddress="1"\r
+ DataExecutionPrevention="0"\r
+ TargetMachine="17"\r
+ />\r
+ <Tool\r
+ Name="VCALinkTool"\r
+ />\r
+ <Tool\r
+ Name="VCManifestTool"\r
+ />\r
+ <Tool\r
+ Name="VCXDCMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCBscMakeTool"\r
+ />\r
+ <Tool\r
+ Name="VCFxCopTool"\r
+ />\r
+ <Tool\r
+ Name="VCAppVerifierTool"\r
+ />\r
+ <Tool\r
+ Name="VCPostBuildEventTool"\r
+ />\r
+ </Configuration>\r
+ </Configurations>\r
+ <References>\r
+ </References>\r
+ <Files>\r
+ <Filter\r
+ Name="Source Files"\r
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+ UniqueIdentifier="{5129820B-88C2-40AE-BE81-C7957F76540D}"\r
+ >\r
+ <File\r
+ RelativePath="..\test\ippserver.c"\r
+ >\r
+ </File>\r
+ </Filter>\r
+ <Filter\r
+ Name="Header Files"\r
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+ UniqueIdentifier="{CAF4FFBF-7D66-4368-A03A-3FD0971B59A0}"\r
+ >\r
+ </Filter>\r
+ <Filter\r
+ Name="Resource Files"\r
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+ UniqueIdentifier="{17D3B9CD-53D2-47AF-9D2A-4516D777D695}"\r
+ >\r
+ </Filter>\r
+ </Files>\r
+ <Globals>\r
+ </Globals>\r
+</VisualStudioProject>\r
RelativePath=".\config.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\cups\cups-private.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\cups\cups.h"\r
>\r
--- /dev/null
+"DeployProject"\r
+{\r
+"VSVersion" = "3:800"\r
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"\r
+"IsWebType" = "8:FALSE"\r
+"ProjectName" = "8:sw-ippeveselfcert10"\r
+"LanguageId" = "3:1033"\r
+"CodePage" = "3:1252"\r
+"UILanguageId" = "3:1033"\r
+"SccProjectName" = "8:"\r
+"SccLocalPath" = "8:"\r
+"SccAuxPath" = "8:"\r
+"SccProvider" = "8:"\r
+ "Hierarchy"\r
+ {\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_156E3B06B7D14775B28242360FB7D1A0"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_1A1324305D78463BBFC62269C56DCF0B"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_1BCBABF5693841AE92515645BB7765F4"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_1DBDCFABB8DF28E5F75E41EDAE4BF6BE"\r
+ "OwnerKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_27AB74FFFBC7436B9EBC6AE23968CFCC"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_299D5816FF7142F3B2791685551AD1DC"\r
+ "OwnerKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_43D276E6E3054544A6A9828BE66519CD"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_466C1CF41795452A8B76425F8D05D8B8"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_58DC0E72F0944BEFB927AED718CD1660"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_592FC984DBFD494D9FB7DFFEA35AD7A5"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_842C04D73EBC4F5DBC2FD58D5B98D5D1"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_965005559A264140806149D54E2243BB"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_9967519E7058965D4C7DEF47EB39CC50"\r
+ "OwnerKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_9CB71023ADF84278A4A5EBC398F6C9F3"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_9FBF78D7B89EEA843380D5F10E1954D7"\r
+ "OwnerKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+ "OwnerKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+ "OwnerKey" = "8:_58DC0E72F0944BEFB927AED718CD1660"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+ "OwnerKey" = "8:_466C1CF41795452A8B76425F8D05D8B8"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+ "OwnerKey" = "8:_E97571D3FBE048DABDC59B37762D800F"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+ "OwnerKey" = "8:_D02EB13951314EFD9C539150EF8E53B8"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_A9EA3BF89F284AB4853F0682CE277275"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_B7D835B019744E61A7CC37B57B38694E"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_BD5B70C103EF41D9A30CF249D2B93CEB"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_C430646D6E7C4CBDA84F951AE95EB76F"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_D02EB13951314EFD9C539150EF8E53B8"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_D219587BACAC4D5FB4C8010900A781AD"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_D5CD9D9AB1644688A1D54B1589BDF724"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_E3C6C5A7FDD94965B68960844461D5EA"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_E5E464C7DD97439B929E1EA1844F1FF0"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_E97571D3FBE048DABDC59B37762D800F"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ "Entry"\r
+ {\r
+ "MsmKey" = "8:_F22F5380A6E14A43A15A452C7C6F6C07"\r
+ "OwnerKey" = "8:_UNDEFINED"\r
+ "MsmSig" = "8:_UNDEFINED"\r
+ }\r
+ }\r
+ "Configurations"\r
+ {\r
+ "Debug"\r
+ {\r
+ "DisplayName" = "8:Debug"\r
+ "IsDebugOnly" = "11:TRUE"\r
+ "IsReleaseOnly" = "11:FALSE"\r
+ "OutputFilename" = "8:sw-ippeveselfcert10-windows.msi"\r
+ "PackageFilesAs" = "3:2"\r
+ "PackageFileSize" = "3:-2147483648"\r
+ "CabType" = "3:1"\r
+ "Compression" = "3:3"\r
+ "SignOutput" = "11:FALSE"\r
+ "CertificateFile" = "8:"\r
+ "PrivateKeyFile" = "8:"\r
+ "TimeStampServer" = "8:"\r
+ "InstallerBootstrapper" = "3:2"\r
+ "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"\r
+ {\r
+ "Enabled" = "11:TRUE"\r
+ "PromptEnabled" = "11:TRUE"\r
+ "PrerequisitesLocation" = "2:1"\r
+ "Url" = "8:"\r
+ "ComponentsUrl" = "8:"\r
+ "Items"\r
+ {\r
+ "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.3.5.SP1"\r
+ {\r
+ "Name" = "8:.NET Framework 3.5 SP1"\r
+ "ProductCode" = "8:Microsoft.Net.Framework.3.5.SP1"\r
+ }\r
+ "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"\r
+ {\r
+ "Name" = "8:Windows Installer 3.1"\r
+ "ProductCode" = "8:Microsoft.Windows.Installer.3.1"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "Release"\r
+ {\r
+ "DisplayName" = "8:Release"\r
+ "IsDebugOnly" = "11:FALSE"\r
+ "IsReleaseOnly" = "11:TRUE"\r
+ "OutputFilename" = "8:ipptool-windows.msi"\r
+ "PackageFilesAs" = "3:2"\r
+ "PackageFileSize" = "3:-2147483648"\r
+ "CabType" = "3:1"\r
+ "Compression" = "3:3"\r
+ "SignOutput" = "11:FALSE"\r
+ "CertificateFile" = "8:"\r
+ "PrivateKeyFile" = "8:"\r
+ "TimeStampServer" = "8:"\r
+ "InstallerBootstrapper" = "3:2"\r
+ "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"\r
+ {\r
+ "Enabled" = "11:TRUE"\r
+ "PromptEnabled" = "11:TRUE"\r
+ "PrerequisitesLocation" = "2:1"\r
+ "Url" = "8:"\r
+ "ComponentsUrl" = "8:"\r
+ "Items"\r
+ {\r
+ "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Net.Framework.3.5.SP1"\r
+ {\r
+ "Name" = "8:.NET Framework 3.5 SP1"\r
+ "ProductCode" = "8:Microsoft.Net.Framework.3.5.SP1"\r
+ }\r
+ "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"\r
+ {\r
+ "Name" = "8:Windows Installer 3.1"\r
+ "ProductCode" = "8:Microsoft.Windows.Installer.3.1"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "Deployable"\r
+ {\r
+ "CustomAction"\r
+ {\r
+ }\r
+ "DefaultFeature"\r
+ {\r
+ "Name" = "8:DefaultFeature"\r
+ "Title" = "8:"\r
+ "Description" = "8:"\r
+ }\r
+ "ExternalPersistence"\r
+ {\r
+ "LaunchCondition"\r
+ {\r
+ }\r
+ }\r
+ "File"\r
+ {\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_156E3B06B7D14775B28242360FB7D1A0"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\document-tests.bat"\r
+ "TargetName" = "8:document-tests.bat"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1A1324305D78463BBFC62269C56DCF0B"\r
+ {\r
+ "SourcePath" = "8:..\\doc\\help\\man-ipptoolfile.html"\r
+ "TargetName" = "8:man-ipptoolfile.html"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_26743E387598422398CF503F7478F9E1"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1BCBABF5693841AE92515645BB7765F4"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\man-ippserver.html"\r
+ "TargetName" = "8:man-ippserver.html"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_26743E387598422398CF503F7478F9E1"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1DBDCFABB8DF28E5F75E41EDAE4BF6BE"\r
+ {\r
+ "SourcePath" = "8:zlibwapi.dll"\r
+ "TargetName" = "8:zlibwapi.dll"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:TRUE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_27AB74FFFBC7436B9EBC6AE23968CFCC"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\README.txt"\r
+ "TargetName" = "8:README.txt"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_43D276E6E3054544A6A9828BE66519CD"\r
+ {\r
+ "SourcePath" = "8:..\\test\\printer.png"\r
+ "TargetName" = "8:printer.png"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_592FC984DBFD494D9FB7DFFEA35AD7A5"\r
+ {\r
+ "SourcePath" = "8:..\\doc\\help\\man-ippfind.html"\r
+ "TargetName" = "8:man-ippfind.html"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_26743E387598422398CF503F7478F9E1"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_842C04D73EBC4F5DBC2FD58D5B98D5D1"\r
+ {\r
+ "SourcePath" = "8:..\\test\\document-a4.pdf"\r
+ "TargetName" = "8:document-a4.pdf"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_965005559A264140806149D54E2243BB"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\bonjour-access-tests.test"\r
+ "TargetName" = "8:bonjour-access-tests.test"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9967519E7058965D4C7DEF47EB39CC50"\r
+ {\r
+ "SourcePath" = "8:CRYPT32.dll"\r
+ "TargetName" = "8:CRYPT32.dll"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:TRUE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9CB71023ADF84278A4A5EBC398F6C9F3"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\bonjour-tests.bat"\r
+ "TargetName" = "8:bonjour-tests.bat"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9FBF78D7B89EEA843380D5F10E1954D7"\r
+ {\r
+ "SourcePath" = "8:Secur32.dll"\r
+ "TargetName" = "8:Secur32.dll"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:TRUE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A9EA3BF89F284AB4853F0682CE277275"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\bonjour-value-tests.test"\r
+ "TargetName" = "8:bonjour-value-tests.test"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B7D835B019744E61A7CC37B57B38694E"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\document-tests.test"\r
+ "TargetName" = "8:document-tests.test"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BD5B70C103EF41D9A30CF249D2B93CEB"\r
+ {\r
+ "SourcePath" = "8:setdebug.bat"\r
+ "TargetName" = "8:setdebug.bat"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C430646D6E7C4CBDA84F951AE95EB76F"\r
+ {\r
+ "SourcePath" = "8:..\\test\\color.jpg"\r
+ "TargetName" = "8:color.jpg"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D219587BACAC4D5FB4C8010900A781AD"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\ipp-tests.test"\r
+ "TargetName" = "8:ipp-tests.test"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D5CD9D9AB1644688A1D54B1589BDF724"\r
+ {\r
+ "SourcePath" = "8:..\\doc\\help\\man-ipptool.html"\r
+ "TargetName" = "8:man-ipptool.html"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_26743E387598422398CF503F7478F9E1"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E3C6C5A7FDD94965B68960844461D5EA"\r
+ {\r
+ "SourcePath" = "8:..\\LICENSE.txt"\r
+ "TargetName" = "8:LICENSE.txt"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E5E464C7DD97439B929E1EA1844F1FF0"\r
+ {\r
+ "SourcePath" = "8:..\\everywhere\\ipp-tests.bat"\r
+ "TargetName" = "8:ipp-tests.bat"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F22F5380A6E14A43A15A452C7C6F6C07"\r
+ {\r
+ "SourcePath" = "8:..\\test\\document-letter.pdf"\r
+ "TargetName" = "8:document-letter.pdf"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_EB00D0298C7E441EBD0257AC04FB3560"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ }\r
+ "FileType"\r
+ {\r
+ }\r
+ "Folder"\r
+ {\r
+ "{1525181F-901A-416C-8A58-119130FE478E}:_BEC0EAE20C954C78B294B83E6696156E"\r
+ {\r
+ "Name" = "8:#1919"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Property" = "8:ProgramMenuFolder"\r
+ "Folders"\r
+ {\r
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_E379D4EDBAD0460BB876711E9062ADB4"\r
+ {\r
+ "Name" = "8:IPP Everywhere Printer Self-Certification Tools"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Property" = "8:_D115D2F4F12143B09D5FDA447A6A7D04"\r
+ "Folders"\r
+ {\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "{1525181F-901A-416C-8A58-119130FE478E}:_D02CDADE99F344CF92CA1A8D0278861F"\r
+ {\r
+ "Name" = "8:#1916"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Property" = "8:DesktopFolder"\r
+ "Folders"\r
+ {\r
+ }\r
+ }\r
+ "{3C67513D-01DD-4637-8A68-80971EB9504F}:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ {\r
+ "DefaultLocation" = "8:[ProgramFilesFolder]\\sw-ippeveselfcert10"\r
+ "Name" = "8:#1925"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Property" = "8:TARGETDIR"\r
+ "Folders"\r
+ {\r
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_26743E387598422398CF503F7478F9E1"\r
+ {\r
+ "Name" = "8:doc"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Property" = "8:_5CD53B90FF754768B11ECBEB671A1749"\r
+ "Folders"\r
+ {\r
+ }\r
+ }\r
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_EB00D0298C7E441EBD0257AC04FB3560"\r
+ {\r
+ "Name" = "8:ipptool"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Property" = "8:_6F223FB51798428A9F2D64A5A7F2B49C"\r
+ "Folders"\r
+ {\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "LaunchCondition"\r
+ {\r
+ }\r
+ "Locator"\r
+ {\r
+ }\r
+ "MsiBootstrapper"\r
+ {\r
+ "LangId" = "3:1033"\r
+ "RequiresElevation" = "11:FALSE"\r
+ }\r
+ "Product"\r
+ {\r
+ "Name" = "8:Microsoft Visual Studio"\r
+ "ProductName" = "8:IPP Everywhere Printer Self-Certification Tools"\r
+ "ProductCode" = "8:{C08E3AC5-4FBF-40DD-BD19-9BE69A609DAF}"\r
+ "PackageCode" = "8:{25FF31C9-52A0-4838-8F1D-02FB5D5296F4}"\r
+ "UpgradeCode" = "8:{BAB6EBBB-515D-4155-9FEF-D98DA76814CA}"\r
+ "RestartWWWService" = "11:FALSE"\r
+ "RemovePreviousVersions" = "11:TRUE"\r
+ "DetectNewerInstalledVersion" = "11:TRUE"\r
+ "InstallAllUsers" = "11:TRUE"\r
+ "ProductVersion" = "8:14.08.2600"\r
+ "Manufacturer" = "8:Apple Inc."\r
+ "ARPHELPTELEPHONE" = "8:"\r
+ "ARPHELPLINK" = "8:http://www.cups.org/str.php"\r
+ "Title" = "8:sw-ippeveselfcert10"\r
+ "Subject" = "8:"\r
+ "ARPCONTACT" = "8:Apple Inc."\r
+ "Keywords" = "8:IPP, Internet Printing Protocol"\r
+ "ARPCOMMENTS" = "8:IPP Everywhere Printer Self-Certification Tools"\r
+ "ARPURLINFOABOUT" = "8:http://www.cups.org/"\r
+ "ARPPRODUCTICON" = "8:"\r
+ "ARPIconIndex" = "3:0"\r
+ "SearchPath" = "8:"\r
+ "UseSystemSearchPath" = "11:TRUE"\r
+ "TargetPlatform" = "3:0"\r
+ "PreBuildEvent" = "8:"\r
+ "PostBuildEvent" = "8:"\r
+ "RunPostBuildEvent" = "3:0"\r
+ }\r
+ "Registry"\r
+ {\r
+ "HKLM"\r
+ {\r
+ "Keys"\r
+ {\r
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_BC4E66686BCA4F9A8B24B6CF2728DACD"\r
+ {\r
+ "Name" = "8:Software"\r
+ "Condition" = "8:"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "DeleteAtUninstall" = "11:FALSE"\r
+ "Transitive" = "11:FALSE"\r
+ "Keys"\r
+ {\r
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_F9AB9B310C7545D993D690F529048AA2"\r
+ {\r
+ "Name" = "8:cups.org"\r
+ "Condition" = "8:"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "DeleteAtUninstall" = "11:FALSE"\r
+ "Transitive" = "11:FALSE"\r
+ "Keys"\r
+ {\r
+ }\r
+ "Values"\r
+ {\r
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_4E5BAC705A1D44E78C90C6D2A4A7BE20"\r
+ {\r
+ "Name" = "8:installdir"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "ValueTypes" = "3:2"\r
+ "Value" = "8:[TARGETDIR]"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "Values"\r
+ {\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "HKCU"\r
+ {\r
+ "Keys"\r
+ {\r
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_A4C9879F42874B6B92960A55F2D98922"\r
+ {\r
+ "Name" = "8:Software"\r
+ "Condition" = "8:"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "DeleteAtUninstall" = "11:FALSE"\r
+ "Transitive" = "11:FALSE"\r
+ "Keys"\r
+ {\r
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_1ACB03C307FB4B85BB27C9913FB58B09"\r
+ {\r
+ "Name" = "8:[Manufacturer]"\r
+ "Condition" = "8:"\r
+ "AlwaysCreate" = "11:FALSE"\r
+ "DeleteAtUninstall" = "11:FALSE"\r
+ "Transitive" = "11:FALSE"\r
+ "Keys"\r
+ {\r
+ }\r
+ "Values"\r
+ {\r
+ }\r
+ }\r
+ }\r
+ "Values"\r
+ {\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "HKCR"\r
+ {\r
+ "Keys"\r
+ {\r
+ }\r
+ }\r
+ "HKU"\r
+ {\r
+ "Keys"\r
+ {\r
+ }\r
+ }\r
+ "HKPU"\r
+ {\r
+ "Keys"\r
+ {\r
+ }\r
+ }\r
+ }\r
+ "Sequences"\r
+ {\r
+ }\r
+ "Shortcut"\r
+ {\r
+ "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_57BCED85BA5944009F56A11D5A9FBBEE"\r
+ {\r
+ "Name" = "8:ippfind Documentation"\r
+ "Arguments" = "8:"\r
+ "Description" = "8:"\r
+ "ShowCmd" = "3:1"\r
+ "IconIndex" = "3:0"\r
+ "Transitive" = "11:FALSE"\r
+ "Target" = "8:_592FC984DBFD494D9FB7DFFEA35AD7A5"\r
+ "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+ "WorkingFolder" = "8:_26743E387598422398CF503F7478F9E1"\r
+ "Icon" = "8:"\r
+ "Feature" = "8:"\r
+ }\r
+ "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_63715171338D40FFBC5B47A1418B4814"\r
+ {\r
+ "Name" = "8:README"\r
+ "Arguments" = "8:"\r
+ "Description" = "8:"\r
+ "ShowCmd" = "3:1"\r
+ "IconIndex" = "3:0"\r
+ "Transitive" = "11:FALSE"\r
+ "Target" = "8:_27AB74FFFBC7436B9EBC6AE23968CFCC"\r
+ "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+ "WorkingFolder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Icon" = "8:"\r
+ "Feature" = "8:"\r
+ }\r
+ "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_70CF74DB997A408DBBFD48AB10F92321"\r
+ {\r
+ "Name" = "8:ipptool Documentation"\r
+ "Arguments" = "8:"\r
+ "Description" = "8:"\r
+ "ShowCmd" = "3:1"\r
+ "IconIndex" = "3:0"\r
+ "Transitive" = "11:FALSE"\r
+ "Target" = "8:_D5CD9D9AB1644688A1D54B1589BDF724"\r
+ "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+ "WorkingFolder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Icon" = "8:"\r
+ "Feature" = "8:"\r
+ }\r
+ "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_962004B0D5CA479A91EFA7F7BF7814C8"\r
+ {\r
+ "Name" = "8:ippserver Documentation"\r
+ "Arguments" = "8:"\r
+ "Description" = "8:"\r
+ "ShowCmd" = "3:1"\r
+ "IconIndex" = "3:0"\r
+ "Transitive" = "11:FALSE"\r
+ "Target" = "8:_1BCBABF5693841AE92515645BB7765F4"\r
+ "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+ "WorkingFolder" = "8:_26743E387598422398CF503F7478F9E1"\r
+ "Icon" = "8:"\r
+ "Feature" = "8:"\r
+ }\r
+ "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_BD2A7DF74D844FF5919EE8340EE36ECD"\r
+ {\r
+ "Name" = "8:Test File Documentation"\r
+ "Arguments" = "8:"\r
+ "Description" = "8:"\r
+ "ShowCmd" = "3:1"\r
+ "IconIndex" = "3:0"\r
+ "Transitive" = "11:FALSE"\r
+ "Target" = "8:_1A1324305D78463BBFC62269C56DCF0B"\r
+ "Folder" = "8:_E379D4EDBAD0460BB876711E9062ADB4"\r
+ "WorkingFolder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Icon" = "8:"\r
+ "Feature" = "8:"\r
+ }\r
+ }\r
+ "UserInterface"\r
+ {\r
+ "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_045DF90B1FF941A9BA7A742CFC0A6C00"\r
+ {\r
+ "UseDynamicProperties" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"\r
+ }\r
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_345BD86390E841A98B74ED3E07945F8C"\r
+ {\r
+ "Name" = "8:#1900"\r
+ "Sequence" = "3:2"\r
+ "Attributes" = "3:1"\r
+ "Dialogs"\r
+ {\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_067C143A8731427180B1568AF8C07375"\r
+ {\r
+ "Sequence" = "3:200"\r
+ "DisplayName" = "8:Installation Folder"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A2F2CC6EB9D7453599E7598D4D0629A5"\r
+ {\r
+ "Sequence" = "3:300"\r
+ "DisplayName" = "8:Confirm Installation"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C2B41369B7334F419318792EBA031412"\r
+ {\r
+ "Sequence" = "3:100"\r
+ "DisplayName" = "8:Welcome"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ "CopyrightWarning"\r
+ {\r
+ "Name" = "8:CopyrightWarning"\r
+ "DisplayName" = "8:#1002"\r
+ "Description" = "8:#1102"\r
+ "Type" = "3:3"\r
+ "ContextData" = "8:"\r
+ "Attributes" = "3:0"\r
+ "Setting" = "3:2"\r
+ "Value" = "8:This computer program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2."\r
+ "DefaultValue" = "8:#1202"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ "Welcome"\r
+ {\r
+ "Name" = "8:Welcome"\r
+ "DisplayName" = "8:#1003"\r
+ "Description" = "8:#1103"\r
+ "Type" = "3:3"\r
+ "ContextData" = "8:"\r
+ "Attributes" = "3:0"\r
+ "Setting" = "3:1"\r
+ "Value" = "8:#1203"\r
+ "DefaultValue" = "8:#1203"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_6B654A06090344BA9AA443E0D0296737"\r
+ {\r
+ "Name" = "8:#1902"\r
+ "Sequence" = "3:1"\r
+ "Attributes" = "3:3"\r
+ "Dialogs"\r
+ {\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FB4E7BBC3DA242309FFB58F9A6194A93"\r
+ {\r
+ "Sequence" = "3:100"\r
+ "DisplayName" = "8:Finished"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ "UpdateText"\r
+ {\r
+ "Name" = "8:UpdateText"\r
+ "DisplayName" = "8:#1058"\r
+ "Description" = "8:#1158"\r
+ "Type" = "3:15"\r
+ "ContextData" = "8:"\r
+ "Attributes" = "3:0"\r
+ "Setting" = "3:1"\r
+ "Value" = "8:#1258"\r
+ "DefaultValue" = "8:#1258"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_712819C7C4F042ABB708949BD4426628"\r
+ {\r
+ "Name" = "8:#1900"\r
+ "Sequence" = "3:1"\r
+ "Attributes" = "3:1"\r
+ "Dialogs"\r
+ {\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2F49D4FACB954AF2B786D2AD9206D053"\r
+ {\r
+ "Sequence" = "3:100"\r
+ "DisplayName" = "8:Welcome"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ "CopyrightWarning"\r
+ {\r
+ "Name" = "8:CopyrightWarning"\r
+ "DisplayName" = "8:#1002"\r
+ "Description" = "8:#1102"\r
+ "Type" = "3:3"\r
+ "ContextData" = "8:"\r
+ "Attributes" = "3:0"\r
+ "Setting" = "3:2"\r
+ "Value" = "8:This computer program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2."\r
+ "DefaultValue" = "8:#1202"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ "Welcome"\r
+ {\r
+ "Name" = "8:Welcome"\r
+ "DisplayName" = "8:#1003"\r
+ "Description" = "8:#1103"\r
+ "Type" = "3:3"\r
+ "ContextData" = "8:"\r
+ "Attributes" = "3:0"\r
+ "Setting" = "3:1"\r
+ "Value" = "8:#1203"\r
+ "DefaultValue" = "8:#1203"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_770E25BC453A464EA8CD51381FDDDD9F"\r
+ {\r
+ "Sequence" = "3:300"\r
+ "DisplayName" = "8:Confirm Installation"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_9534A64B629F4F868D6D7A384C76DCB2"\r
+ {\r
+ "Sequence" = "3:200"\r
+ "DisplayName" = "8:Installation Folder"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ "InstallAllUsersVisible"\r
+ {\r
+ "Name" = "8:InstallAllUsersVisible"\r
+ "DisplayName" = "8:#1059"\r
+ "Description" = "8:#1159"\r
+ "Type" = "3:5"\r
+ "ContextData" = "8:1;True=1;False=0"\r
+ "Attributes" = "3:0"\r
+ "Setting" = "3:0"\r
+ "Value" = "3:1"\r
+ "DefaultValue" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_770CCEFF81BD46A182A6E816A41A0E81"\r
+ {\r
+ "Name" = "8:#1901"\r
+ "Sequence" = "3:2"\r
+ "Attributes" = "3:2"\r
+ "Dialogs"\r
+ {\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_75E0C1FD245D493DA0D7E3E0BC0C365F"\r
+ {\r
+ "Sequence" = "3:100"\r
+ "DisplayName" = "8:Progress"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ "ShowProgress"\r
+ {\r
+ "Name" = "8:ShowProgress"\r
+ "DisplayName" = "8:#1009"\r
+ "Description" = "8:#1109"\r
+ "Type" = "3:5"\r
+ "ContextData" = "8:1;True=1;False=0"\r
+ "Attributes" = "3:0"\r
+ "Setting" = "3:0"\r
+ "Value" = "3:1"\r
+ "DefaultValue" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_933B15E9A383418F8ADF3B13F68458F3"\r
+ {\r
+ "UseDynamicProperties" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"\r
+ }\r
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_E310DA8CED734E00950A3C5D630CE987"\r
+ {\r
+ "Name" = "8:#1902"\r
+ "Sequence" = "3:2"\r
+ "Attributes" = "3:3"\r
+ "Dialogs"\r
+ {\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_CB172E69F9C74901BE1040336CFD4F72"\r
+ {\r
+ "Sequence" = "3:100"\r
+ "DisplayName" = "8:Finished"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_F44F9BE9B54940848289669635E4A5A2"\r
+ {\r
+ "Name" = "8:#1901"\r
+ "Sequence" = "3:1"\r
+ "Attributes" = "3:2"\r
+ "Dialogs"\r
+ {\r
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_14751F327A634B989283C8F28CFB6DFC"\r
+ {\r
+ "Sequence" = "3:100"\r
+ "DisplayName" = "8:Progress"\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:FALSE"\r
+ "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"\r
+ "Properties"\r
+ {\r
+ "BannerBitmap"\r
+ {\r
+ "Name" = "8:BannerBitmap"\r
+ "DisplayName" = "8:#1001"\r
+ "Description" = "8:#1101"\r
+ "Type" = "3:8"\r
+ "ContextData" = "8:Bitmap"\r
+ "Attributes" = "3:4"\r
+ "Setting" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ "ShowProgress"\r
+ {\r
+ "Name" = "8:ShowProgress"\r
+ "DisplayName" = "8:#1009"\r
+ "Description" = "8:#1109"\r
+ "Type" = "3:5"\r
+ "ContextData" = "8:1;True=1;False=0"\r
+ "Attributes" = "3:0"\r
+ "Setting" = "3:0"\r
+ "Value" = "3:1"\r
+ "DefaultValue" = "3:1"\r
+ "UsePlugInResources" = "11:TRUE"\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ "MergeModule"\r
+ {\r
+ "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_299D5816FF7142F3B2791685551AD1DC"\r
+ {\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:TRUE"\r
+ "SourcePath" = "8:microsoft_vc90_debugcrt_x86.msm"\r
+ "Properties"\r
+ {\r
+ }\r
+ "LanguageId" = "3:0"\r
+ "Exclude" = "11:FALSE"\r
+ "Folder" = "8:"\r
+ "Feature" = "8:"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_A1CB27EFF4094C39B58D0BE5A272DF1A"\r
+ {\r
+ "UseDynamicProperties" = "11:TRUE"\r
+ "IsDependency" = "11:TRUE"\r
+ "SourcePath" = "8:policy_9_0_Microsoft_VC90_DebugCRT_x86.msm"\r
+ "Properties"\r
+ {\r
+ }\r
+ "LanguageId" = "3:0"\r
+ "Exclude" = "11:FALSE"\r
+ "Folder" = "8:"\r
+ "Feature" = "8:"\r
+ "IsolateTo" = "8:"\r
+ }\r
+ }\r
+ "ProjectOutput"\r
+ {\r
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_466C1CF41795452A8B76425F8D05D8B8"\r
+ {\r
+ "SourcePath" = "8:Win32\\Debug\\ippserver.exe"\r
+ "TargetName" = "8:"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ "ProjectOutputGroupRegister" = "3:1"\r
+ "OutputConfiguration" = "8:"\r
+ "OutputGroupCanonicalName" = "8:Built"\r
+ "OutputProjectGuid" = "8:{82A03BC7-0746-4B85-8908-3C7A3FAA58A9}"\r
+ "ShowKeyOutput" = "11:TRUE"\r
+ "ExcludeFilters"\r
+ {\r
+ }\r
+ }\r
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_58DC0E72F0944BEFB927AED718CD1660"\r
+ {\r
+ "SourcePath" = "8:Win32\\Debug\\ippfind.exe"\r
+ "TargetName" = "8:"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ "ProjectOutputGroupRegister" = "3:1"\r
+ "OutputConfiguration" = "8:"\r
+ "OutputGroupCanonicalName" = "8:Built"\r
+ "OutputProjectGuid" = "8:{B484DA0C-62C8-4C32-83B6-CCEB58968B85}"\r
+ "ShowKeyOutput" = "11:TRUE"\r
+ "ExcludeFilters"\r
+ {\r
+ }\r
+ }\r
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D02EB13951314EFD9C539150EF8E53B8"\r
+ {\r
+ "SourcePath" = "8:Win32\\Debug\\regex.dll"\r
+ "TargetName" = "8:"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ "ProjectOutputGroupRegister" = "3:1"\r
+ "OutputConfiguration" = "8:"\r
+ "OutputGroupCanonicalName" = "8:Built"\r
+ "OutputProjectGuid" = "8:{18950A1B-D37A-40C7-B2DF-C12986C0526E}"\r
+ "ShowKeyOutput" = "11:TRUE"\r
+ "ExcludeFilters"\r
+ {\r
+ }\r
+ }\r
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_E97571D3FBE048DABDC59B37762D800F"\r
+ {\r
+ "SourcePath" = "8:Win32\\Debug\\ipptool.exe"\r
+ "TargetName" = "8:"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ "ProjectOutputGroupRegister" = "3:1"\r
+ "OutputConfiguration" = "8:"\r
+ "OutputGroupCanonicalName" = "8:Built"\r
+ "OutputProjectGuid" = "8:{B246D91E-61F2-4433-BFD2-6C2A96FBD4D4}"\r
+ "ShowKeyOutput" = "11:TRUE"\r
+ "ExcludeFilters"\r
+ {\r
+ }\r
+ }\r
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EA282F32A10B4ED1A81AA6133B997C6A"\r
+ {\r
+ "SourcePath" = "8:Win32\\Debug\\libcups2.dll"\r
+ "TargetName" = "8:"\r
+ "Tag" = "8:"\r
+ "Folder" = "8:_FFAEDEA1D38D4088A03FDD6F17E2CA5D"\r
+ "Condition" = "8:"\r
+ "Transitive" = "11:FALSE"\r
+ "Vital" = "11:TRUE"\r
+ "ReadOnly" = "11:FALSE"\r
+ "Hidden" = "11:FALSE"\r
+ "System" = "11:FALSE"\r
+ "Permanent" = "11:FALSE"\r
+ "SharedLegacy" = "11:FALSE"\r
+ "PackageAs" = "3:1"\r
+ "Register" = "3:1"\r
+ "Exclude" = "11:FALSE"\r
+ "IsDependency" = "11:FALSE"\r
+ "IsolateTo" = "8:"\r
+ "ProjectOutputGroupRegister" = "3:1"\r
+ "OutputConfiguration" = "8:"\r
+ "OutputGroupCanonicalName" = "8:Built"\r
+ "OutputProjectGuid" = "8:{CB4AA6F2-3E84-45BE-B505-95CD375E8BE3}"\r
+ "ShowKeyOutput" = "11:TRUE"\r
+ "ExcludeFilters"\r
+ {\r
+ }\r
+ }\r
+ }\r
+ }\r
+}\r
);
dependencies = (
274FF5E313332D4300317ECB /* PBXTargetDependency */,
+ 72BEA8D819AFA8BB0085F0F3 /* PBXTargetDependency */,
72F75A711336FACD004BB496 /* PBXTargetDependency */,
274FF5E513332D4300317ECB /* PBXTargetDependency */,
274FF622133331D300317ECB /* PBXTargetDependency */,
274FF65E13333A3400317ECB /* PBXTargetDependency */,
724379531333FECE009631B9 /* PBXTargetDependency */,
724379111333E4EA009631B9 /* PBXTargetDependency */,
+ 72BEA8D619AFA8A00085F0F3 /* PBXTargetDependency */,
+ 72BEA8D419AFA89C0085F0F3 /* PBXTargetDependency */,
276683FF1337F7C5000D33D0 /* PBXTargetDependency */,
7243792B1333E962009631B9 /* PBXTargetDependency */,
276683D71337B24A000D33D0 /* PBXTargetDependency */,
remoteGlobalIDString = 274FF6891333B1C400317ECB;
remoteInfo = libcups_static;
};
+ 72BEA8D319AFA89C0085F0F3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 726AD6F6135E88F0002C930D;
+ remoteInfo = ippserver;
+ };
+ 72BEA8D519AFA8A00085F0F3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 72CF95E618A19134000FCAE4;
+ remoteInfo = ippfind;
+ };
+ 72BEA8D719AFA8BB0085F0F3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 274FF6891333B1C400317ECB;
+ remoteInfo = libcups_static;
+ };
72CF95E818A19134000FCAE4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 72BF96371333042100B1EAD7 /* Project object */;
target = 274FF6891333B1C400317ECB /* libcups_static */;
targetProxy = 726AD705135E8AC5002C930D /* PBXContainerItemProxy */;
};
+ 72BEA8D419AFA89C0085F0F3 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 726AD6F6135E88F0002C930D /* ippserver */;
+ targetProxy = 72BEA8D319AFA89C0085F0F3 /* PBXContainerItemProxy */;
+ };
+ 72BEA8D619AFA8A00085F0F3 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 72CF95E618A19134000FCAE4 /* ippfind */;
+ targetProxy = 72BEA8D519AFA8A00085F0F3 /* PBXContainerItemProxy */;
+ };
+ 72BEA8D819AFA8BB0085F0F3 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 274FF6891333B1C400317ECB /* libcups_static */;
+ targetProxy = 72BEA8D719AFA8BB0085F0F3 /* PBXContainerItemProxy */;
+ };
72CF95E718A19134000FCAE4 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 72220EAD1333047D00FCA411 /* libcups */;
/*
- * "$Id: config.h 11591 2014-02-14 16:07:13Z msweet $"
+ * "$Id: config.h 12140 2014-08-30 01:51:22Z msweet $"
*
* Configuration file for CUPS and Xcode.
*
#endif /* HAVE_ARC4RANDOM */
-/*
- * Do we have vproc_transaction_begin/end?
- */
-
-#define HAVE_VPROC_TRANSACTION_BEGIN 1
-
-
/*
* Do we have libusb?
*/
#endif /* !_CUPS_CONFIG_H_ */
/*
- * End of "$Id: config.h 11591 2014-02-14 16:07:13Z msweet $".
+ * End of "$Id: config.h 12140 2014-08-30 01:51:22Z msweet $".
*/