blob: bfd455583a88e4ffd8f55e0b52970213bdc4e175 [file] [log] [blame]
// 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