Comparar commits
1 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| 45a6252b81 |
@@ -1,207 +0,0 @@
|
||||
CHANGES-1.6.txt
|
||||
---------------
|
||||
|
||||
CHANGES IN CUPS V1.6.3
|
||||
|
||||
- The configure script now prefers Clang over GCC.
|
||||
- Fixed a compile problem on AIX (STR #4307)
|
||||
- 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,158 +0,0 @@
|
||||
CHANGES-IPPTOOL.txt - 2013-05-02
|
||||
--------------------------------
|
||||
|
||||
This file provides a list of changes to the ipptool binary distribution posted
|
||||
on cups.org.
|
||||
|
||||
2013-05-02
|
||||
|
||||
- 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.
|
||||
+179
-34
@@ -1,37 +1,182 @@
|
||||
CHANGES.txt - 1.7b1 - 2013-04-18
|
||||
CHANGES.txt - 1.6.2 - 2013-03-18
|
||||
--------------------------------
|
||||
|
||||
CHANGES IN CUPS V1.7b1
|
||||
|
||||
- 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)
|
||||
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)
|
||||
|
||||
+12
-10
@@ -1,4 +1,4 @@
|
||||
INSTALL - CUPS v1.7b1 - 2013-04-18
|
||||
INSTALL - CUPS v1.6.2 - 2013-03-18
|
||||
----------------------------------
|
||||
|
||||
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
|
||||
|
||||
+6
-29
@@ -1,4 +1,4 @@
|
||||
IPPTOOL.txt - 2013-05-02
|
||||
IPPTOOL.txt - 2012-02-06
|
||||
------------------------
|
||||
|
||||
See the file CHANGES-IPPTOOL.txt for a list of changes to this software.
|
||||
@@ -54,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
|
||||
@@ -114,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:
|
||||
@@ -123,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
|
||||
|
||||
@@ -139,18 +128,6 @@ CONFORMANCE TESTS
|
||||
printer.
|
||||
|
||||
|
||||
IPP EVERYWHERE TESTING
|
||||
|
||||
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.
|
||||
|
||||
|
||||
READING THE DOCUMENTATION
|
||||
|
||||
The command usage is described in the ipptest(1) man page, while the file
|
||||
@@ -197,7 +174,7 @@ REPORTING BUGS
|
||||
|
||||
LEGAL STUFF
|
||||
|
||||
CUPS is Copyright 2007-2013 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.
|
||||
|
||||
@@ -316,6 +316,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
|
||||
|
||||
+1
-9
@@ -1,14 +1,6 @@
|
||||
README - CUPS v1.7b1 - 2013-04-18
|
||||
README - CUPS v1.6.2 - 2013-03-18
|
||||
---------------------------------
|
||||
|
||||
************************************************
|
||||
************************************************
|
||||
**** ****
|
||||
**** BETA SOFTWARE - USE AT YOUR OWN RISK ****
|
||||
**** ****
|
||||
************************************************
|
||||
************************************************
|
||||
|
||||
Looking for compile instructions? Read the file "INSTALL.txt" instead...
|
||||
|
||||
|
||||
|
||||
+1
-2
@@ -134,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
|
||||
|
||||
|
||||
+6
-50
@@ -1031,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 */
|
||||
|
||||
|
||||
@@ -1080,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;
|
||||
@@ -1136,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] == '(')
|
||||
@@ -1150,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 ||
|
||||
@@ -1208,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
|
||||
|
||||
+202
-495
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+2
-2
@@ -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...
|
||||
|
||||
+32
-32
@@ -163,7 +163,7 @@ static const int prtMarkerSuppliesSupplyUnit[] =
|
||||
sizeof(prtMarkerSuppliesSupplyUnit[0]));
|
||||
/* Offset to supply index */
|
||||
|
||||
static const backend_state_t printer_states[] =
|
||||
static const backend_state_t const printer_states[] =
|
||||
{
|
||||
/* { CUPS_TC_lowPaper, "media-low-report" }, */
|
||||
{ CUPS_TC_noPaper | CUPS_TC_inputTrayEmpty, "media-empty-warning" },
|
||||
@@ -180,7 +180,7 @@ static const backend_state_t printer_states[] =
|
||||
{ CUPS_TC_outputFull, "output-area-full-warning" }
|
||||
};
|
||||
|
||||
static const backend_state_t supply_states[] =
|
||||
static const backend_state_t const supply_states[] =
|
||||
{
|
||||
{ CUPS_DEVELOPER_LOW, "developer-low-report" },
|
||||
{ CUPS_DEVELOPER_EMPTY, "developer-empty-warning" },
|
||||
@@ -318,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);
|
||||
@@ -458,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"
|
||||
@@ -682,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,
|
||||
@@ -697,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);
|
||||
@@ -745,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);
|
||||
@@ -814,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;
|
||||
}
|
||||
}
|
||||
|
||||
+16
-1
@@ -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)
|
||||
{
|
||||
/*
|
||||
|
||||
+1
-13
@@ -667,19 +667,7 @@ 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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+24
-98
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* Copyright 2005-2013 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
|
||||
@@ -96,7 +96,6 @@
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#include <IOKit/usb/IOUSBLib.h>
|
||||
#include <IOKit/IOCFPlugIn.h>
|
||||
#include <libproc.h>
|
||||
|
||||
#include <spawn.h>
|
||||
#include <pthread.h>
|
||||
@@ -135,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
|
||||
@@ -200,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 */
|
||||
@@ -280,7 +259,6 @@ typedef struct globals_s
|
||||
*/
|
||||
|
||||
globals_t g = { 0 }; /* Globals */
|
||||
int Iterating = 0; /* Are we iterating the bus? */
|
||||
|
||||
|
||||
/*
|
||||
@@ -315,7 +293,6 @@ 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);
|
||||
@@ -367,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...
|
||||
*/
|
||||
@@ -505,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);
|
||||
@@ -714,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)
|
||||
@@ -737,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)
|
||||
@@ -1107,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);
|
||||
|
||||
@@ -1132,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);
|
||||
@@ -1146,8 +1114,6 @@ static void iterate_printers(iterator_callback_t callBack,
|
||||
}
|
||||
mach_port_deallocate(mach_task_self(), masterPort);
|
||||
}
|
||||
|
||||
Iterating = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1171,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)
|
||||
@@ -1214,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)
|
||||
@@ -1436,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));
|
||||
@@ -1603,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;
|
||||
|
||||
*deviceID = NULL;
|
||||
CFStringRef devID = NULL,
|
||||
|
||||
deviceMake = NULL,
|
||||
deviceModel = NULL,
|
||||
deviceSerial = NULL;
|
||||
|
||||
OSStatus err = (*classdriver)->GetDeviceID(classdriver, &devID, DEFAULT_TIMEOUT);
|
||||
|
||||
@@ -1654,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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1674,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;
|
||||
@@ -1733,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);
|
||||
|
||||
@@ -2142,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.
|
||||
@@ -2238,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);
|
||||
}
|
||||
|
||||
+3
-19
@@ -142,12 +142,8 @@ static const struct quirk_printer_struct quirk_printers[] = {
|
||||
{ 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
|
||||
@@ -162,8 +158,6 @@ static const struct quirk_printer_struct quirk_printers[] = {
|
||||
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 */
|
||||
@@ -171,33 +165,24 @@ static const struct quirk_printer_struct quirk_printers[] = {
|
||||
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,
|
||||
{ 0x04b8, 0x0001, USBLP_QUIRK_BIDIR }, /* 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 */
|
||||
/* Prolific Technology, Inc. PL2305 Parallel Port
|
||||
(USB -> Parallel adapter), https://bugs.launchpad.net/bugs/987485 */
|
||||
{ 0x04e8, 0x0000, USBLP_QUIRK_RESET }, /* All Samsung devices,
|
||||
https://bugs.launchpad.net/bugs/1032456 */
|
||||
{ 0x0a5f, 0x0000, USBLP_QUIRK_BIDIR }, /* All Zebra devices,
|
||||
@@ -230,7 +215,6 @@ static const struct quirk_printer_struct quirk_printers[] = {
|
||||
{ 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 }
|
||||
};
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -88,7 +88,6 @@ install-exec:
|
||||
$(INSTALL_DIR) $(SYMROOT); \
|
||||
for file in $(TARGETS); do \
|
||||
cp $$file $(SYMROOT); \
|
||||
dsymutil $(SYMROOT)/$$file; \
|
||||
done \
|
||||
fi
|
||||
|
||||
|
||||
+1
-1
@@ -527,7 +527,7 @@ show_jobs(const char *command, /* I - Command name */
|
||||
*/
|
||||
|
||||
if (jobstate == IPP_JOB_PROCESSING)
|
||||
strlcpy(rankstr, "active", sizeof(rankstr));
|
||||
strcpy(rankstr, "active");
|
||||
else
|
||||
{
|
||||
/*
|
||||
|
||||
@@ -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:
|
||||
|
||||
+5
-5
@@ -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);
|
||||
@@ -4187,7 +4187,7 @@ get_option_value(
|
||||
if (bufptr == buffer || (bufend - bufptr) < 2)
|
||||
return (NULL);
|
||||
|
||||
memcpy(bufptr, "}", 2);
|
||||
strcpy(bufptr, "}");
|
||||
}
|
||||
|
||||
return (buffer);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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)))
|
||||
{
|
||||
|
||||
+2
-2
@@ -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,7 +554,7 @@ 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"
|
||||
|
||||
+1
-1
@@ -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);
|
||||
}
|
||||
|
||||
+7
-7
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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
|
||||
{
|
||||
/*
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# 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
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# "$Id$"
|
||||
# "$Id: mime.types 9871 2011-08-06 06:34:46Z mike $"
|
||||
#
|
||||
# Base MIME types file for CUPS.
|
||||
#
|
||||
@@ -170,5 +170,5 @@ application/vnd.cups-raw (string(0,<1B>E) + !string(2,<1B>%0B)) \
|
||||
application/octet-stream
|
||||
|
||||
#
|
||||
# End of "$Id$".
|
||||
# End of "$Id: mime.types 9871 2011-08-06 06:34:46Z mike $".
|
||||
#
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-common.m4 10785 2013-01-08 16:29:26Z mike $"
|
||||
dnl
|
||||
dnl Common configuration 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
|
||||
@@ -20,7 +20,7 @@ dnl Set the name of the config header file...
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
|
||||
dnl Version number information...
|
||||
CUPS_VERSION="1.7b1"
|
||||
CUPS_VERSION="1.6.2"
|
||||
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'`"
|
||||
@@ -44,9 +44,9 @@ LDFLAGS="${LDFLAGS:=}"
|
||||
|
||||
dnl Checks for programs...
|
||||
AC_PROG_AWK
|
||||
AC_PROG_CC(clang cc gcc)
|
||||
AC_PROG_CC
|
||||
AC_PROG_CPP
|
||||
AC_PROG_CXX(clang++ c++ g++)
|
||||
AC_PROG_CXX
|
||||
AC_PROG_RANLIB
|
||||
AC_PATH_PROG(AR,ar)
|
||||
AC_PATH_PROG(CHMOD,chmod)
|
||||
@@ -264,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))
|
||||
@@ -306,7 +305,7 @@ else
|
||||
DBUSDIR=""
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(dbus, [ --disable-dbus build without DBUS support])
|
||||
AC_ARG_ENABLE(dbus, [ --enable-dbus build with DBUS support])
|
||||
AC_ARG_WITH(dbusdir, [ --with-dbusdir set DBUS configuration directory ],
|
||||
DBUSDIR="$withval")
|
||||
|
||||
@@ -338,7 +337,6 @@ AC_SUBST(DBUS_NOTIFIERLIBS)
|
||||
|
||||
dnl Extra platform-specific libraries...
|
||||
CUPS_DEFAULT_PRINTOPERATOR_AUTH="@SYSTEM"
|
||||
CUPS_DEFAULT_SYSTEM_AUTHKEY=""
|
||||
CUPS_SYSTEM_AUTHKEY=""
|
||||
INSTALLXPC=""
|
||||
|
||||
@@ -386,13 +384,10 @@ case $uname in
|
||||
|
||||
if test "x$default_adminkey" != xdefault; then
|
||||
CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey $default_adminkey"
|
||||
CUPS_DEFAULT_SYSTEM_AUTHKEY="$default_adminkey"
|
||||
elif grep -q system.print.operator /etc/authorization; then
|
||||
CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.print.admin"
|
||||
CUPS_DEFAULT_SYSTEM_AUTHKEY="system.print.admin"
|
||||
else
|
||||
CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.preferences"
|
||||
CUPS_DEFAULT_SYSTEM_AUTHKEY="system.preferences"
|
||||
fi
|
||||
|
||||
if test "x$default_operkey" != xdefault; then
|
||||
@@ -430,7 +425,6 @@ esac
|
||||
|
||||
AC_SUBST(CUPS_DEFAULT_PRINTOPERATOR_AUTH)
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTOPERATOR_AUTH, "$CUPS_DEFAULT_PRINTOPERATOR_AUTH")
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_SYSTEM_AUTHKEY, "$CUPS_DEFAULT_SYSTEM_AUTHKEY")
|
||||
AC_SUBST(CUPS_SYSTEM_AUTHKEY)
|
||||
AC_SUBST(INSTALLXPC)
|
||||
|
||||
@@ -459,5 +453,5 @@ esac
|
||||
AC_SUBST(BUILDDIRS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-common.m4 10785 2013-01-08 16:29:26Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-compiler.m4 10190 2012-01-20 16:22:58Z mike $"
|
||||
dnl
|
||||
dnl Compiler 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
|
||||
@@ -114,38 +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"
|
||||
CFLAGS="$CFLAGS -fPIE"
|
||||
AC_TRY_COMPILE(,,
|
||||
[case "$CC" in
|
||||
*clang)
|
||||
PIEFLAGS="-fPIE -Wl,-pie"
|
||||
;;
|
||||
*)
|
||||
PIEFLAGS="-fPIE -pie"
|
||||
;;
|
||||
esac
|
||||
AC_MSG_RESULT(yes)],
|
||||
AC_MSG_RESULT(no))
|
||||
CFLAGS="$OLDCFLAGS"
|
||||
fi
|
||||
# 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"
|
||||
;;
|
||||
*)
|
||||
PIEFLAGS="-fPIE -pie"
|
||||
;;
|
||||
esac
|
||||
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...
|
||||
@@ -211,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
|
||||
@@ -291,5 +295,5 @@ case $uname in
|
||||
esac
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-compiler.m4 10190 2012-01-20 16:22:58Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-defaults.m4 10710 2012-11-26 18:26:01Z mike $"
|
||||
dnl
|
||||
dnl Default cupsd configuration settings for CUPS.
|
||||
dnl
|
||||
@@ -400,5 +400,5 @@ AC_SUBST(CUPS_WEBIF)
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_WEBIF, $CUPS_DEFAULT_WEBIF)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-defaults.m4 10710 2012-11-26 18:26:01Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-directories.m4 10622 2012-10-01 01:55:23Z 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,20 +422,19 @@ 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)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-directories.m4 10622 2012-10-01 01:55:23Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-dnssd.m4 10471 2012-05-16 22:57:03Z mike $"
|
||||
dnl
|
||||
dnl DNS Service Discovery (aka Bonjour) stuff for CUPS.
|
||||
dnl
|
||||
@@ -72,5 +72,5 @@ AC_SUBST(DNSSDLIBS)
|
||||
AC_SUBST(DNSSD_BACKEND)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-dnssd.m4 10471 2012-05-16 22:57:03Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-gssapi.m4 10785 2013-01-08 16:29:26Z mike $"
|
||||
dnl
|
||||
dnl GSSAPI/Kerberos library detection for CUPS.
|
||||
dnl
|
||||
@@ -158,5 +158,5 @@ AC_SUBST(CUPS_DEFAULT_GSSSERVICENAME)
|
||||
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_GSSSERVICENAME, "$CUPS_DEFAULT_GSSSERVICENAME")
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-gssapi.m4 10785 2013-01-08 16:29:26Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-largefile.m4 9771 2011-05-12 05:21:56Z mike $"
|
||||
dnl
|
||||
dnl Large file support stuff for CUPS.
|
||||
dnl
|
||||
@@ -48,5 +48,5 @@ fi
|
||||
AC_CHECK_FUNC(strtoll, AC_DEFINE(HAVE_STRTOLL))
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-largefile.m4 9771 2011-05-12 05:21:56Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-launchd.m4 8983 2010-02-13 02:20:23Z mike $"
|
||||
dnl
|
||||
dnl launchd stuff for CUPS.
|
||||
dnl
|
||||
@@ -39,5 +39,5 @@ AC_SUBST(DEFAULT_LAUNCHD_CONF)
|
||||
AC_SUBST(LAUNCHDLIBS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-launchd.m4 8983 2010-02-13 02:20:23Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-libtool.m4 9771 2011-05-12 05:21:56Z mike $"
|
||||
dnl
|
||||
dnl Libtool stuff for CUPS.
|
||||
dnl
|
||||
@@ -35,5 +35,5 @@ if test x$LIBTOOL != x; then
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-libtool.m4 9771 2011-05-12 05:21:56Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-manpages.m4 10424 2012-04-23 17:26:57Z mike $"
|
||||
dnl
|
||||
dnl Manpage stuff for CUPS.
|
||||
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
|
||||
@@ -78,5 +92,5 @@ AC_SUBST(MAN8EXT)
|
||||
AC_SUBST(MAN8DIR)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-manpages.m4 10424 2012-04-23 17:26:57Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-network.m4 9771 2011-05-12 05:21:56Z mike $"
|
||||
dnl
|
||||
dnl Networking stuff for CUPS.
|
||||
dnl
|
||||
@@ -70,5 +70,5 @@ AC_CHECK_HEADERS(AppleTalk/at_proto.h,AC_DEFINE(HAVE_APPLETALK_AT_PROTO_H),,
|
||||
[#include <netat/appletalk.h>])
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-network.m4 9771 2011-05-12 05:21:56Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-opsys.m4 9771 2011-05-12 05:21:56Z 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,21 +19,17 @@ 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"
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-opsys.m4 9771 2011-05-12 05:21:56Z mike $"
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-pam.m4 10424 2012-04-23 17:26:57Z mike $"
|
||||
dnl
|
||||
dnl PAM stuff for CUPS.
|
||||
dnl
|
||||
@@ -98,5 +98,5 @@ AC_SUBST(PAMMOD)
|
||||
AC_SUBST(PAMMODAUTH)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-pam.m4 10424 2012-04-23 17:26:57Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-poll.m4 9771 2011-05-12 05:21:56Z mike $"
|
||||
dnl
|
||||
dnl Select/poll stuff for CUPS.
|
||||
dnl
|
||||
@@ -18,5 +18,5 @@ AC_CHECK_FUNC(epoll_create, AC_DEFINE(HAVE_EPOLL))
|
||||
AC_CHECK_FUNC(kqueue, AC_DEFINE(HAVE_KQUEUE))
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-poll.m4 9771 2011-05-12 05:21:56Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-scripting.m4 9927 2011-08-27 09:28:30Z mike $"
|
||||
dnl
|
||||
dnl Scripting configuration stuff for CUPS.
|
||||
dnl
|
||||
@@ -85,5 +85,5 @@ if test "x$CUPS_PYTHON" != x; then
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-scripting.m4 9927 2011-08-27 09:28:30Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-sharedlibs.m4 10190 2012-01-20 16:22:58Z mike $"
|
||||
dnl
|
||||
dnl Shared library support for CUPS.
|
||||
dnl
|
||||
@@ -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"
|
||||
@@ -234,5 +234,5 @@ AC_SUBST(IMGLIBS)
|
||||
AC_SUBST(EXPORT_LDFLAGS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-sharedlibs.m4 10190 2012-01-20 16:22:58Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-ssl.m4 10710 2012-11-26 18:26:01Z mike $"
|
||||
dnl
|
||||
dnl OpenSSL/GNUTLS stuff for CUPS.
|
||||
dnl
|
||||
@@ -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
|
||||
|
||||
@@ -157,5 +184,5 @@ EXPORT_SSLLIBS="$SSLLIBS"
|
||||
AC_SUBST(EXPORT_SSLLIBS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-ssl.m4 10710 2012-11-26 18:26:01Z mike $".
|
||||
dnl
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
dnl
|
||||
dnl "$Id$"
|
||||
dnl "$Id: cups-threads.m4 9771 2011-05-12 05:21:56Z mike $"
|
||||
dnl
|
||||
dnl Threading stuff for CUPS.
|
||||
dnl
|
||||
@@ -50,5 +50,5 @@ fi
|
||||
AC_SUBST(PTHREAD_FLAGS)
|
||||
|
||||
dnl
|
||||
dnl End of "$Id$".
|
||||
dnl End of "$Id: cups-threads.m4 9771 2011-05-12 05:21:56Z mike $".
|
||||
dnl
|
||||
|
||||
+40
-4
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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
|
||||
@@ -32,7 +32,6 @@
|
||||
#define CUPS_DEFAULT_GROUP "sys"
|
||||
#define CUPS_DEFAULT_SYSTEM_GROUPS "sys root system"
|
||||
#define CUPS_DEFAULT_PRINTOPERATOR_AUTH "@SYSTEM"
|
||||
#define CUPS_DEFAULT_SYSTEM_AUTHKEY "system.print.admin"
|
||||
|
||||
|
||||
/*
|
||||
@@ -132,11 +131,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 +167,13 @@
|
||||
#undef HAVE_CRYPT_H
|
||||
|
||||
|
||||
/*
|
||||
* Do we have <scsi/sg.h>?
|
||||
*/
|
||||
|
||||
#undef HAVE_SCSI_SG_H
|
||||
|
||||
|
||||
/*
|
||||
* Use <stdint.h>?
|
||||
*/
|
||||
@@ -316,6 +324,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?
|
||||
*/
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ dnl "$Id$"
|
||||
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
|
||||
|
||||
+3
-21
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# 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 \
|
||||
@@ -201,14 +192,6 @@ depend:
|
||||
$(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies
|
||||
|
||||
|
||||
#
|
||||
# Run oclint to check code coverage...
|
||||
#
|
||||
|
||||
oclint:
|
||||
oclint -o=oclint.html -html $(LIBOBJS:.o=.c) -- $(ALL_CFLAGS)
|
||||
|
||||
|
||||
#
|
||||
# Install all targets...
|
||||
#
|
||||
@@ -268,7 +251,6 @@ install-libs: $(INSTALLSTATIC)
|
||||
if test "x$(SYMROOT)" != "x"; then \
|
||||
$(INSTALL_DIR) $(SYMROOT); \
|
||||
cp $(LIBCUPS) $(SYMROOT); \
|
||||
dsymutil $(SYMROOT)/$(LIBCUPS); \
|
||||
fi
|
||||
|
||||
installstatic:
|
||||
@@ -536,8 +518,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
|
||||
|
||||
+43
-43
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-array.header 9771 2011-05-12 05:21:56Z mike $"
|
||||
|
||||
Array API header for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-array.shtml 9727 2011-04-28 21:20:12Z mike $"
|
||||
|
||||
Array API introduction for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-cups.header 9771 2011-05-12 05:21:56Z mike $"
|
||||
|
||||
CUPS API header for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-cups.shtml 9727 2011-04-28 21:20:12Z mike $"
|
||||
|
||||
API introduction for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-filedir.header 9771 2011-05-12 05:21:56Z mike $"
|
||||
|
||||
File and Directory API header for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-filedir.shtml 9727 2011-04-28 21:20:12Z mike $"
|
||||
|
||||
File and directory API introduction for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-filter.header 9771 2011-05-12 05:21:56Z mike $"
|
||||
|
||||
Filter and backend programming header for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-filter.shtml 10424 2012-04-23 17:26:57Z mike $"
|
||||
|
||||
Filter and backend programming introduction for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-httpipp.header 9771 2011-05-12 05:21:56Z mike $"
|
||||
|
||||
HTTP and IPP API header for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-httpipp.shtml 10388 2012-03-26 21:15:41Z mike $"
|
||||
|
||||
HTTP and IPP API introduction for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-ppd.header 10424 2012-04-23 17:26:57Z mike $"
|
||||
|
||||
PPD API header for CUPS.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--
|
||||
"$Id$"
|
||||
"$Id: api-ppd.shtml 10424 2012-04-23 17:26:57Z mike $"
|
||||
|
||||
PPD API introduction for CUPS.
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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
|
||||
}
|
||||
|
||||
+8
-48
@@ -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);
|
||||
}
|
||||
|
||||
+10
-17
@@ -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);
|
||||
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
+1
-14
@@ -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 */
|
||||
};
|
||||
|
||||
|
||||
|
||||
+7
-36
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* API definitions 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
|
||||
@@ -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.0700
|
||||
# define CUPS_VERSION 1.0602
|
||||
# define CUPS_VERSION_MAJOR 1
|
||||
# define CUPS_VERSION_MINOR 7
|
||||
# define CUPS_VERSION_PATCH 0
|
||||
# define CUPS_VERSION_MINOR 6
|
||||
# define CUPS_VERSION_PATCH 2
|
||||
|
||||
# define CUPS_BC_FD 3
|
||||
/* Back-channel file descriptor for
|
||||
@@ -354,12 +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);
|
||||
extern int cupsGetPrinters(char ***printers) _CUPS_DEPRECATED_MSG("Use cupsGetDests instead.");
|
||||
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,
|
||||
@@ -367,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,
|
||||
@@ -591,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 */
|
||||
|
||||
+42
-38
@@ -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,7 +648,7 @@ _cups_debug_set(const char *logfile, /* I - Log file or NULL */
|
||||
debug_init = 1;
|
||||
}
|
||||
|
||||
_cupsMutexUnlock(&debug_init_mutex);
|
||||
_cupsMutexUnlock(&debug_mutex);
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
|
||||
+27
-35
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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);
|
||||
|
||||
/*
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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...
|
||||
|
||||
+70
-578
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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@
|
||||
*/
|
||||
|
||||
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@
|
||||
*/
|
||||
|
||||
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@
|
||||
*/
|
||||
|
||||
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@
|
||||
*/
|
||||
|
||||
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@
|
||||
*/
|
||||
|
||||
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@
|
||||
*/
|
||||
|
||||
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) ||
|
||||
@@ -2191,81 +1758,6 @@ 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$".
|
||||
*/
|
||||
|
||||
+39
-43
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* User-defined destination (and option) support 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
|
||||
@@ -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...
|
||||
@@ -933,7 +931,7 @@ 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,
|
||||
num_dests = _cupsGetDests(CUPS_HTTP_DEFAULT, CUPS_GET_PRINTERS, NULL, &dests,
|
||||
type, mask);
|
||||
|
||||
for (i = num_dests, dest = dests;
|
||||
@@ -1301,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);
|
||||
}
|
||||
|
||||
@@ -1315,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);
|
||||
}
|
||||
@@ -1330,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);
|
||||
}
|
||||
@@ -1344,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
|
||||
* "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.
|
||||
*
|
||||
@@ -1411,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",
|
||||
@@ -1430,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);
|
||||
@@ -1448,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);
|
||||
@@ -1517,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") ||
|
||||
@@ -1681,7 +1677,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);
|
||||
}
|
||||
|
||||
@@ -1690,9 +1686,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;
|
||||
@@ -1813,7 +1809,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);
|
||||
}
|
||||
@@ -1850,7 +1846,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 */
|
||||
|
||||
@@ -1904,7 +1900,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1914,7 +1910,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
|
||||
if (!_cupsGetDests(http, op, name, &dest, 0, 0))
|
||||
{
|
||||
if (op == IPP_OP_CUPS_GET_DEFAULT || (name && !set_as_default))
|
||||
if (op == CUPS_GET_DEFAULT || (name && !set_as_default))
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
@@ -1922,7 +1918,7 @@ cupsGetNamedDest(http_t *http, /* I - Connection to server or @code CUPS_HTT
|
||||
* configuration file does not exist. Find out the real default.
|
||||
*/
|
||||
|
||||
if (!_cupsGetDests(http, IPP_OP_CUPS_GET_DEFAULT, NULL, &dest, 0, 0))
|
||||
if (!_cupsGetDests(http, CUPS_GET_DEFAULT, NULL, &dest, 0, 0))
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -2099,9 +2095,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);
|
||||
@@ -2458,7 +2454,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();
|
||||
@@ -2467,7 +2463,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)
|
||||
@@ -3154,7 +3150,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;
|
||||
@@ -3196,10 +3192,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] == '(')
|
||||
@@ -3211,14 +3207,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';
|
||||
@@ -3407,7 +3403,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,
|
||||
|
||||
+27
-239
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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,104 +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_CREATE_JOB,
|
||||
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_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_SUBSCRIPTION,
|
||||
IPP_OP_CREATE_JOB_SUBSCRIPTION,
|
||||
IPP_OP_CUPS_NONE
|
||||
};
|
||||
|
||||
static const ipp_op_t ipp_all_print[] =
|
||||
{
|
||||
IPP_OP_PRINT_JOB,
|
||||
IPP_OP_PRINT_URI,
|
||||
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 },
|
||||
@@ -136,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 },
|
||||
@@ -168,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 */
|
||||
@@ -186,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 },
|
||||
@@ -261,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 },
|
||||
@@ -387,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...
|
||||
@@ -420,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))
|
||||
@@ -470,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
|
||||
{
|
||||
@@ -499,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"))
|
||||
@@ -524,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)
|
||||
{
|
||||
DEBUG_printf(("2cupsEncodeOptions2: Skipping \"%s\".", option->name));
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Count the number of values...
|
||||
*/
|
||||
@@ -815,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.
|
||||
*/
|
||||
|
||||
+18
-19
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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);
|
||||
|
||||
+50
-50
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* 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...
|
||||
@@ -90,21 +90,21 @@ cupsGetFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
|
||||
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...
|
||||
@@ -118,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...
|
||||
@@ -185,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@
|
||||
*/
|
||||
@@ -208,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);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -223,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);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -238,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);
|
||||
|
||||
/*
|
||||
@@ -252,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@
|
||||
@@ -281,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...
|
||||
@@ -302,18 +302,18 @@ cupsPutFd(http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFA
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -325,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...
|
||||
@@ -338,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));
|
||||
|
||||
@@ -362,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;
|
||||
}
|
||||
|
||||
@@ -374,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...
|
||||
@@ -388,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);
|
||||
@@ -467,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);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -482,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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+1
-13
@@ -38,10 +38,6 @@
|
||||
*/
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
static int cups_global_index = 0;
|
||||
/* Next thread number */
|
||||
#endif /* DEBUG */
|
||||
static _cups_threadkey_t cups_globals_key = _CUPS_THREADKEY_INITIALIZER;
|
||||
/* Thread local storage key */
|
||||
#ifdef HAVE_PTHREAD_H
|
||||
@@ -221,14 +217,6 @@ cups_globals_alloc(void)
|
||||
cg->expired_root = 1;
|
||||
cg->server_version = 20;
|
||||
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
* Friendly thread ID for debugging...
|
||||
*/
|
||||
|
||||
cg->thread_id = ++ cups_global_index;
|
||||
#endif /* DEBUG */
|
||||
|
||||
/*
|
||||
* Then set directories as appropriate...
|
||||
*/
|
||||
@@ -240,7 +228,7 @@ cups_globals_alloc(void)
|
||||
* Open the registry...
|
||||
*/
|
||||
|
||||
strlcpy(installdir, "C:/Program Files/cups.org", sizeof(installdir));
|
||||
strcpy(installdir, "C:/Program Files/cups.org");
|
||||
|
||||
if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\cups.org", 0, KEY_READ,
|
||||
&key))
|
||||
|
||||
+20
-90
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* HTTP address routines 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
|
||||
@@ -14,19 +14,16 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* httpAddrAny() - Check for the "any" address.
|
||||
* httpAddrEqual() - Compare two addresses.
|
||||
* httpAddrLength() - Return the length of the address in bytes.
|
||||
* httpAddrListen() - Create a listening socket bound to the specified
|
||||
* address and port.
|
||||
* httpAddrAny() - Check for the "any" address.
|
||||
* httpAddrEqual() - Compare two addresses.
|
||||
* httpAddrLocalhost() - Check for the local loopback address.
|
||||
* httpAddrLookup() - Lookup the hostname associated with the address.
|
||||
* httpAddrPort() - Get the port number associated with an address.
|
||||
* httpAddrLookup() - Lookup the hostname associated with the address.
|
||||
* _httpAddrPort() - Get the port number associated with an address.
|
||||
* _httpAddrSetPort() - Set the port number associated with an address.
|
||||
* httpAddrString() - Convert an address to a numeric string.
|
||||
* httpGetHostByName() - Lookup a hostname or IPv4 address, and return
|
||||
* address records for the specified name.
|
||||
* httpGetHostname() - Get the FQDN for the connection or local system.
|
||||
* httpAddrString() - Convert an IP address to a dotted string.
|
||||
* httpGetHostByName() - Lookup a hostname or IP address, and return
|
||||
* address records for the specified name.
|
||||
* httpGetHostname() - Get the FQDN for the local system.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -133,75 +130,6 @@ httpAddrLength(const http_addr_t *addr) /* I - Address */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpAddrListen()' - Create a listening socket bound to the specified
|
||||
* address and port.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
*/
|
||||
|
||||
int /* O - Socket or -1 on error */
|
||||
httpAddrListen(http_addr_t *addr, /* I - Address to bind to */
|
||||
int port) /* I - Port number to bind to */
|
||||
{
|
||||
int fd = -1, /* Socket */
|
||||
val; /* Socket value */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
if (!addr || port <= 0)
|
||||
return (-1);
|
||||
|
||||
if ((fd = socket(addr->addr.sa_family, SOCK_STREAM, 0)) < 0)
|
||||
{
|
||||
_cupsSetHTTPError(HTTP_STATUS_ERROR);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
val = 1;
|
||||
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, CUPS_SOCAST &val, sizeof(val));
|
||||
|
||||
#ifdef IPV6_V6ONLY
|
||||
if (addr->addr.sa_family == AF_INET6)
|
||||
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, CUPS_SOCAST &val, sizeof(val));
|
||||
#endif /* IPV6_V6ONLY */
|
||||
|
||||
_httpAddrSetPort(addr, port);
|
||||
|
||||
if (bind(fd, (struct sockaddr *)addr, httpAddrLength(addr)))
|
||||
{
|
||||
_cupsSetHTTPError(HTTP_STATUS_ERROR);
|
||||
|
||||
close(fd);
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (listen(fd, 5))
|
||||
{
|
||||
_cupsSetHTTPError(HTTP_STATUS_ERROR);
|
||||
|
||||
close(fd);
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
#ifdef SO_NOSIGPIPE
|
||||
/*
|
||||
* Disable SIGPIPE for this socket.
|
||||
*/
|
||||
|
||||
val = 1;
|
||||
setsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, CUPS_SOCAST &val, sizeof(val));
|
||||
#endif /* SO_NOSIGPIPE */
|
||||
|
||||
return (fd);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpAddrLocalhost()' - Check for the local loopback address.
|
||||
*
|
||||
@@ -234,6 +162,13 @@ httpAddrLocalhost(
|
||||
}
|
||||
|
||||
|
||||
#ifdef __sgi
|
||||
# define ADDR_CAST (struct sockaddr *)
|
||||
#else
|
||||
# define ADDR_CAST (char *)
|
||||
#endif /* __sgi */
|
||||
|
||||
|
||||
/*
|
||||
* 'httpAddrLookup()' - Lookup the hostname associated with the address.
|
||||
*
|
||||
@@ -332,11 +267,11 @@ httpAddrLookup(
|
||||
|
||||
# ifdef AF_INET6
|
||||
if (addr->addr.sa_family == AF_INET6)
|
||||
host = gethostbyaddr((char *)&(addr->ipv6.sin6_addr),
|
||||
host = gethostbyaddr(ADDR_CAST &(addr->ipv6.sin6_addr),
|
||||
sizeof(struct in_addr), AF_INET6);
|
||||
else
|
||||
# endif /* AF_INET6 */
|
||||
host = gethostbyaddr((char *)&(addr->ipv4.sin_addr),
|
||||
host = gethostbyaddr(ADDR_CAST &(addr->ipv4.sin_addr),
|
||||
sizeof(struct in_addr), AF_INET);
|
||||
|
||||
if (host == NULL)
|
||||
@@ -362,13 +297,11 @@ httpAddrLookup(
|
||||
|
||||
|
||||
/*
|
||||
* 'httpAddrPort()' - Get the port number associated with an address.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
* '_httpAddrPort()' - Get the port number associated with an address.
|
||||
*/
|
||||
|
||||
int /* O - Port number */
|
||||
httpAddrPort(http_addr_t *addr) /* I - Address */
|
||||
_httpAddrPort(http_addr_t *addr) /* I - Address */
|
||||
{
|
||||
if (!addr)
|
||||
return (ippPort());
|
||||
@@ -382,9 +315,6 @@ httpAddrPort(http_addr_t *addr) /* I - Address */
|
||||
return (ippPort());
|
||||
}
|
||||
|
||||
/* For OS X 10.8 and earlier */
|
||||
int _httpAddrPort(http_addr_t *addr) { return (httpAddrPort(addr)); }
|
||||
|
||||
|
||||
/*
|
||||
* '_httpAddrSetPort()' - Set the port number associated with an address.
|
||||
|
||||
+35
-76
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* HTTP address list routines 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
|
||||
@@ -14,12 +14,11 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* httpAddrConnect() - Connect to any of the addresses in the list.
|
||||
* httpAddrConnect() - Connect to any of the addresses in the list.
|
||||
* httpAddrConnect2() - Connect to any of the addresses in the list with a
|
||||
* timeout and optional cancel.
|
||||
* httpAddrCopyList() - Copy an address list.
|
||||
* timeout and optional cancel.
|
||||
* httpAddrFreeList() - Free an address list.
|
||||
* httpAddrGetList() - Get a list of addresses for a hostname.
|
||||
* httpAddrGetList() - Get a list of addresses for a hostname.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -34,7 +33,7 @@
|
||||
# include <poll.h>
|
||||
#endif /* HAVE_POLL */
|
||||
#ifndef WIN32
|
||||
# include <fcntl.h>
|
||||
# include <sys/fcntl.h>
|
||||
#endif /* WIN32 */
|
||||
|
||||
|
||||
@@ -59,7 +58,7 @@ httpAddrConnect(
|
||||
* 'httpAddrConnect2()' - Connect to any of the addresses in the list with a
|
||||
* timeout and optional cancel.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
* @since CUPS 1.6/OS X 10.8@
|
||||
*/
|
||||
|
||||
http_addrlist_t * /* O - Connected address or NULL on failure */
|
||||
@@ -95,7 +94,7 @@ httpAddrConnect2(
|
||||
if (!sock)
|
||||
{
|
||||
errno = EINVAL;
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -120,7 +119,7 @@ httpAddrConnect2(
|
||||
|
||||
DEBUG_printf(("2httpAddrConnect2: Trying %s:%d...",
|
||||
httpAddrString(&(addrlist->addr), temp, sizeof(temp)),
|
||||
httpAddrPort(&(addrlist->addr))));
|
||||
_httpAddrPort(&(addrlist->addr))));
|
||||
|
||||
if ((*sock = (int)socket(_httpAddrFamily(&(addrlist->addr)), SOCK_STREAM,
|
||||
0)) < 0)
|
||||
@@ -139,16 +138,21 @@ httpAddrConnect2(
|
||||
*/
|
||||
|
||||
val = 1;
|
||||
setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, CUPS_SOCAST &val, sizeof(val));
|
||||
#ifdef WIN32
|
||||
setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&val,
|
||||
sizeof(val));
|
||||
#else
|
||||
setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifdef SO_REUSEPORT
|
||||
val = 1;
|
||||
setsockopt(*sock, SOL_SOCKET, SO_REUSEPORT, CUPS_SOCAST &val, sizeof(val));
|
||||
setsockopt(*sock, SOL_SOCKET, SO_REUSEPORT, &val, sizeof(val));
|
||||
#endif /* SO_REUSEPORT */
|
||||
|
||||
#ifdef SO_NOSIGPIPE
|
||||
val = 1;
|
||||
setsockopt(*sock, SOL_SOCKET, SO_NOSIGPIPE, CUPS_SOCAST &val, sizeof(val));
|
||||
setsockopt(*sock, SOL_SOCKET, SO_NOSIGPIPE, &val, sizeof(val));
|
||||
#endif /* SO_NOSIGPIPE */
|
||||
|
||||
/*
|
||||
@@ -157,7 +161,12 @@ httpAddrConnect2(
|
||||
*/
|
||||
|
||||
val = 1;
|
||||
setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, CUPS_SOCAST &val, sizeof(val));
|
||||
#ifdef WIN32
|
||||
setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&val,
|
||||
sizeof(val));
|
||||
#else
|
||||
setsockopt(*sock, IPPROTO_TCP, TCP_NODELAY, &val, sizeof(val));
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifdef FD_CLOEXEC
|
||||
/*
|
||||
@@ -192,7 +201,7 @@ httpAddrConnect2(
|
||||
{
|
||||
DEBUG_printf(("1httpAddrConnect2: Connected to %s:%d...",
|
||||
httpAddrString(&(addrlist->addr), temp, sizeof(temp)),
|
||||
httpAddrPort(&(addrlist->addr))));
|
||||
_httpAddrPort(&(addrlist->addr))));
|
||||
|
||||
#ifdef O_NONBLOCK
|
||||
fcntl(*sock, F_SETFL, flags);
|
||||
@@ -273,7 +282,7 @@ httpAddrConnect2(
|
||||
{
|
||||
DEBUG_printf(("1httpAddrConnect2: Connected to %s:%d...",
|
||||
httpAddrString(&peer, temp, sizeof(temp)),
|
||||
httpAddrPort(&peer)));
|
||||
_httpAddrPort(&peer)));
|
||||
|
||||
return (addrlist);
|
||||
}
|
||||
@@ -286,7 +295,7 @@ httpAddrConnect2(
|
||||
|
||||
DEBUG_printf(("1httpAddrConnect2: Unable to connect to %s:%d: %s",
|
||||
httpAddrString(&(addrlist->addr), temp, sizeof(temp)),
|
||||
httpAddrPort(&(addrlist->addr)), strerror(errno)));
|
||||
_httpAddrPort(&(addrlist->addr)), strerror(errno)));
|
||||
|
||||
#ifndef WIN32
|
||||
if (errno == EINPROGRESS)
|
||||
@@ -309,65 +318,15 @@ httpAddrConnect2(
|
||||
|
||||
if (!addrlist)
|
||||
#ifdef WIN32
|
||||
_cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, "Connection failed", 0);
|
||||
_cupsSetError(IPP_SERVICE_UNAVAILABLE, "Connection failed", 0);
|
||||
#else
|
||||
_cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, strerror(errno), 0);
|
||||
_cupsSetError(IPP_SERVICE_UNAVAILABLE, strerror(errno), 0);
|
||||
#endif /* WIN32 */
|
||||
|
||||
return (addrlist);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 'httpAddrCopyList()' - Copy an address list.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
*/
|
||||
|
||||
http_addrlist_t * /* O - New address list or @code NULL@ on error */
|
||||
httpAddrCopyList(
|
||||
http_addrlist_t *src) /* I - Source address list */
|
||||
{
|
||||
http_addrlist_t *dst = NULL, /* First list entry */
|
||||
*prev = NULL, /* Previous list entry */
|
||||
*current = NULL;/* Current list entry */
|
||||
|
||||
|
||||
while (src)
|
||||
{
|
||||
if ((current = malloc(sizeof(http_addrlist_t))) == NULL)
|
||||
{
|
||||
current = dst;
|
||||
|
||||
while (current)
|
||||
{
|
||||
prev = current;
|
||||
current = current->next;
|
||||
|
||||
free(prev);
|
||||
}
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
memcpy(current, src, sizeof(http_addrlist_t));
|
||||
|
||||
current->next = NULL;
|
||||
|
||||
if (prev)
|
||||
prev->next = current;
|
||||
else
|
||||
dst = current;
|
||||
|
||||
prev = current;
|
||||
src = src->next;
|
||||
}
|
||||
|
||||
return (dst);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpAddrFreeList()' - Free an address list.
|
||||
*
|
||||
@@ -549,7 +508,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
if (!temp)
|
||||
{
|
||||
httpAddrFreeList(first);
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -584,7 +543,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
if (error == EAI_FAIL)
|
||||
cg->need_res_init = 1;
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, gai_strerror(error), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, gai_strerror(error), 0);
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -708,7 +667,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
if (h_errno == NO_RECOVERY)
|
||||
cg->need_res_init = 1;
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, hstrerror(h_errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, hstrerror(h_errno), 0);
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_GETADDRINFO */
|
||||
@@ -748,7 +707,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
{
|
||||
httpAddrFreeList(first);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unknown service name."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Unknown service name."), 1);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -771,7 +730,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
|
||||
if (!temp)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
httpAddrFreeList(first);
|
||||
return (NULL);
|
||||
}
|
||||
@@ -800,7 +759,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
|
||||
if (!temp)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
httpAddrFreeList(first);
|
||||
return (NULL);
|
||||
}
|
||||
@@ -832,7 +791,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
|
||||
if (!temp)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
httpAddrFreeList(first);
|
||||
return (NULL);
|
||||
}
|
||||
@@ -856,7 +815,7 @@ httpAddrGetList(const char *hostname, /* I - Hostname, IP address, or NULL for p
|
||||
temp = (http_addrlist_t *)calloc(1, sizeof(http_addrlist_t));
|
||||
if (!temp)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
httpAddrFreeList(first);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
+13
-60
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Private HTTP 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
|
||||
@@ -34,13 +34,11 @@
|
||||
# ifdef WIN32
|
||||
# include <io.h>
|
||||
# include <winsock2.h>
|
||||
# define CUPS_SOCAST (const char *)
|
||||
# else
|
||||
# include <unistd.h>
|
||||
# include <fcntl.h>
|
||||
# include <sys/socket.h>
|
||||
# define closesocket(f) close(f)
|
||||
# define CUPS_SOCAST
|
||||
# endif /* WIN32 */
|
||||
|
||||
# ifdef HAVE_GSSAPI
|
||||
@@ -60,14 +58,14 @@
|
||||
# include <Security/Authorization.h>
|
||||
# endif /* HAVE_AUTHORIZATION_H */
|
||||
|
||||
# if defined(__APPLE__) && !defined(_SOCKLEN_T)
|
||||
# if defined(__sgi) || (defined(__APPLE__) && !defined(_SOCKLEN_T))
|
||||
/*
|
||||
* MacOS X 10.2.x does not define socklen_t, and in fact uses an int instead of
|
||||
* IRIX and MacOS X 10.2.x do not define socklen_t, and in fact use an int instead of
|
||||
* unsigned type for length values...
|
||||
*/
|
||||
|
||||
typedef int socklen_t;
|
||||
# endif /* __APPLE__ && !_SOCKLEN_T */
|
||||
# endif /* __sgi || (__APPLE__ && !_SOCKLEN_T) */
|
||||
|
||||
# include <cups/http.h>
|
||||
# include "md5-private.h"
|
||||
@@ -123,10 +121,6 @@ typedef int socklen_t;
|
||||
# endif /* HAVE_GETIFADDRS */
|
||||
# endif /* !WIN32 */
|
||||
|
||||
# ifdef HAVE_LIBZ
|
||||
# include <zlib.h>
|
||||
# endif /* HAVE_LIBZ */
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
@@ -227,22 +221,7 @@ typedef void *http_tls_t;
|
||||
typedef void *http_tls_credentials_t;
|
||||
# endif /* HAVE_LIBSSL */
|
||||
|
||||
typedef enum _http_coding_e /**** HTTP content coding enumeration ****/
|
||||
{
|
||||
_HTTP_CODING_IDENTITY, /* No content coding */
|
||||
_HTTP_CODING_GZIP, /* LZ77+gzip decompression */
|
||||
_HTTP_CODING_DEFLATE, /* LZ77+zlib compression */
|
||||
_HTTP_CODING_GUNZIP, /* LZ77+gzip decompression */
|
||||
_HTTP_CODING_INFLATE /* LZ77+zlib decompression */
|
||||
} _http_coding_t;
|
||||
|
||||
typedef enum _http_mode_e /**** HTTP mode enumeration ****/
|
||||
{
|
||||
_HTTP_MODE_CLIENT, /* Client connected to server */
|
||||
_HTTP_MODE_SERVER /* Server connected (accepted) from client */
|
||||
} _http_mode_t;
|
||||
|
||||
struct _http_s /**** HTTP connection structure ****/
|
||||
struct _http_s /**** HTTP connection structure. ****/
|
||||
{
|
||||
int fd; /* File descriptor for this socket */
|
||||
int blocking; /* To block or not to block */
|
||||
@@ -255,8 +234,8 @@ struct _http_s /**** HTTP connection structure ****/
|
||||
struct sockaddr_in _hostaddr; /* Address of connected host (deprecated) */
|
||||
char hostname[HTTP_MAX_HOST],
|
||||
/* Name of connected host */
|
||||
fields[HTTP_FIELD_ACCEPT_ENCODING][HTTP_MAX_VALUE];
|
||||
/* Field values up to Accept-Encoding */
|
||||
fields[HTTP_FIELD_MAX][HTTP_MAX_VALUE];
|
||||
/* Field values */
|
||||
char *data; /* Pointer to data buffer */
|
||||
http_encoding_t data_encoding; /* Chunked or not */
|
||||
int _data_remaining;/* Number of bytes left (deprecated) */
|
||||
@@ -270,19 +249,16 @@ struct _http_s /**** HTTP connection structure ****/
|
||||
int nonce_count; /* Nonce count */
|
||||
http_tls_t tls; /* TLS state information */
|
||||
http_encryption_t encryption; /* Encryption requirements */
|
||||
|
||||
/**** New in CUPS 1.1.19 ****/
|
||||
fd_set *input_set; /* select() set for httpWait() (deprecated) */
|
||||
http_status_t expect; /* Expect: header */
|
||||
char *cookie; /* Cookie value(s) */
|
||||
|
||||
/**** New in CUPS 1.1.20 ****/
|
||||
char _authstring[HTTP_MAX_VALUE],
|
||||
/* Current Authorization value (deprecated) */
|
||||
/* Current Authentication value (deprecated) */
|
||||
userpass[HTTP_MAX_VALUE];
|
||||
/* Username:password string */
|
||||
int digest_tries; /* Number of tries for digest auth */
|
||||
|
||||
/**** New in CUPS 1.2 ****/
|
||||
off_t data_remaining; /* Number of bytes left */
|
||||
http_addr_t *hostaddr; /* Current host address and port */
|
||||
@@ -290,11 +266,10 @@ struct _http_s /**** HTTP connection structure ****/
|
||||
char wbuffer[HTTP_MAX_BUFFER];
|
||||
/* Buffer for outgoing data */
|
||||
int wused; /* Write buffer bytes used */
|
||||
|
||||
/**** New in CUPS 1.3 ****/
|
||||
char *field_authorization;
|
||||
/* Authorization field */
|
||||
char *authstring; /* Current Authorization field */
|
||||
char *authstring; /* Current authorization field */
|
||||
# ifdef HAVE_GSSAPI
|
||||
gss_OID gssmech; /* Authentication mechanism */
|
||||
gss_ctx_id_t gssctx; /* Authentication context */
|
||||
@@ -303,7 +278,6 @@ struct _http_s /**** HTTP connection structure ****/
|
||||
# ifdef HAVE_AUTHORIZATION_H
|
||||
AuthorizationRef auth_ref; /* Authorization ref */
|
||||
# endif /* HAVE_AUTHORIZATION_H */
|
||||
|
||||
/**** New in CUPS 1.5 ****/
|
||||
http_tls_credentials_t tls_credentials;
|
||||
/* TLS credentials */
|
||||
@@ -314,23 +288,6 @@ struct _http_s /**** HTTP connection structure ****/
|
||||
# ifdef HAVE_GSSAPI
|
||||
char gsshost[256]; /* Hostname for Kerberos */
|
||||
# endif /* HAVE_GSSAPI */
|
||||
|
||||
/**** New in CUPS 1.7 ****/
|
||||
int tls_upgrade; /* Non-zero if we are doing an upgrade */
|
||||
_http_mode_t mode; /* _HTTP_MODE_CLIENT or _HTTP_MODE_SERVER */
|
||||
char *accept_encoding,
|
||||
/* Accept-Encoding field */
|
||||
*allow, /* Allow field */
|
||||
*server, /* Server field */
|
||||
*default_accept_encoding,
|
||||
*default_server,
|
||||
*default_user_agent;
|
||||
/* Default field values */
|
||||
# ifdef HAVE_LIBZ
|
||||
_http_coding_t coding; /* _HTTP_CODING_xxx */
|
||||
z_stream stream; /* (De)compression stream */
|
||||
Bytef *dbuffer; /* Decompression buffer */
|
||||
# endif /* HAVE_LIBZ */
|
||||
};
|
||||
|
||||
|
||||
@@ -396,18 +353,15 @@ extern void _cups_freeifaddrs(struct ifaddrs *addrs);
|
||||
*/
|
||||
|
||||
#define _httpAddrFamily(addrp) (addrp)->addr.sa_family
|
||||
extern int _httpAddrPort(http_addr_t *addr)
|
||||
_CUPS_INTERNAL_MSG("Use httpAddrPort instead.");
|
||||
extern int _httpAddrPort(http_addr_t *addr);
|
||||
extern void _httpAddrSetPort(http_addr_t *addr, int port);
|
||||
extern char *_httpAssembleUUID(const char *server, int port,
|
||||
const char *name, int number,
|
||||
char *buffer, size_t bufsize)
|
||||
_CUPS_INTERNAL_MSG("Use httpAssembleUUID instead.");
|
||||
char *buffer, size_t bufsize);
|
||||
extern http_t *_httpCreate(const char *host, int port,
|
||||
http_addrlist_t *addrlist,
|
||||
http_encryption_t encryption,
|
||||
int family)
|
||||
_CUPS_INTERNAL_MSG("Use httpConnect2 or httpAccept instead.");
|
||||
int family);
|
||||
extern http_tls_credentials_t
|
||||
_httpCreateCredentials(cups_array_t *credentials);
|
||||
extern char *_httpDecodeURI(char *dst, const char *src,
|
||||
@@ -416,8 +370,7 @@ extern void _httpDisconnect(http_t *http);
|
||||
extern char *_httpEncodeURI(char *dst, const char *src,
|
||||
size_t dstsize);
|
||||
extern void _httpFreeCredentials(http_tls_credentials_t credentials);
|
||||
extern ssize_t _httpPeek(http_t *http, char *buffer, size_t length)
|
||||
_CUPS_INTERNAL_MSG("Use httpPeek instead.");
|
||||
extern ssize_t _httpPeek(http_t *http, char *buffer, size_t length);
|
||||
extern const char *_httpResolveURI(const char *uri, char *resolved_uri,
|
||||
size_t resolved_size, int options,
|
||||
int (*cb)(void *context),
|
||||
|
||||
+62
-82
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* HTTP support routines 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
|
||||
@@ -20,8 +20,7 @@
|
||||
* components.
|
||||
* httpAssembleURIf() - Assemble a uniform resource identifier from its
|
||||
* components with a formatted resource.
|
||||
* httpAssembleUUID() - Assemble a name-based UUID URN conforming to RFC
|
||||
* 4122.
|
||||
* _httpAssembleUUID() - Make a UUID URI conforming to RFC 4122.
|
||||
* httpDecode64() - Base64-decode a string.
|
||||
* httpDecode64_2() - Base64-decode a string.
|
||||
* httpEncode64() - Base64-encode a string.
|
||||
@@ -193,7 +192,7 @@ httpAssembleURI(
|
||||
if (uri)
|
||||
*uri = '\0';
|
||||
|
||||
return (HTTP_URI_STATUS_BAD_ARGUMENTS);
|
||||
return (HTTP_URI_BAD_ARGUMENTS);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -391,7 +390,7 @@ httpAssembleURI(
|
||||
|
||||
*ptr = '\0';
|
||||
|
||||
return (HTTP_URI_STATUS_OK);
|
||||
return (HTTP_URI_OK);
|
||||
|
||||
/*
|
||||
* Clear the URI string and return an overflow error; I don't usually
|
||||
@@ -401,7 +400,7 @@ httpAssembleURI(
|
||||
assemble_overflow:
|
||||
|
||||
*uri = '\0';
|
||||
return (HTTP_URI_STATUS_OVERFLOW);
|
||||
return (HTTP_URI_OVERFLOW);
|
||||
}
|
||||
|
||||
|
||||
@@ -444,7 +443,7 @@ httpAssembleURIf(
|
||||
if (uri)
|
||||
*uri = '\0';
|
||||
|
||||
return (HTTP_URI_STATUS_BAD_ARGUMENTS);
|
||||
return (HTTP_URI_BAD_ARGUMENTS);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -458,7 +457,7 @@ httpAssembleURIf(
|
||||
if (bytes >= sizeof(resource))
|
||||
{
|
||||
*uri = '\0';
|
||||
return (HTTP_URI_STATUS_OVERFLOW);
|
||||
return (HTTP_URI_OVERFLOW);
|
||||
}
|
||||
else
|
||||
return (httpAssembleURI(encoding, uri, urilen, scheme, username, host,
|
||||
@@ -467,24 +466,18 @@ httpAssembleURIf(
|
||||
|
||||
|
||||
/*
|
||||
* 'httpAssembleUUID()' - Assemble a name-based UUID URN conforming to RFC 4122.
|
||||
*
|
||||
* This function creates a unique 128-bit identifying number using the server
|
||||
* name, port number, random data, and optionally an object name and/or object
|
||||
* number. The result is formatted as a UUID URN as defined in RFC 4122.
|
||||
* '_httpAssembleUUID()' - Make a UUID URI conforming to RFC 4122.
|
||||
*
|
||||
* The buffer needs to be at least 46 bytes in size.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
*/
|
||||
|
||||
char * /* I - UUID string */
|
||||
httpAssembleUUID(const char *server, /* I - Server name */
|
||||
int port, /* I - Port number */
|
||||
const char *name, /* I - Object name or NULL */
|
||||
int number, /* I - Object number or 0 */
|
||||
char *buffer, /* I - String buffer */
|
||||
size_t bufsize) /* I - Size of buffer */
|
||||
_httpAssembleUUID(const char *server, /* I - Server name */
|
||||
int port, /* I - Port number */
|
||||
const char *name, /* I - Object name or NULL */
|
||||
int number, /* I - Object number or 0 */
|
||||
char *buffer, /* I - String buffer */
|
||||
size_t bufsize) /* I - Size of buffer */
|
||||
{
|
||||
char data[1024]; /* Source string for MD5 */
|
||||
_cups_md5_state_t md5state; /* MD5 state */
|
||||
@@ -521,13 +514,6 @@ httpAssembleUUID(const char *server, /* I - Server name */
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
/* For OS X 10.8 and earlier */
|
||||
char *_httpAssembleUUID(const char *server, int port, const char *name,
|
||||
int number, char *buffer, size_t bufsize)
|
||||
{
|
||||
return (httpAssembleUUID(server, port, name, number, buffer, bufsize));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'httpDecode64()' - Base64-decode a string.
|
||||
@@ -980,16 +966,16 @@ httpSeparateURI(
|
||||
if (!uri || !port || !scheme || schemelen <= 0 || !username ||
|
||||
usernamelen <= 0 || !host || hostlen <= 0 || !resource ||
|
||||
resourcelen <= 0)
|
||||
return (HTTP_URI_STATUS_BAD_ARGUMENTS);
|
||||
return (HTTP_URI_BAD_ARGUMENTS);
|
||||
|
||||
if (!*uri)
|
||||
return (HTTP_URI_STATUS_BAD_URI);
|
||||
return (HTTP_URI_BAD_URI);
|
||||
|
||||
/*
|
||||
* Grab the scheme portion of the URI...
|
||||
*/
|
||||
|
||||
status = HTTP_URI_STATUS_OK;
|
||||
status = HTTP_URI_OK;
|
||||
|
||||
if (!strncmp(uri, "//", 2))
|
||||
{
|
||||
@@ -998,7 +984,7 @@ httpSeparateURI(
|
||||
*/
|
||||
|
||||
strlcpy(scheme, "ipp", schemelen);
|
||||
status = HTTP_URI_STATUS_MISSING_SCHEME;
|
||||
status = HTTP_URI_MISSING_SCHEME;
|
||||
}
|
||||
else if (*uri == '/')
|
||||
{
|
||||
@@ -1007,7 +993,7 @@ httpSeparateURI(
|
||||
*/
|
||||
|
||||
strlcpy(scheme, "file", schemelen);
|
||||
status = HTTP_URI_STATUS_MISSING_SCHEME;
|
||||
status = HTTP_URI_MISSING_SCHEME;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1029,7 +1015,7 @@ httpSeparateURI(
|
||||
if (*uri != ':')
|
||||
{
|
||||
*scheme = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_SCHEME);
|
||||
return (HTTP_URI_BAD_SCHEME);
|
||||
}
|
||||
|
||||
uri ++;
|
||||
@@ -1050,7 +1036,7 @@ httpSeparateURI(
|
||||
else if (!strcmp(scheme, "socket")) /* Not yet registered with IANA... */
|
||||
*port = 9100;
|
||||
else if (strcmp(scheme, "file") && strcmp(scheme, "mailto"))
|
||||
status = HTTP_URI_STATUS_UNKNOWN_SCHEME;
|
||||
status = HTTP_URI_UNKNOWN_SCHEME;
|
||||
|
||||
/*
|
||||
* Now see if we have a hostname...
|
||||
@@ -1080,7 +1066,7 @@ httpSeparateURI(
|
||||
if (!uri)
|
||||
{
|
||||
*username = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_USERNAME);
|
||||
return (HTTP_URI_BAD_USERNAME);
|
||||
}
|
||||
|
||||
uri ++;
|
||||
@@ -1106,7 +1092,7 @@ httpSeparateURI(
|
||||
if (!uri)
|
||||
{
|
||||
*host = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_HOSTNAME);
|
||||
return (HTTP_URI_BAD_HOSTNAME);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1116,7 +1102,7 @@ httpSeparateURI(
|
||||
if (*uri != ']')
|
||||
{
|
||||
*host = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_HOSTNAME);
|
||||
return (HTTP_URI_BAD_HOSTNAME);
|
||||
}
|
||||
|
||||
uri ++;
|
||||
@@ -1134,7 +1120,7 @@ httpSeparateURI(
|
||||
else if (*ptr != ':' && *ptr != '.' && !isxdigit(*ptr & 255))
|
||||
{
|
||||
*host = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_HOSTNAME);
|
||||
return (HTTP_URI_BAD_HOSTNAME);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1154,7 +1140,7 @@ httpSeparateURI(
|
||||
"!$&'()*+,;=\\", *ptr))
|
||||
{
|
||||
*host = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_HOSTNAME);
|
||||
return (HTTP_URI_BAD_HOSTNAME);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1167,7 +1153,7 @@ httpSeparateURI(
|
||||
if (!uri)
|
||||
{
|
||||
*host = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_HOSTNAME);
|
||||
return (HTTP_URI_BAD_HOSTNAME);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1179,7 +1165,7 @@ httpSeparateURI(
|
||||
if (!strcmp(scheme, "file") && strcmp(host, "localhost") && host[0])
|
||||
{
|
||||
*host = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_HOSTNAME);
|
||||
return (HTTP_URI_BAD_HOSTNAME);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1195,7 +1181,7 @@ httpSeparateURI(
|
||||
if (!isdigit(uri[1] & 255))
|
||||
{
|
||||
*port = 0;
|
||||
return (HTTP_URI_STATUS_BAD_PORT);
|
||||
return (HTTP_URI_BAD_PORT);
|
||||
}
|
||||
|
||||
*port = strtol(uri + 1, (char **)&uri, 10);
|
||||
@@ -1203,7 +1189,7 @@ httpSeparateURI(
|
||||
if (*uri != '/' && *uri)
|
||||
{
|
||||
*port = 0;
|
||||
return (HTTP_URI_STATUS_BAD_PORT);
|
||||
return (HTTP_URI_BAD_PORT);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1218,7 +1204,7 @@ httpSeparateURI(
|
||||
* Hostname but no path...
|
||||
*/
|
||||
|
||||
status = HTTP_URI_STATUS_MISSING_RESOURCE;
|
||||
status = HTTP_URI_MISSING_RESOURCE;
|
||||
*resource = '/';
|
||||
|
||||
/*
|
||||
@@ -1252,7 +1238,7 @@ httpSeparateURI(
|
||||
if (!uri)
|
||||
{
|
||||
*resource = '\0';
|
||||
return (HTTP_URI_STATUS_BAD_RESOURCE);
|
||||
return (HTTP_URI_BAD_RESOURCE);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1282,74 +1268,74 @@ httpStatus(http_status_t status) /* I - HTTP status code */
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case HTTP_STATUS_CONTINUE :
|
||||
case HTTP_CONTINUE :
|
||||
s = _("Continue");
|
||||
break;
|
||||
case HTTP_STATUS_SWITCHING_PROTOCOLS :
|
||||
case HTTP_SWITCHING_PROTOCOLS :
|
||||
s = _("Switching Protocols");
|
||||
break;
|
||||
case HTTP_STATUS_OK :
|
||||
case HTTP_OK :
|
||||
s = _("OK");
|
||||
break;
|
||||
case HTTP_STATUS_CREATED :
|
||||
case HTTP_CREATED :
|
||||
s = _("Created");
|
||||
break;
|
||||
case HTTP_STATUS_ACCEPTED :
|
||||
case HTTP_ACCEPTED :
|
||||
s = _("Accepted");
|
||||
break;
|
||||
case HTTP_STATUS_NO_CONTENT :
|
||||
case HTTP_NO_CONTENT :
|
||||
s = _("No Content");
|
||||
break;
|
||||
case HTTP_STATUS_MOVED_PERMANENTLY :
|
||||
case HTTP_MOVED_PERMANENTLY :
|
||||
s = _("Moved Permanently");
|
||||
break;
|
||||
case HTTP_STATUS_SEE_OTHER :
|
||||
case HTTP_SEE_OTHER :
|
||||
s = _("See Other");
|
||||
break;
|
||||
case HTTP_STATUS_NOT_MODIFIED :
|
||||
case HTTP_NOT_MODIFIED :
|
||||
s = _("Not Modified");
|
||||
break;
|
||||
case HTTP_STATUS_BAD_REQUEST :
|
||||
case HTTP_BAD_REQUEST :
|
||||
s = _("Bad Request");
|
||||
break;
|
||||
case HTTP_STATUS_UNAUTHORIZED :
|
||||
case HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED :
|
||||
case HTTP_UNAUTHORIZED :
|
||||
case HTTP_AUTHORIZATION_CANCELED :
|
||||
s = _("Unauthorized");
|
||||
break;
|
||||
case HTTP_STATUS_FORBIDDEN :
|
||||
case HTTP_FORBIDDEN :
|
||||
s = _("Forbidden");
|
||||
break;
|
||||
case HTTP_STATUS_NOT_FOUND :
|
||||
case HTTP_NOT_FOUND :
|
||||
s = _("Not Found");
|
||||
break;
|
||||
case HTTP_STATUS_REQUEST_TOO_LARGE :
|
||||
case HTTP_REQUEST_TOO_LARGE :
|
||||
s = _("Request Entity Too Large");
|
||||
break;
|
||||
case HTTP_STATUS_URI_TOO_LONG :
|
||||
case HTTP_URI_TOO_LONG :
|
||||
s = _("URI Too Long");
|
||||
break;
|
||||
case HTTP_STATUS_UPGRADE_REQUIRED :
|
||||
case HTTP_UPGRADE_REQUIRED :
|
||||
s = _("Upgrade Required");
|
||||
break;
|
||||
case HTTP_STATUS_NOT_IMPLEMENTED :
|
||||
case HTTP_NOT_IMPLEMENTED :
|
||||
s = _("Not Implemented");
|
||||
break;
|
||||
case HTTP_STATUS_NOT_SUPPORTED :
|
||||
case HTTP_NOT_SUPPORTED :
|
||||
s = _("Not Supported");
|
||||
break;
|
||||
case HTTP_STATUS_EXPECTATION_FAILED :
|
||||
case HTTP_EXPECTATION_FAILED :
|
||||
s = _("Expectation Failed");
|
||||
break;
|
||||
case HTTP_STATUS_SERVICE_UNAVAILABLE :
|
||||
case HTTP_SERVICE_UNAVAILABLE :
|
||||
s = _("Service Unavailable");
|
||||
break;
|
||||
case HTTP_STATUS_SERVER_ERROR :
|
||||
case HTTP_SERVER_ERROR :
|
||||
s = _("Internal Server Error");
|
||||
break;
|
||||
case HTTP_STATUS_CUPS_PKI_ERROR :
|
||||
case HTTP_PKI_ERROR :
|
||||
s = _("SSL/TLS Negotiation Error");
|
||||
break;
|
||||
case HTTP_STATUS_CUPS_WEBIF_DISABLED :
|
||||
case HTTP_WEBIF_DISABLED :
|
||||
s = _("Web Interface is Disabled");
|
||||
break;
|
||||
|
||||
@@ -1453,12 +1439,12 @@ _httpResolveURI(
|
||||
if ((status = httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme,
|
||||
sizeof(scheme), userpass, sizeof(userpass),
|
||||
hostname, sizeof(hostname), &port, resource,
|
||||
sizeof(resource))) < HTTP_URI_STATUS_OK)
|
||||
sizeof(resource))) < HTTP_URI_OK)
|
||||
#else
|
||||
if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme,
|
||||
sizeof(scheme), userpass, sizeof(userpass),
|
||||
hostname, sizeof(hostname), &port, resource,
|
||||
sizeof(resource)) < HTTP_URI_STATUS_OK)
|
||||
sizeof(resource)) < HTTP_URI_OK)
|
||||
#endif /* DEBUG */
|
||||
{
|
||||
if (options & _HTTP_RESOLVE_STDERR)
|
||||
@@ -1555,16 +1541,10 @@ _httpResolveURI(
|
||||
# ifdef HAVE_DNSSD
|
||||
if (DNSServiceCreateConnection(&ref) == kDNSServiceErr_NoError)
|
||||
{
|
||||
int myinterface = kDNSServiceInterfaceIndexAny;
|
||||
/* Lookup on any interface */
|
||||
|
||||
if (!strcmp(scheme, "ippusb"))
|
||||
myinterface = kDNSServiceInterfaceIndexLocalOnly;
|
||||
|
||||
localref = ref;
|
||||
if (DNSServiceResolve(&localref,
|
||||
kDNSServiceFlagsShareConnection, myinterface,
|
||||
hostname, regtype, "local.", http_resolve_cb,
|
||||
kDNSServiceFlagsShareConnection, 0, hostname, regtype,
|
||||
"local.", http_resolve_cb,
|
||||
&uribuf) == kDNSServiceErr_NoError)
|
||||
{
|
||||
int fds; /* Number of ready descriptors */
|
||||
@@ -1638,7 +1618,7 @@ _httpResolveURI(
|
||||
domainref = ref;
|
||||
if (DNSServiceResolve(&domainref,
|
||||
kDNSServiceFlagsShareConnection,
|
||||
myinterface, hostname, regtype, domain,
|
||||
0, hostname, regtype, domain,
|
||||
http_resolve_cb,
|
||||
&uribuf) == kDNSServiceErr_NoError)
|
||||
domainsent = 1;
|
||||
@@ -1766,7 +1746,7 @@ _httpResolveURI(
|
||||
#endif /* HAVE_DNSSD || HAVE_AVAHI */
|
||||
|
||||
if ((options & _HTTP_RESOLVE_STDERR) && !uri)
|
||||
_cupsLangPrintFilter(stderr, "INFO", _("Unable to find printer."));
|
||||
_cupsLangPrintFilter(stderr, "ERROR", _("Unable to find printer."));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+860
-2124
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+94
-234
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Hyper-Text Transport Protocol 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
|
||||
@@ -36,6 +36,9 @@ typedef off_t ssize_t; /* @private@ */
|
||||
# include <winsock2.h>
|
||||
# include <ws2tcpip.h>
|
||||
# else
|
||||
# ifdef __sgi
|
||||
# define INET6 /* IRIX IPv6 support... */
|
||||
# endif /* __sgi */
|
||||
# include <unistd.h>
|
||||
# include <sys/time.h>
|
||||
# include <sys/socket.h>
|
||||
@@ -126,30 +129,17 @@ typedef enum http_auth_e /**** HTTP authentication types ****/
|
||||
|
||||
typedef enum http_encoding_e /**** HTTP transfer encoding values ****/
|
||||
{
|
||||
HTTP_ENCODING_LENGTH, /* Data is sent with Content-Length */
|
||||
HTTP_ENCODING_CHUNKED, /* Data is chunked */
|
||||
HTTP_ENCODING_FIELDS /* Sending HTTP fields */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define HTTP_ENCODE_LENGTH HTTP_ENCODING_LENGTH
|
||||
# define HTTP_ENCODE_CHUNKED HTTP_ENCODING_CHUNKED
|
||||
# define HTTP_ENCODE_FIELDS HTTP_ENCODING_FIELDS
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
HTTP_ENCODE_LENGTH, /* Data is sent with Content-Length */
|
||||
HTTP_ENCODE_CHUNKED, /* Data is chunked */
|
||||
HTTP_ENCODE_FIELDS /* Sending HTTP fields */
|
||||
} http_encoding_t;
|
||||
|
||||
typedef enum http_encryption_e /**** HTTP encryption values ****/
|
||||
{
|
||||
HTTP_ENCRYPTION_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */
|
||||
HTTP_ENCRYPTION_NEVER, /* Never encrypt */
|
||||
HTTP_ENCRYPTION_REQUIRED, /* Encryption is required (TLS upgrade) */
|
||||
HTTP_ENCRYPTION_ALWAYS /* Always encrypt (SSL) */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define HTTP_ENCRYPT_IF_REQUESTED HTTP_ENCRYPTION_IF_REQUESTED
|
||||
# define HTTP_ENCRYPT_NEVER HTTP_ENCRYPTION_NEVER
|
||||
# define HTTP_ENCRYPT_REQUIRED HTTP_ENCRYPTION_REQUIRED
|
||||
# define HTTP_ENCRYPT_ALWAYS HTTP_ENCRYPTION_ALWAYS
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
HTTP_ENCRYPT_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */
|
||||
HTTP_ENCRYPT_NEVER, /* Never encrypt */
|
||||
HTTP_ENCRYPT_REQUIRED, /* Encryption is required (TLS upgrade) */
|
||||
HTTP_ENCRYPT_ALWAYS /* Always encrypt (SSL) */
|
||||
} http_encryption_t;
|
||||
|
||||
typedef enum http_field_e /**** HTTP field names ****/
|
||||
@@ -182,9 +172,6 @@ typedef enum http_field_e /**** HTTP field names ****/
|
||||
HTTP_FIELD_UPGRADE, /* Upgrade field */
|
||||
HTTP_FIELD_USER_AGENT, /* User-Agent field */
|
||||
HTTP_FIELD_WWW_AUTHENTICATE, /* WWW-Authenticate field */
|
||||
HTTP_FIELD_ACCEPT_ENCODING, /* Accepting-Encoding field @since CUPS 1.7@ */
|
||||
HTTP_FIELD_ALLOW, /* Allow field @since CUPS 1.7@ */
|
||||
HTTP_FIELD_SERVER, /* Server field @since CUPS 1.7@ */
|
||||
HTTP_FIELD_MAX /* Maximum field index */
|
||||
} http_field_t;
|
||||
|
||||
@@ -198,181 +185,90 @@ typedef enum http_state_e /**** HTTP state values; states
|
||||
**** are server-oriented...
|
||||
****/
|
||||
{
|
||||
HTTP_STATE_ERROR = -1, /* Error on socket */
|
||||
HTTP_STATE_WAITING, /* Waiting for command */
|
||||
HTTP_STATE_OPTIONS, /* OPTIONS command, waiting for blank line */
|
||||
HTTP_STATE_GET, /* GET command, waiting for blank line */
|
||||
HTTP_STATE_GET_SEND, /* GET command, sending data */
|
||||
HTTP_STATE_HEAD, /* HEAD command, waiting for blank line */
|
||||
HTTP_STATE_POST, /* POST command, waiting for blank line */
|
||||
HTTP_STATE_POST_RECV, /* POST command, receiving data */
|
||||
HTTP_STATE_POST_SEND, /* POST command, sending data */
|
||||
HTTP_STATE_PUT, /* PUT command, waiting for blank line */
|
||||
HTTP_STATE_PUT_RECV, /* PUT command, receiving data */
|
||||
HTTP_STATE_DELETE, /* DELETE command, waiting for blank line */
|
||||
HTTP_STATE_TRACE, /* TRACE command, waiting for blank line */
|
||||
HTTP_STATE_CONNECT, /* CONNECT command, waiting for blank line */
|
||||
HTTP_STATE_STATUS, /* Command complete, sending status */
|
||||
HTTP_STATE_UNKNOWN_METHOD, /* Unknown request method, waiting for blank line @since CUPS 1.7@ */
|
||||
HTTP_STATE_UNKNOWN_VERSION /* Unknown request method, waiting for blank line @since CUPS 1.7@ */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define HTTP_WAITING HTTP_STATE_WAITING
|
||||
# define HTTP_OPTIONS HTTP_STATE_OPTIONS
|
||||
# define HTTP_GET HTTP_STATE_GET
|
||||
# define HTTP_GET_SEND HTTP_STATE_GET_SEND
|
||||
# define HTTP_HEAD HTTP_STATE_HEAD
|
||||
# define HTTP_POST HTTP_STATE_POST
|
||||
# define HTTP_POST_RECV HTTP_STATE_POST_RECV
|
||||
# define HTTP_POST_SEND HTTP_STATE_POST_SEND
|
||||
# define HTTP_PUT HTTP_STATE_PUT
|
||||
# define HTTP_PUT_RECV HTTP_STATE_PUT_RECV
|
||||
# define HTTP_DELETE HTTP_STATE_DELETE
|
||||
# define HTTP_TRACE HTTP_STATE_TRACE
|
||||
# define HTTP_CLOSE HTTP_STATE_CONNECT
|
||||
# define HTTP_STATUS HTTP_STATE_STATUS
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
HTTP_WAITING, /* Waiting for command */
|
||||
HTTP_OPTIONS, /* OPTIONS command, waiting for blank line */
|
||||
HTTP_GET, /* GET command, waiting for blank line */
|
||||
HTTP_GET_SEND, /* GET command, sending data */
|
||||
HTTP_HEAD, /* HEAD command, waiting for blank line */
|
||||
HTTP_POST, /* POST command, waiting for blank line */
|
||||
HTTP_POST_RECV, /* POST command, receiving data */
|
||||
HTTP_POST_SEND, /* POST command, sending data */
|
||||
HTTP_PUT, /* PUT command, waiting for blank line */
|
||||
HTTP_PUT_RECV, /* PUT command, receiving data */
|
||||
HTTP_DELETE, /* DELETE command, waiting for blank line */
|
||||
HTTP_TRACE, /* TRACE command, waiting for blank line */
|
||||
HTTP_CLOSE, /* CLOSE command, waiting for blank line */
|
||||
HTTP_STATUS /* Command complete, sending status */
|
||||
} http_state_t;
|
||||
|
||||
typedef enum http_status_e /**** HTTP status codes ****/
|
||||
{
|
||||
HTTP_STATUS_ERROR = -1, /* An error response from httpXxxx() */
|
||||
HTTP_STATUS_NONE = 0, /* No Expect value @since CUPS 1.7@ */
|
||||
HTTP_ERROR = -1, /* An error response from httpXxxx() */
|
||||
|
||||
HTTP_STATUS_CONTINUE = 100, /* Everything OK, keep going... */
|
||||
HTTP_STATUS_SWITCHING_PROTOCOLS, /* HTTP upgrade to TLS/SSL */
|
||||
HTTP_CONTINUE = 100, /* Everything OK, keep going... */
|
||||
HTTP_SWITCHING_PROTOCOLS, /* HTTP upgrade to TLS/SSL */
|
||||
|
||||
HTTP_STATUS_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */
|
||||
HTTP_STATUS_CREATED, /* PUT command was successful */
|
||||
HTTP_STATUS_ACCEPTED, /* DELETE command was successful */
|
||||
HTTP_STATUS_NOT_AUTHORITATIVE, /* Information isn't authoritative */
|
||||
HTTP_STATUS_NO_CONTENT, /* Successful command, no new data */
|
||||
HTTP_STATUS_RESET_CONTENT, /* Content was reset/recreated */
|
||||
HTTP_STATUS_PARTIAL_CONTENT, /* Only a partial file was recieved/sent */
|
||||
HTTP_OK = 200, /* OPTIONS/GET/HEAD/POST/TRACE command was successful */
|
||||
HTTP_CREATED, /* PUT command was successful */
|
||||
HTTP_ACCEPTED, /* DELETE command was successful */
|
||||
HTTP_NOT_AUTHORITATIVE, /* Information isn't authoritative */
|
||||
HTTP_NO_CONTENT, /* Successful command, no new data */
|
||||
HTTP_RESET_CONTENT, /* Content was reset/recreated */
|
||||
HTTP_PARTIAL_CONTENT, /* Only a partial file was recieved/sent */
|
||||
|
||||
HTTP_STATUS_MULTIPLE_CHOICES = 300, /* Multiple files match request */
|
||||
HTTP_STATUS_MOVED_PERMANENTLY, /* Document has moved permanently */
|
||||
HTTP_STATUS_MOVED_TEMPORARILY, /* Document has moved temporarily */
|
||||
HTTP_STATUS_SEE_OTHER, /* See this other link... */
|
||||
HTTP_STATUS_NOT_MODIFIED, /* File not modified */
|
||||
HTTP_STATUS_USE_PROXY, /* Must use a proxy to access this URI */
|
||||
HTTP_MULTIPLE_CHOICES = 300, /* Multiple files match request */
|
||||
HTTP_MOVED_PERMANENTLY, /* Document has moved permanently */
|
||||
HTTP_MOVED_TEMPORARILY, /* Document has moved temporarily */
|
||||
HTTP_SEE_OTHER, /* See this other link... */
|
||||
HTTP_NOT_MODIFIED, /* File not modified */
|
||||
HTTP_USE_PROXY, /* Must use a proxy to access this URI */
|
||||
|
||||
HTTP_STATUS_BAD_REQUEST = 400, /* Bad request */
|
||||
HTTP_STATUS_UNAUTHORIZED, /* Unauthorized to access host */
|
||||
HTTP_STATUS_PAYMENT_REQUIRED, /* Payment required */
|
||||
HTTP_STATUS_FORBIDDEN, /* Forbidden to access this URI */
|
||||
HTTP_STATUS_NOT_FOUND, /* URI was not found */
|
||||
HTTP_STATUS_METHOD_NOT_ALLOWED, /* Method is not allowed */
|
||||
HTTP_STATUS_NOT_ACCEPTABLE, /* Not Acceptable */
|
||||
HTTP_STATUS_PROXY_AUTHENTICATION, /* Proxy Authentication is Required */
|
||||
HTTP_STATUS_REQUEST_TIMEOUT, /* Request timed out */
|
||||
HTTP_STATUS_CONFLICT, /* Request is self-conflicting */
|
||||
HTTP_STATUS_GONE, /* Server has gone away */
|
||||
HTTP_STATUS_LENGTH_REQUIRED, /* A content length or encoding is required */
|
||||
HTTP_STATUS_PRECONDITION, /* Precondition failed */
|
||||
HTTP_STATUS_REQUEST_TOO_LARGE, /* Request entity too large */
|
||||
HTTP_STATUS_URI_TOO_LONG, /* URI too long */
|
||||
HTTP_STATUS_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */
|
||||
HTTP_STATUS_REQUESTED_RANGE, /* The requested range is not satisfiable */
|
||||
HTTP_STATUS_EXPECTATION_FAILED, /* The expectation given in an Expect header field was not met */
|
||||
HTTP_STATUS_UPGRADE_REQUIRED = 426, /* Upgrade to SSL/TLS required */
|
||||
HTTP_BAD_REQUEST = 400, /* Bad request */
|
||||
HTTP_UNAUTHORIZED, /* Unauthorized to access host */
|
||||
HTTP_PAYMENT_REQUIRED, /* Payment required */
|
||||
HTTP_FORBIDDEN, /* Forbidden to access this URI */
|
||||
HTTP_NOT_FOUND, /* URI was not found */
|
||||
HTTP_METHOD_NOT_ALLOWED, /* Method is not allowed */
|
||||
HTTP_NOT_ACCEPTABLE, /* Not Acceptable */
|
||||
HTTP_PROXY_AUTHENTICATION, /* Proxy Authentication is Required */
|
||||
HTTP_REQUEST_TIMEOUT, /* Request timed out */
|
||||
HTTP_CONFLICT, /* Request is self-conflicting */
|
||||
HTTP_GONE, /* Server has gone away */
|
||||
HTTP_LENGTH_REQUIRED, /* A content length or encoding is required */
|
||||
HTTP_PRECONDITION, /* Precondition failed */
|
||||
HTTP_REQUEST_TOO_LARGE, /* Request entity too large */
|
||||
HTTP_URI_TOO_LONG, /* URI too long */
|
||||
HTTP_UNSUPPORTED_MEDIATYPE, /* The requested media type is unsupported */
|
||||
HTTP_REQUESTED_RANGE, /* The requested range is not satisfiable */
|
||||
HTTP_EXPECTATION_FAILED, /* The expectation given in an Expect header field was not met */
|
||||
HTTP_UPGRADE_REQUIRED = 426, /* Upgrade to SSL/TLS required */
|
||||
|
||||
HTTP_STATUS_SERVER_ERROR = 500, /* Internal server error */
|
||||
HTTP_STATUS_NOT_IMPLEMENTED, /* Feature not implemented */
|
||||
HTTP_STATUS_BAD_GATEWAY, /* Bad gateway */
|
||||
HTTP_STATUS_SERVICE_UNAVAILABLE, /* Service is unavailable */
|
||||
HTTP_STATUS_GATEWAY_TIMEOUT, /* Gateway connection timed out */
|
||||
HTTP_STATUS_NOT_SUPPORTED, /* HTTP version not supported */
|
||||
HTTP_SERVER_ERROR = 500, /* Internal server error */
|
||||
HTTP_NOT_IMPLEMENTED, /* Feature not implemented */
|
||||
HTTP_BAD_GATEWAY, /* Bad gateway */
|
||||
HTTP_SERVICE_UNAVAILABLE, /* Service is unavailable */
|
||||
HTTP_GATEWAY_TIMEOUT, /* Gateway connection timed out */
|
||||
HTTP_NOT_SUPPORTED, /* HTTP version not supported */
|
||||
|
||||
HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED = 1000,
|
||||
/* User canceled authorization @since CUPS 1.4@ */
|
||||
HTTP_STATUS_CUPS_PKI_ERROR, /* Error negotiating a secure connection @since CUPS 1.5/OS X 10.7@ */
|
||||
HTTP_STATUS_CUPS_WEBIF_DISABLED /* Web interface is disabled @private@ */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
/* Old names for this enumeration */
|
||||
# define HTTP_ERROR HTTP_STATUS_ERROR
|
||||
|
||||
# define HTTP_CONTINUE HTTP_STATUS_CONTINUE
|
||||
# define HTTP_SWITCHING_PROTOCOLS HTTP_STATUS_SWITCHING_PROTOCOLS
|
||||
|
||||
# define HTTP_OK HTTP_STATUS_OK
|
||||
# define HTTP_CREATED HTTP_STATUS_CREATED
|
||||
# define HTTP_ACCEPTED HTTP_STATUS_ACCEPTED
|
||||
# define HTTP_NOT_AUTHORITATIVE HTTP_STATUS_NOT_AUTHORITATIVE
|
||||
# define HTTP_NO_CONTENT HTTP_STATUS_NO_CONTENT
|
||||
# define HTTP_RESET_CONTENT HTTP_STATUS_RESET_CONTENT
|
||||
# define HTTP_PARTIAL_CONTENT HTTP_STATUS_PARTIAL_CONTENT
|
||||
|
||||
# define HTTP_MULTIPLE_CHOICES HTTP_STATUS_MULTIPLE_CHOICES
|
||||
# define HTTP_MOVED_PERMANENTLY HTTP_STATUS_MOVED_PERMANENTLY
|
||||
# define HTTP_MOVED_TEMPORARILY HTTP_STATUS_MOVED_TEMPORARILY
|
||||
# define HTTP_SEE_OTHER HTTP_STATUS_SEE_OTHER
|
||||
# define HTTP_NOT_MODIFIED HTTP_STATUS_NOT_MODIFIED
|
||||
# define HTTP_USE_PROXY HTTP_STATUS_USE_PROXY
|
||||
|
||||
# define HTTP_BAD_REQUEST HTTP_STATUS_BAD_REQUEST
|
||||
# define HTTP_UNAUTHORIZED HTTP_STATUS_UNAUTHORIZED
|
||||
# define HTTP_PAYMENT_REQUIRED HTTP_STATUS_PAYMENT_REQUIRED
|
||||
# define HTTP_FORBIDDEN HTTP_STATUS_FORBIDDEN
|
||||
# define HTTP_NOT_FOUND HTTP_STATUS_NOT_FOUND
|
||||
# define HTTP_METHOD_NOT_ALLOWED HTTP_STATUS_METHOD_NOT_ALLOWED
|
||||
# define HTTP_NOT_ACCEPTABLE HTTP_STATUS_NOT_ACCEPTABLE
|
||||
# define HTTP_PROXY_AUTHENTICATION HTTP_STATUS_PROXY_AUTHENTICATION
|
||||
# define HTTP_REQUEST_TIMEOUT HTTP_STATUS_REQUEST_TIMEOUT
|
||||
# define HTTP_CONFLICT HTTP_STATUS_CONFLICT
|
||||
# define HTTP_GONE HTTP_STATUS_GONE
|
||||
# define HTTP_LENGTH_REQUIRED HTTP_STATUS_LENGTH_REQUIRED
|
||||
# define HTTP_PRECONDITION HTTP_STATUS_PRECONDITION
|
||||
# define HTTP_REQUEST_TOO_LARGE HTTP_STATUS_REQUEST_TOO_LARGE
|
||||
# define HTTP_URI_TOO_LONG HTTP_STATUS_URI_TOO_LONG
|
||||
# define HTTP_UNSUPPORTED_MEDIATYPE HTTP_STATUS_UNSUPPORTED_MEDIATYPE
|
||||
# define HTTP_REQUESTED_RANGE HTTP_STATUS_REQUESTED_RANGE
|
||||
# define HTTP_EXPECTATION_FAILED HTTP_STATUS_EXPECTATION_FAILED
|
||||
# define HTTP_UPGRADE_REQUIRED HTTP_STATUS_UPGRADE_REQUIRED
|
||||
|
||||
# define HTTP_SERVER_ERROR HTTP_STATUS_SERVER_ERROR
|
||||
# define HTTP_NOT_IMPLEMENTED HTTP_STATUS_NOT_IMPLEMENTED
|
||||
# define HTTP_BAD_GATEWAY HTTP_STATUS_BAD_GATEWAY
|
||||
# define HTTP_SERVICE_UNAVAILABLE HTTP_STATUS_SERVICE_UNAVAILABLE
|
||||
# define HTTP_GATEWAY_TIMEOUT HTTP_STATUS_GATEWAY_TIMEOUT
|
||||
# define HTTP_NOT_SUPPORTED HTTP_STATUS_NOT_SUPPORTED
|
||||
|
||||
# define HTTP_AUTHORIZATION_CANCELED HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED
|
||||
# define HTTP_PKI_ERROR HTTP_STATUS_CUPS_PKI_ERROR
|
||||
# define HTTP_WEBIF_DISABLED HTTP_STATUS_CUPS_WEBIF_DISABLED
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
HTTP_AUTHORIZATION_CANCELED = 1000, /* User canceled authorization @since CUPS 1.4@ */
|
||||
HTTP_PKI_ERROR, /* Error negotiating a secure connection @since CUPS 1.5/OS X 10.7@ */
|
||||
HTTP_WEBIF_DISABLED /* Web interface is disabled @private@ */
|
||||
} http_status_t;
|
||||
|
||||
typedef enum http_uri_status_e /**** URI separation status @since CUPS 1.2@ ****/
|
||||
{
|
||||
HTTP_URI_STATUS_OVERFLOW = -8, /* URI buffer for httpAssembleURI is too small */
|
||||
HTTP_URI_STATUS_BAD_ARGUMENTS = -7, /* Bad arguments to function (error) */
|
||||
HTTP_URI_STATUS_BAD_RESOURCE = -6, /* Bad resource in URI (error) */
|
||||
HTTP_URI_STATUS_BAD_PORT = -5, /* Bad port number in URI (error) */
|
||||
HTTP_URI_STATUS_BAD_HOSTNAME = -4, /* Bad hostname in URI (error) */
|
||||
HTTP_URI_STATUS_BAD_USERNAME = -3, /* Bad username in URI (error) */
|
||||
HTTP_URI_STATUS_BAD_SCHEME = -2, /* Bad scheme in URI (error) */
|
||||
HTTP_URI_STATUS_BAD_URI = -1, /* Bad/empty URI (error) */
|
||||
HTTP_URI_STATUS_OK = 0, /* URI decoded OK */
|
||||
HTTP_URI_STATUS_MISSING_SCHEME, /* Missing scheme in URI (warning) */
|
||||
HTTP_URI_STATUS_UNKNOWN_SCHEME, /* Unknown scheme in URI (warning) */
|
||||
HTTP_URI_STATUS_MISSING_RESOURCE /* Missing resource in URI (warning) */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define HTTP_URI_OVERFLOW HTTP_URI_STATUS_OVERFLOW
|
||||
# define HTTP_URI_BAD_ARGUMENTS HTTP_URI_STATUS_BAD_ARGUMENTS
|
||||
# define HTTP_URI_BAD_RESOURCE HTTP_URI_STATUS_BAD_RESOURCE
|
||||
# define HTTP_URI_BAD_PORT HTTP_URI_STATUS_BAD_PORT
|
||||
# define HTTP_URI_BAD_HOSTNAME HTTP_URI_STATUS_BAD_HOSTNAME
|
||||
# define HTTP_URI_BAD_USERNAME HTTP_URI_STATUS_BAD_USERNAME
|
||||
# define HTTP_URI_BAD_SCHEME HTTP_URI_STATUS_BAD_SCHEME
|
||||
# define HTTP_URI_BAD_URI HTTP_URI_STATUS_BAD_URI
|
||||
# define HTTP_URI_OK HTTP_URI_STATUS_OK
|
||||
# define HTTP_URI_MISSING_SCHEME HTTP_URI_STATUS_MISSING_SCHEME
|
||||
# define HTTP_URI_UNKNOWN_SCHEME HTTP_URI_STATUS_UNKNOWN_SCHEME
|
||||
# define HTTP_URI_MISSING_RESOURCE HTTP_URI_STATUS_MISSING_RESOURCE
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
HTTP_URI_OVERFLOW = -8, /* URI buffer for httpAssembleURI is too small */
|
||||
HTTP_URI_BAD_ARGUMENTS = -7, /* Bad arguments to function (error) */
|
||||
HTTP_URI_BAD_RESOURCE = -6, /* Bad resource in URI (error) */
|
||||
HTTP_URI_BAD_PORT = -5, /* Bad port number in URI (error) */
|
||||
HTTP_URI_BAD_HOSTNAME = -4, /* Bad hostname in URI (error) */
|
||||
HTTP_URI_BAD_USERNAME = -3, /* Bad username in URI (error) */
|
||||
HTTP_URI_BAD_SCHEME = -2, /* Bad scheme in URI (error) */
|
||||
HTTP_URI_BAD_URI = -1, /* Bad/empty URI (error) */
|
||||
HTTP_URI_OK = 0, /* URI decoded OK */
|
||||
HTTP_URI_MISSING_SCHEME, /* Missing scheme in URI (warning) */
|
||||
HTTP_URI_UNKNOWN_SCHEME, /* Unknown scheme in URI (warning) */
|
||||
HTTP_URI_MISSING_RESOURCE /* Missing resource in URI (warning) */
|
||||
} http_uri_status_t;
|
||||
|
||||
typedef enum http_uri_coding_e /**** URI en/decode flags ****/
|
||||
@@ -388,15 +284,9 @@ typedef enum http_uri_coding_e /**** URI en/decode flags ****/
|
||||
|
||||
typedef enum http_version_e /**** HTTP version numbers ****/
|
||||
{
|
||||
HTTP_VERSION_0_9 = 9, /* HTTP/0.9 */
|
||||
HTTP_VERSION_1_0 = 100, /* HTTP/1.0 */
|
||||
HTTP_VERSION_1_1 = 101 /* HTTP/1.1 */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define HTTP_0_9 HTTP_VERSION_0_9
|
||||
# define HTTP_1_0 HTTP_VERSION_1_0
|
||||
# define HTTP_1_1 HTTP_VERSION_1_1
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
HTTP_0_9 = 9, /* HTTP/0.9 */
|
||||
HTTP_1_0 = 100, /* HTTP/1.0 */
|
||||
HTTP_1_1 = 101 /* HTTP/1.1 */
|
||||
} http_version_t;
|
||||
|
||||
typedef union _http_addr_u /**** Socket address union, which
|
||||
@@ -447,11 +337,9 @@ extern void httpBlocking(http_t *http, int b);
|
||||
extern int httpCheck(http_t *http);
|
||||
extern void httpClearFields(http_t *http);
|
||||
extern void httpClose(http_t *http);
|
||||
extern http_t *httpConnect(const char *host, int port)
|
||||
_CUPS_DEPRECATED_MSG("Use httpConnect2 instead.");
|
||||
extern http_t *httpConnect(const char *host, int port);
|
||||
extern http_t *httpConnectEncrypt(const char *host, int port,
|
||||
http_encryption_t encryption)
|
||||
_CUPS_DEPRECATED_MSG("Use httpConnect2 instead.");
|
||||
http_encryption_t encryption);
|
||||
extern int httpDelete(http_t *http, const char *uri);
|
||||
extern int httpEncryption(http_t *http, http_encryption_t e);
|
||||
extern int httpError(http_t *http);
|
||||
@@ -471,20 +359,20 @@ extern int httpPost(http_t *http, const char *uri);
|
||||
extern int httpPrintf(http_t *http, const char *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
extern int httpPut(http_t *http, const char *uri);
|
||||
extern int httpRead(http_t *http, char *buffer, int length) _CUPS_DEPRECATED_MSG("Use httpRead2 instead.");
|
||||
extern int httpReconnect(http_t *http) _CUPS_DEPRECATED_MSG("Use httpReconnect2 instead.");
|
||||
extern int httpRead(http_t *http, char *buffer, int length) _CUPS_DEPRECATED;
|
||||
extern int httpReconnect(http_t *http);
|
||||
extern void httpSeparate(const char *uri, char *method,
|
||||
char *username, char *host, int *port,
|
||||
char *resource) _CUPS_DEPRECATED_MSG("Use httpSeparateURI instead.");
|
||||
char *resource) _CUPS_DEPRECATED;
|
||||
extern void httpSetField(http_t *http, http_field_t field,
|
||||
const char *value);
|
||||
extern const char *httpStatus(http_status_t status);
|
||||
extern int httpTrace(http_t *http, const char *uri);
|
||||
extern http_status_t httpUpdate(http_t *http);
|
||||
extern int httpWrite(http_t *http, const char *buffer, int length) _CUPS_DEPRECATED_MSG("Use httpWrite2 instead.");
|
||||
extern char *httpEncode64(char *out, const char *in) _CUPS_DEPRECATED_MSG("Use httpEncode64_2 instead.");
|
||||
extern char *httpDecode64(char *out, const char *in) _CUPS_DEPRECATED_MSG("Use httpDecode64_2 instead.");
|
||||
extern int httpGetLength(http_t *http) _CUPS_DEPRECATED_MSG("Use httpGetLength2 instead.");
|
||||
extern int httpWrite(http_t *http, const char *buffer, int length) _CUPS_DEPRECATED;
|
||||
extern char *httpEncode64(char *out, const char *in) _CUPS_DEPRECATED;
|
||||
extern char *httpDecode64(char *out, const char *in) _CUPS_DEPRECATED;
|
||||
extern int httpGetLength(http_t *http) _CUPS_DEPRECATED;
|
||||
extern char *httpMD5(const char *, const char *, const char *,
|
||||
char [33]);
|
||||
extern char *httpMD5Final(const char *, const char *, const char *,
|
||||
@@ -505,7 +393,7 @@ extern void httpSeparate2(const char *uri,
|
||||
char *method, int methodlen,
|
||||
char *username, int usernamelen,
|
||||
char *host, int hostlen, int *port,
|
||||
char *resource, int resourcelen) _CUPS_DEPRECATED_MSG("Use httpSeparateURI instead.");
|
||||
char *resource, int resourcelen) _CUPS_DEPRECATED;
|
||||
|
||||
/**** New in CUPS 1.2/OS X 10.5 ****/
|
||||
extern int httpAddrAny(const http_addr_t *addr) _CUPS_API_1_2;
|
||||
@@ -584,34 +472,6 @@ extern int httpReconnect2(http_t *http, int msec, int *cancel)
|
||||
_CUPS_API_1_6;
|
||||
|
||||
|
||||
/**** New in CUPS 1.7 ****/
|
||||
extern http_t *httpAcceptConnection(int fd, int blocking)
|
||||
_CUPS_API_1_7;
|
||||
extern http_addrlist_t *httpAddrCopyList(http_addrlist_t *src) _CUPS_API_1_7;
|
||||
extern int httpAddrListen(http_addr_t *addr, int port)
|
||||
_CUPS_API_1_7;
|
||||
extern int httpAddrPort(http_addr_t *addr) _CUPS_API_1_7;
|
||||
extern char *httpAssembleUUID(const char *server, int port,
|
||||
const char *name, int number,
|
||||
char *buffer, size_t bufsize)
|
||||
_CUPS_API_1_7;
|
||||
extern http_t *httpConnect2(const char *host, int port,
|
||||
http_addrlist_t *addrlist,
|
||||
int family, http_encryption_t encryption,
|
||||
int blocking, int msec, int *cancel)
|
||||
_CUPS_API_1_7;
|
||||
extern const char *httpGetContentEncoding(http_t *http) _CUPS_API_1_7;
|
||||
extern http_status_t httpGetExpect(http_t *http) _CUPS_API_1_7;
|
||||
extern ssize_t httpPeek(http_t *http, char *buffer, size_t length)
|
||||
_CUPS_API_1_7;
|
||||
extern http_state_t httpReadRequest(http_t *http, char *resource,
|
||||
size_t resourcelen) _CUPS_API_1_7;
|
||||
extern void httpSetDefaultField(http_t *http, http_field_t field,
|
||||
const char *value) _CUPS_API_1_7;
|
||||
extern http_state_t httpWriteResponse(http_t *http,
|
||||
http_status_t status) _CUPS_API_1_7;
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Private IPP definitions 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
|
||||
@@ -54,7 +54,6 @@ typedef struct /**** Attribute mapping data ****/
|
||||
ipp_tag_t group_tag; /* Group tag for this attribute */
|
||||
ipp_tag_t alt_group_tag; /* Alternate group tag for this
|
||||
* attribute */
|
||||
const ipp_op_t *operations; /* Allowed operations for this attr */
|
||||
} _ipp_option_t;
|
||||
|
||||
|
||||
@@ -62,11 +61,9 @@ typedef struct /**** Attribute mapping data ****/
|
||||
* Prototypes for private functions...
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
extern const char *_ippCheckOptions(void);
|
||||
#endif /* DEBUG */
|
||||
extern _ipp_option_t *_ippFindOption(const char *name);
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
+55
-1179
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+308
-1801
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
+173
-469
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Internet Printing Protocol definitions 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
|
||||
@@ -23,7 +23,6 @@
|
||||
*/
|
||||
|
||||
# include "http.h"
|
||||
# include <stdarg.h>
|
||||
|
||||
|
||||
/*
|
||||
@@ -55,16 +54,8 @@ extern "C" {
|
||||
* Common limits...
|
||||
*/
|
||||
|
||||
# define IPP_MAX_CHARSET 64 /* Maximum length of charset values w/nul */
|
||||
# define IPP_MAX_KEYWORD 256 /* Maximum length of keyword values w/nul */
|
||||
# define IPP_MAX_LANGUAGE 64 /* Maximum length of naturalLanguage values w/nul */
|
||||
# define IPP_MAX_LENGTH 32767 /* Maximum size of any single value */
|
||||
# define IPP_MAX_MIMETYPE 256 /* Maximum length of mimeMediaType values w/nul */
|
||||
# define IPP_MAX_NAME 256 /* Maximum length of common name values w/nul */
|
||||
# define IPP_MAX_OCTETSTRING 1023 /* Maximum length of octetString values w/o nul */
|
||||
# define IPP_MAX_TEXT 1024 /* Maximum length of text values w/nul */
|
||||
# define IPP_MAX_URI 1024 /* Maximum length of uri values w/nul */
|
||||
# define IPP_MAX_URISCHEME 64 /* Maximum length of uriScheme values w/nul */
|
||||
# define IPP_MAX_NAME 256 /* Maximum length of common name values */
|
||||
# define IPP_MAX_VALUES 8 /* Power-of-2 allocation increment */
|
||||
|
||||
|
||||
@@ -74,22 +65,14 @@ extern "C" {
|
||||
|
||||
typedef enum ipp_dstate_e /**** Document states ****/
|
||||
{
|
||||
IPP_DOCUMENT_PENDING = 3, /* Document is pending */
|
||||
IPP_DOCUMENT_PROCESSING = 5, /* Document is processing */
|
||||
IPP_DOCUMENT_CANCELED = 7, /* Document is canceled */
|
||||
IPP_DOCUMENT_ABORTED, /* Document is aborted */
|
||||
IPP_DOCUMENT_COMPLETED /* Document is completed */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_DOCUMENT_PENDING IPP_DSTATE_PENDING
|
||||
# define IPP_DOCUMENT_PROCESSING IPP_DSTATE_PROCESSING
|
||||
# define IPP_DOCUMENT_CANCELED IPP_DSTATE_CANCELED
|
||||
# define IPP_DOCUMENT_ABORTED IPP_DSTATE_ABORTED
|
||||
# define IPP_DOCUMENT_COMPLETED IPP_DSTATE_COMPLETED
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
IPP_DOCUMENT_PENDING = 3,
|
||||
IPP_DOCUMENT_PROCESSING = 5,
|
||||
IPP_DOCUMENT_CANCELED = 7,
|
||||
IPP_DOCUMENT_ABORTED,
|
||||
IPP_DOCUMENT_COMPLETED
|
||||
} ipp_dstate_t;
|
||||
|
||||
typedef enum ipp_finishings_e /**** Finishings ****/
|
||||
typedef enum ipp_finish_e /**** Finishings ****/
|
||||
{
|
||||
IPP_FINISHINGS_NONE = 3, /* No finishing */
|
||||
IPP_FINISHINGS_STAPLE, /* Staple (any location) */
|
||||
@@ -102,7 +85,7 @@ typedef enum ipp_finishings_e /**** Finishings ****/
|
||||
IPP_FINISHINGS_TRIM, /* Trim (any type) */
|
||||
IPP_FINISHINGS_BALE, /* Bale (any type) */
|
||||
IPP_FINISHINGS_BOOKLET_MAKER, /* Fold to make booklet */
|
||||
IPP_FINISHINGS_JOG_OFFSET, /* Offset for binding (any type) */
|
||||
IPP_FINISHINGS_JOB_OFFSET, /* Offset for binding (any type) */
|
||||
IPP_FINISHINGS_STAPLE_TOP_LEFT = 20, /* Staple top left corner */
|
||||
IPP_FINISHINGS_STAPLE_BOTTOM_LEFT, /* Staple bottom left corner */
|
||||
IPP_FINISHINGS_STAPLE_TOP_RIGHT, /* Staple top right corner */
|
||||
@@ -122,274 +105,126 @@ typedef enum ipp_finishings_e /**** Finishings ****/
|
||||
IPP_FINISHINGS_TRIM_AFTER_PAGES = 60, /* Trim output after each page */
|
||||
IPP_FINISHINGS_TRIM_AFTER_DOCUMENTS, /* Trim output after each document */
|
||||
IPP_FINISHINGS_TRIM_AFTER_COPIES, /* Trim output after each copy */
|
||||
IPP_FINISHINGS_TRIM_AFTER_JOB, /* Trim output after job */
|
||||
|
||||
/* Proposed extensions for finishings */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_TOP_LEFT = 0x40000046,
|
||||
/* Punch 1 hole top left */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_LEFT,/* Punch 1 hole bottom left */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_TOP_RIGHT, /* Punch 1 hole top right */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_BOTTOM_RIGHT,
|
||||
/* Punch 1 hole bottom right */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_DUAL_LEFT, /* Punch 2 holes left side */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_DUAL_TOP, /* Punch 2 holes top edge */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_DUAL_RIGHT, /* Punch 2 holes right side */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_DUAL_BOTTOM,/* Punch 2 holes bottom edge */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_LEFT,/* Punch 3 holes left side */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_TOP, /* Punch 3 holes top edge */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_RIGHT,
|
||||
/* Punch 3 holes right side */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_TRIPLE_BOTTOM,
|
||||
/* Punch 3 holes bottom edge */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_QUAD_LEFT, /* Punch 4 holes left side */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_QUAD_TOP, /* Punch 4 holes top edge */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_QUAD_RIGHT, /* Punch 4 holes right side */
|
||||
IPP_FINISHINGS_CUPS_PUNCH_QUAD_BOTTOM,/* Punch 4 holes bottom edge */
|
||||
|
||||
IPP_FINISHINGS_CUPS_FOLD_ACCORDIAN = 0x4000005A,
|
||||
/* Accordian-fold the paper vertically into four sections */
|
||||
IPP_FINISHINGS_CUPS_FOLD_DOUBLE_GATE, /* Fold the top and bottom quarters of the paper towards the midline, then fold in half vertically */
|
||||
IPP_FINISHINGS_CUPS_FOLD_GATE, /* Fold the top and bottom quarters of the paper towards the midline */
|
||||
IPP_FINISHINGS_CUPS_FOLD_HALF, /* Fold the paper in half vertically */
|
||||
IPP_FINISHINGS_CUPS_FOLD_HALF_Z, /* Fold the paper in half horizontally, then Z-fold the paper vertically */
|
||||
IPP_FINISHINGS_CUPS_FOLD_LEFT_GATE, /* Fold the top quarter of the paper towards the midline */
|
||||
IPP_FINISHINGS_CUPS_FOLD_LETTER, /* Fold the paper into three sections vertically; sometimes also known as a C fold*/
|
||||
IPP_FINISHINGS_CUPS_FOLD_PARALLEL, /* Fold the paper in half vertically two times, yielding four sections */
|
||||
IPP_FINISHINGS_CUPS_FOLD_POSTER, /* Fold the paper in half horizontally and vertically; sometimes also called a cross fold */
|
||||
IPP_FINISHINGS_CUPS_FOLD_RIGHT_GATE, /* Fold the bottom quarter of the paper towards the midline */
|
||||
IPP_FINISHINGS_CUPS_FOLD_Z /* Fold the paper vertically into three sections, forming a Z */
|
||||
} ipp_finishings_t;
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_FINISHINGS_JOB_OFFSET IPP_FINISHINGS_JOG_OFFSET
|
||||
/* Long-time misspelling... */
|
||||
typedef enum ipp_finishings_e ipp_finish_t;
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
IPP_FINISHINGS_TRIM_AFTER_JOB /* Trim output after job */
|
||||
} ipp_finish_t;
|
||||
|
||||
typedef enum ipp_jcollate_e /**** Job collation types ****/
|
||||
{
|
||||
IPP_JCOLLATE_UNCOLLATED_SHEETS = 3,
|
||||
IPP_JCOLLATE_COLLATED_DOCUMENTS,
|
||||
IPP_JCOLLATE_UNCOLLATED_DOCUMENTS
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_JOB_UNCOLLATED_SHEETS IPP_JCOLLATE_UNCOLLATED_SHEETS
|
||||
# define IPP_JOB_COLLATED_DOCUMENTS IPP_JCOLLATE_COLLATED_DOCUMENTS
|
||||
# define IPP_JOB_UNCOLLATED_DOCUMENTS IPP_JCOLLATE_UNCOLLATED_DOCUMENTS
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
IPP_JOB_UNCOLLATED_SHEETS = 3,
|
||||
IPP_JOB_COLLATED_DOCUMENTS,
|
||||
IPP_JOB_UNCOLLATED_DOCUMENTS
|
||||
} ipp_jcollate_t;
|
||||
|
||||
typedef enum ipp_jstate_e /**** Job states ****/
|
||||
{
|
||||
IPP_JSTATE_PENDING = 3, /* Job is waiting to be printed */
|
||||
IPP_JSTATE_HELD, /* Job is held for printing */
|
||||
IPP_JSTATE_PROCESSING, /* Job is currently printing */
|
||||
IPP_JSTATE_STOPPED, /* Job has been stopped */
|
||||
IPP_JSTATE_CANCELED, /* Job has been canceled */
|
||||
IPP_JSTATE_ABORTED, /* Job has aborted due to error */
|
||||
IPP_JSTATE_COMPLETED /* Job has completed successfully */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_JOB_PENDING IPP_JSTATE_PENDING
|
||||
# define IPP_JOB_HELD IPP_JSTATE_HELD
|
||||
# define IPP_JOB_PROCESSING IPP_JSTATE_PROCESSING
|
||||
# define IPP_JOB_STOPPED IPP_JSTATE_STOPPED
|
||||
# define IPP_JOB_CANCELED IPP_JSTATE_CANCELED
|
||||
# define IPP_JOB_ABORTED IPP_JSTATE_ABORTED
|
||||
# define IPP_JOB_COMPLETED IPP_JSTATE_COMPLETED
|
||||
IPP_JOB_PENDING = 3, /* Job is waiting to be printed */
|
||||
IPP_JOB_HELD, /* Job is held for printing */
|
||||
IPP_JOB_PROCESSING, /* Job is currently printing */
|
||||
IPP_JOB_STOPPED, /* Job has been stopped */
|
||||
IPP_JOB_CANCELED, /* Job has been canceled */
|
||||
IPP_JOB_ABORTED, /* Job has aborted due to error */
|
||||
IPP_JOB_COMPLETED /* Job has completed successfully */
|
||||
/* Legacy name for canceled state */
|
||||
# define IPP_JOB_CANCELLED IPP_JSTATE_CANCELED
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
#define IPP_JOB_CANCELLED IPP_JOB_CANCELED
|
||||
} ipp_jstate_t;
|
||||
|
||||
typedef enum ipp_op_e /**** IPP operations ****/
|
||||
{
|
||||
IPP_OP_CUPS_INVALID = -1, /* Invalid operation name for @link ippOpValue@ */
|
||||
IPP_OP_CUPS_NONE = 0, /* No operation @private@ */
|
||||
IPP_OP_PRINT_JOB = 0x0002, /* Print a single file */
|
||||
IPP_OP_PRINT_URI, /* Print a single URL @private@ */
|
||||
IPP_OP_VALIDATE_JOB, /* Validate job options */
|
||||
IPP_OP_CREATE_JOB, /* Create an empty print job */
|
||||
IPP_OP_SEND_DOCUMENT, /* Add a file to a job */
|
||||
IPP_OP_SEND_URI, /* Add a URL to a job @private@ */
|
||||
IPP_OP_CANCEL_JOB, /* Cancel a job */
|
||||
IPP_OP_GET_JOB_ATTRIBUTES, /* Get job attributes */
|
||||
IPP_OP_GET_JOBS, /* Get a list of jobs */
|
||||
IPP_OP_GET_PRINTER_ATTRIBUTES, /* Get printer attributes */
|
||||
IPP_OP_HOLD_JOB, /* Hold a job for printing */
|
||||
IPP_OP_RELEASE_JOB, /* Release a job for printing */
|
||||
IPP_OP_RESTART_JOB, /* Reprint a job */
|
||||
IPP_OP_PAUSE_PRINTER = 0x0010, /* Stop a printer */
|
||||
IPP_OP_RESUME_PRINTER, /* Start a printer */
|
||||
IPP_OP_PURGE_JOBS, /* Cancel all jobs */
|
||||
IPP_OP_SET_PRINTER_ATTRIBUTES, /* Set printer attributes @private@ */
|
||||
IPP_OP_SET_JOB_ATTRIBUTES, /* Set job attributes */
|
||||
IPP_OP_GET_PRINTER_SUPPORTED_VALUES, /* Get supported attribute values */
|
||||
IPP_OP_CREATE_PRINTER_SUBSCRIPTION, /* Create a printer subscription @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_OP_CREATE_JOB_SUBSCRIPTION, /* Create a job subscription @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES, /* Get subscription attributes @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_OP_GET_SUBSCRIPTIONS, /* Get list of subscriptions @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_OP_RENEW_SUBSCRIPTION, /* Renew a printer subscription @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_OP_CANCEL_SUBSCRIPTION, /* Cancel a subscription @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_OP_GET_NOTIFICATIONS, /* Get notification events @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_OP_SEND_NOTIFICATIONS, /* Send notification events @private@ */
|
||||
IPP_OP_GET_RESOURCE_ATTRIBUTES, /* Get resource attributes @private@ */
|
||||
IPP_OP_GET_RESOURCE_DATA, /* Get resource data @private@ */
|
||||
IPP_OP_GET_RESOURCES, /* Get list of resources @private@ */
|
||||
IPP_OP_GET_PRINT_SUPPORT_FILES, /* Get printer support files @private@ */
|
||||
IPP_OP_ENABLE_PRINTER, /* Start a printer */
|
||||
IPP_OP_DISABLE_PRINTER, /* Stop a printer */
|
||||
IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB,
|
||||
/* Stop printer after the current job @private@ */
|
||||
IPP_OP_HOLD_NEW_JOBS, /* Hold new jobs @private@ */
|
||||
IPP_OP_RELEASE_HELD_NEW_JOBS, /* Release new jobs @private@ */
|
||||
IPP_OP_DEACTIVATE_PRINTER, /* Stop a printer @private@ */
|
||||
IPP_OP_ACTIVATE_PRINTER, /* Start a printer @private@ */
|
||||
IPP_OP_RESTART_PRINTER, /* Restart a printer @private@ */
|
||||
IPP_OP_SHUTDOWN_PRINTER, /* Turn a printer off @private@ */
|
||||
IPP_OP_STARTUP_PRINTER, /* Turn a printer on @private@ */
|
||||
IPP_OP_REPROCESS_JOB, /* Reprint a job @private@ */
|
||||
IPP_OP_CANCEL_CURRENT_JOB, /* Cancel the current job @private@ */
|
||||
IPP_OP_SUSPEND_CURRENT_JOB, /* Suspend the current job @private@ */
|
||||
IPP_OP_RESUME_JOB, /* Resume the current job @private@ */
|
||||
IPP_OP_PROMOTE_JOB, /* Promote a job to print sooner @private@ */
|
||||
IPP_OP_SCHEDULE_JOB_AFTER, /* Schedule a job to print after another @private@ */
|
||||
IPP_OP_CANCEL_DOCUMENT = 0x0033, /* Cancel-Document @private@ */
|
||||
IPP_OP_GET_DOCUMENT_ATTRIBUTES, /* Get-Document-Attributes @private@ */
|
||||
IPP_OP_GET_DOCUMENTS, /* Get-Documents @private@ */
|
||||
IPP_OP_DELETE_DOCUMENT, /* Delete-Document @private@ */
|
||||
IPP_OP_SET_DOCUMENT_ATTRIBUTES, /* Set-Document-Attributes @private@ */
|
||||
IPP_OP_CANCEL_JOBS, /* Cancel-Jobs */
|
||||
IPP_OP_CANCEL_MY_JOBS, /* Cancel-My-Jobs */
|
||||
IPP_OP_RESUBMIT_JOB, /* Resubmit-Job */
|
||||
IPP_OP_CLOSE_JOB, /* Close-Job */
|
||||
IPP_OP_IDENTIFY_PRINTER, /* Identify-Printer (proposed IPP JPS3) */
|
||||
IPP_OP_VALIDATE_DOCUMENT, /* Validate-Document (proposed IPP JPS3) */
|
||||
IPP_OP_PRIVATE = 0x4000, /* Reserved @private@ */
|
||||
IPP_OP_CUPS_GET_DEFAULT, /* Get the default printer */
|
||||
IPP_OP_CUPS_GET_PRINTERS, /* Get a list of printers and/or classes */
|
||||
IPP_OP_CUPS_ADD_MODIFY_PRINTER, /* Add or modify a printer */
|
||||
IPP_OP_CUPS_DELETE_PRINTER, /* Delete a printer */
|
||||
IPP_OP_CUPS_GET_CLASSES, /* Get a list of classes @deprecated@ */
|
||||
IPP_OP_CUPS_ADD_MODIFY_CLASS, /* Add or modify a class */
|
||||
IPP_OP_CUPS_DELETE_CLASS, /* Delete a class */
|
||||
IPP_OP_CUPS_ACCEPT_JOBS, /* Accept new jobs on a printer */
|
||||
IPP_OP_CUPS_REJECT_JOBS, /* Reject new jobs on a printer */
|
||||
IPP_OP_CUPS_SET_DEFAULT, /* Set the default printer */
|
||||
IPP_OP_CUPS_GET_DEVICES, /* Get a list of supported devices */
|
||||
IPP_OP_CUPS_GET_PPDS, /* Get a list of supported drivers */
|
||||
IPP_OP_CUPS_MOVE_JOB, /* Move a job to a different printer */
|
||||
IPP_OP_CUPS_AUTHENTICATE_JOB, /* Authenticate a job @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_OP_CUPS_GET_PPD, /* Get a PPD file @since CUPS 1.3/OS X 10.5@ */
|
||||
IPP_OP_CUPS_GET_DOCUMENT = 0x4027 /* Get a document file @since CUPS 1.4/OS X 10.6@ */
|
||||
IPP_PRINT_JOB = 0x0002, /* Print a single file */
|
||||
IPP_PRINT_URI, /* Print a single URL @private@ */
|
||||
IPP_VALIDATE_JOB, /* Validate job options */
|
||||
IPP_CREATE_JOB, /* Create an empty print job */
|
||||
IPP_SEND_DOCUMENT, /* Add a file to a job */
|
||||
IPP_SEND_URI, /* Add a URL to a job @private@ */
|
||||
IPP_CANCEL_JOB, /* Cancel a job */
|
||||
IPP_GET_JOB_ATTRIBUTES, /* Get job attributes */
|
||||
IPP_GET_JOBS, /* Get a list of jobs */
|
||||
IPP_GET_PRINTER_ATTRIBUTES, /* Get printer attributes */
|
||||
IPP_HOLD_JOB, /* Hold a job for printing */
|
||||
IPP_RELEASE_JOB, /* Release a job for printing */
|
||||
IPP_RESTART_JOB, /* Reprint a job */
|
||||
IPP_PAUSE_PRINTER = 0x0010, /* Stop a printer */
|
||||
IPP_RESUME_PRINTER, /* Start a printer */
|
||||
IPP_PURGE_JOBS, /* Cancel all jobs */
|
||||
IPP_SET_PRINTER_ATTRIBUTES, /* Set printer attributes @private@ */
|
||||
IPP_SET_JOB_ATTRIBUTES, /* Set job attributes */
|
||||
IPP_GET_PRINTER_SUPPORTED_VALUES, /* Get supported attribute values */
|
||||
IPP_CREATE_PRINTER_SUBSCRIPTION, /* Create a printer subscription @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_CREATE_JOB_SUBSCRIPTION, /* Create a job subscription @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_GET_SUBSCRIPTION_ATTRIBUTES, /* Get subscription attributes @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_GET_SUBSCRIPTIONS, /* Get list of subscriptions @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_RENEW_SUBSCRIPTION, /* Renew a printer subscription @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_CANCEL_SUBSCRIPTION, /* Cancel a subscription @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_GET_NOTIFICATIONS, /* Get notification events @since CUPS 1.2/OS X 10.5@ */
|
||||
IPP_SEND_NOTIFICATIONS, /* Send notification events @private@ */
|
||||
IPP_GET_RESOURCE_ATTRIBUTES, /* Get resource attributes @private@ */
|
||||
IPP_GET_RESOURCE_DATA, /* Get resource data @private@ */
|
||||
IPP_GET_RESOURCES, /* Get list of resources @private@ */
|
||||
IPP_GET_PRINT_SUPPORT_FILES, /* Get printer support files @private@ */
|
||||
IPP_ENABLE_PRINTER, /* Start a printer */
|
||||
IPP_DISABLE_PRINTER, /* Stop a printer */
|
||||
IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB, /* Stop printer after the current job @private@ */
|
||||
IPP_HOLD_NEW_JOBS, /* Hold new jobs @private@ */
|
||||
IPP_RELEASE_HELD_NEW_JOBS, /* Release new jobs @private@ */
|
||||
IPP_DEACTIVATE_PRINTER, /* Stop a printer @private@ */
|
||||
IPP_ACTIVATE_PRINTER, /* Start a printer @private@ */
|
||||
IPP_RESTART_PRINTER, /* Restart a printer @private@ */
|
||||
IPP_SHUTDOWN_PRINTER, /* Turn a printer off @private@ */
|
||||
IPP_STARTUP_PRINTER, /* Turn a printer on @private@ */
|
||||
IPP_REPROCESS_JOB, /* Reprint a job @private@ */
|
||||
IPP_CANCEL_CURRENT_JOB, /* Cancel the current job @private@ */
|
||||
IPP_SUSPEND_CURRENT_JOB, /* Suspend the current job @private@ */
|
||||
IPP_RESUME_JOB, /* Resume the current job @private@ */
|
||||
IPP_PROMOTE_JOB, /* Promote a job to print sooner @private@ */
|
||||
IPP_SCHEDULE_JOB_AFTER, /* Schedule a job to print after another @private@ */
|
||||
IPP_CANCEL_DOCUMENT = 0x0033, /* Cancel-Document @private@ */
|
||||
IPP_GET_DOCUMENT_ATTRIBUTES, /* Get-Document-Attributes @private@ */
|
||||
IPP_GET_DOCUMENTS, /* Get-Documents @private@ */
|
||||
IPP_DELETE_DOCUMENT, /* Delete-Document @private@ */
|
||||
IPP_SET_DOCUMENT_ATTRIBUTES, /* Set-Document-Attributes @private@ */
|
||||
IPP_CANCEL_JOBS, /* Cancel-Jobs */
|
||||
IPP_CANCEL_MY_JOBS, /* Cancel-My-Jobs */
|
||||
IPP_RESUBMIT_JOB, /* Resubmit-Job */
|
||||
IPP_CLOSE_JOB, /* Close-Job */
|
||||
IPP_IDENTIFY_PRINTER, /* Identify-Printer (proposed IPP JPS3) */
|
||||
IPP_VALIDATE_DOCUMENT, /* Validate-Document (proposed IPP JPS3) */
|
||||
IPP_PRIVATE = 0x4000, /* Reserved @private@ */
|
||||
CUPS_GET_DEFAULT, /* Get the default printer */
|
||||
CUPS_GET_PRINTERS, /* Get a list of printers and/or classes */
|
||||
CUPS_ADD_MODIFY_PRINTER, /* Add or modify a printer */
|
||||
CUPS_DELETE_PRINTER, /* Delete a printer */
|
||||
CUPS_GET_CLASSES, /* Get a list of classes @deprecated@ */
|
||||
CUPS_ADD_MODIFY_CLASS, /* Add or modify a class */
|
||||
CUPS_DELETE_CLASS, /* Delete a class */
|
||||
CUPS_ACCEPT_JOBS, /* Accept new jobs on a printer */
|
||||
CUPS_REJECT_JOBS, /* Reject new jobs on a printer */
|
||||
CUPS_SET_DEFAULT, /* Set the default printer */
|
||||
CUPS_GET_DEVICES, /* Get a list of supported devices */
|
||||
CUPS_GET_PPDS, /* Get a list of supported drivers */
|
||||
CUPS_MOVE_JOB, /* Move a job to a different printer */
|
||||
CUPS_AUTHENTICATE_JOB, /* Authenticate a job @since CUPS 1.2/OS X 10.5@ */
|
||||
CUPS_GET_PPD, /* Get a PPD file @since CUPS 1.3/OS X 10.5@ */
|
||||
CUPS_GET_DOCUMENT = 0x4027 /* Get a document file @since CUPS 1.4/OS X 10.6@ */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_PRINT_JOB IPP_OP_PRINT_JOB
|
||||
# define IPP_PRINT_URI IPP_OP_PRINT_URI
|
||||
# define IPP_VALIDATE_JOB IPP_OP_VALIDATE_JOB
|
||||
# define IPP_CREATE_JOB IPP_OP_CREATE_JOB
|
||||
# define IPP_SEND_DOCUMENT IPP_OP_SEND_DOCUMENT
|
||||
# define IPP_SEND_URI IPP_OP_SEND_URI
|
||||
# define IPP_CANCEL_JOB IPP_OP_CANCEL_JOB
|
||||
# define IPP_GET_JOB_ATTRIBUTES IPP_OP_GET_JOB_ATTRIBUTES
|
||||
# define IPP_GET_JOBS IPP_OP_GET_JOBS
|
||||
# define IPP_GET_PRINTER_ATTRIBUTES IPP_OP_GET_PRINTER_ATTRIBUTES
|
||||
# define IPP_HOLD_JOB IPP_OP_HOLD_JOB
|
||||
# define IPP_RELEASE_JOB IPP_OP_RELEASE_JOB
|
||||
# define IPP_RESTART_JOB IPP_OP_RESTART_JOB
|
||||
# define IPP_PAUSE_PRINTER IPP_OP_PAUSE_PRINTER
|
||||
# define IPP_RESUME_PRINTER IPP_OP_RESUME_PRINTER
|
||||
# define IPP_PURGE_JOBS IPP_OP_PURGE_JOBS
|
||||
# define IPP_SET_PRINTER_ATTRIBUTES IPP_OP_SET_PRINTER_ATTRIBUTES
|
||||
# define IPP_SET_JOB_ATTRIBUTES IPP_OP_SET_JOB_ATTRIBUTES
|
||||
# define IPP_GET_PRINTER_SUPPORTED_VALUES IPP_OP_GET_PRINTER_SUPPORTED_VALUES
|
||||
# define IPP_CREATE_PRINTER_SUBSCRIPTION IPP_OP_CREATE_PRINTER_SUBSCRIPTION
|
||||
# define IPP_CREATE_JOB_SUBSCRIPTION IPP_OP_CREATE_JOB_SUBSCRIPTION
|
||||
# define IPP_GET_SUBSCRIPTION_ATTRIBUTES IPP_OP_GET_SUBSCRIPTION_ATTRIBUTES
|
||||
# define IPP_GET_SUBSCRIPTIONS IPP_OP_GET_SUBSCRIPTIONS
|
||||
# define IPP_RENEW_SUBSCRIPTION IPP_OP_RENEW_SUBSCRIPTION
|
||||
# define IPP_CANCEL_SUBSCRIPTION IPP_OP_CANCEL_SUBSCRIPTION
|
||||
# define IPP_GET_NOTIFICATIONS IPP_OP_GET_NOTIFICATIONS
|
||||
# define IPP_SEND_NOTIFICATIONS IPP_OP_SEND_NOTIFICATIONS
|
||||
# define IPP_GET_RESOURCE_ATTRIBUTES IPP_OP_GET_RESOURCE_ATTRIBUTES
|
||||
# define IPP_GET_RESOURCE_DATA IPP_OP_GET_RESOURCE_DATA
|
||||
# define IPP_GET_RESOURCES IPP_OP_GET_RESOURCES
|
||||
# define IPP_GET_PRINT_SUPPORT_FILES IPP_OP_GET_PRINT_SUPPORT_FILES
|
||||
# define IPP_ENABLE_PRINTER IPP_OP_ENABLE_PRINTER
|
||||
# define IPP_DISABLE_PRINTER IPP_OP_DISABLE_PRINTER
|
||||
# define IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB IPP_OP_PAUSE_PRINTER_AFTER_CURRENT_JOB
|
||||
# define IPP_HOLD_NEW_JOBS IPP_OP_HOLD_NEW_JOBS
|
||||
# define IPP_RELEASE_HELD_NEW_JOBS IPP_OP_RELEASE_HELD_NEW_JOBS
|
||||
# define IPP_DEACTIVATE_PRINTER IPP_OP_DEACTIVATE_PRINTER
|
||||
# define IPP_ACTIVATE_PRINTER IPP_OP_ACTIVATE_PRINTER
|
||||
# define IPP_RESTART_PRINTER IPP_OP_RESTART_PRINTER
|
||||
# define IPP_SHUTDOWN_PRINTER IPP_OP_SHUTDOWN_PRINTER
|
||||
# define IPP_STARTUP_PRINTER IPP_OP_STARTUP_PRINTER
|
||||
# define IPP_REPROCESS_JOB IPP_OP_REPROCESS_JOB
|
||||
# define IPP_CANCEL_CURRENT_JOB IPP_OP_CANCEL_CURRENT_JOB
|
||||
# define IPP_SUSPEND_CURRENT_JOB IPP_OP_SUSPEND_CURRENT_JOB
|
||||
# define IPP_RESUME_JOB IPP_OP_RESUME_JOB
|
||||
# define IPP_PROMOTE_JOB IPP_OP_PROMOTE_JOB
|
||||
# define IPP_SCHEDULE_JOB_AFTER IPP_OP_SCHEDULE_JOB_AFTER
|
||||
# define IPP_CANCEL_DOCUMENT IPP_OP_CANCEL_DOCUMENT
|
||||
# define IPP_GET_DOCUMENT_ATTRIBUTES IPP_OP_GET_DOCUMENT_ATTRIBUTES
|
||||
# define IPP_GET_DOCUMENTS IPP_OP_GET_DOCUMENTS
|
||||
# define IPP_DELETE_DOCUMENT IPP_OP_DELETE_DOCUMENT
|
||||
# define IPP_SET_DOCUMENT_ATTRIBUTES IPP_OP_SET_DOCUMENT_ATTRIBUTES
|
||||
# define IPP_CANCEL_JOBS IPP_OP_CANCEL_JOBS
|
||||
# define IPP_CANCEL_MY_JOBS IPP_OP_CANCEL_MY_JOBS
|
||||
# define IPP_RESUBMIT_JOB IPP_OP_RESUBMIT_JOB
|
||||
# define IPP_CLOSE_JOB IPP_OP_CLOSE_JOB
|
||||
# define IPP_IDENTIFY_PRINTER IPP_OP_IDENTIFY_PRINTER
|
||||
# define IPP_VALIDATE_DOCUMENT IPP_OP_VALIDATE_DOCUMENT
|
||||
# define IPP_PRIVATE IPP_OP_PRIVATE
|
||||
# define CUPS_GET_DEFAULT IPP_OP_CUPS_GET_DEFAULT
|
||||
# define CUPS_GET_PRINTERS IPP_OP_CUPS_GET_PRINTERS
|
||||
# define CUPS_ADD_MODIFY_PRINTER IPP_OP_CUPS_ADD_MODIFY_PRINTER
|
||||
# define CUPS_DELETE_PRINTER IPP_OP_CUPS_DELETE_PRINTER
|
||||
# define CUPS_GET_CLASSES IPP_OP_CUPS_GET_CLASSES
|
||||
# define CUPS_ADD_MODIFY_CLASS IPP_OP_CUPS_ADD_MODIFY_CLASS
|
||||
# define CUPS_DELETE_CLASS IPP_OP_CUPS_DELETE_CLASS
|
||||
# define CUPS_ACCEPT_JOBS IPP_OP_CUPS_ACCEPT_JOBS
|
||||
# define CUPS_REJECT_JOBS IPP_OP_CUPS_REJECT_JOBS
|
||||
# define CUPS_SET_DEFAULT IPP_OP_CUPS_SET_DEFAULT
|
||||
# define CUPS_GET_DEVICES IPP_OP_CUPS_GET_DEVICES
|
||||
# define CUPS_GET_PPDS IPP_OP_CUPS_GET_PPDS
|
||||
# define CUPS_MOVE_JOB IPP_OP_CUPS_MOVE_JOB
|
||||
# define CUPS_AUTHENTICATE_JOB IPP_OP_CUPS_AUTHENTICATE_JOB
|
||||
# define CUPS_GET_PPD IPP_OP_CUPS_GET_PPD
|
||||
# define CUPS_GET_DOCUMENT IPP_OP_CUPS_GET_DOCUMENT
|
||||
/* Legacy names */
|
||||
# define CUPS_ADD_PRINTER IPP_OP_CUPS_ADD_MODIFY_PRINTER
|
||||
# define CUPS_ADD_CLASS IPP_OP_CUPS_ADD_MODIFY_CLASS
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
/* Legacy names for the add operations */
|
||||
#define CUPS_ADD_PRINTER CUPS_ADD_MODIFY_PRINTER
|
||||
#define CUPS_ADD_CLASS CUPS_ADD_MODIFY_CLASS
|
||||
} ipp_op_t;
|
||||
|
||||
typedef enum ipp_orient_e /**** Orientation values ****/
|
||||
{
|
||||
IPP_ORIENT_PORTRAIT = 3, /* No rotation */
|
||||
IPP_ORIENT_LANDSCAPE, /* 90 degrees counter-clockwise */
|
||||
IPP_ORIENT_REVERSE_LANDSCAPE, /* 90 degrees clockwise */
|
||||
IPP_ORIENT_REVERSE_PORTRAIT /* 180 degrees */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_PORTRAIT IPP_ORIENT_PORTRAIT
|
||||
# define IPP_LANDSCAPE IPP_ORIENT_LANDSCAPE
|
||||
# define IPP_REVERSE_LANDSCAPE IPP_ORIENT_REVERSE_LANDSCAPE
|
||||
# define IPP_REVERSE_PORTRAIT IPP_ORIENT_REVERSE_PORTRAIT
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
IPP_PORTRAIT = 3, /* No rotation */
|
||||
IPP_LANDSCAPE, /* 90 degrees counter-clockwise */
|
||||
IPP_REVERSE_LANDSCAPE, /* 90 degrees clockwise */
|
||||
IPP_REVERSE_PORTRAIT /* 180 degrees */
|
||||
} ipp_orient_t;
|
||||
|
||||
typedef enum ipp_pstate_e /**** Printer states ****/
|
||||
{
|
||||
IPP_PSTATE_IDLE = 3, /* Printer is idle */
|
||||
IPP_PSTATE_PROCESSING, /* Printer is working */
|
||||
IPP_PSTATE_STOPPED /* Printer is stopped */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_PRINTER_IDLE IPP_PSTATE_IDLE
|
||||
# define IPP_PRINTER_PROCESSING IPP_PSTATE_PROCESSING
|
||||
# define IPP_PRINTER_STOPPED IPP_PSTATE_STOPPED
|
||||
# endif /* _CUPS_NO_DEPRECATED */
|
||||
IPP_PRINTER_IDLE = 3, /* Printer is idle */
|
||||
IPP_PRINTER_PROCESSING, /* Printer is working */
|
||||
IPP_PRINTER_STOPPED /* Printer is stopped */
|
||||
} ipp_pstate_t;
|
||||
|
||||
typedef enum ipp_quality_e /**** Qualities ****/
|
||||
@@ -407,163 +242,76 @@ typedef enum ipp_res_e /**** Resolution units ****/
|
||||
|
||||
typedef enum ipp_state_e /**** IPP states ****/
|
||||
{
|
||||
IPP_STATE_ERROR = -1, /* An error occurred */
|
||||
IPP_STATE_IDLE, /* Nothing is happening/request completed */
|
||||
IPP_STATE_HEADER, /* The request header needs to be sent/received */
|
||||
IPP_STATE_ATTRIBUTE, /* One or more attributes need to be sent/received */
|
||||
IPP_STATE_DATA /* IPP request data needs to be sent/received */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_ERROR IPP_STATE_ERROR
|
||||
# define IPP_IDLE IPP_STATE_IDLE
|
||||
# define IPP_HEADER IPP_STATE_HEADER
|
||||
# define IPP_ATTRIBUTE IPP_STATE_ATTRIBUTE
|
||||
# define IPP_DATA IPP_STATE_DATA
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
IPP_ERROR = -1, /* An error occurred */
|
||||
IPP_IDLE, /* Nothing is happening/request completed */
|
||||
IPP_HEADER, /* The request header needs to be sent/received */
|
||||
IPP_ATTRIBUTE, /* One or more attributes need to be sent/received */
|
||||
IPP_DATA /* IPP request data needs to be sent/received */
|
||||
} ipp_state_t;
|
||||
|
||||
typedef enum ipp_status_e /**** IPP status codes ****/
|
||||
{
|
||||
IPP_STATUS_CUPS_INVALID = -1, /* Invalid status name for @link ippErrorValue@ */
|
||||
IPP_STATUS_OK = 0x0000, /* successful-ok */
|
||||
IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED, /* successful-ok-ignored-or-substituted-attributes */
|
||||
IPP_STATUS_OK_CONFLICTING, /* successful-ok-conflicting-attributes */
|
||||
IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS, /* successful-ok-ignored-subscriptions */
|
||||
IPP_STATUS_OK_IGNORED_NOTIFICATIONS, /* successful-ok-ignored-notifications @private@ */
|
||||
IPP_STATUS_OK_TOO_MANY_EVENTS, /* successful-ok-too-many-events */
|
||||
IPP_STATUS_OK_BUT_CANCEL_SUBSCRIPTION,/* successful-ok-but-cancel-subscription @private@ */
|
||||
IPP_STATUS_OK_EVENTS_COMPLETE, /* successful-ok-events-complete */
|
||||
IPP_STATUS_REDIRECTION_OTHER_SITE = 0x0200,
|
||||
/* redirection-other-site @private@ */
|
||||
IPP_STATUS_CUPS_SEE_OTHER = 0x0280, /* cups-see-other */
|
||||
IPP_STATUS_ERROR_BAD_REQUEST = 0x0400,/* client-error-bad-request */
|
||||
IPP_STATUS_ERROR_FORBIDDEN, /* client-error-forbidden */
|
||||
IPP_STATUS_ERROR_NOT_AUTHENTICATED, /* client-error-not-authenticated */
|
||||
IPP_STATUS_ERROR_NOT_AUTHORIZED, /* client-error-not-authorized */
|
||||
IPP_STATUS_ERROR_NOT_POSSIBLE, /* client-error-not-possible */
|
||||
IPP_STATUS_ERROR_TIMEOUT, /* client-error-timeout */
|
||||
IPP_STATUS_ERROR_NOT_FOUND, /* client-error-not-found */
|
||||
IPP_STATUS_ERROR_GONE, /* client-error-gone */
|
||||
IPP_STATUS_ERROR_REQUEST_ENTITY, /* client-error-request-entity-too-large */
|
||||
IPP_STATUS_ERROR_REQUEST_VALUE, /* client-error-request-value-too-long */
|
||||
IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED,
|
||||
/* client-error-document-format-not-supported */
|
||||
IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES,/* client-error-attributes-or-values-not-supported */
|
||||
IPP_STATUS_ERROR_URI_SCHEME, /* client-error-uri-scheme-not-supported */
|
||||
IPP_STATUS_ERROR_CHARSET, /* client-error-charset-not-supported */
|
||||
IPP_STATUS_ERROR_CONFLICTING, /* client-error-conflicting-attributes */
|
||||
IPP_STATUS_ERROR_COMPRESSION_NOT_SUPPORTED,
|
||||
/* client-error-compression-not-supported */
|
||||
IPP_STATUS_ERROR_COMPRESSION_ERROR, /* client-error-compression-error */
|
||||
IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR,
|
||||
/* client-error-document-format-error */
|
||||
IPP_STATUS_ERROR_DOCUMENT_ACCESS, /* client-error-document-access-error */
|
||||
IPP_STATUS_ERROR_ATTRIBUTES_NOT_SETTABLE,
|
||||
/* client-error-attributes-not-settable */
|
||||
IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS,
|
||||
/* client-error-ignored-all-subscriptions */
|
||||
IPP_STATUS_ERROR_TOO_MANY_SUBSCRIPTIONS,
|
||||
/* client-error-too-many-subscriptions */
|
||||
IPP_STATUS_ERROR_IGNORED_ALL_NOTIFICATIONS,
|
||||
/* client-error-ignored-all-notifications @private@ */
|
||||
IPP_STATUS_ERROR_PRINT_SUPPORT_FILE_NOT_FOUND,
|
||||
/* client-error-print-support-file-not-found @private@ */
|
||||
IPP_STATUS_ERROR_DOCUMENT_PASSWORD, /* client-error-document-password-error */
|
||||
IPP_STATUS_ERROR_DOCUMENT_PERMISSION, /* client-error-document-permission-error */
|
||||
IPP_STATUS_ERROR_DOCUMENT_SECURITY, /* client-error-document-security-error */
|
||||
IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE,/* client-error-document-unprintable-error */
|
||||
IPP_OK = 0x0000, /* successful-ok */
|
||||
IPP_OK_SUBST, /* successful-ok-ignored-or-substituted-attributes */
|
||||
IPP_OK_CONFLICT, /* successful-ok-conflicting-attributes */
|
||||
IPP_OK_IGNORED_SUBSCRIPTIONS, /* successful-ok-ignored-subscriptions */
|
||||
IPP_OK_IGNORED_NOTIFICATIONS, /* successful-ok-ignored-notifications @private@ */
|
||||
IPP_OK_TOO_MANY_EVENTS, /* successful-ok-too-many-events */
|
||||
IPP_OK_BUT_CANCEL_SUBSCRIPTION, /* successful-ok-but-cancel-subscription @private@ */
|
||||
IPP_OK_EVENTS_COMPLETE, /* successful-ok-events-complete */
|
||||
IPP_REDIRECTION_OTHER_SITE = 0x200, /* redirection-other-site @private@ */
|
||||
CUPS_SEE_OTHER = 0x280, /* cups-see-other */
|
||||
IPP_BAD_REQUEST = 0x0400, /* client-error-bad-request */
|
||||
IPP_FORBIDDEN, /* client-error-forbidden */
|
||||
IPP_NOT_AUTHENTICATED, /* client-error-not-authenticated */
|
||||
IPP_NOT_AUTHORIZED, /* client-error-not-authorized */
|
||||
IPP_NOT_POSSIBLE, /* client-error-not-possible */
|
||||
IPP_TIMEOUT, /* client-error-timeout */
|
||||
IPP_NOT_FOUND, /* client-error-not-found */
|
||||
IPP_GONE, /* client-error-gone */
|
||||
IPP_REQUEST_ENTITY, /* client-error-request-entity-too-large */
|
||||
IPP_REQUEST_VALUE, /* client-error-request-value-too-long */
|
||||
IPP_DOCUMENT_FORMAT, /* client-error-document-format-not-supported */
|
||||
IPP_ATTRIBUTES, /* client-error-attributes-or-values-not-supported */
|
||||
IPP_URI_SCHEME, /* client-error-uri-scheme-not-supported */
|
||||
IPP_CHARSET, /* client-error-charset-not-supported */
|
||||
IPP_CONFLICT, /* client-error-conflicting-attributes */
|
||||
IPP_COMPRESSION_NOT_SUPPORTED, /* client-error-compression-not-supported */
|
||||
IPP_COMPRESSION_ERROR, /* client-error-compression-error */
|
||||
IPP_DOCUMENT_FORMAT_ERROR, /* client-error-document-format-error */
|
||||
IPP_DOCUMENT_ACCESS_ERROR, /* client-error-document-access-error */
|
||||
IPP_ATTRIBUTES_NOT_SETTABLE, /* client-error-attributes-not-settable */
|
||||
IPP_IGNORED_ALL_SUBSCRIPTIONS, /* client-error-ignored-all-subscriptions */
|
||||
IPP_TOO_MANY_SUBSCRIPTIONS, /* client-error-too-many-subscriptions */
|
||||
IPP_IGNORED_ALL_NOTIFICATIONS, /* client-error-ignored-all-notifications @private@ */
|
||||
IPP_PRINT_SUPPORT_FILE_NOT_FOUND, /* client-error-print-support-file-not-found @private@ */
|
||||
IPP_DOCUMENT_PASSWORD_ERROR, /* client-error-document-password-error */
|
||||
IPP_DOCUMENT_PERMISSION_ERROR, /* client-error-document-permission-error */
|
||||
IPP_DOCUMENT_SECURITY_ERROR, /* client-error-document-security-error */
|
||||
IPP_DOCUMENT_UNPRINTABLE_ERROR, /* client-error-document-unprintable-error */
|
||||
|
||||
/* Proposed extensions for paid printing */
|
||||
IPP_STATUS_ERROR_CUPS_ACCOUNT_INFO_NEEDED = 0x049C,
|
||||
/* cups-error-account-info-needed @since CUPS 1.7@ */
|
||||
IPP_STATUS_ERROR_CUPS_ACCOUNT_CLOSED, /* cups-error-account-closed @since CUPS 1.7@ */
|
||||
IPP_STATUS_ERROR_CUPS_ACCOUNT_LIMIT_REACHED,
|
||||
/* cups-error-account-limit-reached @since CUPS 1.7@ */
|
||||
IPP_STATUS_ERROR_CUPS_ACCOUNT_AUTHORIZATION_FAILED,
|
||||
/* cups-error-account-authorization-failed @since CUPS 1.7@ */
|
||||
IPP_INTERNAL_ERROR = 0x0500, /* server-error-internal-error */
|
||||
IPP_OPERATION_NOT_SUPPORTED, /* server-error-operation-not-supported */
|
||||
IPP_SERVICE_UNAVAILABLE, /* server-error-service-unavailable */
|
||||
IPP_VERSION_NOT_SUPPORTED, /* server-error-version-not-supported */
|
||||
IPP_DEVICE_ERROR, /* server-error-device-error */
|
||||
IPP_TEMPORARY_ERROR, /* server-error-temporary-error */
|
||||
IPP_NOT_ACCEPTING, /* server-error-not-accepting-jobs */
|
||||
IPP_PRINTER_BUSY, /* server-error-busy */
|
||||
IPP_ERROR_JOB_CANCELED, /* server-error-job-canceled */
|
||||
IPP_MULTIPLE_JOBS_NOT_SUPPORTED, /* server-error-multiple-document-jobs-not-supported */
|
||||
IPP_PRINTER_IS_DEACTIVATED, /* server-error-printer-is-deactivated */
|
||||
IPP_TOO_MANY_JOBS, /* server-error-too-many-jobs */
|
||||
IPP_TOO_MANY_DOCUMENTS, /* server-error-too-many-documents */
|
||||
|
||||
IPP_STATUS_ERROR_INTERNAL = 0x0500, /* server-error-internal-error */
|
||||
IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED,
|
||||
/* server-error-operation-not-supported */
|
||||
IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, /* server-error-service-unavailable */
|
||||
IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED,
|
||||
/* server-error-version-not-supported */
|
||||
IPP_STATUS_ERROR_DEVICE, /* server-error-device-error */
|
||||
IPP_STATUS_ERROR_TEMPORARY, /* server-error-temporary-error */
|
||||
IPP_STATUS_ERROR_NOT_ACCEPTING_JOBS, /* server-error-not-accepting-jobs */
|
||||
IPP_STATUS_ERROR_BUSY, /* server-error-busy */
|
||||
IPP_STATUS_ERROR_JOB_CANCELED, /* server-error-job-canceled */
|
||||
IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED,
|
||||
/* server-error-multiple-document-jobs-not-supported */
|
||||
IPP_STATUS_ERROR_PRINTER_IS_DEACTIVATED,
|
||||
/* server-error-printer-is-deactivated */
|
||||
IPP_STATUS_ERROR_TOO_MANY_JOBS, /* server-error-too-many-jobs */
|
||||
IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS, /* server-error-too-many-documents */
|
||||
IPP_AUTHENTICATION_CANCELED = 0x1000, /* Authentication canceled by user @since CUPS 1.5/OS X 10.7@ */
|
||||
IPP_PKI_ERROR, /* Error negotiating a secure connection @since CUPS 1.5/OS X 10.7@ */
|
||||
IPP_UPGRADE_REQUIRED /* TLS upgrade required */
|
||||
|
||||
/* These are internal and never sent over the wire... */
|
||||
IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED = 0x1000,
|
||||
/* cups-authentication-canceled - Authentication canceled by user @since CUPS 1.5/OS X 10.7@ */
|
||||
IPP_STATUS_ERROR_CUPS_PKI, /* cups-pki-error - Error negotiating a secure connection @since CUPS 1.5/OS X 10.7@ */
|
||||
IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED/* cups-upgrade-required - TLS upgrade required */
|
||||
/* Legacy name for canceled status */
|
||||
#define IPP_ERROR_JOB_CANCELLED IPP_ERROR_JOB_CANCELED
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_OK IPP_STATUS_OK
|
||||
# define IPP_OK_SUBST IPP_STATUS_OK_IGNORED_OR_SUBSTITUTED
|
||||
# define IPP_OK_CONFLICT IPP_STATUS_OK_CONFLICTING
|
||||
# define IPP_OK_IGNORED_SUBSCRIPTIONS IPP_STATUS_OK_IGNORED_SUBSCRIPTIONS
|
||||
# define IPP_OK_IGNORED_NOTIFICATIONS IPP_STATUS_OK_IGNORED_NOTIFICATIONS
|
||||
# define IPP_OK_TOO_MANY_EVENTS IPP_STATUS_OK_TOO_MANY_EVENTS
|
||||
# define IPP_OK_BUT_CANCEL_SUBSCRIPTION IPP_STATUS_OK_BUT_CANCEL_SUBSCRIPTION
|
||||
# define IPP_OK_EVENTS_COMPLETE IPP_STATUS_OK_EVENTS_COMPLETE
|
||||
# define IPP_REDIRECTION_OTHER_SITE IPP_STATUS_REDIRECTION_OTHER_SITE
|
||||
# define CUPS_SEE_OTHER IPP_STATUS_CUPS_SEE_OTHER
|
||||
# define IPP_BAD_REQUEST IPP_STATUS_ERROR_BAD_REQUEST
|
||||
# define IPP_FORBIDDEN IPP_STATUS_ERROR_FORBIDDEN
|
||||
# define IPP_NOT_AUTHENTICATED IPP_STATUS_ERROR_NOT_AUTHENTICATED
|
||||
# define IPP_NOT_AUTHORIZED IPP_STATUS_ERROR_NOT_AUTHORIZED
|
||||
# define IPP_NOT_POSSIBLE IPP_STATUS_ERROR_NOT_POSSIBLE
|
||||
# define IPP_TIMEOUT IPP_STATUS_ERROR_TIMEOUT
|
||||
# define IPP_NOT_FOUND IPP_STATUS_ERROR_NOT_FOUND
|
||||
# define IPP_GONE IPP_STATUS_ERROR_GONE
|
||||
# define IPP_REQUEST_ENTITY IPP_STATUS_ERROR_REQUEST_ENTITY
|
||||
# define IPP_REQUEST_VALUE IPP_STATUS_ERROR_REQUEST_VALUE
|
||||
# define IPP_DOCUMENT_FORMAT IPP_STATUS_ERROR_DOCUMENT_FORMAT_NOT_SUPPORTED
|
||||
# define IPP_ATTRIBUTES IPP_STATUS_ERROR_ATTRIBUTES_OR_VALUES
|
||||
# define IPP_URI_SCHEME IPP_STATUS_ERROR_URI_SCHEME
|
||||
# define IPP_CHARSET IPP_STATUS_ERROR_CHARSET
|
||||
# define IPP_CONFLICT IPP_STATUS_ERROR_CONFLICTING
|
||||
# define IPP_COMPRESSION_NOT_SUPPORTED IPP_STATUS_ERROR_COMPRESSION_NOT_SUPPORTED
|
||||
# define IPP_COMPRESSION_ERROR IPP_STATUS_ERROR_COMPRESSION_ERROR
|
||||
# define IPP_DOCUMENT_FORMAT_ERROR IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR
|
||||
# define IPP_DOCUMENT_ACCESS_ERROR IPP_STATUS_ERROR_DOCUMENT_ACCESS
|
||||
# define IPP_ATTRIBUTES_NOT_SETTABLE IPP_STATUS_ERROR_ATTRIBUTES_NOT_SETTABLE
|
||||
# define IPP_IGNORED_ALL_SUBSCRIPTIONS IPP_STATUS_ERROR_IGNORED_ALL_SUBSCRIPTIONS
|
||||
# define IPP_TOO_MANY_SUBSCRIPTIONS IPP_STATUS_ERROR_TOO_MANY_SUBSCRIPTIONS
|
||||
# define IPP_IGNORED_ALL_NOTIFICATIONS IPP_STATUS_ERROR_IGNORED_ALL_NOTIFICATIONS
|
||||
# define IPP_PRINT_SUPPORT_FILE_NOT_FOUND IPP_STATUS_ERROR_PRINT_SUPPORT_FILE_NOT_FOUND
|
||||
# define IPP_DOCUMENT_PASSWORD_ERROR IPP_STATUS_ERROR_DOCUMENT_PASSWORD
|
||||
# define IPP_DOCUMENT_PERMISSION_ERROR IPP_STATUS_ERROR_DOCUMENT_PERMISSION
|
||||
# define IPP_DOCUMENT_SECURITY_ERROR IPP_STATUS_ERROR_DOCUMENT_SECURITY
|
||||
# define IPP_DOCUMENT_UNPRINTABLE_ERROR IPP_STATUS_ERROR_DOCUMENT_UNPRINTABLE
|
||||
# define IPP_INTERNAL_ERROR IPP_STATUS_ERROR_INTERNAL
|
||||
# define IPP_OPERATION_NOT_SUPPORTED IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED
|
||||
# define IPP_SERVICE_UNAVAILABLE IPP_STATUS_ERROR_SERVICE_UNAVAILABLE
|
||||
# define IPP_VERSION_NOT_SUPPORTED IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED
|
||||
# define IPP_DEVICE_ERROR IPP_STATUS_ERROR_DEVICE
|
||||
# define IPP_TEMPORARY_ERROR IPP_STATUS_ERROR_TEMPORARY
|
||||
# define IPP_NOT_ACCEPTING IPP_STATUS_ERROR_NOT_ACCEPTING_JOBS
|
||||
# define IPP_PRINTER_BUSY IPP_STATUS_ERROR_BUSY
|
||||
# define IPP_ERROR_JOB_CANCELED IPP_STATUS_ERROR_JOB_CANCELED
|
||||
# define IPP_MULTIPLE_JOBS_NOT_SUPPORTED IPP_STATUS_ERROR_MULTIPLE_JOBS_NOT_SUPPORTED
|
||||
# define IPP_PRINTER_IS_DEACTIVATED IPP_STATUS_ERROR_PRINTER_IS_DEACTIVATED
|
||||
# define IPP_TOO_MANY_JOBS IPP_STATUS_ERROR_TOO_MANY_JOBS
|
||||
# define IPP_TOO_MANY_DOCUMENTS IPP_STATUS_ERROR_TOO_MANY_DOCUMENTS
|
||||
# define IPP_AUTHENTICATION_CANCELED IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED
|
||||
# define IPP_PKI_ERROR IPP_STATUS_ERROR_CUPS_PKI
|
||||
# define IPP_UPGRADE_REQUIRED IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED
|
||||
/* Legacy name for canceled status */
|
||||
# define IPP_ERROR_JOB_CANCELLED IPP_STATUS_ERROR_JOB_CANCELED
|
||||
# endif /* _CUPS_NO_DEPRECATED */
|
||||
} ipp_status_t;
|
||||
|
||||
typedef enum ipp_tag_e /**** Format tags for attributes ****/
|
||||
@@ -608,14 +356,9 @@ typedef enum ipp_tag_e /**** Format tags for attributes ****/
|
||||
IPP_TAG_MIMETYPE, /* MIME media type value */
|
||||
IPP_TAG_MEMBERNAME, /* Collection member name value */
|
||||
IPP_TAG_EXTENSION = 0x7f, /* Extension point for 32-bit tags */
|
||||
IPP_TAG_CUPS_MASK = 0x7fffffff, /* Mask for copied attribute values @private@ */
|
||||
IPP_TAG_MASK = 0x7fffffff, /* Mask for copied attribute values @private@ */
|
||||
/* The following expression is used to avoid compiler warnings with +/-0x80000000 */
|
||||
IPP_TAG_CUPS_CONST = -0x7fffffff-1 /* Bitflag for copied/const attribute values @private@ */
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
# define IPP_TAG_MASK IPP_TAG_CUPS_MASK
|
||||
# define IPP_TAG_COPY IPP_TAG_CUPS_CONST
|
||||
# endif /* !_CUPS_NO_DEPRECATED */
|
||||
IPP_TAG_COPY = -0x7fffffff-1 /* Bitflag for copied attribute values @private@ */
|
||||
} ipp_tag_t;
|
||||
|
||||
typedef unsigned char ipp_uchar_t; /**** Unsigned 8-bit integer/character ****/
|
||||
@@ -636,18 +379,12 @@ typedef int (*ipp_copycb_t)(void *context, ipp_t *dst, ipp_attribute_t *attr);
|
||||
* Please use the new accessor functions available in CUPS 1.6 and later, as
|
||||
* these definitions will be moved to a private header file in a future release.
|
||||
*
|
||||
* Define _IPP_PRIVATE_STRUCTURES to 1 to cause the private IPP structures to be
|
||||
* Define _IPP_PRIVATE_STRUCTURES to cause the private IPP structures to be
|
||||
* exposed in CUPS 1.6. This happens automatically on OS X when compiling for
|
||||
* a deployment target of 10.7 or earlier.
|
||||
*
|
||||
* Define _IPP_PRIVATE_STRUCTURES to 0 to prevent the private IPP structures
|
||||
* from being exposed. This is useful when migrating existing code to the new
|
||||
* accessors.
|
||||
*/
|
||||
|
||||
# ifdef _IPP_PRIVATE_STRUCTURES
|
||||
/* Somebody has overridden the value */
|
||||
# elif defined(_CUPS_SOURCE) || defined(_CUPS_IPP_PRIVATE_H_)
|
||||
# if defined(_CUPS_SOURCE) || defined(_CUPS_IPP_PRIVATE_H_)
|
||||
/* Building CUPS */
|
||||
# define _IPP_PRIVATE_STRUCTURES 1
|
||||
# elif defined(__APPLE__)
|
||||
@@ -658,11 +395,9 @@ typedef int (*ipp_copycb_t)(void *context, ipp_t *dst, ipp_attribute_t *attr);
|
||||
/* Building for 10.7 and earlier */
|
||||
# define _IPP_PRIVATE_STRUCTURES 1
|
||||
# endif /* MAC_OS_X_VERSION_10_8 && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_8 */
|
||||
# else
|
||||
# define _IPP_PRIVATE_STRUCTURES 0
|
||||
# endif /* _CUPS_SOURCE || _CUPS_IPP_PRIVATE_H_ */
|
||||
|
||||
# if _IPP_PRIVATE_STRUCTURES
|
||||
# ifdef _IPP_PRIVATE_STRUCTURES
|
||||
typedef union _ipp_request_u /**** Request Header ****/
|
||||
{
|
||||
struct /* Any Header */
|
||||
@@ -921,37 +656,6 @@ extern int ippSetValueTag(ipp_t *ipp, ipp_attribute_t **attr,
|
||||
extern int ippSetVersion(ipp_t *ipp, int major, int minor)
|
||||
_CUPS_API_1_6;
|
||||
|
||||
/**** New in CUPS 1.7 ****/
|
||||
extern ipp_attribute_t *ippAddStringf(ipp_t *ipp, ipp_tag_t group,
|
||||
ipp_tag_t value_tag, const char *name,
|
||||
const char *language, const char *format,
|
||||
...) _CUPS_API_1_7;
|
||||
extern ipp_attribute_t *ippAddStringfv(ipp_t *ipp, ipp_tag_t group,
|
||||
ipp_tag_t value_tag, const char *name,
|
||||
const char *language,
|
||||
const char *format, va_list ap)
|
||||
_CUPS_API_1_7;
|
||||
extern int ippContainsInteger(ipp_attribute_t *attr, int value)
|
||||
_CUPS_API_1_7;
|
||||
extern int ippContainsString(ipp_attribute_t *attr,
|
||||
const char *value) _CUPS_API_1_7;
|
||||
extern cups_array_t *ippCreateRequestedArray(ipp_t *request) _CUPS_API_1_7;
|
||||
extern void *ippGetOctetString(ipp_attribute_t *attr, int element,
|
||||
int *datalen) _CUPS_API_1_7;
|
||||
extern ipp_t *ippNewResponse(ipp_t *request) _CUPS_API_1_7;
|
||||
extern int ippSetOctetString(ipp_t *ipp, ipp_attribute_t **attr,
|
||||
int element, const void *data,
|
||||
int datalen) _CUPS_API_1_7;
|
||||
extern int ippSetStringf(ipp_t *ipp, ipp_attribute_t **attr,
|
||||
int element, const char *format,
|
||||
...) _CUPS_API_1_7;
|
||||
extern int ippSetStringfv(ipp_t *ipp, ipp_attribute_t **attr,
|
||||
int element, const char *format,
|
||||
va_list ap) _CUPS_API_1_7;
|
||||
extern int ippValidateAttribute(ipp_attribute_t *attr)
|
||||
_CUPS_API_1_7;
|
||||
extern int ippValidateAttributes(ipp_t *ipp) _CUPS_API_1_7;
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Localized printf/puts functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 2007-2011 by Apple Inc.
|
||||
* Copyright 2002-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -304,7 +304,7 @@ _cupsSetLocale(char *argv[]) /* IO - Command-line arguments */
|
||||
strlcpy(charset, ".UTF-8", sizeof(new_lc_time) - (charset - new_lc_time));
|
||||
}
|
||||
else
|
||||
strlcpy(new_lc_time, "C", sizeof(new_lc_time));
|
||||
strcpy(new_lc_time, "C");
|
||||
|
||||
setlocale(LC_TIME, new_lc_time);
|
||||
#endif /* LC_TIME */
|
||||
|
||||
+12
-35
@@ -446,7 +446,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
* Set the character set to UTF-8...
|
||||
*/
|
||||
|
||||
strlcpy(charset, "UTF8", sizeof(charset));
|
||||
strcpy(charset, "UTF8");
|
||||
|
||||
/*
|
||||
* Apple's setlocale doesn't give us the user's localization
|
||||
@@ -582,7 +582,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
*/
|
||||
|
||||
if (!charset[0])
|
||||
strlcpy(charset, "UTF8", sizeof(charset));
|
||||
strcpy(charset, "UTF8");
|
||||
|
||||
/*
|
||||
* Parse the language string passed in to a locale string. "C" is the
|
||||
@@ -597,7 +597,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
|
||||
if (language == NULL || !language[0] ||
|
||||
!strcmp(language, "POSIX"))
|
||||
strlcpy(langname, "C", sizeof(langname));
|
||||
strcpy(langname, "C");
|
||||
else
|
||||
{
|
||||
/*
|
||||
@@ -646,7 +646,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
|
||||
if (strlen(langname) != 2)
|
||||
{
|
||||
strlcpy(langname, "C", sizeof(langname));
|
||||
strcpy(langname, "C");
|
||||
country[0] = '\0';
|
||||
charset[0] = '\0';
|
||||
}
|
||||
@@ -701,7 +701,7 @@ cupsLangGet(const char *language) /* I - Language or locale */
|
||||
if (country[0])
|
||||
snprintf(real, sizeof(real), "%s_%s", langname, country);
|
||||
else
|
||||
strlcpy(real, langname, sizeof(real));
|
||||
strcpy(real, langname);
|
||||
|
||||
_cupsMutexLock(&lang_mutex);
|
||||
|
||||
@@ -847,7 +847,6 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */
|
||||
*ptr, /* Pointer into buffer */
|
||||
*temp; /* New string */
|
||||
int length; /* Length of combined strings */
|
||||
size_t ptrlen; /* Length of string */
|
||||
|
||||
|
||||
DEBUG_printf(("4_cupsMessageLoad(filename=\"%s\")", filename));
|
||||
@@ -979,10 +978,9 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */
|
||||
*/
|
||||
|
||||
length = (int)strlen(m->str ? m->str : m->id);
|
||||
ptrlen = strlen(ptr);
|
||||
|
||||
if ((temp = realloc(m->str ? m->str : m->id,
|
||||
length + ptrlen + 1)) == NULL)
|
||||
length + strlen(ptr) + 1)) == NULL)
|
||||
{
|
||||
if (m->str)
|
||||
free(m->str);
|
||||
@@ -997,25 +995,25 @@ _cupsMessageLoad(const char *filename, /* I - Message catalog to load */
|
||||
{
|
||||
/*
|
||||
* Copy the new portion to the end of the msgstr string - safe
|
||||
* to use memcpy because the buffer is allocated to the correct
|
||||
* to use strcpy because the buffer is allocated to the correct
|
||||
* size...
|
||||
*/
|
||||
|
||||
m->str = temp;
|
||||
|
||||
memcpy(m->str + length, ptr, ptrlen + 1);
|
||||
strcpy(m->str + length, ptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Copy the new portion to the end of the msgid string - safe
|
||||
* to use memcpy because the buffer is allocated to the correct
|
||||
* to use strcpy because the buffer is allocated to the correct
|
||||
* size...
|
||||
*/
|
||||
|
||||
m->id = temp;
|
||||
|
||||
memcpy(m->id + length, ptr, ptrlen + 1);
|
||||
strcpy(m->id + length, ptr);
|
||||
}
|
||||
}
|
||||
else if (!strncmp(s, "msgstr", 6) && m)
|
||||
@@ -1184,40 +1182,24 @@ appleLangDefault(void)
|
||||
{
|
||||
if (getenv("SOFTWARE") != NULL && (lang = getenv("LANG")) != NULL)
|
||||
{
|
||||
DEBUG_printf(("3appleLangDefault: Using LANG=%s", lang));
|
||||
strlcpy(cg->language, lang, sizeof(cg->language));
|
||||
return (cg->language);
|
||||
}
|
||||
else if ((bundle = CFBundleGetMainBundle()) != NULL &&
|
||||
(bundleList = CFBundleCopyBundleLocalizations(bundle)) != NULL)
|
||||
{
|
||||
DEBUG_puts("3appleLangDefault: Getting localizationList from bundle.");
|
||||
|
||||
localizationList =
|
||||
CFBundleCopyPreferredLocalizationsFromArray(bundleList);
|
||||
|
||||
CFRelease(bundleList);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_puts("3appleLangDefault: Getting localizationList from preferences.");
|
||||
|
||||
localizationList =
|
||||
CFPreferencesCopyAppValue(CFSTR("AppleLanguages"),
|
||||
kCFPreferencesCurrentApplication);
|
||||
}
|
||||
|
||||
if (localizationList)
|
||||
{
|
||||
|
||||
#ifdef DEBUG
|
||||
if (CFGetTypeID(localizationList) == CFArrayGetTypeID())
|
||||
DEBUG_printf(("3appleLangDefault: Got localizationList, %d entries.",
|
||||
(int)CFArrayGetCount(localizationList)));
|
||||
else
|
||||
DEBUG_puts("3appleLangDefault: Got localizationList but not an array.");
|
||||
#endif /* DEBUG */
|
||||
|
||||
if (CFGetTypeID(localizationList) == CFArrayGetTypeID() &&
|
||||
CFArrayGetCount(localizationList) > 0)
|
||||
{
|
||||
@@ -1235,7 +1217,7 @@ appleLangDefault(void)
|
||||
kCFStringEncodingASCII);
|
||||
CFRelease(localeName);
|
||||
|
||||
DEBUG_printf(("3appleLangDefault: cg->language=\"%s\"",
|
||||
DEBUG_printf(("9appleLangDefault: cg->language=\"%s\"",
|
||||
cg->language));
|
||||
|
||||
/*
|
||||
@@ -1249,7 +1231,7 @@ appleLangDefault(void)
|
||||
{
|
||||
if (!strcmp(cg->language, apple_language_locale[i].language))
|
||||
{
|
||||
DEBUG_printf(("3appleLangDefault: mapping \"%s\" to \"%s\"...",
|
||||
DEBUG_printf(("9appleLangDefault: mapping \"%s\" to \"%s\"...",
|
||||
cg->language, apple_language_locale[i].locale));
|
||||
strlcpy(cg->language, apple_language_locale[i].locale,
|
||||
sizeof(cg->language));
|
||||
@@ -1267,8 +1249,6 @@ appleLangDefault(void)
|
||||
if (!strchr(cg->language, '.'))
|
||||
strlcat(cg->language, ".UTF-8", sizeof(cg->language));
|
||||
}
|
||||
else
|
||||
DEBUG_puts("3appleLangDefault: Unable to get localeName.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1280,10 +1260,7 @@ appleLangDefault(void)
|
||||
*/
|
||||
|
||||
if (!cg->language[0])
|
||||
{
|
||||
DEBUG_puts("3appleLangDefault: Defaulting to en_US.");
|
||||
strlcpy(cg->language, "en_US.UTF-8", sizeof(cg->language));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+12
-39
@@ -1,5 +1,5 @@
|
||||
LIBRARY libcups2
|
||||
VERSION 2.10
|
||||
VERSION 2.9
|
||||
EXPORTS
|
||||
_cupsBufferGet
|
||||
_cupsBufferRelease
|
||||
@@ -34,9 +34,12 @@ _cups_strncasecmp
|
||||
_cups_strcpy
|
||||
_cups_strlcat
|
||||
_cups_strlcpy
|
||||
_httpAddrPort
|
||||
_httpAddrSetPort
|
||||
_httpAssembleUUID
|
||||
_httpCreate
|
||||
_httpEncodeURI
|
||||
_httpPeek
|
||||
_httpResolveURI
|
||||
_httpWait
|
||||
_ippFindOption
|
||||
@@ -61,6 +64,14 @@ _ppdNormalizeMakeAndModel
|
||||
_ppdOpen
|
||||
_ppdOpenFile
|
||||
_ppdParseOptions
|
||||
_pwgGenerateSize
|
||||
_pwgInitSize
|
||||
_pwgMediaForLegacy
|
||||
_pwgMediaForPPD
|
||||
_pwgMediaForPWG
|
||||
_pwgMediaForSize
|
||||
_pwgMediaTypeForType
|
||||
_pwgPageSizeForMedia
|
||||
cupsAddDest
|
||||
cupsAddOption
|
||||
cupsAdminCreateWindowsPPD
|
||||
@@ -126,9 +137,6 @@ cupsFileStdout
|
||||
cupsFileTell
|
||||
cupsFileUnlock
|
||||
cupsFileWrite
|
||||
cupsFindDestDefault
|
||||
cupsFindDestReady
|
||||
cupsFindDestSupported
|
||||
cupsFreeDests
|
||||
cupsFreeJobs
|
||||
cupsFreeOptions
|
||||
@@ -136,9 +144,6 @@ cupsGetClasses
|
||||
cupsGetDefault
|
||||
cupsGetDefault2
|
||||
cupsGetDest
|
||||
cupsGetDestMediaByIndex
|
||||
cupsGetDestMediaCount
|
||||
cupsGetDestMediaDefault
|
||||
cupsGetDests
|
||||
cupsGetDests2
|
||||
cupsGetFd
|
||||
@@ -181,40 +186,32 @@ cupsSetPasswordCB
|
||||
cupsSetServer
|
||||
cupsSetServerCertCB
|
||||
cupsSetUser
|
||||
cupsSetUserAgent
|
||||
cupsTempFd
|
||||
cupsTempFile
|
||||
cupsTempFile2
|
||||
cupsUserAgent
|
||||
cupsUTF32ToUTF8
|
||||
cupsUTF8ToCharset
|
||||
cupsUTF8ToUTF32
|
||||
cupsUser
|
||||
cupsWriteRequestData
|
||||
httpAcceptConnection
|
||||
httpAddCredential
|
||||
httpAddrAny
|
||||
httpAddrConnect
|
||||
httpAddrCopyList
|
||||
httpAddrEqual
|
||||
httpAddrFreeList
|
||||
httpAddrGetList
|
||||
httpAddrLength
|
||||
httpAddrListen
|
||||
httpAddrLocalhost
|
||||
httpAddrLookup
|
||||
httpAddrPort
|
||||
httpAddrString
|
||||
httpAssembleURI
|
||||
httpAssembleURIf
|
||||
httpAssembleUUID
|
||||
httpBlocking
|
||||
httpCheck
|
||||
httpClearCookie
|
||||
httpClearFields
|
||||
httpClose
|
||||
httpConnect
|
||||
httpConnect2
|
||||
httpConnectEncrypt
|
||||
httpCopyCredentials
|
||||
httpDecode64
|
||||
@@ -229,12 +226,10 @@ httpFlushWrite
|
||||
httpFreeCredentials
|
||||
httpGet
|
||||
httpGetBlocking
|
||||
httpGetContentEncoding
|
||||
httpGetCookie
|
||||
httpGetDateString
|
||||
httpGetDateString2
|
||||
httpGetDateTime
|
||||
httpGetExpect
|
||||
httpGetFd
|
||||
httpGetField
|
||||
httpGetHostByName
|
||||
@@ -251,20 +246,17 @@ httpMD5
|
||||
httpMD5Final
|
||||
httpMD5String
|
||||
httpOptions
|
||||
httpPeek
|
||||
httpPost
|
||||
httpPrintf
|
||||
httpPut
|
||||
httpRead
|
||||
httpRead2
|
||||
httpReadRequest
|
||||
httpReconnect
|
||||
httpSeparate
|
||||
httpSeparate2
|
||||
httpSeparateURI
|
||||
httpSetCookie
|
||||
httpSetCredentials
|
||||
httpSetDefaultField
|
||||
httpSetExpect
|
||||
httpSetField
|
||||
httpSetLength
|
||||
@@ -275,7 +267,6 @@ httpUpdate
|
||||
httpWait
|
||||
httpWrite
|
||||
httpWrite2
|
||||
httpWriteResponse
|
||||
ippAddBoolean
|
||||
ippAddBooleans
|
||||
ippAddCollection
|
||||
@@ -291,15 +282,10 @@ ippAddResolution
|
||||
ippAddResolutions
|
||||
ippAddSeparator
|
||||
ippAddString
|
||||
ippAddStringf
|
||||
ippAddStringfv
|
||||
ippAddStrings
|
||||
ippAttributeString
|
||||
ippContainsInteger
|
||||
ippContainsString
|
||||
ippCopyAttribute
|
||||
ippCopyAttributes
|
||||
ippCreateRequestedArray
|
||||
ippDateToTime
|
||||
ippDelete
|
||||
ippDeleteAttribute
|
||||
@@ -318,7 +304,6 @@ ippGetDate
|
||||
ippGetGroupTag
|
||||
ippGetInteger
|
||||
ippGetName
|
||||
ippGetOctetString
|
||||
ippGetOperation
|
||||
ippGetRange
|
||||
ippGetRequestId
|
||||
@@ -331,7 +316,6 @@ ippGetVersion
|
||||
ippLength
|
||||
ippNew
|
||||
ippNewRequest
|
||||
ippNewResponse
|
||||
ippNextAttribute
|
||||
ippOpString
|
||||
ippOpValue
|
||||
@@ -346,7 +330,6 @@ ippSetDate
|
||||
ippSetGroupTag
|
||||
ippSetInteger
|
||||
ippSetName
|
||||
ippSetOctetString
|
||||
ippSetOperation
|
||||
ippSetRange
|
||||
ippSetRequestId
|
||||
@@ -354,15 +337,11 @@ ippSetResolution
|
||||
ippSetState
|
||||
ippSetStatusCode
|
||||
ippSetString
|
||||
ippSetStringf
|
||||
ippSetStringfv
|
||||
ippSetValueTag
|
||||
ippSetVersion
|
||||
ippTagString
|
||||
ippTagValue
|
||||
ippTimeToDate
|
||||
ippValidateAttribute
|
||||
ippValidateAttributes
|
||||
ippWrite
|
||||
ippWriteFile
|
||||
ippWriteIO
|
||||
@@ -401,9 +380,3 @@ ppdPageLength
|
||||
ppdPageSize
|
||||
ppdPageWidth
|
||||
ppdSetConformance
|
||||
pwgFormatSizeName
|
||||
pwgInitSize
|
||||
pwgMediaForLegacy
|
||||
pwgMediaForPPD
|
||||
pwgMediaForPWG
|
||||
pwgMediaForSize
|
||||
|
||||
+11
-11
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Notification routines for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 2007-2012 by Apple Inc.
|
||||
* Copyright 2005-2006 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -83,25 +83,25 @@ cupsNotifySubject(cups_lang_t *lang, /* I - Language data */
|
||||
|
||||
switch (job_state->values[0].integer)
|
||||
{
|
||||
case IPP_JSTATE_PENDING :
|
||||
case IPP_JOB_PENDING :
|
||||
state = _cupsLangString(lang, _("pending"));
|
||||
break;
|
||||
case IPP_JSTATE_HELD :
|
||||
case IPP_JOB_HELD :
|
||||
state = _cupsLangString(lang, _("held"));
|
||||
break;
|
||||
case IPP_JSTATE_PROCESSING :
|
||||
case IPP_JOB_PROCESSING :
|
||||
state = _cupsLangString(lang, _("processing"));
|
||||
break;
|
||||
case IPP_JSTATE_STOPPED :
|
||||
case IPP_JOB_STOPPED :
|
||||
state = _cupsLangString(lang, _("stopped"));
|
||||
break;
|
||||
case IPP_JSTATE_CANCELED :
|
||||
case IPP_JOB_CANCELED :
|
||||
state = _cupsLangString(lang, _("canceled"));
|
||||
break;
|
||||
case IPP_JSTATE_ABORTED :
|
||||
case IPP_JOB_ABORTED :
|
||||
state = _cupsLangString(lang, _("aborted"));
|
||||
break;
|
||||
case IPP_JSTATE_COMPLETED :
|
||||
case IPP_JOB_COMPLETED :
|
||||
state = _cupsLangString(lang, _("completed"));
|
||||
break;
|
||||
default :
|
||||
@@ -127,13 +127,13 @@ cupsNotifySubject(cups_lang_t *lang, /* I - Language data */
|
||||
|
||||
switch (printer_state->values[0].integer)
|
||||
{
|
||||
case IPP_PSTATE_IDLE :
|
||||
case IPP_PRINTER_IDLE :
|
||||
state = _cupsLangString(lang, _("idle"));
|
||||
break;
|
||||
case IPP_PSTATE_PROCESSING :
|
||||
case IPP_PRINTER_PROCESSING :
|
||||
state = _cupsLangString(lang, _("processing"));
|
||||
break;
|
||||
case IPP_PSTATE_STOPPED :
|
||||
case IPP_PRINTER_STOPPED :
|
||||
state = _cupsLangString(lang, _("stopped"));
|
||||
break;
|
||||
default :
|
||||
|
||||
+119
-214
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* PPD cache implementation for CUPS.
|
||||
*
|
||||
* Copyright 2010-2013 by Apple Inc.
|
||||
* Copyright 2010-2012 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -88,8 +88,8 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
cups_file_t *fp; /* File */
|
||||
_ppd_cache_t *pc; /* PWG mapping data */
|
||||
pwg_size_t *size; /* Current size */
|
||||
pwg_map_t *map; /* Current map */
|
||||
_pwg_size_t *size; /* Current size */
|
||||
_pwg_map_t *map; /* Current map */
|
||||
_pwg_finishings_t *finishings; /* Current finishings option */
|
||||
int linenum, /* Current line number */
|
||||
num_bins, /* Number of bins in file */
|
||||
@@ -118,7 +118,7 @@ _ppdCacheCreateWithFile(
|
||||
|
||||
if (!filename)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ _ppdCacheCreateWithFile(
|
||||
|
||||
if ((fp = cupsFileOpen(filename, "r")) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -138,7 +138,7 @@ _ppdCacheCreateWithFile(
|
||||
|
||||
if (!cupsFileGets(fp, line, sizeof(line)))
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: Unable to read first line.");
|
||||
cupsFileClose(fp);
|
||||
return (NULL);
|
||||
@@ -146,7 +146,7 @@ _ppdCacheCreateWithFile(
|
||||
|
||||
if (strncmp(line, "#CUPS-PPD-CACHE-", 16))
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Wrong first line \"%s\".", line));
|
||||
cupsFileClose(fp);
|
||||
return (NULL);
|
||||
@@ -154,7 +154,7 @@ _ppdCacheCreateWithFile(
|
||||
|
||||
if (atoi(line + 16) != _PPD_CACHE_VERSION)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Out of date PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Out of date PPD cache file."), 1);
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Cache file has version %s, "
|
||||
"expected %d.", line + 16, _PPD_CACHE_VERSION));
|
||||
cupsFileClose(fp);
|
||||
@@ -167,7 +167,7 @@ _ppdCacheCreateWithFile(
|
||||
|
||||
if ((pc = calloc(1, sizeof(_ppd_cache_t))) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: Unable to allocate _ppd_cache_t.");
|
||||
goto create_error;
|
||||
}
|
||||
@@ -193,7 +193,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Missing value on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "Filter"))
|
||||
@@ -231,13 +231,13 @@ _ppdCacheCreateWithFile(
|
||||
if (attrs && *attrs)
|
||||
{
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: IPP listed multiple times.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
else if (length <= 0)
|
||||
{
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: Bad IPP length.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -250,10 +250,10 @@ _ppdCacheCreateWithFile(
|
||||
*attrs = ippNew();
|
||||
|
||||
if (ippReadIO(fp, (ipp_iocb_t)cupsFileRead, 1, NULL,
|
||||
*attrs) != IPP_STATE_DATA)
|
||||
*attrs) != IPP_DATA)
|
||||
{
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: Bad IPP data.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
}
|
||||
@@ -269,7 +269,7 @@ _ppdCacheCreateWithFile(
|
||||
if (cupsFileTell(fp) != (pos + length))
|
||||
{
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: Bad IPP data.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
}
|
||||
@@ -278,7 +278,7 @@ _ppdCacheCreateWithFile(
|
||||
if (num_bins > 0)
|
||||
{
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: NumBins listed multiple times.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -286,15 +286,15 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad NumBins value %d on line "
|
||||
"%d.", num_sizes, linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
if ((pc->bins = calloc(num_bins, sizeof(pwg_map_t))) == NULL)
|
||||
if ((pc->bins = calloc(num_bins, sizeof(_pwg_map_t))) == NULL)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Unable to allocate %d bins.",
|
||||
num_sizes));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
goto create_error;
|
||||
}
|
||||
}
|
||||
@@ -303,7 +303,7 @@ _ppdCacheCreateWithFile(
|
||||
if (sscanf(value, "%127s%40s", pwg_keyword, ppd_keyword) != 2)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad Bin on line %d.", linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -311,7 +311,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Too many Bin's on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -326,7 +326,7 @@ _ppdCacheCreateWithFile(
|
||||
if (num_sizes > 0)
|
||||
{
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: NumSizes listed multiple times.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -334,17 +334,17 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad NumSizes value %d on line "
|
||||
"%d.", num_sizes, linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
if (num_sizes > 0)
|
||||
{
|
||||
if ((pc->sizes = calloc(num_sizes, sizeof(pwg_size_t))) == NULL)
|
||||
if ((pc->sizes = calloc(num_sizes, sizeof(_pwg_size_t))) == NULL)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Unable to allocate %d sizes.",
|
||||
num_sizes));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
goto create_error;
|
||||
}
|
||||
}
|
||||
@@ -355,7 +355,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Too many Size's on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -367,7 +367,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad Size on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -382,7 +382,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Too many CustomSize's on line "
|
||||
"%d.", linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -394,16 +394,16 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad CustomSize on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max",
|
||||
pc->custom_max_width, pc->custom_max_length, NULL);
|
||||
_pwgGenerateSize(pwg_keyword, sizeof(pwg_keyword), "custom", "max",
|
||||
pc->custom_max_width, pc->custom_max_length);
|
||||
pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword);
|
||||
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min",
|
||||
pc->custom_min_width, pc->custom_min_length, NULL);
|
||||
_pwgGenerateSize(pwg_keyword, sizeof(pwg_keyword), "custom", "min",
|
||||
pc->custom_min_width, pc->custom_min_length);
|
||||
pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword);
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "SourceOption"))
|
||||
@@ -416,7 +416,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: NumSources listed multiple "
|
||||
"times.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -424,15 +424,15 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad NumSources value %d on "
|
||||
"line %d.", num_sources, linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
if ((pc->sources = calloc(num_sources, sizeof(pwg_map_t))) == NULL)
|
||||
if ((pc->sources = calloc(num_sources, sizeof(_pwg_map_t))) == NULL)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Unable to allocate %d sources.",
|
||||
num_sources));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
goto create_error;
|
||||
}
|
||||
}
|
||||
@@ -442,7 +442,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad Source on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -450,7 +450,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Too many Source's on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -465,7 +465,7 @@ _ppdCacheCreateWithFile(
|
||||
if (num_types > 0)
|
||||
{
|
||||
DEBUG_puts("_ppdCacheCreateWithFile: NumTypes listed multiple times.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -473,15 +473,15 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad NumTypes value %d on "
|
||||
"line %d.", num_types, linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
if ((pc->types = calloc(num_types, sizeof(pwg_map_t))) == NULL)
|
||||
if ((pc->types = calloc(num_types, sizeof(_pwg_map_t))) == NULL)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Unable to allocate %d types.",
|
||||
num_types));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
goto create_error;
|
||||
}
|
||||
}
|
||||
@@ -491,7 +491,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad Type on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -499,7 +499,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Too many Type's on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -526,7 +526,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Bad Preset on line %d.",
|
||||
linenum));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -561,30 +561,6 @@ _ppdCacheCreateWithFile(
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "MaxCopies"))
|
||||
pc->max_copies = atoi(value);
|
||||
else if (!_cups_strcasecmp(line, "ChargeInfoURI"))
|
||||
pc->charge_info_uri = _cupsStrAlloc(value);
|
||||
else if (!_cups_strcasecmp(line, "JobAccountId"))
|
||||
pc->account_id = !_cups_strcasecmp(value, "true");
|
||||
else if (!_cups_strcasecmp(line, "JobAccountingUserId"))
|
||||
pc->accounting_user_id = !_cups_strcasecmp(value, "true");
|
||||
else if (!_cups_strcasecmp(line, "JobPassword"))
|
||||
pc->password = _cupsStrAlloc(value);
|
||||
else if (!_cups_strcasecmp(line, "Mandatory"))
|
||||
{
|
||||
if (pc->mandatory)
|
||||
_cupsArrayAddStrings(pc->mandatory, value, ' ');
|
||||
else
|
||||
pc->mandatory = _cupsArrayNewStrings(value, ' ');
|
||||
}
|
||||
else if (!_cups_strcasecmp(line, "SupportFile"))
|
||||
{
|
||||
if (!pc->support_files)
|
||||
pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree);
|
||||
|
||||
cupsArrayAdd(pc->support_files, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Unknown %s on line %d.", line,
|
||||
@@ -596,7 +572,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Not enough sizes (%d < %d).",
|
||||
pc->num_sizes, num_sizes));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -604,7 +580,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Not enough sources (%d < %d).",
|
||||
pc->num_sources, num_sources));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -612,7 +588,7 @@ _ppdCacheCreateWithFile(
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithFile: Not enough types (%d < %d).",
|
||||
pc->num_types, num_types));
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Bad PPD cache file."), 1);
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -654,24 +630,24 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
*color_model, /* ColorModel option */
|
||||
*duplex; /* Duplex option */
|
||||
ppd_choice_t *choice; /* Current InputSlot/MediaType */
|
||||
pwg_map_t *map; /* Current source/type map */
|
||||
_pwg_map_t *map; /* Current source/type map */
|
||||
ppd_attr_t *ppd_attr; /* Current PPD preset attribute */
|
||||
int num_options; /* Number of preset options and props */
|
||||
cups_option_t *options; /* Preset options and properties */
|
||||
ppd_size_t *ppd_size; /* Current PPD size */
|
||||
pwg_size_t *pwg_size; /* Current PWG size */
|
||||
_pwg_size_t *pwg_size; /* Current PWG size */
|
||||
char pwg_keyword[3 + PPD_MAX_NAME + 1 + 12 + 1 + 12 + 3],
|
||||
/* PWG keyword string */
|
||||
ppd_name[PPD_MAX_NAME];
|
||||
/* Normalized PPD name */
|
||||
const char *pwg_name; /* Standard PWG media name */
|
||||
pwg_media_t *pwg_media; /* PWG media data */
|
||||
_pwg_media_t *pwg_media; /* PWG media data */
|
||||
_pwg_print_color_mode_t pwg_print_color_mode;
|
||||
/* print-color-mode index */
|
||||
_pwg_print_quality_t pwg_print_quality;
|
||||
/* print-quality index */
|
||||
int similar; /* Are the old and new size similar? */
|
||||
pwg_size_t *old_size; /* Current old size */
|
||||
_pwg_size_t *old_size; /* Current old size */
|
||||
int old_imageable, /* Old imageable length in 2540ths */
|
||||
old_borderless, /* Old borderless state */
|
||||
old_known_pwg; /* Old PWG name is well-known */
|
||||
@@ -684,7 +660,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
new_imageable, /* New imageable length in 2540ths */
|
||||
new_borderless, /* New borderless state */
|
||||
new_known_pwg; /* New PWG name is well-known */
|
||||
pwg_size_t *new_size; /* New size to add, if any */
|
||||
_pwg_size_t *new_size; /* New size to add, if any */
|
||||
const char *filter; /* Current filter */
|
||||
_pwg_finishings_t *finishings; /* Current finishings value */
|
||||
|
||||
@@ -714,10 +690,10 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
|
||||
if (ppd->num_sizes > 0)
|
||||
{
|
||||
if ((pc->sizes = calloc(ppd->num_sizes, sizeof(pwg_size_t))) == NULL)
|
||||
if ((pc->sizes = calloc(ppd->num_sizes, sizeof(_pwg_size_t))) == NULL)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithPPD: Unable to allocate %d "
|
||||
"pwg_size_t's.", ppd->num_sizes));
|
||||
"_pwg_size_t's.", ppd->num_sizes));
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -736,7 +712,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
* Convert the PPD size name to the corresponding PWG keyword name.
|
||||
*/
|
||||
|
||||
if ((pwg_media = pwgMediaForPPD(ppd_size->name)) != NULL)
|
||||
if ((pwg_media = _pwgMediaForPPD(ppd_size->name)) != NULL)
|
||||
{
|
||||
/*
|
||||
* Standard name, do we have conflicts?
|
||||
@@ -771,9 +747,9 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
new_known_pwg = 0;
|
||||
|
||||
pwg_unppdize_name(ppd_size->name, ppd_name, sizeof(ppd_name), "_.");
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), NULL, ppd_name,
|
||||
PWG_FROM_POINTS(ppd_size->width),
|
||||
PWG_FROM_POINTS(ppd_size->length), NULL);
|
||||
_pwgGenerateSize(pwg_keyword, sizeof(pwg_keyword), NULL, ppd_name,
|
||||
_PWG_FROMPTS(ppd_size->width),
|
||||
_PWG_FROMPTS(ppd_size->length));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -782,16 +758,16 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
* dimensions that are <= 0...
|
||||
*/
|
||||
|
||||
if ((pwg_media = pwgMediaForSize(PWG_FROM_POINTS(ppd_size->width),
|
||||
PWG_FROM_POINTS(ppd_size->length))) == NULL)
|
||||
if ((pwg_media = _pwgMediaForSize(_PWG_FROMPTS(ppd_size->width),
|
||||
_PWG_FROMPTS(ppd_size->length))) == NULL)
|
||||
continue;
|
||||
|
||||
new_width = pwg_media->width;
|
||||
new_length = pwg_media->length;
|
||||
new_left = PWG_FROM_POINTS(ppd_size->left);
|
||||
new_bottom = PWG_FROM_POINTS(ppd_size->bottom);
|
||||
new_right = PWG_FROM_POINTS(ppd_size->width - ppd_size->right);
|
||||
new_top = PWG_FROM_POINTS(ppd_size->length - ppd_size->top);
|
||||
new_left = _PWG_FROMPTS(ppd_size->left);
|
||||
new_bottom = _PWG_FROMPTS(ppd_size->bottom);
|
||||
new_right = _PWG_FROMPTS(ppd_size->width - ppd_size->right);
|
||||
new_top = _PWG_FROMPTS(ppd_size->length - ppd_size->top);
|
||||
new_imageable = new_length - new_top - new_bottom;
|
||||
new_borderless = new_bottom == 0 && new_top == 0 &&
|
||||
new_left == 0 && new_right == 0;
|
||||
@@ -860,24 +836,24 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
* Generate custom size data...
|
||||
*/
|
||||
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max",
|
||||
PWG_FROM_POINTS(ppd->custom_max[0]),
|
||||
PWG_FROM_POINTS(ppd->custom_max[1]), NULL);
|
||||
_pwgGenerateSize(pwg_keyword, sizeof(pwg_keyword), "custom", "max",
|
||||
_PWG_FROMPTS(ppd->custom_max[0]),
|
||||
_PWG_FROMPTS(ppd->custom_max[1]));
|
||||
pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword);
|
||||
pc->custom_max_width = PWG_FROM_POINTS(ppd->custom_max[0]);
|
||||
pc->custom_max_length = PWG_FROM_POINTS(ppd->custom_max[1]);
|
||||
pc->custom_max_width = _PWG_FROMPTS(ppd->custom_max[0]);
|
||||
pc->custom_max_length = _PWG_FROMPTS(ppd->custom_max[1]);
|
||||
|
||||
pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min",
|
||||
PWG_FROM_POINTS(ppd->custom_min[0]),
|
||||
PWG_FROM_POINTS(ppd->custom_min[1]), NULL);
|
||||
_pwgGenerateSize(pwg_keyword, sizeof(pwg_keyword), "custom", "min",
|
||||
_PWG_FROMPTS(ppd->custom_min[0]),
|
||||
_PWG_FROMPTS(ppd->custom_min[1]));
|
||||
pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword);
|
||||
pc->custom_min_width = PWG_FROM_POINTS(ppd->custom_min[0]);
|
||||
pc->custom_min_length = PWG_FROM_POINTS(ppd->custom_min[1]);
|
||||
pc->custom_min_width = _PWG_FROMPTS(ppd->custom_min[0]);
|
||||
pc->custom_min_length = _PWG_FROMPTS(ppd->custom_min[1]);
|
||||
|
||||
pc->custom_size.left = PWG_FROM_POINTS(ppd->custom_margins[0]);
|
||||
pc->custom_size.bottom = PWG_FROM_POINTS(ppd->custom_margins[1]);
|
||||
pc->custom_size.right = PWG_FROM_POINTS(ppd->custom_margins[2]);
|
||||
pc->custom_size.top = PWG_FROM_POINTS(ppd->custom_margins[3]);
|
||||
pc->custom_size.left = _PWG_FROMPTS(ppd->custom_margins[0]);
|
||||
pc->custom_size.bottom = _PWG_FROMPTS(ppd->custom_margins[1]);
|
||||
pc->custom_size.right = _PWG_FROMPTS(ppd->custom_margins[2]);
|
||||
pc->custom_size.top = _PWG_FROMPTS(ppd->custom_margins[3]);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -892,10 +868,10 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
pc->source_option = _cupsStrAlloc(input_slot->keyword);
|
||||
|
||||
if ((pc->sources = calloc(input_slot->num_choices,
|
||||
sizeof(pwg_map_t))) == NULL)
|
||||
sizeof(_pwg_map_t))) == NULL)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithPPD: Unable to allocate %d "
|
||||
"pwg_map_t's for InputSlot.", input_slot->num_choices));
|
||||
"_pwg_map_t's for InputSlot.", input_slot->num_choices));
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -954,10 +930,10 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
if ((media_type = ppdFindOption(ppd, "MediaType")) != NULL)
|
||||
{
|
||||
if ((pc->types = calloc(media_type->num_choices,
|
||||
sizeof(pwg_map_t))) == NULL)
|
||||
sizeof(_pwg_map_t))) == NULL)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithPPD: Unable to allocate %d "
|
||||
"pwg_map_t's for MediaType.", media_type->num_choices));
|
||||
"_pwg_map_t's for MediaType.", media_type->num_choices));
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -1019,10 +995,10 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
if ((output_bin = ppdFindOption(ppd, "OutputBin")) != NULL)
|
||||
{
|
||||
if ((pc->bins = calloc(output_bin->num_choices,
|
||||
sizeof(pwg_map_t))) == NULL)
|
||||
sizeof(_pwg_map_t))) == NULL)
|
||||
{
|
||||
DEBUG_printf(("_ppdCacheCreateWithPPD: Unable to allocate %d "
|
||||
"pwg_map_t's for OutputBin.", output_bin->num_choices));
|
||||
"_pwg_map_t's for OutputBin.", output_bin->num_choices));
|
||||
goto create_error;
|
||||
}
|
||||
|
||||
@@ -1393,42 +1369,6 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
else
|
||||
pc->max_copies = 9999;
|
||||
|
||||
/*
|
||||
* cupsChargeInfoURI, cupsJobAccountId, cupsJobAccountingUserId,
|
||||
* cupsJobPassword, and cupsMandatory.
|
||||
*/
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsChargeInfoURI", NULL)) != NULL)
|
||||
pc->charge_info_uri = _cupsStrAlloc(ppd_attr->value);
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsJobAccountId", NULL)) != NULL)
|
||||
pc->account_id = !_cups_strcasecmp(ppd_attr->value, "true");
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsJobAccountingUserId", NULL)) != NULL)
|
||||
pc->accounting_user_id = !_cups_strcasecmp(ppd_attr->value, "true");
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsJobPassword", NULL)) != NULL)
|
||||
pc->password = _cupsStrAlloc(ppd_attr->value);
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL)
|
||||
pc->mandatory = _cupsArrayNewStrings(ppd_attr->value, ' ');
|
||||
|
||||
/*
|
||||
* Support files...
|
||||
*/
|
||||
|
||||
pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0,
|
||||
(cups_acopy_func_t)_cupsStrAlloc,
|
||||
(cups_afree_func_t)_cupsStrFree);
|
||||
|
||||
for (ppd_attr = ppdFindAttr(ppd, "cupsICCProfile", NULL);
|
||||
ppd_attr;
|
||||
ppd_attr = ppdFindNextAttr(ppd, "cupsICCProfile", NULL))
|
||||
cupsArrayAdd(pc->support_files, ppd_attr->value);
|
||||
|
||||
if ((ppd_attr = ppdFindAttr(ppd, "APPrinterIconPath", NULL)) != NULL)
|
||||
cupsArrayAdd(pc->support_files, ppd_attr->value);
|
||||
|
||||
/*
|
||||
* Return the cache data...
|
||||
*/
|
||||
@@ -1441,7 +1381,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */
|
||||
|
||||
create_error:
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Out of memory."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Out of memory."), 1);
|
||||
_ppdCacheDestroy(pc);
|
||||
|
||||
return (NULL);
|
||||
@@ -1456,8 +1396,8 @@ void
|
||||
_ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
pwg_map_t *map; /* Current map */
|
||||
pwg_size_t *size; /* Current size */
|
||||
_pwg_map_t *map; /* Current map */
|
||||
_pwg_size_t *size; /* Current size */
|
||||
|
||||
|
||||
/*
|
||||
@@ -1529,13 +1469,6 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */
|
||||
cupsArrayDelete(pc->prefilters);
|
||||
cupsArrayDelete(pc->finishings);
|
||||
|
||||
_cupsStrFree(pc->charge_info_uri);
|
||||
_cupsStrFree(pc->password);
|
||||
|
||||
cupsArrayDelete(pc->mandatory);
|
||||
|
||||
cupsArrayDelete(pc->support_files);
|
||||
|
||||
free(pc);
|
||||
}
|
||||
|
||||
@@ -1580,11 +1513,11 @@ _ppdCacheGetBin(
|
||||
|
||||
int /* O - New number of options */
|
||||
_ppdCacheGetFinishingOptions(
|
||||
_ppd_cache_t *pc, /* I - PPD cache and mapping data */
|
||||
ipp_t *job, /* I - Job attributes or NULL */
|
||||
ipp_finishings_t value, /* I - IPP finishings value of IPP_FINISHINGS_NONE */
|
||||
int num_options, /* I - Number of options */
|
||||
cups_option_t **options) /* IO - Options */
|
||||
_ppd_cache_t *pc, /* I - PPD cache and mapping data */
|
||||
ipp_t *job, /* I - Job attributes or NULL */
|
||||
ipp_finish_t value, /* I - IPP finishings value of IPP_FINISHINGS_NONE */
|
||||
int num_options, /* I - Number of options */
|
||||
cups_option_t **options) /* IO - Options */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
_pwg_finishings_t *f, /* PWG finishings options */
|
||||
@@ -1720,7 +1653,7 @@ _ppdCacheGetInputSlot(
|
||||
|
||||
ipp_attribute_t *media_col, /* media-col attribute */
|
||||
*media_source; /* media-source attribute */
|
||||
pwg_size_t size; /* Dimensional size */
|
||||
_pwg_size_t size; /* Dimensional size */
|
||||
int margins_set; /* Were the margins set? */
|
||||
|
||||
media_col = ippFindAttribute(job, "media-col", IPP_TAG_BEGIN_COLLECTION);
|
||||
@@ -1735,7 +1668,7 @@ _ppdCacheGetInputSlot(
|
||||
|
||||
keyword = ippGetString(media_source, 0, NULL);
|
||||
}
|
||||
else if (pwgInitSize(&size, job, &margins_set))
|
||||
else if (_pwgInitSize(&size, job, &margins_set))
|
||||
{
|
||||
/*
|
||||
* For media <= 5x7, look for a photo tray...
|
||||
@@ -1859,7 +1792,7 @@ _ppdCacheGetPageSize(
|
||||
int *exact) /* O - 1 if exact match, 0 otherwise */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
pwg_size_t *size, /* Current size */
|
||||
_pwg_size_t *size, /* Current size */
|
||||
*closest, /* Closest size */
|
||||
jobsize; /* Size data from job */
|
||||
int margins_set, /* Were the margins set? */
|
||||
@@ -1947,7 +1880,7 @@ _ppdCacheGetPageSize(
|
||||
* media-col.
|
||||
*/
|
||||
|
||||
if (!pwgInitSize(&jobsize, job, &margins_set))
|
||||
if (!_pwgInitSize(&jobsize, job, &margins_set))
|
||||
return (NULL);
|
||||
}
|
||||
else
|
||||
@@ -1956,12 +1889,12 @@ _ppdCacheGetPageSize(
|
||||
* Get the size using a media keyword...
|
||||
*/
|
||||
|
||||
pwg_media_t *media; /* Media definition */
|
||||
_pwg_media_t *media; /* Media definition */
|
||||
|
||||
|
||||
if ((media = pwgMediaForPWG(keyword)) == NULL)
|
||||
if ((media = pwgMediaForLegacy(keyword)) == NULL)
|
||||
if ((media = pwgMediaForPPD(keyword)) == NULL)
|
||||
if ((media = _pwgMediaForPWG(keyword)) == NULL)
|
||||
if ((media = _pwgMediaForLegacy(keyword)) == NULL)
|
||||
if ((media = _pwgMediaForPPD(keyword)) == NULL)
|
||||
return (NULL);
|
||||
|
||||
jobsize.width = media->width;
|
||||
@@ -2054,7 +1987,7 @@ _ppdCacheGetPageSize(
|
||||
*/
|
||||
|
||||
snprintf(pc->custom_ppd_size, sizeof(pc->custom_ppd_size), "Custom.%dx%d",
|
||||
(int)PWG_TO_POINTS(jobsize.width), (int)PWG_TO_POINTS(jobsize.length));
|
||||
(int)_PWG_TOPTS(jobsize.width), (int)_PWG_TOPTS(jobsize.length));
|
||||
|
||||
if (margins_set && exact)
|
||||
{
|
||||
@@ -2090,14 +2023,14 @@ _ppdCacheGetPageSize(
|
||||
* '_ppdCacheGetSize()' - Get the PWG size associated with a PPD PageSize.
|
||||
*/
|
||||
|
||||
pwg_size_t * /* O - PWG size or NULL */
|
||||
_pwg_size_t * /* O - PWG size or NULL */
|
||||
_ppdCacheGetSize(
|
||||
_ppd_cache_t *pc, /* I - PPD cache and mapping data */
|
||||
const char *page_size) /* I - PPD PageSize */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
pwg_media_t *media; /* Media */
|
||||
pwg_size_t *size; /* Current size */
|
||||
_pwg_media_t *media; /* Media */
|
||||
_pwg_size_t *size; /* Current size */
|
||||
|
||||
|
||||
/*
|
||||
@@ -2183,9 +2116,9 @@ _ppdCacheGetSize(
|
||||
* Look up standard sizes...
|
||||
*/
|
||||
|
||||
if ((media = pwgMediaForPPD(page_size)) == NULL)
|
||||
if ((media = pwgMediaForLegacy(page_size)) == NULL)
|
||||
media = pwgMediaForPWG(page_size);
|
||||
if ((media = _pwgMediaForPPD(page_size)) == NULL)
|
||||
if ((media = _pwgMediaForLegacy(page_size)) == NULL)
|
||||
media = _pwgMediaForPWG(page_size);
|
||||
|
||||
if (media)
|
||||
{
|
||||
@@ -2210,7 +2143,7 @@ _ppdCacheGetSource(
|
||||
const char *input_slot) /* I - PPD InputSlot */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
pwg_map_t *source; /* Current source */
|
||||
_pwg_map_t *source; /* Current source */
|
||||
|
||||
|
||||
/*
|
||||
@@ -2239,7 +2172,7 @@ _ppdCacheGetType(
|
||||
const char *media_type) /* I - PPD MediaType */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
pwg_map_t *type; /* Current type */
|
||||
_pwg_map_t *type; /* Current type */
|
||||
|
||||
|
||||
/*
|
||||
@@ -2269,8 +2202,8 @@ _ppdCacheWriteFile(
|
||||
{
|
||||
int i, j, k; /* Looping vars */
|
||||
cups_file_t *fp; /* Output file */
|
||||
pwg_size_t *size; /* Current size */
|
||||
pwg_map_t *map; /* Current map */
|
||||
_pwg_size_t *size; /* Current size */
|
||||
_pwg_map_t *map; /* Current map */
|
||||
_pwg_finishings_t *f; /* Current finishing option */
|
||||
cups_option_t *option; /* Current option */
|
||||
const char *value; /* Filter/pre-filter value */
|
||||
@@ -2283,7 +2216,7 @@ _ppdCacheWriteFile(
|
||||
|
||||
if (!pc || !filename)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -2294,7 +2227,7 @@ _ppdCacheWriteFile(
|
||||
snprintf(newfile, sizeof(newfile), "%s.N", filename);
|
||||
if ((fp = cupsFileOpen(newfile, "w9")) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -2427,34 +2360,6 @@ _ppdCacheWriteFile(
|
||||
|
||||
cupsFilePrintf(fp, "MaxCopies %d\n", pc->max_copies);
|
||||
|
||||
/*
|
||||
* Accounting/quota/PIN/managed printing values...
|
||||
*/
|
||||
|
||||
if (pc->charge_info_uri)
|
||||
cupsFilePutConf(fp, "ChargeInfoURI", pc->charge_info_uri);
|
||||
|
||||
cupsFilePrintf(fp, "AccountId %s\n", pc->account_id ? "true" : "false");
|
||||
cupsFilePrintf(fp, "AccountingUserId %s\n",
|
||||
pc->accounting_user_id ? "true" : "false");
|
||||
|
||||
if (pc->password)
|
||||
cupsFilePutConf(fp, "Password", pc->password);
|
||||
|
||||
for (value = (char *)cupsArrayFirst(pc->mandatory);
|
||||
value;
|
||||
value = (char *)cupsArrayNext(pc->mandatory))
|
||||
cupsFilePutConf(fp, "Mandatory", value);
|
||||
|
||||
/*
|
||||
* Support files...
|
||||
*/
|
||||
|
||||
for (value = (char *)cupsArrayFirst(pc->support_files);
|
||||
value;
|
||||
value = (char *)cupsArrayNext(pc->support_files))
|
||||
cupsFilePutConf(fp, "SupportFile", value);
|
||||
|
||||
/*
|
||||
* IPP attributes, if any...
|
||||
*/
|
||||
@@ -2463,7 +2368,7 @@ _ppdCacheWriteFile(
|
||||
{
|
||||
cupsFilePrintf(fp, "IPP " CUPS_LLFMT "\n", CUPS_LLCAST ippLength(attrs));
|
||||
|
||||
attrs->state = IPP_STATE_IDLE;
|
||||
attrs->state = IPP_IDLE;
|
||||
ippWriteIO(fp, (ipp_iocb_t)cupsFileWrite, 1, NULL, attrs);
|
||||
}
|
||||
|
||||
@@ -2584,7 +2489,7 @@ _pwgMediaTypeForType(
|
||||
|
||||
const char * /* O - PageSize name */
|
||||
_pwgPageSizeForMedia(
|
||||
pwg_media_t *media, /* I - Media */
|
||||
_pwg_media_t *media, /* I - Media */
|
||||
char *name, /* I - PageSize name buffer */
|
||||
size_t namesize) /* I - Size of name buffer */
|
||||
{
|
||||
@@ -2620,8 +2525,8 @@ _pwgPageSizeForMedia(
|
||||
* Use a name of the form "wNNNhNNN"...
|
||||
*/
|
||||
|
||||
snprintf(name, namesize, "w%dh%d", (int)PWG_TO_POINTS(media->width),
|
||||
(int)PWG_TO_POINTS(media->length));
|
||||
snprintf(name, namesize, "w%dh%d", (int)_PWG_TOPTS(media->width),
|
||||
(int)_PWG_TOPTS(media->length));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+17
-27
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Private PPD definitions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 2007-2011 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products, all rights reserved.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -49,7 +49,7 @@ extern "C" {
|
||||
* Constants...
|
||||
*/
|
||||
|
||||
# define _PPD_CACHE_VERSION 6 /* Version number in cache file */
|
||||
# define _PPD_CACHE_VERSION 3 /* Version number in cache file */
|
||||
|
||||
|
||||
/*
|
||||
@@ -104,17 +104,17 @@ typedef enum _pwg_print_quality_e /**** PWG print-quality values ****/
|
||||
|
||||
typedef struct _pwg_finishings_s /**** PWG finishings mapping data ****/
|
||||
{
|
||||
ipp_finishings_t value; /* finishings value */
|
||||
int num_options; /* Number of options to apply */
|
||||
cups_option_t *options; /* Options to apply */
|
||||
ipp_finish_t value; /* finishings value */
|
||||
int num_options; /* Number of options to apply */
|
||||
cups_option_t *options; /* Options to apply */
|
||||
} _pwg_finishings_t;
|
||||
|
||||
struct _ppd_cache_s /**** PPD cache and PWG conversion data ****/
|
||||
{
|
||||
int num_bins; /* Number of output bins */
|
||||
pwg_map_t *bins; /* Output bins */
|
||||
_pwg_map_t *bins; /* Output bins */
|
||||
int num_sizes; /* Number of media sizes */
|
||||
pwg_size_t *sizes; /* Media sizes */
|
||||
_pwg_size_t *sizes; /* Media sizes */
|
||||
int custom_max_width, /* Maximum custom width in 2540ths */
|
||||
custom_max_length, /* Maximum custom length in 2540ths */
|
||||
custom_min_width, /* Minimum custom width in 2540ths */
|
||||
@@ -122,12 +122,12 @@ struct _ppd_cache_s /**** PPD cache and PWG conversion data ****/
|
||||
char *custom_max_keyword, /* Maximum custom size PWG keyword */
|
||||
*custom_min_keyword, /* Minimum custom size PWG keyword */
|
||||
custom_ppd_size[41]; /* Custom PPD size name */
|
||||
pwg_size_t custom_size; /* Custom size record */
|
||||
_pwg_size_t custom_size; /* Custom size record */
|
||||
char *source_option; /* PPD option for media source */
|
||||
int num_sources; /* Number of media sources */
|
||||
pwg_map_t *sources; /* Media sources */
|
||||
_pwg_map_t *sources; /* Media sources */
|
||||
int num_types; /* Number of media types */
|
||||
pwg_map_t *types; /* Media types */
|
||||
_pwg_map_t *types; /* Media types */
|
||||
int num_presets[_PWG_PRINT_COLOR_MODE_MAX][_PWG_PRINT_QUALITY_MAX];
|
||||
/* Number of print-color-mode/print-quality options */
|
||||
cups_option_t *presets[_PWG_PRINT_COLOR_MODE_MAX][_PWG_PRINT_QUALITY_MAX];
|
||||
@@ -141,13 +141,7 @@ struct _ppd_cache_s /**** PPD cache and PWG conversion data ****/
|
||||
*prefilters; /* cupsPreFilter values */
|
||||
int single_file; /* cupsSingleFile value */
|
||||
cups_array_t *finishings; /* cupsIPPFinishings values */
|
||||
int max_copies, /* cupsMaxCopies value */
|
||||
account_id, /* cupsJobAccountId value */
|
||||
accounting_user_id; /* cupsJobAccountingUserId value */
|
||||
char *password; /* cupsJobPassword value */
|
||||
cups_array_t *mandatory; /* cupsMandatory value */
|
||||
char *charge_info_uri; /* cupsChargeInfoURI value */
|
||||
cups_array_t *support_files; /* Support files - ICC profiles, etc. */
|
||||
int max_copies; /* cupsMaxCopies value */
|
||||
};
|
||||
|
||||
|
||||
@@ -161,16 +155,12 @@ extern _ppd_cache_t *_ppdCacheCreateWithPPD(ppd_file_t *ppd);
|
||||
extern void _ppdCacheDestroy(_ppd_cache_t *pc);
|
||||
extern const char *_ppdCacheGetBin(_ppd_cache_t *pc,
|
||||
const char *output_bin);
|
||||
extern int _ppdCacheGetFinishingOptions(_ppd_cache_t *pc,
|
||||
ipp_t *job,
|
||||
ipp_finishings_t value,
|
||||
int num_options,
|
||||
extern int _ppdCacheGetFinishingOptions(_ppd_cache_t *pc, ipp_t *job,
|
||||
ipp_finish_t value, int num_options,
|
||||
cups_option_t **options);
|
||||
extern int _ppdCacheGetFinishingValues(_ppd_cache_t *pc,
|
||||
int num_options,
|
||||
extern int _ppdCacheGetFinishingValues(_ppd_cache_t *pc, int num_options,
|
||||
cups_option_t *options,
|
||||
int max_values,
|
||||
int *values);
|
||||
int max_values, int *values);
|
||||
extern const char *_ppdCacheGetInputSlot(_ppd_cache_t *pc, ipp_t *job,
|
||||
const char *keyword);
|
||||
extern const char *_ppdCacheGetMediaType(_ppd_cache_t *pc, ipp_t *job,
|
||||
@@ -179,7 +169,7 @@ extern const char *_ppdCacheGetOutputBin(_ppd_cache_t *pc,
|
||||
const char *keyword);
|
||||
extern const char *_ppdCacheGetPageSize(_ppd_cache_t *pc, ipp_t *job,
|
||||
const char *keyword, int *exact);
|
||||
extern pwg_size_t *_ppdCacheGetSize(_ppd_cache_t *pc,
|
||||
extern _pwg_size_t *_ppdCacheGetSize(_ppd_cache_t *pc,
|
||||
const char *page_size);
|
||||
extern const char *_ppdCacheGetSource(_ppd_cache_t *pc,
|
||||
const char *input_slot);
|
||||
@@ -207,7 +197,7 @@ extern const char *_pwgInputSlotForSource(const char *media_source,
|
||||
char *name, size_t namesize);
|
||||
extern const char *_pwgMediaTypeForType(const char *media_type,
|
||||
char *name, size_t namesize);
|
||||
extern const char *_pwgPageSizeForMedia(pwg_media_t *media,
|
||||
extern const char *_pwgPageSizeForMedia(_pwg_media_t *media,
|
||||
char *name, size_t namesize);
|
||||
|
||||
|
||||
|
||||
+4
-4
@@ -1264,7 +1264,7 @@ _ppdOpen(
|
||||
|
||||
ppd->patches = temp;
|
||||
|
||||
memcpy(ppd->patches + strlen(ppd->patches), string, strlen(string) + 1);
|
||||
strcpy(ppd->patches + strlen(ppd->patches), string);
|
||||
}
|
||||
}
|
||||
else if (!strcmp(keyword, "OpenUI"))
|
||||
@@ -1378,7 +1378,7 @@ _ppdOpen(
|
||||
*/
|
||||
|
||||
if (!_cups_strcasecmp(name, "PageRegion"))
|
||||
strlcpy(custom_name, "CustomPageSize", sizeof(custom_name));
|
||||
strcpy(custom_name, "CustomPageSize");
|
||||
else
|
||||
snprintf(custom_name, sizeof(custom_name), "Custom%s", name);
|
||||
|
||||
@@ -1944,9 +1944,9 @@ _ppdOpen(
|
||||
cupsCharsetToUTF8((cups_utf8_t *)choice->text, text,
|
||||
sizeof(choice->text), encoding);
|
||||
else if (!strcmp(name, "True"))
|
||||
strlcpy(choice->text, _("Yes"), sizeof(choice->text));
|
||||
strcpy(choice->text, _("Yes"));
|
||||
else if (!strcmp(name, "False"))
|
||||
strlcpy(choice->text, _("No"), sizeof(choice->text));
|
||||
strcpy(choice->text, _("No"));
|
||||
else
|
||||
strlcpy(choice->text, name, sizeof(choice->text));
|
||||
|
||||
|
||||
+164
-332
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* PWG media name API implementation for CUPS.
|
||||
*
|
||||
* Copyright 2009-2013 by Apple Inc.
|
||||
* Copyright 2009-2012 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -15,20 +15,6 @@
|
||||
*
|
||||
* Contents:
|
||||
*
|
||||
* pwgFormatSizeName() - Generate a PWG self-describing media size name.
|
||||
* pwgInitSize() - Initialize a pwg_size_t structure using IPP Job
|
||||
* Template attributes.
|
||||
* pwgMediaForLegacy() - Find a PWG media size by ISO/IPP legacy name.
|
||||
* pwgMediaForPPD() - Find a PWG media size by Adobe PPD name.
|
||||
* pwgMediaForPWG() - Find a PWG media size by 5101.1 self-describing
|
||||
* name.
|
||||
* pwgMediaForSize() - Get the PWG media size for the given
|
||||
* dimensions.
|
||||
* pwg_compare_legacy() - Compare two sizes using the legacy names.
|
||||
* pwg_compare_ppd() - Compare two sizes using the PPD names.
|
||||
* pwg_compare_pwg() - Compare two sizes using the PWG names.
|
||||
* pwg_format_inches() - Convert and format PWG units as inches.
|
||||
* pwg_format_millimeters() - Convert and format PWG units as millimeters.
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -51,18 +37,16 @@
|
||||
* Local functions...
|
||||
*/
|
||||
|
||||
static int pwg_compare_legacy(pwg_media_t *a, pwg_media_t *b);
|
||||
static int pwg_compare_pwg(pwg_media_t *a, pwg_media_t *b);
|
||||
static int pwg_compare_ppd(pwg_media_t *a, pwg_media_t *b);
|
||||
static char *pwg_format_inches(char *buf, size_t bufsize, int val);
|
||||
static char *pwg_format_millimeters(char *buf, size_t bufsize, int val);
|
||||
static int pwg_compare_legacy(_pwg_media_t *a, _pwg_media_t *b);
|
||||
static int pwg_compare_pwg(_pwg_media_t *a, _pwg_media_t *b);
|
||||
static int pwg_compare_ppd(_pwg_media_t *a, _pwg_media_t *b);
|
||||
|
||||
|
||||
/*
|
||||
* Local globals...
|
||||
*/
|
||||
|
||||
static pwg_media_t const cups_pwg_media[] =
|
||||
static _pwg_media_t const cups_pwg_media[] =
|
||||
{ /* Media size lookup table */
|
||||
/* North American Standard Sheet Media Sizes */
|
||||
_PWG_MEDIA_IN("na_index-3x5_3x5in", NULL, "3x5", 3, 5),
|
||||
@@ -90,7 +74,6 @@ static pwg_media_t const cups_pwg_media[] =
|
||||
_PWG_MEDIA_IN("na_fanfold-eur_8.5x12in", NULL, "FanFoldGerman", 8.5, 12),
|
||||
_PWG_MEDIA_IN("na_letter-plus_8.5x12.69in", NULL, "LetterPlus", 8.5, 12.69),
|
||||
_PWG_MEDIA_IN("na_foolscap_8.5x13in", NULL, "FanFoldGermanLegal", 8.5, 13),
|
||||
_PWG_MEDIA_IN("na_oficio_8.5x13.4in", NULL, "Oficio", 8.5, 13.4),
|
||||
_PWG_MEDIA_IN("na_legal_8.5x14in", "na-legal", "Legal", 8.5, 14),
|
||||
_PWG_MEDIA_IN("na_super-a_8.94x14in", NULL, "SuperA", 8.94, 14),
|
||||
_PWG_MEDIA_IN("na_9x11_9x11in", "na-9x11-envelope", "9x11", 9, 11),
|
||||
@@ -121,6 +104,10 @@ static pwg_media_t const cups_pwg_media[] =
|
||||
_PWG_MEDIA_IN("na_arch-e_36x48in", "arch-e", "ARCHE", 36, 48),
|
||||
_PWG_MEDIA_IN("na_f_44x68in", NULL, "AnsiF", 44, 68),
|
||||
|
||||
/* Chinese Standard Sheet Media Inch Sizes */
|
||||
_PWG_MEDIA_IN("roc_16k_7.75x10.75in", NULL, "roc16k", 7.75, 10.75),
|
||||
_PWG_MEDIA_IN("roc_8k_10.75x15.5in", NULL, "roc8k", 10.75, 15.5),
|
||||
|
||||
/* ISO Standard Sheet Media Sizes */
|
||||
_PWG_MEDIA_MM("iso_a10_26x37mm", "iso-a10", "A10", 26, 37),
|
||||
_PWG_MEDIA_MM("iso_a9_37x52mm", "iso-a9", "A9", 37, 52),
|
||||
@@ -183,10 +170,6 @@ static pwg_media_t const cups_pwg_media[] =
|
||||
_PWG_MEDIA_MM("iso_c1_648x917mm", "iso-c1", "EnvC1", 648, 917),
|
||||
_PWG_MEDIA_MM("iso_c0_917x1297mm", "iso-c0", "EnvC0", 917, 1297),
|
||||
_PWG_MEDIA_MM("iso_dl_110x220mm", "iso-designated", "EnvDL", 110, 220),
|
||||
_PWG_MEDIA_MM("iso_ra4_215x305mm", "iso-ra4", NULL, 215, 305),
|
||||
_PWG_MEDIA_MM("iso_sra4_225x320mm", "iso-sra4", NULL, 225, 320),
|
||||
_PWG_MEDIA_MM("iso_ra3_305x430mm", "iso-ra3", NULL, 305, 430),
|
||||
_PWG_MEDIA_MM("iso_sra3_320x450mm", "iso-sra3", NULL, 320, 450),
|
||||
_PWG_MEDIA_MM("iso_ra2_430x610mm", "iso-ra2", NULL, 430, 610),
|
||||
_PWG_MEDIA_MM("iso_sra2_450x640mm", "iso-sra2", NULL, 450, 640),
|
||||
_PWG_MEDIA_MM("iso_ra1_610x860mm", "iso-ra1", NULL, 610, 860),
|
||||
@@ -207,27 +190,22 @@ static pwg_media_t const cups_pwg_media[] =
|
||||
_PWG_MEDIA_MM("jis_b1_728x1030mm", "jis-b1", "B1", 728, 1030),
|
||||
_PWG_MEDIA_MM("jis_b0_1030x1456mm", "jis-b0", "B0", 1030, 1456),
|
||||
_PWG_MEDIA_MM("jis_exec_216x330mm", NULL, NULL, 216, 330),
|
||||
_PWG_MEDIA_MM("jpn_kaku2_240x332mm", NULL, "EnvKaku2", 240, 332),
|
||||
_PWG_MEDIA_MM("jpn_kaku3_216x277mm", NULL, "EnvKaku3", 216, 277),
|
||||
_PWG_MEDIA_MM("jpn_kaku4_197x267mm", NULL, "EnvKaku4", 197, 267),
|
||||
_PWG_MEDIA_MM("jpn_kaku5_190x240mm", NULL, "EnvKaku5", 190, 240),
|
||||
_PWG_MEDIA_MM("jpn_kaku7_142x205mm", NULL, "EnvKaku7", 142, 205),
|
||||
_PWG_MEDIA_MM("jpn_kaku8_119x197mm", NULL, "EnvKaku8", 119, 197),
|
||||
_PWG_MEDIA_MM("jpn_chou4_90x205mm", NULL, "EnvChou4", 90, 205),
|
||||
_PWG_MEDIA_MM("jpn_hagaki_100x148mm", NULL, "Postcard", 100, 148),
|
||||
_PWG_MEDIA_MM("jpn_you4_105x235mm", NULL, "EnvYou4", 105, 235),
|
||||
_PWG_MEDIA_MM("jpn_you6_98x190mm", NULL, "EnvYou6", 98, 190),
|
||||
_PWG_MEDIA_MM("jpn_chou2_111.1x146mm", NULL, NULL, 111.1, 146),
|
||||
_PWG_MEDIA_MM("jpn_chou3_120x235mm", NULL, "EnvChou3", 120, 235),
|
||||
_PWG_MEDIA_MM("jpn_chou40_90x225mm", NULL, "EnvChou40", 90, 225),
|
||||
_PWG_MEDIA_MM("jpn_oufuku_148x200mm", NULL, "DoublePostcardRotated", 148, 200),
|
||||
_PWG_MEDIA_MM("jpn_kahu_240x322.1mm", NULL, NULL, 240, 322.1),
|
||||
_PWG_MEDIA_MM("jpn_kaku2_240x332mm", NULL, "EnvKaku2", 240, 332),
|
||||
|
||||
/* Chinese Standard Sheet Media Sizes */
|
||||
_PWG_MEDIA_MM("prc_32k_97x151mm", NULL, "PRC32K", 97, 151),
|
||||
_PWG_MEDIA_MM("prc_1_102x165mm", NULL, "EnvPRC1", 102, 165),
|
||||
_PWG_MEDIA_MM("prc_2_102x176mm", NULL, "EnvPRC2", 102, 176),
|
||||
_PWG_MEDIA_MM("prc_4_110x208mm", NULL, "EnvPRC4", 110, 208),
|
||||
_PWG_MEDIA_MM("prc_5_110x220mm", NULL, "EnvPRC5", 110, 220),
|
||||
_PWG_MEDIA_MM("prc_8_120x309mm", NULL, "EnvPRC8", 120, 309),
|
||||
_PWG_MEDIA_MM("prc_6_120x320mm", NULL, NULL, 120, 320),
|
||||
_PWG_MEDIA_MM("prc_3_125x176mm", NULL, "EnvPRC3", 125, 176),
|
||||
@@ -238,10 +216,6 @@ static pwg_media_t const cups_pwg_media[] =
|
||||
_PWG_MEDIA_MM("om_dai-pa-kai_275x395mm", NULL, NULL, 275, 395),
|
||||
_PWG_MEDIA_MM("prc_10_324x458mm", NULL, "EnvPRC10", 324, 458),
|
||||
|
||||
/* Chinese Standard Sheet Media Inch Sizes */
|
||||
_PWG_MEDIA_IN("roc_16k_7.75x10.75in", NULL, "roc16k", 7.75, 10.75),
|
||||
_PWG_MEDIA_IN("roc_8k_10.75x15.5in", NULL, "roc8k", 10.75, 15.5),
|
||||
|
||||
/* Other English Standard Sheet Media Sizes */
|
||||
_PWG_MEDIA_IN("oe_photo-l_3.5x5in", NULL, "3.5x5", 3.5, 5),
|
||||
|
||||
@@ -252,128 +226,131 @@ static pwg_media_t const cups_pwg_media[] =
|
||||
_PWG_MEDIA_MM("om_large-photo_200x300", NULL, "om_large-photo", 200, 300),
|
||||
_PWG_MEDIA_MM("om_folio_210x330mm", "folio", "Folio", 210, 330),
|
||||
_PWG_MEDIA_MM("om_folio-sp_215x315mm", NULL, "FolioSP", 215, 315),
|
||||
_PWG_MEDIA_MM("om_invite_220x220mm", NULL, "EnvInvite", 220, 220),
|
||||
_PWG_MEDIA_MM("om_small-photo_100x200mm", NULL, "om_wide-photo", 100, 200)
|
||||
_PWG_MEDIA_MM("om_invite_220x220mm", NULL, "EnvInvite", 220, 220)
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* 'pwgFormatSizeName()' - Generate a PWG self-describing media size name.
|
||||
*
|
||||
* This function generates a PWG self-describing media size name of the form
|
||||
* "prefix_name_WIDTHxLENGTHunits". The prefix is typically "custom" or "roll"
|
||||
* for user-supplied sizes but can also be "disc", "iso", "jis", "jpn", "na",
|
||||
* "oe", "om", "prc", or "roc". A value of @code NULL@ automatically chooses
|
||||
* "oe" or "om" depending on the units.
|
||||
*
|
||||
* The size name may only contain lowercase letters, numbers, "-", and ".". If
|
||||
* @code NULL@ is passed, the size name will contain the formatted dimensions.
|
||||
*
|
||||
* The width and length are specified in hundredths of millimeters, equivalent
|
||||
* to 1/100000th of a meter or 1/2540th of an inch. The width, length, and
|
||||
* units used for the generated size name are calculated automatically if the
|
||||
* units string is @code NULL@, otherwise inches ("in") or millimeters ("mm")
|
||||
* are used.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
* '_pwgFormatInches()' - Convert and format PWG units as inches.
|
||||
*/
|
||||
|
||||
int /* O - 1 on success, 0 on failure */
|
||||
pwgFormatSizeName(char *keyword, /* I - Keyword buffer */
|
||||
size_t keysize, /* I - Size of keyword buffer */
|
||||
const char *prefix, /* I - Prefix for PWG size or @code NULL@ for automatic */
|
||||
const char *name, /* I - Size name or @code NULL@ */
|
||||
int width, /* I - Width of page in 2540ths */
|
||||
int length, /* I - Length of page in 2540ths */
|
||||
const char *units) /* I - Units - "in", "mm", or @code NULL@ for automatic */
|
||||
char * /* O - String */
|
||||
_pwgFormatInches(char *buf, /* I - Buffer */
|
||||
size_t bufsize, /* I - Size of buffer */
|
||||
int val) /* I - Value in hundredths of millimeters */
|
||||
{
|
||||
int thousandths, /* Thousandths of inches */
|
||||
integer, /* Integer portion */
|
||||
fraction; /* Fractional portion */
|
||||
|
||||
|
||||
/*
|
||||
* Convert hundredths of millimeters to thousandths of inches and round to
|
||||
* the nearest thousandth.
|
||||
*/
|
||||
|
||||
thousandths = (val * 1000 + 1270) / 2540;
|
||||
integer = thousandths / 1000;
|
||||
fraction = thousandths % 1000;
|
||||
|
||||
/*
|
||||
* Format as a pair of integers (avoids locale stuff), avoiding trailing
|
||||
* zeros...
|
||||
*/
|
||||
|
||||
if (fraction == 0)
|
||||
snprintf(buf, bufsize, "%d", integer);
|
||||
else if (fraction % 10)
|
||||
snprintf(buf, bufsize, "%d.%03d", integer, fraction);
|
||||
else if (fraction % 100)
|
||||
snprintf(buf, bufsize, "%d.%02d", integer, fraction / 10);
|
||||
else
|
||||
snprintf(buf, bufsize, "%d.%01d", integer, fraction / 100);
|
||||
|
||||
return (buf);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_pwgFormatMillimeters()' - Convert and format PWG units as millimeters.
|
||||
*/
|
||||
|
||||
char * /* O - String */
|
||||
_pwgFormatMillimeters(char *buf, /* I - Buffer */
|
||||
size_t bufsize, /* I - Size of buffer */
|
||||
int val) /* I - Value in hundredths of millimeters */
|
||||
{
|
||||
int integer, /* Integer portion */
|
||||
fraction; /* Fractional portion */
|
||||
|
||||
|
||||
/*
|
||||
* Convert hundredths of millimeters to integer and fractional portions.
|
||||
*/
|
||||
|
||||
integer = val / 100;
|
||||
fraction = val % 100;
|
||||
|
||||
/*
|
||||
* Format as a pair of integers (avoids locale stuff), avoiding trailing
|
||||
* zeros...
|
||||
*/
|
||||
|
||||
if (fraction == 0)
|
||||
snprintf(buf, bufsize, "%d", integer);
|
||||
else if (fraction % 10)
|
||||
snprintf(buf, bufsize, "%d.%02d", integer, fraction);
|
||||
else
|
||||
snprintf(buf, bufsize, "%d.%01d", integer, fraction / 10);
|
||||
|
||||
return (buf);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* '_pwgGenerateSize()' - Generate a PWG size keyword.
|
||||
*/
|
||||
|
||||
void
|
||||
_pwgGenerateSize(char *keyword, /* I - Keyword buffer */
|
||||
size_t keysize, /* I - Size of keyword buffer */
|
||||
const char *prefix, /* I - Prefix for PWG size or NULL */
|
||||
const char *name, /* I - Size name or NULL */
|
||||
int width, /* I - Width of page in 2540ths */
|
||||
int length) /* I - Length of page in 2540ths */
|
||||
{
|
||||
const char *units; /* Units to report */
|
||||
char usize[12 + 1 + 12 + 3], /* Unit size: NNNNNNNNNNNNxNNNNNNNNNNNNuu */
|
||||
*uptr; /* Pointer into unit size */
|
||||
char *(*format)(char *, size_t, int);
|
||||
/* Formatting function */
|
||||
|
||||
|
||||
/*
|
||||
* Range check input...
|
||||
*/
|
||||
|
||||
DEBUG_printf(("pwgFormatSize(keyword=%p, keysize=" CUPS_LLFMT
|
||||
", prefix=\"%s\", name=\"%s\", width=%d, length=%d, "
|
||||
"units=\"%s\")", keyword, CUPS_LLCAST keysize, prefix, name,
|
||||
width, length, units));
|
||||
|
||||
if (keyword)
|
||||
*keyword = '\0';
|
||||
|
||||
if (!keyword || keysize < 32 || width < 0 || length < 0 ||
|
||||
(units && strcmp(units, "in") && strcmp(units, "mm")))
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Invalid media name arguments."),
|
||||
1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (name)
|
||||
if ((width % 635) == 0 && (length % 635) == 0)
|
||||
{
|
||||
/*
|
||||
* Validate name...
|
||||
* Use inches since the size is a multiple of 1/4 inch.
|
||||
*/
|
||||
|
||||
const char *nameptr; /* Pointer into name */
|
||||
|
||||
for (nameptr = name; *nameptr; nameptr ++)
|
||||
if (!(*nameptr >= 'a' && *nameptr <= 'z') &&
|
||||
!(*nameptr >= '0' && *nameptr <= '9') &&
|
||||
*nameptr != '.' && *nameptr != '-')
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
|
||||
_("Invalid media name arguments."), 1);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
else
|
||||
name = usize;
|
||||
|
||||
|
||||
if (!units)
|
||||
{
|
||||
if ((width % 635) == 0 && (length % 635) == 0)
|
||||
{
|
||||
/*
|
||||
* Use inches since the size is a multiple of 1/4 inch.
|
||||
*/
|
||||
|
||||
units = "in";
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Use millimeters since the size is not a multiple of 1/4 inch.
|
||||
*/
|
||||
|
||||
units = "mm";
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcmp(units, "in"))
|
||||
{
|
||||
format = pwg_format_inches;
|
||||
units = "in";
|
||||
format = _pwgFormatInches;
|
||||
|
||||
if (!prefix)
|
||||
prefix = "oe";
|
||||
}
|
||||
else
|
||||
{
|
||||
format = pwg_format_millimeters;
|
||||
/*
|
||||
* Use millimeters since the size is not a multiple of 1/4 inch.
|
||||
*/
|
||||
|
||||
units = "mm";
|
||||
format = _pwgFormatMillimeters;
|
||||
|
||||
if (!prefix)
|
||||
prefix = "om";
|
||||
}
|
||||
|
||||
/*
|
||||
* Format the size string...
|
||||
*/
|
||||
|
||||
uptr = usize;
|
||||
(*format)(uptr, sizeof(usize) - (uptr - usize), width);
|
||||
uptr += strlen(uptr);
|
||||
@@ -387,40 +364,25 @@ pwgFormatSizeName(char *keyword, /* I - Keyword buffer */
|
||||
|
||||
memcpy(uptr, units, 3);
|
||||
|
||||
if (!name)
|
||||
name = usize;
|
||||
|
||||
/*
|
||||
* Format the name...
|
||||
*/
|
||||
|
||||
snprintf(keyword, keysize, "%s_%s_%s", prefix, name, usize);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* For OS X 10.8 and earlier... */
|
||||
void _pwgGenerateSize(char *keyword, size_t keysize, const char *prefix,
|
||||
const char *name, int width, int length)
|
||||
{ pwgFormatSizeName(keyword, keysize, prefix, name, width, length, NULL); }
|
||||
|
||||
|
||||
/*
|
||||
* 'pwgInitSize()' - Initialize a pwg_size_t structure using IPP Job Template
|
||||
* attributes.
|
||||
*
|
||||
* This function initializes a pwg_size_t structure from an IPP "media" or
|
||||
* "media-col" attribute in the specified IPP message. 0 is returned if neither
|
||||
* attribute is found in the message or the values are not valid.
|
||||
*
|
||||
* The "margins_set" variable is initialized to 1 if any "media-xxx-margin"
|
||||
* member attribute was specified in the "media-col" Job Template attribute,
|
||||
* otherwise it is initialized to 0.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
* '_pwgInitSize()' - Initialize a PWG size using IPP job template attributes.
|
||||
*/
|
||||
|
||||
int /* O - 1 if size was initialized, 0 otherwise */
|
||||
pwgInitSize(pwg_size_t *size, /* I - Size to initialize */
|
||||
ipp_t *job, /* I - Job template attributes */
|
||||
int *margins_set) /* O - 1 if margins were set, 0 otherwise */
|
||||
int /* O - 1 if size was initialize, 0 otherwise */
|
||||
_pwgInitSize(_pwg_size_t *size, /* I - Size to initialize */
|
||||
ipp_t *job, /* I - Job template attributes */
|
||||
int *margins_set) /* O - 1 if margins were set, 0 otherwise */
|
||||
{
|
||||
ipp_attribute_t *media, /* media attribute */
|
||||
*media_bottom_margin, /* media-bottom-margin member attribute */
|
||||
@@ -431,7 +393,7 @@ pwgInitSize(pwg_size_t *size, /* I - Size to initialize */
|
||||
*media_top_margin, /* media-top-margin member attribute */
|
||||
*x_dimension, /* x-dimension member attribute */
|
||||
*y_dimension; /* y-dimension member attribute */
|
||||
pwg_media_t *pwg; /* PWG media value */
|
||||
_pwg_media_t *pwg; /* PWG media value */
|
||||
|
||||
|
||||
/*
|
||||
@@ -445,7 +407,7 @@ pwgInitSize(pwg_size_t *size, /* I - Size to initialize */
|
||||
* Look for media-col and then media...
|
||||
*/
|
||||
|
||||
memset(size, 0, sizeof(pwg_size_t));
|
||||
memset(size, 0, sizeof(_pwg_size_t));
|
||||
*margins_set = 0;
|
||||
|
||||
if ((media_col = ippFindAttribute(job, "media-col",
|
||||
@@ -476,20 +438,20 @@ pwgInitSize(pwg_size_t *size, /* I - Size to initialize */
|
||||
}
|
||||
else if (!x_dimension)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
|
||||
_cupsSetError(IPP_INTERNAL_ERROR,
|
||||
_("Missing x-dimension in media-size."), 1);
|
||||
return (0);
|
||||
}
|
||||
else if (!y_dimension)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL,
|
||||
_cupsSetError(IPP_INTERNAL_ERROR,
|
||||
_("Missing y-dimension in media-size."), 1);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Missing media-size in media-col."),
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Missing media-size in media-col."),
|
||||
1);
|
||||
return (0);
|
||||
}
|
||||
@@ -524,18 +486,18 @@ pwgInitSize(pwg_size_t *size, /* I - Size to initialize */
|
||||
if ((media = ippFindAttribute(job, "PageSize", IPP_TAG_NAME)) == NULL)
|
||||
media = ippFindAttribute(job, "PageRegion", IPP_TAG_NAME);
|
||||
|
||||
if (media && media->values[0].string.text)
|
||||
if (media)
|
||||
{
|
||||
const char *name = media->values[0].string.text;
|
||||
/* Name string */
|
||||
|
||||
if ((pwg = pwgMediaForPWG(name)) == NULL)
|
||||
if ((pwg = _pwgMediaForPWG(name)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Not a PWG name, try a legacy name...
|
||||
*/
|
||||
|
||||
if ((pwg = pwgMediaForLegacy(name)) == NULL)
|
||||
if ((pwg = _pwgMediaForLegacy(name)) == NULL)
|
||||
{
|
||||
/*
|
||||
* Not a legacy name, try a PPD name...
|
||||
@@ -543,7 +505,7 @@ pwgInitSize(pwg_size_t *size, /* I - Size to initialize */
|
||||
|
||||
const char *suffix; /* Suffix on media string */
|
||||
|
||||
pwg = pwgMediaForPPD(name);
|
||||
pwg = _pwgMediaForPPD(name);
|
||||
if (pwg &&
|
||||
(suffix = name + strlen(name) - 10 /* .FullBleed */) > name &&
|
||||
!_cups_strcasecmp(suffix, ".FullBleed"))
|
||||
@@ -564,13 +526,13 @@ pwgInitSize(pwg_size_t *size, /* I - Size to initialize */
|
||||
}
|
||||
else
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Unsupported media value."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Unsupported media value."), 1);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Missing media or media-col."), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("Missing media or media-col."), 1);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
@@ -578,24 +540,16 @@ pwgInitSize(pwg_size_t *size, /* I - Size to initialize */
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* For OS X 10.8 and earlier */
|
||||
int _pwgInitSize(pwg_size_t *size, ipp_t *job, int *margins_set)
|
||||
{ return (pwgInitSize(size, job, margins_set)); }
|
||||
|
||||
|
||||
/*
|
||||
* 'pwgMediaForLegacy()' - Find a PWG media size by ISO/IPP legacy name.
|
||||
*
|
||||
* The "name" argument specifies the legacy ISO media size name, for example
|
||||
* "iso-a4" or "na-letter".
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
* '_pwgMediaForLegacy()' - Find a PWG media size by ISO/IPP legacy name.
|
||||
*/
|
||||
|
||||
pwg_media_t * /* O - Matching size or NULL */
|
||||
pwgMediaForLegacy(const char *legacy) /* I - Legacy size name */
|
||||
_pwg_media_t * /* O - Matching size or NULL */
|
||||
_pwgMediaForLegacy(
|
||||
const char *legacy) /* I - Legacy size name */
|
||||
{
|
||||
pwg_media_t key; /* Search key */
|
||||
_pwg_media_t key; /* Search key */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
|
||||
|
||||
|
||||
@@ -613,13 +567,13 @@ pwgMediaForLegacy(const char *legacy) /* I - Legacy size name */
|
||||
if (!cg->leg_size_lut)
|
||||
{
|
||||
int i; /* Looping var */
|
||||
pwg_media_t *size; /* Current size */
|
||||
_pwg_media_t *size; /* Current size */
|
||||
|
||||
cg->leg_size_lut = cupsArrayNew((cups_array_func_t)pwg_compare_legacy,
|
||||
NULL);
|
||||
|
||||
for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])),
|
||||
size = (pwg_media_t *)cups_pwg_media;
|
||||
size = (_pwg_media_t *)cups_pwg_media;
|
||||
i > 0;
|
||||
i --, size ++)
|
||||
if (size->legacy)
|
||||
@@ -631,33 +585,18 @@ pwgMediaForLegacy(const char *legacy) /* I - Legacy size name */
|
||||
*/
|
||||
|
||||
key.legacy = legacy;
|
||||
return ((pwg_media_t *)cupsArrayFind(cg->leg_size_lut, &key));
|
||||
return ((_pwg_media_t *)cupsArrayFind(cg->leg_size_lut, &key));
|
||||
}
|
||||
|
||||
/* For OS X 10.8 and earlier */
|
||||
pwg_media_t *_pwgMediaForLegacy(const char *legacy)
|
||||
{ return (pwgMediaForLegacy(legacy)); }
|
||||
|
||||
|
||||
/*
|
||||
* 'pwgMediaForPPD()' - Find a PWG media size by Adobe PPD name.
|
||||
*
|
||||
* The "ppd" argument specifies an Adobe page size name as defined in Table B.1
|
||||
* of the Adobe PostScript Printer Description File Format Specification Version
|
||||
* 4.3.
|
||||
*
|
||||
* If the name is non-standard, the returned PWG media size is stored in
|
||||
* thread-local storage and is overwritten by each call to the function in the
|
||||
* thread. Custom names can be of the form "Custom.WIDTHxLENGTH[units]" or
|
||||
* "WIDTHxLENGTH[units]".
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
* '_pwgMediaForPPD()' - Find a PWG media size by Adobe PPD name.
|
||||
*/
|
||||
|
||||
pwg_media_t * /* O - Matching size or NULL */
|
||||
pwgMediaForPPD(const char *ppd) /* I - PPD size name */
|
||||
_pwg_media_t * /* O - Matching size or NULL */
|
||||
_pwgMediaForPPD(const char *ppd) /* I - PPD size name */
|
||||
{
|
||||
pwg_media_t key, /* Search key */
|
||||
_pwg_media_t key, /* Search key */
|
||||
*size; /* Matching size */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
|
||||
|
||||
@@ -680,7 +619,7 @@ pwgMediaForPPD(const char *ppd) /* I - PPD size name */
|
||||
cg->ppd_size_lut = cupsArrayNew((cups_array_func_t)pwg_compare_ppd, NULL);
|
||||
|
||||
for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])),
|
||||
size = (pwg_media_t *)cups_pwg_media;
|
||||
size = (_pwg_media_t *)cups_pwg_media;
|
||||
i > 0;
|
||||
i --, size ++)
|
||||
if (size->ppd)
|
||||
@@ -692,7 +631,7 @@ pwgMediaForPPD(const char *ppd) /* I - PPD size name */
|
||||
*/
|
||||
|
||||
key.ppd = ppd;
|
||||
if ((size = (pwg_media_t *)cupsArrayFind(cg->ppd_size_lut, &key)) == NULL)
|
||||
if ((size = (_pwg_media_t *)cupsArrayFind(cg->ppd_size_lut, &key)) == NULL)
|
||||
{
|
||||
/*
|
||||
* See if the name is of the form:
|
||||
@@ -774,9 +713,9 @@ pwgMediaForPPD(const char *ppd) /* I - PPD size name */
|
||||
size->length = (int)(l * factor);
|
||||
size->pwg = cg->pwg_name;
|
||||
|
||||
pwgFormatSizeName(cg->pwg_name, sizeof(cg->pwg_name),
|
||||
custom ? "custom" : NULL, custom ? ppd + 7 : NULL,
|
||||
size->width, size->length, NULL);
|
||||
_pwgGenerateSize(cg->pwg_name, sizeof(cg->pwg_name),
|
||||
custom ? "custom" : NULL, custom ? ppd + 7 : NULL,
|
||||
size->width, size->length);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -784,29 +723,16 @@ pwgMediaForPPD(const char *ppd) /* I - PPD size name */
|
||||
return (size);
|
||||
}
|
||||
|
||||
/* For OS X 10.8 and earlier */
|
||||
pwg_media_t *_pwgMediaForPPD(const char *ppd)
|
||||
{ return (pwgMediaForPPD(ppd)); }
|
||||
|
||||
|
||||
/*
|
||||
* 'pwgMediaForPWG()' - Find a PWG media size by 5101.1 self-describing name.
|
||||
*
|
||||
* The "pwg" argument specifies a self-describing media size name of the form
|
||||
* "prefix_name_WIDTHxLENGTHunits" as defined in PWG 5101.1.
|
||||
*
|
||||
* If the name is non-standard, the returned PWG media size is stored in
|
||||
* thread-local storage and is overwritten by each call to the function in the
|
||||
* thread.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
* '_pwgMediaForPWG()' - Find a PWG media size by 5101.1 self-describing name.
|
||||
*/
|
||||
|
||||
pwg_media_t * /* O - Matching size or NULL */
|
||||
pwgMediaForPWG(const char *pwg) /* I - PWG size name */
|
||||
_pwg_media_t * /* O - Matching size or NULL */
|
||||
_pwgMediaForPWG(const char *pwg) /* I - PWG size name */
|
||||
{
|
||||
char *ptr; /* Pointer into name */
|
||||
pwg_media_t key, /* Search key */
|
||||
_pwg_media_t key, /* Search key */
|
||||
*size; /* Matching size */
|
||||
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
|
||||
|
||||
@@ -829,7 +755,7 @@ pwgMediaForPWG(const char *pwg) /* I - PWG size name */
|
||||
cg->pwg_size_lut = cupsArrayNew((cups_array_func_t)pwg_compare_pwg, NULL);
|
||||
|
||||
for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])),
|
||||
size = (pwg_media_t *)cups_pwg_media;
|
||||
size = (_pwg_media_t *)cups_pwg_media;
|
||||
i > 0;
|
||||
i --, size ++)
|
||||
cupsArrayAdd(cg->pwg_size_lut, size);
|
||||
@@ -840,7 +766,7 @@ pwgMediaForPWG(const char *pwg) /* I - PWG size name */
|
||||
*/
|
||||
|
||||
key.pwg = pwg;
|
||||
if ((size = (pwg_media_t *)cupsArrayFind(cg->pwg_size_lut, &key)) == NULL &&
|
||||
if ((size = (_pwg_media_t *)cupsArrayFind(cg->pwg_size_lut, &key)) == NULL &&
|
||||
(ptr = (char *)strchr(pwg, '_')) != NULL &&
|
||||
(ptr = (char *)strchr(ptr + 1, '_')) != NULL)
|
||||
{
|
||||
@@ -886,30 +812,17 @@ pwgMediaForPWG(const char *pwg) /* I - PWG size name */
|
||||
return (size);
|
||||
}
|
||||
|
||||
/* For OS X 10.8 and earlier */
|
||||
pwg_media_t *_pwgMediaForPWG(const char *pwg)
|
||||
{ return (pwgMediaForPWG(pwg)); }
|
||||
|
||||
|
||||
/*
|
||||
* 'pwgMediaForSize()' - Get the PWG media size for the given dimensions.
|
||||
*
|
||||
* The "width" and "length" are in hundredths of millimeters, equivalent to
|
||||
* 1/100000th of a meter or 1/2540th of an inch.
|
||||
*
|
||||
* If the dimensions are non-standard, the returned PWG media size is stored in
|
||||
* thread-local storage and is overwritten by each call to the function in the
|
||||
* thread.
|
||||
*
|
||||
* @since CUPS 1.7@
|
||||
* '_pwgMediaForSize()' - Get the PWG media name for a given size.
|
||||
*/
|
||||
|
||||
pwg_media_t * /* O - PWG media name */
|
||||
pwgMediaForSize(int width, /* I - Width in hundredths of millimeters */
|
||||
int length) /* I - Length in hundredths of millimeters */
|
||||
_pwg_media_t * /* O - PWG media name */
|
||||
_pwgMediaForSize(int width, /* I - Width in 2540ths */
|
||||
int length) /* I - Length in 2540ths */
|
||||
{
|
||||
int i; /* Looping var */
|
||||
pwg_media_t *media, /* Current media */
|
||||
_pwg_media_t *media, /* Current media */
|
||||
*best_media = NULL; /* Best match */
|
||||
int dw, dl, /* Difference in width and length */
|
||||
best_dw = 999, /* Best difference in width and length */
|
||||
@@ -929,7 +842,7 @@ pwgMediaForSize(int width, /* I - Width in hundredths of millimeters */
|
||||
*/
|
||||
|
||||
for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])),
|
||||
media = (pwg_media_t *)cups_pwg_media;
|
||||
media = (_pwg_media_t *)cups_pwg_media;
|
||||
i > 0;
|
||||
i --, media ++)
|
||||
{
|
||||
@@ -963,8 +876,8 @@ pwgMediaForSize(int width, /* I - Width in hundredths of millimeters */
|
||||
* custom_WIDTHxHEIGHTuu_WIDTHxHEIGHTuu
|
||||
*/
|
||||
|
||||
pwgFormatSizeName(cg->pwg_name, sizeof(cg->pwg_name), "custom", NULL, width,
|
||||
length, NULL);
|
||||
_pwgGenerateSize(cg->pwg_name, sizeof(cg->pwg_name), "custom", NULL, width,
|
||||
length);
|
||||
|
||||
cg->pwg_media.pwg = cg->pwg_name;
|
||||
cg->pwg_media.width = width;
|
||||
@@ -973,18 +886,14 @@ pwgMediaForSize(int width, /* I - Width in hundredths of millimeters */
|
||||
return (&(cg->pwg_media));
|
||||
}
|
||||
|
||||
/* For OS X 10.8 and earlier */
|
||||
pwg_media_t *_pwgMediaForSize(int width, int length)
|
||||
{ return (pwgMediaForSize(width, length)); }
|
||||
|
||||
|
||||
/*
|
||||
* 'pwg_compare_legacy()' - Compare two sizes using the legacy names.
|
||||
*/
|
||||
|
||||
static int /* O - Result of comparison */
|
||||
pwg_compare_legacy(pwg_media_t *a, /* I - First size */
|
||||
pwg_media_t *b) /* I - Second size */
|
||||
pwg_compare_legacy(_pwg_media_t *a, /* I - First size */
|
||||
_pwg_media_t *b) /* I - Second size */
|
||||
{
|
||||
return (strcmp(a->legacy, b->legacy));
|
||||
}
|
||||
@@ -995,8 +904,8 @@ pwg_compare_legacy(pwg_media_t *a, /* I - First size */
|
||||
*/
|
||||
|
||||
static int /* O - Result of comparison */
|
||||
pwg_compare_ppd(pwg_media_t *a, /* I - First size */
|
||||
pwg_media_t *b) /* I - Second size */
|
||||
pwg_compare_ppd(_pwg_media_t *a, /* I - First size */
|
||||
_pwg_media_t *b) /* I - Second size */
|
||||
{
|
||||
return (strcmp(a->ppd, b->ppd));
|
||||
}
|
||||
@@ -1007,90 +916,13 @@ pwg_compare_ppd(pwg_media_t *a, /* I - First size */
|
||||
*/
|
||||
|
||||
static int /* O - Result of comparison */
|
||||
pwg_compare_pwg(pwg_media_t *a, /* I - First size */
|
||||
pwg_media_t *b) /* I - Second size */
|
||||
pwg_compare_pwg(_pwg_media_t *a, /* I - First size */
|
||||
_pwg_media_t *b) /* I - Second size */
|
||||
{
|
||||
return (strcmp(a->pwg, b->pwg));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'pwg_format_inches()' - Convert and format PWG units as inches.
|
||||
*/
|
||||
|
||||
static char * /* O - String */
|
||||
pwg_format_inches(char *buf, /* I - Buffer */
|
||||
size_t bufsize, /* I - Size of buffer */
|
||||
int val) /* I - Value in hundredths of millimeters */
|
||||
{
|
||||
int thousandths, /* Thousandths of inches */
|
||||
integer, /* Integer portion */
|
||||
fraction; /* Fractional portion */
|
||||
|
||||
|
||||
/*
|
||||
* Convert hundredths of millimeters to thousandths of inches and round to
|
||||
* the nearest thousandth.
|
||||
*/
|
||||
|
||||
thousandths = (val * 1000 + 1270) / 2540;
|
||||
integer = thousandths / 1000;
|
||||
fraction = thousandths % 1000;
|
||||
|
||||
/*
|
||||
* Format as a pair of integers (avoids locale stuff), avoiding trailing
|
||||
* zeros...
|
||||
*/
|
||||
|
||||
if (fraction == 0)
|
||||
snprintf(buf, bufsize, "%d", integer);
|
||||
else if (fraction % 10)
|
||||
snprintf(buf, bufsize, "%d.%03d", integer, fraction);
|
||||
else if (fraction % 100)
|
||||
snprintf(buf, bufsize, "%d.%02d", integer, fraction / 10);
|
||||
else
|
||||
snprintf(buf, bufsize, "%d.%01d", integer, fraction / 100);
|
||||
|
||||
return (buf);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 'pwg_format_millimeters()' - Convert and format PWG units as millimeters.
|
||||
*/
|
||||
|
||||
static char * /* O - String */
|
||||
pwg_format_millimeters(char *buf, /* I - Buffer */
|
||||
size_t bufsize, /* I - Size of buffer */
|
||||
int val) /* I - Value in hundredths of millimeters */
|
||||
{
|
||||
int integer, /* Integer portion */
|
||||
fraction; /* Fractional portion */
|
||||
|
||||
|
||||
/*
|
||||
* Convert hundredths of millimeters to integer and fractional portions.
|
||||
*/
|
||||
|
||||
integer = val / 100;
|
||||
fraction = val % 100;
|
||||
|
||||
/*
|
||||
* Format as a pair of integers (avoids locale stuff), avoiding trailing
|
||||
* zeros...
|
||||
*/
|
||||
|
||||
if (fraction == 0)
|
||||
snprintf(buf, bufsize, "%d", integer);
|
||||
else if (fraction % 10)
|
||||
snprintf(buf, bufsize, "%d.%02d", integer, fraction);
|
||||
else
|
||||
snprintf(buf, bufsize, "%d.%01d", integer, fraction / 10);
|
||||
|
||||
return (buf);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
+47
-20
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Private PWG media API definitions for CUPS.
|
||||
*
|
||||
* Copyright 2009-2013 by Apple Inc.
|
||||
* Copyright 2009-2012 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
@@ -35,36 +35,63 @@ extern "C" {
|
||||
|
||||
|
||||
/*
|
||||
* Deprecated stuff for prior users of the private PWG media API...
|
||||
* Macros...
|
||||
*/
|
||||
|
||||
# ifndef _CUPS_NO_DEPRECATED
|
||||
typedef struct pwg_map_s _pwg_map_t;
|
||||
typedef struct pwg_media_s _pwg_media_t;
|
||||
typedef struct pwg_size_s _pwg_size_t;
|
||||
# endif /* _CUPS_NO_DEPRECATED */
|
||||
/* Convert from points to 2540ths */
|
||||
# define _PWG_FROMPTS(n) (int)(((n) * 2540 + 36) / 72)
|
||||
/* Convert from 2540ths to points */
|
||||
# define _PWG_TOPTS(n) ((n) * 72.0 / 2540.0)
|
||||
|
||||
|
||||
/*
|
||||
* Types and structures...
|
||||
*/
|
||||
|
||||
typedef struct _pwg_map_s /**** Map element - PPD to/from PWG */
|
||||
{
|
||||
char *pwg, /* PWG media keyword */
|
||||
*ppd; /* PPD option keyword */
|
||||
} _pwg_map_t;
|
||||
|
||||
typedef struct _pwg_media_s /**** Common media size data ****/
|
||||
{
|
||||
const char *pwg, /* PWG 5101.1 "self describing" name */
|
||||
*legacy, /* IPP/ISO legacy name */
|
||||
*ppd; /* Standard Adobe PPD name */
|
||||
int width, /* Width in 2540ths */
|
||||
length; /* Length in 2540ths */
|
||||
} _pwg_media_t;
|
||||
|
||||
typedef struct _pwg_size_s /**** Size element - PPD to/from PWG */
|
||||
{
|
||||
_pwg_map_t map; /* Map element */
|
||||
int width, /* Width in 2540ths */
|
||||
length, /* Length in 2540ths */
|
||||
left, /* Left margin in 2540ths */
|
||||
bottom, /* Bottom margin in 2540ths */
|
||||
right, /* Right margin in 2540ths */
|
||||
top; /* Top margin in 2540ths */
|
||||
} _pwg_size_t;
|
||||
|
||||
|
||||
/*
|
||||
* Functions...
|
||||
*/
|
||||
|
||||
extern char *_pwgFormatInches(char *buf, size_t bufsize, int val);
|
||||
extern char *_pwgFormatMillimeters(char *buf, size_t bufsize,
|
||||
int val);
|
||||
extern void _pwgGenerateSize(char *keyword, size_t keysize,
|
||||
const char *prefix,
|
||||
const char *name,
|
||||
int width, int length)
|
||||
_CUPS_INTERNAL_MSG("Use pwgFormatSizeName instead.");
|
||||
extern int _pwgInitSize(pwg_size_t *size, ipp_t *job,
|
||||
int *margins_set)
|
||||
_CUPS_INTERNAL_MSG("Use pwgInitSize instead.");
|
||||
extern pwg_media_t *_pwgMediaForLegacy(const char *legacy)
|
||||
_CUPS_INTERNAL_MSG("Use pwgMediaForLegacy instead.");
|
||||
extern pwg_media_t *_pwgMediaForPPD(const char *ppd)
|
||||
_CUPS_INTERNAL_MSG("Use pwgMediaForPPD instead.");
|
||||
extern pwg_media_t *_pwgMediaForPWG(const char *pwg)
|
||||
_CUPS_INTERNAL_MSG("Use pwgMediaForPWG instead.");
|
||||
extern pwg_media_t *_pwgMediaForSize(int width, int length)
|
||||
_CUPS_INTERNAL_MSG("Use pwgMediaForSize instead.");
|
||||
int width, int length);
|
||||
extern int _pwgInitSize(_pwg_size_t *size, ipp_t *job,
|
||||
int *margins_set);
|
||||
extern _pwg_media_t *_pwgMediaForLegacy(const char *legacy);
|
||||
extern _pwg_media_t *_pwgMediaForPPD(const char *ppd);
|
||||
extern _pwg_media_t *_pwgMediaForPWG(const char *pwg);
|
||||
extern _pwg_media_t *_pwgMediaForSize(int width, int length);
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* PWG media API definitions for CUPS.
|
||||
*
|
||||
* Copyright 2009-2013 by Apple Inc.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
* property of Apple Inc. and are protected by Federal copyright
|
||||
* law. Distribution and use rights are outlined in the file "LICENSE.txt"
|
||||
* which should have been included with this file. If this file is
|
||||
* file is missing or damaged, see the license at "http://www.cups.org/".
|
||||
*
|
||||
* This file is subject to the Apple OS-Developed Software exception.
|
||||
*/
|
||||
|
||||
#ifndef _CUPS_PWG_H_
|
||||
# define _CUPS_PWG_H_
|
||||
|
||||
|
||||
/*
|
||||
* C++ magic...
|
||||
*/
|
||||
|
||||
# ifdef __cplusplus
|
||||
extern "C" {
|
||||
# endif /* __cplusplus */
|
||||
|
||||
|
||||
/*
|
||||
* Macros...
|
||||
*/
|
||||
|
||||
/* Convert from points to hundredths of millimeters */
|
||||
# define PWG_FROM_POINTS(n) (int)(((n) * 2540 + 36) / 72)
|
||||
/* Convert from hundredths of millimeters to points */
|
||||
# define PWG_TO_POINTS(n) ((n) * 72.0 / 2540.0)
|
||||
|
||||
|
||||
/*
|
||||
* Types and structures...
|
||||
*/
|
||||
|
||||
typedef struct pwg_map_s /**** Map element - PPD to/from PWG */
|
||||
{
|
||||
char *pwg, /* PWG media keyword */
|
||||
*ppd; /* PPD option keyword */
|
||||
} pwg_map_t;
|
||||
|
||||
typedef struct pwg_media_s /**** Common media size data ****/
|
||||
{
|
||||
const char *pwg, /* PWG 5101.1 "self describing" name */
|
||||
*legacy, /* IPP/ISO legacy name */
|
||||
*ppd; /* Standard Adobe PPD name */
|
||||
int width, /* Width in 2540ths */
|
||||
length; /* Length in 2540ths */
|
||||
} pwg_media_t;
|
||||
|
||||
typedef struct pwg_size_s /**** Size element - PPD to/from PWG */
|
||||
{
|
||||
pwg_map_t map; /* Map element */
|
||||
int width, /* Width in 2540ths */
|
||||
length, /* Length in 2540ths */
|
||||
left, /* Left margin in 2540ths */
|
||||
bottom, /* Bottom margin in 2540ths */
|
||||
right, /* Right margin in 2540ths */
|
||||
top; /* Top margin in 2540ths */
|
||||
} pwg_size_t;
|
||||
|
||||
|
||||
/*
|
||||
* Functions...
|
||||
*/
|
||||
|
||||
extern int pwgFormatSizeName(char *keyword, size_t keysize,
|
||||
const char *prefix, const char *name,
|
||||
int width, int length,
|
||||
const char *units) _CUPS_API_1_7;
|
||||
extern int pwgInitSize(pwg_size_t *size, ipp_t *job,
|
||||
int *margins_set) _CUPS_API_1_7;
|
||||
extern pwg_media_t *pwgMediaForLegacy(const char *legacy) _CUPS_API_1_7;
|
||||
extern pwg_media_t *pwgMediaForPPD(const char *ppd) _CUPS_API_1_7;
|
||||
extern pwg_media_t *pwgMediaForPWG(const char *pwg) _CUPS_API_1_7;
|
||||
extern pwg_media_t *pwgMediaForSize(int width, int length) _CUPS_API_1_7;
|
||||
|
||||
# ifdef __cplusplus
|
||||
}
|
||||
# endif /* __cplusplus */
|
||||
|
||||
#endif /* !_CUPS_PWG_H_ */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
+2
-2
@@ -368,11 +368,11 @@ typedef ssize_t (*cups_raster_iocb_t)(void *ctx, unsigned char *buffer, size_t l
|
||||
extern void cupsRasterClose(cups_raster_t *r);
|
||||
extern cups_raster_t *cupsRasterOpen(int fd, cups_mode_t mode);
|
||||
extern unsigned cupsRasterReadHeader(cups_raster_t *r,
|
||||
cups_page_header_t *h) _CUPS_DEPRECATED_MSG("Use cupsRasterReadHeader2 instead.");
|
||||
cups_page_header_t *h) _CUPS_DEPRECATED;
|
||||
extern unsigned cupsRasterReadPixels(cups_raster_t *r,
|
||||
unsigned char *p, unsigned len);
|
||||
extern unsigned cupsRasterWriteHeader(cups_raster_t *r,
|
||||
cups_page_header_t *h) _CUPS_DEPRECATED_MSG("Use cupsRasterWriteHeader2 instead.");
|
||||
cups_page_header_t *h) _CUPS_DEPRECATED;
|
||||
extern unsigned cupsRasterWritePixels(cups_raster_t *r,
|
||||
unsigned char *p, unsigned len);
|
||||
|
||||
|
||||
+120
-132
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* IPP utilities 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
|
||||
@@ -46,9 +46,6 @@
|
||||
#ifndef O_BINARY
|
||||
# define O_BINARY 0
|
||||
#endif /* O_BINARY */
|
||||
#ifndef MSG_DONTWAIT
|
||||
# define MSG_DONTWAIT 0
|
||||
#endif /* !MSG_DONTWAIT */
|
||||
|
||||
|
||||
/*
|
||||
@@ -82,7 +79,7 @@ cupsDoFileRequest(http_t *http, /* I - Connection to server or @code CUPS_HT
|
||||
* Can't get file information!
|
||||
*/
|
||||
|
||||
_cupsSetError(errno == ENOENT ? IPP_STATUS_ERROR_NOT_FOUND : IPP_STATUS_ERROR_NOT_AUTHORIZED,
|
||||
_cupsSetError(errno == ENOENT ? IPP_NOT_FOUND : IPP_NOT_AUTHORIZED,
|
||||
NULL, 0);
|
||||
|
||||
ippDelete(request);
|
||||
@@ -146,7 +143,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
{
|
||||
ippDelete(request);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
@@ -175,7 +172,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
* Can't get file information!
|
||||
*/
|
||||
|
||||
_cupsSetError(errno == EBADF ? IPP_STATUS_ERROR_NOT_FOUND : IPP_STATUS_ERROR_NOT_AUTHORIZED,
|
||||
_cupsSetError(errno == EBADF ? IPP_NOT_FOUND : IPP_NOT_AUTHORIZED,
|
||||
NULL, 0);
|
||||
|
||||
ippDelete(request);
|
||||
@@ -195,7 +192,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
ippDelete(request);
|
||||
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_POSSIBLE, strerror(EISDIR), 0);
|
||||
_cupsSetError(IPP_NOT_POSSIBLE, strerror(EISDIR), 0);
|
||||
|
||||
return (NULL);
|
||||
}
|
||||
@@ -236,7 +233,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
DEBUG_printf(("2cupsDoIORequest: status=%d", status));
|
||||
|
||||
if (status == HTTP_STATUS_CONTINUE && request->state == IPP_STATE_DATA && infile >= 0)
|
||||
if (status == HTTP_CONTINUE && request->state == IPP_DATA && infile >= 0)
|
||||
{
|
||||
DEBUG_puts("2cupsDoIORequest: file write...");
|
||||
|
||||
@@ -252,7 +249,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
while ((bytes = (int)read(infile, buffer, sizeof(buffer))) > 0)
|
||||
{
|
||||
if ((status = cupsWriteRequestData(http, buffer, bytes))
|
||||
!= HTTP_STATUS_CONTINUE)
|
||||
!= HTTP_CONTINUE)
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -261,7 +258,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
* Get the server's response...
|
||||
*/
|
||||
|
||||
if (status != HTTP_STATUS_ERROR)
|
||||
if (status != HTTP_ERROR)
|
||||
{
|
||||
response = cupsGetResponse(http, resource);
|
||||
status = httpGetStatus(http);
|
||||
@@ -269,9 +266,9 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
DEBUG_printf(("2cupsDoIORequest: status=%d", status));
|
||||
|
||||
if (status == HTTP_STATUS_ERROR ||
|
||||
(status >= HTTP_STATUS_BAD_REQUEST && status != HTTP_STATUS_UNAUTHORIZED &&
|
||||
status != HTTP_STATUS_UPGRADE_REQUIRED))
|
||||
if (status == HTTP_ERROR ||
|
||||
(status >= HTTP_BAD_REQUEST && status != HTTP_UNAUTHORIZED &&
|
||||
status != HTTP_UPGRADE_REQUIRED))
|
||||
{
|
||||
_cupsSetHTTPError(status);
|
||||
break;
|
||||
@@ -288,7 +285,7 @@ cupsDoIORequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
break;
|
||||
}
|
||||
|
||||
if (http->state != HTTP_STATE_WAITING)
|
||||
if (http->state != HTTP_WAITING)
|
||||
{
|
||||
/*
|
||||
* Flush any remaining data...
|
||||
@@ -358,15 +355,14 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
if (!http)
|
||||
http = _cupsConnect();
|
||||
|
||||
if (!http || (http->state != HTTP_STATE_POST_RECV &&
|
||||
http->state != HTTP_STATE_POST_SEND))
|
||||
if (!http || (http->state != HTTP_POST_RECV && http->state != HTTP_POST_SEND))
|
||||
return (NULL);
|
||||
|
||||
/*
|
||||
* Check for an unfinished chunked request...
|
||||
*/
|
||||
|
||||
if (http->data_encoding == HTTP_ENCODING_CHUNKED)
|
||||
if (http->data_encoding == HTTP_ENCODE_CHUNKED)
|
||||
{
|
||||
/*
|
||||
* Send a 0-length chunk to finish off the request...
|
||||
@@ -389,11 +385,11 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
{
|
||||
status = httpUpdate(http);
|
||||
}
|
||||
while (status == HTTP_STATUS_CONTINUE);
|
||||
while (status != HTTP_ERROR && http->state == HTTP_POST_RECV);
|
||||
|
||||
DEBUG_printf(("2cupsGetResponse: status=%d", status));
|
||||
|
||||
if (status == HTTP_STATUS_OK)
|
||||
if (status == HTTP_OK)
|
||||
{
|
||||
/*
|
||||
* Get the IPP response...
|
||||
@@ -401,11 +397,11 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
response = ippNew();
|
||||
|
||||
while ((state = ippRead(http, response)) != IPP_STATE_DATA)
|
||||
if (state == IPP_STATE_ERROR)
|
||||
while ((state = ippRead(http, response)) != IPP_DATA)
|
||||
if (state == IPP_ERROR)
|
||||
break;
|
||||
|
||||
if (state == IPP_STATE_ERROR)
|
||||
if (state == IPP_ERROR)
|
||||
{
|
||||
/*
|
||||
* Flush remaining data and delete the response...
|
||||
@@ -418,11 +414,11 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
ippDelete(response);
|
||||
response = NULL;
|
||||
|
||||
http->status = status = HTTP_STATUS_ERROR;
|
||||
http->status = status = HTTP_ERROR;
|
||||
http->error = EINVAL;
|
||||
}
|
||||
}
|
||||
else if (status != HTTP_STATUS_ERROR)
|
||||
else if (status != HTTP_ERROR)
|
||||
{
|
||||
/*
|
||||
* Flush any error message...
|
||||
@@ -434,7 +430,7 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
* Then handle encryption and authentication...
|
||||
*/
|
||||
|
||||
if (status == HTTP_STATUS_UNAUTHORIZED)
|
||||
if (status == HTTP_UNAUTHORIZED)
|
||||
{
|
||||
/*
|
||||
* See if we can do authentication...
|
||||
@@ -443,13 +439,13 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
DEBUG_puts("2cupsGetResponse: Need authorization...");
|
||||
|
||||
if (!cupsDoAuthentication(http, "POST", resource))
|
||||
httpReconnect2(http, 30000, NULL);
|
||||
httpReconnect(http);
|
||||
else
|
||||
http->status = status = HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED;
|
||||
http->status = status = HTTP_AUTHORIZATION_CANCELED;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
else if (status == HTTP_STATUS_UPGRADE_REQUIRED)
|
||||
else if (status == HTTP_UPGRADE_REQUIRED)
|
||||
{
|
||||
/*
|
||||
* Force a reconnect with encryption...
|
||||
@@ -457,8 +453,8 @@ cupsGetResponse(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
DEBUG_puts("2cupsGetResponse: Need encryption...");
|
||||
|
||||
if (!httpReconnect2(http, 30000, NULL))
|
||||
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED);
|
||||
if (!httpReconnect(http))
|
||||
httpEncryption(http, HTTP_ENCRYPT_REQUIRED);
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
}
|
||||
@@ -569,7 +565,7 @@ cupsReadResponseData(
|
||||
|
||||
if ((http = cg->http) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No active connection"), 1);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("No active connection"), 1);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
@@ -591,7 +587,7 @@ cupsReadResponseData(
|
||||
* response. Only one request can be sent/queued at a time per @code http_t@
|
||||
* connection.
|
||||
*
|
||||
* Returns the initial HTTP status code, which will be @code HTTP_STATUS_CONTINUE@
|
||||
* Returns the initial HTTP status code, which will be @code HTTP_CONTINUE@
|
||||
* on a successful send of the request.
|
||||
*
|
||||
* Note: Unlike @link cupsDoFileRequest@, @link cupsDoIORequest@, and
|
||||
@@ -606,10 +602,10 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
const char *resource, /* I - Resource path */
|
||||
size_t length) /* I - Length of data to follow or @code CUPS_LENGTH_VARIABLE@ */
|
||||
{
|
||||
http_status_t status; /* Status of HTTP request */
|
||||
int got_status; /* Did we get the status? */
|
||||
ipp_state_t state; /* State of IPP processing */
|
||||
http_status_t expect; /* Expect: header to use */
|
||||
http_status_t status; /* Status of HTTP request */
|
||||
int got_status; /* Did we get the status? */
|
||||
ipp_state_t state; /* State of IPP processing */
|
||||
http_status_t expect; /* Expect: header to use */
|
||||
|
||||
|
||||
DEBUG_printf(("cupsSendRequest(http=%p, request=%p(%s), resource=\"%s\", "
|
||||
@@ -623,9 +619,9 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
if (!request || !resource)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(EINVAL), 0);
|
||||
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -634,24 +630,24 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
if (!http)
|
||||
if ((http = _cupsConnect()) == NULL)
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
|
||||
/*
|
||||
* If the prior request was not flushed out, do so now...
|
||||
*/
|
||||
|
||||
if (http->state == HTTP_STATE_GET_SEND ||
|
||||
http->state == HTTP_STATE_POST_SEND)
|
||||
if (http->state == HTTP_GET_SEND ||
|
||||
http->state == HTTP_POST_SEND)
|
||||
{
|
||||
DEBUG_puts("2cupsSendRequest: Flush prior response.");
|
||||
httpFlush(http);
|
||||
}
|
||||
else if (http->state != HTTP_STATE_WAITING)
|
||||
else if (http->state != HTTP_WAITING)
|
||||
{
|
||||
DEBUG_printf(("1cupsSendRequest: Unknown HTTP state (%d), "
|
||||
"reconnecting.", http->state));
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
return (HTTP_STATUS_ERROR);
|
||||
if (httpReconnect(http))
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
@@ -663,10 +659,10 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
if (ippFindAttribute(request, "auth-info", IPP_TAG_TEXT) &&
|
||||
!httpAddrLocalhost(http->hostaddr) && !http->tls &&
|
||||
httpEncryption(http, HTTP_ENCRYPTION_REQUIRED))
|
||||
httpEncryption(http, HTTP_ENCRYPT_REQUIRED))
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Unable to encrypt connection.");
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
}
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
@@ -678,10 +674,10 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
{
|
||||
DEBUG_puts("2cupsSendRequest: Connection: close");
|
||||
httpClearFields(http);
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Unable to reconnect.");
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -689,7 +685,7 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
* Loop until we can send the request without authorization problems.
|
||||
*/
|
||||
|
||||
expect = HTTP_STATUS_CONTINUE;
|
||||
expect = HTTP_CONTINUE;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@@ -729,10 +725,10 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
if (httpPost(http, resource))
|
||||
{
|
||||
DEBUG_puts("2cupsSendRequest: POST failed, reconnecting.");
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Unable to reconnect.");
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
}
|
||||
else
|
||||
continue;
|
||||
@@ -744,30 +740,30 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
DEBUG_puts("2cupsSendRequest: Writing IPP request...");
|
||||
|
||||
request->state = IPP_STATE_IDLE;
|
||||
status = HTTP_STATUS_CONTINUE;
|
||||
request->state = IPP_IDLE;
|
||||
status = HTTP_CONTINUE;
|
||||
got_status = 0;
|
||||
|
||||
while ((state = ippWrite(http, request)) != IPP_STATE_DATA)
|
||||
if (state == IPP_STATE_ERROR)
|
||||
while ((state = ippWrite(http, request)) != IPP_DATA)
|
||||
if (state == IPP_ERROR)
|
||||
break;
|
||||
else if (httpCheck(http))
|
||||
{
|
||||
got_status = 1;
|
||||
|
||||
_httpUpdate(http, &status);
|
||||
if (status >= HTTP_STATUS_MULTIPLE_CHOICES)
|
||||
if (status >= HTTP_MULTIPLE_CHOICES)
|
||||
break;
|
||||
}
|
||||
|
||||
if (state == IPP_STATE_ERROR)
|
||||
if (state == IPP_ERROR)
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Unable to send IPP request.");
|
||||
|
||||
http->status = HTTP_STATUS_ERROR;
|
||||
http->state = HTTP_STATE_WAITING;
|
||||
http->status = HTTP_ERROR;
|
||||
http->state = HTTP_WAITING;
|
||||
|
||||
return (HTTP_STATUS_ERROR);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -776,7 +772,7 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
|
||||
if (!got_status)
|
||||
{
|
||||
if (expect == HTTP_STATUS_CONTINUE)
|
||||
if (expect == HTTP_CONTINUE)
|
||||
{
|
||||
DEBUG_puts("2cupsSendRequest: Waiting for 100-continue...");
|
||||
|
||||
@@ -793,72 +789,69 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
* Process the current HTTP status...
|
||||
*/
|
||||
|
||||
if (status >= HTTP_STATUS_MULTIPLE_CHOICES)
|
||||
if (status >= HTTP_MULTIPLE_CHOICES)
|
||||
{
|
||||
int temp_status; /* Temporary status */
|
||||
|
||||
_cupsSetHTTPError(status);
|
||||
|
||||
do
|
||||
{
|
||||
temp_status = httpUpdate(http);
|
||||
status = httpUpdate(http);
|
||||
}
|
||||
while (temp_status != HTTP_STATUS_ERROR &&
|
||||
http->state == HTTP_STATE_POST_RECV);
|
||||
while (status != HTTP_ERROR && http->state == HTTP_POST_RECV);
|
||||
|
||||
httpFlush(http);
|
||||
}
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case HTTP_STATUS_CONTINUE :
|
||||
case HTTP_STATUS_OK :
|
||||
case HTTP_STATUS_ERROR :
|
||||
case HTTP_ERROR :
|
||||
case HTTP_CONTINUE :
|
||||
case HTTP_OK :
|
||||
DEBUG_printf(("1cupsSendRequest: Returning %d.", status));
|
||||
return (status);
|
||||
|
||||
case HTTP_STATUS_UNAUTHORIZED :
|
||||
case HTTP_UNAUTHORIZED :
|
||||
if (cupsDoAuthentication(http, "POST", resource))
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Returning HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED.");
|
||||
return (HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED);
|
||||
DEBUG_puts("1cupsSendRequest: Returning HTTP_AUTHORIZATION_CANCELED.");
|
||||
return (HTTP_AUTHORIZATION_CANCELED);
|
||||
}
|
||||
|
||||
DEBUG_puts("2cupsSendRequest: Reconnecting after HTTP_STATUS_UNAUTHORIZED.");
|
||||
DEBUG_puts("2cupsSendRequest: Reconnecting after HTTP_UNAUTHORIZED.");
|
||||
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Unable to reconnect.");
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef HAVE_SSL
|
||||
case HTTP_STATUS_UPGRADE_REQUIRED :
|
||||
case HTTP_UPGRADE_REQUIRED :
|
||||
/*
|
||||
* Flush any error message, reconnect, and then upgrade with
|
||||
* encryption...
|
||||
*/
|
||||
|
||||
DEBUG_puts("2cupsSendRequest: Reconnecting after "
|
||||
"HTTP_STATUS_UPGRADE_REQUIRED.");
|
||||
"HTTP_UPGRADE_REQUIRED.");
|
||||
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Unable to reconnect.");
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
}
|
||||
|
||||
DEBUG_puts("2cupsSendRequest: Upgrading to TLS.");
|
||||
if (httpEncryption(http, HTTP_ENCRYPTION_REQUIRED))
|
||||
if (httpEncryption(http, HTTP_ENCRYPT_REQUIRED))
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Unable to encrypt connection.");
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
}
|
||||
break;
|
||||
#endif /* HAVE_SSL */
|
||||
|
||||
case HTTP_STATUS_EXPECTATION_FAILED :
|
||||
case HTTP_EXPECTATION_FAILED :
|
||||
/*
|
||||
* Don't try using the Expect: header the next time around...
|
||||
*/
|
||||
@@ -868,10 +861,10 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
DEBUG_puts("2cupsSendRequest: Reconnecting after "
|
||||
"HTTP_EXPECTATION_FAILED.");
|
||||
|
||||
if (httpReconnect2(http, 30000, NULL))
|
||||
if (httpReconnect(http))
|
||||
{
|
||||
DEBUG_puts("1cupsSendRequest: Unable to reconnect.");
|
||||
return (HTTP_STATUS_SERVICE_UNAVAILABLE);
|
||||
return (HTTP_SERVICE_UNAVAILABLE);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -895,7 +888,7 @@ cupsSendRequest(http_t *http, /* I - Connection to server or @code CUPS_HTTP
|
||||
* @since CUPS 1.4/OS X 10.6@
|
||||
*/
|
||||
|
||||
http_status_t /* O - @code HTTP_STATUS_CONTINUE@ if OK or HTTP status on error */
|
||||
http_status_t /* O - @code HTTP_CONTINUE@ if OK or HTTP status on error */
|
||||
cupsWriteRequestData(
|
||||
http_t *http, /* I - Connection to server or @code CUPS_HTTP_DEFAULT@ */
|
||||
const char *buffer, /* I - Bytes to write */
|
||||
@@ -918,9 +911,9 @@ cupsWriteRequestData(
|
||||
|
||||
if ((http = cg->http) == NULL)
|
||||
{
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("No active connection"), 1);
|
||||
DEBUG_puts("1cupsWriteRequestData: Returning HTTP_STATUS_ERROR.");
|
||||
return (HTTP_STATUS_ERROR);
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, _("No active connection"), 1);
|
||||
DEBUG_puts("1cupsWriteRequestData: Returning HTTP_ERROR.");
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -932,9 +925,9 @@ cupsWriteRequestData(
|
||||
|
||||
if (httpWrite2(http, buffer, length) < 0)
|
||||
{
|
||||
DEBUG_puts("1cupsWriteRequestData: Returning HTTP_STATUS_ERROR.");
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(http->error), 0);
|
||||
return (HTTP_STATUS_ERROR);
|
||||
DEBUG_puts("1cupsWriteRequestData: Returning HTTP_ERROR.");
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(http->error), 0);
|
||||
return (HTTP_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -954,7 +947,7 @@ cupsWriteRequestData(
|
||||
http_status_t status; /* Status from _httpUpdate */
|
||||
|
||||
_httpUpdate(http, &status);
|
||||
if (status >= HTTP_STATUS_MULTIPLE_CHOICES)
|
||||
if (status >= HTTP_MULTIPLE_CHOICES)
|
||||
{
|
||||
_cupsSetHTTPError(status);
|
||||
|
||||
@@ -962,7 +955,7 @@ cupsWriteRequestData(
|
||||
{
|
||||
status = httpUpdate(http);
|
||||
}
|
||||
while (status != HTTP_STATUS_ERROR && http->state == HTTP_STATE_POST_RECV);
|
||||
while (status != HTTP_ERROR && http->state == HTTP_POST_RECV);
|
||||
|
||||
httpFlush(http);
|
||||
}
|
||||
@@ -972,8 +965,8 @@ cupsWriteRequestData(
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG_puts("1cupsWriteRequestData: Returning HTTP_STATUS_CONTINUE.");
|
||||
return (HTTP_STATUS_CONTINUE);
|
||||
DEBUG_puts("1cupsWriteRequestData: Returning HTTP_CONTINUE.");
|
||||
return (HTTP_CONTINUE);
|
||||
}
|
||||
|
||||
|
||||
@@ -1000,9 +993,9 @@ _cupsConnect(void)
|
||||
*/
|
||||
|
||||
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...
|
||||
@@ -1019,13 +1012,8 @@ _cupsConnect(void)
|
||||
|
||||
char ch; /* Connection check byte */
|
||||
|
||||
#ifdef WIN32
|
||||
if (recv(cg->http->fd, &ch, 1, MSG_PEEK) < 0 &&
|
||||
WSAGetLastError() != WSAEWOULDBLOCK)
|
||||
#else
|
||||
if (recv(cg->http->fd, &ch, 1, MSG_PEEK | MSG_DONTWAIT) < 0 &&
|
||||
errno != EWOULDBLOCK)
|
||||
#endif /* WIN32 */
|
||||
{
|
||||
/*
|
||||
* Nope, close the connection...
|
||||
@@ -1043,13 +1031,13 @@ _cupsConnect(void)
|
||||
|
||||
if (!cg->http)
|
||||
{
|
||||
if ((cg->http = httpConnect2(cupsServer(), ippPort(), NULL, AF_UNSPEC,
|
||||
cupsEncryption(), 1, 30000, NULL)) == NULL)
|
||||
if ((cg->http = httpConnectEncrypt(cupsServer(), ippPort(),
|
||||
cupsEncryption())) == 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);
|
||||
}
|
||||
}
|
||||
@@ -1122,54 +1110,54 @@ _cupsSetHTTPError(http_status_t status) /* I - HTTP status code */
|
||||
{
|
||||
switch (status)
|
||||
{
|
||||
case HTTP_STATUS_NOT_FOUND :
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, httpStatus(status), 0);
|
||||
case HTTP_NOT_FOUND :
|
||||
_cupsSetError(IPP_NOT_FOUND, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_UNAUTHORIZED :
|
||||
_cupsSetError(IPP_STATUS_ERROR_NOT_AUTHENTICATED, httpStatus(status), 0);
|
||||
case HTTP_UNAUTHORIZED :
|
||||
_cupsSetError(IPP_NOT_AUTHENTICATED, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_CUPS_AUTHORIZATION_CANCELED :
|
||||
_cupsSetError(IPP_STATUS_ERROR_CUPS_AUTHENTICATION_CANCELED, httpStatus(status), 0);
|
||||
case HTTP_AUTHORIZATION_CANCELED :
|
||||
_cupsSetError(IPP_AUTHENTICATION_CANCELED, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_FORBIDDEN :
|
||||
_cupsSetError(IPP_STATUS_ERROR_FORBIDDEN, httpStatus(status), 0);
|
||||
case HTTP_FORBIDDEN :
|
||||
_cupsSetError(IPP_FORBIDDEN, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_BAD_REQUEST :
|
||||
_cupsSetError(IPP_STATUS_ERROR_BAD_REQUEST, httpStatus(status), 0);
|
||||
case HTTP_BAD_REQUEST :
|
||||
_cupsSetError(IPP_BAD_REQUEST, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_REQUEST_TOO_LARGE :
|
||||
_cupsSetError(IPP_STATUS_ERROR_REQUEST_VALUE, httpStatus(status), 0);
|
||||
case HTTP_REQUEST_TOO_LARGE :
|
||||
_cupsSetError(IPP_REQUEST_VALUE, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_NOT_IMPLEMENTED :
|
||||
_cupsSetError(IPP_STATUS_ERROR_OPERATION_NOT_SUPPORTED, httpStatus(status), 0);
|
||||
case HTTP_NOT_IMPLEMENTED :
|
||||
_cupsSetError(IPP_OPERATION_NOT_SUPPORTED, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_NOT_SUPPORTED :
|
||||
_cupsSetError(IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED, httpStatus(status), 0);
|
||||
case HTTP_NOT_SUPPORTED :
|
||||
_cupsSetError(IPP_VERSION_NOT_SUPPORTED, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_UPGRADE_REQUIRED :
|
||||
_cupsSetError(IPP_STATUS_ERROR_CUPS_UPGRADE_REQUIRED, httpStatus(status), 0);
|
||||
case HTTP_UPGRADE_REQUIRED :
|
||||
_cupsSetError(IPP_UPGRADE_REQUIRED, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_CUPS_PKI_ERROR :
|
||||
_cupsSetError(IPP_STATUS_ERROR_CUPS_PKI, httpStatus(status), 0);
|
||||
case HTTP_PKI_ERROR :
|
||||
_cupsSetError(IPP_PKI_ERROR, httpStatus(status), 0);
|
||||
break;
|
||||
|
||||
case HTTP_STATUS_ERROR :
|
||||
_cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0);
|
||||
case HTTP_ERROR :
|
||||
_cupsSetError(IPP_INTERNAL_ERROR, strerror(errno), 0);
|
||||
break;
|
||||
|
||||
default :
|
||||
DEBUG_printf(("4_cupsSetHTTPError: HTTP error %d mapped to "
|
||||
"IPP_STATUS_ERROR_SERVICE_UNAVAILABLE!", status));
|
||||
_cupsSetError(IPP_STATUS_ERROR_SERVICE_UNAVAILABLE, httpStatus(status), 0);
|
||||
"IPP_SERVICE_UNAVAILABLE!", status));
|
||||
_cupsSetError(IPP_SERVICE_UNAVAILABLE, httpStatus(status), 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -362,7 +362,11 @@ _cupsSNMPOpen(int family) /* I - Address family - @code AF_INET@ or @code AF_IN
|
||||
|
||||
val = 1;
|
||||
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, CUPS_SOCAST &val, sizeof(val)))
|
||||
#ifdef WIN32
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char *)&val, sizeof(val)))
|
||||
#else
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val)))
|
||||
#endif /* WIN32 */
|
||||
{
|
||||
DEBUG_printf(("5_cupsSNMPOpen: Returning -1 (%s)", strerror(errno)));
|
||||
|
||||
|
||||
+18
-22
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* snprintf functions for CUPS.
|
||||
*
|
||||
* Copyright 2007-2013 by Apple Inc.
|
||||
* Copyright 2007-2010 by Apple Inc.
|
||||
* Copyright 1997-2007 by Easy Software Products.
|
||||
*
|
||||
* These coded instructions, statements, and computer programs are the
|
||||
@@ -48,7 +48,6 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
char tformat[100], /* Temporary format string for sprintf() */
|
||||
*tptr, /* Pointer into temporary format */
|
||||
temp[1024]; /* Buffer for formatted numbers */
|
||||
size_t templen; /* Length of "temp" */
|
||||
char *s; /* Pointer to string */
|
||||
int slen; /* Length of string */
|
||||
int bytes; /* Total number of bytes needed */
|
||||
@@ -184,21 +183,20 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
break;
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, double));
|
||||
templen = strlen(temp):
|
||||
|
||||
bytes += (int)templen;
|
||||
bytes += (int)strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
if ((bufptr + templen) > bufend)
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(bufptr, temp, templen + 1);
|
||||
bufptr += templen;
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -215,21 +213,20 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
break;
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, int));
|
||||
templen = strlen(temp):
|
||||
|
||||
bytes += (int)templen;
|
||||
bytes += (int)strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
if ((bufptr + templen) > bufend)
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(bufptr, temp, templen + 1);
|
||||
bufptr += templen;
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -239,21 +236,20 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
break;
|
||||
|
||||
sprintf(temp, tformat, va_arg(ap, void *));
|
||||
templen = strlen(temp):
|
||||
|
||||
bytes += (int)templen;
|
||||
bytes += (int)strlen(temp);
|
||||
|
||||
if (bufptr)
|
||||
{
|
||||
if ((bufptr + templen) > bufend)
|
||||
if ((bufptr + strlen(temp)) > bufend)
|
||||
{
|
||||
strlcpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
strncpy(bufptr, temp, (size_t)(bufend - bufptr));
|
||||
bufptr = bufend;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(bufptr, temp, templen + 1);
|
||||
bufptr += templen;
|
||||
strcpy(bufptr, temp);
|
||||
bufptr += strlen(temp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -296,13 +292,13 @@ _cups_vsnprintf(char *buffer, /* O - Output buffer */
|
||||
|
||||
if (sign == '-')
|
||||
{
|
||||
memcpy(bufptr, s, (size_t)slen);
|
||||
strncpy(bufptr, s, (size_t)slen);
|
||||
memset(bufptr + slen, ' ', (size_t)(width - slen));
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(bufptr, ' ', (size_t)(width - slen));
|
||||
memcpy(bufptr + width - slen, s, (size_t)slen);
|
||||
strncpy(bufptr + width - slen, s, (size_t)slen);
|
||||
}
|
||||
|
||||
bufptr += width;
|
||||
|
||||
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