Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: chromeos_network.cc

Issue 6648007: Libcros changes for issue_12743: Add async RequestUpdateCheck call. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/cros.git@master
Patch Set: Used scoped_ptr in callback data. Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos_network.h" // NOLINT 5 #include "chromeos_network.h" // NOLINT
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <list> 9 #include <list>
10 #include <set> 10 #include <set>
(...skipping 1234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 delete list; 1245 delete list;
1246 } 1246 }
1247 1247
1248 ////////////////////////////////////////////////////////////////////////////// 1248 //////////////////////////////////////////////////////////////////////////////
1249 // Flimflam asynchronous interface code 1249 // Flimflam asynchronous interface code
1250 1250
1251 namespace { 1251 namespace {
1252 1252
1253 struct FlimflamCallbackData { 1253 struct FlimflamCallbackData {
1254 FlimflamCallbackData(const char* interface, 1254 FlimflamCallbackData(const char* interface,
1255 const char* service_path) { 1255 const char* service_path) :
petkov 2011/03/09 00:32:09 style says the colon should be on the next line, i
1256 DCHECK(interface); 1256 proxy(new dbus::Proxy(dbus::GetSystemBusConnection(),
1257 interface_name = std::string(interface);
1258 proxy = new dbus::Proxy(dbus::GetSystemBusConnection(),
1259 kFlimflamServiceName, 1257 kFlimflamServiceName,
1260 service_path, 1258 service_path,
1261 interface); 1259 interface)),
1262 } 1260 interface_name(interface) {}
1263 virtual ~FlimflamCallbackData() { 1261 scoped_ptr<dbus::Proxy> proxy;
1264 delete proxy;
1265 }
1266 // Owned by the callback, deleteted in the destructor:
1267 dbus::Proxy* proxy;
1268 std::string interface_name; // Store for error reporting. 1262 std::string interface_name; // Store for error reporting.
1269 }; 1263 };
1270 1264
1271 // DBus will always call the Delete function passed to it by 1265 // DBus will always call the Delete function passed to it by
1272 // dbus_g_proxy_begin_call, whether DBus calls the callback or not. 1266 // dbus_g_proxy_begin_call, whether DBus calls the callback or not.
1273 void DeleteFlimflamCallbackData(void* user_data) { 1267 void DeleteFlimflamCallbackData(void* user_data) {
1274 FlimflamCallbackData* cb_data = static_cast<FlimflamCallbackData*>(user_data); 1268 FlimflamCallbackData* cb_data = static_cast<FlimflamCallbackData*>(user_data);
1275 delete cb_data; // virtual destructor. 1269 delete cb_data; // virtual destructor.
1276 } 1270 }
1277 1271
(...skipping 14 matching lines...) Expand all
1292 } 1286 }
1293 1287
1294 struct GetPropertiesCallbackData : public FlimflamCallbackData { 1288 struct GetPropertiesCallbackData : public FlimflamCallbackData {
1295 GetPropertiesCallbackData(const char* interface, 1289 GetPropertiesCallbackData(const char* interface,
1296 const char* service_path, 1290 const char* service_path,
1297 const char* cb_path, 1291 const char* cb_path,
1298 NetworkPropertiesCallback cb, 1292 NetworkPropertiesCallback cb,
1299 void* obj) : 1293 void* obj) :
1300 FlimflamCallbackData(interface, service_path), 1294 FlimflamCallbackData(interface, service_path),
1301 callback(cb), 1295 callback(cb),
1302 object(obj) { 1296 object(obj),
1303 callback_path = NewStringCopy(cb_path); 1297 callback_path(cb_path) {}
1304 }
1305 virtual ~GetPropertiesCallbackData() {
1306 delete callback_path;
1307 }
1308
1309 // Owned by the caller (i.e. Chrome), do not destroy them: 1298 // Owned by the caller (i.e. Chrome), do not destroy them:
1310 NetworkPropertiesCallback callback; 1299 NetworkPropertiesCallback callback;
1311 void* object; 1300 void* object;
1312 // Owned by the callback, deleteted in the destructor: 1301 // Owned by the callback, deleteted in the destructor:
1313 const char* callback_path; 1302 std::string callback_path;
1314 }; 1303 };
1315 1304
1316 void GetPropertiesNotify(DBusGProxy* gproxy, 1305 void GetPropertiesNotify(DBusGProxy* gproxy,
1317 DBusGProxyCall* call_id, 1306 DBusGProxyCall* call_id,
1318 void* user_data) { 1307 void* user_data) {
1319 GetPropertiesCallbackData* cb_data = 1308 GetPropertiesCallbackData* cb_data =
1320 static_cast<GetPropertiesCallbackData*>(user_data); 1309 static_cast<GetPropertiesCallbackData*>(user_data);
1321 DCHECK(cb_data); 1310 DCHECK(cb_data);
1322 glib::ScopedError error; 1311 glib::ScopedError error;
1323 glib::ScopedHashTable properties; 1312 glib::ScopedHashTable properties;
1324 if (!::dbus_g_proxy_end_call( 1313 if (!::dbus_g_proxy_end_call(
1325 gproxy, 1314 gproxy,
1326 call_id, 1315 call_id,
1327 &Resetter(&error).lvalue(), 1316 &Resetter(&error).lvalue(),
1328 ::dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), 1317 ::dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
1329 &Resetter(&properties).lvalue(), 1318 &Resetter(&properties).lvalue(),
1330 G_TYPE_INVALID)) { 1319 G_TYPE_INVALID)) {
1331 LOG(WARNING) << "GetPropertiesNotify for path: '" 1320 LOG(WARNING) << "GetPropertiesNotify for path: '"
1332 << cb_data->callback_path << "' error: " 1321 << cb_data->callback_path << "' error: "
1333 << (error->message ? error->message : "Unknown Error."); 1322 << (error->message ? error->message : "Unknown Error.");
1334 cb_data->callback(cb_data->object, cb_data->callback_path, NULL); 1323 cb_data->callback(cb_data->object,
1324 cb_data->callback_path.c_str(),
1325 NULL);
1335 } else { 1326 } else {
1336 scoped_ptr<Value> value(ConvertGHashTable(properties.get())); 1327 scoped_ptr<Value> value(ConvertGHashTable(properties.get()));
1337 cb_data->callback(cb_data->object, cb_data->callback_path, value.get()); 1328 cb_data->callback(cb_data->object,
1329 cb_data->callback_path.c_str(),
1330 value.get());
1338 } 1331 }
1339 } 1332 }
1340 1333
1341 void GetPropertiesAsync(const char* interface, 1334 void GetPropertiesAsync(const char* interface,
1342 const char* service_path, 1335 const char* service_path,
1343 NetworkPropertiesCallback callback, 1336 NetworkPropertiesCallback callback,
1344 void* object) { 1337 void* object) {
1345 DCHECK(interface && service_path && callback); 1338 DCHECK(interface && service_path && callback);
1346 GetPropertiesCallbackData* cb_data = new GetPropertiesCallbackData( 1339 GetPropertiesCallbackData* cb_data = new GetPropertiesCallbackData(
1347 interface, service_path, service_path, callback, object); 1340 interface, service_path, service_path, callback, object);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 if (!::dbus_g_proxy_end_call( 1388 if (!::dbus_g_proxy_end_call(
1396 gproxy, 1389 gproxy,
1397 call_id, 1390 call_id,
1398 &Resetter(&error).lvalue(), 1391 &Resetter(&error).lvalue(),
1399 DBUS_TYPE_G_OBJECT_PATH, 1392 DBUS_TYPE_G_OBJECT_PATH,
1400 &service_path, 1393 &service_path,
1401 G_TYPE_INVALID)) { 1394 G_TYPE_INVALID)) {
1402 LOG(WARNING) << "GetWifiNotify for path: '" 1395 LOG(WARNING) << "GetWifiNotify for path: '"
1403 << cb_data->callback_path << "' error: " 1396 << cb_data->callback_path << "' error: "
1404 << (error->message ? error->message : "Unknown Error."); 1397 << (error->message ? error->message : "Unknown Error.");
1405 cb_data->callback(cb_data->object, cb_data->callback_path, NULL); 1398 cb_data->callback(cb_data->object, cb_data->callback_path.c_str(), NULL);
1406 } else { 1399 } else {
1407 // Now request the properties for the service. 1400 // Now request the properties for the service.
1408 GetPropertiesAsync(kFlimflamServiceInterface, 1401 GetPropertiesAsync(kFlimflamServiceInterface,
1409 service_path, 1402 service_path,
1410 cb_data->callback, 1403 cb_data->callback,
1411 cb_data->object); 1404 cb_data->object);
1412 } 1405 }
1413 } 1406 }
1414 1407
1415 struct NetworkActionCallbackData : public FlimflamCallbackData { 1408 struct NetworkActionCallbackData : public FlimflamCallbackData {
1416 NetworkActionCallbackData(const char* interface, 1409 NetworkActionCallbackData(const char* interface,
1417 const char* service_path, 1410 const char* service_path,
1418 const char* cb_path, 1411 const char* cb_path,
1419 NetworkActionCallback cb, 1412 NetworkActionCallback cb,
1420 void* obj) : 1413 void* obj) :
1421 FlimflamCallbackData(interface, service_path), 1414 FlimflamCallbackData(interface, service_path),
1422 callback(cb), 1415 callback(cb),
1423 object(obj) { 1416 object(obj),
1424 callback_path = NewStringCopy(cb_path); 1417 callback_path(cb_path) {}
1425 }
1426 virtual ~NetworkActionCallbackData() {
1427 delete callback_path;
1428 }
1429
1430 // Owned by the caller (i.e. Chrome), do not destroy them: 1418 // Owned by the caller (i.e. Chrome), do not destroy them:
1431 NetworkActionCallback callback; 1419 NetworkActionCallback callback;
1432 void* object; 1420 void* object;
1433 // Owned by the callback, deleteted in the destructor: 1421 // Owned by the callback, deleteted in the destructor:
1434 const char* callback_path; 1422 std::string callback_path;
1435 }; 1423 };
1436 1424
1437 void NetworkServiceConnectNotify(DBusGProxy* gproxy, 1425 void NetworkServiceConnectNotify(DBusGProxy* gproxy,
1438 DBusGProxyCall* call_id, 1426 DBusGProxyCall* call_id,
1439 void* user_data) { 1427 void* user_data) {
1440 NetworkActionCallbackData* cb_data = 1428 NetworkActionCallbackData* cb_data =
1441 static_cast<NetworkActionCallbackData*>(user_data); 1429 static_cast<NetworkActionCallbackData*>(user_data);
1442 DCHECK(cb_data); 1430 DCHECK(cb_data);
1443 glib::ScopedError error; 1431 glib::ScopedError error;
1444 if (!::dbus_g_proxy_end_call( 1432 if (!::dbus_g_proxy_end_call(
1445 gproxy, 1433 gproxy,
1446 call_id, 1434 call_id,
1447 &Resetter(&error).lvalue(), 1435 &Resetter(&error).lvalue(),
1448 G_TYPE_INVALID)) { 1436 G_TYPE_INVALID)) {
1449 NetworkMethodErrorType etype; 1437 NetworkMethodErrorType etype;
1450 if (error->domain == DBUS_GERROR && 1438 if (error->domain == DBUS_GERROR &&
1451 error->code == DBUS_GERROR_REMOTE_EXCEPTION) { 1439 error->code == DBUS_GERROR_REMOTE_EXCEPTION) {
1452 etype = NETWORK_METHOD_ERROR_REMOTE; 1440 etype = NETWORK_METHOD_ERROR_REMOTE;
1453 } else { 1441 } else {
1454 LOG(WARNING) << "NetworkServiceConnectNotify for path: '" 1442 LOG(WARNING) << "NetworkServiceConnectNotify for path: '"
1455 << cb_data->callback_path << "' error: " 1443 << cb_data->callback_path << "' error: "
1456 << (error->message ? error->message : "Unknown Error."); 1444 << (error->message ? error->message : "Unknown Error.");
1457 etype = NETWORK_METHOD_ERROR_LOCAL; 1445 etype = NETWORK_METHOD_ERROR_LOCAL;
1458 } 1446 }
1459 cb_data->callback(cb_data->object, cb_data->callback_path, 1447 cb_data->callback(cb_data->object, cb_data->callback_path.c_str(),
1460 etype, error->message); 1448 etype, error->message);
1461 } else { 1449 } else {
1462 cb_data->callback(cb_data->object, cb_data->callback_path, 1450 cb_data->callback(cb_data->object, cb_data->callback_path.c_str(),
1463 NETWORK_METHOD_ERROR_NONE, NULL); 1451 NETWORK_METHOD_ERROR_NONE, NULL);
1464 } 1452 }
1465 } 1453 }
1466 1454
1467 void NetworkServiceConnectAsync( 1455 void NetworkServiceConnectAsync(
1468 const char* service_path, 1456 const char* service_path,
1469 NetworkActionCallback callback, 1457 NetworkActionCallback callback,
1470 void* object) { 1458 void* object) {
1471 DCHECK(service_path && callback); 1459 DCHECK(service_path && callback);
1472 NetworkActionCallbackData* cb_data = new NetworkActionCallbackData( 1460 NetworkActionCallbackData* cb_data = new NetworkActionCallbackData(
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1670 new FlimflamCallbackData(kFlimflamServiceInterface, service_path); 1658 new FlimflamCallbackData(kFlimflamServiceInterface, service_path);
1671 1659
1672 // DEPRECATED 1660 // DEPRECATED
1673 // Backwards-compatibility for "CertPath=SETTINGS:key_id=1,cert_id=2,..." 1661 // Backwards-compatibility for "CertPath=SETTINGS:key_id=1,cert_id=2,..."
1674 if (strcmp(property, "CertPath") == 0) { 1662 if (strcmp(property, "CertPath") == 0) {
1675 std::string certpath; 1663 std::string certpath;
1676 if (setting->GetAsString(&certpath)) { 1664 if (setting->GetAsString(&certpath)) {
1677 // Synchronous call for backwards compatibility. 1665 // Synchronous call for backwards compatibility.
1678 // TODO(njw): remove once CertPath is deprecated in favor of 1666 // TODO(njw): remove once CertPath is deprecated in favor of
1679 // explicit EAP.* properties. 1667 // explicit EAP.* properties.
1680 set_certpath_properties(certpath.c_str(), cb_data->proxy); 1668 set_certpath_properties(certpath.c_str(), cb_data->proxy.get());
1681 } 1669 }
1682 delete cb_data; 1670 delete cb_data;
1683 return; 1671 return;
1684 } 1672 }
1685 1673
1686 // Start the DBus call. FlimflamNotifyHandleError will get called when 1674 // Start the DBus call. FlimflamNotifyHandleError will get called when
1687 // it completes and log any errors. 1675 // it completes and log any errors.
1688 scoped_ptr<glib::Value> gsetting(ConvertToGlibValue(setting)); 1676 scoped_ptr<glib::Value> gsetting(ConvertToGlibValue(setting));
1689 DBusGProxyCall* call_id = ::dbus_g_proxy_begin_call( 1677 DBusGProxyCall* call_id = ::dbus_g_proxy_begin_call(
1690 cb_data->proxy->gproxy(), 1678 cb_data->proxy->gproxy(),
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1861 } 1849 }
1862 DCHECK(properties_array); 1850 DCHECK(properties_array);
1863 1851
1864 CellularDataPlanList *data_plan_list = 1852 CellularDataPlanList *data_plan_list =
1865 ParseCellularDataPlanList(properties_array); 1853 ParseCellularDataPlanList(properties_array);
1866 g_ptr_array_unref(properties_array); 1854 g_ptr_array_unref(properties_array);
1867 return data_plan_list; 1855 return data_plan_list;
1868 } 1856 }
1869 1857
1870 } // namespace chromeos 1858 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos_cros_api.h ('k') | chromeos_update_engine.h » ('j') | chromeos_update_engine.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698