From 32e6eba8731f7f3328ae287d0493d941dadec06f Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Thu, 23 Aug 2012 18:19:49 -0500 Subject: Initial skeleton for network manager support --- tdecore/tdenetworkconnections.h | 398 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 398 insertions(+) create mode 100644 tdecore/tdenetworkconnections.h (limited to 'tdecore/tdenetworkconnections.h') diff --git a/tdecore/tdenetworkconnections.h b/tdecore/tdenetworkconnections.h new file mode 100644 index 000000000..05c4bb591 --- /dev/null +++ b/tdecore/tdenetworkconnections.h @@ -0,0 +1,398 @@ +/* This file is part of the TDE libraries + Copyright (C) 2012 Timothy Pearson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef _TDENETWORKCONNECTIONS_H +#define _TDENETWORKCONNECTIONS_H + +// TDE includes +#include +#include +#include +#include +#include "kiconloader.h" +#include "tdelibs_export.h" + +#define CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(x) \ + inline x operator|(x a, x b) \ + { \ + return static_cast(static_cast(a) | static_cast(b)); \ + } \ + \ + inline x operator&(x a, x b) \ + { \ + return static_cast(static_cast(a) & static_cast(b)); \ + } \ + \ + inline x operator~(x a) \ + { \ + return static_cast(~static_cast(a)); \ + } + +namespace TDENetworkConnectionType { +enum TDENetworkConnectionType { + WiredEthernet, + WiFi, + Bluetooth, + OLPCMesh, + WiMax, + Modem, + Infiniband, + Bond, + VLAN, + ADSL, + Other, + Last = Other +}; +}; + +namespace TDEWiFiMode { +enum TDEWiFiMode { + AdHoc, + Infrastructure, + Other, + Last = Other +}; +}; + +namespace TDENetworkGlobalManagerFlags { + enum TDENetworkGlobalManagerFlags { + Unknown = 0x00000000, + Disconnected = 0x00000001, + Connected = 0x00000002, + EstablishingLink = 0x00000004, + DeactivatingLink = 0x00000008, + LinkLocalAccess = 0x00000010, + SiteLocalAccess = 0x00000020, + GlobalAccess = 0x00000040, + Sleeping = 0x00000080, + }; + + CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkGlobalManagerFlags) +}; + +namespace TDENetworkDeviceCapabilityFlags { + enum TDENetworkDeviceCapabilityFlags { + None = 0x00000000, + Supported = 0x00000001, + CanDetectLink = 0x00000002 + }; + + CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkDeviceCapabilityFlags) +}; + +namespace TDENetworkWiFiAPFlags { + enum TDENetworkWiFiAPFlags { + None = 0x00000000, + PrivacySupport = 0x00000001, + PairWEP40 = 0x00000002, + PairWEP104 = 0x00000004, + PairTKIP = 0x00000008, + PairCCMP = 0x00000010, + GroupWEP40 = 0x00000020, + GroupWEP104 = 0x00000040, + GroupTKIP = 0x00000080, + GroupCCMP = 0x00000100, + KeyManagementPSK = 0x00000200, + KeyManagement80211 = 0x00000400 + }; + + CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkWiFiAPFlags) +}; + +namespace TDENetworkWiFiClientFlags { + enum TDENetworkWiFiClientFlags { + None = 0x00000000, + CipherWEP40 = 0x00000002, + CipherWEP104 = 0x00000004, + CipherTKIP = 0x00000008, + CipherCCMP = 0x00000010, + CipherWPA = 0x00000020, + CipherRSN = 0x00000040 + }; + + CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkWiFiClientFlags) +}; + +namespace TDENetworkWiFiConnectionCipher { + enum TDENetworkWiFiConnectionCipher { + None, + CipherWEP40, + CipherWEP104, + CipherTKIP, + CipherCCMP, + CipherWPA, + CipherRSN + }; +}; + +namespace TDENetworkConnectionStatus { + enum TDENetworkConnectionStatus { + Invalid = 0x00000000, + Disconnected = 0x00000001, + Connected = 0x00000002, + LinkUnavailable = 0x00000004, + EstablishingLink = 0x00000008, + ConfiguringProtocols = 0x00000010, + Reconnecting = 0x00000020, + LinkLost = 0x00000040, + LinkLocalAccess = 0x00000080, + SiteLocalAccess = 0x00000100, + GlobalAccess = 0x00000200, + UnManaged = 0x00000400, + NeedAuthorization = 0x00000800, + Failed = 0x00001000, + VerifyingProtocols = 0x00002000, + DependencyWait = 0x00004000 + }; + + CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkConnectionStatus) +}; + +namespace TDENetworkIPConfigurationFlags { + enum TDENetworkIPConfigurationFlags { + Invalid = 0x00000000, + IPV4 = 0x00000001, + IPV6 = 0x00000002, + DHCP = 0x00000004, + StaticIP = 0x00000008 + }; + + CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkIPConfigurationFlags) +}; + +class TDECORE_EXPORT TDENetworkIPConfiguration +{ + public: + TDENetworkIPConfiguration(); + ~TDENetworkIPConfiguration(); + + public: + bool valid; + TDENetworkIPConfigurationFlags::TDENetworkIPConfigurationFlags connectionFlags; + TQString ipAddress; + TQString networkMask; + TQString gateway; + TQString broadcast; + TQString destination; +}; + +class TDECORE_EXPORT TDENetworkWiFiDeviceInfo +{ + public: + TDENetworkWiFiDeviceInfo(); + ~TDENetworkWiFiDeviceInfo(); + + public: + bool valid; + TQString hwAddress; + TQString permanentHWAddress; + TDEWiFiMode::TDEWiFiMode operatingMode; + unsigned int bitrate; + TQString activeAccessPointBSSID; + TDENetworkWiFiClientFlags::TDENetworkWiFiClientFlags wirelessFlags; +}; + +class TDECORE_EXPORT TDENetworkDeviceInformation +{ + public: + TDENetworkDeviceInformation(); + ~TDENetworkDeviceInformation(); + + public: + bool valid; + TDENetworkConnectionStatus::TDENetworkConnectionStatus statusFlags; + TQString UUID; + TQString backendDriver; + TQString backendDriverVersion; + TQString firmwareVersion; + TDENetworkDeviceCapabilityFlags::TDENetworkDeviceCapabilityFlags capabilityFlags; + TDENetworkIPConfiguration ipConfiguration; + bool managed; + bool autoConnect; + bool firmwareMissing; + TDENetworkConnectionType::TDENetworkConnectionType deviceType; + TDENetworkWiFiDeviceInfo wirelessInfo; +}; + +class TDECORE_EXPORT TDENetworkHWNeighbor +{ + public: + TDENetworkHWNeighbor(); + ~TDENetworkHWNeighbor(); + + public: + bool valid; +}; + +class TDECORE_EXPORT TDENetworkWiFiAPInfo : public TDENetworkHWNeighbor +{ + public: + TDENetworkWiFiAPInfo(); + ~TDENetworkWiFiAPInfo(); + + public: + TQString SSID; + TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags; + unsigned int frequency; + TQString BSSID; + unsigned int maxBitrate; + double signalQuality; +}; + +typedef TQPtrList< TDENetworkHWNeighbor > TDENetworkHWNeighborList; + +class TDECORE_EXPORT TDENetworkConnection : public TQObject +{ + Q_OBJECT + + public: + TDENetworkConnection(); + ~TDENetworkConnection(); + + public: + TQString UUID; + TQString friendlyName; + TDENetworkIPConfiguration ipConfig; + bool autoConnect; +}; + +class TDECORE_EXPORT TDEWiFiConnection : public TDENetworkConnection +{ + Q_OBJECT + + public: + TDEWiFiConnection(); + ~TDEWiFiConnection(); + + public: + TQString SSID; + TDENetworkWiFiConnectionCipher::TDENetworkWiFiConnectionCipher cipher; + TQString key1; + TQString key2; + TQString key3; + TQString key4; +}; + +typedef TQPtrList< TDENetworkConnection > TDENetworkConnectionList; + +class TDECORE_EXPORT TDENetworkConnectionManager : public TQObject +{ + Q_OBJECT + + public: + /** + * Constructor. + * @param macAddress The MAC address of the hardware device + */ + TDENetworkConnectionManager(TQString macAddress); + + /** + * Destructor. + */ + ~TDENetworkConnectionManager(); + + /** + * @return the MAC address of this device + */ + TQString deviceMACAddress(); + + /** + * @return the type of connection supported by this device + */ + virtual TDENetworkConnectionType::TDENetworkConnectionType connectionType() = 0; + + /** + * @return A TDENetworkGlobalManagerFlags enum value with the current status of the networking backend. + */ + virtual TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags backendStatus() = 0; + + /** + * @return A TDENetworkDeviceInformation object containing the current status of the network device. + */ + virtual TDENetworkDeviceInformation deviceInformation() = 0; + + /** + * Loads all connection information from the configuration backend + */ + virtual void loadConnectionInformation() = 0; + + /** + * @param connection a TDENetworkConnection object containing a + * connection to save to the configuration backend. + * @return true on success, false on failure. + */ + virtual bool saveConnection(TDENetworkConnection connection) = 0; + + /** + * @param uuid a TQString conntaining the UUID of a connection to + * delete from the configuration backend. + * @return true on success, false on failure. + */ + virtual bool deleteConnection(TQString uuid) = 0; + + /** + * @return a TDENetworkConnectionList object containing a list of all + * possible connections this connection manager is aware of, regardless + * of current state or availability. + * + * loadConnectionInformation() should be called at least once before calling + * this method, in order to update internal connection information from the + * configuration backend. + * + * Note that the returned list is internally managed and must not be deleted! + * Also note that pointers in the list may become invalid on subsequent calls to + * loadConnectionInformation(), saveConnection(), deleteConnection(), or connections(). + */ + virtual TDENetworkConnectionList* connections() = 0; + + /** + * Initiates a connection with UUID @param uuid. + * @return A TDENetworkConnectionStatus enum value with the current connection status + * The client application should poll for status updates using checkConnectionStatus() + */ + virtual TDENetworkConnectionStatus::TDENetworkConnectionStatus initiateConnection(TQString uuid) = 0; + + /** + * Checks the status of a connection with UUID @param uuid. + * @return A TDENetworkConnectionStatus enum value with the current connection status + */ + virtual TDENetworkConnectionStatus::TDENetworkConnectionStatus checkConnectionStatus(TQString uuid) = 0; + + /** + * Disconnects a connection with UUID @param uuid. + * @return A TDENetworkConnectionStatus enum value with the current connection status + * The client application should poll for status updates using checkConnectionStatus() + */ + virtual TDENetworkConnectionStatus::TDENetworkConnectionStatus deactivateConnection(TQString uuid) = 0; + + /** + * @return a TDENetworkHWNeighborList object containing the result of a site survey; + * i.e. all nearby access points or devices. This function only returns valid information + * if the underlying network device supports site surveys. + * + * Note that the returned list is internally managed and must not be deleted! + * Also note that pointers in the list may become invalid on subsequent calls to + * siteSurvey(). + */ + virtual TDENetworkHWNeighborList* siteSurvey() = 0; + + private: + TDENetworkConnectionList* m_connectionList; + TQString m_macAddress; +}; + +#endif // _TDENETWORKCONNECTIONS_H \ No newline at end of file -- cgit v1.2.1