| // Copyright 2020 The Chromium OS 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 "lorgnette/sane_client.h" |
| |
| #include <chromeos/dbus/service_constants.h> |
| |
| #include "lorgnette/dbus_adaptors/org.chromium.lorgnette.Manager.h" |
| #include "lorgnette/ippusb_device.h" |
| |
| namespace lorgnette { |
| |
| std::unique_ptr<SaneDevice> SaneClient::ConnectToDevice( |
| brillo::ErrorPtr* error, const std::string& device_name) { |
| LOG(INFO) << "Connecting to device: " << device_name; |
| std::string real_device = device_name; |
| if (device_name.substr(0, 7) == "ippusb:") { |
| LOG(INFO) << "Finding real backend for device: " << device_name; |
| base::Optional<std::string> backend = BackendForDevice(device_name); |
| if (!backend.has_value()) { |
| brillo::Error::AddToPrintf( |
| error, FROM_HERE, brillo::errors::dbus::kDomain, kManagerServiceError, |
| "Didn't get a corrected backend string for ippusb device %s. Cannot " |
| "contact scanner.", |
| device_name.c_str()); |
| return nullptr; |
| } |
| |
| real_device = backend.value(); |
| LOG(INFO) << "Updated backend for device: " << real_device; |
| } |
| |
| return ConnectToDeviceInternal(error, real_device); |
| } |
| |
| } // namespace lorgnette |