1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2015 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 16f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 17f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/dbus/chromeos_modem_simple_proxy.h" 18f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 19f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include <memory> 20f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 21f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include <base/bind.h> 22f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 23f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/cellular/cellular_error.h" 24f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/error.h" 25f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu#include "shill/logging.h" 26f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 27f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiuusing std::string; 28f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 29f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiunamespace shill { 30f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 31f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiunamespace Logging { 32f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiustatic auto kModuleLogScope = ScopeLogger::kDBus; 33f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiustatic string ObjectID(const dbus::ObjectPath* p) { return p->value(); } 34f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu} 35f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 36f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter QiuChromeosModemSimpleProxy::ChromeosModemSimpleProxy( 37f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu const scoped_refptr<dbus::Bus>& bus, 38f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu const string& path, 39f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu const string& service) 40f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu : proxy_( 41f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu new org::freedesktop::ModemManager::Modem::SimpleProxy( 42f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu bus, service, dbus::ObjectPath(path))) {} 43f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 44f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter QiuChromeosModemSimpleProxy::~ChromeosModemSimpleProxy() {} 45f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 46f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiuvoid ChromeosModemSimpleProxy::GetModemStatus( 47f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu Error* error, const KeyValueStoreCallback& callback, int timeout) { 48f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu SLOG(&proxy_->GetObjectPath(), 2) << __func__; 49f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu proxy_->GetStatusAsync( 50f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu base::Bind(&ChromeosModemSimpleProxy::OnGetStatusSuccess, 51f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu weak_factory_.GetWeakPtr(), 52f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu callback), 53f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu base::Bind(&ChromeosModemSimpleProxy::OnGetStatusFailure, 54f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu weak_factory_.GetWeakPtr(), 55f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu callback)); 56f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu} 57f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 58f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiuvoid ChromeosModemSimpleProxy::Connect(const KeyValueStore& properties, 59f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu Error* error, 60f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu const ResultCallback& callback, 61f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu int timeout) { 62f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu SLOG(&proxy_->GetObjectPath(), 2) << __func__; 6303e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko brillo::VariantDictionary properties_dict; 64f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu KeyValueStore::ConvertToVariantDictionary(properties, &properties_dict); 65f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu proxy_->ConnectAsync( 66f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu properties_dict, 67f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu base::Bind(&ChromeosModemSimpleProxy::OnConnectSuccess, 68f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu weak_factory_.GetWeakPtr(), 69f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu callback), 70f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu base::Bind(&ChromeosModemSimpleProxy::OnConnectFailure, 71f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu weak_factory_.GetWeakPtr(), 72f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu callback)); 73f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu} 74f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 75f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiuvoid ChromeosModemSimpleProxy::OnGetStatusSuccess( 76f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu const KeyValueStoreCallback& callback, 7703e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko const brillo::VariantDictionary& props) { 78f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu SLOG(&proxy_->GetObjectPath(), 2) << __func__; 79f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu KeyValueStore props_store; 80f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu KeyValueStore::ConvertFromVariantDictionary(props, &props_store); 81f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu callback.Run(props_store, Error()); 82f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu} 83f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 84f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiuvoid ChromeosModemSimpleProxy::OnGetStatusFailure( 8503e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko const KeyValueStoreCallback& callback, brillo::Error* dbus_error) { 86f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu SLOG(&proxy_->GetObjectPath(), 2) << __func__; 87f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu Error error; 88f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu CellularError::FromChromeosDBusError(dbus_error, &error); 89f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu callback.Run(KeyValueStore(), error); 90f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu} 91f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 92f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiuvoid ChromeosModemSimpleProxy::OnConnectSuccess( 93f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu const ResultCallback& callback) { 94f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu SLOG(&proxy_->GetObjectPath(), 2) << __func__; 95f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu callback.Run(Error()); 96f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu} 97f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 98f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiuvoid ChromeosModemSimpleProxy::OnConnectFailure( 9903e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko const ResultCallback& callback, brillo::Error* dbus_error) { 100f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu SLOG(&proxy_->GetObjectPath(), 2) << __func__; 101f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu Error error; 102f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu CellularError::FromChromeosDBusError(dbus_error, &error); 103f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu callback.Run(error); 104f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu} 105f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu 106f576f1b61ac8514adffd5ef6d44f8b0aa00ab979Peter Qiu} // namespace shill 107