diff options
author | Gatis Paeglis <gatis.paeglis@digia.com> | 2014-01-02 15:57:14 +0100 |
---|---|---|
committer | Gatis Paeglis <gatis.paeglis@digia.com> | 2014-01-28 12:01:04 +0200 |
commit | 696510db8f43427a9bb6ff249f688851f531cd12 (patch) | |
tree | 37fcf832449de02879b7ce3a7287588c53c6bbd5 /src/imports/wifi/qwifimanager.h | |
parent | 95a00d27cda8b8bea27192f7ee9eb2b5ae6eb405 (diff) |
Fix dhcp issues and improve public API
- Use qconnectivity daemon for dhcp requests. Since dhcp requests are
executed in other process we don't block gui thread for this lengthy
operation.
- Why not to use "do_dhcp_request" - it is a legacy implementation of a
dhcp client and is not used anywhere in the Android source code itself.
It appears that do_dhcp_request was not removed from the libhardware_legacy
to keep compatibility for others, whose code might still depend on it.
- Differnet changes to the internal implementation and the public API.
- Add 'Interface' singleton type, installing a singleton type allows
developers to provide arbitrary functionality to a client without requiring
individual instances of the type to be instantiated by the client. We use
this to determine if Android has wifi interface.
Change-Id: I836f3a2a587b1ebf9f670ed08b10fe3483504b9e
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@digia.com>
Diffstat (limited to 'src/imports/wifi/qwifimanager.h')
-rw-r--r-- | src/imports/wifi/qwifimanager.h | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/src/imports/wifi/qwifimanager.h b/src/imports/wifi/qwifimanager.h index 59f2b44..85384cc 100644 --- a/src/imports/wifi/qwifimanager.h +++ b/src/imports/wifi/qwifimanager.h @@ -21,6 +21,9 @@ #include <QtCore/QObject> #include <QtCore/QByteArray> +#include <QtNetwork/QLocalSocket> + +#include <cutils/properties.h> #include "qwifinetworklist.h" @@ -29,71 +32,73 @@ class QWifiManagerEventThread; class QWifiManager : public QObject { Q_OBJECT - - Q_PROPERTY(bool ready READ isReady NOTIFY readyChanged) - Q_PROPERTY(bool online READ isOnline NOTIFY onlineChanged) + Q_ENUMS(NetworkState) + Q_PROPERTY(NetworkState networkState READ networkState NOTIFY networkStateChanged) + Q_PROPERTY(bool backendReady READ isbackendReady NOTIFY backendReadyChanged) Q_PROPERTY(bool scanning READ scanning WRITE setScanning NOTIFY scanningChanged) - Q_PROPERTY(QString connectedSSID READ connectedSSID NOTIFY connectedSSIDChanged) Q_PROPERTY(QWifiNetworkList *networks READ networks CONSTANT) public: - enum InternalState { - IS_Uninitialized, - IS_LoadDriver, - IS_StartBackend, - IS_ConnectToBackend, - IS_UpAndRunning + enum NetworkState { + Disconnected, + ObtainingIPAddress, + DhcpRequestFailed, + Connected }; QWifiManager(); + ~QWifiManager(); QWifiNetworkList *networks() { return &m_networks; } - QString connectedSSID() const { return m_connectedSSID; } - bool scanning() const { return m_scanning; } void setScanning(bool scanning); - - bool isReady() const { return m_internalState == IS_UpAndRunning; } - bool isOnline() const { return m_online; } - + NetworkState networkState() const { return m_state; } + bool isbackendReady() const { return m_backendReady; } + bool exiting() const { return m_exiting; } public slots: void start(); - + void stop(); void connect(QWifiNetwork *network, const QString &passphrase); + void disconnect(); signals: void scanningChanged(bool arg); - void readyChanged(bool ready); - void onlineChanged(bool online); + void networkStateChanged(); + void backendReadyChanged(); void connectedSSIDChanged(const QString &); protected: bool event(QEvent *); + void sendDhcpRequest(const QByteArray &request); + void handleConnected(); + void connectToBackend(); + void disconnectFromBackend(); + QByteArray call(const char *command) const; + bool checkedCall(const char *command) const; + +protected slots: + void connectedToDaemon(); + void handleDhcpReply(); private: friend class QWifiManagerEventThread; - void handleConnected(); - void parseScanResults(); - void connectToBackend(); - QByteArray call(const char *command); - bool checkedCall(const char *command); - QString m_connectedSSID; QWifiNetworkList m_networks; - QWifiManagerEventThread *m_eventThread; int m_scanTimer; - - InternalState m_internalState; - bool m_scanning; - bool m_online; + bool m_backendReady; + QByteArray m_interface; + NetworkState m_state; + QLocalSocket *m_daemonClientSocket; + QByteArray m_request; + bool m_exiting; }; #endif // QWIFIMANAGER_H |