blob: e9cfa01295714c9daea43ee58cd98b9b66f98d8b [file] [log] [blame]
// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdio.h>
#include <memory>
#include <string>
#include <utility>
#include <base/json/json_writer.h>
#include <base/values.h>
#include <chromeos/dbus/service_constants.h>
#include "debugd/src/helpers/shill_proxy.h"
namespace debugd {
namespace {
base::Value CollectNetworkStatus() {
base::Value result(base::Value::Type::DICTIONARY);
auto proxy = ShillProxy::Create();
if (!proxy)
return result;
// Gets the manager properties from which we can identify the list of device
// and service object paths.
auto manager_properties =
proxy->GetProperties(shill::kFlimflamManagerInterface,
dbus::ObjectPath(shill::kFlimflamServicePath));
if (!manager_properties)
return result;
// Gets the device properties of all listed devices.
auto device_paths =
proxy->GetObjectPaths(*manager_properties, shill::kDevicesProperty);
auto devices = proxy->BuildObjectPropertiesMap(
shill::kFlimflamDeviceInterface, device_paths);
// If a list of IP config object paths is found in the properties of a
// device, expands the IP config object paths into IP config properties.
for (const auto& device_path : device_paths) {
base::Value* device_properties = devices.FindDictPath(device_path.value());
CHECK(device_properties != nullptr);
auto ipconfig_paths =
proxy->GetObjectPaths(*device_properties, shill::kIPConfigsProperty);
auto ipconfigs = proxy->BuildObjectPropertiesMap(
shill::kFlimflamIPConfigInterface, ipconfig_paths);
device_properties->SetKey(shill::kIPConfigsProperty, std::move(ipconfigs));
}
// Gets the device properties of all listed services.
auto service_paths =
proxy->GetObjectPaths(*manager_properties, shill::kServicesProperty);
auto services = proxy->BuildObjectPropertiesMap(
shill::kFlimflamServiceInterface, service_paths);
result.SetKey("devices", std::move(devices));
result.SetKey("services", std::move(services));
return result;
}
} // namespace
} // namespace debugd
int main() {
base::Value result = debugd::CollectNetworkStatus();
std::string json;
base::JSONWriter::WriteWithOptions(
result, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
printf("%s\n", json.c_str());
return 0;
}