| // 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_ |