1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROMEOS_DBUS_DEBUG_DAEMON_CLIENT_H_ 6 #define CHROMEOS_DBUS_DEBUG_DAEMON_CLIENT_H_ 7 8 #include "base/callback.h" 9 #include "base/platform_file.h" 10 #include "base/memory/ref_counted_memory.h" 11 #include "chromeos/chromeos_export.h" 12 #include "chromeos/dbus/dbus_client_implementation_type.h" 13 14 #include <map> 15 16 namespace dbus { 17 class Bus; 18 } // namespace dbus 19 20 namespace metrics { 21 class PerfDataProto; 22 } 23 24 namespace chromeos { 25 26 // DebugDaemonClient is used to communicate with the debug daemon. 27 class CHROMEOS_EXPORT DebugDaemonClient { 28 public: 29 virtual ~DebugDaemonClient(); 30 31 // Called once GetDebugLogs() is complete. Takes one parameter: 32 // - succeeded: was the logs stored successfully. 33 typedef base::Callback<void(bool succeeded)> GetDebugLogsCallback; 34 35 // Requests to store debug logs into |file| and calls |callback| 36 // when completed. Debug logs will be stored in the .tgz format. 37 virtual void GetDebugLogs(base::PlatformFile file, 38 const GetDebugLogsCallback& callback) = 0; 39 40 // Called once SetDebugMode() is complete. Takes one parameter: 41 // - succeeded: debug mode was changed successfully. 42 typedef base::Callback<void(bool succeeded)> SetDebugModeCallback; 43 44 // Requests to change debug mode to given |subsystem| and calls 45 // |callback| when completed. |subsystem| should be one of the 46 // following: "wifi", "ethernet", "cellular" or "none". 47 virtual void SetDebugMode(const std::string& subsystem, 48 const SetDebugModeCallback& callback) = 0; 49 50 // Called once GetRoutes() is complete. 51 typedef base::Callback<void(bool succeeded, 52 const std::vector<std::string>& routes)> 53 GetRoutesCallback; 54 virtual void GetRoutes(bool numeric, bool ipv6, 55 const GetRoutesCallback& callback) = 0; 56 57 // Called once GetNetworkStatus() is complete. 58 typedef base::Callback<void(bool succeeded, const std::string& status)> 59 GetNetworkStatusCallback; 60 61 // Gets information about network status as json. 62 virtual void GetNetworkStatus(const GetNetworkStatusCallback& callback) = 0; 63 64 // Called once GetModemStatus() is complete. 65 typedef base::Callback<void(bool succeeded, const std::string& status)> 66 GetModemStatusCallback; 67 68 // Gets information about modem status as json. 69 virtual void GetModemStatus(const GetModemStatusCallback& callback) = 0; 70 71 // Called once GetWiMaxStatus() is complete. 72 typedef base::Callback<void(bool succeeded, const std::string& status)> 73 GetWiMaxStatusCallback; 74 75 // Gets information about WiMAX status as json. 76 virtual void GetWiMaxStatus(const GetWiMaxStatusCallback& callback) = 0; 77 78 // Called once GetNetworkInterfaces() is complete. Takes two parameters: 79 // - succeeded: information was obtained successfully. 80 // - status: network interfaces information in json. For details, please refer 81 // to http://gerrit.chromium.org/gerrit/#/c/28045/5/src/helpers/netif.cc 82 typedef base::Callback<void(bool succeeded, const std::string& status)> 83 GetNetworkInterfacesCallback; 84 85 // Gets information about network interfaces as json. 86 virtual void GetNetworkInterfaces( 87 const GetNetworkInterfacesCallback& callback) = 0; 88 89 // Called once GetPerfData() is complete only if the the data is successfully 90 // obtained from debugd. 91 typedef base::Callback<void(const std::vector<uint8>& data)> 92 GetPerfDataCallback; 93 94 // Runs perf for |duration| seconds and returns data collected. 95 virtual void GetPerfData(uint32_t duration, 96 const GetPerfDataCallback& callback) = 0; 97 98 // Callback type for GetScrubbedLogs(), GetAllLogs() or GetUserLogFiles(). 99 typedef base::Callback<void(bool succeeded, 100 const std::map<std::string, std::string>& logs)> 101 GetLogsCallback; 102 103 // Gets scrubbed logs from debugd. 104 virtual void GetScrubbedLogs(const GetLogsCallback& callback) = 0; 105 106 // Gets all logs collected by debugd. 107 virtual void GetAllLogs(const GetLogsCallback& callback) = 0; 108 109 // Gets list of user log files that must be read by Chrome. 110 virtual void GetUserLogFiles(const GetLogsCallback& callback) = 0; 111 112 // Requests to start system/kernel tracing. 113 virtual void StartSystemTracing() = 0; 114 115 // Called once RequestStopSystemTracing() is complete. Takes one parameter: 116 // - result: the data collected while tracing was active 117 typedef base::Callback<void(const scoped_refptr<base::RefCountedString>& 118 result)> StopSystemTracingCallback; 119 120 // Requests to stop system tracing and calls |callback| when completed. 121 virtual bool RequestStopSystemTracing(const StopSystemTracingCallback& 122 callback) = 0; 123 124 // Returns an empty SystemTracingCallback that does nothing. 125 static StopSystemTracingCallback EmptyStopSystemTracingCallback(); 126 127 // Called once TestICMP() is complete. Takes two parameters: 128 // - succeeded: information was obtained successfully. 129 // - status: information about ICMP connectivity to a specified host as json. 130 // For details please refer to 131 // https://gerrit.chromium.org/gerrit/#/c/30310/2/src/helpers/icmp.cc 132 typedef base::Callback<void(bool succeeded, const std::string& status)> 133 TestICMPCallback; 134 135 // Tests ICMP connectivity to a specified host. The |ip_address| contains the 136 // IPv4 or IPv6 address of the host, for example "8.8.8.8". 137 virtual void TestICMP(const std::string& ip_address, 138 const TestICMPCallback& callback) = 0; 139 140 // Tests ICMP connectivity to a specified host. The |ip_address| contains the 141 // IPv4 or IPv6 address of the host, for example "8.8.8.8". 142 virtual void TestICMPWithOptions( 143 const std::string& ip_address, 144 const std::map<std::string, std::string>& options, 145 const TestICMPCallback& callback) = 0; 146 147 // Factory function, creates a new instance and returns ownership. 148 // For normal usage, access the singleton via DBusThreadManager::Get(). 149 static DebugDaemonClient* Create(DBusClientImplementationType type, 150 dbus::Bus* bus); 151 protected: 152 // Create() should be used instead. 153 DebugDaemonClient(); 154 155 private: 156 DISALLOW_COPY_AND_ASSIGN(DebugDaemonClient); 157 }; 158 159 } // namespace chromeos 160 161 #endif // CHROMEOS_DBUS_DEBUG_DAEMON_CLIENT_H_ 162