Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |