| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/services/cups_proxy/ipp_attribute_validator.h" |
| |
| #include <cups/ipp.h> |
| |
| #include <map> |
| #include <string> |
| |
| #include "chrome/services/cups_ipp_parser/public/mojom/ipp_parser.mojom.h" |
| |
| namespace cups_proxy { |
| |
| namespace { |
| |
| // represents a type of a single attribute |
| struct AttributeDefinition { |
| bool is_a_set; |
| cups_ipp_parser::mojom::ValueType type; |
| }; |
| |
| // definitions of all known attributes grouped by operations |
| std::map<ipp_op_t, std::map<std::string, AttributeDefinition>> |
| attributesDefinitions = { |
| {IPP_OP_CUPS_GET_PPD, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_CUPS_GET_PRINTERS, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"limit", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"printer-location", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requested-attributes", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"charset-configured", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"charset-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"color-supported", |
| {false, cups_ipp_parser::mojom::ValueType::BOOLEAN}}, |
| {"compression-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"copies-default", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"document-format-default", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-format-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"finishings-default", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"finishings-supported", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"generated-natural-language-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"ipp-versions-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"media-default", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"media-ready", {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"media-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"natural-language-configured", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"operations-supported", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"orientation-requested-default", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"orientation-requested-supported", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"output-bin-default", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"output-bin-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"pdl-override-supported", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"print-quality-default", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"print-quality-supported", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"printer-device-id", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-info", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-location", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-make-and-model", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"sides-default", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"sides-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"uri-authentication-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"uri-security-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_CANCEL_JOB, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_CREATE_JOB, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-name", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"ipp-attribute-fidelity", |
| {false, cups_ipp_parser::mojom::ValueType::BOOLEAN}}, |
| {"copies", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"finishings", {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"media", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"orientation-requested", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"output-bin", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"print-quality", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"sides", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-state", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-state-reasons", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_GET_JOB_ATTRIBUTES, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requested-attributes", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"copies", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"finishings", {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-name", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-originating-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-printer-up-time", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-state", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-state-reasons", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"media", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"orientation-requested", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"output-bin", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"print-quality", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"sides", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"time-at-completed", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"time-at-creation", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"time-at-processing", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| }}, |
| {IPP_OP_GET_JOBS, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"limit", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"requested-attributes", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"which-jobs", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"my-jobs", {false, cups_ipp_parser::mojom::ValueType::BOOLEAN}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"copies", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"finishings", {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-name", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-originating-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-printer-up-time", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-state", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-state-reasons", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"media", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"orientation-requested", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"output-bin", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"print-quality", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"sides", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"time-at-completed", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"time-at-creation", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"time-at-processing", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| }}, |
| {IPP_OP_GET_PRINTER_ATTRIBUTES, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requested-attributes", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-format", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"charset-configured", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"charset-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"color-supported", |
| {false, cups_ipp_parser::mojom::ValueType::BOOLEAN}}, |
| {"compression-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"copies-default", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"document-format-default", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-format-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"finishings-default", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"finishings-supported", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"generated-natural-language-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"ipp-versions-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"media-default", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"media-ready", {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"media-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"natural-language-configured", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"operations-supported", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"orientation-requested-default", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"orientation-requested-supported", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"output-bin-default", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"output-bin-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"pages-per-minute", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"pages-per-minute-color", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"pdl-override-supported", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"print-quality-default", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"print-quality-supported", |
| {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"printer-alert", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-alert-description", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-device-id", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-info", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-is-accepting-jobs", |
| {false, cups_ipp_parser::mojom::ValueType::BOOLEAN}}, |
| {"printer-location", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-make-and-model", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-more-info", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-state", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"printer-state-reasons", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-up-time", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"printer-uri-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"queued-job-count", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"sides-default", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"sides-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"uri-authentication-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"uri-security-supported", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_HOLD_JOB, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_PAUSE_PRINTER, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_PRINT_JOB, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-name", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"ipp-attribute-fidelity", |
| {false, cups_ipp_parser::mojom::ValueType::BOOLEAN}}, |
| {"document-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"compression", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-format", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"copies", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"finishings", {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"media", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"orientation-requested", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"output-bin", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"print-quality", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"sides", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-state", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-state-reasons", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_PRINT_URI, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-name", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"ipp-attribute-fidelity", |
| {false, cups_ipp_parser::mojom::ValueType::BOOLEAN}}, |
| {"document-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"compression", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-format", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"copies", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"finishings", {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"media", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"orientation-requested", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"output-bin", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"print-quality", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"sides", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-state", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-state-reasons", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_RELEASE_JOB, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_RESUME_PRINTER, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_SEND_DOCUMENT, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"compression", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-format", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-state", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-state-reasons", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_SEND_URI, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"compression", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-format", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-id", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-uri", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-state", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"job-state-reasons", |
| {true, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}, |
| {IPP_OP_VALIDATE_JOB, |
| { |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"printer-uri", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"requesting-user-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"job-name", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"ipp-attribute-fidelity", |
| {false, cups_ipp_parser::mojom::ValueType::BOOLEAN}}, |
| {"document-name", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"compression", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"document-format", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"copies", {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"finishings", {true, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"media", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"orientation-requested", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"output-bin", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"print-quality", |
| {false, cups_ipp_parser::mojom::ValueType::INTEGER}}, |
| {"sides", {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-charset", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"attributes-natural-language", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| {"status-message", |
| {false, cups_ipp_parser::mojom::ValueType::STRING}}, |
| }}}; |
| |
| } // namespace |
| |
| bool ValidateAttribute(ipp_op_t ipp_oper_id, |
| const std::string& name, |
| cups_ipp_parser::mojom::ValueType type, |
| size_t values_count) { |
| auto it_oper = attributesDefinitions.find(ipp_oper_id); |
| if (it_oper == attributesDefinitions.end()) { |
| return false; |
| } |
| auto it_attr = it_oper->second.find(name); |
| if (it_attr == it_oper->second.end()) { |
| return false; |
| } |
| if (it_attr->second.type != type) { |
| return false; |
| } |
| if (values_count == 0) { |
| return false; |
| } |
| if (!it_attr->second.is_a_set && values_count > 1) { |
| return false; |
| } |
| return true; |
| } |
| |
| } // namespace cups_proxy |