Some fixes to connection manager.
[jenirok] / src / common / connectionmanager.h
index ea44605..b5a2c3c 100644 (file)
 #define CONNECTIONMANAGER_H
 
 #include <QtCore/QObject>
+#include <QtCore/QTimerEvent>
 #include <QtCore/QString>
-#include <conic/conic.h>
-#include <glib-object.h>
-#include <dbus/dbus-glib-lowlevel.h>
+#include <QtCore/QByteArray>
+#include <QtCore/QList>
+#include <QtDBus/QDBusInterface>
+#include <QtDBus/QDBusMessage>
 
 class ConnectionManager : public QObject
 {
     Q_OBJECT
 
 public:
-    static ConnectionManager& instance();
+
+    enum ConnectionType {NO_TYPE, WLAN, GPRS};
+    enum Error {NO_ERROR, NO_AVAILABLE_CONNECTIONS, INVALID_IAP, UNKNOWN_ERROR};
+
+    struct Connection
+    {
+        ConnectionType type;
+        QString id;
+        QString name;
+        int strength;
+    };
+
+    ConnectionManager(QObject* parent = 0);
+    ~ConnectionManager();
     bool connect();
-    bool disconnect();
+    bool connect(Connection const& connection);
+    bool connect(QString const& id);
+    bool getBestConnection(Connection& connection, ConnectionType type = NO_TYPE);
+    bool disconnect(bool force = false);
     bool isConnected();
+    bool scanConnections(QList<Connection>& connections, ConnectionType type = NO_TYPE);
+    Error error() const;
+    static unsigned int const TIMEOUT = 15000;
+    static unsigned int const WAIT_AFTER_CONNECT = 400;
 
-signals:
-    void connected();
-    void disconnected();
-    void error(QString const& error);
+protected:
+    virtual void timerEvent(QTimerEvent* event);
 
+private slots:
+    void stateChange(const QDBusMessage& rep);
+    void connectionChange(const QDBusMessage& rep);
+    void scanResult(const QDBusMessage& rep);
 
 private:
-    ConnectionManager();
-    static void connectionHandler(ConIcConnection *connection,
-                                  ConIcConnectionEvent *event,
-                                  gpointer user_data);
-    static ConnectionManager* instance_;
-    ConIcConnection* connection_;
-    bool connected_;
+    void sleep(unsigned int ms);
+    bool waitSignal(bool* ready);
+    bool stateReady_;
+    bool connectionReady_;
+    bool scanReady_;
+    static bool connected_;
+    bool timeout_;
+    int numberOfConnections_;
+    int scannedConnections_;
+    int timer_;
+    ConnectionType searchType_;
+    Error error_;
+    QList<Connection>* connections_;
+    QDBusInterface* icd2interface_;
 };
 
 #endif