| // Copyright 2020 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. |
| |
| #ifndef PATCHPANEL_MULTICAST_PROXY_H_ |
| #define PATCHPANEL_MULTICAST_PROXY_H_ |
| |
| #include <map> |
| #include <memory> |
| #include <string> |
| |
| #include <brillo/daemons/daemon.h> |
| |
| #include "patchpanel/broadcast_forwarder.h" |
| #include "patchpanel/message_dispatcher.h" |
| #include "patchpanel/multicast_forwarder.h" |
| |
| namespace patchpanel { |
| |
| // MulticastProxy manages multiple MulticastForwarder instances to forward |
| // multicast for multiple physical interfaces. |
| class MulticastProxy : public brillo::Daemon { |
| public: |
| explicit MulticastProxy(base::ScopedFD control_fd); |
| MulticastProxy(const MulticastProxy&) = delete; |
| MulticastProxy& operator=(const MulticastProxy&) = delete; |
| |
| virtual ~MulticastProxy() = default; |
| |
| protected: |
| int OnInit() override; |
| |
| void OnParentProcessExit(); |
| void OnDeviceMessage(const DeviceMessage& msg); |
| |
| private: |
| void Reset(); |
| |
| MessageDispatcher msg_dispatcher_; |
| std::map<std::string, std::unique_ptr<MulticastForwarder>> mdns_fwds_; |
| std::map<std::string, std::unique_ptr<MulticastForwarder>> ssdp_fwds_; |
| std::map<std::string, std::unique_ptr<BroadcastForwarder>> bcast_fwds_; |
| |
| base::WeakPtrFactory<MulticastProxy> weak_factory_{this}; |
| }; |
| |
| } // namespace patchpanel |
| |
| #endif // PATCHPANEL_MULTICAST_PROXY_H_ |