#pragma once #include "dbus/hpp/fi.w1.wpa_supplicant1.hpp" #include "dbus/hpp/f1.w1.wpa_supplicant1.Interfaces.hpp" #include "dbus/hpp/f1.w1.wpa_supplicant1.Peer.hpp" #include "dbus/hpp/f1.w1.wpa_supplicant1.Group.hpp" #include "dbus/hpp/org.freedesktop.DBus.Properties.hpp" #include "DBusLog.hpp" #include "DBusEvent.hpp" #include "DBusVariantHelper.hpp" #include #include class Interface_proxy_withevents : public fi::w1::wpa_supplicant1::Interface_proxy { public: using base = fi::w1::wpa_supplicant1::Interface_proxy; Interface_proxy_withevents(sdbus::IProxy &proxy) : base(proxy), proxy(proxy) { } DBusEvent &> OnNetworkAdded; DBusEvent OnNetworkRemoved; DBusEvent OnNetworkSelected; DBusEvent &> OnStationAdded; DBusEvent OnStationRemoved; DBusEvent OnStaAuthorized; DBusEvent OnStaDeauthorized; DBusEvent &> OnInterworkingAPAdded; DBusEvent<> OnInterworkingSelectDone; protected: void EventTrace(const char *methodName, const std::string &message); private: sdbus::IProxy &proxy; protected: virtual void onScanDone(const bool &success); virtual void onBSSAdded(const sdbus::ObjectPath &path, const std::map &properties); virtual void onBSSRemoved(const sdbus::ObjectPath &path); virtual void onBlobAdded(const std::string &name); virtual void onBlobRemoved(const std::string &name); virtual void onNetworkAdded(const sdbus::ObjectPath &path, const std::map &properties); virtual void onNetworkRemoved(const sdbus::ObjectPath &path); virtual void onNetworkSelected(const sdbus::ObjectPath &path); virtual void onPropertiesChanged(const std::map &properties); virtual void onProbeRequest(const std::map &args); virtual void onCertification(const std::map &certification); virtual void onEAP(const std::string &status, const std::string ¶meter); virtual void onStaAuthorized(const std::string &name); virtual void onStaDeauthorized(const std::string &name); virtual void onStationAdded(const sdbus::ObjectPath &path, const std::map &properties); virtual void onStationRemoved(const sdbus::ObjectPath &path); virtual void onNetworkRequest(const sdbus::ObjectPath &path, const std::string &field, const std::string &text); virtual void onInterworkingAPAdded(const sdbus::ObjectPath &bss, const sdbus::ObjectPath &cred, const std::map &properties); virtual void onInterworkingSelectDone(); }; class WpaInterface : public sdbus::ProxyInterfaces< Interface_proxy_withevents> { public: using self = WpaInterface; using ptr = std::unique_ptr; static ptr Create(sdbus::IConnection &connection, const sdbus::ObjectPath &dbusPath) { return std::make_unique(connection, dbusPath); } WpaInterface(sdbus::IConnection &connection, const sdbus::ObjectPath &dbusPath) : ProxyInterfaces(connection, "fi.w1.wpa_supplicant1", dbusPath) { registerProxy(); } virtual ~WpaInterface() { unregisterProxy(); } protected: void Trace(const char *method, const std::string &msg) { ::LogTrace(this->getObjectPath(), method, msg); } }; class WpaPersistentGroup : public sdbus::ProxyInterfaces< fi::w1::wpa_supplicant1::PersistentGroup_proxy> { public: using self = WpaPersistentGroup; using ptr = std::unique_ptr; static ptr Create(sdbus::IConnection &connection, const sdbus::ObjectPath &path) { return std::make_unique(connection, path); } WpaPersistentGroup(sdbus::IConnection &connection, const sdbus::ObjectPath &objectPath) : ProxyInterfaces(connection, "fi.w1.wpa_supplicant1", objectPath) { } }; class WpaWPS : public sdbus::ProxyInterfaces< fi::w1::wpa_supplicant1::Interface::WPS_proxy> { public: using self = WpaWPS; using ptr = std::unique_ptr; static ptr Create(sdbus::IProxy &proxy) { return std::make_unique(proxy.getObjectPath()); } static ptr Create(const std::string &path) { return std::make_unique(path); } static ptr Create(sdbus::IConnection &connection, const std::string &path) { return std::make_unique(connection, path); } WpaWPS(std::string objectPath) : ProxyInterfaces("fi.w1.wpa_supplicant1", objectPath) { } WpaWPS(sdbus::IConnection &connection, std::string objectPath) : ProxyInterfaces(connection, "fi.w1.wpa_supplicant1", objectPath) { } protected: virtual void onEvent(const std::string &name, const std::map &args); virtual void onCredentials(const std::map &credentials); virtual void onPropertiesChanged(const std::map &properties); }; class WpaPeer : public sdbus::ProxyInterfaces< fi::w1::wpa_supplicant1::Peer_proxy> { public: using self = WpaPeer; using ptr = std::unique_ptr; static ptr Create(sdbus::IConnection &connection, const std::string &dbusPath) { return std::make_unique(connection, dbusPath); } WpaPeer(sdbus::IConnection &connection, const std::string &dbusPath) : ProxyInterfaces(connection, "fi.w1.wpa_supplicant1", dbusPath) { registerProxy(); } virtual ~WpaPeer() { unregisterProxy(); } private: virtual void onPropertiesChanged(const std::map &properties) {} }; class WpaP2PDevice : public sdbus::ProxyInterfaces< fi::w1::wpa_supplicant1::Interface::P2PDevice_proxy, Interface_proxy_withevents> { public: using self = WpaP2PDevice; using ptr = std::unique_ptr; static ptr Create(const std::string &dbusPath) { return std::make_unique(dbusPath); } static ptr Create(sdbus::IConnection &connection, const std::string &dbusPath) { return std::make_unique(connection, dbusPath); } WpaP2PDevice(const std::string &dbusPath) : ProxyInterfaces("fi.w1.wpa_supplicant1", dbusPath) { registerProxy(); } WpaP2PDevice(sdbus::IConnection &connection, const std::string &dbusPath) : ProxyInterfaces(connection, "fi.w1.wpa_supplicant1", dbusPath) { registerProxy(); } virtual ~WpaP2PDevice() { unregisterProxy(); } void Disconnect() { fi::w1::wpa_supplicant1::Interface::P2PDevice_proxy::Disconnect(); } public: DBusEvent OnProvisionDiscoveryEnterPin; DBusEvent OnProvisionDiscoveryRequestDisplayPin; DBusEvent &> OnPersistentGroupAdded; DBusEvent OnPersistentGroupRemoved; DBusEvent &> OnGroupStarted; DBusEvent &> OnGroupFinished; DBusEvent &> OnServiceDiscoveryRequest; DBusEvent OnGroupFormationFailure; DBusEvent &> OnGONegotiationSuccess; DBusEvent &> OnGONegotiationFailure; DBusEvent> OnWpsFailed; DBusEvent> OnInvitationResult; DBusEvent &> OnInvitationReceived; private: void EventTrace(const char *methodName, const std::string &message) { Interface_proxy_withevents::EventTrace(methodName,message); } void EventTrace(const char *eventName, const std::function &getText); protected: virtual void onDeviceFound(const sdbus::ObjectPath &path); virtual void onDeviceFoundProperties(const sdbus::ObjectPath &path, const std::map &properties); virtual void onDeviceLost(const sdbus::ObjectPath &path); virtual void onFindStopped(); virtual void onProvisionDiscoveryRequestDisplayPin(const sdbus::ObjectPath &peer_object, const std::string &pin); virtual void onProvisionDiscoveryResponseDisplayPin(const sdbus::ObjectPath &peer_object, const std::string &pin); virtual void onProvisionDiscoveryRequestEnterPin(const sdbus::ObjectPath &peer_object); virtual void onProvisionDiscoveryResponseEnterPin(const sdbus::ObjectPath &peer_object); virtual void onProvisionDiscoveryPBCRequest(const sdbus::ObjectPath &peer_object); virtual void onProvisionDiscoveryPBCResponse(const sdbus::ObjectPath &peer_object); virtual void onProvisionDiscoveryFailure(const sdbus::ObjectPath &peer_object, const int32_t &status); virtual void onGroupStarted(const std::map &properties); virtual void onGroupFormationFailure(const std::string &reason); virtual void onGONegotiationSuccess(const std::map &properties); virtual void onGONegotiationFailure(const std::map &properties); virtual void onGONegotiationRequest(const sdbus::ObjectPath &path, const uint16_t &dev_passwd_id, const uint8_t &device_go_intent); virtual void onInvitationResult(const std::map &invite_result); virtual void onGroupFinished(const std::map &properties); virtual void onServiceDiscoveryRequest(const std::map &sd_request); virtual void onServiceDiscoveryResponse(const std::map &sd_response); virtual void onPersistentGroupAdded(const sdbus::ObjectPath &path, const std::map &properties); virtual void onPersistentGroupRemoved(const sdbus::ObjectPath &path); virtual void onWpsFailed(const std::string &name, const std::map &args); virtual void onInvitationReceived(const std::map &properties); }; class WpaGroup : public sdbus::ProxyInterfaces, public DBusLog { public: using self = WpaGroup; using ptr = std::unique_ptr; static ptr Create(sdbus::IConnection &connection, const sdbus::ObjectPath &path) { return std::make_unique(connection, path); } WpaGroup(sdbus::IConnection &connection, const sdbus::ObjectPath &path) : ProxyInterfaces(connection, "fi.w1.wpa_supplicant1", path), DBusLog(path) { registerProxy(); } virtual ~WpaGroup() { unregisterProxy(); } DBusEvent OnPeerJoined; DBusEvent OnPeerDisconnected; private: virtual void onPeerJoined(const sdbus::ObjectPath &peer) { OnPeerJoined.fire(peer); } virtual void onPeerDisconnected(const sdbus::ObjectPath &peer) { OnPeerDisconnected.fire(peer); } }; class WpaSupplicant : public sdbus::ProxyInterfaces, public DBusLog { public: using self = WpaSupplicant; using ptr = std::unique_ptr; static ptr Create() { return std::make_unique(); } static ptr Create(sdbus::IConnection &connection) { return std::make_unique(connection); } WpaSupplicant() : ProxyInterfaces("fi.w1.wpa_supplicant1", "/fi/w1/wpa_supplicant1"), DBusLog("fi/w1/WpaSupplicant1") { registerProxy(); } WpaSupplicant(sdbus::IConnection &connection) : ProxyInterfaces(connection, "fi.w1.wpa_supplicant1", "/fi/w1/wpa_supplicant1"), DBusLog("fi/w1/WpaSupplicant1") { registerProxy(); } virtual ~WpaSupplicant() { unregisterProxy(); } DBusEvent &> OnInterfaceAdded; DBusEvent OnInterfaceRemoved; private: virtual void onInterfaceAdded(const sdbus::ObjectPath &path, const std::map &properties); virtual void onInterfaceRemoved(const sdbus::ObjectPath &path); virtual void onPropertiesChanged(const std::map &properties) {} };