diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-08-27 11:31:08 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-08-27 11:31:08 -0500 |
commit | cfbdd55bb39f6e2012103a506d8d2506145cc936 (patch) | |
tree | 98914c5e8f41cc7777aab4eec23f9344071dc7f8 /tdecore/tdenetworkconnections.h | |
parent | 2d67c1c6b2606b2c96831a44da73afe41fb8b6e1 (diff) | |
download | tdelibs-cfbdd55bb39f6e2012103a506d8d2506145cc936.tar.gz tdelibs-cfbdd55bb39f6e2012103a506d8d2506145cc936.zip |
Add very preliminary network-manager backend support
Diffstat (limited to 'tdecore/tdenetworkconnections.h')
-rw-r--r-- | tdecore/tdenetworkconnections.h | 395 |
1 files changed, 344 insertions, 51 deletions
diff --git a/tdecore/tdenetworkconnections.h b/tdecore/tdenetworkconnections.h index 05c4bb591..bec8d3201 100644 --- a/tdecore/tdenetworkconnections.h +++ b/tdecore/tdenetworkconnections.h @@ -23,6 +23,7 @@ #include <tqstring.h> #include <tqptrlist.h> #include <tqstringlist.h> +#include <tqhostaddress.h> #include "kiconloader.h" #include "tdelibs_export.h" @@ -40,10 +41,26 @@ inline x operator~(x a) \ { \ return static_cast<x>(~static_cast<int>(a)); \ + } \ + \ + inline x &operator|=(x& a, const x& b) \ + { \ + a = static_cast<x>(static_cast<int>(a) | static_cast<int>(b)); \ + return a; \ + } \ + \ + inline x &operator&=(x& a, const x& b) \ + { \ + a = static_cast<x>(static_cast<int>(a) & static_cast<int>(b)); \ + return a; \ } +typedef TQValueList<TQ_UINT8> TDENetworkByteList; +typedef TQValueList<TQHostAddress> TDENetworkAddressList; + namespace TDENetworkConnectionType { enum TDENetworkConnectionType { + BackendOnly, WiredEthernet, WiFi, Bluetooth, @@ -139,6 +156,50 @@ namespace TDENetworkWiFiConnectionCipher { }; }; +namespace TDENetworkIEEE8021xType { + enum TDENetworkIEEE8021xType { + None, + LEAP, + MD5, + PAP, + CHAP, + MSCHAP, + MSCHAPV2, + Fast, + PSK, + PAX, + SAKE, + GPSK, + TLS, + PEAP, + TTLS, + SIM, + GTC, + OTP + }; +}; + +namespace TDENetworkIEEE8021xFastFlags { + enum TDENetworkIEEE8021xFastFlags { + None = 0x00000000, + AllowUnauthenticated = 0x00000001, + AllowAuthenticated = 0x00000002 + }; + + CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkIEEE8021xFastFlags) +}; + +namespace TDENetworkPasswordHandlingFlags { + enum TDENetworkPasswordHandlingFlags { + None = 0x00000000, + NoSave = 0x00000001, + NoPrompt = 0x00000002, + ExternalStorage = 0x00000004 + }; + + CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkPasswordHandlingFlags) +}; + namespace TDENetworkConnectionStatus { enum TDENetworkConnectionStatus { Invalid = 0x00000000, @@ -146,17 +207,18 @@ namespace TDENetworkConnectionStatus { 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 + DeactivatingLink = 0x00000010, + ConfiguringProtocols = 0x00000020, + Reconnecting = 0x00000040, + LinkLost = 0x00000080, + LinkLocalAccess = 0x00000100, + SiteLocalAccess = 0x00000200, + GlobalAccess = 0x00000400, + UnManaged = 0x00000800, + NeedAuthorization = 0x00001000, + Failed = 0x00002000, + VerifyingProtocols = 0x00004000, + DependencyWait = 0x00008000 }; CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkConnectionStatus) @@ -164,16 +226,168 @@ namespace TDENetworkConnectionStatus { namespace TDENetworkIPConfigurationFlags { enum TDENetworkIPConfigurationFlags { - Invalid = 0x00000000, - IPV4 = 0x00000001, - IPV6 = 0x00000002, - DHCP = 0x00000004, - StaticIP = 0x00000008 + None = 0x00000000, + IPV4DHCPIP = 0x00000001, + IPV4DHCPDNS = 0x00000002, + IPV4DHCPRoutes = 0x00000004, + IPV4LocalOnly = 0x00000008, + IPV4StartConnectionSharingServer = 0x00000010, + IPV4Disabled = 0x00000020, + IPV4MayUseAsDefaultRoute = 0x00000040, + IPV6DHCPIP = 0x00000080, + IPV6DHCPDNS = 0x00000100, + IPV6DHCPRoutes = 0x00000200, + IPV6LocalOnly = 0x00000400, + IPV6StartConnectionSharingServer = 0x00000800, + IPV6Disabled = 0x00001000, + IPV6MayUseAsDefaultRoute = 0x00002000 }; CREATE_FLAG_BITWISE_MANIPULATION_FUNCTIONS(TDENetworkIPConfigurationFlags) }; +class TDECORE_EXPORT TDENetworkSearchDomain +{ + public: + TDENetworkSearchDomain(); + TDENetworkSearchDomain(TQString domain, bool ipv6=false); + ~TDENetworkSearchDomain(); + + TQString searchDomain(); + void setSearchDomain(TQString domain, bool ipv6=false); + + bool isIPv4(); + bool isIPv6(); + + private: + TQString m_domain; + bool m_isIPV6; +}; + +typedef TQValueList<TDENetworkSearchDomain> TDENetworkSearchDomainList; + +class TDECORE_EXPORT TDENetMask +{ + public: + TDENetMask(); + TDENetMask(TQ_UINT32 netmask); + TDENetMask(TQ_UINT8* netmask); + ~TDENetMask(); + + void fromCIDRMask(unsigned char mask, bool ipv6=false); + unsigned char toCIDRMask(); + void fromString(TQString mask); + TQString toString(); + + bool isIPv4(); + bool isIPv6(); + + private: + TQ_UINT32 m_ipv4NetMask; + TQHostAddress m_ipv6NetMask; + bool m_isIPV6; +}; + +class TDECORE_EXPORT TDEMACAddress +{ + public: + TDEMACAddress(); + TDEMACAddress(TDENetworkByteList address); + ~TDEMACAddress(); + + TDENetworkByteList address(); + void setAddress(TDENetworkByteList address); + TQString toString(); + void fromString(TQString address); + bool isValid(); + + private: + bool m_isValid; + TDENetworkByteList m_macAddress; + + friend bool operator==(const TDEMACAddress &a1, const TDEMACAddress &a2); +}; + +bool operator==(const TDEMACAddress &a1, const TDEMACAddress &a2); + +class TDECORE_EXPORT TDENetworkSingleIPConfiguration +{ + public: + TDENetworkSingleIPConfiguration(); + ~TDENetworkSingleIPConfiguration(); + + bool isIPv4(); + bool isIPv6(); + + public: + bool valid; + TQHostAddress ipAddress; + TDENetMask networkMask; + TQHostAddress gateway; +}; + +typedef TQValueList<TDENetworkSingleIPConfiguration> TDENetworkSingleIPConfigurationList; + +class TDECORE_EXPORT TDENetworkSingleRouteConfiguration +{ + public: + TDENetworkSingleRouteConfiguration(); + ~TDENetworkSingleRouteConfiguration(); + + bool isIPv4(); + bool isIPv6(); + + public: + bool valid; + TQHostAddress ipAddress; + TDENetMask networkMask; + TQHostAddress gateway; + TQ_UINT32 metric; +}; + +typedef TQValueList<TDENetworkSingleRouteConfiguration> TDENetworkSingleRouteConfigurationList; + +class TDENetworkIEEE8021xConfiguration +{ + public: + TDENetworkIEEE8021xConfiguration(); + ~TDENetworkIEEE8021xConfiguration(); + + public: + bool valid; + bool secretsValid; + TDENetworkIEEE8021xType::TDENetworkIEEE8021xType type; + TQString userName; + TQString anonymousUserName; + TQString pacFileName; + TQByteArray caCertificate; + TQString additionalCAFilesPath; + TQString authServerCertSubjectMatch; + TQStringList alternateAuthServerCertSubjectMatch; + TQByteArray clientCertificate; + TQString forcePEAPVersion; + TQString forcePEAPLabel; + TDENetworkIEEE8021xFastFlags::TDENetworkIEEE8021xFastFlags fastProvisioningFlags; + TQString phase2NonEAPAuthMethod; + TQString phase2EAPAuthMethod; + TQByteArray phase2CaCertificate; + TQString phase2CaFilesPath; + TQString phase2AuthServerCertSubjectMatch; + TQStringList phase2AlternateAuthServerCertSubjectMatch; + TQByteArray phase2ClientCertificate; + TQString password; + TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags passwordFlags; + TQByteArray binaryPassword; + TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags binaryPasswordFlags; + TQByteArray privateKey; + TQString privateKeyPassword; + TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags privateKeyPasswordFlags; + TQByteArray phase2PrivateKey; + TQString phase2PrivateKeyPassword; + TDENetworkPasswordHandlingFlags::TDENetworkPasswordHandlingFlags phase2PrivateKeyPasswordFlags; + bool forceSystemCaCertificates; +}; + class TDECORE_EXPORT TDENetworkIPConfiguration { public: @@ -183,11 +397,13 @@ class TDECORE_EXPORT TDENetworkIPConfiguration public: bool valid; TDENetworkIPConfigurationFlags::TDENetworkIPConfigurationFlags connectionFlags; - TQString ipAddress; - TQString networkMask; - TQString gateway; - TQString broadcast; - TQString destination; + TDENetworkSingleIPConfigurationList ipConfigurations; + TDENetworkSingleRouteConfigurationList routeConfigurations; + TQHostAddress broadcast; + TQHostAddress destination; + TDENetworkAddressList resolvers; + TDENetworkSearchDomainList searchDomains; + TQString dhcpClientIdentifier; }; class TDECORE_EXPORT TDENetworkWiFiDeviceInfo @@ -198,8 +414,8 @@ class TDECORE_EXPORT TDENetworkWiFiDeviceInfo public: bool valid; - TQString hwAddress; - TQString permanentHWAddress; + TDEMACAddress hwAddress; + TDEMACAddress permanentHWAddress; TDEWiFiMode::TDEWiFiMode operatingMode; unsigned int bitrate; TQString activeAccessPointBSSID; @@ -225,7 +441,7 @@ class TDECORE_EXPORT TDENetworkDeviceInformation bool autoConnect; bool firmwareMissing; TDENetworkConnectionType::TDENetworkConnectionType deviceType; - TDENetworkWiFiDeviceInfo wirelessInfo; + TDENetworkWiFiDeviceInfo wiFiInfo; }; class TDECORE_EXPORT TDENetworkHWNeighbor @@ -245,8 +461,9 @@ class TDECORE_EXPORT TDENetworkWiFiAPInfo : public TDENetworkHWNeighbor ~TDENetworkWiFiAPInfo(); public: - TQString SSID; - TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags flags; + TQByteArray SSID; + TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags wpaFlags; + TDENetworkWiFiAPFlags::TDENetworkWiFiAPFlags rsnFlags; unsigned int frequency; TQString BSSID; unsigned int maxBitrate; @@ -255,28 +472,38 @@ class TDECORE_EXPORT TDENetworkWiFiAPInfo : public TDENetworkHWNeighbor typedef TQPtrList< TDENetworkHWNeighbor > TDENetworkHWNeighborList; -class TDECORE_EXPORT TDENetworkConnection : public TQObject +class TDECORE_EXPORT TDENetworkConnection { - Q_OBJECT - public: TDENetworkConnection(); - ~TDENetworkConnection(); + virtual ~TDENetworkConnection(); public: TQString UUID; TQString friendlyName; TDENetworkIPConfiguration ipConfig; + TDEMACAddress lockedHWAddress; + TDEMACAddress manualHWAddress; bool autoConnect; + bool fullDuplex; + bool requireIPV4; + bool requireIPV6; + TQ_UINT32 mtu; + TDENetworkIEEE8021xConfiguration eapConfig; }; -class TDECORE_EXPORT TDEWiFiConnection : public TDENetworkConnection +class TDECORE_EXPORT TDEWiredEthernetConnection : public TDENetworkConnection { - Q_OBJECT + public: + TDEWiredEthernetConnection(); + virtual ~TDEWiredEthernetConnection(); +}; +class TDECORE_EXPORT TDEWiFiConnection : public TDENetworkConnection +{ public: TDEWiFiConnection(); - ~TDEWiFiConnection(); + virtual ~TDEWiFiConnection(); public: TQString SSID; @@ -297,6 +524,8 @@ class TDECORE_EXPORT TDENetworkConnectionManager : public TQObject /** * Constructor. * @param macAddress The MAC address of the hardware device + * If an empty MAC address is passed, this object will make global networking backend + * methods available exclusively (TDENetworkConnectionType::BackendOnly). */ TDENetworkConnectionManager(TQString macAddress); @@ -327,15 +556,25 @@ class TDECORE_EXPORT TDENetworkConnectionManager : public TQObject /** * Loads all connection information from the configuration backend + * Secret information must be loaded separately via a call to + * loadConnectionSecrets(TQString uuid) after this method has been + * executed at least once. */ virtual void loadConnectionInformation() = 0; /** - * @param connection a TDENetworkConnection object containing a + * @param uuid a TQString conntaining the UUID of a connection for which to + * load secrets from the configuration backend. + * @return true on success, false on failure. + */ + virtual bool loadConnectionSecrets(TQString uuid) = 0; + + /** + * @param connection a pointer to 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; + virtual bool saveConnection(TDENetworkConnection* connection) = 0; /** * @param uuid a TQString conntaining the UUID of a connection to @@ -345,21 +584,6 @@ class TDECORE_EXPORT TDENetworkConnectionManager : public TQObject 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() @@ -390,9 +614,78 @@ class TDECORE_EXPORT TDENetworkConnectionManager : public TQObject */ virtual TDENetworkHWNeighborList* siteSurvey() = 0; - private: + /** + * @return true if networking is enabled, false if not. + */ + virtual bool networkingEnabled() = 0; + + /** + * @return true if WiFi hardware is enabled, false if not. + */ + virtual bool wiFiHardwareEnabled() = 0; + + /** + * @param enable true to enable WiFi, false to disable it. + * @return true on success, false on failure. + */ + virtual bool enableWiFi(bool enable) = 0; + + /** + * @return true if WiFi is enabled, false if not. + */ + virtual bool wiFiEnabled() = 0; + + signals: + /** + * Emitted whenever the state of the system's connection changes + * If previous state data was unavailable, @param previousState will contain TDENetworkConnectionStatus::Invalid + */ + void networkConnectionStateChanged(TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags newState, TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags previousState); + + /** + * Emitted whenever the state of a device changes + * If previous state data was unavailable, @param previousState will contain TDENetworkConnectionStatus::Invalid + * If the global connection state has changed, @param hwAddress will be empty, otherwise it will contain the MAC address + * of the networking hardware that has changed state. + */ + void networkDeviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus newState, TDENetworkConnectionStatus::TDENetworkConnectionStatus previousState, TQString hwAddress); + + public: + /** + * @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(); + + /** + * @return a pointer to a TDENetworkConnection object with the specified @param uuid, + * or a NULL pointer if no such connection exists. + * + * Note that the returned object is internally managed and must not be deleted! + */ + TDENetworkConnection* findConnectionByUUID(TQString uuid); + + protected: + void clearTDENetworkConnectionList(); + void clearTDENetworkHWNeighborList(); + void internalNetworkConnectionStateChanged(TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags newState); + void internalNetworkDeviceStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus newState, TQString hwAddress=TQString::null); + + protected: TDENetworkConnectionList* m_connectionList; + TDENetworkHWNeighborList* m_hwNeighborList; TQString m_macAddress; + TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags m_prevConnectionStatus; + TQMap<TQString, TDENetworkConnectionStatus::TDENetworkConnectionStatus> m_prevDeviceStatus; }; #endif // _TDENETWORKCONNECTIONS_H
\ No newline at end of file |