1 //
2 // Copyright (C) 2015 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 #include "shill/dbus/chromeos_mm1_modem_simple_proxy.h"
18
19 #include <memory>
20
21 #include "shill/cellular/cellular_error.h"
22 #include "shill/logging.h"
23
24 using std::string;
25
26 namespace shill {
27
28 namespace Logging {
29 static auto kModuleLogScope = ScopeLogger::kDBus;
ObjectID(const dbus::ObjectPath * p)30 static string ObjectID(const dbus::ObjectPath* p) { return p->value(); }
31 } // namespace Logging
32
33 namespace mm1 {
34
ChromeosModemSimpleProxy(const scoped_refptr<dbus::Bus> & bus,const string & path,const string & service)35 ChromeosModemSimpleProxy::ChromeosModemSimpleProxy(
36 const scoped_refptr<dbus::Bus>& bus,
37 const string& path,
38 const string& service)
39 : proxy_(
40 new org::freedesktop::ModemManager1::Modem::SimpleProxy(
41 bus, service, dbus::ObjectPath(path))) {}
42
~ChromeosModemSimpleProxy()43 ChromeosModemSimpleProxy::~ChromeosModemSimpleProxy() {}
44
Connect(const KeyValueStore & properties,Error * error,const RpcIdentifierCallback & callback,int timeout)45 void ChromeosModemSimpleProxy::Connect(
46 const KeyValueStore& properties,
47 Error* error,
48 const RpcIdentifierCallback& callback,
49 int timeout) {
50 SLOG(&proxy_->GetObjectPath(), 2) << __func__;
51 brillo::VariantDictionary properties_dict;
52 KeyValueStore::ConvertToVariantDictionary(properties, &properties_dict);
53 proxy_->ConnectAsync(properties_dict,
54 base::Bind(&ChromeosModemSimpleProxy::OnConnectSuccess,
55 weak_factory_.GetWeakPtr(),
56 callback),
57 base::Bind(&ChromeosModemSimpleProxy::OnConnectFailure,
58 weak_factory_.GetWeakPtr(),
59 callback));
60 }
61
Disconnect(const string & bearer,Error * error,const ResultCallback & callback,int timeout)62 void ChromeosModemSimpleProxy::Disconnect(const string& bearer,
63 Error* error,
64 const ResultCallback& callback,
65 int timeout) {
66 SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << bearer;
67 proxy_->DisconnectAsync(
68 dbus::ObjectPath(bearer),
69 base::Bind(&ChromeosModemSimpleProxy::OnDisconnectSuccess,
70 weak_factory_.GetWeakPtr(),
71 callback),
72 base::Bind(&ChromeosModemSimpleProxy::OnDisconnectFailure,
73 weak_factory_.GetWeakPtr(),
74 callback));
75 }
76
GetStatus(Error * error,const KeyValueStoreCallback & callback,int timeout)77 void ChromeosModemSimpleProxy::GetStatus(Error* error,
78 const KeyValueStoreCallback& callback,
79 int timeout) {
80 SLOG(&proxy_->GetObjectPath(), 2) << __func__;
81 proxy_->GetStatusAsync(
82 base::Bind(&ChromeosModemSimpleProxy::OnGetStatusSuccess,
83 weak_factory_.GetWeakPtr(),
84 callback),
85 base::Bind(&ChromeosModemSimpleProxy::OnGetStatusFailure,
86 weak_factory_.GetWeakPtr(),
87 callback));
88 }
89
OnConnectSuccess(const RpcIdentifierCallback & callback,const dbus::ObjectPath & path)90 void ChromeosModemSimpleProxy::OnConnectSuccess(
91 const RpcIdentifierCallback& callback, const dbus::ObjectPath& path) {
92 SLOG(&proxy_->GetObjectPath(), 2) << __func__ << ": " << path.value();
93 callback.Run(path.value(), Error());
94 }
95
OnConnectFailure(const RpcIdentifierCallback & callback,brillo::Error * dbus_error)96 void ChromeosModemSimpleProxy::OnConnectFailure(
97 const RpcIdentifierCallback& callback, brillo::Error* dbus_error) {
98 SLOG(&proxy_->GetObjectPath(), 2) << __func__;
99 Error error;
100 CellularError::FromMM1ChromeosDBusError(dbus_error, &error);
101 callback.Run("", error);
102 }
103
OnDisconnectSuccess(const ResultCallback & callback)104 void ChromeosModemSimpleProxy::OnDisconnectSuccess(
105 const ResultCallback& callback) {
106 SLOG(&proxy_->GetObjectPath(), 2) << __func__;
107 callback.Run(Error());
108 }
109
OnDisconnectFailure(const ResultCallback & callback,brillo::Error * dbus_error)110 void ChromeosModemSimpleProxy::OnDisconnectFailure(
111 const ResultCallback& callback, brillo::Error* dbus_error) {
112 SLOG(&proxy_->GetObjectPath(), 2) << __func__;
113 Error error;
114 CellularError::FromMM1ChromeosDBusError(dbus_error, &error);
115 callback.Run(error);
116 }
117
OnGetStatusSuccess(const KeyValueStoreCallback & callback,const brillo::VariantDictionary & status)118 void ChromeosModemSimpleProxy::OnGetStatusSuccess(
119 const KeyValueStoreCallback& callback,
120 const brillo::VariantDictionary& status) {
121 SLOG(&proxy_->GetObjectPath(), 2) << __func__;
122 KeyValueStore status_store;
123 KeyValueStore::ConvertFromVariantDictionary(status, &status_store);
124 callback.Run(status_store, Error());
125 }
126
OnGetStatusFailure(const KeyValueStoreCallback & callback,brillo::Error * dbus_error)127 void ChromeosModemSimpleProxy::OnGetStatusFailure(
128 const KeyValueStoreCallback& callback, brillo::Error* dbus_error) {
129 SLOG(&proxy_->GetObjectPath(), 2) << __func__;
130 Error error;
131 CellularError::FromMM1ChromeosDBusError(dbus_error, &error);
132 callback.Run(KeyValueStore(), error);
133 }
134
135 } // namespace mm1
136 } // namespace shill
137