Comparar commits
23 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 8406cae8ee | |||
| a0236fe7e7 | |||
| dbdd609a3a | |||
| 4abfc4313c | |||
| 1a1f974d33 | |||
| bfa5c91233 | |||
| fb70b28510 | |||
| 925ecfb9d7 | |||
| 520ae4afbb | |||
| a6da1f6153 | |||
| 067101d02d | |||
| decb87a756 | |||
| b7f166da75 | |||
| cadff87b26 | |||
| 75c2a30654 | |||
| f3745d0088 | |||
| fc56c4d886 | |||
| 292f831c7a | |||
| ae7176a7a9 | |||
| 422369925a | |||
| 6474d57e69 | |||
| 58acbe964e | |||
| 2f89228ff3 |
@@ -1,244 +0,0 @@
|
||||
CHANGES-1.6.txt
|
||||
---------------
|
||||
|
||||
CHANGES IN CUPS V1.6.4
|
||||
|
||||
- Removed some duplicate size definitions for some ISO sizes that were
|
||||
causing problems (<rdar://problem/14722721>)
|
||||
- The IPP backend did not add the "last-document" attribute
|
||||
(<rdar://problem/114660379>)
|
||||
- Added a SyncOnClose directive to cups-files.conf to force cupsd to
|
||||
call fsync before closing any configuration/state files it writes
|
||||
(<rdar://problem/14523043>)
|
||||
- Added USB quirk rule for Lexmark E238 (<rdar://problem/14493054>)
|
||||
- Closed server connections were still not always detected
|
||||
(<rdar://problem/14484313>)
|
||||
- The libusb-based USB backend now loads its list of quirks from files
|
||||
in /usr/share/cups/usb instead of using a hardcoded table
|
||||
(<rdar://problem/14442769>)
|
||||
- The scheduler did not properly register ICC color profiles with
|
||||
colord (<rdar://problem/14455625>)
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.6.3
|
||||
|
||||
- The configure script now prefers Clang over GCC.
|
||||
- Fixed a compile problem on AIX (STR #4307)
|
||||
- The default IPP version did not always get set before creating a new
|
||||
IPP request message (<rdar://problem/14401718>)
|
||||
- The lp, lpq, lpr, and lpstat now display an error message advising the
|
||||
use of the /version=1.1 ServerName option (<rdar://problem/14290628>)
|
||||
- Added documentation about the /version=1.1 option to ServerName in
|
||||
client.conf (<rdar://problem/14216262>)
|
||||
- httpStatus(HTTP_ERROR) did not return a useful error message
|
||||
(<rdar://problem/14217326>)
|
||||
- The lp, lpq, lpr, and lpstat commands incorrectly ignored the default
|
||||
printer set in the lpoptions file (<rdar://problem/14216472>)
|
||||
- Fixed a URI encoding issue for hostnames containing the ` (backquote)
|
||||
character (<rdar://problem/14243133>)
|
||||
- Added support for RFC 6874's IPv6 link local address format in URIs
|
||||
(<rdar://problem/13979453>)
|
||||
- The USB backend could crash on libusb-based systems if USB was
|
||||
disabled in the BIOS (<rdar://problem/13875729>)
|
||||
- Fixed a rounding error in the PWG media size mapping code
|
||||
(<rdar://problem/13493241>)
|
||||
- Fixed several ipptool test files that used old STATUS names.
|
||||
- Kerberos credentials could get truncated when printing to a shared
|
||||
printer.
|
||||
- Printing using "ipps" URIs was not encrypted.
|
||||
- Insecure ICC profiles prevented installation of user profiles for a
|
||||
printer on OS X.
|
||||
- Added more USB quirks for the libusb-based backend (STR #4311,
|
||||
<rdar://problem/13736470>)
|
||||
- The Russian web interface templates were broken (STR #4310)
|
||||
- The scheduler no longer tries to do Kerberos authentication over the
|
||||
loopback interface.
|
||||
- The IPP backend could fail to pause a job for authentication
|
||||
(STR #4298)
|
||||
- Fixed a regression on the handling of auth keys on OS X if the
|
||||
cups-files.conf was not present or did not contain a SystemAuthKey
|
||||
value.
|
||||
- The scheduler incorrectly did a reverse lookup of the server address
|
||||
when HostNameLookups was turned off (STR #4302)
|
||||
- The scheduler incorrectly computed the final content type value when
|
||||
null filters were present.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.6.2
|
||||
|
||||
- Documentation fixes (STR #4229, STR #4239, STR #4234, STR #4248,
|
||||
STR #4259)
|
||||
- Security: All file, directory, user, and group settings are now stored
|
||||
in a separate cups-files.conf configuration file that cannot be set
|
||||
through the CUPS web interface or APIs (STR #4223)
|
||||
- Added a Czech localization (STR #4201)
|
||||
- Added a French localization (STR #4247)
|
||||
- Added a Russian localization (STR #4228, STR #4285)
|
||||
- Updated the Catalan localization (STR #4202)
|
||||
- Local certificate authentication did not guard against an empty
|
||||
certification file (STR #4293)
|
||||
- The scheduler did not reject device URIs with spaces.
|
||||
- Added USB quirk rule for Epson Stylus Photo 750 (STR #4286)
|
||||
- The IPP backend could crash if the printer disconnects early
|
||||
(STR #4284)
|
||||
- cupsGetPPD did not work with statically-configured CUPS shared
|
||||
queues (STR #4178)
|
||||
- The scheduler did not support long MIME media types (STR #4270)
|
||||
- The cupsfilter command did not set the CHARSET environment variable
|
||||
for the text filters (STR #4273)
|
||||
- The lp command did not show errors for unknown "--foo" (STR #4261)
|
||||
- Bad IPP responses could crash ipptool (STR #4262)
|
||||
- Updated USB quirk rules for Canon and Xerox printers (STR #4217,
|
||||
STR #4263)
|
||||
- Added USB blacklisting for printers that require a custom backend
|
||||
(STR #4218)
|
||||
- The PPD compiler did not correctly JCL options (STR #4115, STR #4203)
|
||||
- The ipptool program now supports DEFINE-MATCH and DEFINE-NO-MATCH
|
||||
predicates for STATUS directives.
|
||||
- Fixed a problem with local Kerberos authentication (STR #4140)
|
||||
- Coverity scan: fixed some minor issues (STR #4242)
|
||||
- The scheduler did not remove color profiles after deleting a printer
|
||||
(STR #4232, STR #4276)
|
||||
- The CUPS library did not always detect a timed out connection to the
|
||||
server which could cause temporary loss of printing from applications
|
||||
(STR #4187)
|
||||
- The ipptool program now supports variable substitution in OPERATION
|
||||
and DELAY directives (STR #4175)
|
||||
- The IPP backend now stops queues when the server configuration
|
||||
prevents successful job submission (STR #4125)
|
||||
- The XML output of ipptool contained empty dictionaries (STR #4136)
|
||||
- The scheduler did not delete job control backup files (STR #4244)
|
||||
- cupsGetPPD3 could return a local PPD instead of the correct remote
|
||||
PPD.
|
||||
- The scheduler incorrectly advertised auth-info-required for local
|
||||
queues needing local authentication (STR #4205)
|
||||
- CUPS 1.6 clients using the ServerName directive in client.conf did not
|
||||
work with CUPS 1.3.x or older servers (STR #4231, STR #4291)
|
||||
- The SNMP backend now tries to work around broken printers that use a
|
||||
newline to separate key/value pairs.
|
||||
- The IPP backend did not send a cancel request to printers when a job
|
||||
was canceled and the printer did not support Create-Job.
|
||||
- Fixed EPM packaging files (STR #4199)
|
||||
- OpenBSD build fix (STR #4195, STR #4196, STR #4197)
|
||||
- The scheduler could crash when using Avahi (STR #4183, STR #4192,
|
||||
STR #4200, STR #4213)
|
||||
- The IPP backend could get stuck in an endless loop on certain network
|
||||
errors (STR #4194)
|
||||
- 32-bit builds failed on Debian (STR #4133)
|
||||
- The scheduler no longer accepts or sends job description attributes.
|
||||
- The IPP backend now works around some conformance issues for broken
|
||||
printers (STR #4190)
|
||||
- cupsBackendReport() now filters out all control characters from the
|
||||
reported 1284 device IDs (STR #4124)
|
||||
- The scheduler no longer allows job-name values that are not valid
|
||||
network Unicode strings (STR #4072)
|
||||
- The web interface did not preserve the order of classes, jobs, or
|
||||
printers (STR #4170)
|
||||
- The network backends now support disabling of SNMP supply level
|
||||
queries via the "snmp" URI option (STR #4106)
|
||||
- The IPP backend did not specify the compression used (STR #4181)
|
||||
- ipptool did not support octetString values.
|
||||
- The scheduler did not recognize dnssd: or ipps: URIs as Bonjour shared
|
||||
queues (STR #4158)
|
||||
- Applications could not get the PPD file for statically-configured
|
||||
Bonjour-shared print queues (STR #4159)
|
||||
- The cupsd.conf file included obsolete browsing directives (STR #4157)
|
||||
- Fixed a USB backend compatibility issue on systems using libusb
|
||||
(STR #4155, STR #4191)
|
||||
- Some Bonjour features were not available on systems with Avahi
|
||||
(STR #4156)
|
||||
- CUPS now includes the port number in the Host: header for HTTP
|
||||
requests.
|
||||
- Fixed REPEAT-MATCH for STATUS and EXPECT - was incorrectly erroring
|
||||
out.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.6.1
|
||||
|
||||
- Documentation fix (STR #4149)
|
||||
- RPM packaging fixes (STR #4129, #4145)
|
||||
- The Japanese and English web interface headers were swapped
|
||||
(STR #4148)
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.6.0
|
||||
|
||||
- Document changes (STR #4131)
|
||||
- Added new Catalan (STR #4107) and Spanish (STR #4137) localizations.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.6rc1
|
||||
|
||||
- Added a new Japanese localization (STR #4122)
|
||||
- The SNMP backend no longer exits if it is unable to obtain an IPv6
|
||||
socket (STR #4109)
|
||||
- The LPD backend incorrectly used "localhost" in the control file
|
||||
instead of the current hostname.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.6b1
|
||||
|
||||
- Documentation updates (STR #3927, STR #3980, STR #4010, STR #4068)
|
||||
- The scheduler now consolidates all PPD updates from filters at the
|
||||
end of the job (STR #4075)
|
||||
- CUPS now supports color management using colord (STR #3808)
|
||||
- CUPS now supports Bonjour using Avahi (STR #3066)
|
||||
- The PreserveJobFiles and PreserveJobHistory directives now support
|
||||
specification of a time interval (STR #3143)
|
||||
- PPD files can now be archived in (gzip'd) tar files to further reduce
|
||||
the disk space used by PPD files (STR #3772)
|
||||
- The network backends now deal with printers that report their levels
|
||||
in percent but do not specify a maximum capacity of 100 (STR #3551)
|
||||
- The network backends now report full/almost-full waste bins in
|
||||
printers along with end-of-life for cleaning pads (STR #4017)
|
||||
- Added a configure option to set the permissions of the installed
|
||||
cupsd (STR #3459)
|
||||
- Added a new WITH-ALL-VALUES directive to ipptool EXPECT predicates
|
||||
(STR #3949)
|
||||
- CUPS now supports a User directive in client.conf and the CUPS_USER
|
||||
environment variable for overriding the default username (STR #3114)
|
||||
- Now set the PJL USERNAME variable as needed (STR #3100)
|
||||
- Added support for usernames and passwords longer than 32 characters
|
||||
(STR #2856)
|
||||
- Added a new MaxHoldTime directive to automatically cancel jobs that
|
||||
have been held indefinitely after a specific number of seconds
|
||||
(STR #2291)
|
||||
- The LPD backend now uses the originating host name when it is not the
|
||||
local system (STR #2053)
|
||||
- CUPS now prefers the suffix "dpcm" when reporting resolution in dots-
|
||||
per-centimeter (STR #4006)
|
||||
- The configure script and build system no longer support building of
|
||||
separate 32-bit and 64-bit libraries.
|
||||
- The "brightness", "columns", "fitplot", "gamma", "hue",
|
||||
"natural-scaling", "penwidth", "position", "ppi", "saturation", and
|
||||
"scaling" options are not longer supported (STR #4010)
|
||||
- The "page-bottom", "page-left", "page-right", "page-top",
|
||||
"prettyprint", and "wrap" options have been deprecated (STR #4010)
|
||||
- The scheduler now reports the standard "number-of-documents" attribute
|
||||
instead of the CUPS-specific "document-count" attribute in
|
||||
job objects.
|
||||
- Added new destination connection and enumeration functions (STR #3924)
|
||||
- Added new option, localization, and job submission functions that do
|
||||
not depend on PPD files (STR #3925)
|
||||
- Added a new MaxJobTime directive for cupsd that specifies the maximum
|
||||
amount of time allowed for a job to complete before it is canceled.
|
||||
- The default password callback now supports passwords up to 127
|
||||
characters.
|
||||
- The scheduler now supports a DefaultAuthType of "auto" to
|
||||
automatically choose between Basic (username/password) and Negotiate
|
||||
(Kerberos) authentication.
|
||||
- cupsSideChannelSNMPGet/Walk now support OIDs and values up to 64k in
|
||||
length.
|
||||
- CUPS no longer supports automatic remote printers or implicit classes
|
||||
via the CUPS, LDAP, or SLP protocols (STR #3922, STR #3923)
|
||||
- The PPD APIs are now deprecated and will be removed in a future
|
||||
version of CUPS (STR #3927)
|
||||
- The default IPP version for requests is now 2.0 (STR #3929)
|
||||
- The IPP APIs no longer expose the ipp_t or ipp_attribute_t structures
|
||||
and instead provide accessor functions (STR #3928)
|
||||
- The scheduler will no longer run programs with group write permission.
|
||||
- The PHP module has been removed (STR #3932)
|
||||
- The bannertops, commandtoescpx, commandtopclx, imagetops,
|
||||
imagetoraster, pdftops, rastertoescpx, rastertopclx, and texttops
|
||||
filters have been removed (STR #3930)
|
||||
- The serial and parallel backends have been removed (STR 3935)
|
||||
@@ -1,167 +0,0 @@
|
||||
CHANGES-IPPTOOL.txt - 2014-03-28
|
||||
--------------------------------
|
||||
|
||||
This file provides a list of changes to the ipptool binary distribution posted
|
||||
on cups.org.
|
||||
|
||||
2014-03-28
|
||||
|
||||
- Fixed SSL support on Windows (STR #4358)
|
||||
|
||||
|
||||
2013-07-15
|
||||
|
||||
- New ippfind tool now included with ipptool.
|
||||
- Added support for automatically extending the timeout when all of the
|
||||
request data has not yet been written (all platforms but Windows
|
||||
which does not support it...)
|
||||
- Fixed several ipptool test files that used old STATUS names.
|
||||
|
||||
|
||||
2013-04-18
|
||||
|
||||
- Fixed some HTTP issues with authentication and compression.
|
||||
- The IPP/1.1 test file did not allow for sufficient retries when
|
||||
printing.
|
||||
- The IPP/1.1 test file did not allow for empty printer-name values.
|
||||
- The IPP Everywhere test file contained numerous errors.
|
||||
- The color.jpg test file used a progressive mode instead of the
|
||||
baseline JPEG mode.
|
||||
- The IPP/1.1 test file referenced "color.jpeg" instead of "color.jpg".
|
||||
|
||||
|
||||
2013-01-31
|
||||
|
||||
- Added support for DEFINE-MATCH and DEFINE-NO-MATCH as STATUS
|
||||
predicates.
|
||||
- Added support for WITH-VALUE and resolution values.
|
||||
- Added support for SKIP-IF-MISSING (skip test if file is missing)
|
||||
- Added support for octetString values.
|
||||
- Added support for document compression in Print-Job and Send-Document
|
||||
requests.
|
||||
- Fixed REPEAT-MATCH for STATUS and EXPECT - was incorrectly erroring
|
||||
out.
|
||||
- Fixed a bug where bad IPP responses would cause ipptool to crash.
|
||||
|
||||
|
||||
2012-02-28
|
||||
|
||||
- Changed behavior of WITH-VALUES "/regex/" to not require all values to
|
||||
match.
|
||||
- Added WITH-ALL-VALUES directive for EXPECT predicates that require all
|
||||
values to match.
|
||||
- Updated test files to use WITH-ALL-VALUES where necessary.
|
||||
- Updated test files to use new ABNF for media names from PWG Media
|
||||
Names 2.0.
|
||||
|
||||
|
||||
2012-02-06
|
||||
|
||||
- Fixed the packaging of ipptool on Windows (removed unnecessary DLLs)
|
||||
- Fixed an crash in ipptool when mixing DISPLAY with -I and a failed
|
||||
request.
|
||||
- Added a Print-Job test file.
|
||||
- Added a "setdebug" batch file for Windows
|
||||
- Added support for a CUPS_DISABLE_ASYNC_CONNECT environment variable.
|
||||
|
||||
|
||||
2012-01-10
|
||||
|
||||
- Fixed an issue with the IPP/1.1 test file where the "waiting for job
|
||||
completion" test did not work.
|
||||
- The attribute groups out of order error was not shown for the
|
||||
operation-attributes-tag group.
|
||||
|
||||
|
||||
2011-12-02
|
||||
|
||||
- Fixed a truncated XML output bug that would happen for certain errors.
|
||||
- Fixed the order-of-groups tests.
|
||||
- Fixed "WITH-VALUE >N" for rangeOfInteger attributes.
|
||||
- The Windows installer was missing the get-printer-attributes.test
|
||||
file.
|
||||
- The Linux binaries are now compiled for all LSB 4.x-compliant Linux
|
||||
distributions.
|
||||
- The Linux binaries no longer support SSL or TLS.
|
||||
|
||||
|
||||
2011-10-05
|
||||
|
||||
- Fixed a crasher bug that showed up on Windows.
|
||||
- The IPP/1.1 test would hang if the initial Print-Job test failed.
|
||||
- Fixed a typo in the IPP/2.0 test.
|
||||
|
||||
|
||||
2011-10-03
|
||||
|
||||
- Using OF-TYPE with the "no-value" or "unknown" out-of-band value tags
|
||||
now works without special WITH-VALUE strings.
|
||||
- ipptool now shows an error when an attribute appears more than once
|
||||
within the same attribute group.
|
||||
- ipptool did not display attributes as specified by the DISPLAY
|
||||
directive when a test error failed.
|
||||
- Fixed one spot where DEFINE-VALUE was still treated as an error when
|
||||
the EXPECT test failed.
|
||||
- uriScheme values were not displayed properly.
|
||||
- Updated the IPP/1.1 tests to properly validate support for
|
||||
job-hold-until-default and job-hold-until-supported when the Hold-Job
|
||||
operation is supported.
|
||||
- Updated the IPP/1.1 tests to properly check for the various standard
|
||||
media sizes for the printing tests.
|
||||
- Updated the IPP/1.1 tests to accept "no-value" for media-default an
|
||||
orientation-requested-default.
|
||||
- Updated the IPP/1.1 tests to accept "unknown" for job-state.
|
||||
- Updated the IPP/1.1 tests to not perform the bogus URI printing tests
|
||||
unless the "document-uri" variable is defined.
|
||||
- Updated the IPP/2.0 tests to properly validate media-col
|
||||
"media-xxx-supported" attributes.
|
||||
- Updated the IPP/2.2 tests to properly validate media-ready and
|
||||
media-col-ready.
|
||||
|
||||
|
||||
2011-09-28
|
||||
|
||||
- Test output now includes a summary and overall score at the end.
|
||||
- The MATCH-VALUE predicate now correctly deals with a failed EXPECT
|
||||
condition.
|
||||
- The IPP/1.1 test suite now looks for legacy media names and uses them
|
||||
if the corresponding PWG standard names are not present.
|
||||
- The IPP/1.1 test suite now tests the Print-Job+Release-Job when the
|
||||
printer supports the job-hold-until attribute, Hold-Job operation, and
|
||||
Release-Job operation.
|
||||
|
||||
|
||||
2011-09-21
|
||||
|
||||
- Fixes for HTTP chunking, timeout, and encryption issues reported by
|
||||
various users.
|
||||
- Greatly improved IPP tests with added IPP/2.2 tests.
|
||||
- New test documents - 1-page and 4-page mixed A4/Letter PDF/PS and a
|
||||
couple JPEGs.
|
||||
- New REPEAT directives to programmatically repeat tests as needed.
|
||||
|
||||
|
||||
2011-08-16
|
||||
|
||||
- The Windows version no longer requires Visual Studio to be installed.
|
||||
- The Windows version now supports SSL.
|
||||
- Added "ipps" URI support.
|
||||
- Added a new "-T" option.
|
||||
- Added support for fractional seconds for the -i option and DELAY
|
||||
directive.
|
||||
- Added support for authentication.
|
||||
- Added DEFINE-MATCH, DEFINE-NO-MATCH, DEFINE-VALUE, IF-NOT-DEFINED,
|
||||
IGNORE-ERRORS, SKIP-IF-DEFINED, SKIP-IF-NOT-DEFINED,
|
||||
SKIP-PREVIOUS-ERROR directives.
|
||||
- WITH-VALUE now supports variable expansion.
|
||||
- Updated the IPP/1.1 conformance test to skip the "my-jobs different
|
||||
user" test if the printer URI contains a username.
|
||||
- Updated the IPP conformance tests to validate media, media-default,
|
||||
and media-supported values.
|
||||
- No longer error out if a Printer returns a different version number in
|
||||
the response when the request contains the version 0.0.
|
||||
|
||||
|
||||
2010-10-16
|
||||
|
||||
- Initial release of standalone binary.
|
||||
|
||||
+210
-171
@@ -1,186 +1,225 @@
|
||||
CHANGES.txt - 1.7.2 - 2014-04-10
|
||||
CHANGES.txt - 1.6.3 - 2013-07-11
|
||||
--------------------------------
|
||||
|
||||
CHANGES IN CUPS V1.7.2
|
||||
CHANGES IN CUPS V1.6.3
|
||||
|
||||
- Security: The scheduler now blocks URLs containing embedded HTML
|
||||
(STR #4356)
|
||||
- Documentation fixes (STR #3259, STR #4346, STR #4355)
|
||||
- Fixed the Japanese localization (STR #4385)
|
||||
- Added a German localization (STR #4363)
|
||||
- The cupsfilter command incorrectly read the cupsd.conf file; it now
|
||||
reads the cups-files.conf file instead.
|
||||
- Fixed OS X builds with Xcode 5.x (<rdar://problem/15914959>)
|
||||
- Fixed SSL support on Windows (STR #4358)
|
||||
- Fixed documentation and naming of Create-Job/Printer-Subscriptions
|
||||
operations (STR #4389)
|
||||
- Phone numbers in fax jobs were not properly filtered for IPP FaxOut
|
||||
(<rdar://problem/16351701>)
|
||||
- Fixed a memory leak in the label printer driver (STR #4393)
|
||||
- Updated Linux "relro" support (STR #4349)
|
||||
- cupsEnumDests did not set the "is_default" field (STR #4332)
|
||||
- cupsDoIORequest could miss the server status, causing failed lpadmin
|
||||
and other administrative commands (STR #4386)
|
||||
- cupsEnumDests didn't always call the callback function (STR #4380)
|
||||
- "lp -i job-id -H hold" did not work (STR #nnn)
|
||||
- CUPS didn't compile on older platforms (STR #4338)
|
||||
- Several libcups files did not have the Apple license exception
|
||||
notice (STR #4361)
|
||||
- Fixed a D-BUS threading issue that caused the scheduler to crash
|
||||
(STR #4347)
|
||||
- The scheduler now automatically reconnects to Avahi as needed
|
||||
(STR #4370, STR #4373)
|
||||
- The scheduler did not handle GET requests for the log files properly
|
||||
(STR #3265)
|
||||
- The dnssd backend did not always report all discovered printers using
|
||||
Avahi (STR #4365)
|
||||
- The Zebra printer driver did not properly handle negative "label top"
|
||||
values (STR #4354)
|
||||
- The scheduler did not always update the MakeModel value in
|
||||
printers.conf after updating the driver (STR #4264)
|
||||
- The LPD mini daemon did not support print jobs larger than 2GB
|
||||
(STR #4351)
|
||||
- Fixed a bug in the status reading code when sending a compressed data
|
||||
stream to an IPP printer/server (<rdar://problem/16019623>)
|
||||
- The IPP backend might not include all job attributes in Validate-Job
|
||||
operations (<rdar://problem/16025435>)
|
||||
- Fixed some clang-reported issues (<rdar://problem/15936066>)
|
||||
- The configure script now prefers Clang over GCC.
|
||||
- Fixed a compile problem on AIX (STR #4307)
|
||||
- The default IPP version did not always get set before creating a new
|
||||
IPP request message (<rdar://problem/14401718>)
|
||||
- The lp, lpq, lpr, and lpstat now display an error message advising the
|
||||
use of the /version=1.1 ServerName option (<rdar://problem/14290628>)
|
||||
- Added documentation about the /version=1.1 option to ServerName in
|
||||
client.conf (<rdar://problem/14216262>)
|
||||
- httpStatus(HTTP_ERROR) did not return a useful error message
|
||||
(<rdar://problem/14217326>)
|
||||
- The lp, lpq, lpr, and lpstat commands incorrectly ignored the default
|
||||
printer set in the lpoptions file (<rdar://problem/14216472>)
|
||||
- Fixed a URI encoding issue for hostnames containing the ` (backquote)
|
||||
character (<rdar://problem/14243133>)
|
||||
- Added support for RFC 6874's IPv6 link local address format in URIs
|
||||
(<rdar://problem/13979453>)
|
||||
- The USB backend could crash on libusb-based systems if USB was
|
||||
disabled in the BIOS (<rdar://problem/13875729>)
|
||||
- Fixed a rounding error in the PWG media size mapping code
|
||||
(<rdar://problem/13493241>)
|
||||
- Fixed several ipptool test files that used old STATUS names.
|
||||
- Kerberos credentials could get truncated when printing to a shared
|
||||
printer.
|
||||
- Printing using "ipps" URIs was not encrypted.
|
||||
- Insecure ICC profiles prevented installation of user profiles for a
|
||||
printer on OS X.
|
||||
- Added more USB quirks for the libusb-based backend (STR #4311,
|
||||
<rdar://problem/13736470>)
|
||||
- The Russian web interface templates were broken (STR #4310)
|
||||
- The scheduler no longer tries to do Kerberos authentication over the
|
||||
loopback interface.
|
||||
- The IPP backend could fail to pause a job for authentication
|
||||
(STR #4298)
|
||||
- Fixed a regression on the handling of auth keys on OS X if the
|
||||
cups-files.conf was not present or did not contain a SystemAuthKey
|
||||
value.
|
||||
- The scheduler incorrectly did a reverse lookup of the server address
|
||||
when HostNameLookups was turned off (STR #4302)
|
||||
- The scheduler incorrectly computed the final content type value when
|
||||
null filters were present.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.7.1
|
||||
CHANGES IN CUPS V1.6.2
|
||||
|
||||
- Security: the lppasswd program incorrectly used settings from
|
||||
~/.cups/client.conf (STR #4319)
|
||||
- Auto debug logging was broken in 1.7.0 (<rdar://problem/15331639>)
|
||||
- Some gzip'd PPD files could not be used (<rdar://problem/15386424>)
|
||||
- Cleaned up some job logging in the scheduler
|
||||
(<rdar://problem/15332672>)
|
||||
- ATTR messages could cause string pool memory corruption in the
|
||||
scheduler (<rdar://problem/15382819>)
|
||||
- The RPM spec file did not list the build requirements; this was on
|
||||
purpose, but now we are listing the Red Hat package names
|
||||
(<rdar://problem/15375760>, STR #4322)
|
||||
- Printing to a raw queue could result in corrupt output due to
|
||||
opportunistic compression (<rdar://problem/15008524>)
|
||||
- The GNU TLS support code triggered many compiler warnings due to the
|
||||
use of old GNU TLS compatibility type names
|
||||
(<rdar://problem/15392966>)
|
||||
- The "make check" test suite did not work on Linux without the
|
||||
cups-filters package installed (<rdar://problem/14292998>)
|
||||
- Japanese PPDs using with the Shift-JIS encoding did not work
|
||||
(<rdar://problem/15427759>)
|
||||
- "tel:" URIs incorrectly had slashes (<rdar://problem/15418463>)
|
||||
- The libusb-based USB backend incorrectly used write timeouts
|
||||
(<rdar://problem/15564888>)
|
||||
- Shared printers could become inaccessible after a few days on OS X
|
||||
(<rdar://problem/15426838>)
|
||||
- The IPP backend did not wait for a busy printer to become available
|
||||
before attempting to print (<rdar://problem/15465667>)
|
||||
- CUPS did not support "auto-monochrome" or "process-monochrome" for the
|
||||
"print-color-mode" option (<rdar://problem/15482520>)
|
||||
- Using "@IF(name)" in an Allow or Deny rule did not work (STR #4328)
|
||||
- lpq and lpstat did not list jobs in the correct order when priorities
|
||||
were specified (STR #4326)
|
||||
- The D-BUS notifier did not remove its lockfile (STR #4314)
|
||||
- CUPS incorrectly used the USER environment variable when the name did
|
||||
not match the user ID (STR #4327)
|
||||
- Documentation fixes (STR #4229, STR #4239, STR #4234, STR #4248,
|
||||
STR #4259)
|
||||
- Security: All file, directory, user, and group settings are now stored
|
||||
in a separate cups-files.conf configuration file that cannot be set
|
||||
through the CUPS web interface or APIs (STR #4223)
|
||||
- Added a Czech localization (STR #4201)
|
||||
- Added a French localization (STR #4247)
|
||||
- Added a Russian localization (STR #4228, STR #4285)
|
||||
- Updated the Catalan localization (STR #4202)
|
||||
- Local certificate authentication did not guard against an empty
|
||||
certification file (STR #4293)
|
||||
- The scheduler did not reject device URIs with spaces.
|
||||
- Added USB quirk rule for Epson Stylus Photo 750 (STR #4286)
|
||||
- The IPP backend could crash if the printer disconnects early
|
||||
(STR #4284)
|
||||
- cupsGetPPD did not work with statically-configured CUPS shared
|
||||
queues (STR #4178)
|
||||
- The scheduler did not support long MIME media types (STR #4270)
|
||||
- The cupsfilter command did not set the CHARSET environment variable
|
||||
for the text filters (STR #4273)
|
||||
- The lp command did not show errors for unknown "--foo" (STR #4261)
|
||||
- Bad IPP responses could crash ipptool (STR #4262)
|
||||
- Updated USB quirk rules for Canon and Xerox printers (STR #4217,
|
||||
STR #4263)
|
||||
- Added USB blacklisting for printers that require a custom backend
|
||||
(STR #4218)
|
||||
- The PPD compiler did not correctly JCL options (STR #4115, STR #4203)
|
||||
- The ipptool program now supports DEFINE-MATCH and DEFINE-NO-MATCH
|
||||
predicates for STATUS directives.
|
||||
- Fixed a problem with local Kerberos authentication (STR #4140)
|
||||
- Coverity scan: fixed some minor issues (STR #4242)
|
||||
- The scheduler did not remove color profiles after deleting a printer
|
||||
(STR #4232, STR #4276)
|
||||
- The CUPS library did not always detect a timed out connection to the
|
||||
server which could cause temporary loss of printing from applications
|
||||
(STR #4187)
|
||||
- The ipptool program now supports variable substitution in OPERATION
|
||||
and DELAY directives (STR #4175)
|
||||
- The IPP backend now stops queues when the server configuration
|
||||
prevents successful job submission (STR #4125)
|
||||
- The XML output of ipptool contained empty dictionaries (STR #4136)
|
||||
- The scheduler did not delete job control backup files (STR #4244)
|
||||
- cupsGetPPD3 could return a local PPD instead of the correct remote
|
||||
PPD.
|
||||
- The scheduler incorrectly advertised auth-info-required for local
|
||||
queues needing local authentication (STR #4205)
|
||||
- CUPS 1.6 clients using the ServerName directive in client.conf did not
|
||||
work with CUPS 1.3.x or older servers (STR #4231, STR #4291)
|
||||
- The SNMP backend now tries to work around broken printers that use a
|
||||
newline to separate key/value pairs.
|
||||
- The IPP backend did not send a cancel request to printers when a job
|
||||
was canceled and the printer did not support Create-Job.
|
||||
- Fixed EPM packaging files (STR #4199)
|
||||
- OpenBSD build fix (STR #4195, STR #4196, STR #4197)
|
||||
- The scheduler could crash when using Avahi (STR #4183, STR #4192,
|
||||
STR #4200, STR #4213)
|
||||
- The IPP backend could get stuck in an endless loop on certain network
|
||||
errors (STR #4194)
|
||||
- 32-bit builds failed on Debian (STR #4133)
|
||||
- The scheduler no longer accepts or sends job description attributes.
|
||||
- The IPP backend now works around some conformance issues for broken
|
||||
printers (STR #4190)
|
||||
- cupsBackendReport() now filters out all control characters from the
|
||||
reported 1284 device IDs (STR #4124)
|
||||
- The scheduler no longer allows job-name values that are not valid
|
||||
network Unicode strings (STR #4072)
|
||||
- The web interface did not preserve the order of classes, jobs, or
|
||||
printers (STR #4170)
|
||||
- The network backends now support disabling of SNMP supply level
|
||||
queries via the "snmp" URI option (STR #4106)
|
||||
- The IPP backend did not specify the compression used (STR #4181)
|
||||
- ipptool did not support octetString values.
|
||||
- The scheduler did not recognize dnssd: or ipps: URIs as Bonjour shared
|
||||
queues (STR #4158)
|
||||
- Applications could not get the PPD file for statically-configured
|
||||
Bonjour-shared print queues (STR #4159)
|
||||
- The cupsd.conf file included obsolete browsing directives (STR #4157)
|
||||
- Fixed a USB backend compatibility issue on systems using libusb
|
||||
(STR #4155, STR #4191)
|
||||
- Some Bonjour features were not available on systems with Avahi
|
||||
(STR #4156)
|
||||
- CUPS now includes the port number in the Host: header for HTTP
|
||||
requests.
|
||||
- Fixed REPEAT-MATCH for STATUS and EXPECT - was incorrectly erroring
|
||||
out.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.7.0
|
||||
CHANGES IN CUPS V1.6.1
|
||||
|
||||
- Updated Japanese localization.
|
||||
- The lpadmin command did not send the PPD name from the "-m" option
|
||||
(<rdar://problem/15264697>)
|
||||
- Network backends now use the prtMarkerSuppliesClass property to
|
||||
determine the direction of supply level values
|
||||
(<rdar://problem/14302628>)
|
||||
- The scheduler did not remove backup PPD files when a printer was
|
||||
deleted (<rdar://problem/15065555>)
|
||||
- The scheduler incorrectly responded to HEAD requests when the web
|
||||
interface was disabled (<rdar://problem/15090332>)
|
||||
- The scheduler did not respond using the hostname specified by the
|
||||
client (<rdar://problem/14583574>)
|
||||
- Fax queues did not work when shared via Bonjour
|
||||
(<rdar://problem/14498310>)
|
||||
- Error messages from the scheduler were not localized using the
|
||||
language specified in the client's IPP request
|
||||
(<rdar://problem/14128011>)
|
||||
- Added an Italian localization (<rdar://problem/14481578>)
|
||||
- Fixed a couple memory leaks in ippfind that were reported by Clang.
|
||||
- Fixed a compile issue on 64-bit Linux with Clang - need to use the
|
||||
-pie option instead of -Wl,-pie now (<rdar://problem/14480938>)
|
||||
- The ippfind utility reported the wrong port numbers when compiled
|
||||
against Avahi (<rdar://problem/14508324>)
|
||||
- httpGetFd, httpGetFile, httpPutFd, and httpPutFile did not
|
||||
automatically reconnect if the server closed the connecion after the
|
||||
previous response.
|
||||
- Fixed a compile error in libcups (<rdar://problem/14467141>)
|
||||
- The scheduler incorrectly did not pass a FINAL_CONTENT_TYPE
|
||||
environment variable to the filters or backend
|
||||
(<rdar://problem/14355011>)
|
||||
- The cups-exec helper program could fail randomly on OS X due to
|
||||
sandbox violations when closing excess file descriptors
|
||||
(<rdar://problem/14421943>)
|
||||
- The scheduler incorrectly did not use the kqueue interface on OS X.
|
||||
- Documentation fix (STR #4149)
|
||||
- RPM packaging fixes (STR #4129, #4145)
|
||||
- The Japanese and English web interface headers were swapped
|
||||
(STR #4148)
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.7rc1
|
||||
CHANGES IN CUPS V1.6.0
|
||||
|
||||
- Printer xxx-default values were not reported by Get-Printer-Attributes
|
||||
or lpoptions (<rdar://problem/14401795>)
|
||||
- Fixed deprecation warnings for many functions on OS X so they are tied
|
||||
to the deployment version when building (<rdar://problem/14210079>)
|
||||
- Fixed a build issue on ARM-based Linux systems - unable to validate
|
||||
va_list arguments.
|
||||
- Added a new ippfind tool for finding IPP printers and other Bonjour
|
||||
services (<rdar://problem/13876199>)
|
||||
- Fixed some issues with conversion of PWG media size names to
|
||||
hundredths of millimeters (<rdar://problem/14065748>)
|
||||
- The IPP backend could crash on OS X when printing to a Kerberized
|
||||
printer (<rdar://problem/14040186>)
|
||||
- The ipptool program now automatically extends timeouts when the
|
||||
output buffer is filled (<rdar://problem/14016099>)
|
||||
- The ipptool program now supports the --help and --version options.
|
||||
- The ipptool program did not continue past include file errors by
|
||||
default (<rdar://problem/13875803>)
|
||||
- The ipptool program now supports FILE-ID and TEST-ID directives and
|
||||
includes their values in its XML output (<rdar://problem/13876038>)
|
||||
- The ipptool program now supports WITH-HOSTNAME, WITH-RESOURCE, and
|
||||
WITH-SCHEME expect predicates to compare the corresponding URI
|
||||
components (<rdar://problem/13876091>)
|
||||
- Document changes (STR #4131)
|
||||
- Added new Catalan (STR #4107) and Spanish (STR #4137) localizations.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.7b1
|
||||
CHANGES IN CUPS V1.6rc1
|
||||
|
||||
- The configure script now supports a --with-rundir option to change
|
||||
the transient run-time state directory from the default to other
|
||||
locations like /run/cups (STR #4306)
|
||||
- The scheduler now supports PPD lookups for classes (STR #4296)
|
||||
- The cupsfilter program did not set the FINAL_CONTENT_TYPE
|
||||
environment variable for filters.
|
||||
- Added a new "-x" option to the cancel command (STR #4103)
|
||||
- Made the PWG media handling APIs public (STR #4267)
|
||||
- Implemented ready media support for the cupsGetDestMediaXxx APIs
|
||||
(STR #4289)
|
||||
- Added new cupsFindDestDefault, cupsFindDestReady, and
|
||||
cupsFindDestSupported APIs (STR #4289)
|
||||
- Added new cupsGetDestMediaByIndex, cupsGetDestMediaCount, and
|
||||
cupsGetDestMediaDefault APIs (STR #4289)
|
||||
- Added new ippGet/SetOctetString APIs for getting and setting an
|
||||
octetString value (STR #4289)
|
||||
- Added new ippCreateRequestedArray API for generating a array of
|
||||
attributes from the requested-attributes attribute.
|
||||
- The ipptool utility now supports compression, conditional tests based
|
||||
on the presence of files, and new DEFINE predicates for STATUS.
|
||||
- Added new IPP APIs for checking values (STR #4167)
|
||||
- Added new IPP APis for adding and setting formatted strings.
|
||||
- Added new HTTP APIs to support basic server functionality via libcups.
|
||||
- The dnssd backend now generates a 1284 device ID as needed (STR #3702)
|
||||
- CUPS now supports compressing and decompressing streamed data
|
||||
(STR #4168)
|
||||
- CUPS now supports higher-level PIN printing, external accounting
|
||||
systems, and "print here" printing environments (STR #4169)
|
||||
- IRIX is no longer a supported operating system (STR #4092)
|
||||
- The PPD compiler now supports JCL options properly (STR #4115)
|
||||
- The web interface now checks whether the web browser has cookies
|
||||
enabled and displays a suitable error message (STR #4141)
|
||||
- Added a new Japanese localization (STR #4122)
|
||||
- The SNMP backend no longer exits if it is unable to obtain an IPv6
|
||||
socket (STR #4109)
|
||||
- The LPD backend incorrectly used "localhost" in the control file
|
||||
instead of the current hostname.
|
||||
|
||||
|
||||
CHANGES IN CUPS V1.6b1
|
||||
|
||||
- Documentation updates (STR #3927, STR #3980, STR #4010, STR #4068)
|
||||
- The scheduler now consolidates all PPD updates from filters at the
|
||||
end of the job (STR #4075)
|
||||
- CUPS now supports color management using colord (STR #3808)
|
||||
- CUPS now supports Bonjour using Avahi (STR #3066)
|
||||
- The PreserveJobFiles and PreserveJobHistory directives now support
|
||||
specification of a time interval (STR #3143)
|
||||
- PPD files can now be archived in (gzip'd) tar files to further reduce
|
||||
the disk space used by PPD files (STR #3772)
|
||||
- The network backends now deal with printers that report their levels
|
||||
in percent but do not specify a maximum capacity of 100 (STR #3551)
|
||||
- The network backends now report full/almost-full waste bins in
|
||||
printers along with end-of-life for cleaning pads (STR #4017)
|
||||
- Added a configure option to set the permissions of the installed
|
||||
cupsd (STR #3459)
|
||||
- Added a new WITH-ALL-VALUES directive to ipptool EXPECT predicates
|
||||
(STR #3949)
|
||||
- CUPS now supports a User directive in client.conf and the CUPS_USER
|
||||
environment variable for overriding the default username (STR #3114)
|
||||
- Now set the PJL USERNAME variable as needed (STR #3100)
|
||||
- Added support for usernames and passwords longer than 32 characters
|
||||
(STR #2856)
|
||||
- Added a new MaxHoldTime directive to automatically cancel jobs that
|
||||
have been held indefinitely after a specific number of seconds
|
||||
(STR #2291)
|
||||
- The LPD backend now uses the originating host name when it is not the
|
||||
local system (STR #2053)
|
||||
- CUPS now prefers the suffix "dpcm" when reporting resolution in dots-
|
||||
per-centimeter (STR #4006)
|
||||
- The configure script and build system no longer support building of
|
||||
separate 32-bit and 64-bit libraries.
|
||||
- The "brightness", "columns", "fitplot", "gamma", "hue",
|
||||
"natural-scaling", "penwidth", "position", "ppi", "saturation", and
|
||||
"scaling" options are not longer supported (STR #4010)
|
||||
- The "page-bottom", "page-left", "page-right", "page-top",
|
||||
"prettyprint", and "wrap" options have been deprecated (STR #4010)
|
||||
- The scheduler now reports the standard "number-of-documents" attribute
|
||||
instead of the CUPS-specific "document-count" attribute in
|
||||
job objects.
|
||||
- Added new destination connection and enumeration functions (STR #3924)
|
||||
- Added new option, localization, and job submission functions that do
|
||||
not depend on PPD files (STR #3925)
|
||||
- Added a new MaxJobTime directive for cupsd that specifies the maximum
|
||||
amount of time allowed for a job to complete before it is canceled.
|
||||
- The default password callback now supports passwords up to 127
|
||||
characters.
|
||||
- The scheduler now supports a DefaultAuthType of "auto" to
|
||||
automatically choose between Basic (username/password) and Negotiate
|
||||
(Kerberos) authentication.
|
||||
- cupsSideChannelSNMPGet/Walk now support OIDs and values up to 64k in
|
||||
length.
|
||||
- CUPS no longer supports automatic remote printers or implicit classes
|
||||
via the CUPS, LDAP, or SLP protocols (STR #3922, STR #3923)
|
||||
- The PPD APIs are now deprecated and will be removed in a future
|
||||
version of CUPS (STR #3927)
|
||||
- The default IPP version for requests is now 2.0 (STR #3929)
|
||||
- The IPP APIs no longer expose the ipp_t or ipp_attribute_t structures
|
||||
and instead provide accessor functions (STR #3928)
|
||||
- The scheduler will no longer run programs with group write permission.
|
||||
- The PHP module has been removed (STR #3932)
|
||||
- The bannertops, commandtoescpx, commandtopclx, imagetops,
|
||||
imagetoraster, pdftops, rastertoescpx, rastertopclx, and texttops
|
||||
filters have been removed (STR #3930)
|
||||
- The serial and parallel backends have been removed (STR 3935)
|
||||
|
||||
+1
-2
@@ -1,4 +1,4 @@
|
||||
CREDITS.txt - 2013-07-23
|
||||
CREDITS.txt - 2012-07-16
|
||||
------------------------
|
||||
|
||||
Few projects are completed by one person, and CUPS is no exception. We'd
|
||||
@@ -39,7 +39,6 @@ like to thank the following individuals for their contributions:
|
||||
Vincenzo Reale - Italian localization.
|
||||
Petter Reinholdtsen - HP-UX compiler stuff.
|
||||
Juan Pablo González Riopedre - Spanish localization.
|
||||
Giovanni Scafora - Italian localization.
|
||||
Opher Shachar - Hebrew localization.
|
||||
Stuart Stevens - HP JetDirect IPP information.
|
||||
Andrea Suatoni - IRIX desktop integration and testing.
|
||||
|
||||
+16
-13
@@ -1,4 +1,4 @@
|
||||
INSTALL - CUPS v1.7.2 - 2014-04-10
|
||||
INSTALL - CUPS v1.6.3 - 2013-07-11
|
||||
----------------------------------
|
||||
|
||||
This file describes how to compile and install CUPS from source code. For more
|
||||
@@ -29,16 +29,18 @@ BEFORE YOU BEGIN
|
||||
Compaq, HP, SGI, and Sun. BSD users should use GNU make (gmake) since BSD
|
||||
make does not support "include".
|
||||
|
||||
Besides these tools you'll want ZLIB library for compression support, the
|
||||
CDSA, GNU TLS, or OpenSSL libraries for encryption support, and either MIT
|
||||
(1.6.3 or higher) or Heimdal Kerberos for Kerberos support. CUPS will
|
||||
compile and run without these, however you'll miss out on many of the
|
||||
features provided by CUPS.
|
||||
Besides these tools you'll want the JPEG, PNG, TIFF, and ZLIB libraries for
|
||||
image support, the CDSA, GNU TLS, or OpenSSL libraries for encryption
|
||||
support, the OpenLDAP and OpenSLP libraries for directory services support,
|
||||
and either MIT (1.6.3 or higher) or Heimdal Kerberos for Kerberos support.
|
||||
CUPS will compile and run without these, however you'll miss out on many of
|
||||
the features provided by CUPS.
|
||||
|
||||
Also, please note that CUPS does not include print filters to support PDF
|
||||
or raster printing. You *must* download GPL Ghostscript and/or the Open
|
||||
Printing CUPS filters package separately to print on operating systems
|
||||
other than OS X.
|
||||
Also, please note that CUPS does not include the Ghostscript-based
|
||||
PostScript filter needed by non-PostScript printers. You *must* download
|
||||
GPL Ghostscript separately from the CUPS web site if you want to print
|
||||
PostScript files to non-PostScript printers on operating systems other than
|
||||
OS X.
|
||||
|
||||
|
||||
COMPILING THE SUBVERSION REPOSITORY CODE
|
||||
@@ -147,7 +149,7 @@ INSTALLING THE SOFTWARE
|
||||
|
||||
The EPM software is available at:
|
||||
|
||||
http://www.msweet.org/
|
||||
http://www.epmhome.org/
|
||||
|
||||
|
||||
CREATING BINARY DISTRIBUTIONS WITH EPM
|
||||
@@ -197,9 +199,10 @@ GETTING DEBUG LOGGING FROM CUPS
|
||||
REPORTING PROBLEMS
|
||||
|
||||
If you have problems, READ THE DOCUMENTATION FIRST! If the documentation
|
||||
does not solve your problems, please post a message on the users forum at:
|
||||
does not solve your problems, please post a message on the "cups.general"
|
||||
forum at:
|
||||
|
||||
http://www.cups.org/
|
||||
http://www.cups.org/newsgroups.php
|
||||
|
||||
Include your operating system and version, compiler and version, and any
|
||||
errors or problems you've run into. The "config.log" file and the output
|
||||
|
||||
+31
-77
@@ -1,4 +1,4 @@
|
||||
IPPTOOL.txt - 2014-04-10
|
||||
IPPTOOL.txt - 2012-02-06
|
||||
------------------------
|
||||
|
||||
See the file CHANGES-IPPTOOL.txt for a list of changes to this software.
|
||||
@@ -6,46 +6,14 @@ See the file CHANGES-IPPTOOL.txt for a list of changes to this software.
|
||||
|
||||
INTRODUCTION
|
||||
|
||||
CUPS includes two user programs for IPP printers. The first is called
|
||||
ipptool and can be used to send arbitrary IPP requests to a CUPS server or
|
||||
IPP printer. This tool started life as part of the CUPS automated test
|
||||
suite and has grown to support complex conformance tests and a simple way
|
||||
to query printer, job, and subscription attributes.
|
||||
|
||||
The second program called ippfind that can be used to find IPP printers
|
||||
that have registered themselves using Bonjour (DNS-SD, mDNS, and Zeroconf)
|
||||
and run commands such as ipptool.
|
||||
CUPS includes a user program called ipptool that can be used to send
|
||||
arbitrary IPP requests to a CUPS server or IPP printer. This tool started
|
||||
life as part of the CUPS automated test suite and has grown to support
|
||||
complex conformance tests and a simple way to query printer, job, and
|
||||
subscription attributes.
|
||||
|
||||
|
||||
READING THE DOCUMENTATION
|
||||
|
||||
Full documentation on the ipptool command can be found in the
|
||||
"man-ipptool.html" and "man-ipptoolfile.html" files; the latter describes
|
||||
the test file format supported by ipptool.
|
||||
|
||||
Full documentation on the ippfind command can be found in the
|
||||
"man-ippfind.html" file.
|
||||
|
||||
|
||||
IPPFIND BASIC USAGE
|
||||
|
||||
The ippfind command can be used to discover IPP printers on your network.
|
||||
For example, the following command prints the printer URI of registered IPP
|
||||
printers:
|
||||
|
||||
ippfind
|
||||
|
||||
To find all color IPP printers, run:
|
||||
|
||||
ippfind --txt-color T
|
||||
|
||||
And to run the IPP Everywhere conformance test file on every registered IPP
|
||||
printer, run the following command:
|
||||
|
||||
ippfind _ipp._tcp,_print --exec ipptool -t '{}' ipp-everywhere.test \;
|
||||
|
||||
|
||||
IPPTOOL BASIC USAGE
|
||||
BASIC USAGE
|
||||
|
||||
The ipptool command requires a printer URI and one or more "test" files that
|
||||
describe the operations, attributes to display, and expected status and
|
||||
@@ -86,29 +54,19 @@ STANDARD TEST FILES
|
||||
state change notifications
|
||||
get-completed-jobs.test Shows a list of completed jobs
|
||||
get-jobs.test Shows a list of pending jobs
|
||||
get-notifications.test Shows events for an ippget
|
||||
subscription.
|
||||
get-printer-attributes.test Shows printer attributes
|
||||
get-subscriptions.test Shows a list of subscriptions
|
||||
ipp-1.1.test IPP/1.1 conformance test suite
|
||||
ipp-2.0.test IPP/2.0 conformance test suite
|
||||
ipp-2.1.test IPP/2.1 conformance test suite
|
||||
ipp-2.2.test IPP/2.2 conformance test suite
|
||||
ipp-everywhere.test IPP Everywhere conformance test
|
||||
suite
|
||||
print-job.test Prints a file
|
||||
print-job-deflate.test Prints a file, compressing with
|
||||
deflate.
|
||||
print-job-gzip.test Prints a file, compressing with gzip
|
||||
validate-job.test Validates attributes for a job
|
||||
submission.
|
||||
|
||||
|
||||
CONFORMANCE TESTS
|
||||
|
||||
We provide basic IPP conformance tests for IPP/1.1, IPP/2.0, IPP/2.1,
|
||||
IPP/2.2, and IPP Everywhere. For a given printer URI, the following
|
||||
commands perform tests at each level:
|
||||
We provide basic IPP conformance tests for IPP/1.1, IPP/2.0, IPP/2.1, and
|
||||
IPP/2.2. For a given printer URI, the following commands perform tests at
|
||||
each level:
|
||||
|
||||
ipptool -tf filename [options] -I printer-uri ipp-1.1.test
|
||||
ipptool -tf filename [options] -I -V 2.0 printer-uri ipp-2.0.test
|
||||
@@ -146,7 +104,6 @@ CONFORMANCE TESTS
|
||||
-S Test IPP over HTTPS (default for ipps: URIs)
|
||||
-T seconds Set a timeout for responses in seconds
|
||||
-v Be verbose, showing all attributes sent and received
|
||||
-X Produce XML (Apple plist) output
|
||||
|
||||
The printer-uri must be a URI supported by the printer using the "ipp" or
|
||||
"ipps" scheme, for example:
|
||||
@@ -155,7 +112,7 @@ CONFORMANCE TESTS
|
||||
ipps://192.168.0.1/ipp/print
|
||||
|
||||
Print-by-reference (URL) printing can be tested by defining the document-uri
|
||||
variable as a URL, for example:
|
||||
variable to a URL, for example:
|
||||
|
||||
ipptool -tf filename -d document-uri=url -I printer-uri ipp-1.1.test
|
||||
|
||||
@@ -171,40 +128,37 @@ CONFORMANCE TESTS
|
||||
printer.
|
||||
|
||||
|
||||
IPP EVERYWHERE TESTING
|
||||
READING THE DOCUMENTATION
|
||||
|
||||
The IPP Everywhere tests use sample PWG raster files available from:
|
||||
|
||||
ftp://ftp.pwg.org/pub/pwg/ipp/examples
|
||||
|
||||
Extract the corresponding ZIP archives into the current directory before
|
||||
running the ipp-everywhere.test file. The test file will attempt to print
|
||||
each PWG Raster file that is supported by the printer being tested - up to
|
||||
372 pages including the 90 pages produced by the regular IPP test suite.
|
||||
The command usage is described in the ipptest(1) man page, while the file
|
||||
format is described in the ipptestfile(5) man page. Both are provided in
|
||||
HTML format with the standalone releases of ipptool.
|
||||
|
||||
|
||||
GETTING SUPPORT AND OTHER RESOURCES
|
||||
|
||||
If you have problems, READ THE DOCUMENTATION FIRST! We also provide
|
||||
If you have problems, READ THE DOCUMENTATION FIRST! We also provide many
|
||||
discussion forums which are available at:
|
||||
|
||||
http://www.cups.org/
|
||||
http://www.cups.org/newsgroups.php
|
||||
|
||||
See the CUPS web site at "http://www.cups.org/" for other resources.
|
||||
|
||||
|
||||
REPORTING BUGS
|
||||
|
||||
If you believe you have discovered a bug in ippfind or ipptool, please fill
|
||||
out the bug form at:
|
||||
If you believe you have discovered a bug in ipptool, please fill out the
|
||||
bug form at:
|
||||
|
||||
http://www.cups.org/str.php
|
||||
|
||||
Be sure to identify the version of CUPS and ippfind/ipptool (if you
|
||||
downloaded the standalone version) you are using, the printer (if any) and
|
||||
firmware version, and include any files that apply.
|
||||
Be sure to identify the version of CUPS and ipptool (if you downloaded the
|
||||
standalone version) you are using, the printer (if any) and firmware
|
||||
version, and include any files that apply.
|
||||
|
||||
If you downloaded the standalone version of ippfind/ipptool, please also
|
||||
re-run the command with debug logging enabled. Run the following commands
|
||||
on Windows to enable debug logging:
|
||||
If you downloaded the standalone version of ipptool, please also re-run the
|
||||
test with debug logging enabled. Run the following commands on Windows to
|
||||
enable debug logging:
|
||||
|
||||
setdebug.bat
|
||||
|
||||
@@ -213,14 +167,14 @@ REPORTING BUGS
|
||||
CUPS_DEBUG_LOG=ipptool.log; export CUPS_DEBUG_LOG
|
||||
CUPS_DEBUG_LEVEL=6; export CUPS_DEBUG_LEVEL
|
||||
|
||||
Then when you run the ippfind or ipptool command a new "ipptool.log" file
|
||||
will be created with detailed information - attach this file to the bug you
|
||||
file as well.
|
||||
Then when you run the ipptool command a new "ipptool.log" file will be
|
||||
created with detailed information - attach this file to the bug you file
|
||||
as well.
|
||||
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
CUPS is Copyright 2007-2014 by Apple Inc. CUPS and the CUPS logo are
|
||||
CUPS is Copyright 2007-2012 by Apple Inc. CUPS and the CUPS logo are
|
||||
trademarks of Apple Inc.
|
||||
|
||||
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
|
||||
|
||||
+3
-6
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: Makedefs.in 11154 2013-07-17 15:21:18Z msweet $"
|
||||
# "$Id: Makedefs.in 7900 2008-09-03 13:47:57Z mike $"
|
||||
#
|
||||
# Common makefile definitions for CUPS.
|
||||
#
|
||||
# Copyright 2007-2013 by Apple Inc.
|
||||
# Copyright 2007-2012 by Apple Inc.
|
||||
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
@@ -138,8 +138,6 @@ DNSSD_BACKEND = @DNSSD_BACKEND@
|
||||
DSOFLAGS = -L../cups @DSOFLAGS@
|
||||
DSOLIBS = @DSOLIBS@ $(COMMONLIBS)
|
||||
DNSSDLIBS = @DNSSDLIBS@
|
||||
IPPFIND_BIN = @IPPFIND_BIN@
|
||||
IPPFIND_MAN = @IPPFIND_MAN@
|
||||
LAUNCHDLIBS = @LAUNCHDLIBS@
|
||||
LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \
|
||||
-L../scheduler @LDARCHFLAGS@ \
|
||||
@@ -218,7 +216,6 @@ SERVERBIN = $(BUILDROOT)@CUPS_SERVERBIN@
|
||||
SERVERROOT = $(BUILDROOT)@CUPS_SERVERROOT@
|
||||
SMFMANIFESTDIR = @SMFMANIFESTDIR@
|
||||
STATEDIR = $(BUILDROOT)@CUPS_STATEDIR@
|
||||
USBQUIRKS = @USBQUIRKS@
|
||||
XINETD = @XINETD@
|
||||
|
||||
MAN1EXT = @MAN1EXT@
|
||||
@@ -261,5 +258,5 @@ DBUSDIR = @DBUSDIR@
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makedefs.in 11154 2013-07-17 15:21:18Z msweet $"
|
||||
# End of "$Id: Makedefs.in 7900 2008-09-03 13:47:57Z mike $"
|
||||
#
|
||||
|
||||
+12
-32
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makefile 11370 2013-10-30 15:08:29Z msweet $"
|
||||
# "$Id: Makefile 9391 2010-11-30 21:53:04Z mike $"
|
||||
#
|
||||
# Top-level Makefile for CUPS.
|
||||
#
|
||||
@@ -99,8 +99,10 @@ clean:
|
||||
distclean: clean
|
||||
$(RM) Makedefs config.h config.log config.status
|
||||
$(RM) cups-config
|
||||
$(RM) conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf
|
||||
$(RM) doc/help/ref-cupsd-conf.html doc/help/standard.html doc/index.html
|
||||
$(RM) conf/cups-files.conf conf/cupsd.conf
|
||||
$(RM) conf/mime.convs conf/pam.std conf/snmp.conf
|
||||
$(RM) doc/help/ref-cups-files-conf.html doc/help/ref-cupsd-conf.html
|
||||
$(RM) doc/help/standard.html doc/index.html
|
||||
$(RM) man/client.conf.man
|
||||
$(RM) man/cups-deviced.man man/cups-driverd.man
|
||||
$(RM) man/cups-lpd.man man/cupsaddsmb.man man/cupsd.man
|
||||
@@ -128,11 +130,8 @@ depend:
|
||||
|
||||
|
||||
#
|
||||
# Run the Clang static code analysis tool on the sources, available here:
|
||||
#
|
||||
# http://clang-analyzer.llvm.org
|
||||
#
|
||||
# At least checker-231 is required.
|
||||
# Run the clang.llvm.org static code analysis tool on the C sources.
|
||||
# (at least checker-231 is required for scan-build to work this way)
|
||||
#
|
||||
|
||||
.PHONY: clang clang-changes
|
||||
@@ -143,26 +142,6 @@ clang-changes:
|
||||
scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) all
|
||||
|
||||
|
||||
#
|
||||
# Run the STACK tool on the sources, available here:
|
||||
#
|
||||
# http://css.csail.mit.edu/stack/
|
||||
#
|
||||
# Do the following to pass options to configure:
|
||||
#
|
||||
# make CONFIGFLAGS="--foo --bar" stack
|
||||
#
|
||||
|
||||
.PHONY: stack
|
||||
stack:
|
||||
stack-build ./configure $(CONFIGFLAGS)
|
||||
stack-build $(MAKE) $(MFLAGS) clean all
|
||||
poptck
|
||||
$(MAKE) $(MFLAGS) distclean
|
||||
$(RM) */*.ll
|
||||
$(RM) */*.ll.out
|
||||
|
||||
|
||||
#
|
||||
# Generate a ctags file...
|
||||
#
|
||||
@@ -265,7 +244,7 @@ debugcheck: all unittests
|
||||
|
||||
|
||||
#
|
||||
# Create HTML documentation using Mini-XML's mxmldoc (http://www.msweet.org/)...
|
||||
# Create HTML documentation...
|
||||
#
|
||||
|
||||
apihelp:
|
||||
@@ -282,7 +261,7 @@ framedhelp:
|
||||
|
||||
|
||||
#
|
||||
# Create an Xcode docset using Mini-XML's mxmldoc (http://www.msweet.org/)...
|
||||
# Create an Xcode docset...
|
||||
#
|
||||
|
||||
docset: apihelp
|
||||
@@ -318,7 +297,7 @@ sloc:
|
||||
|
||||
|
||||
#
|
||||
# Make software distributions using EPM (http://www.msweet.org/)...
|
||||
# Make software distributions using EPM (http://www.epmhome.org/)...
|
||||
#
|
||||
|
||||
EPMFLAGS = -v --output-dir dist $(EPMARCH)
|
||||
@@ -339,6 +318,7 @@ dist: all
|
||||
case `uname` in \
|
||||
*BSD*) $(MAKE) $(MFLAGS) bsd;; \
|
||||
Darwin*) $(MAKE) $(MFLAGS) osx;; \
|
||||
IRIX*) $(MAKE) $(MFLAGS) tardist;; \
|
||||
Linux*) test ! -x /usr/bin/rpm || $(MAKE) $(MFLAGS) rpm;; \
|
||||
SunOS*) $(MAKE) $(MFLAGS) pkg;; \
|
||||
esac
|
||||
@@ -352,5 +332,5 @@ dist: all
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 11370 2013-10-30 15:08:29Z msweet $".
|
||||
# End of "$Id: Makefile 9391 2010-11-30 21:53:04Z mike $".
|
||||
#
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
README - CUPS v1.7.2 - 2014-04-10
|
||||
README - CUPS v1.6.3 - 2013-07-11
|
||||
---------------------------------
|
||||
|
||||
Looking for compile instructions? Read the file "INSTALL.txt" instead...
|
||||
@@ -149,7 +149,7 @@ PRINTING FILES
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
CUPS is Copyright 2007-2014 by Apple Inc. CUPS and the CUPS logo are
|
||||
CUPS is Copyright 2007-2013 by Apple Inc. CUPS and the CUPS logo are
|
||||
trademarks of Apple Inc.
|
||||
|
||||
The MD5 Digest code is Copyright 1999 Aladdin Enterprises.
|
||||
|
||||
+4
-10
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: Makefile 11154 2013-07-17 15:21:18Z msweet $"
|
||||
# "$Id: Makefile 7924 2008-09-10 17:36:13Z mike $"
|
||||
#
|
||||
# Backend makefile for CUPS.
|
||||
#
|
||||
# Copyright 2007-2013 by Apple Inc.
|
||||
# Copyright 2007-2012 by Apple Inc.
|
||||
# Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
@@ -109,11 +109,6 @@ install: all install-data install-headers install-libs install-exec
|
||||
#
|
||||
|
||||
install-data:
|
||||
if test "x$(USBQUIRKS)" != x; then \
|
||||
echo Installing USB quirks in $(USBQUIRKS); \
|
||||
$(INSTALL_DIR) -m 755 $(USBQUIRKS); \
|
||||
$(INSTALL_DATA) org.cups.usb-quirks $(USBQUIRKS); \
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
@@ -139,9 +134,8 @@ install-exec: $(INSTALLXPC)
|
||||
fi
|
||||
if test "x$(SYMROOT)" != "x"; then \
|
||||
$(INSTALL_DIR) $(SYMROOT); \
|
||||
for file in $(RBACKENDS) $(UBACKENDS); do \
|
||||
for file in $(TARGETS); do \
|
||||
cp $$file $(SYMROOT); \
|
||||
dsymutil $(SYMROOT)/$$file; \
|
||||
done \
|
||||
fi
|
||||
|
||||
@@ -301,5 +295,5 @@ include Dependencies
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 11154 2013-07-17 15:21:18Z msweet $".
|
||||
# End of "$Id: Makefile 7924 2008-09-10 17:36:13Z mike $".
|
||||
#
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: backend-private.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: backend-private.h 7810 2008-07-29 01:11:15Z mike $"
|
||||
*
|
||||
* Backend support definitions for CUPS.
|
||||
*
|
||||
@@ -334,5 +334,5 @@ extern int backendWaitLoop(int snmp_fd, http_addr_t *addr,
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: backend-private.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: backend-private.h 7810 2008-07-29 01:11:15Z mike $".
|
||||
*/
|
||||
|
||||
+9
-62
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: dnssd.c 11623 2014-02-19 20:18:10Z msweet $"
|
||||
* "$Id: dnssd.c 3833 2012-05-23 22:51:18Z msweet $"
|
||||
*
|
||||
* DNS-SD discovery backend for CUPS.
|
||||
*
|
||||
@@ -95,7 +95,6 @@ static int job_canceled = 0;
|
||||
static AvahiSimplePoll *simple_poll = NULL;
|
||||
/* Poll information */
|
||||
static int got_data = 0; /* Got data from poll? */
|
||||
static int browsers = 0; /* Number of running browsers */
|
||||
#endif /* HAVE_AVAHI */
|
||||
|
||||
|
||||
@@ -346,7 +345,6 @@ main(int argc, /* I - Number of command-line args */
|
||||
return (1);
|
||||
}
|
||||
|
||||
browsers = 6;
|
||||
avahi_service_browser_new(client, AVAHI_IF_UNSPEC,
|
||||
AVAHI_PROTO_UNSPEC,
|
||||
"_fax-ipp._tcp", NULL, 0,
|
||||
@@ -560,11 +558,7 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
fprintf(stderr, "DEBUG: sent=%d, count=%d\n", sent, count);
|
||||
|
||||
#ifdef HAVE_AVAHI
|
||||
if (sent == cupsArrayCount(devices) && browsers == 0)
|
||||
#else
|
||||
if (sent == cupsArrayCount(devices))
|
||||
#endif /* HAVE_AVAHI */
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -716,12 +710,9 @@ browse_callback(
|
||||
break;
|
||||
|
||||
case AVAHI_BROWSER_REMOVE:
|
||||
case AVAHI_BROWSER_ALL_FOR_NOW:
|
||||
case AVAHI_BROWSER_CACHE_EXHAUSTED:
|
||||
break;
|
||||
|
||||
case AVAHI_BROWSER_ALL_FOR_NOW:
|
||||
browsers--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1040,7 +1031,6 @@ query_callback(
|
||||
value[256], /* Value string */
|
||||
make_and_model[512], /* Manufacturer and model */
|
||||
model[256], /* Model */
|
||||
pdl[256], /* PDL */
|
||||
device_id[2048]; /* 1284 device ID */
|
||||
|
||||
|
||||
@@ -1089,9 +1079,8 @@ query_callback(
|
||||
|
||||
device_id[0] = '\0';
|
||||
make_and_model[0] = '\0';
|
||||
pdl[0] = '\0';
|
||||
|
||||
strlcpy(model, "Unknown", sizeof(model));
|
||||
strcpy(model, "Unknown");
|
||||
|
||||
for (data = rdata, dataend = data + rdlen;
|
||||
data < dataend;
|
||||
@@ -1145,9 +1134,9 @@ query_callback(
|
||||
|
||||
if (!_cups_strcasecmp(key, "usb_MFG") || !_cups_strcasecmp(key, "usb_MANU") ||
|
||||
!_cups_strcasecmp(key, "usb_MANUFACTURER"))
|
||||
strlcpy(make_and_model, value, sizeof(make_and_model));
|
||||
strcpy(make_and_model, value);
|
||||
else if (!_cups_strcasecmp(key, "usb_MDL") || !_cups_strcasecmp(key, "usb_MODEL"))
|
||||
strlcpy(model, value, sizeof(model));
|
||||
strcpy(model, value);
|
||||
else if (!_cups_strcasecmp(key, "product") && !strstr(value, "Ghostscript"))
|
||||
{
|
||||
if (value[0] == '(')
|
||||
@@ -1159,20 +1148,18 @@ query_callback(
|
||||
if ((ptr = value + strlen(value) - 1) > value && *ptr == ')')
|
||||
*ptr = '\0';
|
||||
|
||||
strlcpy(model, value + 1, sizeof(model));
|
||||
strcpy(model, value + 1);
|
||||
}
|
||||
else
|
||||
strlcpy(model, value, sizeof(model));
|
||||
strcpy(model, value);
|
||||
}
|
||||
else if (!_cups_strcasecmp(key, "ty"))
|
||||
{
|
||||
strlcpy(model, value, sizeof(model));
|
||||
strcpy(model, value);
|
||||
|
||||
if ((ptr = strchr(model, ',')) != NULL)
|
||||
*ptr = '\0';
|
||||
}
|
||||
else if (!_cups_strcasecmp(key, "pdl"))
|
||||
strlcpy(pdl, value, sizeof(pdl));
|
||||
else if (!_cups_strcasecmp(key, "priority"))
|
||||
device->priority = atoi(value);
|
||||
else if ((device->type == CUPS_DEVICE_IPP ||
|
||||
@@ -1217,46 +1204,6 @@ query_callback(
|
||||
}
|
||||
}
|
||||
|
||||
if (device_id[0] &&
|
||||
!strstr(device_id, "CMD:") &&
|
||||
!strstr(device_id, "COMMAND SET:") &&
|
||||
(strstr(pdl, "application/pdf") ||
|
||||
strstr(pdl, "application/postscript") ||
|
||||
strstr(pdl, "application/vnd.hp-PCL") ||
|
||||
strstr(pdl, "image/")))
|
||||
{
|
||||
value[0] = '\0';
|
||||
if (strstr(pdl, "application/pdf"))
|
||||
strlcat(value, ",PDF", sizeof(value));
|
||||
if (strstr(pdl, "application/postscript"))
|
||||
strlcat(value, ",PS", sizeof(value));
|
||||
if (strstr(pdl, "application/vnd.hp-PCL"))
|
||||
strlcat(value, ",PCL", sizeof(value));
|
||||
for (ptr = strstr(pdl, "image/"); ptr; ptr = strstr(ptr, "image/"))
|
||||
{
|
||||
char *valptr = value + strlen(value);
|
||||
/* Pointer into value */
|
||||
|
||||
if (valptr < (value + sizeof(value) - 1))
|
||||
*valptr++ = ',';
|
||||
|
||||
ptr += 6;
|
||||
while (isalnum(*ptr & 255) || *ptr == '-' || *ptr == '.')
|
||||
{
|
||||
if (isalnum(*ptr & 255) && valptr < (value + sizeof(value) - 1))
|
||||
*valptr++ = toupper(*ptr++ & 255);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
*valptr = '\0';
|
||||
}
|
||||
|
||||
ptr = device_id + strlen(device_id);
|
||||
snprintf(ptr, sizeof(device_id) - (ptr - device_id), "CMD:%s;",
|
||||
value + 1);
|
||||
}
|
||||
|
||||
if (device_id[0])
|
||||
device->device_id = strdup(device_id);
|
||||
else
|
||||
@@ -1329,5 +1276,5 @@ unquote(char *dst, /* I - Destination buffer */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: dnssd.c 11623 2014-02-19 20:18:10Z msweet $".
|
||||
* End of "$Id: dnssd.c 3833 2012-05-23 22:51:18Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: ieee1284.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: ieee1284.c 7687 2008-06-24 01:28:36Z mike $"
|
||||
*
|
||||
* IEEE-1284 support functions for CUPS.
|
||||
*
|
||||
@@ -487,5 +487,5 @@ backendGetMakeModel(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: ieee1284.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: ieee1284.c 7687 2008-06-24 01:28:36Z mike $".
|
||||
*/
|
||||
|
||||
+223
-534
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+4
-4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: lpd.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: lpd.c 7740 2008-07-14 23:58:05Z mike $"
|
||||
*
|
||||
* Line Printer Daemon backend for CUPS.
|
||||
*
|
||||
@@ -707,7 +707,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
*/
|
||||
|
||||
fprintf(stderr, "DEBUG: Connecting to %s:%d for printer %s\n", hostname,
|
||||
httpAddrPort(&(addrlist->addr)), printer);
|
||||
_httpAddrPort(&(addrlist->addr)), printer);
|
||||
_cupsLangPrintFilter(stderr, "INFO", _("Connecting to printer."));
|
||||
|
||||
for (lport = reserve == RESERVE_RFC1179 ? 732 : 1024, addr = addrlist,
|
||||
@@ -889,7 +889,7 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
|
||||
|
||||
fprintf(stderr, "DEBUG: Connected to %s:%d (local port %d)...\n",
|
||||
httpAddrString(&(addr->addr), addrname, sizeof(addrname)),
|
||||
httpAddrPort(&(addr->addr)), lport);
|
||||
_httpAddrPort(&(addr->addr)), lport);
|
||||
|
||||
/*
|
||||
* See if the printer supports SNMP...
|
||||
@@ -1331,5 +1331,5 @@ sigterm_handler(int sig) /* I - Signal */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: lpd.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: lpd.c 7740 2008-07-14 23:58:05Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,214 +0,0 @@
|
||||
# USB backend 'quirks' file.
|
||||
#
|
||||
# This file lists known issues with various vendors or printers. Each
|
||||
# line contains either a comment (starting with #) or the USB vendor ID,
|
||||
# product ID (omit for all vendor products), and a list of known issues:
|
||||
#
|
||||
# blacklist The printer is not functional with the USB backend.
|
||||
# no-reattach Do no re-attach usblp kernel module after printing.
|
||||
# soft-reset Do a soft reset after printing for cleanup.
|
||||
# unidir Only supported unidirectional I/O
|
||||
# usb-init Needs vendor USB initialization string.
|
||||
# vendor-class Uses vendor-specific class or subclass.
|
||||
# whitelist The printer is functional with the USB backend.
|
||||
|
||||
# HP DeskJet 895C
|
||||
0x03f0 0x0004 unidir
|
||||
|
||||
# HP DeskJet 880C
|
||||
0x03f0 0x0104 unidir
|
||||
|
||||
# HP DeskJet 815C
|
||||
0x03f0 0x0204 unidir
|
||||
|
||||
# HP DeskJet 810C/812C
|
||||
0x03f0 0x0304 unidir
|
||||
|
||||
# HP DeskJet 830C
|
||||
0x03f0 0x0404 unidir
|
||||
|
||||
# HP DeskJet 885C
|
||||
0x03f0 0x0504 unidir
|
||||
|
||||
# HP DeskJet 840C
|
||||
0x03f0 0x0604 unidir
|
||||
|
||||
# HP DeskJet 816C
|
||||
0x03f0 0x0804 unidir
|
||||
|
||||
# HP Deskjet 959C
|
||||
0x03f0 0x1104 unidir
|
||||
|
||||
# NEC Picty900 (HP OEM)
|
||||
0x0409 0xefbe unidir
|
||||
|
||||
# NEC Picty760 (HP OEM)
|
||||
0x0409 0xbef4 unidir
|
||||
|
||||
# NEC Picty920 (HP OEM)
|
||||
0x0409 0xf0be unidir
|
||||
|
||||
# NEC Picty800 (HP OEM)
|
||||
0x0409 0xf1be unidir
|
||||
|
||||
# Lexmark International, Inc. (e250d), https://bugs.launchpad.net/bugs/1084164
|
||||
0x043d 0x00f3 no-reattach
|
||||
|
||||
# Kyocera Mita FS 820, by zut <kernel@zut.de>
|
||||
0x0482 0x0010 unidir
|
||||
|
||||
# Canon, Inc. PIXMA iP6000D Printer, https://bugs.launchpad.net/bugs/1160638
|
||||
0x04a9 0x1095 unidir
|
||||
|
||||
# Canon, Inc. PIXMA iP4200 Printer, http://www.cups.org/str.php?L4155
|
||||
0x04a9 0x10a2 unidir
|
||||
|
||||
# Canon, Inc. PIXMA iP4300 Printer, https://bugs.launchpad.net/bugs/1032385
|
||||
0x04a9 0x10b6 unidir
|
||||
|
||||
# Canon, Inc. MP210 https://bugzilla.redhat.com/show_bug.cgi?id=847923#c53
|
||||
0x04a9 0x1721 unidir
|
||||
|
||||
# Canon, Inc. MP500 Printer, https://bugs.launchpad.net/bugs/1032456
|
||||
0x04a9 0x170c unidir
|
||||
|
||||
# Canon, Inc. MP510 Printer, https://bugs.launchpad.net/bugs/1050009
|
||||
0x04a9 0x1717 unidir
|
||||
|
||||
# Canon, Inc. MP550 Printer, http://www.cups.org/str.php?L4155
|
||||
0x04a9 0x173d unidir
|
||||
|
||||
# Canon, Inc. MP560 Printer, http://www.cups.org/str.php?L4155
|
||||
0x04a9 0x173e unidir
|
||||
|
||||
# Canon, Inc. MF4150 Printer, https://bugs.launchpad.net/bugs/1160638
|
||||
0x04a9 0x26a3 no-reattach
|
||||
|
||||
# Brother Industries, Ltd HL-1430 Laser Printer, https://bugs.launchpad.net/bugs/1038695
|
||||
0x04f9 0x001a no-reattach
|
||||
|
||||
# Brother Industries, Ltd HL-1440 Laser Printer, https://bugs.launchpad.net/bugs/1000253
|
||||
0x04f9 0x000d no-reattach unidir
|
||||
|
||||
# Brother Industries, Ltd HL-1450 Laser Printer, https://bugs.launchpad.net/bugs/1000253
|
||||
0x04f9 0x000e no-reattach unidir
|
||||
|
||||
# Oki Data Corp. Okipage 14ex Printer, https://bugs.launchpad.net/bugs/872483
|
||||
0x06bc 0x000b no-reattach
|
||||
|
||||
# Oki Data Corp. B410d, https://bugs.launchpad.net/bugs/872483
|
||||
0x06bc 0x01c7 no-reattach
|
||||
|
||||
# Seiko Epson Corp. Stylus Color 740 / Photo 750, http://bugs.debian.org/697970
|
||||
0x04b8 0x0001 no-reattach unidir
|
||||
|
||||
# Seiko Epson Corp. Stylus Color 670, https://bugs.launchpad.net/bugs/872483
|
||||
0x04b8 0x0005 no-reattach
|
||||
|
||||
# Seiko Epson Receipt Printer M129C
|
||||
0x04b8 0x0202 vendor-class
|
||||
|
||||
# Prolific Technology, Inc. PL2305 Parallel Port (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/987485
|
||||
0x067b 0x2305 no-reattach soft-reset unidir
|
||||
|
||||
# Xerox Phaser 3124 https://bugzilla.redhat.com/show_bug.cgi?id=867392
|
||||
0x0924 0x3ce9 no-reattach
|
||||
|
||||
# Xerox WorkCentre 3210 https://bugs.launchpad.net/bugs/1102470
|
||||
0x0924 0x4293 no-reattach
|
||||
|
||||
# QinHeng Electronics CH340S (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/1000253
|
||||
0x1a86 0x7584 no-reattach
|
||||
|
||||
# All Samsung devices, https://bugs.launchpad.net/bugs/1032456
|
||||
0x04e8 soft-reset
|
||||
|
||||
# All Zebra devices, https://bugs.launchpad.net/bugs/1001028
|
||||
0x0a5f unidir
|
||||
|
||||
# Canon CP-10
|
||||
0x04a9 0x304a blacklist
|
||||
|
||||
# Canon CP-100
|
||||
0x04a9 0x3063 blacklist
|
||||
|
||||
# Canon CP-200
|
||||
0x04a9 0x307c blacklist
|
||||
|
||||
# Canon CP-300
|
||||
0x04a9 0x307d blacklist
|
||||
|
||||
# Canon CP-220
|
||||
0x04a9 0x30bd blacklist
|
||||
|
||||
# Canon CP-330
|
||||
0x04a9 0x30be blacklist
|
||||
|
||||
# Canon SELPHY CP400
|
||||
0x04a9 0x30f6 blacklist
|
||||
|
||||
# Canon SELPHY CP600
|
||||
0x04a9 0x310b blacklist
|
||||
|
||||
# Canon SELPHY CP710
|
||||
0x04a9 0x3127 blacklist
|
||||
|
||||
# Canon SELPHY CP510
|
||||
0x04a9 0x3128 blacklist
|
||||
|
||||
# Canon SELPHY ES1
|
||||
0x04a9 0x3141 blacklist
|
||||
|
||||
# Canon SELPHY CP730
|
||||
0x04a9 0x3142 blacklist
|
||||
|
||||
# Canon SELPHY CP720
|
||||
0x04a9 0x3143 blacklist
|
||||
|
||||
# Canon SELPHY CP750
|
||||
0x04a9 0x3170 blacklist
|
||||
|
||||
# Canon SELPHY CP740
|
||||
0x04a9 0x3171 blacklist
|
||||
|
||||
# Canon SELPHY ES2
|
||||
0x04a9 0x3185 blacklist
|
||||
|
||||
# Canon SELPHY ES20
|
||||
0x04a9 0x3186 blacklist
|
||||
|
||||
# Canon SELPHY CP770
|
||||
0x04a9 0x31aa blacklist
|
||||
|
||||
# Canon SELPHY CP760
|
||||
0x04a9 0x31ab blacklist
|
||||
|
||||
# Canon SELPHY ES30
|
||||
0x04a9 0x31b0 blacklist
|
||||
|
||||
# Canon SELPHY CP780
|
||||
0x04a9 0x31dd blacklist
|
||||
|
||||
# Canon SELPHY ES40
|
||||
0x04a9 0x31ee blacklist
|
||||
|
||||
# Canon SELPHY CP800
|
||||
0x04a9 0x3214 blacklist
|
||||
|
||||
# Canon SELPHY CP900
|
||||
0x04a9 0x3255 blacklist
|
||||
|
||||
# Canon SELPHY CP810
|
||||
0x04a9 0x3256 blacklist
|
||||
|
||||
# Canon SELPHY CP500
|
||||
0x04a9 0x30f5 blacklist
|
||||
|
||||
# Canon SELPHY ES3
|
||||
0x04a9 0x31af blacklist
|
||||
|
||||
# Canon SELPHY CP780
|
||||
0x04a9 0x31dd blacklist
|
||||
|
||||
# Lexmark E238 (<rdar://problem/14493054>)
|
||||
0x043d 0x00d7 no-reattach
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: runloop.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: runloop.c 9565 2011-02-23 00:08:08Z mike $"
|
||||
*
|
||||
* Common run loop APIs for CUPS backends.
|
||||
*
|
||||
@@ -539,5 +539,5 @@ backendWaitLoop(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: runloop.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: runloop.c 9565 2011-02-23 00:08:08Z mike $".
|
||||
*/
|
||||
|
||||
+35
-65
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: snmp-supplies.c 11319 2013-09-27 16:18:26Z msweet $"
|
||||
* "$Id: snmp-supplies.c 4298 2013-05-10 16:52:10Z msweet $"
|
||||
*
|
||||
* SNMP supplies functions for CUPS.
|
||||
*
|
||||
@@ -62,7 +62,6 @@ typedef struct /**** Printer supply data ****/
|
||||
char name[CUPS_SNMP_MAX_STRING], /* Name of supply */
|
||||
color[8]; /* Color: "#RRGGBB" or "none" */
|
||||
int colorant, /* Colorant index */
|
||||
sclass, /* Supply class */
|
||||
type, /* Supply type */
|
||||
max_capacity, /* Maximum capacity */
|
||||
level; /* Current level value */
|
||||
@@ -149,13 +148,6 @@ static const int prtMarkerSuppliesMaxCapacity[] =
|
||||
(sizeof(prtMarkerSuppliesMaxCapacity) /
|
||||
sizeof(prtMarkerSuppliesMaxCapacity[0]));
|
||||
/* Offset to supply index */
|
||||
static const int prtMarkerSuppliesClass[] =
|
||||
{ CUPS_OID_prtMarkerSuppliesClass, -1 },
|
||||
/* Class OID */
|
||||
prtMarkerSuppliesClassOffset =
|
||||
(sizeof(prtMarkerSuppliesClass) /
|
||||
sizeof(prtMarkerSuppliesClass[0]));
|
||||
/* Offset to supply index */
|
||||
static const int prtMarkerSuppliesType[] =
|
||||
{ CUPS_OID_prtMarkerSuppliesType, -1 },
|
||||
/* Type OID */
|
||||
@@ -265,9 +257,6 @@ backendSNMPSupplies(
|
||||
else
|
||||
percent = 50;
|
||||
|
||||
if (supplies[i].sclass == CUPS_TC_receptacleThatIsFilled)
|
||||
percent = 100 - percent;
|
||||
|
||||
if (percent <= 5)
|
||||
{
|
||||
switch (supplies[i].type)
|
||||
@@ -329,9 +318,9 @@ backendSNMPSupplies(
|
||||
|
||||
if ((supplies[i].max_capacity > 0 || (quirks & CUPS_SNMP_CAPACITY)) &&
|
||||
supplies[i].level >= 0)
|
||||
snprintf(ptr, sizeof(value) - (ptr - value), "%d", percent);
|
||||
sprintf(ptr, "%d", percent);
|
||||
else
|
||||
strlcpy(ptr, "-1", sizeof(value) - (ptr - value));
|
||||
strcpy(ptr, "-1");
|
||||
}
|
||||
|
||||
fprintf(stderr, "ATTR: marker-levels=%s\n", value);
|
||||
@@ -469,34 +458,34 @@ backend_init_supplies(
|
||||
"other",
|
||||
"unknown",
|
||||
"toner",
|
||||
"waste-toner",
|
||||
"wasteToner",
|
||||
"ink",
|
||||
"ink-cartridge",
|
||||
"ink-ribbon",
|
||||
"waste-ink",
|
||||
"inkCartridge",
|
||||
"inkRibbon",
|
||||
"wasteInk",
|
||||
"opc",
|
||||
"developer",
|
||||
"fuser-oil",
|
||||
"solid-wax",
|
||||
"ribbon-wax",
|
||||
"waste-wax",
|
||||
"fuserOil",
|
||||
"solidWax",
|
||||
"ribbonWax",
|
||||
"wasteWax",
|
||||
"fuser",
|
||||
"corona-wire",
|
||||
"fuser-oil-wick",
|
||||
"cleaner-unit",
|
||||
"fuser-cleaning-pad",
|
||||
"transfer-unit",
|
||||
"toner-cartridge",
|
||||
"fuser-oiler",
|
||||
"coronaWire",
|
||||
"fuserOilWick",
|
||||
"cleanerUnit",
|
||||
"fuserCleaningPad",
|
||||
"transferUnit",
|
||||
"tonerCartridge",
|
||||
"fuserOiler",
|
||||
"water",
|
||||
"waste-water",
|
||||
"glue-water-additive",
|
||||
"waste-paper",
|
||||
"binding-supply",
|
||||
"banding-supply",
|
||||
"stitching-wire",
|
||||
"shrink-wrap",
|
||||
"paper-wrap",
|
||||
"wasteWater",
|
||||
"glueWaterAdditive",
|
||||
"wastePaper",
|
||||
"bindingSupply",
|
||||
"bandingSupply",
|
||||
"stitchingWire",
|
||||
"shrinkWrap",
|
||||
"paperWrap",
|
||||
"staples",
|
||||
"inserts",
|
||||
"covers"
|
||||
@@ -572,14 +561,14 @@ backend_init_supplies(
|
||||
/*
|
||||
* Yes, read the cache file:
|
||||
*
|
||||
* 3 num_supplies charset
|
||||
* 2 num_supplies charset
|
||||
* device description
|
||||
* supply structures...
|
||||
*/
|
||||
|
||||
if (cupsFileGets(cachefile, value, sizeof(value)))
|
||||
{
|
||||
if (sscanf(value, "3 %d%d", &num_supplies, &charset) == 2 &&
|
||||
if (sscanf(value, "2 %d%d", &num_supplies, &charset) == 2 &&
|
||||
num_supplies <= CUPS_MAX_SUPPLIES &&
|
||||
cupsFileGets(cachefile, value, sizeof(value)))
|
||||
{
|
||||
@@ -675,7 +664,7 @@ backend_init_supplies(
|
||||
|
||||
if ((cachefile = cupsFileOpen(cachefilename, "w")) != NULL)
|
||||
{
|
||||
cupsFilePrintf(cachefile, "3 %d %d\n", num_supplies, charset);
|
||||
cupsFilePrintf(cachefile, "2 %d %d\n", num_supplies, charset);
|
||||
cupsFilePrintf(cachefile, "%s\n", description);
|
||||
|
||||
if (num_supplies > 0)
|
||||
@@ -693,7 +682,7 @@ backend_init_supplies(
|
||||
*/
|
||||
|
||||
for (i = 0; i < num_supplies; i ++)
|
||||
strlcpy(supplies[i].color, "none", sizeof(supplies[i].color));
|
||||
strcpy(supplies[i].color, "none");
|
||||
|
||||
_cupsSNMPWalk(snmp_fd, ¤t_addr, CUPS_SNMP_VERSION_1,
|
||||
_cupsSNMPDefaultCommunity(), prtMarkerColorantValue,
|
||||
@@ -708,7 +697,7 @@ backend_init_supplies(
|
||||
if (i)
|
||||
*ptr++ = ',';
|
||||
|
||||
strlcpy(ptr, supplies[i].color, sizeof(value) - (ptr - value));
|
||||
strcpy(ptr, supplies[i].color);
|
||||
}
|
||||
|
||||
fprintf(stderr, "ATTR: marker-colors=%s\n", value);
|
||||
@@ -756,9 +745,9 @@ backend_init_supplies(
|
||||
type = supplies[i].type;
|
||||
|
||||
if (type < CUPS_TC_other || type > CUPS_TC_covers)
|
||||
strlcpy(ptr, "unknown", sizeof(value) - (ptr - value));
|
||||
strcpy(ptr, "unknown");
|
||||
else
|
||||
strlcpy(ptr, types[type - CUPS_TC_other], sizeof(value) - (ptr - value));
|
||||
strcpy(ptr, types[type - CUPS_TC_other]);
|
||||
}
|
||||
|
||||
fprintf(stderr, "ATTR: marker-types=%s\n", value);
|
||||
@@ -825,7 +814,7 @@ backend_walk_cb(cups_snmp_t *packet, /* I - SNMP packet */
|
||||
if (!_cups_strcasecmp(colors[k][0],
|
||||
(char *)packet->object_value.string.bytes))
|
||||
{
|
||||
strlcpy(supplies[j].color, colors[k][1], sizeof(supplies[j].color));
|
||||
strcpy(supplies[j].color, colors[k][1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -980,25 +969,6 @@ backend_walk_cb(cups_snmp_t *packet, /* I - SNMP packet */
|
||||
packet->object_value.integer > 0)
|
||||
supplies[i - 1].max_capacity = packet->object_value.integer;
|
||||
}
|
||||
else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesClass))
|
||||
{
|
||||
/*
|
||||
* Get marker class...
|
||||
*/
|
||||
|
||||
i = packet->object_name[prtMarkerSuppliesClassOffset];
|
||||
if (i < 1 || i > CUPS_MAX_SUPPLIES ||
|
||||
packet->object_type != CUPS_ASN1_INTEGER)
|
||||
return;
|
||||
|
||||
fprintf(stderr, "DEBUG2: prtMarkerSuppliesClass.1.%d = %d\n", i,
|
||||
packet->object_value.integer);
|
||||
|
||||
if (i > num_supplies)
|
||||
num_supplies = i;
|
||||
|
||||
supplies[i - 1].sclass = packet->object_value.integer;
|
||||
}
|
||||
else if (_cupsSNMPIsOIDPrefixed(packet, prtMarkerSuppliesType))
|
||||
{
|
||||
/*
|
||||
@@ -1103,5 +1073,5 @@ utf16_to_utf8(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: snmp-supplies.c 11319 2013-09-27 16:18:26Z msweet $".
|
||||
* End of "$Id: snmp-supplies.c 4298 2013-05-10 16:52:10Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: snmp.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: snmp.c 7810 2008-07-29 01:11:15Z mike $"
|
||||
*
|
||||
* SNMP discovery backend for CUPS.
|
||||
*
|
||||
@@ -1391,5 +1391,5 @@ update_cache(snmp_cache_t *device, /* I - Device */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: snmp.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: snmp.c 7810 2008-07-29 01:11:15Z mike $".
|
||||
*/
|
||||
|
||||
+18
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: socket.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: socket.c 7881 2008-08-28 20:21:56Z mike $"
|
||||
*
|
||||
* AppSocket backend for CUPS.
|
||||
*
|
||||
@@ -73,6 +73,10 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
int print_fd; /* Print file */
|
||||
int copies; /* Number of copies to print */
|
||||
time_t start_time; /* Time of first connect */
|
||||
#ifdef __APPLE__
|
||||
time_t current_time, /* Current time */
|
||||
wait_time; /* Time to wait before shutting down socket */
|
||||
#endif /* __APPLE__ */
|
||||
int contimeout; /* Connection timeout */
|
||||
int waiteof; /* Wait for end-of-file? */
|
||||
int port; /* Port number */
|
||||
@@ -406,7 +410,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
fprintf(stderr, "DEBUG: Connected to %s:%d...\n",
|
||||
httpAddrString(&(addr->addr), addrname, sizeof(addrname)),
|
||||
httpAddrPort(&(addr->addr)));
|
||||
_httpAddrPort(&(addr->addr)));
|
||||
|
||||
/*
|
||||
* Print everything...
|
||||
@@ -434,6 +438,17 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
_cupsLangPrintFilter(stderr, "INFO", _("Print file sent."));
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
/*
|
||||
* Wait up to 5 seconds to get any pending back-channel data...
|
||||
*/
|
||||
|
||||
wait_time = time(NULL) + 5;
|
||||
while (wait_time >= time(¤t_time))
|
||||
if (wait_bc(device_fd, wait_time - current_time) <= 0)
|
||||
break;
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
if (waiteof)
|
||||
{
|
||||
/*
|
||||
@@ -520,5 +535,5 @@ wait_bc(int device_fd, /* I - Socket */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: socket.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: socket.c 7881 2008-08-28 20:21:56Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: test1284.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: test1284.c 7465 2008-04-18 16:20:11Z mike $"
|
||||
*
|
||||
* IEEE-1284 support functions test program for CUPS.
|
||||
*
|
||||
@@ -80,5 +80,5 @@ main(int argc, /* I - Number of command-line args */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: test1284.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: test1284.c 7465 2008-04-18 16:20:11Z mike $".
|
||||
*/
|
||||
|
||||
+3
-15
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: testbackend.c 4297 2013-05-10 16:04:59Z msweet $"
|
||||
* "$Id: testbackend.c 3755 2012-03-30 05:59:14Z msweet $"
|
||||
*
|
||||
* Backend test program for CUPS.
|
||||
*
|
||||
@@ -667,22 +667,10 @@ walk_cb(const char *oid, /* I - OID */
|
||||
int datalen, /* I - Length of data */
|
||||
void *context) /* I - Context (unused) */
|
||||
{
|
||||
char temp[80];
|
||||
if (datalen > (sizeof(temp) - 1))
|
||||
{
|
||||
memcpy(temp, data, sizeof(temp) - 1);
|
||||
temp[sizeof(temp) - 1] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(temp, data, datalen);
|
||||
temp[datalen] = '\0';
|
||||
}
|
||||
|
||||
printf("CUPS_SC_CMD_SNMP_WALK %s, %d bytes (%s)\n", oid, datalen, temp);
|
||||
printf("CUPS_SC_CMD_SNMP_WALK %s, %d bytes (%s)\n", oid, datalen, data);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: testbackend.c 4297 2013-05-10 16:04:59Z msweet $".
|
||||
* End of "$Id: testbackend.c 3755 2012-03-30 05:59:14Z msweet $".
|
||||
*/
|
||||
|
||||
+55
-136
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "$Id: usb-darwin.c 11670 2014-03-04 14:53:59Z msweet $"
|
||||
* "$Id: usb-darwin.c 7953 2008-09-17 01:43:19Z mike $"
|
||||
*
|
||||
* Copyright 2005-2014 Apple Inc. All rights reserved.
|
||||
* Copyright 2005-2012 Apple Inc. All rights reserved.
|
||||
*
|
||||
* IMPORTANT: This Apple software is supplied to you by Apple Computer,
|
||||
* Inc. ("Apple") in consideration of your agreement to the following
|
||||
@@ -40,6 +40,35 @@
|
||||
* AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
* STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* list_devices() - List all USB devices.
|
||||
* print_device() - Print a file to a USB device.
|
||||
* read_thread() - Thread to read the backchannel data on.
|
||||
* sidechannel_thread() - Handle side-channel requests.
|
||||
* iterate_printers() - Iterate over all the printers.
|
||||
* device_added() - Device added notifier.
|
||||
* list_device_cb() - list_device iterator callback.
|
||||
* find_device_cb() - print_device iterator callback.
|
||||
* status_timer_cb() - Status timer callback.
|
||||
* copy_deviceinfo() - Copy strings from the 1284 device ID.
|
||||
* release_deviceinfo() - Release deviceinfo strings.
|
||||
* load_classdriver() - Load a classdriver.
|
||||
* unload_classdriver() - Unload a classdriver.
|
||||
* load_printerdriver() - Load vendor's classdriver.
|
||||
* registry_open() - Open a connection to the printer.
|
||||
* registry_close() - Close the connection to the printer.
|
||||
* copy_deviceid() - Copy the 1284 device id string.
|
||||
* copy_devicestring() - Copy the 1284 device id string.
|
||||
* copy_value_for_key() - Copy value string associated with a key.
|
||||
* cfstr_create_trim() - Create CFString and trim whitespace characters.
|
||||
* parse_options() - Parse URI options.
|
||||
* sigterm_handler() - SIGTERM handler.
|
||||
* next_line() - Find the next line in a buffer.
|
||||
* parse_pserror() - Scan the backchannel data for postscript errors.
|
||||
* soft_reset() - Send a soft reset to the device.
|
||||
* get_device_id() - Return IEEE-1284 device ID.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -67,8 +96,7 @@
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#include <IOKit/usb/IOUSBLib.h>
|
||||
#include <IOKit/IOCFPlugIn.h>
|
||||
#include <libproc.h>
|
||||
#include <asl.h>
|
||||
|
||||
#include <spawn.h>
|
||||
#include <pthread.h>
|
||||
|
||||
@@ -106,26 +134,6 @@ extern char **environ;
|
||||
#define kUSBGenericTOPrinterClassDriver CFSTR("/System/Library/Printers/Libraries/USBGenericPrintingClass.plugin")
|
||||
#define kUSBPrinterClassDeviceNotOpen -9664 /*kPMInvalidIOMContext*/
|
||||
|
||||
#define CRSetCrashLogMessage(m) _crc_make_setter(message, m)
|
||||
#define _crc_make_setter(attr, arg) (gCRAnnotations.attr = (uint64_t)(unsigned long)(arg))
|
||||
#define CRASH_REPORTER_CLIENT_HIDDEN __attribute__((visibility("hidden")))
|
||||
#define CRASHREPORTER_ANNOTATIONS_VERSION 4
|
||||
#define CRASHREPORTER_ANNOTATIONS_SECTION "__crash_info"
|
||||
|
||||
struct crashreporter_annotations_t {
|
||||
uint64_t version; // unsigned long
|
||||
uint64_t message; // char *
|
||||
uint64_t signature_string; // char *
|
||||
uint64_t backtrace; // char *
|
||||
uint64_t message2; // char *
|
||||
uint64_t thread; // uint64_t
|
||||
uint64_t dialog_mode; // unsigned int
|
||||
};
|
||||
|
||||
CRASH_REPORTER_CLIENT_HIDDEN
|
||||
struct crashreporter_annotations_t gCRAnnotations
|
||||
__attribute__((section("__DATA," CRASHREPORTER_ANNOTATIONS_SECTION)))
|
||||
= { CRASHREPORTER_ANNOTATIONS_VERSION, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
/*
|
||||
* Section 5.3 USB Printing Class spec
|
||||
@@ -171,7 +179,7 @@ typedef struct classdriver_s /**** g.classdriver context ****/
|
||||
UInt16 vendorID; /* Vendor id */
|
||||
UInt16 productID; /* Product id */
|
||||
printer_interface_t interface; /* identify the device to IOKit */
|
||||
UInt8 outpipe; /* mandatory bulkOut pipe */
|
||||
UInt8 outpipe; /* mandatory bulkOut pipe */
|
||||
UInt8 inpipe; /* optional bulkIn pipe */
|
||||
|
||||
/* general class requests */
|
||||
@@ -251,7 +259,6 @@ typedef struct globals_s
|
||||
*/
|
||||
|
||||
globals_t g = { 0 }; /* Globals */
|
||||
int Iterating = 0; /* Are we iterating the bus? */
|
||||
|
||||
|
||||
/*
|
||||
@@ -280,16 +287,12 @@ static void release_deviceinfo(CFStringRef *make, CFStringRef *model, CFStringRe
|
||||
static void setup_cfLanguage(void);
|
||||
static void soft_reset(void);
|
||||
static void status_timer_cb(CFRunLoopTimerRef timer, void *info);
|
||||
static void log_usb_class_driver(int is_64bit);
|
||||
#define IS_64BIT 1
|
||||
#define IS_NOT_64BIT 0
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
static pid_t child_pid; /* Child PID */
|
||||
static void run_legacy_backend(int argc, char *argv[], int fd); /* Starts child backend process running as a ppc executable */
|
||||
#endif /* __i386__ || __x86_64__ */
|
||||
static void sigterm_handler(int sig); /* SIGTERM handler */
|
||||
static void sigquit_handler(int sig, siginfo_t *si, void *unused);
|
||||
|
||||
#ifdef PARSE_PS_ERRORS
|
||||
static const char *next_line (const char *buffer);
|
||||
@@ -341,20 +344,10 @@ print_device(const char *uri, /* I - Device URI */
|
||||
struct timeval *timeout, /* Timeout pointer */
|
||||
tv; /* Time value */
|
||||
struct timespec cond_timeout; /* pthread condition timeout */
|
||||
struct sigaction action; /* Actions for POSIX signals */
|
||||
|
||||
|
||||
(void)uri;
|
||||
|
||||
/*
|
||||
* Catch SIGQUIT to determine who is sending it...
|
||||
*/
|
||||
|
||||
memset(&action, 0, sizeof(action));
|
||||
action.sa_sigaction = sigquit_handler;
|
||||
action.sa_flags = SA_SIGINFO;
|
||||
sigaction(SIGQUIT, &action, NULL);
|
||||
|
||||
/*
|
||||
* See if the side-channel descriptor is valid...
|
||||
*/
|
||||
@@ -451,11 +444,6 @@ print_device(const char *uri, /* I - Device URI */
|
||||
return (CUPS_BACKEND_STOP);
|
||||
}
|
||||
|
||||
#ifdef __x86_64__
|
||||
if (status == noErr && driverBundlePath != NULL && CFStringCompare(driverBundlePath, kUSBGenericTOPrinterClassDriver, 0) != kCFCompareEqualTo)
|
||||
log_usb_class_driver(IS_64BIT);
|
||||
#endif /* __x86_64__ */
|
||||
|
||||
if (driverBundlePath)
|
||||
CFRelease(driverBundlePath);
|
||||
|
||||
@@ -484,6 +472,9 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
if (!print_fd)
|
||||
{
|
||||
struct sigaction action; /* POSIX signal action */
|
||||
|
||||
|
||||
memset(&action, 0, sizeof(action));
|
||||
|
||||
sigemptyset(&action.sa_mask);
|
||||
@@ -693,7 +684,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
/*
|
||||
* Ignore timeout errors, but retain the number of bytes written to
|
||||
* avoid sending duplicate data...
|
||||
* avoid sending duplicate data (<rdar://problem/6254911>)...
|
||||
*/
|
||||
|
||||
if (iostatus == kIOUSBTransactionTimeout)
|
||||
@@ -716,7 +707,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
/*
|
||||
* Retry a write after an aborted write since we probably just got
|
||||
* SIGTERM...
|
||||
* SIGTERM (<rdar://problem/6860126>)...
|
||||
*/
|
||||
|
||||
else if (iostatus == kIOReturnAborted)
|
||||
@@ -1086,8 +1077,6 @@ sidechannel_thread(void *reference)
|
||||
static void iterate_printers(iterator_callback_t callBack,
|
||||
void *userdata)
|
||||
{
|
||||
Iterating = 1;
|
||||
|
||||
mach_port_t masterPort = 0x0;
|
||||
kern_return_t kr = IOMasterPort (bootstrap_port, &masterPort);
|
||||
|
||||
@@ -1111,7 +1100,7 @@ static void iterate_printers(iterator_callback_t callBack,
|
||||
CFRelease(usb_klass);
|
||||
CFRelease(usb_subklass);
|
||||
|
||||
IOServiceAddMatchingNotification(addNotification, kIOMatchedNotification, usbPrinterMatchDictionary, &device_added, &reference, &addIterator);
|
||||
kr = IOServiceAddMatchingNotification(addNotification, kIOMatchedNotification, usbPrinterMatchDictionary, &device_added, &reference, &addIterator);
|
||||
if (addIterator != 0x0)
|
||||
{
|
||||
device_added (&reference, addIterator);
|
||||
@@ -1125,8 +1114,6 @@ static void iterate_printers(iterator_callback_t callBack,
|
||||
}
|
||||
mach_port_deallocate(mach_task_self(), masterPort);
|
||||
}
|
||||
|
||||
Iterating = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1150,7 +1137,7 @@ static void device_added(void *userdata,
|
||||
|
||||
/* One last call to the call back now that we are not longer have printers left to iterate...
|
||||
*/
|
||||
if (reference->keepRunning && reference->callback)
|
||||
if (reference->keepRunning)
|
||||
reference->keepRunning = reference->callback(reference->userdata, 0x0);
|
||||
|
||||
if (!reference->keepRunning)
|
||||
@@ -1193,12 +1180,12 @@ static Boolean list_device_cb(void *refcon,
|
||||
if (!make ||
|
||||
!CFStringGetCString(make, makestr, sizeof(makestr),
|
||||
kCFStringEncodingUTF8))
|
||||
strlcpy(makestr, "Unknown", sizeof(makestr));
|
||||
strcpy(makestr, "Unknown");
|
||||
|
||||
if (!model ||
|
||||
!CFStringGetCString(model, &modelstr[1], sizeof(modelstr)-1,
|
||||
kCFStringEncodingUTF8))
|
||||
strlcpy(modelstr + 1, "Printer", sizeof(modelstr) - 1);
|
||||
strcpy(modelstr + 1, "Printer");
|
||||
|
||||
optionsstr[0] = '\0';
|
||||
if (serial != NULL)
|
||||
@@ -1415,7 +1402,7 @@ static kern_return_t load_classdriver(CFStringRef driverPath,
|
||||
|
||||
_cups_fc_result_t result = _cupsFileCheck(bundlestr,
|
||||
_CUPS_FILE_CHECK_DIRECTORY, 1,
|
||||
Iterating ? NULL : _cupsFileCheckFilter, NULL);
|
||||
_cupsFileCheckFilter, NULL);
|
||||
|
||||
if (result && driverPath)
|
||||
return (load_classdriver(NULL, interface, printerDriver));
|
||||
@@ -1582,12 +1569,11 @@ static kern_return_t registry_close(void)
|
||||
static OSStatus copy_deviceid(classdriver_t **classdriver,
|
||||
CFStringRef *deviceID)
|
||||
{
|
||||
CFStringRef devID = NULL;
|
||||
CFStringRef deviceMake = NULL;
|
||||
CFStringRef deviceModel = NULL;
|
||||
CFStringRef deviceSerial = NULL;
|
||||
CFStringRef devID = NULL,
|
||||
|
||||
*deviceID = NULL;
|
||||
deviceMake = NULL,
|
||||
deviceModel = NULL,
|
||||
deviceSerial = NULL;
|
||||
|
||||
OSStatus err = (*classdriver)->GetDeviceID(classdriver, &devID, DEFAULT_TIMEOUT);
|
||||
|
||||
@@ -1633,10 +1619,12 @@ static OSStatus copy_deviceid(classdriver_t **classdriver,
|
||||
|
||||
if (deviceSerial == NULL && desc.iSerialNumber != 0)
|
||||
{
|
||||
err = (*classdriver)->GetString(classdriver, desc.iSerialNumber, kUSBLanguageEnglish, DEFAULT_TIMEOUT, &deviceSerial);
|
||||
if (deviceSerial != NULL)
|
||||
CFStringRef data = NULL;
|
||||
err = (*classdriver)->GetString(classdriver, desc.iSerialNumber, kUSBLanguageEnglish, DEFAULT_TIMEOUT, &data);
|
||||
if (data != NULL)
|
||||
{
|
||||
CFStringAppendFormat(newDevID, NULL, CFSTR("SERN:%@;"), deviceSerial);
|
||||
CFStringAppendFormat(newDevID, NULL, CFSTR("SERN:%@;"), data);
|
||||
CFRelease(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1653,21 +1641,6 @@ static OSStatus copy_deviceid(classdriver_t **classdriver,
|
||||
{
|
||||
*deviceID = devID;
|
||||
}
|
||||
|
||||
if (*deviceID == NULL)
|
||||
return err;
|
||||
|
||||
/* Remove special characters from the serial number */
|
||||
CFRange range = (deviceSerial != NULL ? CFStringFind(deviceSerial, CFSTR("+"), 0) : CFRangeMake(0, 0));
|
||||
if (range.length == 1) {
|
||||
range = CFStringFind(*deviceID, deviceSerial, 0);
|
||||
|
||||
CFMutableStringRef deviceIDString = CFStringCreateMutableCopy(NULL, 0, *deviceID);
|
||||
CFStringFindAndReplace(deviceIDString, CFSTR("+"), CFSTR(""), range, 0);
|
||||
CFRelease(*deviceID);
|
||||
*deviceID = deviceIDString;
|
||||
}
|
||||
|
||||
release_deviceinfo(&deviceMake, &deviceModel, &deviceSerial);
|
||||
|
||||
return err;
|
||||
@@ -1712,7 +1685,7 @@ static void copy_devicestring(io_service_t usbInterface,
|
||||
kr = load_classdriver(NULL, interface, &klassDriver);
|
||||
|
||||
if (kr == kIOReturnSuccess && klassDriver != NULL)
|
||||
copy_deviceid(klassDriver, deviceID);
|
||||
kr = copy_deviceid(klassDriver, deviceID);
|
||||
|
||||
unload_classdriver(&klassDriver);
|
||||
|
||||
@@ -1955,8 +1928,6 @@ static void run_legacy_backend(int argc,
|
||||
|
||||
if (!usb_legacy_status)
|
||||
{
|
||||
log_usb_class_driver(IS_NOT_64BIT);
|
||||
|
||||
/*
|
||||
* Setup a SIGTERM handler then block it before forking...
|
||||
*/
|
||||
@@ -2123,32 +2094,6 @@ sigterm_handler(int sig) /* I - Signal */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'sigquit_handler()' - SIGQUIT handler.
|
||||
*/
|
||||
|
||||
static void sigquit_handler(int sig, siginfo_t *si, void *unused)
|
||||
{
|
||||
char *path;
|
||||
char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
|
||||
static char msgbuf[256] = "";
|
||||
|
||||
|
||||
(void)sig;
|
||||
(void)unused;
|
||||
|
||||
if (proc_pidpath(si->si_pid, pathbuf, sizeof(pathbuf)) > 0 &&
|
||||
(path = basename(pathbuf)) != NULL)
|
||||
snprintf(msgbuf, sizeof(msgbuf), "SIGQUIT sent by %s(%d)", path, (int)si->si_pid);
|
||||
else
|
||||
snprintf(msgbuf, sizeof(msgbuf), "SIGQUIT sent by PID %d", (int)si->si_pid);
|
||||
|
||||
CRSetCrashLogMessage(msgbuf);
|
||||
|
||||
abort();
|
||||
}
|
||||
|
||||
|
||||
#ifdef PARSE_PS_ERRORS
|
||||
/*
|
||||
* 'next_line()' - Find the next line in a buffer.
|
||||
@@ -2219,7 +2164,7 @@ static void parse_pserror(char *sockBuffer,
|
||||
}
|
||||
|
||||
/* move everything over... */
|
||||
strlcpy(gErrorBuffer, pLineEnd, sizeof(gErrorBuffer));
|
||||
strcpy(gErrorBuffer, pLineEnd);
|
||||
gErrorBufferPtr = gErrorBuffer;
|
||||
pLineEnd = (char *)next_line((const char *)gErrorBuffer);
|
||||
}
|
||||
@@ -2319,32 +2264,6 @@ static void get_device_id(cups_sc_status_t *status,
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
log_usb_class_driver(int is_64bit) /* I - Is the USB class driver 64-bit? */
|
||||
{
|
||||
/*
|
||||
* Report the usage of legacy USB class drivers to Apple if the user opts into providing
|
||||
* feedback to Apple...
|
||||
*/
|
||||
|
||||
aslmsg aslm = asl_new(ASL_TYPE_MSG);
|
||||
if (aslm)
|
||||
{
|
||||
ppd_file_t *ppd = ppdOpenFile(getenv("PPD"));
|
||||
const char *make_model = ppd ? ppd->nickname : NULL;
|
||||
ppd_attr_t *version = ppdFindAttr(ppd, "FileVersion", "");
|
||||
|
||||
asl_set(aslm, "com.apple.message.domain", "com.apple.printing.usb.64bit");
|
||||
asl_set(aslm, "com.apple.message.result", is_64bit ? "yes" : "no");
|
||||
asl_set(aslm, "com.apple.message.signature", make_model ? make_model : "Unknown");
|
||||
asl_set(aslm, "com.apple.message.signature2", version ? version->value : "?.?");
|
||||
asl_set(aslm, "com.apple.message.summarize", "YES");
|
||||
asl_log(NULL, aslm, ASL_LEVEL_NOTICE, "");
|
||||
asl_free(aslm);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: usb-darwin.c 11670 2014-03-04 14:53:59Z msweet $".
|
||||
* End of "$Id: usb-darwin.c 7953 2008-09-17 01:43:19Z mike $".
|
||||
*/
|
||||
|
||||
+209
-248
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: usb-libusb.c 11456 2013-12-09 19:26:47Z msweet $"
|
||||
* "$Id: usb-libusb.c 10979 2013-05-13 17:39:19Z msweet $"
|
||||
*
|
||||
* LIBUSB interface code for CUPS.
|
||||
*
|
||||
@@ -16,20 +16,18 @@
|
||||
* list_devices() - List the available printers.
|
||||
* print_device() - Print a file to a USB device.
|
||||
* close_device() - Close the connection to the USB printer.
|
||||
* compare_quirks() - Compare two quirks entries.
|
||||
* find_device() - Find or enumerate USB printers.
|
||||
* find_quirks() - Find the quirks for the given printer, if any.
|
||||
* get_device_id() - Get the IEEE-1284 device ID for the printer.
|
||||
* list_cb() - List USB printers for discovery.
|
||||
* load_quirks() - Load all quirks files in the /usr/share/cups/usb
|
||||
* directory.
|
||||
* make_device_uri() - Create a device URI for a USB printer.
|
||||
* open_device() - Open a connection to the USB printer.
|
||||
* print_cb() - Find a USB printer for printing.
|
||||
* printer_class_soft_reset()' - Do the soft reset request specific to
|
||||
* printers
|
||||
* quirks() - Get the known quirks of a given printer model
|
||||
* read_thread() - Thread to read the backchannel data on.
|
||||
* sidechannel_thread() - Handle side-channel requests.
|
||||
* soft_reset() - Send a soft reset to the device.
|
||||
* soft_reset_printer() - Do the soft reset request specific to printers
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -38,7 +36,6 @@
|
||||
|
||||
#include <libusb.h>
|
||||
#include <cups/cups-private.h>
|
||||
#include <cups/dir.h>
|
||||
#include <pthread.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/types.h>
|
||||
@@ -73,15 +70,15 @@ typedef struct usb_printer_s /**** USB Printer Data ****/
|
||||
read_endp, /* Read endpoint */
|
||||
protocol, /* Protocol: 1 = Uni-di, 2 = Bi-di. */
|
||||
usblp_attached, /* "usblp" kernel module attached? */
|
||||
reset_after_job;/* Set to 1 by print_device() */
|
||||
unsigned quirks; /* Quirks flags */
|
||||
reset_after_job; /* Set to 1 by print_device() */
|
||||
unsigned int quirks; /* Quirks flags */
|
||||
struct libusb_device_handle *handle; /* Open handle to device */
|
||||
} usb_printer_t;
|
||||
|
||||
typedef int (*usb_cb_t)(usb_printer_t *, const char *, const char *,
|
||||
const void *);
|
||||
|
||||
typedef struct usb_globals_s /* Global USB printer information */
|
||||
typedef struct usb_globals_s
|
||||
{
|
||||
usb_printer_t *printer; /* Printer */
|
||||
|
||||
@@ -108,41 +105,143 @@ typedef struct usb_globals_s /* Global USB printer information */
|
||||
} usb_globals_t;
|
||||
|
||||
/*
|
||||
* Quirks: various printer quirks are handled by this structure and its flags.
|
||||
* Quirks: various printer quirks are handled by this table & its flags.
|
||||
*
|
||||
* The quirks table used to be compiled into the backend but is now loaded from
|
||||
* one or more files in the /usr/share/cups/usb directory.
|
||||
* This is copied from the usblp kernel module. So we can easily copy and paste
|
||||
* new quirks from the module.
|
||||
*/
|
||||
|
||||
#define USB_QUIRK_BLACKLIST 0x0001 /* Does not conform to the spec */
|
||||
#define USB_QUIRK_NO_REATTACH 0x0002 /* After printing we cannot re-attach
|
||||
the usblp kernel module */
|
||||
#define USB_QUIRK_SOFT_RESET 0x0004 /* After printing do a soft reset
|
||||
for clean-up */
|
||||
#define USB_QUIRK_UNIDIR 0x0008 /* Requires unidirectional mode */
|
||||
#define USB_QUIRK_USB_INIT 0x0010 /* Needs vendor USB init string */
|
||||
#define USB_QUIRK_VENDOR_CLASS 0x0020 /* Descriptor uses vendor-specific
|
||||
struct quirk_printer_struct {
|
||||
int vendorId;
|
||||
int productId;
|
||||
unsigned int quirks;
|
||||
};
|
||||
|
||||
#define USBLP_QUIRK_BIDIR 0x1 /* reports bidir but requires
|
||||
unidirectional mode (no INs/reads) */
|
||||
#define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */
|
||||
#define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific
|
||||
Class or SubClass */
|
||||
#define USB_QUIRK_WHITELIST 0x0000 /* no quirks */
|
||||
|
||||
|
||||
typedef struct usb_quirk_s /* USB "quirk" information */
|
||||
{
|
||||
int vendor_id, /* Affected vendor ID */
|
||||
product_id; /* Affected product ID or 0 for all */
|
||||
unsigned quirks; /* Quirks bitfield */
|
||||
} usb_quirk_t;
|
||||
|
||||
#define USBLP_QUIRK_BLACKLIST 0x8 /* these printers do not conform to the USB print spec */
|
||||
#define USBLP_QUIRK_RESET 0x4000 /* After printing do a reset
|
||||
for clean-up */
|
||||
#define USBLP_QUIRK_NO_REATTACH 0x8000 /* After printing we cannot re-attach
|
||||
the usblp kernel module */
|
||||
|
||||
static const struct quirk_printer_struct quirk_printers[] = {
|
||||
{ 0x03f0, 0x0004, USBLP_QUIRK_BIDIR }, /* HP DeskJet 895C */
|
||||
{ 0x03f0, 0x0104, USBLP_QUIRK_BIDIR }, /* HP DeskJet 880C */
|
||||
{ 0x03f0, 0x0204, USBLP_QUIRK_BIDIR }, /* HP DeskJet 815C */
|
||||
{ 0x03f0, 0x0304, USBLP_QUIRK_BIDIR }, /* HP DeskJet 810C/812C */
|
||||
{ 0x03f0, 0x0404, USBLP_QUIRK_BIDIR }, /* HP DeskJet 830C */
|
||||
{ 0x03f0, 0x0504, USBLP_QUIRK_BIDIR }, /* HP DeskJet 885C */
|
||||
{ 0x03f0, 0x0604, USBLP_QUIRK_BIDIR }, /* HP DeskJet 840C */
|
||||
{ 0x03f0, 0x0804, USBLP_QUIRK_BIDIR }, /* HP DeskJet 816C */
|
||||
{ 0x03f0, 0x1104, USBLP_QUIRK_BIDIR }, /* HP Deskjet 959C */
|
||||
{ 0x0409, 0xefbe, USBLP_QUIRK_BIDIR }, /* NEC Picty900 (HP OEM) */
|
||||
{ 0x0409, 0xbef4, USBLP_QUIRK_BIDIR }, /* NEC Picty760 (HP OEM) */
|
||||
{ 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */
|
||||
{ 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */
|
||||
{ 0x043d, 0x00f3, USBLP_QUIRK_NO_REATTACH }, /* Lexmark International,
|
||||
Inc. (e250d), https://bugs.launchpad.net/bugs/1084164 */
|
||||
{ 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820,
|
||||
by zut <kernel@zut.de> */
|
||||
{ 0x04a9, 0x1095, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP6000D
|
||||
Printer, https://bugs.launchpad.net/bugs/1160638 */
|
||||
{ 0x04a9, 0x10a2, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4200
|
||||
Printer, http://www.cups.org/str.php?L4155 */
|
||||
{ 0x04a9, 0x10b6, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4300
|
||||
Printer, https://bugs.launchpad.net/bugs/1032385 */
|
||||
{ 0x04a9, 0x1721, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP210
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=847923#c53 */
|
||||
{ 0x04a9, 0x170c, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP500
|
||||
Printer, https://bugs.launchpad.net/bugs/1032456 */
|
||||
{ 0x04a9, 0x1717, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP510
|
||||
Printer, https://bugs.launchpad.net/bugs/1050009 */
|
||||
{ 0x04a9, 0x173d, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP550
|
||||
Printer, http://www.cups.org/str.php?L4155 */
|
||||
{ 0x04a9, 0x173e, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP560
|
||||
Printer, http://www.cups.org/str.php?L4155 */
|
||||
{ 0x04a9, 0x26a3, USBLP_QUIRK_NO_REATTACH }, /* Canon, Inc. MF4150
|
||||
Printer, https://bugs.launchpad.net/bugs/1160638 */
|
||||
{ 0x04f9, 0x001a, USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
|
||||
HL-1430 Laser Printer,
|
||||
https://bugs.launchpad.net/bugs/1038695 */
|
||||
{ 0x04f9, 0x000d, USBLP_QUIRK_BIDIR |
|
||||
USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
|
||||
HL-1440 Laser Printer,
|
||||
https://bugs.launchpad.net/bugs/1000253 */
|
||||
{ 0x04f9, 0x000e, USBLP_QUIRK_BIDIR |
|
||||
USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
|
||||
HL-1450 Laser Printer,
|
||||
https://bugs.launchpad.net/bugs/1000253 */
|
||||
{ 0x06bc, 0x000b, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp.
|
||||
Okipage 14ex Printer,
|
||||
https://bugs.launchpad.net/bugs/872483 */
|
||||
{ 0x06bc, 0x01c7, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp. B410d,
|
||||
https://bugs.launchpad.net/bugs/872483 */
|
||||
{ 0x04b8, 0x0001, USBLP_QUIRK_BIDIR |
|
||||
USBLP_QUIRK_NO_REATTACH }, /* Seiko Epson Corp. Stylus Color 740 / Photo 750,
|
||||
http://bugs.debian.org/697970 */
|
||||
{ 0x04b8, 0x0005, USBLP_QUIRK_NO_REATTACH }, /* Seiko Epson Corp. Stylus Color 670,
|
||||
https://bugs.launchpad.net/bugs/872483 */
|
||||
{ 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt
|
||||
Printer M129C */
|
||||
{ 0x067b, 0x2305, USBLP_QUIRK_BIDIR |
|
||||
USBLP_QUIRK_NO_REATTACH |
|
||||
USBLP_QUIRK_RESET },
|
||||
/* Prolific Technology, Inc. PL2305 Parallel Port
|
||||
(USB -> Parallel adapter), https://bugs.launchpad.net/bugs/987485 */
|
||||
{ 0x0924, 0x3ce9, USBLP_QUIRK_NO_REATTACH }, /* Xerox Phaser 3124
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=867392 */
|
||||
{ 0x0924, 0x4293, USBLP_QUIRK_NO_REATTACH }, /* Xerox WorkCentre 3210
|
||||
https://bugs.launchpad.net/bugs/1102470 */
|
||||
{ 0x1a86, 0x7584, USBLP_QUIRK_NO_REATTACH }, /* QinHeng Electronics
|
||||
CH340S (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/1000253 */
|
||||
{ 0x04e8, 0x0000, USBLP_QUIRK_RESET }, /* All Samsung devices,
|
||||
https://bugs.launchpad.net/bugs/1032456 */
|
||||
{ 0x0a5f, 0x0000, USBLP_QUIRK_BIDIR }, /* All Zebra devices,
|
||||
https://bugs.launchpad.net/bugs/1001028 */
|
||||
/* Canon */
|
||||
{ 0x04a9, 0x304a, USBLP_QUIRK_BLACKLIST }, /* Canon CP-10 */
|
||||
{ 0x04a9, 0x3063, USBLP_QUIRK_BLACKLIST }, /* Canon CP-100 */
|
||||
{ 0x04a9, 0x307c, USBLP_QUIRK_BLACKLIST }, /* Canon CP-200 */
|
||||
{ 0x04a9, 0x307d, USBLP_QUIRK_BLACKLIST }, /* Canon CP-300 */
|
||||
{ 0x04a9, 0x30bd, USBLP_QUIRK_BLACKLIST }, /* Canon CP-220 */
|
||||
{ 0x04a9, 0x30be, USBLP_QUIRK_BLACKLIST }, /* Canon CP-330 */
|
||||
{ 0x04a9, 0x30f6, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP400 */
|
||||
{ 0x04a9, 0x310b, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP600 */
|
||||
{ 0x04a9, 0x3127, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP710 */
|
||||
{ 0x04a9, 0x3128, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP510 */
|
||||
{ 0x04a9, 0x3141, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES1 */
|
||||
{ 0x04a9, 0x3142, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP730 */
|
||||
{ 0x04a9, 0x3143, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP720 */
|
||||
{ 0x04a9, 0x3170, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP750 */
|
||||
{ 0x04a9, 0x3171, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP740 */
|
||||
{ 0x04a9, 0x3185, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES2 */
|
||||
{ 0x04a9, 0x3186, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES20 */
|
||||
{ 0x04a9, 0x31aa, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP770 */
|
||||
{ 0x04a9, 0x31ab, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP760 */
|
||||
{ 0x04a9, 0x31b0, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES30 */
|
||||
{ 0x04a9, 0x31dd, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP780 */
|
||||
{ 0x04a9, 0x31ee, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES40 */
|
||||
{ 0x04a9, 0x3214, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP800 */
|
||||
{ 0x04a9, 0x3255, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP900 */
|
||||
{ 0x04a9, 0x3256, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP810 */
|
||||
{ 0x04a9, 0x30F5, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP500 */
|
||||
{ 0x04a9, 0x31AF, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY ES3 */
|
||||
{ 0x04a9, 0x31DD, USBLP_QUIRK_BLACKLIST }, /* Canon SELPHY CP780 */
|
||||
/* MISSING PIDs: CP520, CP530, CP790 */
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Globals...
|
||||
*/
|
||||
|
||||
cups_array_t *all_quirks; /* Array of printer quirks */
|
||||
usb_globals_t g = { 0 }; /* Globals */
|
||||
libusb_device **all_list; /* List of connected USB devices */
|
||||
libusb_device **list; /* List of connected USB devices */
|
||||
|
||||
|
||||
/*
|
||||
@@ -150,24 +249,22 @@ libusb_device **all_list; /* List of connected USB devices */
|
||||
*/
|
||||
|
||||
static int close_device(usb_printer_t *printer);
|
||||
static int compare_quirks(usb_quirk_t *a, usb_quirk_t *b);
|
||||
static usb_printer_t *find_device(usb_cb_t cb, const void *data);
|
||||
static unsigned find_quirks(int vendor_id, int product_id);
|
||||
static int get_device_id(usb_printer_t *printer, char *buffer,
|
||||
size_t bufsize);
|
||||
static int list_cb(usb_printer_t *printer, const char *device_uri,
|
||||
const char *device_id, const void *data);
|
||||
static void load_quirks(void);
|
||||
static char *make_device_uri(usb_printer_t *printer,
|
||||
const char *device_id,
|
||||
char *uri, size_t uri_size);
|
||||
static int open_device(usb_printer_t *printer, int verbose);
|
||||
static int print_cb(usb_printer_t *printer, const char *device_uri,
|
||||
const char *device_id, const void *data);
|
||||
static int printer_class_soft_reset(usb_printer_t *printer);
|
||||
static unsigned int quirks(int vendor, int product);
|
||||
static void *read_thread(void *reference);
|
||||
static void *sidechannel_thread(void *reference);
|
||||
static void soft_reset(void);
|
||||
static int soft_reset_printer(usb_printer_t *printer);
|
||||
|
||||
|
||||
/*
|
||||
@@ -177,8 +274,6 @@ static int soft_reset_printer(usb_printer_t *printer);
|
||||
void
|
||||
list_devices(void)
|
||||
{
|
||||
load_quirks();
|
||||
|
||||
fputs("DEBUG: list_devices\n", stderr);
|
||||
find_device(list_cb, NULL);
|
||||
}
|
||||
@@ -221,8 +316,6 @@ print_device(const char *uri, /* I - Device URI */
|
||||
const char *val; /* Option value */
|
||||
|
||||
|
||||
load_quirks();
|
||||
|
||||
/*
|
||||
* See if the side-channel descriptor is valid...
|
||||
*/
|
||||
@@ -248,9 +341,9 @@ print_device(const char *uri, /* I - Device URI */
|
||||
|
||||
/*
|
||||
* Some devices need a reset after finishing a job, these devices are
|
||||
* marked with the USB_QUIRK_SOFT_RESET quirk.
|
||||
* marked with the USBLP_QUIRK_RESET quirk.
|
||||
*/
|
||||
g.printer->reset_after_job = (g.printer->quirks & USB_QUIRK_SOFT_RESET ? 1 : 0);
|
||||
g.printer->reset_after_job = (g.printer->quirks & USBLP_QUIRK_RESET ? 1 : 0);
|
||||
|
||||
/*
|
||||
* If we are printing data from a print driver on stdin, ignore SIGTERM
|
||||
@@ -496,7 +589,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
iostatus = libusb_bulk_transfer(g.printer->handle,
|
||||
g.printer->write_endp,
|
||||
print_buffer, g.print_bytes,
|
||||
&bytes, 0);
|
||||
&bytes, 60000);
|
||||
/*
|
||||
* Ignore timeout errors, but retain the number of bytes written to
|
||||
* avoid sending duplicate data...
|
||||
@@ -519,7 +612,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
iostatus = libusb_bulk_transfer(g.printer->handle,
|
||||
g.printer->write_endp,
|
||||
print_buffer, g.print_bytes,
|
||||
&bytes, 0);
|
||||
&bytes, 60000);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -534,7 +627,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
iostatus = libusb_bulk_transfer(g.printer->handle,
|
||||
g.printer->write_endp,
|
||||
print_buffer, g.print_bytes,
|
||||
&bytes, 0);
|
||||
&bytes, 60000);
|
||||
}
|
||||
|
||||
if (iostatus)
|
||||
@@ -667,7 +760,7 @@ print_device(const char *uri, /* I - Device URI */
|
||||
* Clean up ....
|
||||
*/
|
||||
|
||||
libusb_free_device_list(all_list, 1);
|
||||
libusb_free_device_list(list, 1);
|
||||
libusb_exit(NULL);
|
||||
|
||||
return (status);
|
||||
@@ -786,23 +879,6 @@ close_device(usb_printer_t *printer) /* I - Printer */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'compare_quirks()' - Compare two quirks entries.
|
||||
*/
|
||||
|
||||
static int /* O - Result of comparison */
|
||||
compare_quirks(usb_quirk_t *a, /* I - First quirk entry */
|
||||
usb_quirk_t *b) /* I - Second quirk entry */
|
||||
{
|
||||
int result; /* Result of comparison */
|
||||
|
||||
if ((result = b->vendor_id - a->vendor_id) == 0)
|
||||
result = b->product_id - a->product_id;
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'find_device()' - Find or enumerate USB printers.
|
||||
*/
|
||||
@@ -847,7 +923,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
if (err)
|
||||
{
|
||||
fprintf(stderr, "DEBUG: Unable to initialize USB access via libusb, "
|
||||
"libusb error %i\n", (int)err);
|
||||
"libusb error %i\n", err);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -875,13 +951,13 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
!devdesc.idProduct)
|
||||
continue;
|
||||
|
||||
printer.quirks = find_quirks(devdesc.idVendor, devdesc.idProduct);
|
||||
printer.quirks = quirks(devdesc.idVendor, devdesc.idProduct);
|
||||
|
||||
/*
|
||||
* Ignore blacklisted printers...
|
||||
*/
|
||||
|
||||
if (printer.quirks & USB_QUIRK_BLACKLIST)
|
||||
if (printer.quirks & USBLP_QUIRK_BLACKLIST)
|
||||
continue;
|
||||
|
||||
for (conf = 0; conf < devdesc.bNumConfigurations; conf ++)
|
||||
@@ -910,13 +986,13 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
|
||||
if (((altptr->bInterfaceClass != LIBUSB_CLASS_PRINTER ||
|
||||
altptr->bInterfaceSubClass != 1) &&
|
||||
((printer.quirks & USB_QUIRK_VENDOR_CLASS) == 0)) ||
|
||||
((printer.quirks & USBLP_QUIRK_BAD_CLASS) == 0)) ||
|
||||
(altptr->bInterfaceProtocol != 1 && /* Unidirectional */
|
||||
altptr->bInterfaceProtocol != 2) || /* Bidirectional */
|
||||
altptr->bInterfaceProtocol < protocol)
|
||||
continue;
|
||||
|
||||
if (printer.quirks & USB_QUIRK_VENDOR_CLASS)
|
||||
if (printer.quirks & USBLP_QUIRK_BAD_CLASS)
|
||||
fprintf(stderr, "DEBUG: Printer does not report class 7 and/or "
|
||||
"subclass 1 but works as a printer anyway\n");
|
||||
|
||||
@@ -973,7 +1049,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
{
|
||||
fprintf(stderr, "DEBUG: Device protocol: %d\n",
|
||||
printer.protocol);
|
||||
if (printer.quirks & USB_QUIRK_UNIDIR)
|
||||
if (printer.quirks & USBLP_QUIRK_BIDIR)
|
||||
{
|
||||
printer.read_endp = -1;
|
||||
fprintf(stderr, "DEBUG: Printer reports bi-di support "
|
||||
@@ -993,7 +1069,7 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
altsetting[printer.altset].
|
||||
endpoint[printer.write_endp].
|
||||
bEndpointAddress;
|
||||
if (printer.quirks & USB_QUIRK_NO_REATTACH)
|
||||
if (printer.quirks & USBLP_QUIRK_NO_REATTACH)
|
||||
{
|
||||
printer.usblp_attached = 0;
|
||||
fprintf(stderr, "DEBUG: Printer does not like usblp "
|
||||
@@ -1028,35 +1104,6 @@ find_device(usb_cb_t cb, /* I - Callback function */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'find_quirks()' - Find the quirks for the given printer, if any.
|
||||
*
|
||||
* First looks for an exact match, then looks for the vendor ID wildcard match.
|
||||
*/
|
||||
|
||||
static unsigned /* O - Quirks flags */
|
||||
find_quirks(int vendor_id, /* I - Vendor ID */
|
||||
int product_id) /* I - Product ID */
|
||||
{
|
||||
usb_quirk_t key, /* Search key */
|
||||
*match; /* Matching quirk entry */
|
||||
|
||||
|
||||
key.vendor_id = vendor_id;
|
||||
key.product_id = product_id;
|
||||
|
||||
if ((match = cupsArrayFind(all_quirks, &key)) != NULL)
|
||||
return (match->quirks);
|
||||
|
||||
key.product_id = 0;
|
||||
|
||||
if ((match = cupsArrayFind(all_quirks, &key)) != NULL)
|
||||
return (match->quirks);
|
||||
|
||||
return (USB_QUIRK_WHITELIST);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'get_device_id()' - Get the IEEE-1284 device ID for the printer.
|
||||
*/
|
||||
@@ -1162,104 +1209,6 @@ list_cb(usb_printer_t *printer, /* I - Printer */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'load_quirks()' - Load all quirks files in the /usr/share/cups/usb directory.
|
||||
*/
|
||||
|
||||
static void
|
||||
load_quirks(void)
|
||||
{
|
||||
const char *datadir; /* CUPS_DATADIR environment variable */
|
||||
char filename[1024], /* Filename */
|
||||
line[1024]; /* Line from file */
|
||||
cups_dir_t *dir; /* Directory */
|
||||
cups_dentry_t *dent; /* Directory entry */
|
||||
cups_file_t *fp; /* Quirks file */
|
||||
usb_quirk_t *quirk; /* New quirk */
|
||||
|
||||
|
||||
all_quirks = cupsArrayNew((cups_array_func_t)compare_quirks, NULL);
|
||||
|
||||
if ((datadir = getenv("CUPS_DATADIR")) == NULL)
|
||||
datadir = CUPS_DATADIR;
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/usb", datadir);
|
||||
if ((dir = cupsDirOpen(filename)) == NULL)
|
||||
{
|
||||
perror(filename);
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(stderr, "DEBUG: Loading USB quirks from \"%s\".\n", filename);
|
||||
|
||||
while ((dent = cupsDirRead(dir)) != NULL)
|
||||
{
|
||||
if (!S_ISREG(dent->fileinfo.st_mode))
|
||||
continue;
|
||||
|
||||
snprintf(filename, sizeof(filename), "%s/usb/%s", datadir, dent->filename);
|
||||
if ((fp = cupsFileOpen(filename, "r")) == NULL)
|
||||
{
|
||||
perror(filename);
|
||||
continue;
|
||||
}
|
||||
|
||||
while (cupsFileGets(fp, line, sizeof(line)))
|
||||
{
|
||||
/*
|
||||
* Skip blank and comment lines...
|
||||
*/
|
||||
|
||||
if (line[0] == '#' || !line[0])
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Add a quirk...
|
||||
*/
|
||||
|
||||
if ((quirk = calloc(1, sizeof(usb_quirk_t))) == NULL)
|
||||
{
|
||||
perror("DEBUG: Unable to allocate memory for quirk");
|
||||
break;
|
||||
}
|
||||
|
||||
if (sscanf(line, "%x%x", &quirk->vendor_id, &quirk->product_id) < 1)
|
||||
{
|
||||
fprintf(stderr, "DEBUG: Bad line: %s\n", line);
|
||||
free(quirk);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strstr(line, " blacklist"))
|
||||
quirk->quirks |= USB_QUIRK_BLACKLIST;
|
||||
|
||||
if (strstr(line, " no-reattach"))
|
||||
quirk->quirks |= USB_QUIRK_NO_REATTACH;
|
||||
|
||||
if (strstr(line, " soft-reset"))
|
||||
quirk->quirks |= USB_QUIRK_SOFT_RESET;
|
||||
|
||||
if (strstr(line, " unidir"))
|
||||
quirk->quirks |= USB_QUIRK_UNIDIR;
|
||||
|
||||
if (strstr(line, " usb-init"))
|
||||
quirk->quirks |= USB_QUIRK_USB_INIT;
|
||||
|
||||
if (strstr(line, " vendor-class"))
|
||||
quirk->quirks |= USB_QUIRK_VENDOR_CLASS;
|
||||
|
||||
cupsArrayAdd(all_quirks, quirk);
|
||||
}
|
||||
|
||||
cupsFileClose(fp);
|
||||
}
|
||||
|
||||
fprintf(stderr, "DEBUG: Loaded %d quirks.\n", cupsArrayCount(all_quirks));
|
||||
|
||||
cupsDirClose(dir);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'make_device_uri()' - Create a device URI for a USB printer.
|
||||
*/
|
||||
@@ -1686,6 +1635,65 @@ print_cb(usb_printer_t *printer, /* I - Printer */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'printer_class_soft_reset()' - Do the soft reset request specific to printers
|
||||
*
|
||||
* This soft reset is specific to the printer device class and is much less
|
||||
* invasive than the general USB reset libusb_reset_device(). Especially it
|
||||
* does never happen that the USB addressing and configuration changes. What
|
||||
* is actually done is that all buffers get flushed and the bulk IN and OUT
|
||||
* pipes get reset to their default states. This clears all stall conditions.
|
||||
* See http://cholla.mmto.org/computers/linux/usb/usbprint11.pdf
|
||||
*/
|
||||
|
||||
static int /* O - 0 on success, < 0 on error */
|
||||
printer_class_soft_reset(usb_printer_t *printer) /* I - Printer */
|
||||
{
|
||||
struct libusb_config_descriptor *confptr = NULL;
|
||||
/* Pointer to current configuration */
|
||||
int interface,
|
||||
errcode;
|
||||
|
||||
if (libusb_get_config_descriptor(printer->device, printer->conf, &confptr)
|
||||
< 0)
|
||||
interface = printer->iface;
|
||||
else
|
||||
interface = confptr->interface[printer->iface].
|
||||
altsetting[printer->altset].bInterfaceNumber;
|
||||
libusb_free_config_descriptor(confptr);
|
||||
if ((errcode = libusb_control_transfer(printer->handle,
|
||||
LIBUSB_REQUEST_TYPE_CLASS |
|
||||
LIBUSB_ENDPOINT_OUT |
|
||||
LIBUSB_RECIPIENT_OTHER,
|
||||
2, 0, interface, NULL, 0, 5000)) < 0)
|
||||
errcode = libusb_control_transfer(printer->handle,
|
||||
LIBUSB_REQUEST_TYPE_CLASS |
|
||||
LIBUSB_ENDPOINT_OUT |
|
||||
LIBUSB_RECIPIENT_INTERFACE,
|
||||
2, 0, interface, NULL, 0, 5000);
|
||||
return errcode;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'quirks()' - Get the known quirks of a given printer model
|
||||
*/
|
||||
|
||||
static unsigned int quirks(int vendor, int product)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; quirk_printers[i].vendorId; i++)
|
||||
{
|
||||
if (vendor == quirk_printers[i].vendorId &&
|
||||
(quirk_printers[i].productId == 0x0000 ||
|
||||
product == quirk_printers[i].productId))
|
||||
return quirk_printers[i].quirks;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'read_thread()' - Thread to read the backchannel data on.
|
||||
*/
|
||||
@@ -1909,15 +1917,13 @@ sidechannel_thread(void *reference)
|
||||
* 'soft_reset()' - Send a soft reset to the device.
|
||||
*/
|
||||
|
||||
static void
|
||||
soft_reset(void)
|
||||
static void soft_reset(void)
|
||||
{
|
||||
fd_set input_set; /* Input set for select() */
|
||||
struct timeval tv; /* Time value */
|
||||
char buffer[2048]; /* Buffer */
|
||||
struct timespec cond_timeout; /* pthread condition timeout */
|
||||
|
||||
|
||||
/*
|
||||
* Send an abort once a second until the I/O lock is released by the main
|
||||
* thread...
|
||||
@@ -1962,7 +1968,7 @@ soft_reset(void)
|
||||
* Send the reset...
|
||||
*/
|
||||
|
||||
soft_reset_printer(g.printer);
|
||||
printer_class_soft_reset(g.printer);
|
||||
|
||||
/*
|
||||
* Release the I/O lock...
|
||||
@@ -1976,51 +1982,6 @@ soft_reset(void)
|
||||
|
||||
|
||||
/*
|
||||
* 'soft_reset_printer()' - Do the soft reset request specific to printers
|
||||
*
|
||||
* This soft reset is specific to the printer device class and is much less
|
||||
* invasive than the general USB reset libusb_reset_device(). Especially it
|
||||
* does never happen that the USB addressing and configuration changes. What
|
||||
* is actually done is that all buffers get flushed and the bulk IN and OUT
|
||||
* pipes get reset to their default states. This clears all stall conditions.
|
||||
* See http://cholla.mmto.org/computers/linux/usb/usbprint11.pdf
|
||||
*/
|
||||
|
||||
static int /* O - 0 on success, < 0 on error */
|
||||
soft_reset_printer(
|
||||
usb_printer_t *printer) /* I - Printer */
|
||||
{
|
||||
struct libusb_config_descriptor *confptr = NULL;
|
||||
/* Pointer to current configuration */
|
||||
int interface, /* Interface to reset */
|
||||
errcode; /* Error code */
|
||||
|
||||
|
||||
if (libusb_get_config_descriptor(printer->device, printer->conf,
|
||||
&confptr) < 0)
|
||||
interface = printer->iface;
|
||||
else
|
||||
interface = confptr->interface[printer->iface].
|
||||
altsetting[printer->altset].bInterfaceNumber;
|
||||
|
||||
libusb_free_config_descriptor(confptr);
|
||||
|
||||
if ((errcode = libusb_control_transfer(printer->handle,
|
||||
LIBUSB_REQUEST_TYPE_CLASS |
|
||||
LIBUSB_ENDPOINT_OUT |
|
||||
LIBUSB_RECIPIENT_OTHER,
|
||||
2, 0, interface, NULL, 0, 5000)) < 0)
|
||||
errcode = libusb_control_transfer(printer->handle,
|
||||
LIBUSB_REQUEST_TYPE_CLASS |
|
||||
LIBUSB_ENDPOINT_OUT |
|
||||
LIBUSB_RECIPIENT_INTERFACE,
|
||||
2, 0, interface, NULL, 0, 5000);
|
||||
|
||||
return (errcode);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: usb-libusb.c 11456 2013-12-09 19:26:47Z msweet $".
|
||||
* End of "$Id: usb-libusb.c 10979 2013-05-13 17:39:19Z msweet $".
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: usb-unix.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: usb-unix.c 7810 2008-07-29 01:11:15Z mike $"
|
||||
*
|
||||
* USB port backend for CUPS.
|
||||
*
|
||||
@@ -257,6 +257,7 @@ list_devices(void)
|
||||
|
||||
close(fd);
|
||||
}
|
||||
#elif defined(__sgi)
|
||||
#elif defined(__sun) && defined(ECPPIOC_GETDEVID)
|
||||
int i; /* Looping var */
|
||||
int fd; /* File descriptor */
|
||||
@@ -612,5 +613,5 @@ side_cb(int print_fd, /* I - Print file */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: usb-unix.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: usb-unix.c 7810 2008-07-29 01:11:15Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: usb.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: usb.c 7687 2008-06-24 01:28:36Z mike $"
|
||||
*
|
||||
* USB port backend for CUPS.
|
||||
*
|
||||
@@ -260,5 +260,5 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: usb.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: usb.c 7687 2008-06-24 01:28:36Z mike $".
|
||||
*/
|
||||
|
||||
+2
-3
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
|
||||
# "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $"
|
||||
#
|
||||
# Berkeley commands makefile for CUPS.
|
||||
#
|
||||
@@ -88,7 +88,6 @@ install-exec:
|
||||
$(INSTALL_DIR) $(SYMROOT); \
|
||||
for file in $(TARGETS); do \
|
||||
cp $$file $(SYMROOT); \
|
||||
dsymutil $(SYMROOT)/$$file; \
|
||||
done \
|
||||
fi
|
||||
|
||||
@@ -164,5 +163,5 @@ include Dependencies
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
|
||||
# End of "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $".
|
||||
#
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: lpc.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: lpc.c 7079 2007-11-30 01:58:31Z mike $"
|
||||
*
|
||||
* "lpc" command for CUPS.
|
||||
*
|
||||
@@ -446,5 +446,5 @@ show_status(http_t *http, /* I - HTTP connection to server */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: lpc.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: lpc.c 7079 2007-11-30 01:58:31Z mike $".
|
||||
*/
|
||||
|
||||
+7
-7
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: lpq.c 11101 2013-07-08 11:20:33Z msweet $"
|
||||
* "$Id: lpq.c 7460 2008-04-16 02:19:54Z mike $"
|
||||
*
|
||||
* "lpq" command for CUPS.
|
||||
*
|
||||
@@ -138,8 +138,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
if ((named_dest = cupsGetNamedDest(http, dest, instance)) == NULL)
|
||||
{
|
||||
if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
|
||||
cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
|
||||
if (cupsLastError() == IPP_BAD_REQUEST ||
|
||||
cupsLastError() == IPP_VERSION_NOT_SUPPORTED)
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - add '/version=1.1' to server "
|
||||
"name."), argv[0]);
|
||||
@@ -208,8 +208,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
{
|
||||
if ((named_dest = cupsGetNamedDest(http, NULL, NULL)) == NULL)
|
||||
{
|
||||
if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
|
||||
cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
|
||||
if (cupsLastError() == IPP_BAD_REQUEST ||
|
||||
cupsLastError() == IPP_VERSION_NOT_SUPPORTED)
|
||||
{
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - add '/version=1.1' to server name."),
|
||||
@@ -528,7 +528,7 @@ show_jobs(const char *command, /* I - Command name */
|
||||
*/
|
||||
|
||||
if (jobstate == IPP_JOB_PROCESSING)
|
||||
strlcpy(rankstr, "active", sizeof(rankstr));
|
||||
strcpy(rankstr, "active");
|
||||
else
|
||||
{
|
||||
/*
|
||||
@@ -679,5 +679,5 @@ usage(void)
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: lpq.c 11101 2013-07-08 11:20:33Z msweet $".
|
||||
* End of "$Id: lpq.c 7460 2008-04-16 02:19:54Z mike $".
|
||||
*/
|
||||
|
||||
+6
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: lpr.c 11101 2013-07-08 11:20:33Z msweet $"
|
||||
* "$Id: lpr.c 7720 2008-07-11 22:46:21Z mike $"
|
||||
*
|
||||
* "lpr" command for CUPS.
|
||||
*
|
||||
@@ -227,8 +227,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
dest->options[j].value,
|
||||
num_options, &options);
|
||||
}
|
||||
else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
|
||||
cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
|
||||
else if (cupsLastError() == IPP_BAD_REQUEST ||
|
||||
cupsLastError() == IPP_VERSION_NOT_SUPPORTED)
|
||||
{
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - add '/version=1.1' to server "
|
||||
@@ -330,8 +330,8 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
dest->options[j].value,
|
||||
num_options, &options);
|
||||
}
|
||||
else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
|
||||
cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
|
||||
else if (cupsLastError() == IPP_BAD_REQUEST ||
|
||||
cupsLastError() == IPP_VERSION_NOT_SUPPORTED)
|
||||
{
|
||||
_cupsLangPrintf(stderr,
|
||||
_("%s: Error - add '/version=1.1' to server "
|
||||
@@ -436,5 +436,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: lpr.c 11101 2013-07-08 11:20:33Z msweet $".
|
||||
* End of "$Id: lpr.c 7720 2008-07-11 22:46:21Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: lprm.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: lprm.c 7261 2008-01-28 23:09:31Z mike $"
|
||||
*
|
||||
* "lprm" command for CUPS.
|
||||
*
|
||||
@@ -213,5 +213,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: lprm.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: lprm.c 7261 2008-01-28 23:09:31Z mike $".
|
||||
*/
|
||||
|
||||
+2
-4
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
|
||||
# "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $"
|
||||
#
|
||||
# CGI makefile for CUPS.
|
||||
#
|
||||
@@ -120,7 +120,6 @@ install-exec:
|
||||
$(INSTALL_DIR) $(SYMROOT); \
|
||||
for file in $(CGIS); do \
|
||||
cp $$file $(SYMROOT); \
|
||||
dsymutil $(SYMROOT)/$$file; \
|
||||
done \
|
||||
fi
|
||||
|
||||
@@ -155,7 +154,6 @@ install-libs: $(INSTALLSTATIC)
|
||||
if test "x$(SYMROOT)" != "x"; then \
|
||||
$(INSTALL_DIR) $(SYMROOT); \
|
||||
cp $(LIBCUPSCGI) $(SYMROOT); \
|
||||
dsymutil $(SYMROOT)/$(LIBCUPSCGI); \
|
||||
fi
|
||||
|
||||
installstatic:
|
||||
@@ -380,5 +378,5 @@ include Dependencies
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
|
||||
# End of "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $".
|
||||
#
|
||||
|
||||
+15
-15
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: admin.c 11345 2013-10-18 21:14:52Z msweet $"
|
||||
* "$Id: admin.c 8029 2008-10-08 21:07:45Z mike $"
|
||||
*
|
||||
* Administration CGI for CUPS.
|
||||
*
|
||||
@@ -962,13 +962,13 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
else if (!_cups_strncasecmp(make, "laserjet", 8) ||
|
||||
!_cups_strncasecmp(make, "deskjet", 7) ||
|
||||
!_cups_strncasecmp(make, "designjet", 9))
|
||||
strlcpy(make, "HP", sizeof(make));
|
||||
strcpy(make, "HP");
|
||||
else if (!_cups_strncasecmp(make, "phaser", 6))
|
||||
strlcpy(make, "Xerox", sizeof(make));
|
||||
strcpy(make, "Xerox");
|
||||
else if (!_cups_strncasecmp(make, "stylus", 6))
|
||||
strlcpy(make, "Epson", sizeof(make));
|
||||
strcpy(make, "Epson");
|
||||
else
|
||||
strlcpy(make, "Generic", sizeof(make));
|
||||
strcpy(make, "Generic");
|
||||
|
||||
if (!cgiGetVariable("CURRENT_MAKE"))
|
||||
cgiSetVariable("CURRENT_MAKE", make);
|
||||
@@ -1348,20 +1348,20 @@ do_am_printer(http_t *http, /* I - HTTP connection */
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, uri);
|
||||
|
||||
if (!file)
|
||||
{
|
||||
var = cgiGetVariable("PPD_NAME");
|
||||
if (strcmp(var, "__no_change__"))
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
|
||||
NULL, var);
|
||||
}
|
||||
|
||||
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-location",
|
||||
NULL, cgiGetVariable("PRINTER_LOCATION"));
|
||||
|
||||
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-info",
|
||||
NULL, cgiGetVariable("PRINTER_INFO"));
|
||||
|
||||
if (!file)
|
||||
{
|
||||
var = cgiGetVariable("PPD_NAME");
|
||||
if (strcmp(var, "__no_change__"))
|
||||
ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, "ppd-name",
|
||||
NULL, var);
|
||||
}
|
||||
|
||||
strlcpy(uri, cgiGetVariable("DEVICE_URI"), sizeof(uri));
|
||||
|
||||
/*
|
||||
@@ -4187,7 +4187,7 @@ get_option_value(
|
||||
if (bufptr == buffer || (bufend - bufptr) < 2)
|
||||
return (NULL);
|
||||
|
||||
memcpy(bufptr, "}", 2);
|
||||
strcpy(bufptr, "}");
|
||||
}
|
||||
|
||||
return (buffer);
|
||||
@@ -4218,5 +4218,5 @@ get_points(double number, /* I - Original number */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: admin.c 11345 2013-10-18 21:14:52Z msweet $".
|
||||
* End of "$Id: admin.c 8029 2008-10-08 21:07:45Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: cgi-private.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: cgi-private.h 7940 2008-09-16 00:45:16Z mike $"
|
||||
*
|
||||
* Private CGI definitions for CUPS.
|
||||
*
|
||||
@@ -32,5 +32,5 @@
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: cgi-private.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: cgi-private.h 7940 2008-09-16 00:45:16Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: cgi.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: cgi.h 6649 2007-07-11 21:46:42Z mike $"
|
||||
*
|
||||
* CGI support library definitions for CUPS.
|
||||
*
|
||||
@@ -115,5 +115,5 @@ extern const char *cgiText(const char *message);
|
||||
#endif /* !_CUPS_CGI_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: cgi.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: cgi.h 6649 2007-07-11 21:46:42Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: classes.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: classes.c 7940 2008-09-16 00:45:16Z mike $"
|
||||
*
|
||||
* Class status CGI for CUPS.
|
||||
*
|
||||
@@ -554,5 +554,5 @@ show_class(http_t *http, /* I - Connection to server */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: classes.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: classes.c 7940 2008-09-16 00:45:16Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: help-index.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: help-index.c 7717 2008-07-04 02:35:33Z mike $"
|
||||
*
|
||||
* Online help index routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 2007-2011 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -910,7 +910,7 @@ help_load_file(
|
||||
node = NULL;
|
||||
offset = 0;
|
||||
|
||||
strlcpy(section, "Other", sizeof(section));
|
||||
strcpy(section, "Other");
|
||||
|
||||
while (cupsFileGets(fp, line, sizeof(line)))
|
||||
{
|
||||
@@ -1324,5 +1324,5 @@ help_sort_words(help_word_t *w1, /* I - Second word */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: help-index.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: help-index.c 7717 2008-07-04 02:35:33Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: help-index.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: help-index.h 7615 2008-05-25 07:17:07Z mike $"
|
||||
*
|
||||
* Online help index definitions for CUPS.
|
||||
*
|
||||
@@ -83,5 +83,5 @@ extern help_index_t *helpSearchIndex(help_index_t *hi, const char *query,
|
||||
#endif /* !_CUPS_HELP_INDEX_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: help-index.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: help-index.h 7615 2008-05-25 07:17:07Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: help.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id$"
|
||||
*
|
||||
* Online help CGI for CUPS.
|
||||
*
|
||||
@@ -393,5 +393,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: help.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: html.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: html.c 6649 2007-07-11 21:46:42Z mike $"
|
||||
*
|
||||
* HTML support functions for CUPS.
|
||||
*
|
||||
@@ -235,5 +235,5 @@ cgi_null_passwd(const char *prompt) /* I - Prompt string (unused) */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: html.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: html.c 6649 2007-07-11 21:46:42Z mike $".
|
||||
*/
|
||||
|
||||
+5
-5
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: ipp-var.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: ipp-var.c 7940 2008-09-16 00:45:16Z mike $"
|
||||
*
|
||||
* CGI <-> IPP variable routines for CUPS.
|
||||
*
|
||||
@@ -129,7 +129,7 @@ cgiGetAttributes(ipp_t *request, /* I - IPP request */
|
||||
*nameptr = '\0';
|
||||
|
||||
if (!strncmp(name, "printer_state_history", 21))
|
||||
strlcpy(name, "printer_state_history", sizeof(name));
|
||||
strcpy(name, "printer_state_history");
|
||||
|
||||
/*
|
||||
* Possibly add it to the list of attributes...
|
||||
@@ -554,8 +554,8 @@ cgiPrintCommand(http_t *http, /* I - Connection to server */
|
||||
ipp_t *request, /* Get-Job-Attributes request */
|
||||
*response; /* Get-Job-Attributes response */
|
||||
ipp_attribute_t *attr; /* Current job attribute */
|
||||
static const char * const job_attrs[] =/* Job attributes we want */
|
||||
{
|
||||
static const char * const job_attrs[] =
|
||||
{ /* Job attributes we want */
|
||||
"job-state",
|
||||
"job-printer-state-message"
|
||||
};
|
||||
@@ -1589,5 +1589,5 @@ cgiText(const char *message) /* I - Message */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: ipp-var.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: ipp-var.c 7940 2008-09-16 00:45:16Z mike $".
|
||||
*/
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: jobs.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: jobs.c 7237 2008-01-22 01:38:39Z mike $"
|
||||
*
|
||||
* Job status CGI for CUPS.
|
||||
*
|
||||
@@ -182,7 +182,7 @@ do_job_op(http_t *http, /* I - HTTP connection */
|
||||
char url[1024]; /* Encoded URL */
|
||||
|
||||
|
||||
strlcpy(url, "5;URL=", sizeof(url));
|
||||
strcpy(url, "5;URL=");
|
||||
cgiFormEncode(url + 6, getenv("HTTP_REFERER"), sizeof(url) - 6);
|
||||
cgiSetVariable("refresh_page", url);
|
||||
}
|
||||
@@ -210,5 +210,5 @@ do_job_op(http_t *http, /* I - HTTP connection */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: jobs.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: jobs.c 7237 2008-01-22 01:38:39Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: printers.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: printers.c 7940 2008-09-16 00:45:16Z mike $"
|
||||
*
|
||||
* Printer status CGI for CUPS.
|
||||
*
|
||||
@@ -574,5 +574,5 @@ show_printer(http_t *http, /* I - Connection to server */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: printers.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: printers.c 7940 2008-09-16 00:45:16Z mike $".
|
||||
*/
|
||||
|
||||
+9
-9
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: search.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: search.c 7720 2008-07-11 22:46:21Z mike $"
|
||||
*
|
||||
* Search routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 2007-2011 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -208,7 +208,7 @@ cgiCompileSearch(const char *query) /* I - Query string */
|
||||
* Add the prefix string...
|
||||
*/
|
||||
|
||||
memcpy(sptr, prefix, strlen(prefix) + 1);
|
||||
strcpy(sptr, prefix);
|
||||
sptr += strlen(sptr);
|
||||
|
||||
/*
|
||||
@@ -249,16 +249,16 @@ cgiCompileSearch(const char *query) /* I - Query string */
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
memcpy(sptr, ".*|.*", 6);
|
||||
strcpy(sptr, ".*|.*");
|
||||
sptr += 5;
|
||||
|
||||
memcpy(sptr, lword2, strlen(lword2) + 1);
|
||||
strcpy(sptr, lword2);
|
||||
sptr += strlen(sptr);
|
||||
|
||||
memcpy(sptr, ".*", 3);
|
||||
strcpy(sptr, ".*");
|
||||
sptr += 2;
|
||||
|
||||
memcpy(sptr, lword, strlen(lword) + 1);
|
||||
strcpy(sptr, lword);
|
||||
sptr += strlen(sptr);
|
||||
|
||||
free(lword);
|
||||
@@ -287,7 +287,7 @@ cgiCompileSearch(const char *query) /* I - Query string */
|
||||
free(lword);
|
||||
|
||||
if (sptr > s)
|
||||
memcpy(sptr, ".*", 3);
|
||||
strcpy(sptr, ".*");
|
||||
else
|
||||
{
|
||||
/*
|
||||
@@ -377,5 +377,5 @@ cgiFreeSearch(void *search) /* I - Search context */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: search.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: search.c 7720 2008-07-11 22:46:21Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: template.c 11688 2014-03-05 21:11:32Z msweet $"
|
||||
* "$Id: template.c 7219 2008-01-14 22:00:02Z mike $"
|
||||
*
|
||||
* CGI template function.
|
||||
*
|
||||
@@ -553,7 +553,7 @@ cgi_copy(FILE *out, /* I - Output file */
|
||||
if (regcomp(&re, compare, REG_EXTENDED | REG_ICASE))
|
||||
{
|
||||
fprintf(stderr,
|
||||
"ERROR: Unable to compile regular expression \"%s\"!\n",
|
||||
"ERROR: Unable to compile regular expresion \"%s\"!\n",
|
||||
compare);
|
||||
result = 0;
|
||||
}
|
||||
@@ -729,5 +729,5 @@ cgi_puturi(const char *s, /* I - String to output */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: template.c 11688 2014-03-05 21:11:32Z msweet $".
|
||||
* End of "$Id: template.c 7219 2008-01-14 22:00:02Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: testcgi.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: testcgi.c 6649 2007-07-11 21:46:42Z mike $"
|
||||
*
|
||||
* CGI test program for CUPS.
|
||||
*
|
||||
@@ -71,5 +71,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: testcgi.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: testcgi.c 6649 2007-07-11 21:46:42Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: testhi.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: testhi.c 6649 2007-07-11 21:46:42Z mike $"
|
||||
*
|
||||
* Help index test program for CUPS.
|
||||
*
|
||||
@@ -109,5 +109,5 @@ list_nodes(const char *title, /* I - Title string */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: testhi.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: testhi.c 6649 2007-07-11 21:46:42Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: testtemplate.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: testtemplate.c 6649 2007-07-11 21:46:42Z mike $"
|
||||
*
|
||||
* CGI template test program for CUPS.
|
||||
*
|
||||
@@ -99,5 +99,5 @@ main(int argc, /* I - Number of command-line arguments */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: testtemplate.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: testtemplate.c 6649 2007-07-11 21:46:42Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: var.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: var.c 7460 2008-04-16 02:19:54Z mike $"
|
||||
*
|
||||
* CGI form variable and array functions for CUPS.
|
||||
*
|
||||
@@ -1307,5 +1307,5 @@ cgi_unlink_file(void)
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: var.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: var.c 7460 2008-04-16 02:19:54Z mike $".
|
||||
*/
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
|
||||
# "$Id: Makefile 7938 2008-09-11 23:53:59Z mike $"
|
||||
#
|
||||
# Configuration file makefile for CUPS.
|
||||
#
|
||||
# Copyright 2007-2012 by Apple Inc.
|
||||
# Copyright 2007-2011 by Apple Inc.
|
||||
# Copyright 1993-2006 by Easy Software Products.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
@@ -139,5 +139,5 @@ uninstall:
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
|
||||
# End of "$Id: Makefile 7938 2008-09-11 23:53:59Z mike $".
|
||||
#
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: cups-files.conf.in 11201 2013-07-26 21:27:27Z msweet $"
|
||||
# "$Id: cups-files.conf.in 4185 2013-02-20 02:19:13Z msweet $"
|
||||
#
|
||||
# Sample file/directory/user/group configuration file for the CUPS scheduler.
|
||||
# See "man cups-files.conf" for a complete description of this file.
|
||||
@@ -8,9 +8,6 @@
|
||||
# List of events that are considered fatal errors for the scheduler...
|
||||
#FatalErrors @CUPS_FATAL_ERRORS@
|
||||
|
||||
# Do we call fsync() after writing configuration or status files?
|
||||
#SyncOnClose No
|
||||
|
||||
# Default user and group for filters/backends/helper programs; this cannot be
|
||||
# any user or group that resolves to ID 0 for security reasons...
|
||||
#User @CUPS_USER@
|
||||
@@ -97,5 +94,5 @@ PageLog @CUPS_LOGDIR@/page_log
|
||||
#TempDir @CUPS_REQUESTS@/tmp
|
||||
|
||||
#
|
||||
# End of "$Id: cups-files.conf.in 11201 2013-07-26 21:27:27Z msweet $".
|
||||
# End of "$Id: cups-files.conf.in 4185 2013-02-20 02:19:13Z msweet $".
|
||||
#
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: cupsd.conf.in 11025 2013-06-07 01:00:33Z msweet $"
|
||||
# "$Id: cupsd.conf.in 7888 2008-08-29 21:16:56Z mike $"
|
||||
#
|
||||
# Sample configuration file for the CUPS scheduler. See "man cupsd.conf" for a
|
||||
# complete description of this file.
|
||||
@@ -130,5 +130,5 @@ WebInterface @CUPS_WEBIF@
|
||||
</Policy>
|
||||
|
||||
#
|
||||
# End of "$Id: cupsd.conf.in 11025 2013-06-07 01:00:33Z msweet $".
|
||||
# End of "$Id: cupsd.conf.in 7888 2008-08-29 21:16:56Z mike $".
|
||||
#
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: mime.convs.in 11025 2013-06-07 01:00:33Z msweet $"
|
||||
# "$Id: mime.convs.in 6761 2007-08-02 17:58:59Z mike $"
|
||||
#
|
||||
# DO NOT EDIT THIS FILE, AS IT IS OVERWRITTEN WHEN YOU INSTALL NEW
|
||||
# VERSIONS OF CUPS. Instead, create a "local.convs" file that
|
||||
@@ -59,5 +59,5 @@ application/vnd.cups-raster image/pwg-raster 100 rastertopwg
|
||||
@DEFAULT_RAW_PRINTING@application/octet-stream application/vnd.cups-raw 0 -
|
||||
|
||||
#
|
||||
# End of "$Id: mime.convs.in 11025 2013-06-07 01:00:33Z msweet $".
|
||||
# End of "$Id: mime.convs.in 6761 2007-08-02 17:58:59Z mike $".
|
||||
#
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id: snmp.conf.in 11025 2013-06-07 01:00:33Z msweet $"
|
||||
# "$Id$"
|
||||
#
|
||||
# Sample SNMP configuration file for CUPS. See "man cups-snmp.conf" for a
|
||||
# complete description of this file.
|
||||
@@ -9,5 +9,5 @@
|
||||
@CUPS_SNMP_COMMUNITY@
|
||||
|
||||
#
|
||||
# End of "$Id: snmp.conf.in 11025 2013-06-07 01:00:33Z msweet $".
|
||||
# End of "$Id$".
|
||||
#
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
dnl
|
||||
dnl "$Id: cups-common.m4 8781 2009-08-28 17:34:54Z mike $"
|
||||
dnl
|
||||
dnl Common configuration stuff for CUPS.
|
||||
dnl Common configuration stuff for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2014 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl Copyright 2007-2013 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Apple Inc. and are protected by Federal copyright
|
||||
dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
dnl which should have been included with this file. If this file is
|
||||
dnl file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Apple Inc. and are protected by Federal copyright
|
||||
dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
dnl which should have been included with this file. If this file is
|
||||
dnl file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
dnl
|
||||
|
||||
dnl We need at least autoconf 2.60...
|
||||
@@ -20,8 +20,8 @@ dnl Set the name of the config header file...
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
|
||||
dnl Version number information...
|
||||
CUPS_VERSION=1.7.2
|
||||
CUPS_REVISION=
|
||||
CUPS_VERSION="1.6.3"
|
||||
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'`"
|
||||
#fi
|
||||
@@ -225,9 +225,7 @@ dnl See if we have libusb...
|
||||
AC_ARG_ENABLE(libusb, [ --enable-libusb use libusb for USB printing])
|
||||
|
||||
LIBUSB=""
|
||||
USBQUIRKS=""
|
||||
AC_SUBST(LIBUSB)
|
||||
AC_SUBST(USBQUIRKS)
|
||||
|
||||
if test "x$PKGCONFIG" != x; then
|
||||
if test x$enable_libusb = xyes -o $uname != Darwin; then
|
||||
@@ -237,7 +235,6 @@ if test "x$PKGCONFIG" != x; then
|
||||
AC_DEFINE(HAVE_LIBUSB)
|
||||
CFLAGS="$CFLAGS `$PKGCONFIG --cflags libusb-1.0`"
|
||||
LIBUSB="`$PKGCONFIG --libs libusb-1.0`"
|
||||
USBQUIRKS="\$(DATADIR)/usb"
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
@@ -267,7 +264,6 @@ AC_CHECK_HEADER(zlib.h,
|
||||
AC_DEFINE(HAVE_LIBZ)
|
||||
LIBZ="-lz"
|
||||
LIBS="$LIBS -lz"
|
||||
AC_CHECK_LIB(z, inflateCopy, AC_DEFINE(HAVE_INFLATECOPY))
|
||||
if test "x$GZIP" != z; then
|
||||
INSTALL_GZIP="-z"
|
||||
fi))
|
||||
@@ -303,11 +299,16 @@ fi
|
||||
LIBS="$SAVELIBS"
|
||||
|
||||
dnl Check for DBUS support
|
||||
AC_ARG_ENABLE(dbus, [ --disable-dbus build without DBUS support])
|
||||
if test -d /etc/dbus-1; then
|
||||
DBUSDIR="/etc/dbus-1"
|
||||
else
|
||||
DBUSDIR=""
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(dbus, [ --enable-dbus build with DBUS support])
|
||||
AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ],
|
||||
DBUSDIR="$withval")
|
||||
|
||||
DBUSDIR=""
|
||||
DBUS_NOTIFIER=""
|
||||
DBUS_NOTIFIERLIBS=""
|
||||
|
||||
@@ -324,12 +325,7 @@ if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x; then
|
||||
LIBS="$LIBS $DBUS_NOTIFIERLIBS"
|
||||
AC_CHECK_FUNC(dbus_message_iter_init_append,
|
||||
AC_DEFINE(HAVE_DBUS_MESSAGE_ITER_INIT_APPEND))
|
||||
AC_CHECK_FUNC(dbus_threads_init,
|
||||
AC_DEFINE(HAVE_DBUS_THREADS_INIT))
|
||||
LIBS="$SAVELIBS"
|
||||
if test -d /etc/dbus-1; then
|
||||
DBUSDIR="/etc/dbus-1"
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
dnl
|
||||
dnl "$Id: cups-compiler.m4 7871 2008-08-27 21:12:43Z mike $"
|
||||
dnl
|
||||
dnl Compiler stuff for CUPS.
|
||||
dnl Compiler stuff for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2014 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl Copyright 2007-2012 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Apple Inc. and are protected by Federal copyright
|
||||
dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
dnl which should have been included with this file. If this file is
|
||||
dnl file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
dnl property of Apple Inc. and are protected by Federal copyright
|
||||
dnl law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
dnl which should have been included with this file. If this file is
|
||||
dnl file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
dnl
|
||||
|
||||
dnl Clear the debugging and non-shared library options unless the user asks
|
||||
@@ -114,43 +114,29 @@ if test -n "$GCC"; then
|
||||
OLDCFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fstack-protector"
|
||||
AC_TRY_LINK(,,
|
||||
if test "x$LSB_BUILD" = xy; then
|
||||
# Can't use stack-protector with LSB binaries...
|
||||
OPTIM="$OPTIM -fno-stack-protector"
|
||||
else
|
||||
OPTIM="$OPTIM -fstack-protector"
|
||||
fi
|
||||
OPTIM="$OPTIM -fstack-protector"
|
||||
AC_MSG_RESULT(yes),
|
||||
AC_MSG_RESULT(no))
|
||||
CFLAGS="$OLDCFLAGS"
|
||||
|
||||
if test "x$LSB_BUILD" != xy; then
|
||||
# The -fPIE option is available with some versions of GCC and
|
||||
# adds randomization of addresses, which avoids another class of
|
||||
# exploits that depend on a fixed address for common functions.
|
||||
#
|
||||
# Not available to LSB binaries...
|
||||
AC_MSG_CHECKING(if GCC supports -fPIE)
|
||||
OLDCFLAGS="$CFLAGS"
|
||||
case "$uname" in
|
||||
Darwin*)
|
||||
CFLAGS="$CFLAGS -fPIE -Wl,-pie"
|
||||
AC_TRY_COMPILE(,,[
|
||||
PIEFLAGS="-fPIE -Wl,-pie"
|
||||
AC_MSG_RESULT(yes)],
|
||||
AC_MSG_RESULT(no))
|
||||
# The -fPIE option is available with some versions of GCC and adds
|
||||
# randomization of addresses, which avoids another class of exploits
|
||||
# that depend on a fixed address for common functions.
|
||||
AC_MSG_CHECKING(if GCC supports -fPIE)
|
||||
OLDCFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fPIE"
|
||||
AC_TRY_COMPILE(,,
|
||||
[case "$CC" in
|
||||
*clang)
|
||||
PIEFLAGS="-fPIE -Wl,-pie"
|
||||
;;
|
||||
|
||||
*)
|
||||
CFLAGS="$CFLAGS -fPIE -pie"
|
||||
AC_TRY_COMPILE(,,[
|
||||
PIEFLAGS="-fPIE -pie"
|
||||
AC_MSG_RESULT(yes)],
|
||||
AC_MSG_RESULT(no))
|
||||
PIEFLAGS="-fPIE -pie"
|
||||
;;
|
||||
esac
|
||||
CFLAGS="$OLDCFLAGS"
|
||||
fi
|
||||
AC_MSG_RESULT(yes)],
|
||||
AC_MSG_RESULT(no))
|
||||
CFLAGS="$OLDCFLAGS"
|
||||
|
||||
if test "x$with_optim" = x; then
|
||||
# Add useful warning options for tracking down problems...
|
||||
@@ -185,7 +171,7 @@ if test -n "$GCC"; then
|
||||
# The -z relro option is provided by the Linux linker command to
|
||||
# make relocatable data read-only.
|
||||
if test x$enable_relro = xyes; then
|
||||
RELROFLAGS="-Wl,-z,relro,-z,now"
|
||||
RELROFLAGS="-Wl,-z,relro"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
@@ -216,6 +202,19 @@ else
|
||||
OPTIM="+z $OPTIM"
|
||||
fi
|
||||
;;
|
||||
IRIX)
|
||||
if test -z "$OPTIM"; then
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-O2"
|
||||
else
|
||||
OPTIM="$with_optim $OPTIM"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$with_optim" = x; then
|
||||
OPTIM="-fullwarn -woff 1183,1209,1349,1506,3201 $OPTIM"
|
||||
fi
|
||||
;;
|
||||
OSF*)
|
||||
# Tru64 UNIX aka Digital UNIX aka OSF/1
|
||||
if test -z "$OPTIM"; then
|
||||
|
||||
@@ -3,7 +3,7 @@ dnl "$Id: cups-directories.m4 7799 2008-07-25 20:06:08Z mike $"
|
||||
dnl
|
||||
dnl Directory stuff for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2013 by Apple Inc.
|
||||
dnl Copyright 2007-2012 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
@@ -102,6 +102,9 @@ fi
|
||||
dnl Fix "libdir" variable...
|
||||
if test "$libdir" = "\${exec_prefix}/lib"; then
|
||||
case "$uname" in
|
||||
IRIX*)
|
||||
libdir="$exec_prefix/lib32"
|
||||
;;
|
||||
Linux*)
|
||||
if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then
|
||||
libdir="$exec_prefix/lib64"
|
||||
@@ -166,6 +169,13 @@ if test x$rcdir = x; then
|
||||
RCSTOP="620"
|
||||
;;
|
||||
|
||||
IRIX*)
|
||||
# IRIX
|
||||
INITDIR="/etc"
|
||||
RCSTART="60"
|
||||
RCSTOP="25"
|
||||
;;
|
||||
|
||||
Linux | GNU | GNU/k*BSD*)
|
||||
# Linux/HURD seems to choose an init.d directory at random...
|
||||
if test -d /sbin/init.d; then
|
||||
@@ -412,17 +422,16 @@ AC_DEFINE_UNQUOTED(CUPS_SERVERROOT, "$sysconfdir/cups")
|
||||
AC_SUBST(CUPS_SERVERROOT)
|
||||
|
||||
# Transient run-time state
|
||||
AC_ARG_WITH(rundir, [ --with-rundir set transient run-time state directory],CUPS_STATEDIR="$withval",[
|
||||
case "$uname" in
|
||||
Darwin*)
|
||||
# Darwin (OS X)
|
||||
CUPS_STATEDIR="$CUPS_SERVERROOT"
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
CUPS_STATEDIR="$localstatedir/run/cups"
|
||||
;;
|
||||
esac])
|
||||
case "$uname" in
|
||||
Darwin*)
|
||||
# Darwin (OS X)
|
||||
CUPS_STATEDIR="$CUPS_SERVERROOT"
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
CUPS_STATEDIR="$localstatedir/run/cups"
|
||||
;;
|
||||
esac
|
||||
AC_DEFINE_UNQUOTED(CUPS_STATEDIR, "$CUPS_STATEDIR")
|
||||
AC_SUBST(CUPS_STATEDIR)
|
||||
|
||||
|
||||
@@ -23,8 +23,6 @@ AC_ARG_WITH(dnssd-includes, [ --with-dnssd-includes set directory for DNS Ser
|
||||
|
||||
DNSSDLIBS=""
|
||||
DNSSD_BACKEND=""
|
||||
IPPFIND_BIN=""
|
||||
IPPFIND_MAN=""
|
||||
|
||||
if test "x$PKGCONFIG" != x -a x$enable_avahi != xno; then
|
||||
AC_MSG_CHECKING(for Avahi)
|
||||
@@ -33,8 +31,6 @@ if test "x$PKGCONFIG" != x -a x$enable_avahi != xno; then
|
||||
CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`"
|
||||
DNSSDLIBS="`$PKGCONFIG --libs avahi-client`"
|
||||
DNSSD_BACKEND="dnssd"
|
||||
IPPFIND_BIN="ippfind"
|
||||
IPPFIND_MAN="ippfind.\$(MAN1EXT)"
|
||||
AC_DEFINE(HAVE_AVAHI)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
@@ -49,8 +45,6 @@ if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then
|
||||
AC_DEFINE(HAVE_DNSSD)
|
||||
DNSSDLIBS="-framework CoreFoundation -framework SystemConfiguration"
|
||||
DNSSD_BACKEND="dnssd"
|
||||
IPPFIND_BIN="ippfind"
|
||||
IPPFIND_MAN="ippfind.\$(MAN1EXT)"
|
||||
;;
|
||||
*)
|
||||
# All others...
|
||||
@@ -67,8 +61,6 @@ if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then
|
||||
AC_DEFINE(HAVE_DNSSD)
|
||||
DNSSDLIBS="-ldns_sd"
|
||||
DNSSD_BACKEND="dnssd",
|
||||
IPPFIND_BIN="ippfind"
|
||||
IPPFIND_MAN="ippfind.\$(MAN1EXT)"
|
||||
AC_MSG_RESULT(no))
|
||||
LIBS="$SAVELIBS"
|
||||
;;
|
||||
@@ -78,8 +70,6 @@ fi
|
||||
|
||||
AC_SUBST(DNSSDLIBS)
|
||||
AC_SUBST(DNSSD_BACKEND)
|
||||
AC_SUBST(IPPFIND_BIN)
|
||||
AC_SUBST(IPPFIND_MAN)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-dnssd.m4 7890 2008-08-29 22:19:39Z mike $".
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id: cups-gssapi.m4 11324 2013-10-04 03:11:42Z msweet $"
|
||||
dnl "$Id$"
|
||||
dnl
|
||||
dnl GSSAPI/Kerberos library detection for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2013 by Apple Inc.
|
||||
dnl Copyright 2007-2012 by Apple Inc.
|
||||
dnl Copyright 2006-2007 by Easy Software Products.
|
||||
dnl
|
||||
dnl This file contains Kerberos support code, copyright 2006 by
|
||||
@@ -71,9 +71,38 @@ if test x$enable_gssapi != xno; then
|
||||
if test "x$LIBGSSAPI" != x; then
|
||||
AC_CHECK_HEADER(krb5.h, AC_DEFINE(HAVE_KRB5_H))
|
||||
if test -d /System/Library/Frameworks/GSS.framework; then
|
||||
AC_CHECK_HEADER(GSS/gssapi.h, AC_DEFINE(HAVE_GSS_GSSAPI_H))
|
||||
AC_CHECK_HEADER(GSS/gssapi_generic.h, AC_DEFINE(HAVE_GSS_GSSAPI_GENERIC_H))
|
||||
AC_CHECK_HEADER(GSS/gssapi_spi.h, AC_DEFINE(HAVE_GSS_GSSAPI_SPI_H))
|
||||
gssdir="/System/Library/Frameworks/GSS.framework"
|
||||
AC_MSG_CHECKING(for GSS/gssapi.h presence)
|
||||
if test -f $gssdir/Headers/gssapi.h; then
|
||||
AC_DEFINE(HAVE_GSS_GSSAPI_H)
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
AC_MSG_CHECKING(for GSS/gssapi_generic.h presence)
|
||||
if test -f $gssdir/Headers/gssapi_generic.h; then
|
||||
AC_DEFINE(HAVE_GSSAPI_GENERIC_H)
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
AC_MSG_CHECKING(for GSS/gssapi_spi.h presence)
|
||||
if test -f $gssdir/PrivateHeaders/gssapi_spi.h; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_MSG_CHECKING(for GSS/gssapi_spi.h usability)
|
||||
if test -s $gssdir/PrivateHeaders/gssapi_spi.h; then
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(HAVE_GSS_GSSAPI_SPI_H)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
if test $uversion -ge 110 -a $uversion -lt 120; then
|
||||
# Broken public headers in 10.7.x...
|
||||
AC_MSG_ERROR(Run 'sudo mkdir -p $gssdir/PrivateHeaders' and 'sudo touch $gssdir/PrivateHeaders/gssapi_spi.h' to build CUPS.)
|
||||
fi
|
||||
fi
|
||||
else
|
||||
AC_CHECK_HEADER(gssapi.h, AC_DEFINE(HAVE_GSSAPI_H))
|
||||
AC_CHECK_HEADER(gssapi/gssapi.h, AC_DEFINE(HAVE_GSSAPI_GSSAPI_H))
|
||||
@@ -129,5 +158,5 @@ AC_SUBST(CUPS_DEFAULT_GSSSERVICENAME)
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_GSSSERVICENAME, "$CUPS_DEFAULT_GSSSERVICENAME")
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: cups-gssapi.m4 11324 2013-10-04 03:11:42Z msweet $".
|
||||
dnl End of "$Id$".
|
||||
dnl
|
||||
|
||||
@@ -28,6 +28,12 @@ if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then
|
||||
AMANDIR="/usr/share/man"
|
||||
PMANDIR="/usr/share/man"
|
||||
;;
|
||||
IRIX)
|
||||
# SGI IRIX
|
||||
mandir="/usr/share/catman/u_man"
|
||||
AMANDIR="/usr/share/catman/a_man"
|
||||
PMANDIR="/usr/share/catman/p_man"
|
||||
;;
|
||||
*)
|
||||
# All others
|
||||
mandir="/usr/man"
|
||||
@@ -45,6 +51,14 @@ AC_SUBST(PMANDIR)
|
||||
|
||||
dnl Setup manpage extensions...
|
||||
case "$uname" in
|
||||
IRIX*)
|
||||
# SGI IRIX
|
||||
MAN1EXT=1
|
||||
MAN5EXT=5
|
||||
MAN7EXT=7
|
||||
MAN8EXT=1m
|
||||
MAN8DIR=1
|
||||
;;
|
||||
SunOS* | HP-UX*)
|
||||
# Solaris and HP-UX
|
||||
MAN1EXT=1
|
||||
|
||||
@@ -3,7 +3,7 @@ dnl "$Id: cups-opsys.m4 6649 2007-07-11 21:46:42Z mike $"
|
||||
dnl
|
||||
dnl Operating system stuff for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2012 by Apple Inc.
|
||||
dnl Copyright 2007-2011 by Apple Inc.
|
||||
dnl Copyright 1997-2006 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
@@ -19,16 +19,12 @@ uversion=`uname -r | sed -e '1,$s/^[[^0-9]]*\([[0-9]]*\)\.\([[0-9]]*\).*/\1\2/'`
|
||||
uarch=`uname -m`
|
||||
|
||||
case "$uname" in
|
||||
Darwin*)
|
||||
uname="Darwin"
|
||||
if test $uversion -lt 120; then
|
||||
AC_MSG_ERROR([Sorry, this version of CUPS requires OS X 10.8 or higher.])
|
||||
fi
|
||||
;;
|
||||
|
||||
GNU* | GNU/*)
|
||||
uname="GNU"
|
||||
;;
|
||||
IRIX*)
|
||||
uname="IRIX"
|
||||
;;
|
||||
Linux*)
|
||||
uname="Linux"
|
||||
;;
|
||||
|
||||
@@ -215,8 +215,8 @@ if test "$DSO" != ":"; then
|
||||
EXPORT_LDFLAGS="-Wl,-R$libdir"
|
||||
fi
|
||||
;;
|
||||
Linux | GNU)
|
||||
# Linux, and HURD...
|
||||
IRIX | Linux | GNU)
|
||||
# IRIX, Linux, and HURD...
|
||||
if test $exec_prefix != /usr; then
|
||||
DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS"
|
||||
LDFLAGS="$LDFLAGS -Wl,-rpath,$libdir"
|
||||
|
||||
@@ -59,7 +59,34 @@ if test x$enable_ssl != xno; then
|
||||
AC_CHECK_HEADER(Security/SecIdentitySearchPriv.h,
|
||||
AC_DEFINE(HAVE_SECIDENTITYSEARCHPRIV_H))
|
||||
|
||||
AC_DEFINE(HAVE_CSSMERRORSTRING)])
|
||||
dnl Check for SecCertificateCopyData..
|
||||
AC_MSG_CHECKING(for SecCertificateCopyData)
|
||||
if test $uversion -ge 100; then
|
||||
AC_DEFINE(HAVE_SECCERTIFICATECOPYDATA)
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
dnl Check for SecIdentitySearchCreateWithPolicy...
|
||||
AC_MSG_CHECKING(for SecIdentitySearchCreateWithPolicy)
|
||||
if test $uversion -ge 80; then
|
||||
AC_DEFINE(HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY)
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
dnl Check for SecPolicyCreateSSL...
|
||||
AC_MSG_CHECKING(for SecPolicyCreateSSL)
|
||||
if test $uversion -ge 110; then
|
||||
AC_DEFINE(HAVE_SECPOLICYCREATESSL)
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi])
|
||||
|
||||
AC_DEFINE(HAVE_CSSMERRORSTRING)
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
+42
-6
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: config.h.in 11642 2014-02-27 15:57:59Z msweet $"
|
||||
* "$Id: config.h.in 7918 2008-09-08 22:03:01Z mike $"
|
||||
*
|
||||
* Configuration file for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -132,11 +132,13 @@
|
||||
|
||||
|
||||
/*
|
||||
* Do we have ZLIB?
|
||||
* Do we have various image libraries?
|
||||
*/
|
||||
|
||||
#undef HAVE_LIBPNG
|
||||
#undef HAVE_LIBZ
|
||||
#undef HAVE_INFLATECOPY
|
||||
#undef HAVE_LIBJPEG
|
||||
#undef HAVE_LIBTIFF
|
||||
|
||||
|
||||
/*
|
||||
@@ -166,6 +168,13 @@
|
||||
#undef HAVE_CRYPT_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <scsi/sg.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_SCSI_SG_H
|
||||
|
||||
|
||||
/*
|
||||
* Use <stdint.h>?
|
||||
*/
|
||||
@@ -316,6 +325,34 @@
|
||||
#undef HAVE_SECURETRANSPORTPRIV_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the SecCertificateCopyData function?
|
||||
*/
|
||||
|
||||
#undef HAVE_SECCERTIFICATECOPYDATA
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the SecIdentitySearchCreateWithPolicy function?
|
||||
*/
|
||||
|
||||
#undef HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the SecPolicyCreateSSL function?
|
||||
*/
|
||||
|
||||
#undef HAVE_SECPOLICYCREATESSL
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the SecPolicyCreateSSL function?
|
||||
*/
|
||||
|
||||
#undef HAVE_SECPOLICYCREATESSL
|
||||
|
||||
|
||||
/*
|
||||
* Do we have the cssmErrorString function?
|
||||
*/
|
||||
@@ -535,7 +572,6 @@
|
||||
|
||||
#undef HAVE_DBUS
|
||||
#undef HAVE_DBUS_MESSAGE_ITER_INIT_APPEND
|
||||
#undef HAVE_DBUS_THREADS_INIT
|
||||
|
||||
|
||||
/*
|
||||
@@ -707,5 +743,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
|
||||
#endif /* !_CUPS_CONFIG_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: config.h.in 11642 2014-02-27 15:57:59Z msweet $".
|
||||
* End of "$Id: config.h.in 7918 2008-09-08 22:03:01Z mike $".
|
||||
*/
|
||||
|
||||
externo
-11405
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+4
-3
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id: configure.in 11109 2013-07-08 21:15:13Z msweet $"
|
||||
dnl "$Id: configure.in 7833 2008-08-04 20:55:13Z mike $"
|
||||
dnl
|
||||
dnl Configuration script for CUPS.
|
||||
dnl
|
||||
dnl Copyright 2007-2012 by Apple Inc.
|
||||
dnl Copyright 2007-2013 by Apple Inc.
|
||||
dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
dnl
|
||||
dnl These coded instructions, statements, and computer programs are the
|
||||
@@ -70,6 +70,7 @@ AC_OUTPUT(Makedefs
|
||||
desktop/cups.desktop
|
||||
doc/help/ref-cups-files-conf.html
|
||||
doc/help/ref-cupsd-conf.html
|
||||
doc/help/standard.html
|
||||
doc/index.html
|
||||
man/client.conf.man
|
||||
man/cups-deviced.man
|
||||
@@ -92,5 +93,5 @@ AC_OUTPUT(Makedefs
|
||||
chmod +x cups-config
|
||||
|
||||
dnl
|
||||
dnl End of "$Id: configure.in 11109 2013-07-08 21:15:13Z msweet $".
|
||||
dnl End of "$Id: configure.in 7833 2008-08-04 20:55:13Z mike $".
|
||||
dnl
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# "$Id: cups-config.in 10996 2013-05-29 11:51:34Z msweet $"
|
||||
# "$Id: cups-config.in 9926 2011-08-27 09:23:01Z mike $"
|
||||
#
|
||||
# CUPS configuration utility.
|
||||
#
|
||||
@@ -142,5 +142,5 @@ while test $# -gt 0; do
|
||||
done
|
||||
|
||||
#
|
||||
# End of "$Id: cups-config.in 10996 2013-05-29 11:51:34Z msweet $".
|
||||
# End of "$Id: cups-config.in 9926 2011-08-27 09:23:01Z mike $".
|
||||
#
|
||||
|
||||
+5
-15
@@ -1,9 +1,9 @@
|
||||
#
|
||||
# "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $"
|
||||
# "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $"
|
||||
#
|
||||
# API library Makefile for CUPS.
|
||||
#
|
||||
# Copyright 2007-2013 by Apple Inc.
|
||||
# Copyright 2007-2012 by Apple Inc.
|
||||
# Copyright 1997-2006 by Easy Software Products, all rights reserved.
|
||||
#
|
||||
# These coded instructions, statements, and computer programs are the
|
||||
@@ -17,14 +17,6 @@
|
||||
|
||||
include ../Makedefs
|
||||
|
||||
|
||||
#
|
||||
# Options to build libcups without the use of deprecated APIs...
|
||||
#
|
||||
|
||||
OPTIONS = -D_CUPS_NO_DEPRECATED=1 -D_PPD_DEPRECATED=""
|
||||
|
||||
|
||||
#
|
||||
# Object files...
|
||||
#
|
||||
@@ -113,7 +105,6 @@ HEADERS = \
|
||||
ipp.h \
|
||||
language.h \
|
||||
ppd.h \
|
||||
pwg.h \
|
||||
raster.h \
|
||||
sidechannel.h \
|
||||
transcode.h \
|
||||
@@ -268,7 +259,6 @@ install-libs: $(INSTALLSTATIC)
|
||||
if test "x$(SYMROOT)" != "x"; then \
|
||||
$(INSTALL_DIR) $(SYMROOT); \
|
||||
cp $(LIBCUPS) $(SYMROOT); \
|
||||
dsymutil $(SYMROOT)/$(LIBCUPS); \
|
||||
fi
|
||||
|
||||
installstatic:
|
||||
@@ -536,8 +526,8 @@ apihelp:
|
||||
--css ../doc/cups-printable.css \
|
||||
--header api-cups.header --intro api-cups.shtml \
|
||||
api-cups.xml \
|
||||
cups.h pwg.h adminutil.c dest*.c language.c notify.c \
|
||||
options.c pwg-media.c tempfile.c usersys.c \
|
||||
cups.h adminutil.c dest*.c language.c notify.c \
|
||||
options.c tempfile.c usersys.c \
|
||||
util.c >../doc/help/api-cups.html
|
||||
mxmldoc --tokens help/api-cups.html api-cups.xml >../doc/help/api-cups.tokens
|
||||
$(RM) api-cups.xml
|
||||
@@ -639,5 +629,5 @@ include Dependencies
|
||||
|
||||
|
||||
#
|
||||
# End of "$Id: Makefile 10996 2013-05-29 11:51:34Z msweet $".
|
||||
# End of "$Id: Makefile 7871 2008-08-27 21:12:43Z mike $".
|
||||
#
|
||||
|
||||
+45
-45
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: adminutil.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: adminutil.c 7850 2008-08-20 00:07:25Z mike $"
|
||||
*
|
||||
* Administration utility API definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 2001-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -129,7 +129,7 @@ cupsAdminCreateWindowsPPD(
|
||||
* Get the supported banner pages, etc. for the printer...
|
||||
*/
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
|
||||
|
||||
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
|
||||
"localhost", 0, "/printers/%s", dest);
|
||||
@@ -145,7 +145,7 @@ cupsAdminCreateWindowsPPD(
|
||||
*/
|
||||
|
||||
response = cupsDoRequest(http, request, "/");
|
||||
if (!response || cupsLastError() > IPP_STATUS_OK_CONFLICTING)
|
||||
if (!response || cupsLastError() > IPP_OK_CONFLICT)
|
||||
{
|
||||
unlink(src);
|
||||
return (NULL);
|
||||
@@ -253,7 +253,7 @@ cupsAdminCreateWindowsPPD(
|
||||
snprintf(line, sizeof(line),
|
||||
_cupsLangString(language, _("Missing value on line %d.")),
|
||||
linenum);
|
||||
_cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0);
|
||||
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line, 0);
|
||||
|
||||
cupsFileClose(srcfp);
|
||||
cupsFileClose(dstfp);
|
||||
@@ -272,7 +272,7 @@ cupsAdminCreateWindowsPPD(
|
||||
_cupsLangString(language,
|
||||
_("Missing double quote on line %d.")),
|
||||
linenum);
|
||||
_cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0);
|
||||
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line, 0);
|
||||
|
||||
cupsFileClose(srcfp);
|
||||
cupsFileClose(dstfp);
|
||||
@@ -291,7 +291,7 @@ cupsAdminCreateWindowsPPD(
|
||||
_cupsLangString(language,
|
||||
_("Bad option + choice on line %d.")),
|
||||
linenum);
|
||||
_cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0);
|
||||
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, line, 0);
|
||||
|
||||
cupsFileClose(srcfp);
|
||||
cupsFileClose(dstfp);
|
||||
@@ -334,7 +334,7 @@ cupsAdminCreateWindowsPPD(
|
||||
|
||||
if (linenum == 0)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, _("Empty PPD file."), 1);
|
||||
_cupsSetError(IPP_DOCUMENT_FORMAT_ERROR, _("Empty PPD file."), 1);
|
||||
|
||||
cupsFileClose(dstfp);
|
||||
unlink(buffer);
|
||||
@@ -424,7 +424,7 @@ cupsAdminExportSamba(
|
||||
|
||||
if (!dest || !ppd || !samba_server || !samba_user || !samba_password)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -434,7 +434,7 @@ cupsAdminExportSamba(
|
||||
|
||||
if ((fp = cupsTempFile2(authfile, sizeof(authfile))) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, NULL, 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -487,7 +487,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to copy Windows 2000 printer "
|
||||
"driver files (%d).")), status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -522,7 +522,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to copy CUPS printer driver "
|
||||
"files (%d).")), status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -565,7 +565,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to install Windows 2000 printer "
|
||||
"driver files (%d).")), status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -610,7 +610,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to copy Windows 9x printer "
|
||||
"driver files (%d).")), status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -639,7 +639,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to install Windows 9x printer "
|
||||
"driver files (%d).")), status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -691,7 +691,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to copy 64-bit Windows printer "
|
||||
"driver files (%d).")), status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -726,7 +726,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to copy 64-bit CUPS printer driver "
|
||||
"files (%d).")), status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -769,7 +769,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to install Windows 2000 printer "
|
||||
"driver files (%d).")), status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -794,13 +794,13 @@ cupsAdminExportSamba(
|
||||
"are installed.")),
|
||||
sizeof(message));
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, message, 0);
|
||||
_cupsSetError(IPP_NOT_FOUND, message, 0);
|
||||
_cupsLangPuts(logfile, message);
|
||||
}
|
||||
|
||||
if (have_drivers == 0)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, message, 0);
|
||||
_cupsSetError(IPP_NOT_FOUND, message, 0);
|
||||
|
||||
unlink(authfile);
|
||||
|
||||
@@ -821,7 +821,7 @@ cupsAdminExportSamba(
|
||||
_("Unable to set Windows printer driver (%d).")),
|
||||
status);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
if (logfile)
|
||||
_cupsLangPuts(logfile, message);
|
||||
@@ -882,9 +882,9 @@ cupsAdminGetServerSettings(
|
||||
*/
|
||||
|
||||
if (strcmp(cg->http->hostname, cg->server) ||
|
||||
cg->ipp_port != httpAddrPort(cg->http->hostaddr) ||
|
||||
cg->ipp_port != _httpAddrPort(cg->http->hostaddr) ||
|
||||
(cg->http->encryption != cg->encryption &&
|
||||
cg->http->encryption == HTTP_ENCRYPTION_NEVER))
|
||||
cg->http->encryption == HTTP_ENCRYPT_NEVER))
|
||||
{
|
||||
/*
|
||||
* Need to close the current connection because something has changed...
|
||||
@@ -901,13 +901,13 @@ cupsAdminGetServerSettings(
|
||||
|
||||
if (!cg->http)
|
||||
{
|
||||
if ((cg->http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC,
|
||||
cupsEncryption(), 1, 0, NULL)) == NULL)
|
||||
if ((cg->http = _httpCreate(cupsServer(), ippPort(), NULL,
|
||||
cupsEncryption(), AF_UNSPEC)) == NULL)
|
||||
{
|
||||
if (errno)
|
||||
_cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, NULL, 0);
|
||||
_cupsSetError(IPP_SERVICE_UNAVAILABLE, NULL, 0);
|
||||
else
|
||||
_cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE,
|
||||
_cupsSetError(IPP_SERVICE_UNAVAILABLE,
|
||||
_("Unable to connect to host."), 1);
|
||||
|
||||
if (num_settings)
|
||||
@@ -925,7 +925,7 @@ cupsAdminGetServerSettings(
|
||||
|
||||
if (!http || !num_settings || !settings)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
|
||||
if (num_settings)
|
||||
*num_settings = 0;
|
||||
@@ -944,7 +944,7 @@ cupsAdminGetServerSettings(
|
||||
*/
|
||||
|
||||
if ((status = get_cupsd_conf(http, cg, cg->cupsd_update, cupsdconf,
|
||||
sizeof(cupsdconf), &remote)) == HTTP_STATUS_OK)
|
||||
sizeof(cupsdconf), &remote)) == HTTP_OK)
|
||||
{
|
||||
if ((cupsd = cupsFileOpen(cupsdconf, "r")) == NULL)
|
||||
{
|
||||
@@ -954,7 +954,7 @@ cupsAdminGetServerSettings(
|
||||
snprintf(message, sizeof(message),
|
||||
_cupsLangString(cupsLangDefault(), _("Open of %s failed: %s")),
|
||||
cupsdconf, strerror(errno));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1136,7 +1136,7 @@ cupsAdminGetServerSettings(
|
||||
cg->cupsd_num_settings,
|
||||
&(cg->cupsd_settings));
|
||||
}
|
||||
else if (status != HTTP_STATUS_NOT_MODIFIED)
|
||||
else if (status != HTTP_NOT_MODIFIED)
|
||||
invalidate_cupsd_cache(cg);
|
||||
|
||||
/*
|
||||
@@ -1220,7 +1220,7 @@ cupsAdminSetServerSettings(
|
||||
|
||||
if (!http || !num_settings || !settings)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -1230,11 +1230,11 @@ cupsAdminSetServerSettings(
|
||||
*/
|
||||
|
||||
if (get_cupsd_conf(http, cg, 0, cupsdconf, sizeof(cupsdconf),
|
||||
&remote) == HTTP_STATUS_OK)
|
||||
&remote) == HTTP_OK)
|
||||
{
|
||||
if ((cupsd = cupsFileOpen(cupsdconf, "r")) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, NULL, 0);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
@@ -1398,7 +1398,7 @@ cupsAdminSetServerSettings(
|
||||
if (remote)
|
||||
unlink(cupsdconf);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, NULL, 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -1954,7 +1954,7 @@ cupsAdminSetServerSettings(
|
||||
|
||||
status = cupsPutFile(http, "/admin/conf/cupsd.conf", tempfile);
|
||||
|
||||
if (status == HTTP_STATUS_CREATED)
|
||||
if (status == HTTP_CREATED)
|
||||
{
|
||||
/*
|
||||
* Updated OK, add the basic settings...
|
||||
@@ -2024,7 +2024,7 @@ cupsAdminSetServerSettings(
|
||||
|
||||
unlink(tempfile);
|
||||
|
||||
return (status == HTTP_STATUS_CREATED);
|
||||
return (status == HTTP_CREATED);
|
||||
}
|
||||
|
||||
|
||||
@@ -2158,16 +2158,16 @@ get_cupsd_conf(
|
||||
snprintf(message, sizeof(message),
|
||||
_cupsLangString(cupsLangDefault(), _("stat of %s failed: %s")),
|
||||
name, strerror(errno));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, message, 0);
|
||||
|
||||
*name = '\0';
|
||||
|
||||
return (HTTP_STATUS_SERVER_ERROR);
|
||||
return (HTTP_SERVER_ERROR);
|
||||
}
|
||||
else if (last_update && info.st_mtime <= last_update)
|
||||
status = HTTP_STATUS_NOT_MODIFIED;
|
||||
status = HTTP_NOT_MODIFIED;
|
||||
else
|
||||
status = HTTP_STATUS_OK;
|
||||
status = HTTP_OK;
|
||||
}
|
||||
else
|
||||
#endif /* !WIN32 */
|
||||
@@ -2180,11 +2180,11 @@ get_cupsd_conf(
|
||||
{
|
||||
*name = '\0';
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, NULL, 0);
|
||||
|
||||
invalidate_cupsd_cache(cg);
|
||||
|
||||
return (HTTP_STATUS_SERVER_ERROR);
|
||||
return (HTTP_SERVER_ERROR);
|
||||
}
|
||||
|
||||
*remote = 1;
|
||||
@@ -2199,7 +2199,7 @@ get_cupsd_conf(
|
||||
|
||||
close(fd);
|
||||
|
||||
if (status != HTTP_STATUS_OK)
|
||||
if (status != HTTP_OK)
|
||||
{
|
||||
unlink(name);
|
||||
*name = '\0';
|
||||
@@ -2337,5 +2337,5 @@ write_option(cups_file_t *dstfp, /* I - PPD file */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: adminutil.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: adminutil.c 7850 2008-08-20 00:07:25Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: adminutil.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: adminutil.h 7026 2007-10-19 00:57:45Z mike $"
|
||||
*
|
||||
* Administration utility API definitions for CUPS.
|
||||
*
|
||||
@@ -77,5 +77,5 @@ extern int cupsAdminSetServerSettings(http_t *http,
|
||||
#endif /* !_CUPS_ADMINUTIL_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: adminutil.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: adminutil.h 7026 2007-10-19 00:57:45Z mike $".
|
||||
*/
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
Filter and backend programming header for CUPS.
|
||||
|
||||
Copyright 2008-2014 by Apple Inc.
|
||||
Copyright 2008-2011 by Apple Inc.
|
||||
|
||||
These coded instructions, statements, and computer programs are the
|
||||
property of Apple Inc. and are protected by Federal copyright
|
||||
|
||||
+8
-97
@@ -237,7 +237,7 @@ prefix strings:</p>
|
||||
<code>marker-types</code>, <code>printer-alert</code>, and
|
||||
<code>printer-alert-description</code> printer attributes. Standard
|
||||
<code>marker-types</code> values are listed in <a href='#TABLE1'>Table
|
||||
1</a>. String values need special handling - see <a href="#ATTR_STRINGS">Reporting Attribute String Values</a> below.</dd>
|
||||
1</a>.</dd>
|
||||
|
||||
<dt>CRIT: message</dt>
|
||||
<dd>Sets the printer-state-message attribute and adds the specified
|
||||
@@ -320,11 +320,11 @@ the "DEBUG:" prefix string.</p>
|
||||
<td>Fuser unit</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>fuser-cleaning-pad</td>
|
||||
<td>fuserCleaningPad</td>
|
||||
<td>Fuser cleaning pad</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>fuser-oil</td>
|
||||
<td>fuserOil</td>
|
||||
<td>Fuser oil</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -336,7 +336,7 @@ the "DEBUG:" prefix string.</p>
|
||||
<td>Photo conductor</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>solid-wax</td>
|
||||
<td>solidWax</td>
|
||||
<td>Wax supply</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -348,19 +348,19 @@ the "DEBUG:" prefix string.</p>
|
||||
<td>Toner supply</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>transfer-unit</td>
|
||||
<td>transferUnit</td>
|
||||
<td>Transfer unit</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>waste-ink</td>
|
||||
<td>wasteInk</td>
|
||||
<td>Waste ink tank</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>waste-toner</td>
|
||||
<td>wasteToner</td>
|
||||
<td>Waste toner tank</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>waste-wax</td>
|
||||
<td>wasteWax</td>
|
||||
<td>Waste wax tank</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -440,95 +440,6 @@ the "DEBUG:" prefix string.</p>
|
||||
</tbody>
|
||||
</table></div>
|
||||
|
||||
|
||||
<h4><a name="ATTR_STRINGS">Reporting Attribute String Values</a></h4>
|
||||
|
||||
<p>When reporting string values using "ATTR:" messages, a filter or backend must take special care to appropriately quote those values. The scheduler uses the CUPS option parsing code for attributes, so the general syntax is:</p>
|
||||
|
||||
<pre class="example">
|
||||
name=simple
|
||||
name=simple,simple,...
|
||||
name='complex value'
|
||||
name="complex value"
|
||||
name='"complex value"','"complex value"',...
|
||||
</pre>
|
||||
|
||||
<p>Simple values are strings that do not contain spaces, quotes, backslashes, or the comma and can be placed verbatim in the "ATTR:" message, for example:</p>
|
||||
|
||||
<pre class="example">
|
||||
int levels[4] = { 40, 50, 60, 70 }; /* CMYK */
|
||||
|
||||
fputs("ATTR: marker-colors=#00FFFF,#FF00FF,#FFFF00,#000000\n", stderr);
|
||||
fputs("ATTR: marker-high-levels=100,100,100,100\n", stderr);
|
||||
fprintf(stderr, "ATTR: marker-levels=%d,%d,%d,%d\n", levels[0], levels[1],
|
||||
levels[2], levels[3], levels[4]);
|
||||
fputs("ATTR: marker-low-levels=5,5,5,5\n", stderr);
|
||||
fputs("ATTR: marker-types=toner,toner,toner,toner\n", stderr);
|
||||
</pre>
|
||||
|
||||
<p>Complex values that contains spaces, quotes, backslashes, or the comma must be quoted. For a single value a single set of quotes is sufficient:</p>
|
||||
|
||||
<pre class="example">
|
||||
fputs("ATTR: marker-message='Levels shown are approximate.'\n", stderr);
|
||||
</pre>
|
||||
|
||||
<p>When multiple values are reported, each value must be enclosed by a set of single and double quotes:</p>
|
||||
|
||||
<pre class="example">
|
||||
fputs("ATTR: marker-names='\"Cyan Toner\"','\"Magenta Toner\"',"
|
||||
"'\"Yellow Toner\"','\"Black Toner\"'\n", stderr);
|
||||
</pre>
|
||||
|
||||
<p>The IPP backend includes a <var>quote_string</var> function that may be used to properly quote a complex value in an "ATTR:" message:</p>
|
||||
|
||||
<pre class="example">
|
||||
static const char * /* O - Quoted string */
|
||||
quote_string(const char *s, /* I - String */
|
||||
char *q, /* I - Quoted string buffer */
|
||||
size_t qsize) /* I - Size of quoted string buffer */
|
||||
{
|
||||
char *qptr, /* Pointer into string buffer */
|
||||
*qend; /* End of string buffer */
|
||||
|
||||
|
||||
qptr = q;
|
||||
qend = q + qsize - 5;
|
||||
|
||||
if (qend < q)
|
||||
{
|
||||
*q = '\0';
|
||||
return (q);
|
||||
}
|
||||
|
||||
*qptr++ = '\'';
|
||||
*qptr++ = '\"';
|
||||
|
||||
while (*s && qptr < qend)
|
||||
{
|
||||
if (*s == '\\' || *s == '\"' || *s == '\'')
|
||||
{
|
||||
if (qptr < (qend - 4))
|
||||
{
|
||||
*qptr++ = '\\';
|
||||
*qptr++ = '\\';
|
||||
*qptr++ = '\\';
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
*qptr++ = *s++;
|
||||
}
|
||||
|
||||
*qptr++ = '\"';
|
||||
*qptr++ = '\'';
|
||||
*qptr = '\0';
|
||||
|
||||
return (q);
|
||||
}
|
||||
</pre>
|
||||
|
||||
|
||||
<h4><a name="MANAGING_STATE">Managing Printer State in a Filter</a></h4>
|
||||
|
||||
<p>Filters are responsible for managing the state keywords they set using
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: array-private.h 3933 2012-10-01 03:01:10Z msweet $"
|
||||
* "$Id: array-private.h 3448 2011-10-04 06:53:26Z msweet $"
|
||||
*
|
||||
* Private array definitions for CUPS.
|
||||
*
|
||||
* Copyright 2011-2012 by Apple Inc.
|
||||
* Copyright 2011 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -37,10 +37,9 @@ extern "C" {
|
||||
* Functions...
|
||||
*/
|
||||
|
||||
extern int _cupsArrayAddStrings(cups_array_t *a, const char *s,
|
||||
char delim) _CUPS_API_1_5;
|
||||
extern cups_array_t *_cupsArrayNewStrings(const char *s, char delim)
|
||||
_CUPS_API_1_5;
|
||||
extern int _cupsArrayAddStrings(cups_array_t *a, const char *s)
|
||||
_CUPS_API_1_5;
|
||||
extern cups_array_t *_cupsArrayNewStrings(const char *s) _CUPS_API_1_5;
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
@@ -48,5 +47,5 @@ extern cups_array_t *_cupsArrayNewStrings(const char *s, char delim)
|
||||
#endif /* !_CUPS_ARRAY_PRIVATE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: array-private.h 3933 2012-10-01 03:01:10Z msweet $".
|
||||
* End of "$Id: array-private.h 3448 2011-10-04 06:53:26Z msweet $".
|
||||
*/
|
||||
|
||||
+10
-50
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: array.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: array.c 7616 2008-05-28 00:34:13Z mike $"
|
||||
*
|
||||
* Sorted array routines for CUPS.
|
||||
*
|
||||
@@ -138,7 +138,8 @@ cupsArrayAdd(cups_array_t *a, /* I - Array */
|
||||
|
||||
|
||||
/*
|
||||
* '_cupsArrayAddStrings()' - Add zero or more delimited strings to an array.
|
||||
* '_cupsArrayAddStrings()' - Add zero or more comma-delimited strings to an
|
||||
* array.
|
||||
*
|
||||
* Note: The array MUST be created using the @link _cupsArrayNewStrings@
|
||||
* function. Duplicate strings are NOT added. If the string pointer "s" is NULL
|
||||
@@ -147,8 +148,7 @@ cupsArrayAdd(cups_array_t *a, /* I - Array */
|
||||
|
||||
int /* O - 1 on success, 0 on failure */
|
||||
_cupsArrayAddStrings(cups_array_t *a, /* I - Array */
|
||||
const char *s, /* I - Delimited strings or NULL */
|
||||
char delim)/* I - Delimiter character */
|
||||
const char *s) /* I - Comma-delimited strings or NULL */
|
||||
{
|
||||
char *buffer, /* Copy of string */
|
||||
*start, /* Start of string */
|
||||
@@ -156,47 +156,20 @@ _cupsArrayAddStrings(cups_array_t *a, /* I - Array */
|
||||
int status = 1; /* Status of add */
|
||||
|
||||
|
||||
DEBUG_printf(("_cupsArrayAddStrings(a=%p, s=\"%s\", delim='%c')", a, s,
|
||||
delim));
|
||||
|
||||
if (!a || !s || !*s)
|
||||
{
|
||||
DEBUG_puts("1_cupsArrayAddStrings: Returning 0");
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (delim == ' ')
|
||||
if (!strchr(s, ','))
|
||||
{
|
||||
/*
|
||||
* Skip leading whitespace...
|
||||
* String doesn't contain a comma, so add it as a single value...
|
||||
*/
|
||||
|
||||
DEBUG_puts("1_cupsArrayAddStrings: Skipping leading whitespace.");
|
||||
|
||||
while (*s && isspace(*s & 255))
|
||||
s ++;
|
||||
|
||||
DEBUG_printf(("1_cupsArrayAddStrings: Remaining string \"%s\".", s));
|
||||
}
|
||||
|
||||
if (!strchr(s, delim) &&
|
||||
(delim != ' ' || (!strchr(s, '\t') && !strchr(s, '\n'))))
|
||||
{
|
||||
/*
|
||||
* String doesn't contain a delimiter, so add it as a single value...
|
||||
*/
|
||||
|
||||
DEBUG_puts("1_cupsArrayAddStrings: No delimiter seen, adding a single "
|
||||
"value.");
|
||||
|
||||
if (!cupsArrayFind(a, (void *)s))
|
||||
status = cupsArrayAdd(a, (void *)s);
|
||||
}
|
||||
else if ((buffer = strdup(s)) == NULL)
|
||||
{
|
||||
DEBUG_puts("1_cupsArrayAddStrings: Unable to duplicate string.");
|
||||
status = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (start = end = buffer; *end; start = end)
|
||||
@@ -206,21 +179,11 @@ _cupsArrayAddStrings(cups_array_t *a, /* I - Array */
|
||||
* it...
|
||||
*/
|
||||
|
||||
if (delim == ' ')
|
||||
{
|
||||
while (*end && !isspace(*end & 255))
|
||||
end ++;
|
||||
while (*end && isspace(*end & 255))
|
||||
*end++ = '\0';
|
||||
}
|
||||
else if ((end = strchr(start, delim)) != NULL)
|
||||
if ((end = strchr(start, ',')) != NULL)
|
||||
*end++ = '\0';
|
||||
else
|
||||
end = start + strlen(start);
|
||||
|
||||
DEBUG_printf(("1_cupsArrayAddStrings: Adding \"%s\", end=\"%s\"", start,
|
||||
end));
|
||||
|
||||
if (!cupsArrayFind(a, start))
|
||||
status &= cupsArrayAdd(a, start);
|
||||
}
|
||||
@@ -228,8 +191,6 @@ _cupsArrayAddStrings(cups_array_t *a, /* I - Array */
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
DEBUG_printf(("1_cupsArrayAddStrings: Returning %d.", status));
|
||||
|
||||
return (status);
|
||||
}
|
||||
|
||||
@@ -821,8 +782,7 @@ cupsArrayNew3(cups_array_func_t f, /* I - Comparison function or @code NULL@ fo
|
||||
*/
|
||||
|
||||
cups_array_t * /* O - Array */
|
||||
_cupsArrayNewStrings(const char *s, /* I - Delimited strings or NULL */
|
||||
char delim) /* I - Delimiter character */
|
||||
_cupsArrayNewStrings(const char *s) /* I - Comma-delimited strings or NULL */
|
||||
{
|
||||
cups_array_t *a; /* Array */
|
||||
|
||||
@@ -830,7 +790,7 @@ _cupsArrayNewStrings(const char *s, /* I - Delimited strings or NULL */
|
||||
if ((a = cupsArrayNew3((cups_array_func_t)strcmp, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree)) != NULL)
|
||||
_cupsArrayAddStrings(a, s, delim);
|
||||
_cupsArrayAddStrings(a, s);
|
||||
|
||||
return (a);
|
||||
}
|
||||
@@ -1362,5 +1322,5 @@ cups_array_find(cups_array_t *a, /* I - Array */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: array.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: array.c 7616 2008-05-28 00:34:13Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: array.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: array.h 7266 2008-01-29 02:15:29Z mike $"
|
||||
*
|
||||
* Sorted array definitions for CUPS.
|
||||
*
|
||||
@@ -88,5 +88,5 @@ extern void *cupsArrayUserData(cups_array_t *a) _CUPS_API_1_2;
|
||||
#endif /* !_CUPS_ARRAY_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: array.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: array.h 7266 2008-01-29 02:15:29Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: attr.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: attr.c 7584 2008-05-16 22:55:53Z mike $"
|
||||
*
|
||||
* PPD model-specific attribute routines for CUPS.
|
||||
*
|
||||
@@ -331,5 +331,5 @@ _ppdNormalizeMakeAndModel(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: attr.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: attr.c 7584 2008-05-16 22:55:53Z mike $".
|
||||
*/
|
||||
|
||||
+12
-19
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: auth.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: auth.c 7720 2008-07-11 22:46:21Z mike $"
|
||||
*
|
||||
* Authentication functions for CUPS.
|
||||
*
|
||||
@@ -112,7 +112,7 @@ static int cups_local_auth(http_t *http);
|
||||
/*
|
||||
* 'cupsDoAuthentication()' - Authenticate a request.
|
||||
*
|
||||
* This function should be called in response to a @code HTTP_STATUS_UNAUTHORIZED@
|
||||
* This function should be called in response to a @code HTTP_UNAUTHORIZED@
|
||||
* status, prior to resubmitting your request.
|
||||
*
|
||||
* @since CUPS 1.1.20/OS X 10.4@
|
||||
@@ -164,14 +164,14 @@ cupsDoAuthentication(
|
||||
DEBUG_printf(("2cupsDoAuthentication: authstring=\"%s\"",
|
||||
http->authstring));
|
||||
|
||||
if (http->status == HTTP_STATUS_UNAUTHORIZED)
|
||||
if (http->status == HTTP_UNAUTHORIZED)
|
||||
http->digest_tries ++;
|
||||
|
||||
return (0);
|
||||
}
|
||||
else if (localauth == -1)
|
||||
{
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
http->status = HTTP_AUTHORIZATION_CANCELED;
|
||||
return (-1); /* Error or canceled */
|
||||
}
|
||||
}
|
||||
@@ -190,18 +190,11 @@ cupsDoAuthentication(
|
||||
* Nope - get a new password from the user...
|
||||
*/
|
||||
|
||||
char default_username[HTTP_MAX_VALUE];
|
||||
/* Default username */
|
||||
|
||||
cg = _cupsGlobals();
|
||||
|
||||
if (!cg->lang_default)
|
||||
cg->lang_default = cupsLangDefault();
|
||||
|
||||
if (httpGetSubField(http, HTTP_FIELD_WWW_AUTHENTICATE, "username",
|
||||
default_username))
|
||||
cupsSetUser(default_username);
|
||||
|
||||
snprintf(prompt, sizeof(prompt),
|
||||
_cupsLangString(cg->lang_default, _("Password for %s on %s? ")),
|
||||
cupsUser(),
|
||||
@@ -212,22 +205,22 @@ cupsDoAuthentication(
|
||||
|
||||
if ((password = cupsGetPassword2(prompt, http, method, resource)) == NULL)
|
||||
{
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
http->status = HTTP_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
snprintf(http->userpass, sizeof(http->userpass), "%s:%s", cupsUser(),
|
||||
password);
|
||||
}
|
||||
else if (http->status == HTTP_STATUS_UNAUTHORIZED)
|
||||
else if (http->status == HTTP_UNAUTHORIZED)
|
||||
http->digest_tries ++;
|
||||
|
||||
if (http->status == HTTP_STATUS_UNAUTHORIZED && http->digest_tries >= 3)
|
||||
if (http->status == HTTP_UNAUTHORIZED && http->digest_tries >= 3)
|
||||
{
|
||||
DEBUG_printf(("1cupsDoAuthentication: Too many authentication tries (%d)",
|
||||
http->digest_tries));
|
||||
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
http->status = HTTP_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@@ -244,7 +237,7 @@ cupsDoAuthentication(
|
||||
|
||||
if (_cupsSetNegotiateAuthString(http, method, resource))
|
||||
{
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
http->status = HTTP_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
@@ -287,7 +280,7 @@ cupsDoAuthentication(
|
||||
{
|
||||
DEBUG_printf(("1cupsDoAuthentication: Unknown auth type: \"%s\"",
|
||||
www_auth));
|
||||
http->status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
http->status = HTTP_AUTHORIZATION_CANCELED;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
@@ -465,7 +458,7 @@ _cupsSetNegotiateAuthString(
|
||||
authsize = sizeof(http->_authstring);
|
||||
}
|
||||
|
||||
strlcpy(http->authstring, "Negotiate ", authsize);
|
||||
strcpy(http->authstring, "Negotiate ");
|
||||
httpEncode64_2(http->authstring + 10, authsize - 10, output_token.value,
|
||||
output_token.length);
|
||||
|
||||
@@ -888,5 +881,5 @@ cups_local_auth(http_t *http) /* I - HTTP connection to server */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: auth.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: auth.c 7720 2008-07-11 22:46:21Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: backchannel.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: backchannel.c 7616 2008-05-28 00:34:13Z mike $"
|
||||
*
|
||||
* Backchannel functions for CUPS.
|
||||
*
|
||||
@@ -195,5 +195,5 @@ cups_setup(fd_set *set, /* I - Set for select() */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: backchannel.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: backchannel.c 7616 2008-05-28 00:34:13Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: backend.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: backend.c 7810 2008-07-29 01:11:15Z mike $"
|
||||
*
|
||||
* Backend functions for CUPS.
|
||||
*
|
||||
@@ -150,5 +150,5 @@ quote_string(const char *s) /* I - String to write */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: backend.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: backend.c 7810 2008-07-29 01:11:15Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: backend.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: backend.h 7810 2008-07-29 01:11:15Z mike $"
|
||||
*
|
||||
* Backend definitions for CUPS.
|
||||
*
|
||||
@@ -74,5 +74,5 @@ extern void cupsBackendReport(const char *device_scheme,
|
||||
#endif /* !_CUPS_BACKEND_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: backend.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: backend.h 7810 2008-07-29 01:11:15Z mike $".
|
||||
*/
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: conflicts.c 3933 2012-10-01 03:01:10Z msweet $"
|
||||
* "$Id: conflicts.c 3794 2012-04-23 22:44:16Z msweet $"
|
||||
*
|
||||
* Option marking routines for CUPS.
|
||||
*
|
||||
@@ -930,7 +930,7 @@ ppd_load_constraints(ppd_file_t *ppd) /* I - PPD file */
|
||||
if (!_cups_strncasecmp(option, "Custom", 6) && !_cups_strcasecmp(choice, "True"))
|
||||
{
|
||||
_cups_strcpy(option, option + 6);
|
||||
strlcpy(choice, "Custom", sizeof(choice));
|
||||
strcpy(choice, "Custom");
|
||||
}
|
||||
|
||||
constptr->option = ppdFindOption(ppd, option);
|
||||
@@ -1210,5 +1210,5 @@ ppd_test_constraints(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: conflicts.c 3933 2012-10-01 03:01:10Z msweet $".
|
||||
* End of "$Id: conflicts.c 3794 2012-04-23 22:44:16Z msweet $".
|
||||
*/
|
||||
|
||||
+3
-16
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: cups-private.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: cups-private.h 9596 2011-03-11 18:26:36Z mike $"
|
||||
*
|
||||
* Private definitions for CUPS.
|
||||
*
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
# include "string-private.h"
|
||||
# include "debug-private.h"
|
||||
# include "array-private.h"
|
||||
# include "ipp-private.h"
|
||||
# include "http-private.h"
|
||||
# include "language-private.h"
|
||||
@@ -87,11 +86,6 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
|
||||
char resolved_uri[1024];
|
||||
/* Buffer for cupsBackendDeviceURI */
|
||||
|
||||
/* debug.c */
|
||||
# ifdef DEBUG
|
||||
int thread_id; /* Friendly thread ID */
|
||||
# endif /* DEBUG */
|
||||
|
||||
/* file.c */
|
||||
cups_file_t *stdio_files[3];/* stdin, stdout, stderr */
|
||||
|
||||
@@ -131,7 +125,7 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
|
||||
cups_array_t *leg_size_lut, /* Lookup table for legacy names */
|
||||
*ppd_size_lut, /* Lookup table for PPD names */
|
||||
*pwg_size_lut; /* Lookup table for PWG names */
|
||||
pwg_media_t pwg_media; /* PWG media data for custom size */
|
||||
_pwg_media_t pwg_media; /* PWG media data for custom size */
|
||||
char pwg_name[65]; /* PWG media name for custom size */
|
||||
|
||||
/* request.c */
|
||||
@@ -151,7 +145,6 @@ typedef struct _cups_globals_s /**** CUPS global state data ****/
|
||||
/* usersys.c */
|
||||
http_encryption_t encryption; /* Encryption setting */
|
||||
char user[65], /* User name */
|
||||
user_agent[256],/* User-Agent string */
|
||||
server[256], /* Server address */
|
||||
servername[256],/* Server hostname */
|
||||
password[128]; /* Password for default callback */
|
||||
@@ -207,7 +200,6 @@ typedef struct _cups_dconstres_s /* Constraint/resolver */
|
||||
struct _cups_dinfo_s /* Destination capability and status
|
||||
* information */
|
||||
{
|
||||
int version; /* IPP version */
|
||||
const char *uri; /* Printer URI */
|
||||
char *resource; /* Resource path */
|
||||
ipp_t *attrs; /* Printer attributes */
|
||||
@@ -219,11 +211,6 @@ struct _cups_dinfo_s /* Destination capability and status
|
||||
cups_array_t *media_db; /* Media database */
|
||||
_cups_media_db_t min_size, /* Minimum size */
|
||||
max_size; /* Maximum size */
|
||||
unsigned cached_flags; /* Flags used for cached media */
|
||||
cups_array_t *cached_db; /* Cache of media from last index/default */
|
||||
time_t ready_time; /* When xxx-ready attributes were last queried */
|
||||
ipp_t *ready_attrs; /* xxx-ready attributes */
|
||||
cups_array_t *ready_db; /* media[-col]-ready media database */
|
||||
};
|
||||
|
||||
|
||||
@@ -281,5 +268,5 @@ extern char *_cupsUserDefault(char *name, size_t namesize);
|
||||
#endif /* !_CUPS_CUPS_PRIVATE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: cups-private.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: cups-private.h 9596 2011-03-11 18:26:36Z mike $".
|
||||
*/
|
||||
|
||||
+19
-49
@@ -1,18 +1,18 @@
|
||||
/*
|
||||
* "$Id: cups.h 11551 2014-01-29 16:31:35Z msweet $"
|
||||
* "$Id: cups.h 8781 2009-08-28 17:34:54Z mike $"
|
||||
*
|
||||
* API definitions for CUPS.
|
||||
* API definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2014 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 1997-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/".
|
||||
* 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/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_CUPS_H_
|
||||
@@ -37,7 +37,6 @@ typedef off_t ssize_t; /* @private@ */
|
||||
# include "file.h"
|
||||
# include "ipp.h"
|
||||
# include "language.h"
|
||||
# include "pwg.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -53,10 +52,10 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define CUPS_VERSION 1.0702
|
||||
# define CUPS_VERSION 1.0603
|
||||
# define CUPS_VERSION_MAJOR 1
|
||||
# define CUPS_VERSION_MINOR 7
|
||||
# define CUPS_VERSION_PATCH 2
|
||||
# define CUPS_VERSION_MINOR 6
|
||||
# define CUPS_VERSION_PATCH 3
|
||||
|
||||
# define CUPS_BC_FD 3
|
||||
/* Back-channel file descriptor for
|
||||
@@ -354,13 +353,12 @@ extern ipp_t *cupsDoRequest(http_t *http, ipp_t *request,
|
||||
const char *resource);
|
||||
extern http_encryption_t cupsEncryption(void);
|
||||
extern void cupsFreeJobs(int num_jobs, cups_job_t *jobs);
|
||||
extern int cupsGetClasses(char ***classes) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
|
||||
extern int cupsGetClasses(char ***classes) _CUPS_DEPRECATED;
|
||||
extern const char *cupsGetDefault(void);
|
||||
extern int cupsGetJobs(cups_job_t **jobs, const char *name,
|
||||
int myjobs, int whichjobs);
|
||||
extern const char *cupsGetPPD(const char *name)
|
||||
_CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo instead.");
|
||||
extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
|
||||
extern const char *cupsGetPPD(const char *name);
|
||||
extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED;
|
||||
extern ipp_status_t cupsLastError(void);
|
||||
extern int cupsPrintFile(const char *name, const char *filename,
|
||||
const char *title, int num_options,
|
||||
@@ -368,7 +366,7 @@ extern int cupsPrintFile(const char *name, const char *filename,
|
||||
extern int cupsPrintFiles(const char *name, int num_files,
|
||||
const char **files, const char *title,
|
||||
int num_options, cups_option_t *options);
|
||||
extern char *cupsTempFile(char *filename, int len) _CUPS_DEPRECATED_MSG("Use cupsTempFd or cupsTempFile2 instead.");
|
||||
extern char *cupsTempFile(char *filename, int len) _CUPS_DEPRECATED;
|
||||
extern int cupsTempFd(char *filename, int len);
|
||||
|
||||
extern int cupsAddDest(const char *name, const char *instance,
|
||||
@@ -418,7 +416,7 @@ extern int cupsGetJobs2(http_t *http, cups_job_t **jobs,
|
||||
const char *name, int myjobs,
|
||||
int whichjobs) _CUPS_API_1_1_21;
|
||||
extern const char *cupsGetPPD2(http_t *http, const char *name)
|
||||
_CUPS_DEPRECATED_1_6_MSG("Use cupsCopyDestInfo instead.");
|
||||
_CUPS_API_1_1_21;
|
||||
extern int cupsPrintFile2(http_t *http, const char *name,
|
||||
const char *filename,
|
||||
const char *title, int num_options,
|
||||
@@ -592,34 +590,6 @@ extern http_status_t cupsStartDestDocument(http_t *http, cups_dest_t *dest,
|
||||
cups_option_t *options,
|
||||
int last_document) _CUPS_API_1_6;
|
||||
|
||||
/* New in CUPS 1.7 */
|
||||
extern ipp_attribute_t *cupsFindDestDefault(http_t *http, cups_dest_t *dest,
|
||||
cups_dinfo_t *dinfo,
|
||||
const char *option) _CUPS_API_1_7;
|
||||
extern ipp_attribute_t *cupsFindDestReady(http_t *http, cups_dest_t *dest,
|
||||
cups_dinfo_t *dinfo,
|
||||
const char *option) _CUPS_API_1_7;
|
||||
extern ipp_attribute_t *cupsFindDestSupported(http_t *http, cups_dest_t *dest,
|
||||
cups_dinfo_t *dinfo,
|
||||
const char *option)
|
||||
_CUPS_API_1_7;
|
||||
extern int cupsGetDestMediaByIndex(http_t *http, cups_dest_t *dest,
|
||||
cups_dinfo_t *dinfo, int n,
|
||||
unsigned flags,
|
||||
cups_size_t *size)
|
||||
_CUPS_API_1_7;
|
||||
extern int cupsGetDestMediaCount(http_t *http, cups_dest_t *dest,
|
||||
cups_dinfo_t *dinfo,
|
||||
unsigned flags) _CUPS_API_1_7;
|
||||
extern int cupsGetDestMediaDefault(http_t *http, cups_dest_t *dest,
|
||||
cups_dinfo_t *dinfo,
|
||||
unsigned flags,
|
||||
cups_size_t *size)
|
||||
_CUPS_API_1_7;
|
||||
extern void cupsSetUserAgent(const char *user_agent) _CUPS_API_1_7;
|
||||
extern const char *cupsUserAgent(void) _CUPS_API_1_7;
|
||||
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
@@ -627,5 +597,5 @@ extern const char *cupsUserAgent(void) _CUPS_API_1_7;
|
||||
#endif /* !_CUPS_CUPS_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: cups.h 11551 2014-01-29 16:31:35Z msweet $".
|
||||
* End of "$Id: cups.h 8781 2009-08-28 17:34:54Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: custom.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: custom.c 6649 2007-07-11 21:46:42Z mike $"
|
||||
*
|
||||
* PPD custom option routines for CUPS.
|
||||
*
|
||||
@@ -118,5 +118,5 @@ ppdNextCustomParam(ppd_coption_t *opt) /* I - Custom option */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: custom.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: custom.c 6649 2007-07-11 21:46:42Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: debug-private.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id$"
|
||||
*
|
||||
* Private debugging macros for CUPS.
|
||||
*
|
||||
@@ -113,5 +113,5 @@ extern int _cups_gettimeofday(struct timeval *tv, void *tz);
|
||||
#endif /* !_CUPS_DEBUG_PRIVATE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: debug-private.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+44
-40
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: debug.c 4027 2012-11-16 01:00:05Z msweet $"
|
||||
* "$Id: debug.c 3643 2012-02-13 16:35:48Z msweet $"
|
||||
*
|
||||
* Debugging functions for CUPS.
|
||||
*
|
||||
@@ -68,24 +68,8 @@ int _cups_debug_level = 1;
|
||||
static regex_t *debug_filter = NULL;
|
||||
/* Filter expression for messages */
|
||||
static int debug_init = 0; /* Did we initialize debugging? */
|
||||
static _cups_mutex_t debug_init_mutex = _CUPS_MUTEX_INITIALIZER,
|
||||
static _cups_mutex_t debug_mutex = _CUPS_MUTEX_INITIALIZER;
|
||||
/* Mutex to control initialization */
|
||||
debug_log_mutex = _CUPS_MUTEX_INITIALIZER;
|
||||
/* Mutex to serialize log entries */
|
||||
|
||||
|
||||
/*
|
||||
* 'debug_thread_id()' - Return an integer representing the current thread.
|
||||
*/
|
||||
|
||||
static int /* O - Local thread ID */
|
||||
debug_thread_id(void)
|
||||
{
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
|
||||
|
||||
|
||||
return (cg->thread_id);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
@@ -245,8 +229,16 @@ debug_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr += strlen(bufptr);
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -275,8 +267,16 @@ debug_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr += strlen(bufptr);
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -290,8 +290,16 @@ debug_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr += strlen(bufptr);
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -449,9 +457,9 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
|
||||
{
|
||||
int result; /* Filter result */
|
||||
|
||||
_cupsMutexLock(&debug_init_mutex);
|
||||
_cupsMutexLock(&debug_mutex);
|
||||
result = regexec(debug_filter, format, 0, NULL, 0);
|
||||
_cupsMutexUnlock(&debug_init_mutex);
|
||||
_cupsMutexUnlock(&debug_mutex);
|
||||
|
||||
if (result)
|
||||
return;
|
||||
@@ -462,13 +470,13 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
|
||||
*/
|
||||
|
||||
gettimeofday(&curtime, NULL);
|
||||
snprintf(buffer, sizeof(buffer), "T%03d %02d:%02d:%02d.%03d ",
|
||||
debug_thread_id(), (int)((curtime.tv_sec / 3600) % 24),
|
||||
snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d.%03d ",
|
||||
(int)((curtime.tv_sec / 3600) % 24),
|
||||
(int)((curtime.tv_sec / 60) % 60),
|
||||
(int)(curtime.tv_sec % 60), (int)(curtime.tv_usec / 1000));
|
||||
|
||||
va_start(ap, format);
|
||||
bytes = debug_vsnprintf(buffer + 19, sizeof(buffer) - 20, format, ap) + 19;
|
||||
bytes = debug_vsnprintf(buffer + 13, sizeof(buffer) - 14, format, ap) + 13;
|
||||
va_end(ap);
|
||||
|
||||
if (bytes >= (sizeof(buffer) - 1))
|
||||
@@ -486,9 +494,7 @@ _cups_debug_printf(const char *format, /* I - Printf-style format string */
|
||||
* Write it out...
|
||||
*/
|
||||
|
||||
_cupsMutexLock(&debug_log_mutex);
|
||||
write(_cups_debug_fd, buffer, bytes);
|
||||
_cupsMutexUnlock(&debug_log_mutex);
|
||||
}
|
||||
|
||||
|
||||
@@ -532,9 +538,9 @@ _cups_debug_puts(const char *s) /* I - String to output */
|
||||
{
|
||||
int result; /* Filter result */
|
||||
|
||||
_cupsMutexLock(&debug_init_mutex);
|
||||
_cupsMutexLock(&debug_mutex);
|
||||
result = regexec(debug_filter, s, 0, NULL, 0);
|
||||
_cupsMutexUnlock(&debug_init_mutex);
|
||||
_cupsMutexUnlock(&debug_mutex);
|
||||
|
||||
if (result)
|
||||
return;
|
||||
@@ -545,8 +551,8 @@ _cups_debug_puts(const char *s) /* I - String to output */
|
||||
*/
|
||||
|
||||
gettimeofday(&curtime, NULL);
|
||||
bytes = snprintf(buffer, sizeof(buffer), "T%03d %02d:%02d:%02d.%03d %s",
|
||||
debug_thread_id(), (int)((curtime.tv_sec / 3600) % 24),
|
||||
bytes = snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d.%03d %s",
|
||||
(int)((curtime.tv_sec / 3600) % 24),
|
||||
(int)((curtime.tv_sec / 60) % 60),
|
||||
(int)(curtime.tv_sec % 60), (int)(curtime.tv_usec / 1000),
|
||||
s);
|
||||
@@ -566,9 +572,7 @@ _cups_debug_puts(const char *s) /* I - String to output */
|
||||
* Write it out...
|
||||
*/
|
||||
|
||||
_cupsMutexLock(&debug_log_mutex);
|
||||
write(_cups_debug_fd, buffer, bytes);
|
||||
_cupsMutexUnlock(&debug_log_mutex);
|
||||
}
|
||||
|
||||
|
||||
@@ -582,7 +586,7 @@ _cups_debug_set(const char *logfile, /* I - Log file or NULL */
|
||||
const char *filter, /* I - Filter string or NULL */
|
||||
int force) /* I - Force initialization */
|
||||
{
|
||||
_cupsMutexLock(&debug_init_mutex);
|
||||
_cupsMutexLock(&debug_mutex);
|
||||
|
||||
if (!debug_init || force)
|
||||
{
|
||||
@@ -644,11 +648,11 @@ _cups_debug_set(const char *logfile, /* I - Log file or NULL */
|
||||
debug_init = 1;
|
||||
}
|
||||
|
||||
_cupsMutexUnlock(&debug_init_mutex);
|
||||
_cupsMutexUnlock(&debug_mutex);
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: debug.c 4027 2012-11-16 01:00:05Z msweet $".
|
||||
* End of "$Id: debug.c 3643 2012-02-13 16:35:48Z msweet $".
|
||||
*/
|
||||
|
||||
+29
-37
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: dest-job.c 4274 2013-04-09 20:10:23Z msweet $"
|
||||
* "$Id: dest-job.c 3833 2012-05-23 22:51:18Z msweet $"
|
||||
*
|
||||
* Destination job support for CUPS.
|
||||
*
|
||||
* Copyright 2012-2013 by Apple Inc.
|
||||
* Copyright 2012 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -15,7 +15,7 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* cupsCancelDestJob() - Cancel a job on a destination.
|
||||
* cupsCancelDestJob() - Cancel a job on a destination.
|
||||
* cupsCloseDestJob() - Close a job and start printing.
|
||||
* cupsCreateDestJob() - Create a job on a destination.
|
||||
* cupsFinishDestDocument() - Finish the current document.
|
||||
@@ -34,7 +34,7 @@
|
||||
*
|
||||
* The "job_id" is the number returned by cupsCreateDestJob.
|
||||
*
|
||||
* Returns IPP_STATUS_OK on success and IPP_NOT_AUTHORIZED or IPP_FORBIDDEN on
|
||||
* Returns IPP_OK on success and IPP_NOT_AUTHORIZED or IPP_FORBIDDEN on
|
||||
* failure.
|
||||
*
|
||||
* @since CUPS 1.6/OS X 10.8@
|
||||
@@ -45,7 +45,7 @@ cupsCancelDestJob(http_t *http, /* I - Connection to destination */
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
int job_id) /* I - Job ID */
|
||||
{
|
||||
return (IPP_STATUS_ERROR_NOT_FOUND);
|
||||
return (IPP_NOT_FOUND);
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ cupsCancelDestJob(http_t *http, /* I - Connection to destination */
|
||||
* 'cupsCloseDestJob()' - Close a job and start printing.
|
||||
*
|
||||
* Use when the last call to cupsStartDocument passed 0 for "last_document".
|
||||
* "job_id" is the job ID returned by cupsCreateDestJob. Returns @code IPP_STATUS_OK@
|
||||
* "job_id" is the job ID returned by cupsCreateDestJob. Returns @code IPP_OK@
|
||||
* on success.
|
||||
*
|
||||
* @since CUPS 1.6/OS X 10.8@
|
||||
@@ -81,9 +81,9 @@ cupsCloseDestJob(
|
||||
|
||||
if (!http || !dest || !info || job_id <= 0)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
DEBUG_puts("1cupsCloseDestJob: Bad arguments.");
|
||||
return (IPP_STATUS_ERROR_INTERNAL);
|
||||
return (IPP_INTERNAL_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -94,33 +94,31 @@ cupsCloseDestJob(
|
||||
IPP_TAG_ENUM)) != NULL)
|
||||
{
|
||||
for (i = 0; i < attr->num_values; i ++)
|
||||
if (attr->values[i].integer == IPP_OP_CLOSE_JOB)
|
||||
if (attr->values[i].integer == IPP_CLOSE_JOB)
|
||||
{
|
||||
request = ippNewRequest(IPP_OP_CLOSE_JOB);
|
||||
request = ippNewRequest(IPP_CLOSE_JOB);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!request)
|
||||
request = ippNewRequest(IPP_OP_SEND_DOCUMENT);
|
||||
request = ippNewRequest(IPP_SEND_DOCUMENT);
|
||||
|
||||
if (!request)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOMEM), 0);
|
||||
DEBUG_puts("1cupsCloseDestJob: Unable to create Close-Job/Send-Document "
|
||||
"request.");
|
||||
return (IPP_STATUS_ERROR_INTERNAL);
|
||||
return (IPP_INTERNAL_ERROR);
|
||||
}
|
||||
|
||||
ippSetVersion(request, info->version / 10, info->version % 10);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, info->uri);
|
||||
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id",
|
||||
job_id);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, cupsUser());
|
||||
if (ippGetOperation(request) == IPP_OP_SEND_DOCUMENT)
|
||||
if (ippGetOperation(request) == IPP_SEND_DOCUMENT)
|
||||
ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", 1);
|
||||
|
||||
/*
|
||||
@@ -139,7 +137,7 @@ cupsCloseDestJob(
|
||||
/*
|
||||
* 'cupsCreateDestJob()' - Create a job on a destination.
|
||||
*
|
||||
* Returns @code IPP_STATUS_OK@ or @code IPP_STATUS_OK_SUBST@ on success, saving the job ID
|
||||
* Returns @code IPP_OK@ or @code IPP_OK_SUBST@ on success, saving the job ID
|
||||
* in the variable pointed to by "job_id".
|
||||
*
|
||||
* @since CUPS 1.6/OS X 10.8@
|
||||
@@ -175,24 +173,22 @@ cupsCreateDestJob(
|
||||
|
||||
if (!http || !dest || !info || !job_id)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
DEBUG_puts("1cupsCreateDestJob: Bad arguments.");
|
||||
return (IPP_STATUS_ERROR_INTERNAL);
|
||||
return (IPP_INTERNAL_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
* Build a Create-Job request...
|
||||
*/
|
||||
|
||||
if ((request = ippNewRequest(IPP_OP_CREATE_JOB)) == NULL)
|
||||
if ((request = ippNewRequest(IPP_CREATE_JOB)) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOMEM), 0);
|
||||
DEBUG_puts("1cupsCreateDestJob: Unable to create Create-Job request.");
|
||||
return (IPP_STATUS_ERROR_INTERNAL);
|
||||
return (IPP_INTERNAL_ERROR);
|
||||
}
|
||||
|
||||
ippSetVersion(request, info->version / 10, info->version % 10);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, info->uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
@@ -201,7 +197,6 @@ cupsCreateDestJob(
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name", NULL,
|
||||
title);
|
||||
|
||||
cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
|
||||
cupsEncodeOptions2(request, num_options, options, IPP_TAG_JOB);
|
||||
cupsEncodeOptions2(request, num_options, options, IPP_TAG_SUBSCRIPTION);
|
||||
|
||||
@@ -233,7 +228,7 @@ cupsCreateDestJob(
|
||||
/*
|
||||
* 'cupsFinishDestDocument()' - Finish the current document.
|
||||
*
|
||||
* Returns @code IPP_STATUS_OK@ or @code IPP_STATUS_OK_SUBST@ on success.
|
||||
* Returns @code IPP_OK@ or @code IPP_OK_SUBST@ on success.
|
||||
*
|
||||
* @since CUPS 1.6/OS X 10.8@
|
||||
*/
|
||||
@@ -254,9 +249,9 @@ cupsFinishDestDocument(
|
||||
|
||||
if (!http || !dest || !info)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
DEBUG_puts("1cupsFinishDestDocument: Bad arguments.");
|
||||
return (IPP_STATUS_ERROR_INTERNAL);
|
||||
return (IPP_INTERNAL_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -314,25 +309,23 @@ cupsStartDestDocument(
|
||||
|
||||
if (!http || !dest || !info || job_id <= 0)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
DEBUG_puts("1cupsStartDestDocument: Bad arguments.");
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a Send-Document request...
|
||||
*/
|
||||
|
||||
if ((request = ippNewRequest(IPP_OP_SEND_DOCUMENT)) == NULL)
|
||||
if ((request = ippNewRequest(IPP_SEND_DOCUMENT)) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOMEM), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOMEM), 0);
|
||||
DEBUG_puts("1cupsStartDestDocument: Unable to create Send-Document "
|
||||
"request.");
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
ippSetVersion(request, info->version / 10, info->version % 10);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
|
||||
NULL, info->uri);
|
||||
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", job_id);
|
||||
@@ -346,7 +339,6 @@ cupsStartDestDocument(
|
||||
"document-format", NULL, format);
|
||||
ippAddBoolean(request, IPP_TAG_OPERATION, "last-document", last_document);
|
||||
|
||||
cupsEncodeOptions2(request, num_options, options, IPP_TAG_OPERATION);
|
||||
cupsEncodeOptions2(request, num_options, options, IPP_TAG_DOCUMENT);
|
||||
|
||||
/*
|
||||
@@ -362,5 +354,5 @@ cupsStartDestDocument(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: dest-job.c 4274 2013-04-09 20:10:23Z msweet $".
|
||||
* End of "$Id: dest-job.c 3833 2012-05-23 22:51:18Z msweet $".
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: dest-localization.c 4216 2013-03-11 13:57:36Z msweet $"
|
||||
* "$Id: dest-localization.c 3833 2012-05-23 22:51:18Z msweet $"
|
||||
*
|
||||
* Destination localization support for CUPS.
|
||||
*
|
||||
* Copyright 2012-2013 by Apple Inc.
|
||||
* Copyright 2012 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -178,7 +178,7 @@ cups_create_localizations(
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, attr->values[0].string.text,
|
||||
scheme, sizeof(scheme), userpass, sizeof(userpass),
|
||||
hostname, sizeof(hostname), &port, resource,
|
||||
sizeof(resource)) < HTTP_URI_STATUS_OK)
|
||||
sizeof(resource)) < HTTP_URI_OK)
|
||||
{
|
||||
DEBUG_printf(("4cups_create_localizations: Bad printer-strings-uri value "
|
||||
"\"%s\".", attr->values[0].string.text));
|
||||
@@ -188,7 +188,7 @@ cups_create_localizations(
|
||||
httpGetHostname(http, http_hostname, sizeof(http_hostname));
|
||||
|
||||
if (!_cups_strcasecmp(http_hostname, hostname) &&
|
||||
port == httpAddrPort(http->hostaddr))
|
||||
port == _httpAddrPort(http->hostaddr))
|
||||
{
|
||||
/*
|
||||
* Use the same connection...
|
||||
@@ -203,12 +203,11 @@ cups_create_localizations(
|
||||
*/
|
||||
|
||||
if (!strcmp(scheme, "https"))
|
||||
encryption = HTTP_ENCRYPTION_ALWAYS;
|
||||
encryption = HTTP_ENCRYPT_ALWAYS;
|
||||
else
|
||||
encryption = HTTP_ENCRYPTION_IF_REQUESTED;
|
||||
encryption = HTTP_ENCRYPT_IF_REQUESTED;
|
||||
|
||||
if ((http2 = httpConnect2(hostname, port, NULL, AF_UNSPEC, encryption, 1,
|
||||
30000, NULL)) == NULL)
|
||||
if ((http2 = httpConnectEncrypt(hostname, port, encryption)) == NULL)
|
||||
{
|
||||
DEBUG_printf(("4cups_create_localizations: Unable to connect to "
|
||||
"%s:%d: %s", hostname, port, cupsLastErrorString()));
|
||||
@@ -234,7 +233,7 @@ cups_create_localizations(
|
||||
DEBUG_printf(("4cups_create_localizations: GET %s = %s", resource,
|
||||
httpStatus(status)));
|
||||
|
||||
if (status == HTTP_STATUS_OK)
|
||||
if (status == HTTP_OK)
|
||||
{
|
||||
/*
|
||||
* Got the file, read it...
|
||||
@@ -383,5 +382,5 @@ cups_scan_strings(char *buffer) /* I - Start of string */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: dest-localization.c 4216 2013-03-11 13:57:36Z msweet $".
|
||||
* End of "$Id: dest-localization.c 3833 2012-05-23 22:51:18Z msweet $".
|
||||
*/
|
||||
|
||||
+72
-580
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: dest-options.c 11085 2013-07-03 13:53:05Z msweet $"
|
||||
* "$Id: dest-options.c 4185 2013-02-20 02:19:13Z msweet $"
|
||||
*
|
||||
* Destination option/media support for CUPS.
|
||||
*
|
||||
* Copyright 2012-2013 by Apple Inc.
|
||||
* Copyright 2012 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -21,26 +21,14 @@
|
||||
* option/value pair.
|
||||
* cupsCopyDestInfo() - Get the supported values/capabilities for the
|
||||
* destination.
|
||||
* cupsFindDestDefault() - Find the default value(s) for the given
|
||||
* option.
|
||||
* cupsFindDestReady() - Find the default value(s) for the given
|
||||
* option.
|
||||
* cupsFindDestSupported() - Find the default value(s) for the given
|
||||
* option.
|
||||
* cupsFreeDestInfo() - Free destination information obtained using
|
||||
* @link cupsCopyDestInfo@.
|
||||
* cupsGetDestMediaByIndex() - Get a media name, dimension, and margins for a
|
||||
* specific size.
|
||||
* cupsGetDestMediaByName() - Get media names, dimensions, and margins.
|
||||
* cupsGetDestMediaBySize() - Get media names, dimensions, and margins.
|
||||
* cupsGetDestMediaCount() - Get the number of sizes supported by a
|
||||
* destination.
|
||||
* cupsGetDestMediaDefault() - Get the default size for a destination.
|
||||
* cups_add_dconstres() - Add a constraint or resolver to an array.
|
||||
* cups_compare_dconstres() - Compare to resolver entries.
|
||||
* cups_compare_media_db() - Compare two media entries.
|
||||
* cups_copy_media_db() - Copy a media entry.
|
||||
* cups_create_cached() - Create the media selection cache.
|
||||
* cups_create_constraints() - Create the constraints and resolvers arrays.
|
||||
* cups_create_defaults() - Create the -default option array.
|
||||
* cups_create_media_db() - Create the media database.
|
||||
@@ -49,7 +37,6 @@
|
||||
* cups_is_close_media_db() - Compare two media entries to see if they are
|
||||
* close to the same size.
|
||||
* cups_test_constraints() - Test constraints.
|
||||
* cups_update_ready() - Update xxx-ready attributes for the printer.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -59,13 +46,6 @@
|
||||
#include "cups-private.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local constants...
|
||||
*/
|
||||
|
||||
#define _CUPS_MEDIA_READY_TTL 30 /* Life of xxx-ready values */
|
||||
|
||||
|
||||
/*
|
||||
* Local functions...
|
||||
*/
|
||||
@@ -76,15 +56,12 @@ static int cups_compare_dconstres(_cups_dconstres_t *a,
|
||||
static int cups_compare_media_db(_cups_media_db_t *a,
|
||||
_cups_media_db_t *b);
|
||||
static _cups_media_db_t *cups_copy_media_db(_cups_media_db_t *mdb);
|
||||
static void cups_create_cached(http_t *http, cups_dinfo_t *dinfo,
|
||||
unsigned flags);
|
||||
static void cups_create_constraints(cups_dinfo_t *dinfo);
|
||||
static void cups_create_defaults(cups_dinfo_t *dinfo);
|
||||
static void cups_create_media_db(cups_dinfo_t *dinfo,
|
||||
unsigned flags);
|
||||
static void cups_create_media_db(cups_dinfo_t *dinfo);
|
||||
static void cups_free_media_db(_cups_media_db_t *mdb);
|
||||
static int cups_get_media_db(http_t *http, cups_dinfo_t *dinfo,
|
||||
pwg_media_t *pwg, unsigned flags,
|
||||
static int cups_get_media_db(cups_dinfo_t *dinfo,
|
||||
_pwg_media_t *pwg, unsigned flags,
|
||||
cups_size_t *size);
|
||||
static int cups_is_close_media_db(_cups_media_db_t *a,
|
||||
_cups_media_db_t *b);
|
||||
@@ -95,7 +72,6 @@ static cups_array_t *cups_test_constraints(cups_dinfo_t *dinfo,
|
||||
cups_option_t *options,
|
||||
int *num_conflicts,
|
||||
cups_option_t **conflicts);
|
||||
static void cups_update_ready(http_t *http, cups_dinfo_t *dinfo);
|
||||
|
||||
|
||||
/*
|
||||
@@ -157,7 +133,7 @@ cupsCheckDestSupported(
|
||||
* Check range of custom media sizes...
|
||||
*/
|
||||
|
||||
pwg_media_t *pwg; /* Current PWG media size info */
|
||||
_pwg_media_t *pwg; /* Current PWG media size info */
|
||||
int min_width, /* Minimum width */
|
||||
min_length, /* Minimum length */
|
||||
max_width, /* Maximum width */
|
||||
@@ -175,13 +151,13 @@ cupsCheckDestSupported(
|
||||
i --, attrval ++)
|
||||
{
|
||||
if (!strncmp(attrval->string.text, "custom_min_", 11) &&
|
||||
(pwg = pwgMediaForPWG(attrval->string.text)) != NULL)
|
||||
(pwg = _pwgMediaForPWG(attrval->string.text)) != NULL)
|
||||
{
|
||||
min_width = pwg->width;
|
||||
min_length = pwg->length;
|
||||
}
|
||||
else if (!strncmp(attrval->string.text, "custom_max_", 11) &&
|
||||
(pwg = pwgMediaForPWG(attrval->string.text)) != NULL)
|
||||
(pwg = _pwgMediaForPWG(attrval->string.text)) != NULL)
|
||||
{
|
||||
max_width = pwg->width;
|
||||
max_length = pwg->length;
|
||||
@@ -193,7 +169,7 @@ cupsCheckDestSupported(
|
||||
*/
|
||||
|
||||
if (min_width < INT_MAX && max_width > 0 &&
|
||||
(pwg = pwgMediaForPWG(value)) != NULL &&
|
||||
(pwg = _pwgMediaForPWG(value)) != NULL &&
|
||||
pwg->width >= min_width && pwg->width <= max_width &&
|
||||
pwg->length >= min_length && pwg->length <= max_length)
|
||||
return (1);
|
||||
@@ -644,11 +620,11 @@ cupsCopyDestInfo(
|
||||
* Send a Get-Printer-Attributes request...
|
||||
*/
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
|
||||
uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
|
||||
"requesting-user-name", NULL, cupsUser());
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, cupsUser());
|
||||
ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD,
|
||||
"requested-attributes",
|
||||
(int)(sizeof(requested_attrs) / sizeof(requested_attrs[0])),
|
||||
@@ -656,7 +632,7 @@ cupsCopyDestInfo(
|
||||
response = cupsDoRequest(http, request, resource);
|
||||
status = cupsLastError();
|
||||
|
||||
if (status > IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED)
|
||||
if (status > IPP_OK_SUBST)
|
||||
{
|
||||
DEBUG_printf(("cupsCopyDestSupported: Get-Printer-Attributes for '%s' "
|
||||
"returned %s (%s)", dest->name, ippErrorString(status),
|
||||
@@ -665,9 +641,9 @@ cupsCopyDestInfo(
|
||||
ippDelete(response);
|
||||
response = NULL;
|
||||
|
||||
if (status == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED && version > 11)
|
||||
if (status == IPP_VERSION_NOT_SUPPORTED && version > 11)
|
||||
version = 11;
|
||||
else if (status == IPP_STATUS_ERROR_BUSY)
|
||||
else if (status == IPP_PRINTER_BUSY)
|
||||
{
|
||||
sleep(delay);
|
||||
|
||||
@@ -690,12 +666,11 @@ cupsCopyDestInfo(
|
||||
|
||||
if ((dinfo = calloc(1, sizeof(cups_dinfo_t))) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
ippDelete(response);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
dinfo->version = version;
|
||||
dinfo->uri = uri;
|
||||
dinfo->resource = _cupsStrAlloc(resource);
|
||||
dinfo->attrs = response;
|
||||
@@ -704,129 +679,6 @@ cupsCopyDestInfo(
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsFindDestDefault()' - Find the default value(s) for the given option.
|
||||
*
|
||||
* The returned value is an IPP attribute. Use the @code ippGetBoolean@,
|
||||
* @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@,
|
||||
* @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@,
|
||||
* @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@
|
||||
* functions to inspect the default value(s) as needed.
|
||||
*
|
||||
* @since CUPS 1.7/OS X 10.9@
|
||||
*/
|
||||
|
||||
ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */
|
||||
cupsFindDestDefault(
|
||||
http_t *http, /* I - Connection to destination */
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
const char *option) /* I - Option/attribute name */
|
||||
{
|
||||
char name[IPP_MAX_NAME]; /* Attribute name */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!http || !dest || !dinfo || !option)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find and return the attribute...
|
||||
*/
|
||||
|
||||
snprintf(name, sizeof(name), "%s-default", option);
|
||||
return (ippFindAttribute(dinfo->attrs, name, IPP_TAG_ZERO));
|
||||
}
|
||||
|
||||
/*
|
||||
* 'cupsFindDestReady()' - Find the default value(s) for the given option.
|
||||
*
|
||||
* The returned value is an IPP attribute. Use the @code ippGetBoolean@,
|
||||
* @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@,
|
||||
* @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@,
|
||||
* @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@
|
||||
* functions to inspect the default value(s) as needed.
|
||||
*
|
||||
* @since CUPS 1.7/OS X 10.9@
|
||||
*/
|
||||
|
||||
ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */
|
||||
cupsFindDestReady(
|
||||
http_t *http, /* I - Connection to destination */
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
const char *option) /* I - Option/attribute name */
|
||||
{
|
||||
char name[IPP_MAX_NAME]; /* Attribute name */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!http || !dest || !dinfo || !option)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find and return the attribute...
|
||||
*/
|
||||
|
||||
cups_update_ready(http, dinfo);
|
||||
|
||||
snprintf(name, sizeof(name), "%s-ready", option);
|
||||
return (ippFindAttribute(dinfo->ready_attrs, name, IPP_TAG_ZERO));
|
||||
}
|
||||
|
||||
/*
|
||||
* 'cupsFindDestSupported()' - Find the default value(s) for the given option.
|
||||
*
|
||||
* The returned value is an IPP attribute. Use the @code ippGetBoolean@,
|
||||
* @code ippGetCollection@, @code ippGetCount@, @code ippGetDate@,
|
||||
* @code ippGetInteger@, @code ippGetOctetString@, @code ippGetRange@,
|
||||
* @code ippGetResolution@, @code ippGetString@, and @code ippGetValueTag@
|
||||
* functions to inspect the default value(s) as needed.
|
||||
*
|
||||
* @since CUPS 1.7/OS X 10.9@
|
||||
*/
|
||||
|
||||
ipp_attribute_t * /* O - Default attribute or @code NULL@ for none */
|
||||
cupsFindDestSupported(
|
||||
http_t *http, /* I - Connection to destination */
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
const char *option) /* I - Option/attribute name */
|
||||
{
|
||||
char name[IPP_MAX_NAME]; /* Attribute name */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!http || !dest || !dinfo || !option)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find and return the attribute...
|
||||
*/
|
||||
|
||||
snprintf(name, sizeof(name), "%s-supported", option);
|
||||
return (ippFindAttribute(dinfo->attrs, name, IPP_TAG_ZERO));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsFreeDestInfo()' - Free destination information obtained using
|
||||
* @link cupsCopyDestInfo@.
|
||||
@@ -855,79 +707,12 @@ cupsFreeDestInfo(cups_dinfo_t *dinfo) /* I - Destination information */
|
||||
|
||||
cupsArrayDelete(dinfo->media_db);
|
||||
|
||||
cupsArrayDelete(dinfo->cached_db);
|
||||
|
||||
ippDelete(dinfo->ready_attrs);
|
||||
cupsArrayDelete(dinfo->ready_db);
|
||||
|
||||
ippDelete(dinfo->attrs);
|
||||
|
||||
free(dinfo);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetDestMediaByIndex()' - Get a media name, dimension, and margins for a
|
||||
* specific size.
|
||||
*
|
||||
* The @code flags@ parameter determines which set of media are indexed. For
|
||||
* example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will get the Nth
|
||||
* borderless size supported by the printer.
|
||||
*
|
||||
* @since CUPS 1.7/OS X 10.9@
|
||||
*/
|
||||
|
||||
int /* O - 1 on success, 0 on failure */
|
||||
cupsGetDestMediaByIndex(
|
||||
http_t *http, /* I - Connection to destination */
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
int n, /* I - Media size number (0-based) */
|
||||
unsigned flags, /* I - Media flags */
|
||||
cups_size_t *size) /* O - Media size information */
|
||||
{
|
||||
cups_size_t *nsize; /* Size for N */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (size)
|
||||
memset(size, 0, sizeof(cups_size_t));
|
||||
|
||||
if (!http || !dest || !dinfo || n < 0 || !size)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Load media list as needed...
|
||||
*/
|
||||
|
||||
if (flags & CUPS_MEDIA_FLAGS_READY)
|
||||
cups_update_ready(http, dinfo);
|
||||
|
||||
if (!dinfo->cached_db || dinfo->cached_flags != flags)
|
||||
cups_create_cached(http, dinfo, flags);
|
||||
|
||||
/*
|
||||
* Copy the size over and return...
|
||||
*/
|
||||
|
||||
if ((nsize = (cups_size_t *)cupsArrayIndex(dinfo->cached_db, n)) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
memcpy(size, nsize, sizeof(cups_size_t));
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetDestMediaByName()' - Get media names, dimensions, and margins.
|
||||
*
|
||||
@@ -957,7 +742,7 @@ cupsGetDestMediaByName(
|
||||
unsigned flags, /* I - Media matching flags */
|
||||
cups_size_t *size) /* O - Media size information */
|
||||
{
|
||||
pwg_media_t *pwg; /* PWG media info */
|
||||
_pwg_media_t *pwg; /* PWG media info */
|
||||
|
||||
|
||||
/*
|
||||
@@ -969,7 +754,7 @@ cupsGetDestMediaByName(
|
||||
|
||||
if (!http || !dest || !dinfo || !media || !size)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -977,11 +762,11 @@ cupsGetDestMediaByName(
|
||||
* Lookup the media size name...
|
||||
*/
|
||||
|
||||
if ((pwg = pwgMediaForPWG(media)) == NULL)
|
||||
if ((pwg = pwgMediaForLegacy(media)) == NULL)
|
||||
if ((pwg = _pwgMediaForPWG(media)) == NULL)
|
||||
if ((pwg = _pwgMediaForLegacy(media)) == NULL)
|
||||
{
|
||||
DEBUG_printf(("1cupsGetDestMediaByName: Unknown size '%s'.", media));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unknown media size name."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Unknown media size name."), 1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -989,7 +774,7 @@ cupsGetDestMediaByName(
|
||||
* Lookup the size...
|
||||
*/
|
||||
|
||||
return (cups_get_media_db(http, dinfo, pwg, flags, size));
|
||||
return (cups_get_media_db(dinfo, pwg, flags, size));
|
||||
}
|
||||
|
||||
|
||||
@@ -1025,7 +810,7 @@ cupsGetDestMediaBySize(
|
||||
unsigned flags, /* I - Media matching flags */
|
||||
cups_size_t *size) /* O - Media size information */
|
||||
{
|
||||
pwg_media_t *pwg; /* PWG media info */
|
||||
_pwg_media_t *pwg; /* PWG media info */
|
||||
|
||||
|
||||
/*
|
||||
@@ -1037,7 +822,7 @@ cupsGetDestMediaBySize(
|
||||
|
||||
if (!http || !dest || !dinfo || width <= 0 || length <= 0 || !size)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -1045,11 +830,11 @@ cupsGetDestMediaBySize(
|
||||
* Lookup the media size name...
|
||||
*/
|
||||
|
||||
if ((pwg = pwgMediaForSize(width, length)) == NULL)
|
||||
if ((pwg = _pwgMediaForSize(width, length)) == NULL)
|
||||
{
|
||||
DEBUG_printf(("1cupsGetDestMediaBySize: Invalid size %dx%d.", width,
|
||||
length));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid media size."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Invalid media size."), 1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -1057,116 +842,7 @@ cupsGetDestMediaBySize(
|
||||
* Lookup the size...
|
||||
*/
|
||||
|
||||
return (cups_get_media_db(http, dinfo, pwg, flags, size));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetDestMediaCount()' - Get the number of sizes supported by a
|
||||
* destination.
|
||||
*
|
||||
* The @code flags@ parameter determines the set of media sizes that are
|
||||
* counted. For example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will return
|
||||
* the number of borderless sizes.
|
||||
*
|
||||
* @since CUPS 1.7/OS X 10.9@
|
||||
*/
|
||||
|
||||
int /* O - Number of sizes */
|
||||
cupsGetDestMediaCount(
|
||||
http_t *http, /* I - Connection to destination */
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
unsigned flags) /* I - Media flags */
|
||||
{
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!http || !dest || !dinfo)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Load media list as needed...
|
||||
*/
|
||||
|
||||
if (flags & CUPS_MEDIA_FLAGS_READY)
|
||||
cups_update_ready(http, dinfo);
|
||||
|
||||
if (!dinfo->cached_db || dinfo->cached_flags != flags)
|
||||
cups_create_cached(http, dinfo, flags);
|
||||
|
||||
return (cupsArrayCount(dinfo->cached_db));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cupsGetDestMediaDefault()' - Get the default size for a destination.
|
||||
*
|
||||
* The @code flags@ parameter determines which default size is returned. For
|
||||
* example, passing @code CUPS_MEDIA_FLAGS_BORDERLESS@ will return the default
|
||||
* borderless size, typically US Letter or A4, but sometimes 4x6 photo media.
|
||||
*
|
||||
* @since CUPS 1.7/OS X 10.9@
|
||||
*/
|
||||
|
||||
int /* O - 1 on success, 0 on failure */
|
||||
cupsGetDestMediaDefault(
|
||||
http_t *http, /* I - Connection to destination */
|
||||
cups_dest_t *dest, /* I - Destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
unsigned flags, /* I - Media flags */
|
||||
cups_size_t *size) /* O - Media size information */
|
||||
{
|
||||
const char *media; /* Default media size */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (size)
|
||||
memset(size, 0, sizeof(cups_size_t));
|
||||
|
||||
if (!http || !dest || !dinfo || !size)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the default media size, if any...
|
||||
*/
|
||||
|
||||
if ((media = cupsGetOption("media", dest->num_options,
|
||||
dest->options)) == NULL)
|
||||
media = "na_letter_8.5x11in";
|
||||
|
||||
if (cupsGetDestMediaByName(http, dest, dinfo, media, flags, size))
|
||||
return (1);
|
||||
|
||||
if (strcmp(media, "na_letter_8.5x11in") &&
|
||||
cupsGetDestMediaByName(http, dest, dinfo, "iso_a4_210x297mm", flags,
|
||||
size))
|
||||
return (1);
|
||||
|
||||
if (strcmp(media, "iso_a4_210x297mm") &&
|
||||
cupsGetDestMediaByName(http, dest, dinfo, "na_letter_8.5x11in", flags,
|
||||
size))
|
||||
return (1);
|
||||
|
||||
if ((flags & CUPS_MEDIA_FLAGS_BORDERLESS) &&
|
||||
cupsGetDestMediaByName(http, dest, dinfo, "na_index_4x6in", flags, size))
|
||||
return (1);
|
||||
|
||||
/*
|
||||
* Fall back to the first matching media size...
|
||||
*/
|
||||
|
||||
return (cupsGetDestMediaByIndex(http, dest, dinfo, flags, 0, size));
|
||||
return (cups_get_media_db(dinfo, pwg, flags, size));
|
||||
}
|
||||
|
||||
|
||||
@@ -1267,66 +943,6 @@ cups_copy_media_db(
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_create_cached()' - Create the media selection cache.
|
||||
*/
|
||||
|
||||
static void
|
||||
cups_create_cached(http_t *http, /* I - Connection to destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
unsigned flags) /* I - Media selection flags */
|
||||
{
|
||||
cups_array_t *db; /* Media database array to use */
|
||||
_cups_media_db_t *mdb, /* Media database entry */
|
||||
*first; /* First entry this size */
|
||||
|
||||
|
||||
if (dinfo->cached_db)
|
||||
cupsArrayDelete(dinfo->cached_db);
|
||||
|
||||
dinfo->cached_db = cupsArrayNew(NULL, NULL);
|
||||
dinfo->cached_flags = flags;
|
||||
|
||||
if (flags & CUPS_MEDIA_FLAGS_READY)
|
||||
{
|
||||
cups_update_ready(http, dinfo);
|
||||
db = dinfo->ready_db;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!dinfo->media_db)
|
||||
cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_DEFAULT);
|
||||
|
||||
db = dinfo->media_db;
|
||||
}
|
||||
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayFirst(db), first = mdb;
|
||||
mdb;
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(db))
|
||||
{
|
||||
if (flags & CUPS_MEDIA_FLAGS_BORDERLESS)
|
||||
{
|
||||
if (!mdb->left && !mdb->right && !mdb->top && !mdb->bottom)
|
||||
cupsArrayAdd(dinfo->cached_db, mdb);
|
||||
}
|
||||
else if (flags & CUPS_MEDIA_FLAGS_DUPLEX)
|
||||
{
|
||||
if (first->width != mdb->width || first->length != mdb->length)
|
||||
{
|
||||
cupsArrayAdd(dinfo->cached_db, first);
|
||||
first = mdb;
|
||||
}
|
||||
else if (mdb->left >= first->left && mdb->right >= first->right &&
|
||||
mdb->top >= first->top && mdb->bottom >= first->bottom)
|
||||
first = mdb;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & CUPS_MEDIA_FLAGS_DUPLEX)
|
||||
cupsArrayAdd(dinfo->cached_db, first);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_create_constraints()' - Create the constraints and resolvers arrays.
|
||||
*/
|
||||
@@ -1420,8 +1036,7 @@ cups_create_defaults(
|
||||
|
||||
static void
|
||||
cups_create_media_db(
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
unsigned flags) /* I - Media flags */
|
||||
cups_dinfo_t *dinfo) /* I - Destination information */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
_ipp_value_t *val; /* Current value */
|
||||
@@ -1429,40 +1044,21 @@ cups_create_media_db(
|
||||
*media_attr, /* media-xxx */
|
||||
*x_dimension, /* x-dimension */
|
||||
*y_dimension; /* y-dimension */
|
||||
pwg_media_t *pwg; /* PWG media info */
|
||||
cups_array_t *db; /* New media database array */
|
||||
_pwg_media_t *pwg; /* PWG media info */
|
||||
_cups_media_db_t mdb; /* Media entry */
|
||||
|
||||
|
||||
db = cupsArrayNew3((cups_array_func_t)cups_compare_media_db,
|
||||
NULL, NULL, 0,
|
||||
(cups_acopy_func_t)cups_copy_media_db,
|
||||
(cups_afree_func_t)cups_free_media_db);
|
||||
dinfo->media_db = cupsArrayNew3((cups_array_func_t)cups_compare_media_db,
|
||||
NULL, NULL, 0,
|
||||
(cups_acopy_func_t)cups_copy_media_db,
|
||||
(cups_afree_func_t)cups_free_media_db);
|
||||
dinfo->min_size.width = INT_MAX;
|
||||
dinfo->min_size.length = INT_MAX;
|
||||
dinfo->max_size.width = 0;
|
||||
dinfo->max_size.length = 0;
|
||||
|
||||
if (flags == CUPS_MEDIA_FLAGS_READY)
|
||||
{
|
||||
dinfo->ready_db = db;
|
||||
|
||||
media_col_db = ippFindAttribute(dinfo->ready_attrs, "media-col-ready",
|
||||
IPP_TAG_BEGIN_COLLECTION);
|
||||
media_attr = ippFindAttribute(dinfo->ready_attrs, "media-ready",
|
||||
IPP_TAG_ZERO);
|
||||
}
|
||||
else
|
||||
{
|
||||
dinfo->media_db = db;
|
||||
dinfo->min_size.width = INT_MAX;
|
||||
dinfo->min_size.length = INT_MAX;
|
||||
dinfo->max_size.width = 0;
|
||||
dinfo->max_size.length = 0;
|
||||
|
||||
media_col_db = ippFindAttribute(dinfo->attrs, "media-col-database",
|
||||
IPP_TAG_BEGIN_COLLECTION);
|
||||
media_attr = ippFindAttribute(dinfo->attrs, "media-supported",
|
||||
IPP_TAG_ZERO);
|
||||
}
|
||||
|
||||
if (media_col_db)
|
||||
if ((media_col_db = ippFindAttribute(dinfo->attrs, "media-col-database",
|
||||
IPP_TAG_BEGIN_COLLECTION)) != NULL)
|
||||
{
|
||||
_ipp_value_t *custom = NULL; /* Custom size range value */
|
||||
|
||||
@@ -1479,32 +1075,15 @@ cups_create_media_db(
|
||||
/* media-size collection value */
|
||||
|
||||
if ((x_dimension = ippFindAttribute(media_size, "x-dimension",
|
||||
IPP_TAG_INTEGER)) != NULL &&
|
||||
IPP_TAG_INTEGER)) != NULL &&
|
||||
(y_dimension = ippFindAttribute(media_size, "y-dimension",
|
||||
IPP_TAG_INTEGER)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Fixed size...
|
||||
*/
|
||||
|
||||
mdb.width = x_dimension->values[0].integer;
|
||||
mdb.length = y_dimension->values[0].integer;
|
||||
}
|
||||
else if ((x_dimension = ippFindAttribute(media_size, "x-dimension",
|
||||
IPP_TAG_INTEGER)) != NULL &&
|
||||
(y_dimension = ippFindAttribute(media_size, "y-dimension",
|
||||
IPP_TAG_RANGE)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Roll limits...
|
||||
*/
|
||||
|
||||
mdb.width = x_dimension->values[0].integer;
|
||||
mdb.length = y_dimension->values[0].range.upper;
|
||||
}
|
||||
else if (flags != CUPS_MEDIA_FLAGS_READY &&
|
||||
(x_dimension = ippFindAttribute(media_size, "x-dimension",
|
||||
IPP_TAG_RANGE)) != NULL &&
|
||||
else if ((x_dimension = ippFindAttribute(media_size, "x-dimension",
|
||||
IPP_TAG_RANGE)) != NULL &&
|
||||
(y_dimension = ippFindAttribute(media_size, "y-dimension",
|
||||
IPP_TAG_RANGE)) != NULL)
|
||||
{
|
||||
@@ -1528,6 +1107,7 @@ cups_create_media_db(
|
||||
dinfo->max_size.right = 635; /* Default 1/4" side margins */
|
||||
dinfo->max_size.top =
|
||||
dinfo->max_size.bottom = 1270; /* Default 1/2" top/bottom margins */
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -1587,7 +1167,7 @@ cups_create_media_db(
|
||||
IPP_TAG_INTEGER)) != NULL)
|
||||
mdb.top = media_attr->values[0].integer;
|
||||
|
||||
cupsArrayAdd(db, &mdb);
|
||||
cupsArrayAdd(dinfo->media_db, &mdb);
|
||||
}
|
||||
|
||||
if (custom)
|
||||
@@ -1625,7 +1205,8 @@ cups_create_media_db(
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (media_attr &&
|
||||
else if ((media_attr = ippFindAttribute(dinfo->attrs, "media-supported",
|
||||
IPP_TAG_ZERO)) != NULL &&
|
||||
(media_attr->value_tag == IPP_TAG_NAME ||
|
||||
media_attr->value_tag == IPP_TAG_NAMELANG ||
|
||||
media_attr->value_tag == IPP_TAG_KEYWORD))
|
||||
@@ -1641,8 +1222,8 @@ cups_create_media_db(
|
||||
i > 0;
|
||||
i --, val ++)
|
||||
{
|
||||
if ((pwg = pwgMediaForPWG(val->string.text)) == NULL)
|
||||
if ((pwg = pwgMediaForLegacy(val->string.text)) == NULL)
|
||||
if ((pwg = _pwgMediaForPWG(val->string.text)) == NULL)
|
||||
if ((pwg = _pwgMediaForLegacy(val->string.text)) == NULL)
|
||||
{
|
||||
DEBUG_printf(("3cups_create_media_db: Ignoring unknown size '%s'.",
|
||||
val->string.text));
|
||||
@@ -1652,14 +1233,12 @@ cups_create_media_db(
|
||||
mdb.width = pwg->width;
|
||||
mdb.length = pwg->length;
|
||||
|
||||
if (flags != CUPS_MEDIA_FLAGS_READY &&
|
||||
!strncmp(val->string.text, "custom_min_", 11))
|
||||
if (!strncmp(val->string.text, "custom_min_", 11))
|
||||
{
|
||||
mdb.size_name = NULL;
|
||||
dinfo->min_size = mdb;
|
||||
}
|
||||
else if (flags != CUPS_MEDIA_FLAGS_READY &&
|
||||
!strncmp(val->string.text, "custom_max_", 11))
|
||||
else if (!strncmp(val->string.text, "custom_max_", 11))
|
||||
{
|
||||
mdb.size_name = NULL;
|
||||
dinfo->max_size = mdb;
|
||||
@@ -1668,7 +1247,7 @@ cups_create_media_db(
|
||||
{
|
||||
mdb.size_name = val->string.text;
|
||||
|
||||
cupsArrayAdd(db, &mdb);
|
||||
cupsArrayAdd(dinfo->media_db, &mdb);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1705,13 +1284,11 @@ cups_free_media_db(
|
||||
*/
|
||||
|
||||
static int /* O - 1 on match, 0 on failure */
|
||||
cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
pwg_media_t *pwg, /* I - PWG media info */
|
||||
cups_get_media_db(cups_dinfo_t *dinfo, /* I - Destination information */
|
||||
_pwg_media_t *pwg, /* I - PWG media info */
|
||||
unsigned flags, /* I - Media matching flags */
|
||||
cups_size_t *size) /* O - Media size/margin/name info */
|
||||
cups_size_t *size) /* O - Media size/margin/name info */
|
||||
{
|
||||
cups_array_t *db; /* Which media database to query */
|
||||
_cups_media_db_t *mdb, /* Current media database entry */
|
||||
*best = NULL, /* Best matching entry */
|
||||
key; /* Search key */
|
||||
@@ -1721,18 +1298,8 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
* Create the media database as needed...
|
||||
*/
|
||||
|
||||
if (flags & CUPS_MEDIA_FLAGS_READY)
|
||||
{
|
||||
cups_update_ready(http, dinfo);
|
||||
db = dinfo->ready_db;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!dinfo->media_db)
|
||||
cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_DEFAULT);
|
||||
|
||||
db = dinfo->media_db;
|
||||
}
|
||||
if (!dinfo->media_db)
|
||||
cups_create_media_db(dinfo);
|
||||
|
||||
/*
|
||||
* Find a match...
|
||||
@@ -1742,7 +1309,7 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
key.width = pwg->width;
|
||||
key.length = pwg->length;
|
||||
|
||||
if ((mdb = cupsArrayFind(db, &key)) != NULL)
|
||||
if ((mdb = cupsArrayFind(dinfo->media_db, &key)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Found an exact match, let's figure out the best margins for the flags
|
||||
@@ -1760,9 +1327,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
if (best->left != 0 || best->right != 0 || best->top != 0 ||
|
||||
best->bottom != 0)
|
||||
{
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
|
||||
mdb && !cups_compare_media_db(mdb, &key);
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(db))
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
|
||||
{
|
||||
if (mdb->left <= best->left && mdb->right <= best->right &&
|
||||
mdb->top <= best->top && mdb->bottom <= best->bottom)
|
||||
@@ -1790,9 +1357,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
* Look for the largest margins...
|
||||
*/
|
||||
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
|
||||
mdb && !cups_compare_media_db(mdb, &key);
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(db))
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
|
||||
{
|
||||
if (mdb->left >= best->left && mdb->right >= best->right &&
|
||||
mdb->top >= best->top && mdb->bottom >= best->bottom)
|
||||
@@ -1805,9 +1372,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
* Look for the smallest non-zero margins...
|
||||
*/
|
||||
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
|
||||
mdb && !cups_compare_media_db(mdb, &key);
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(db))
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
|
||||
{
|
||||
if (((mdb->left > 0 && mdb->left <= best->left) || best->left == 0) &&
|
||||
((mdb->right > 0 && mdb->right <= best->right) ||
|
||||
@@ -1867,9 +1434,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
* Find a close size...
|
||||
*/
|
||||
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayFirst(db);
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayFirst(dinfo->media_db);
|
||||
mdb;
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(db))
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
|
||||
if (cups_is_close_media_db(mdb, &key))
|
||||
break;
|
||||
|
||||
@@ -1887,9 +1454,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
if (best->left != 0 || best->right != 0 || best->top != 0 ||
|
||||
best->bottom != 0)
|
||||
{
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
|
||||
mdb && cups_is_close_media_db(mdb, &key);
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(db))
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
|
||||
{
|
||||
if (mdb->left <= best->left && mdb->right <= best->right &&
|
||||
mdb->top <= best->top && mdb->bottom <= best->bottom)
|
||||
@@ -1908,9 +1475,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
* Look for the largest margins...
|
||||
*/
|
||||
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
|
||||
mdb && cups_is_close_media_db(mdb, &key);
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(db))
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
|
||||
{
|
||||
if (mdb->left >= best->left && mdb->right >= best->right &&
|
||||
mdb->top >= best->top && mdb->bottom >= best->bottom)
|
||||
@@ -1923,9 +1490,9 @@ cups_get_media_db(http_t *http, /* I - Connection to destination */
|
||||
* Look for the smallest non-zero margins...
|
||||
*/
|
||||
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(db);
|
||||
for (mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db);
|
||||
mdb && cups_is_close_media_db(mdb, &key);
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(db))
|
||||
mdb = (_cups_media_db_t *)cupsArrayNext(dinfo->media_db))
|
||||
{
|
||||
if (((mdb->left > 0 && mdb->left <= best->left) || best->left == 0) &&
|
||||
((mdb->right > 0 && mdb->right <= best->right) ||
|
||||
@@ -2192,80 +1759,5 @@ cups_test_constraints(
|
||||
|
||||
|
||||
/*
|
||||
* 'cups_update_ready()' - Update xxx-ready attributes for the printer.
|
||||
*/
|
||||
|
||||
static void
|
||||
cups_update_ready(http_t *http, /* I - Connection to destination */
|
||||
cups_dinfo_t *dinfo) /* I - Destination information */
|
||||
{
|
||||
ipp_t *request; /* Get-Printer-Attributes request */
|
||||
static const char * const pattrs[] = /* Printer attributes we want */
|
||||
{
|
||||
"finishings-col-ready",
|
||||
"finishings-ready",
|
||||
"job-finishings-col-ready",
|
||||
"job-finishings-ready",
|
||||
"media-col-ready",
|
||||
"media-ready"
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Don't update more than once every 30 seconds...
|
||||
*/
|
||||
|
||||
if ((time(NULL) - dinfo->ready_time) < _CUPS_MEDIA_READY_TTL)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Free any previous results...
|
||||
*/
|
||||
|
||||
if (dinfo->cached_flags & CUPS_MEDIA_FLAGS_READY)
|
||||
{
|
||||
cupsArrayDelete(dinfo->cached_db);
|
||||
dinfo->cached_db = NULL;
|
||||
dinfo->cached_flags = CUPS_MEDIA_FLAGS_DEFAULT;
|
||||
}
|
||||
|
||||
ippDelete(dinfo->ready_attrs);
|
||||
dinfo->ready_attrs = NULL;
|
||||
|
||||
cupsArrayDelete(dinfo->ready_db);
|
||||
dinfo->ready_db = NULL;
|
||||
|
||||
/*
|
||||
* Query the xxx-ready values...
|
||||
*/
|
||||
|
||||
request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
|
||||
ippSetVersion(request, dinfo->version / 10, dinfo->version % 10);
|
||||
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
|
||||
dinfo->uri);
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
|
||||
NULL, cupsUser());
|
||||
ippAddStrings(request, IPP_TAG_OPERATION,
|
||||
IPP_TAG_KEYWORD | IPP_TAG_CUPS_CONST, "requested-attributes",
|
||||
(int)(sizeof(pattrs) / sizeof(pattrs[0])), NULL, pattrs);
|
||||
|
||||
dinfo->ready_attrs = cupsDoRequest(http, request, dinfo->resource);
|
||||
|
||||
/*
|
||||
* Update the ready media database...
|
||||
*/
|
||||
|
||||
cups_create_media_db(dinfo, CUPS_MEDIA_FLAGS_READY);
|
||||
|
||||
/*
|
||||
* Update last lookup time and return...
|
||||
*/
|
||||
|
||||
dinfo->ready_time = time(NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: dest-options.c 11085 2013-07-03 13:53:05Z msweet $".
|
||||
* End of "$Id: dest-options.c 4185 2013-02-20 02:19:13Z msweet $".
|
||||
*/
|
||||
|
||||
+45
-78
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: dest.c 11688 2014-03-05 21:11:32Z msweet $"
|
||||
* "$Id: dest.c 9568 2011-02-25 06:13:56Z mike $"
|
||||
*
|
||||
* User-defined destination (and option) support for CUPS.
|
||||
*
|
||||
@@ -319,8 +319,7 @@ cupsAddDest(const char *name, /* I - Destination name */
|
||||
if (instance && !cupsGetDest(name, NULL, num_dests, *dests))
|
||||
return (num_dests);
|
||||
|
||||
if ((dest = cups_add_dest(name, instance, &num_dests, dests)) == NULL)
|
||||
return (num_dests);
|
||||
dest = cups_add_dest(name, instance, &num_dests, dests);
|
||||
|
||||
/*
|
||||
* Find the base dest again now the array has been realloc'd.
|
||||
@@ -635,7 +634,7 @@ cupsConnectDest(
|
||||
if (resource)
|
||||
*resource = '\0';
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -652,7 +651,7 @@ cupsConnectDest(
|
||||
if ((uri = cupsGetOption("printer-uri-supported", dest->num_options,
|
||||
dest->options)) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOENT), 0);
|
||||
|
||||
if (cb)
|
||||
(*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR,
|
||||
@@ -672,9 +671,9 @@ cupsConnectDest(
|
||||
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
|
||||
userpass, sizeof(userpass), hostname, sizeof(hostname),
|
||||
&port, resource, resourcesize) < HTTP_URI_STATUS_OK)
|
||||
&port, resource, resourcesize) < HTTP_URI_OK)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer URI."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad printer URI."), 1);
|
||||
|
||||
if (cb)
|
||||
(*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR,
|
||||
@@ -718,12 +717,11 @@ cupsConnectDest(
|
||||
*/
|
||||
|
||||
if (!strcmp(scheme, "ipps") || port == 443)
|
||||
encryption = HTTP_ENCRYPTION_ALWAYS;
|
||||
encryption = HTTP_ENCRYPT_ALWAYS;
|
||||
else
|
||||
encryption = HTTP_ENCRYPTION_IF_REQUESTED;
|
||||
encryption = HTTP_ENCRYPT_IF_REQUESTED;
|
||||
|
||||
http = httpConnect2(hostname, port, addrlist, AF_UNSPEC, encryption, 1, 0,
|
||||
NULL);
|
||||
http = _httpCreate(hostname, port, addrlist, encryption, AF_UNSPEC);
|
||||
|
||||
/*
|
||||
* Connect if requested...
|
||||
@@ -891,10 +889,6 @@ cupsEnumDests(
|
||||
num_dests; /* Number of destinations */
|
||||
cups_dest_t *dests = NULL, /* Destinations */
|
||||
*dest; /* Current destination */
|
||||
const char *defprinter; /* Default printer */
|
||||
char name[1024], /* Copy of printer name */
|
||||
*instance, /* Pointer to instance name */
|
||||
*user_default; /* User default printer */
|
||||
#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
|
||||
int count, /* Number of queries started */
|
||||
remaining; /* Remainder of timeout */
|
||||
@@ -937,33 +931,8 @@ cupsEnumDests(
|
||||
* Get the list of local printers and pass them to the callback function...
|
||||
*/
|
||||
|
||||
num_dests = _cupsGetDests(CUPS_HTTP_DEFAULT, IPP_OP_CUPS_GET_PRINTERS, NULL,
|
||||
&dests, type, mask);
|
||||
|
||||
if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
|
||||
defprinter = name;
|
||||
else if ((defprinter = cupsGetDefault2(CUPS_HTTP_DEFAULT)) != NULL)
|
||||
{
|
||||
strlcpy(name, defprinter, sizeof(name));
|
||||
defprinter = name;
|
||||
}
|
||||
|
||||
if (defprinter)
|
||||
{
|
||||
/*
|
||||
* Separate printer and instance name...
|
||||
*/
|
||||
|
||||
if ((instance = strchr(name, '/')) != NULL)
|
||||
*instance++ = '\0';
|
||||
|
||||
/*
|
||||
* Lookup the printer and instance and make it the default...
|
||||
*/
|
||||
|
||||
if ((dest = cupsGetDest(name, instance, num_dests, dests)) != NULL)
|
||||
dest->is_default = 1;
|
||||
}
|
||||
num_dests = _cupsGetDests(CUPS_HTTP_DEFAULT, CUPS_GET_PRINTERS, NULL, &dests,
|
||||
type, mask);
|
||||
|
||||
for (i = num_dests, dest = dests;
|
||||
i > 0 && (!cancel || !*cancel);
|
||||
@@ -982,11 +951,11 @@ cupsEnumDests(
|
||||
* Get Bonjour-shared printers...
|
||||
*/
|
||||
|
||||
data.type = type;
|
||||
data.mask = mask;
|
||||
data.cb = cb;
|
||||
data.user_data = user_data;
|
||||
data.devices = cupsArrayNew3((cups_array_func_t)cups_dnssd_compare_devices, NULL, NULL, 0, NULL, (cups_afree_func_t)cups_dnssd_free_device);
|
||||
data.type = type;
|
||||
data.mask = mask;
|
||||
data.devices = cupsArrayNew3((cups_array_func_t)cups_dnssd_compare_devices,
|
||||
NULL, NULL, 0, NULL,
|
||||
(cups_afree_func_t)cups_dnssd_free_device);
|
||||
|
||||
# ifdef HAVE_DNSSD
|
||||
if (DNSServiceCreateConnection(&data.main_ref) != kDNSServiceErr_NoError)
|
||||
@@ -1330,7 +1299,7 @@ _cupsGetDestResource(
|
||||
if (resource)
|
||||
*resource = '\0';
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -1344,7 +1313,7 @@ _cupsGetDestResource(
|
||||
if (resource)
|
||||
*resource = '\0';
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(ENOENT), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(ENOENT), 0);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
@@ -1359,9 +1328,9 @@ _cupsGetDestResource(
|
||||
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme),
|
||||
userpass, sizeof(userpass), hostname, sizeof(hostname),
|
||||
&port, resource, resourcesize) < HTTP_URI_STATUS_OK)
|
||||
&port, resource, resourcesize) < HTTP_URI_OK)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer URI."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad printer URI."), 1);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
@@ -1373,12 +1342,12 @@ _cupsGetDestResource(
|
||||
/*
|
||||
* '_cupsGetDests()' - Get destinations from a server.
|
||||
*
|
||||
* "op" is IPP_OP_CUPS_GET_PRINTERS to get a full list, IPP_OP_CUPS_GET_DEFAULT
|
||||
* to get the system-wide default printer, or IPP_OP_GET_PRINTER_ATTRIBUTES for
|
||||
* a known printer.
|
||||
* "op" is CUPS_GET_PRINTERS to get a full list, CUPS_GET_DEFAULT to get the
|
||||
* system-wide default printer, or IPP_GET_PRINTER_ATTRIBUTES for a known
|
||||
* printer.
|
||||
*
|
||||
* "name" is the name of an existing printer and is only used when "op" is
|
||||
* IPP_OP_GET_PRINTER_ATTRIBUTES.
|
||||
* IPP_GET_PRINTER_ATTRIBUTES.
|
||||
*
|
||||
* "dest" is initialized to point to the array of destinations.
|
||||
*
|
||||
@@ -1440,7 +1409,6 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
|
||||
"printer-is-shared",
|
||||
"printer-location",
|
||||
"printer-make-and-model",
|
||||
"printer-mandatory-job-attributes",
|
||||
"printer-name",
|
||||
"printer-state",
|
||||
"printer-state-change-time",
|
||||
@@ -1459,13 +1427,13 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
/*
|
||||
* Build a IPP_OP_CUPS_GET_PRINTERS or IPP_OP_GET_PRINTER_ATTRIBUTES request, which
|
||||
* Build a CUPS_GET_PRINTERS or IPP_GET_PRINTER_ATTRIBUTES request, which
|
||||
* require the following attributes:
|
||||
*
|
||||
* attributes-charset
|
||||
* attributes-natural-language
|
||||
* requesting-user-name
|
||||
* printer-uri [for IPP_OP_GET_PRINTER_ATTRIBUTES]
|
||||
* printer-uri [for IPP_GET_PRINTER_ATTRIBUTES]
|
||||
*/
|
||||
|
||||
request = ippNewRequest(op);
|
||||
@@ -1477,7 +1445,7 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
|
||||
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
|
||||
"requesting-user-name", NULL, cupsUser());
|
||||
|
||||
if (name && op != IPP_OP_CUPS_GET_DEFAULT)
|
||||
if (name && op != CUPS_GET_DEFAULT)
|
||||
{
|
||||
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
|
||||
"localhost", ippPort(), "/printers/%s", name);
|
||||
@@ -1546,7 +1514,6 @@ _cupsGetDests(http_t *http, /* I - Connection to server or
|
||||
!strcmp(attr->name, "printer-info") ||
|
||||
!strcmp(attr->name, "printer-is-shared") ||
|
||||
!strcmp(attr->name, "printer-make-and-model") ||
|
||||
!strcmp(attr->name, "printer-mandatory-job-attributes") ||
|
||||
!strcmp(attr->name, "printer-state") ||
|
||||
!strcmp(attr->name, "printer-state-change-time") ||
|
||||
!strcmp(attr->name, "printer-type") ||
|
||||
@@ -1709,7 +1676,7 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
|
||||
if (!dests)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad NULL dests pointer"), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad NULL dests pointer"), 1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -1718,9 +1685,9 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
*/
|
||||
|
||||
*dests = (cups_dest_t *)0;
|
||||
num_dests = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, dests, 0, 0);
|
||||
num_dests = _cupsGetDests(http, CUPS_GET_PRINTERS, NULL, dests, 0, 0);
|
||||
|
||||
if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
|
||||
if (cupsLastError() >= IPP_REDIRECTION_OTHER_SITE)
|
||||
{
|
||||
cupsFreeDests(num_dests, *dests);
|
||||
*dests = (cups_dest_t *)0;
|
||||
@@ -1836,7 +1803,7 @@ cupsGetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
*/
|
||||
|
||||
if (num_dests > 0)
|
||||
_cupsSetError(IPP_STATUS_OK, NULL, 0);
|
||||
_cupsSetError(IPP_OK, NULL, 0);
|
||||
|
||||
return (num_dests);
|
||||
}
|
||||
@@ -1873,7 +1840,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
defname[256]; /* Default printer name */
|
||||
const char *home = getenv("HOME"); /* Home directory */
|
||||
int set_as_default = 0; /* Set returned destination as default */
|
||||
ipp_op_t op = IPP_OP_GET_PRINTER_ATTRIBUTES;
|
||||
ipp_op_t op = IPP_GET_PRINTER_ATTRIBUTES;
|
||||
/* IPP operation to get server ops */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
|
||||
|
||||
@@ -1927,7 +1894,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
* No locally-set default destination, ask the server...
|
||||
*/
|
||||
|
||||
op = IPP_OP_CUPS_GET_DEFAULT;
|
||||
op = CUPS_GET_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2111,9 +2078,9 @@ cupsSetDests2(http_t *http, /* I - Connection to server or @code CUPS_HTTP_
|
||||
* Get the server destinations...
|
||||
*/
|
||||
|
||||
num_temps = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &temps, 0, 0);
|
||||
num_temps = _cupsGetDests(http, CUPS_GET_PRINTERS, NULL, &temps, 0, 0);
|
||||
|
||||
if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
|
||||
if (cupsLastError() >= IPP_REDIRECTION_OTHER_SITE)
|
||||
{
|
||||
cupsFreeDests(num_temps, temps);
|
||||
return (-1);
|
||||
@@ -2470,7 +2437,7 @@ appleGetPaperSize(char *name, /* I - Paper size name buffer */
|
||||
int namesize) /* I - Size of buffer */
|
||||
{
|
||||
CFStringRef defaultPaperID; /* Default paper ID */
|
||||
pwg_media_t *pwgmedia; /* PWG media size */
|
||||
_pwg_media_t *pwgmedia; /* PWG media size */
|
||||
|
||||
|
||||
defaultPaperID = _cupsAppleCopyDefaultPaperID();
|
||||
@@ -2479,7 +2446,7 @@ appleGetPaperSize(char *name, /* I - Paper size name buffer */
|
||||
!CFStringGetCString(defaultPaperID, name, namesize,
|
||||
kCFStringEncodingUTF8))
|
||||
name[0] = '\0';
|
||||
else if ((pwgmedia = pwgMediaForLegacy(name)) != NULL)
|
||||
else if ((pwgmedia = _pwgMediaForLegacy(name)) != NULL)
|
||||
strlcpy(name, pwgmedia->pwg, namesize);
|
||||
|
||||
if (defaultPaperID)
|
||||
@@ -3166,7 +3133,7 @@ cups_dnssd_query_cb(
|
||||
device->state = _CUPS_DNSSD_PENDING;
|
||||
make_and_model[0] = '\0';
|
||||
|
||||
strlcpy(model, "Unknown", sizeof(model));
|
||||
strcpy(model, "Unknown");
|
||||
|
||||
for (txt = rdata, txtend = txt + rdlen;
|
||||
txt < txtend;
|
||||
@@ -3208,10 +3175,10 @@ cups_dnssd_query_cb(
|
||||
if (!_cups_strcasecmp(key, "usb_MFG") ||
|
||||
!_cups_strcasecmp(key, "usb_MANU") ||
|
||||
!_cups_strcasecmp(key, "usb_MANUFACTURER"))
|
||||
strlcpy(make_and_model, value, sizeof(make_and_model));
|
||||
strcpy(make_and_model, value);
|
||||
else if (!_cups_strcasecmp(key, "usb_MDL") ||
|
||||
!_cups_strcasecmp(key, "usb_MODEL"))
|
||||
strlcpy(model, value, sizeof(model));
|
||||
strcpy(model, value);
|
||||
else if (!_cups_strcasecmp(key, "product") && !strstr(value, "Ghostscript"))
|
||||
{
|
||||
if (value[0] == '(')
|
||||
@@ -3223,14 +3190,14 @@ cups_dnssd_query_cb(
|
||||
if ((ptr = value + strlen(value) - 1) > value && *ptr == ')')
|
||||
*ptr = '\0';
|
||||
|
||||
strlcpy(model, value + 1, sizeof(model));
|
||||
strcpy(model, value + 1);
|
||||
}
|
||||
else
|
||||
strlcpy(model, value, sizeof(model));
|
||||
strcpy(model, value);
|
||||
}
|
||||
else if (!_cups_strcasecmp(key, "ty"))
|
||||
{
|
||||
strlcpy(model, value, sizeof(model));
|
||||
strcpy(model, value);
|
||||
|
||||
if ((ptr = strchr(model, ',')) != NULL)
|
||||
*ptr = '\0';
|
||||
@@ -3419,7 +3386,7 @@ cups_dnssd_resolve(
|
||||
_HTTP_RESOLVE_FQDN, cups_dnssd_resolve_cb,
|
||||
&resolve)) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unable to resolve printer URI."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Unable to resolve printer URI."), 1);
|
||||
|
||||
if (cb)
|
||||
(*cb)(user_data, CUPS_DEST_FLAGS_UNCONNECTED | CUPS_DEST_FLAGS_ERROR,
|
||||
@@ -3920,5 +3887,5 @@ cups_make_string(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: dest.c 11688 2014-03-05 21:11:32Z msweet $".
|
||||
* End of "$Id: dest.c 9568 2011-02-25 06:13:56Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: dir.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: dir.c 7279 2008-01-31 01:50:44Z mike $"
|
||||
*
|
||||
* Directory routines for CUPS.
|
||||
*
|
||||
@@ -468,5 +468,5 @@ cupsDirRewind(cups_dir_t *dp) /* I - Directory pointer */
|
||||
#endif /* WIN32 */
|
||||
|
||||
/*
|
||||
* End of "$Id: dir.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: dir.c 7279 2008-01-31 01:50:44Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: dir.h 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: dir.h 7026 2007-10-19 00:57:45Z mike $"
|
||||
*
|
||||
* Public directory definitions for CUPS.
|
||||
*
|
||||
@@ -65,5 +65,5 @@ extern void cupsDirRewind(cups_dir_t *dp) _CUPS_API_1_2;
|
||||
#endif /* !_CUPS_DIR_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: dir.h 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: dir.h 7026 2007-10-19 00:57:45Z mike $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: emit.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: emit.c 7863 2008-08-26 03:39:59Z mike $"
|
||||
*
|
||||
* PPD code emission routines for CUPS.
|
||||
*
|
||||
@@ -1225,5 +1225,5 @@ ppd_handle_media(ppd_file_t *ppd) /* I - PPD file */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: emit.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: emit.c 7863 2008-08-26 03:39:59Z mike $".
|
||||
*/
|
||||
|
||||
+29
-247
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: encode.c 11734 2014-03-25 18:01:47Z msweet $"
|
||||
* "$Id: encode.c 7696 2008-06-26 00:54:42Z mike $"
|
||||
*
|
||||
* Option encoding routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -31,110 +31,14 @@
|
||||
|
||||
|
||||
/*
|
||||
* Local list of option names, the value tags they should use, and the list of
|
||||
* supported operations...
|
||||
* Local list of option names and the value tags they should use...
|
||||
*
|
||||
* **** THIS LIST MUST BE SORTED BY ATTRIBUTE NAME ****
|
||||
* **** THIS LIST MUST BE SORTED ****
|
||||
*/
|
||||
|
||||
static const ipp_op_t ipp_job_creation[] =
|
||||
{
|
||||
IPP_OP_PRINT_JOB,
|
||||
IPP_OP_PRINT_URI,
|
||||
IPP_OP_VALIDATE_JOB,
|
||||
IPP_OP_CREATE_JOB,
|
||||
IPP_OP_HOLD_JOB,
|
||||
IPP_OP_SET_JOB_ATTRIBUTES,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t ipp_doc_creation[] =
|
||||
{
|
||||
IPP_OP_PRINT_JOB,
|
||||
IPP_OP_PRINT_URI,
|
||||
IPP_OP_SEND_DOCUMENT,
|
||||
IPP_OP_SEND_URI,
|
||||
IPP_OP_SET_JOB_ATTRIBUTES,
|
||||
IPP_OP_SET_DOCUMENT_ATTRIBUTES,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t ipp_sub_creation[] =
|
||||
{
|
||||
IPP_OP_PRINT_JOB,
|
||||
IPP_OP_PRINT_URI,
|
||||
IPP_OP_CREATE_JOB,
|
||||
IPP_OP_CREATE_PRINTER_SUBSCRIPTIONS,
|
||||
IPP_OP_CREATE_JOB_SUBSCRIPTIONS,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t ipp_all_print[] =
|
||||
{
|
||||
IPP_OP_PRINT_JOB,
|
||||
IPP_OP_PRINT_URI,
|
||||
IPP_OP_VALIDATE_JOB,
|
||||
IPP_OP_CREATE_JOB,
|
||||
IPP_OP_SEND_DOCUMENT,
|
||||
IPP_OP_SEND_URI,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t ipp_all_limit[] =
|
||||
{
|
||||
IPP_OP_GET_JOBS,
|
||||
IPP_OP_GET_PRINTER_ATTRIBUTES,
|
||||
IPP_OP_CUPS_GET_PRINTERS,
|
||||
IPP_OP_CUPS_GET_CLASSES,
|
||||
IPP_OP_CUPS_GET_DEVICES,
|
||||
IPP_OP_CUPS_GET_PPDS,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t ipp_set_printer[] =
|
||||
{
|
||||
IPP_OP_SET_PRINTER_ATTRIBUTES,
|
||||
IPP_OP_CUPS_ADD_MODIFY_PRINTER,
|
||||
IPP_OP_CUPS_ADD_MODIFY_CLASS,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t cups_am_class[] =
|
||||
{
|
||||
IPP_OP_CUPS_ADD_MODIFY_CLASS,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t cups_am_printer[] =
|
||||
{
|
||||
IPP_OP_CUPS_ADD_MODIFY_PRINTER,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t cups_schemes[] =
|
||||
{
|
||||
IPP_OP_CUPS_GET_DEVICES,
|
||||
IPP_OP_CUPS_GET_PPDS,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t cups_get_ppds[] =
|
||||
{
|
||||
IPP_OP_CUPS_GET_PPDS,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t cups_ppd_name[] =
|
||||
{
|
||||
IPP_OP_CUPS_ADD_MODIFY_PRINTER,
|
||||
IPP_OP_CUPS_GET_PPD,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const _ipp_option_t ipp_options[] =
|
||||
{
|
||||
{ 1, "auth-info", IPP_TAG_TEXT, IPP_TAG_JOB },
|
||||
{ 1, "auth-info-default", IPP_TAG_TEXT, IPP_TAG_PRINTER },
|
||||
{ 1, "auth-info-required", IPP_TAG_KEYWORD, IPP_TAG_PRINTER },
|
||||
{ 0, "blackplot", IPP_TAG_BOOLEAN, IPP_TAG_JOB },
|
||||
{ 0, "blackplot-default", IPP_TAG_BOOLEAN, IPP_TAG_PRINTER },
|
||||
@@ -142,26 +46,18 @@ static const _ipp_option_t ipp_options[] =
|
||||
{ 0, "brightness-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 0, "columns", IPP_TAG_INTEGER, IPP_TAG_JOB },
|
||||
{ 0, "columns-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 0, "compression", IPP_TAG_KEYWORD, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
ipp_doc_creation },
|
||||
{ 0, "compression", IPP_TAG_KEYWORD, IPP_TAG_OPERATION },
|
||||
{ 0, "copies", IPP_TAG_INTEGER, IPP_TAG_JOB,
|
||||
IPP_TAG_DOCUMENT },
|
||||
{ 0, "copies-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 0, "device-uri", IPP_TAG_URI, IPP_TAG_PRINTER },
|
||||
{ 1, "document-copies", IPP_TAG_RANGE, IPP_TAG_JOB,
|
||||
IPP_TAG_DOCUMENT,
|
||||
ipp_doc_creation },
|
||||
{ 0, "document-format", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
ipp_doc_creation },
|
||||
IPP_TAG_DOCUMENT },
|
||||
{ 0, "document-format", IPP_TAG_MIMETYPE, IPP_TAG_OPERATION },
|
||||
{ 0, "document-format-default", IPP_TAG_MIMETYPE, IPP_TAG_PRINTER },
|
||||
{ 1, "document-numbers", IPP_TAG_RANGE, IPP_TAG_JOB,
|
||||
IPP_TAG_DOCUMENT,
|
||||
ipp_all_print },
|
||||
{ 1, "exclude-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_schemes },
|
||||
IPP_TAG_DOCUMENT },
|
||||
{ 1, "exclude-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION },
|
||||
{ 1, "finishings", IPP_TAG_ENUM, IPP_TAG_JOB,
|
||||
IPP_TAG_DOCUMENT },
|
||||
{ 1, "finishings-default", IPP_TAG_ENUM, IPP_TAG_PRINTER },
|
||||
@@ -174,15 +70,7 @@ static const _ipp_option_t ipp_options[] =
|
||||
{ 0, "gamma-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 0, "hue", IPP_TAG_INTEGER, IPP_TAG_JOB },
|
||||
{ 0, "hue-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 1, "include-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_schemes },
|
||||
{ 0, "job-account-id", IPP_TAG_NAME, IPP_TAG_JOB },
|
||||
{ 0, "job-account-id-default",IPP_TAG_NAME, IPP_TAG_PRINTER },
|
||||
{ 0, "job-accounting-user-id", IPP_TAG_NAME, IPP_TAG_JOB },
|
||||
{ 0, "job-accounting-user-id-default", IPP_TAG_NAME, IPP_TAG_PRINTER },
|
||||
{ 0, "job-authorization-uri", IPP_TAG_URI, IPP_TAG_OPERATION },
|
||||
{ 0, "job-hold-until", IPP_TAG_KEYWORD, IPP_TAG_JOB },
|
||||
{ 1, "include-schemes", IPP_TAG_NAME, IPP_TAG_OPERATION },
|
||||
{ 0, "job-id", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
|
||||
{ 0, "job-impressions", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
|
||||
{ 0, "job-impressions-completed", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
|
||||
@@ -192,12 +80,6 @@ static const _ipp_option_t ipp_options[] =
|
||||
{ 0, "job-media-sheets", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
|
||||
{ 0, "job-media-sheets-completed", IPP_TAG_INTEGER, IPP_TAG_ZERO }, /* never send as option */
|
||||
{ 0, "job-page-limit", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 0, "job-password", IPP_TAG_STRING, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
ipp_job_creation },
|
||||
{ 0, "job-password-encryption", IPP_TAG_KEYWORD, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
ipp_job_creation },
|
||||
{ 0, "job-priority", IPP_TAG_INTEGER, IPP_TAG_JOB },
|
||||
{ 0, "job-quota-period", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 1, "job-sheets", IPP_TAG_NAME, IPP_TAG_JOB },
|
||||
@@ -267,33 +149,7 @@ static const _ipp_option_t ipp_options[] =
|
||||
{ 0, "penwidth", IPP_TAG_INTEGER, IPP_TAG_JOB },
|
||||
{ 0, "penwidth-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 0, "port-monitor", IPP_TAG_NAME, IPP_TAG_PRINTER },
|
||||
{ 0, "ppd-device-id", IPP_TAG_TEXT, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_get_ppds },
|
||||
{ 0, "ppd-make", IPP_TAG_TEXT, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_get_ppds },
|
||||
{ 0, "ppd-make-and-model", IPP_TAG_TEXT, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_get_ppds },
|
||||
{ 0, "ppd-model-number", IPP_TAG_INTEGER, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_get_ppds },
|
||||
{ 0, "ppd-name", IPP_TAG_NAME, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_ppd_name },
|
||||
{ 0, "ppd-natural-language", IPP_TAG_LANGUAGE, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_get_ppds },
|
||||
{ 0, "ppd-product", IPP_TAG_TEXT, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_get_ppds },
|
||||
{ 0, "ppd-psversion", IPP_TAG_TEXT, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_get_ppds },
|
||||
{ 0, "ppd-type", IPP_TAG_KEYWORD, IPP_TAG_OPERATION,
|
||||
IPP_TAG_ZERO,
|
||||
cups_get_ppds },
|
||||
{ 0, "ppd-name", IPP_TAG_NAME, IPP_TAG_PRINTER },
|
||||
{ 0, "ppi", IPP_TAG_INTEGER, IPP_TAG_JOB },
|
||||
{ 0, "ppi-default", IPP_TAG_INTEGER, IPP_TAG_PRINTER },
|
||||
{ 0, "prettyprint", IPP_TAG_BOOLEAN, IPP_TAG_JOB },
|
||||
@@ -393,27 +249,23 @@ cupsEncodeOptions2(
|
||||
cups_option_t *options, /* I - Options */
|
||||
ipp_tag_t group_tag) /* I - Group to encode */
|
||||
{
|
||||
int i, j; /* Looping vars */
|
||||
int count; /* Number of values */
|
||||
char *s, /* Pointer into option value */
|
||||
*val, /* Pointer to option value */
|
||||
*copy, /* Copy of option value */
|
||||
*sep, /* Option separator */
|
||||
quote; /* Quote character */
|
||||
ipp_attribute_t *attr; /* IPP attribute */
|
||||
ipp_tag_t value_tag; /* IPP value tag */
|
||||
cups_option_t *option; /* Current option */
|
||||
ipp_t *collection; /* Collection value */
|
||||
int num_cols; /* Number of collection values */
|
||||
cups_option_t *cols; /* Collection values */
|
||||
ipp_op_t op; /* Operation for this request */
|
||||
const ipp_op_t *ops; /* List of allowed operations */
|
||||
int i, j; /* Looping vars */
|
||||
int count; /* Number of values */
|
||||
char *s, /* Pointer into option value */
|
||||
*val, /* Pointer to option value */
|
||||
*copy, /* Copy of option value */
|
||||
*sep, /* Option separator */
|
||||
quote; /* Quote character */
|
||||
ipp_attribute_t *attr; /* IPP attribute */
|
||||
ipp_tag_t value_tag; /* IPP value tag */
|
||||
cups_option_t *option; /* Current option */
|
||||
ipp_t *collection; /* Collection value */
|
||||
int num_cols; /* Number of collection values */
|
||||
cups_option_t *cols; /* Collection values */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsEncodeOptions2(ipp=%p(%s), num_options=%d, options=%p, "
|
||||
"group_tag=%x)", ipp,
|
||||
ipp ? ippOpString(ippGetOperation(ipp)) : "", num_options,
|
||||
options, group_tag));
|
||||
DEBUG_printf(("cupsEncodeOptions2(ipp=%p, num_options=%d, options=%p, "
|
||||
"group_tag=%x)", ipp, num_options, options, group_tag));
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
@@ -426,18 +278,13 @@ cupsEncodeOptions2(
|
||||
* Do special handling for the document-format/raw options...
|
||||
*/
|
||||
|
||||
op = ippGetOperation(ipp);
|
||||
|
||||
if (group_tag == IPP_TAG_OPERATION &&
|
||||
(op == IPP_OP_PRINT_JOB || op == IPP_OP_PRINT_URI ||
|
||||
op == IPP_OP_SEND_DOCUMENT || op == IPP_OP_SEND_URI))
|
||||
if (group_tag == IPP_TAG_OPERATION)
|
||||
{
|
||||
/*
|
||||
* Handle the document format stuff first...
|
||||
*/
|
||||
|
||||
if ((val = (char *)cupsGetOption("document-format", num_options,
|
||||
options)) != NULL)
|
||||
if ((val = (char *)cupsGetOption("document-format", num_options, options)) != NULL)
|
||||
ippAddString(ipp, IPP_TAG_OPERATION, IPP_TAG_MIMETYPE, "document-format",
|
||||
NULL, val);
|
||||
else if (cupsGetOption("raw", num_options, options))
|
||||
@@ -476,22 +323,6 @@ cupsEncodeOptions2(
|
||||
continue;
|
||||
|
||||
value_tag = match->value_tag;
|
||||
|
||||
if (match->operations)
|
||||
ops = match->operations;
|
||||
else if (group_tag == IPP_TAG_JOB)
|
||||
ops = ipp_job_creation;
|
||||
else if (group_tag == IPP_TAG_DOCUMENT)
|
||||
ops = ipp_doc_creation;
|
||||
else if (group_tag == IPP_TAG_SUBSCRIPTION)
|
||||
ops = ipp_sub_creation;
|
||||
else if (group_tag == IPP_TAG_PRINTER)
|
||||
ops = ipp_set_printer;
|
||||
else
|
||||
{
|
||||
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -505,23 +336,10 @@ cupsEncodeOptions2(
|
||||
strcmp(option->name + namelen - 10, "-supported")))
|
||||
{
|
||||
if (group_tag != IPP_TAG_JOB && group_tag != IPP_TAG_DOCUMENT)
|
||||
{
|
||||
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (group_tag != IPP_TAG_PRINTER)
|
||||
{
|
||||
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (group_tag == IPP_TAG_JOB)
|
||||
ops = ipp_job_creation;
|
||||
else if (group_tag == IPP_TAG_DOCUMENT)
|
||||
ops = ipp_doc_creation;
|
||||
else
|
||||
ops = ipp_set_printer;
|
||||
|
||||
if (!_cups_strcasecmp(option->value, "true") ||
|
||||
!_cups_strcasecmp(option->value, "false"))
|
||||
@@ -530,22 +348,6 @@ cupsEncodeOptions2(
|
||||
value_tag = IPP_TAG_NAME;
|
||||
}
|
||||
|
||||
/*
|
||||
* Verify that we send this attribute for this operation...
|
||||
*/
|
||||
|
||||
while (*ops != IPP_OP_CUPS_NONE)
|
||||
if (op == *ops)
|
||||
break;
|
||||
else
|
||||
ops ++;
|
||||
|
||||
if (*ops == IPP_OP_CUPS_NONE && op != IPP_OP_CUPS_NONE)
|
||||
{
|
||||
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Count the number of values...
|
||||
*/
|
||||
@@ -821,26 +623,6 @@ cupsEncodeOptions2(
|
||||
}
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
* '_ippCheckOptions()' - Validate that the option array is sorted properly.
|
||||
*/
|
||||
|
||||
const char * /* O - First out-of-order option or NULL */
|
||||
_ippCheckOptions(void)
|
||||
{
|
||||
int i; /* Looping var */
|
||||
|
||||
|
||||
for (i = 0; i < (int)(sizeof(ipp_options) / sizeof(ipp_options[0]) - 1); i ++)
|
||||
if (strcmp(ipp_options[i].name, ipp_options[i + 1].name) >= 0)
|
||||
return (ipp_options[i + 1].name);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
|
||||
/*
|
||||
* '_ippFindOption()' - Find the attribute information for an option.
|
||||
*/
|
||||
@@ -878,5 +660,5 @@ compare_ipp_options(_ipp_option_t *a, /* I - First option */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: encode.c 11734 2014-03-25 18:01:47Z msweet $".
|
||||
* End of "$Id: encode.c 7696 2008-06-26 00:54:42Z mike $".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: file-private.h 11642 2014-02-27 15:57:59Z msweet $"
|
||||
* "$Id: file-private.h 3275 2011-05-20 07:26:13Z msweet $"
|
||||
*
|
||||
* Private file definitions for CUPS.
|
||||
*
|
||||
@@ -16,8 +16,6 @@
|
||||
* 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/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_FILE_PRIVATE_H_
|
||||
@@ -135,5 +133,5 @@ extern void _cupsFileCheckFilter(void *context,
|
||||
#endif /* !_CUPS_FILE_PRIVATE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: file-private.h 11642 2014-02-27 15:57:59Z msweet $".
|
||||
* End of "$Id: file-private.h 3275 2011-05-20 07:26:13Z msweet $".
|
||||
*/
|
||||
|
||||
+56
-18
@@ -1,23 +1,61 @@
|
||||
/*
|
||||
* "$Id: file.c 11642 2014-02-27 15:57:59Z msweet $"
|
||||
* "$Id: file.c 7672 2008-06-18 22:03:02Z mike $"
|
||||
*
|
||||
* File functions for CUPS.
|
||||
* File functions for CUPS.
|
||||
*
|
||||
* Since stdio files max out at 256 files on many systems, we have to
|
||||
* write similar functions without this limit. At the same time, using
|
||||
* our own file functions allows us to provide transparent support of
|
||||
* gzip'd print files, PPD files, etc.
|
||||
* Since stdio files max out at 256 files on many systems, we have to
|
||||
* write similar functions without this limit. At the same time, using
|
||||
* our own file functions allows us to provide transparent support of
|
||||
* gzip'd print files, PPD files, etc.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* 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/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
* Contents:
|
||||
*
|
||||
* _cupsFileCheck() - Check the permissions of the given filename.
|
||||
* _cupsFileCheckFilter() - Report file check results as CUPS filter messages.
|
||||
* cupsFileClose() - Close a CUPS file.
|
||||
* cupsFileCompression() - Return whether a file is compressed.
|
||||
* cupsFileEOF() - Return the end-of-file status.
|
||||
* cupsFileFind() - Find a file using the specified path.
|
||||
* cupsFileFlush() - Flush pending output.
|
||||
* cupsFileGetChar() - Get a single character from a file.
|
||||
* cupsFileGetConf() - Get a line from a configuration file.
|
||||
* cupsFileGetLine() - Get a CR and/or LF-terminated line that may
|
||||
* contain binary data.
|
||||
* cupsFileGets() - Get a CR and/or LF-terminated line.
|
||||
* cupsFileLock() - Temporarily lock access to a file.
|
||||
* cupsFileNumber() - Return the file descriptor associated with a CUPS
|
||||
* file.
|
||||
* cupsFileOpen() - Open a CUPS file.
|
||||
* cupsFileOpenFd() - Open a CUPS file using a file descriptor.
|
||||
* cupsFilePeekChar() - Peek at the next character from a file.
|
||||
* cupsFilePrintf() - Write a formatted string.
|
||||
* cupsFilePutChar() - Write a character.
|
||||
* cupsFilePutConf() - Write a configuration line.
|
||||
* cupsFilePuts() - Write a string.
|
||||
* cupsFileRead() - Read from a file.
|
||||
* cupsFileRewind() - Set the current file position to the beginning of
|
||||
* the file.
|
||||
* cupsFileSeek() - Seek in a file.
|
||||
* cupsFileStderr() - Return a CUPS file associated with stderr.
|
||||
* cupsFileStdin() - Return a CUPS file associated with stdin.
|
||||
* cupsFileStdout() - Return a CUPS file associated with stdout.
|
||||
* cupsFileTell() - Return the current file position.
|
||||
* cupsFileUnlock() - Unlock access to a file.
|
||||
* cupsFileWrite() - Write to a file.
|
||||
* cups_compress() - Compress a buffer of data.
|
||||
* cups_fill() - Fill the input buffer.
|
||||
* cups_open() - Safely open a file for writing.
|
||||
* cups_read() - Read from a file descriptor.
|
||||
* cups_write() - Write to a file descriptor.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -2391,8 +2429,8 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */
|
||||
}
|
||||
else
|
||||
{
|
||||
tcrc = ((((((uLong)trailer[3] << 8) | (uLong)trailer[2]) << 8) |
|
||||
(uLong)trailer[1]) << 8) | (uLong)trailer[0];
|
||||
tcrc = (((((trailer[3] << 8) | trailer[2]) << 8) | trailer[1]) << 8) |
|
||||
trailer[0];
|
||||
|
||||
if (tcrc != fp->crc)
|
||||
{
|
||||
@@ -2400,7 +2438,7 @@ cups_fill(cups_file_t *fp) /* I - CUPS file */
|
||||
* Bad CRC, mark end-of-file...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("9cups_fill: tcrc=%08x != fp->crc=%08x",
|
||||
DEBUG_printf(("9cups_fill: tcrc=%08x, fp->crc=%08x",
|
||||
(unsigned int)tcrc, (unsigned int)fp->crc));
|
||||
|
||||
fp->eof = 1;
|
||||
@@ -2672,5 +2710,5 @@ cups_write(cups_file_t *fp, /* I - CUPS file */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: file.c 11642 2014-02-27 15:57:59Z msweet $".
|
||||
* End of "$Id: file.c 7672 2008-06-18 22:03:02Z mike $".
|
||||
*/
|
||||
|
||||
+2
-4
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: file.h 11642 2014-02-27 15:57:59Z msweet $"
|
||||
* "$Id: file.h 7460 2008-04-16 02:19:54Z mike $"
|
||||
*
|
||||
* Public file definitions for CUPS.
|
||||
*
|
||||
@@ -16,8 +16,6 @@
|
||||
* 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/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_FILE_H_
|
||||
@@ -114,5 +112,5 @@ extern ssize_t cupsFileWrite(cups_file_t *fp, const char *buf,
|
||||
#endif /* !_CUPS_FILE_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: file.h 11642 2014-02-27 15:57:59Z msweet $".
|
||||
* End of "$Id: file.h 7460 2008-04-16 02:19:54Z mike $".
|
||||
*/
|
||||
|
||||
+20
-21
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: getdevices.c 4216 2013-03-11 13:57:36Z msweet $"
|
||||
* "$Id: getdevices.c 3794 2012-04-23 22:44:16Z msweet $"
|
||||
*
|
||||
* cupsGetDevices implementation for CUPS.
|
||||
*
|
||||
* Copyright 2008-2013 by Apple Inc.
|
||||
* Copyright 2008-2012 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -71,19 +71,19 @@ cupsGetDevices(
|
||||
user_data));
|
||||
|
||||
if (!callback)
|
||||
return (IPP_STATUS_ERROR_INTERNAL);
|
||||
return (IPP_INTERNAL_ERROR);
|
||||
|
||||
if (!http)
|
||||
http = _cupsConnect();
|
||||
|
||||
if (!http)
|
||||
return (IPP_STATUS_ERROR_SERVICE_UNAVAILABLE);
|
||||
return (IPP_SERVICE_UNAVAILABLE);
|
||||
|
||||
/*
|
||||
* Create a CUPS-Get-Devices request...
|
||||
*/
|
||||
|
||||
request = ippNewRequest(IPP_OP_CUPS_GET_DEVICES);
|
||||
request = ippNewRequest(CUPS_GET_DEVICES);
|
||||
|
||||
if (timeout > 0)
|
||||
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "timeout",
|
||||
@@ -115,14 +115,14 @@ cupsGetDevices(
|
||||
status = cupsSendRequest(http, request, "/", ippLength(request));
|
||||
|
||||
DEBUG_puts("2cupsGetDevices: Waiting for response status...");
|
||||
while (status == HTTP_STATUS_CONTINUE)
|
||||
while (status == HTTP_CONTINUE)
|
||||
status = httpUpdate(http);
|
||||
|
||||
if (status != HTTP_STATUS_OK)
|
||||
if (status != HTTP_OK)
|
||||
{
|
||||
httpFlush(http);
|
||||
|
||||
if (status == HTTP_STATUS_UNAUTHORIZED)
|
||||
if (status == HTTP_UNAUTHORIZED)
|
||||
{
|
||||
/*
|
||||
* See if we can do authentication...
|
||||
@@ -131,16 +131,16 @@ cupsGetDevices(
|
||||
DEBUG_puts("2cupsGetDevices: Need authorization...");
|
||||
|
||||
if (!cupsDoAuthentication(http, "POST", "/"))
|
||||
httpReconnect2(http, 30000, NULL);
|
||||
httpReconnect(http);
|
||||
else
|
||||
{
|
||||
status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
status = HTTP_AUTHORIZATION_CANCELED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
else if (status == HTTP_STATUS_UPGRADE_REQUIRED)
|
||||
else if (status == HTTP_UPGRADE_REQUIRED)
|
||||
{
|
||||
/*
|
||||
* Force a reconnect with encryption...
|
||||
@@ -148,20 +148,19 @@ cupsGetDevices(
|
||||
|
||||
DEBUG_puts("2cupsGetDevices: Need encryption...");
|
||||
|
||||
if (!httpReconnect2(http, 30000, NULL))
|
||||
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
|
||||
if (!httpReconnect(http))
|
||||
httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
}
|
||||
}
|
||||
while (status == HTTP_STATUS_UNAUTHORIZED ||
|
||||
status == HTTP_STATUS_UPGRADE_REQUIRED);
|
||||
while (status == HTTP_UNAUTHORIZED || status == HTTP_UPGRADE_REQUIRED);
|
||||
|
||||
DEBUG_printf(("2cupsGetDevices: status=%d", status));
|
||||
|
||||
ippDelete(request);
|
||||
|
||||
if (status != HTTP_STATUS_OK)
|
||||
if (status != HTTP_OK)
|
||||
{
|
||||
_cupsSetHTTPError(status);
|
||||
return (cupsLastError());
|
||||
@@ -187,7 +186,7 @@ cupsGetDevices(
|
||||
|
||||
do
|
||||
{
|
||||
if ((state = ippRead(http, response)) == IPP_STATE_ERROR)
|
||||
if ((state = ippRead(http, response)) == IPP_ERROR)
|
||||
break;
|
||||
|
||||
DEBUG_printf(("2cupsGetDevices: state=%d, response->last=%p", state,
|
||||
@@ -241,7 +240,7 @@ cupsGetDevices(
|
||||
device_uri = attr->values[0].string.text;
|
||||
}
|
||||
}
|
||||
while (state != IPP_STATE_DATA);
|
||||
while (state != IPP_DATA);
|
||||
|
||||
DEBUG_printf(("2cupsGetDevices: state=%d, response->last=%p", state,
|
||||
response->last));
|
||||
@@ -258,8 +257,8 @@ cupsGetDevices(
|
||||
httpBlocking(http, blocking);
|
||||
httpFlush(http);
|
||||
|
||||
if (status == HTTP_STATUS_ERROR)
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(http->error), 0);
|
||||
if (status == HTTP_ERROR)
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(http->error), 0);
|
||||
else
|
||||
{
|
||||
attr = ippFindAttribute(response, "status-message", IPP_TAG_TEXT);
|
||||
@@ -280,5 +279,5 @@ cupsGetDevices(
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: getdevices.c 4216 2013-03-11 13:57:36Z msweet $".
|
||||
* End of "$Id: getdevices.c 3794 2012-04-23 22:44:16Z msweet $".
|
||||
*/
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: getifaddrs.c 10996 2013-05-29 11:51:34Z msweet $"
|
||||
* "$Id: getifaddrs.c 6649 2007-07-11 21:46:42Z mike $"
|
||||
*
|
||||
* Network interface functions for CUPS.
|
||||
*
|
||||
@@ -262,5 +262,5 @@ _cups_freeifaddrs(struct ifaddrs *addrs)/* I - Interface list to free */
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: getifaddrs.c 10996 2013-05-29 11:51:34Z msweet $".
|
||||
* End of "$Id: getifaddrs.c 6649 2007-07-11 21:46:42Z mike $".
|
||||
*/
|
||||
|
||||
+52
-72
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* "$Id: getputfile.c 11153 2013-07-17 14:10:21Z msweet $"
|
||||
* "$Id: getputfile.c 7359 2008-02-29 19:01:35Z mike $"
|
||||
*
|
||||
* Get/put file functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 1997-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -39,7 +39,7 @@
|
||||
/*
|
||||
* 'cupsGetFd()' - Get a file from the server.
|
||||
*
|
||||
* This function returns @code HTTP_STATUS_OK@ when the file is successfully retrieved.
|
||||
* This function returns @code HTTP_OK@ when the file is successfully retrieved.
|
||||
*
|
||||
* @since CUPS 1.1.20/OS X 10.4@
|
||||
*/
|
||||
@@ -68,12 +68,12 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
if (http)
|
||||
http->error = EINVAL;
|
||||
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
if (!http)
|
||||
if ((http = _cupsConnect()) == NULL)
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
|
||||
/*
|
||||
* Then send GET requests to the HTTP server...
|
||||
@@ -84,37 +84,27 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
|
||||
do
|
||||
{
|
||||
if (!_cups_strcasecmp(httpGetField(http, HTTP_FIELD_CONNECTION), "close"))
|
||||
{
|
||||
httpClearFields(http);
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
httpClearFields(http);
|
||||
httpSetField(http, HTTP_FIELD_AUTHORIZATION, http->authstring);
|
||||
httpSetField(http, HTTP_FIELD_IF_MODIFIED_SINCE, if_modified_since);
|
||||
|
||||
if (httpGet(http, resource))
|
||||
{
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
status = HTTP_STATUS_UNAUTHORIZED;
|
||||
status = HTTP_UNAUTHORIZED;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE);
|
||||
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
|
||||
|
||||
if (status == HTTP_STATUS_UNAUTHORIZED)
|
||||
if (status == HTTP_UNAUTHORIZED)
|
||||
{
|
||||
/*
|
||||
* Flush any error message...
|
||||
@@ -128,46 +118,46 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
|
||||
if (cupsDoAuthentication(http, "GET", resource))
|
||||
{
|
||||
status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
status = HTTP_AUTHORIZATION_CANCELED;
|
||||
break;
|
||||
}
|
||||
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
#ifdef HAVE_SSL
|
||||
else if (status == HTTP_STATUS_UPGRADE_REQUIRED)
|
||||
else if (status == HTTP_UPGRADE_REQUIRED)
|
||||
{
|
||||
/* Flush any error message... */
|
||||
httpFlush(http);
|
||||
|
||||
/* Reconnect... */
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Upgrade with encryption... */
|
||||
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
|
||||
httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
|
||||
|
||||
/* Try again, this time with encryption enabled... */
|
||||
continue;
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
}
|
||||
while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED);
|
||||
while (status == HTTP_UNAUTHORIZED || status == HTTP_UPGRADE_REQUIRED);
|
||||
|
||||
/*
|
||||
* See if we actually got the file or an error...
|
||||
*/
|
||||
|
||||
if (status == HTTP_STATUS_OK)
|
||||
if (status == HTTP_OK)
|
||||
{
|
||||
/*
|
||||
* Yes, copy the file...
|
||||
@@ -195,7 +185,7 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
/*
|
||||
* 'cupsGetFile()' - Get a file from the server.
|
||||
*
|
||||
* This function returns @code HTTP_STATUS_OK@ when the file is successfully retrieved.
|
||||
* This function returns @code HTTP_OK@ when the file is successfully retrieved.
|
||||
*
|
||||
* @since CUPS 1.1.20/OS X 10.4@
|
||||
*/
|
||||
@@ -218,7 +208,7 @@ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
|
||||
if (http)
|
||||
http->error = EINVAL;
|
||||
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -233,7 +223,7 @@ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
|
||||
|
||||
http->error = errno;
|
||||
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -248,7 +238,7 @@ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
|
||||
|
||||
close(fd);
|
||||
|
||||
if (status != HTTP_STATUS_OK)
|
||||
if (status != HTTP_OK)
|
||||
unlink(filename);
|
||||
|
||||
/*
|
||||
@@ -262,7 +252,7 @@ cupsGetFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
|
||||
/*
|
||||
* 'cupsPutFd()' - Put a file on the server.
|
||||
*
|
||||
* This function returns @code HTTP_STATUS_CREATED@ when the file is stored
|
||||
* This function returns @code HTTP_CREATED@ when the file is stored
|
||||
* successfully.
|
||||
*
|
||||
* @since CUPS 1.1.20/OS X 10.4@
|
||||
@@ -291,12 +281,12 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
if (http)
|
||||
http->error = EINVAL;
|
||||
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
if (!http)
|
||||
if ((http = _cupsConnect()) == NULL)
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
|
||||
/*
|
||||
* Then send PUT requests to the HTTP server...
|
||||
@@ -306,34 +296,24 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
|
||||
do
|
||||
{
|
||||
if (!_cups_strcasecmp(httpGetField(http, HTTP_FIELD_CONNECTION), "close"))
|
||||
{
|
||||
httpClearFields(http);
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG_printf(("2cupsPutFd: starting attempt, authstring=\"%s\"...",
|
||||
http->authstring));
|
||||
|
||||
httpClearFields(http);
|
||||
httpSetField(http, HTTP_FIELD_AUTHORIZATION, http->authstring);
|
||||
httpSetField(http, HTTP_FIELD_TRANSFER_ENCODING, "chunked");
|
||||
httpSetExpect(http, HTTP_STATUS_CONTINUE);
|
||||
httpSetExpect(http, HTTP_CONTINUE);
|
||||
|
||||
if (httpPut(http, resource))
|
||||
{
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
status = HTTP_STATUS_UNAUTHORIZED;
|
||||
status = HTTP_UNAUTHORIZED;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -345,9 +325,9 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
if (httpWait(http, 1000))
|
||||
status = httpUpdate(http);
|
||||
else
|
||||
status = HTTP_STATUS_CONTINUE;
|
||||
status = HTTP_CONTINUE;
|
||||
|
||||
if (status == HTTP_STATUS_CONTINUE)
|
||||
if (status == HTTP_CONTINUE)
|
||||
{
|
||||
/*
|
||||
* Copy the file...
|
||||
@@ -358,21 +338,21 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
while ((bytes = read(fd, buffer, sizeof(buffer))) > 0)
|
||||
if (httpCheck(http))
|
||||
{
|
||||
if ((status = httpUpdate(http)) != HTTP_STATUS_CONTINUE)
|
||||
if ((status = httpUpdate(http)) != HTTP_CONTINUE)
|
||||
break;
|
||||
}
|
||||
else
|
||||
httpWrite2(http, buffer, bytes);
|
||||
}
|
||||
|
||||
if (status == HTTP_STATUS_CONTINUE)
|
||||
if (status == HTTP_CONTINUE)
|
||||
{
|
||||
httpWrite2(http, buffer, 0);
|
||||
|
||||
while ((status = httpUpdate(http)) == HTTP_STATUS_CONTINUE);
|
||||
while ((status = httpUpdate(http)) == HTTP_CONTINUE);
|
||||
}
|
||||
|
||||
if (status == HTTP_STATUS_ERROR && !retries)
|
||||
if (status == HTTP_ERROR && !retries)
|
||||
{
|
||||
DEBUG_printf(("2cupsPutFd: retry on status %d", status));
|
||||
|
||||
@@ -382,9 +362,9 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
httpFlush(http);
|
||||
|
||||
/* Reconnect... */
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -394,7 +374,7 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
|
||||
DEBUG_printf(("2cupsPutFd: status=%d", status));
|
||||
|
||||
if (status == HTTP_STATUS_UNAUTHORIZED)
|
||||
if (status == HTTP_UNAUTHORIZED)
|
||||
{
|
||||
/*
|
||||
* Flush any error message...
|
||||
@@ -408,47 +388,47 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
|
||||
if (cupsDoAuthentication(http, "PUT", resource))
|
||||
{
|
||||
status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
status = HTTP_AUTHORIZATION_CANCELED;
|
||||
break;
|
||||
}
|
||||
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
#ifdef HAVE_SSL
|
||||
else if (status == HTTP_STATUS_UPGRADE_REQUIRED)
|
||||
else if (status == HTTP_UPGRADE_REQUIRED)
|
||||
{
|
||||
/* Flush any error message... */
|
||||
httpFlush(http);
|
||||
|
||||
/* Reconnect... */
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
status = HTTP_STATUS_ERROR;
|
||||
status = HTTP_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Upgrade with encryption... */
|
||||
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
|
||||
httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
|
||||
|
||||
/* Try again, this time with encryption enabled... */
|
||||
continue;
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
}
|
||||
while (status == HTTP_STATUS_UNAUTHORIZED || status == HTTP_STATUS_UPGRADE_REQUIRED ||
|
||||
(status == HTTP_STATUS_ERROR && retries < 2));
|
||||
while (status == HTTP_UNAUTHORIZED || status == HTTP_UPGRADE_REQUIRED ||
|
||||
(status == HTTP_ERROR && retries < 2));
|
||||
|
||||
/*
|
||||
* See if we actually put the file or an error...
|
||||
*/
|
||||
|
||||
if (status != HTTP_STATUS_CREATED)
|
||||
if (status != HTTP_CREATED)
|
||||
{
|
||||
_cupsSetHTTPError(status);
|
||||
httpFlush(http);
|
||||
@@ -487,7 +467,7 @@ cupsPutFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
|
||||
if (http)
|
||||
http->error = EINVAL;
|
||||
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -502,7 +482,7 @@ cupsPutFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
|
||||
|
||||
http->error = errno;
|
||||
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -518,5 +498,5 @@ cupsPutFile(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DE
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id: getputfile.c 11153 2013-07-17 14:10:21Z msweet $".
|
||||
* End of "$Id: getputfile.c 7359 2008-02-29 19:01:35Z mike $".
|
||||
*/
|
||||
|
||||
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário