From 2a415e33e054e00a9b1a3385d3883f36c9c1b6d4 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Mon, 27 Aug 2012 11:52:10 -0500 Subject: Add network manager global object to kinstance This breaks the ABI --- tdecore/kglobal.cpp | 8 +++ tdecore/kglobal.h | 11 ++- tdecore/kinstance.cpp | 18 +++++ tdecore/kinstance.h | 11 ++- tdecore/tdenetworkconnections.cpp | 96 +++++++++++++++++++++++++ tdecore/tdenetworkconnections.h | 144 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 285 insertions(+), 3 deletions(-) diff --git a/tdecore/kglobal.cpp b/tdecore/kglobal.cpp index efb9d803f..6c88302ce 100644 --- a/tdecore/kglobal.cpp +++ b/tdecore/kglobal.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include "kstaticdeleter.h" @@ -87,6 +88,13 @@ TDEHardwareDevices *KGlobal::hardwareDevices() return _instance->hardwareDevices(); } +TDEGlobalNetworkManager *KGlobal::networkManager() +{ + MYASSERT(_instance); + + return _instance->networkManager(); +} + KInstance *KGlobal::instance() { MYASSERT(_instance); diff --git a/tdecore/kglobal.h b/tdecore/kglobal.h index a6a60c96c..d7aadbc3f 100644 --- a/tdecore/kglobal.h +++ b/tdecore/kglobal.h @@ -26,6 +26,7 @@ class KConfig; class KSharedConfig; class KIconLoader; class TDEHardwareDevices; +class TDEGlobalNetworkManager; class KLocale; class KStandardDirs; class KStaticDeleterBase; @@ -79,11 +80,17 @@ public: static KIconLoader *iconLoader(); /** - * Returns a hardwaredevices object. - * @return the global hardwaredevices object + * Returns a TDEHardwareDevices object. + * @return the global hardware devices object */ static TDEHardwareDevices *hardwareDevices(); + /** + * Returns a TDEGlobalNetworkManager object. + * @return the global network manager object + */ + static TDEGlobalNetworkManager *networkManager(); + /** * Returns the global locale object. * @return the global locale object diff --git a/tdecore/kinstance.cpp b/tdecore/kinstance.cpp index 5b3aa8625..721864e5a 100644 --- a/tdecore/kinstance.cpp +++ b/tdecore/kinstance.cpp @@ -25,6 +25,7 @@ #include "kcharsets.h" #include "kiconloader.h" #include "tdehardwaredevices.h" +#include "tdenetworkconnections.h" #include "kaboutdata.h" #include "kstandarddirs.h" #include "kdebug.h" @@ -72,6 +73,7 @@ KInstance::KInstance( const TQCString& name) _config (0L), _iconLoader (0L), _hardwaredevices (0L), + _networkmanager (0L), _name( name ), _aboutData( new KAboutData( name, "", 0 ) ), m_configReadOnly(false) { DEBUG_ADD @@ -91,6 +93,7 @@ KInstance::KInstance( const KAboutData * aboutData ) _config (0L), _iconLoader (0L), _hardwaredevices (0L), + _networkmanager (0L), _name( aboutData->appName() ), _aboutData( aboutData ), m_configReadOnly(false) { DEBUG_ADD @@ -111,6 +114,7 @@ KInstance::KInstance( KInstance* src ) _config ( src->_config ), _iconLoader ( src->_iconLoader ), _hardwaredevices ( src->_hardwaredevices ), + _networkmanager ( src->_networkmanager ), _name( src->_name ), _aboutData( src->_aboutData ), m_configReadOnly(false) { DEBUG_ADD @@ -130,6 +134,7 @@ KInstance::KInstance( KInstance* src ) src->_config = 0L; src->_iconLoader = 0L; src->_hardwaredevices = 0L; + src->_networkmanager = 0L; src->_aboutData = 0L; delete src; } @@ -151,6 +156,9 @@ KInstance::~KInstance() delete _hardwaredevices; _hardwaredevices = 0; + delete _networkmanager; + _networkmanager = 0; + // delete _config; // Do not delete, stored in d->sharedConfig _config = 0; delete _dirs; @@ -272,6 +280,16 @@ TDEHardwareDevices *KInstance::hardwareDevices() const return _hardwaredevices; } +TDEGlobalNetworkManager *KInstance::networkManager() const +{ + DEBUG_CHECK_ALIVE + if( _networkmanager == 0 ) { + _networkmanager = new TDEGlobalNetworkManager( ); + } + + return _networkmanager; +} + void KInstance::newIconLoader() const { DEBUG_CHECK_ALIVE diff --git a/tdecore/kinstance.h b/tdecore/kinstance.h index 444a2d8c8..5d1dbdce0 100644 --- a/tdecore/kinstance.h +++ b/tdecore/kinstance.h @@ -28,6 +28,7 @@ class KInstancePrivate; class KMimeSourceFactory; class KSharedConfig; class TDEHardwareDevices; +class TDEGlobalNetworkManager; #include #include "tdelibs_export.h" @@ -110,11 +111,17 @@ class TDECORE_EXPORT KInstance KIconLoader *iconLoader() const; /** - * Returns a hardwaredevices object. + * Returns a TDEHardwareDevices object. * @return the hardwaredevices object. */ TDEHardwareDevices *hardwareDevices() const; + /** + * Returns a TDEGlobalNetworkManager object. + * @return the networkmanager object. + */ + TDEGlobalNetworkManager *networkManager() const; + /** * Re-allocate the global iconloader. */ @@ -162,6 +169,8 @@ private: mutable KIconLoader *_iconLoader; mutable TDEHardwareDevices *_hardwaredevices; + mutable TDEGlobalNetworkManager *_networkmanager; + mutable void *_placeholder; TQCString _name; const KAboutData *_aboutData; diff --git a/tdecore/tdenetworkconnections.cpp b/tdecore/tdenetworkconnections.cpp index 0a3893f1f..70d528e9b 100644 --- a/tdecore/tdenetworkconnections.cpp +++ b/tdecore/tdenetworkconnections.cpp @@ -19,6 +19,12 @@ #include "tdehardwaredevices.h" #include "tdenetworkconnections.h" +#include "config.h" + +#ifdef WITH_NETWORK_MANAGER_BACKEND +#include "networkbackends/network-manager/network-manager.h" +#endif // WITH_NETWORK_MANAGER_BACKEND + #define SET_BIT(x, y) (x |= 1 << y) #define TEST_BIT(x, y) ((x & (1 << y)) >> y) @@ -465,6 +471,96 @@ void TDENetworkConnectionManager::internalNetworkDeviceStateChanged(TDENetworkCo m_prevDeviceStatus[hwAddress] = newState; } +/*================================================================================================*/ +/* TDEGlobalNetworkManager */ +/*================================================================================================*/ + +TDEGlobalNetworkManager::TDEGlobalNetworkManager() : m_internalConnectionManager(NULL) { +#ifdef WITH_NETWORK_MANAGER_BACKEND + m_internalConnectionManager = new TDENetworkConnectionManager_BackendNM(TQString::null); +#endif // WITH_NETWORK_MANAGER_BACKEND + connect(m_internalConnectionManager, SIGNAL(networkConnectionStateChanged(TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags, TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags)), this, SIGNAL(networkConnectionStateChanged(TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags, TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags))); +} + +TDEGlobalNetworkManager::~TDEGlobalNetworkManager() { + delete m_internalConnectionManager; +} + +TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags TDEGlobalNetworkManager::backendStatus() { + if (!m_internalConnectionManager) return TDENetworkGlobalManagerFlags::Unknown; + return m_internalConnectionManager->backendStatus(); +} + +void TDEGlobalNetworkManager::loadConnectionInformation() { + if (!m_internalConnectionManager) return; + return m_internalConnectionManager->loadConnectionInformation(); +} + +bool TDEGlobalNetworkManager::loadConnectionSecrets(TQString uuid) { + if (!m_internalConnectionManager) return false; + return m_internalConnectionManager->loadConnectionSecrets(uuid); +} + +bool TDEGlobalNetworkManager::saveConnection(TDENetworkConnection* connection) { + if (!m_internalConnectionManager) return false; + return m_internalConnectionManager->saveConnection(connection); +} + +bool TDEGlobalNetworkManager::deleteConnection(TQString uuid) { + if (!m_internalConnectionManager) return false; + return m_internalConnectionManager->deleteConnection(uuid); +} + +TDENetworkConnectionStatus::TDENetworkConnectionStatus TDEGlobalNetworkManager::initiateConnection(TQString uuid) { + if (!m_internalConnectionManager) return TDENetworkConnectionStatus::Invalid; + return m_internalConnectionManager->initiateConnection(uuid); +} + +TDENetworkConnectionStatus::TDENetworkConnectionStatus TDEGlobalNetworkManager::checkConnectionStatus(TQString uuid) { + if (!m_internalConnectionManager) return TDENetworkConnectionStatus::Invalid; + return m_internalConnectionManager->checkConnectionStatus(uuid); +} + +TDENetworkConnectionStatus::TDENetworkConnectionStatus TDEGlobalNetworkManager::deactivateConnection(TQString uuid) { + if (!m_internalConnectionManager) return TDENetworkConnectionStatus::Invalid; + return m_internalConnectionManager->deactivateConnection(uuid); +} + +TDENetworkHWNeighborList* TDEGlobalNetworkManager::siteSurvey() { + if (!m_internalConnectionManager) return NULL; + return m_internalConnectionManager->siteSurvey(); +} + +bool TDEGlobalNetworkManager::networkingEnabled() { + if (!m_internalConnectionManager) return false; + return m_internalConnectionManager->networkingEnabled(); +} + +bool TDEGlobalNetworkManager::wiFiHardwareEnabled() { + if (!m_internalConnectionManager) return false; + return m_internalConnectionManager->wiFiHardwareEnabled(); +} + +bool TDEGlobalNetworkManager::enableWiFi(bool enable) { + if (!m_internalConnectionManager) return false; + return m_internalConnectionManager->enableWiFi(enable); +} + +bool TDEGlobalNetworkManager::wiFiEnabled() { + if (!m_internalConnectionManager) return false; + return m_internalConnectionManager->wiFiEnabled(); +} + +TDENetworkConnectionList* TDEGlobalNetworkManager::connections() { + if (!m_internalConnectionManager) return NULL; + return m_internalConnectionManager->connections(); +} + +TDENetworkConnection* TDEGlobalNetworkManager::findConnectionByUUID(TQString uuid) { + if (!m_internalConnectionManager) return NULL; + return m_internalConnectionManager->findConnectionByUUID(uuid); +} + /*================================================================================================*/ /* End */ /*================================================================================================*/ diff --git a/tdecore/tdenetworkconnections.h b/tdecore/tdenetworkconnections.h index bec8d3201..985f75e68 100644 --- a/tdecore/tdenetworkconnections.h +++ b/tdecore/tdenetworkconnections.h @@ -688,4 +688,148 @@ class TDECORE_EXPORT TDENetworkConnectionManager : public TQObject TQMap m_prevDeviceStatus; }; +class TDECORE_EXPORT TDEGlobalNetworkManager : public TQObject +{ + Q_OBJECT + + public: + /** + * Constructor. + */ + TDEGlobalNetworkManager(); + + /** + * Destructor. + */ + ~TDEGlobalNetworkManager(); + + /** + * @return A TDENetworkGlobalManagerFlags enum value with the current status of the networking backend. + */ + virtual TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags backendStatus(); + + /** + * 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(); + + /** + * @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); + + /** + * @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); + + /** + * @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); + + /** + * 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); + + /** + * 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); + + /** + * 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); + + /** + * @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(); + + /** + * @return true if networking is enabled, false if not. + */ + virtual bool networkingEnabled(); + + /** + * @return true if WiFi hardware is enabled, false if not. + */ + virtual bool wiFiHardwareEnabled(); + + /** + * @param enable true to enable WiFi, false to disable it. + * @return true on success, false on failure. + */ + virtual bool enableWiFi(bool enable); + + /** + * @return true if WiFi is enabled, false if not. + */ + virtual bool wiFiEnabled(); + + 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); + + private: + TDENetworkConnectionManager* m_internalConnectionManager; +}; + #endif // _TDENETWORKCONNECTIONS_H \ No newline at end of file -- cgit v1.2.1