blob: c7deb452a9ef2298979ce481aadd47be1b25203c [file] [log] [blame]
// Copyright 2016 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.
#ifndef PRINTING_BACKEND_CUPS_CONNECTION_H_
#define PRINTING_BACKEND_CUPS_CONNECTION_H_
#include <cups/cups.h>
#include <memory>
#include <string>
#include <vector>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "printing/backend/cups_deleters.h"
#include "printing/backend/cups_jobs.h"
#include "printing/backend/cups_printer.h"
#include "printing/printing_export.h"
#include "url/gurl.h"
namespace printing {
// Represents the status of a printer queue.
struct PRINTING_EXPORT QueueStatus {
QueueStatus();
QueueStatus(const QueueStatus& other);
~QueueStatus();
PrinterStatus printer_status;
std::vector<CupsJob> jobs;
};
// Represents a connection to a CUPS server.
class PRINTING_EXPORT CupsConnection {
public:
CupsConnection(const GURL& print_server_url,
http_encryption_t encryption,
bool blocking);
CupsConnection(CupsConnection&& connection);
~CupsConnection();
// Returns a vector of all the printers configure on the CUPS server.
std::vector<CupsPrinter> GetDests();
// Returns a printer for |printer_name| from the connected server.
std::unique_ptr<CupsPrinter> GetPrinter(const std::string& printer_name);
// Queries CUPS for printer queue status for |printer_ids|. Populates |jobs|
// with said information with one QueueStatus per printer_id. Returns true if
// all the queries were successful. In the event of failure, |jobs| will be
// unchanged.
bool GetJobs(const std::vector<std::string>& printer_ids,
std::vector<QueueStatus>* jobs);
std::string server_name() const;
int last_error() const;
private:
// lazily initialize http connection
bool Connect();
GURL print_server_url_;
http_encryption_t cups_encryption_;
bool blocking_;
std::unique_ptr<http_t, HttpDeleter> cups_http_;
DISALLOW_COPY_AND_ASSIGN(CupsConnection);
};
} // namespace printing
#endif // PRINTING_BACKEND_CUPS_CONNECTION_H_