• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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