1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2015 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 1665a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 1765a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#ifndef SHILL_DBUS_CHROMEOS_DHCPCD_LISTENER_H_ 1865a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#define SHILL_DBUS_CHROMEOS_DHCPCD_LISTENER_H_ 1965a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 2065a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#include <string> 2165a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 2265a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#include <dbus/dbus.h> 2365a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 2465a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#include <base/macros.h> 2565a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#include <base/memory/ref_counted.h> 2665a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#include <base/memory/weak_ptr.h> 2765a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#include <dbus/bus.h> 2865a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#include <dbus/message.h> 2965a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 3003e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko#include <brillo/variant_dictionary.h> 3165a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 32820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu#include "shill/dhcp/dhcpcd_listener_interface.h" 33820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu 3465a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiunamespace shill { 3565a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 3665a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiuclass DHCPProvider; 3765a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiuclass EventDispatcher; 3865a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 3965a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu// The DHCPCD listener is a singleton proxy that listens to signals from all 4065a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu// DHCP clients and dispatches them through the DHCP provider to the appropriate 4165a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu// client based on the PID. 42820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiuclass ChromeosDHCPCDListener final : public DHCPCDListenerInterface { 4365a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu public: 4465a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu ChromeosDHCPCDListener(const scoped_refptr<dbus::Bus>& bus, 4565a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu EventDispatcher* dispatcher, 4665a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu DHCPProvider* provider); 47820012496f8c171a7c5da4a4904a6ee93bfea2e9Peter Qiu ~ChromeosDHCPCDListener() override; 4865a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 4965a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu private: 5065a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu static const char kDBusInterfaceName[]; 5165a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu static const char kSignalEvent[]; 5265a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu static const char kSignalStatusChanged[]; 5365a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 5465a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu // Redirects the function call to HandleMessage 5565a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu static DBusHandlerResult HandleMessageThunk(DBusConnection* connection, 5665a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu DBusMessage* raw_message, 5765a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu void* user_data); 5865a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 5965a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu // Handles incoming messages. 6065a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu DBusHandlerResult HandleMessage(DBusConnection* connection, 6165a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu DBusMessage* raw_message); 6265a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 6365a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu // Signal handlers. 6465a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu void EventSignal(const std::string& sender, 6565a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu uint32_t pid, 6665a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu const std::string& reason, 6703e6719bae1e0903d94853b896673a033196bcf5Alex Vakulenko const brillo::VariantDictionary& configurations); 6865a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu void StatusChangedSignal(const std::string& sender, 6965a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu uint32_t pid, 7065a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu const std::string& status); 7165a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 7265a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu scoped_refptr<dbus::Bus> bus_; 7365a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu EventDispatcher* dispatcher_; 7465a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu DHCPProvider* provider_; 7565a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu const std::string match_rule_; 7665a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 7765a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu base::WeakPtrFactory<ChromeosDHCPCDListener> weak_factory_{this}; 7865a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu DISALLOW_COPY_AND_ASSIGN(ChromeosDHCPCDListener); 7965a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu}; 8065a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 8165a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu} // namespace shill 8265a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu 8365a049b4b284b5c189e0b6f901b448edd6c3d86dPeter Qiu#endif // SHILL_DBUS_CHROMEOS_DHCPCD_LISTENER_H_ 84