49e6dfc4a5467b6c821b1b5454d00d60c50e4cd2
[jenirok] / src / common / connectionmanager.h
1 /*
2  * This file is part of Jenirok.
3  *
4  * Jenirok is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * Jenirok is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with Jenirok.  If not, see <http://www.gnu.org/licenses/>.
16  *
17  */
18
19 #ifndef CONNECTIONMANAGER_H
20 #define CONNECTIONMANAGER_H
21
22 #include <QtCore/QObject>
23 #include <QtCore/QTimerEvent>
24 #include <QtCore/QString>
25 #include <QtCore/QByteArray>
26 #include <QtCore/QList>
27 #include <QtDBus/QDBusInterface>
28 #include <QtDBus/QDBusMessage>
29
30 class ConnectionManager : public QObject
31 {
32     Q_OBJECT
33
34 public:
35
36     enum ConnectionType {WLAN, GPRS};
37     enum NetworkMode {NETWORK_UNKNOWN, NETWORK_2G, NETWORK_2_5G, NETWORK_3G, NETWORK_3_5G};
38     enum Error {NO_ERROR, NO_AVAILABLE_CONNECTIONS, INVALID_IAP, UNKNOWN_ERROR};
39
40     struct Connection
41     {
42         ConnectionType type;
43         QString id;
44         QString name;
45         int strength;
46     };
47
48     ConnectionManager(QObject* parent = 0);
49     ~ConnectionManager();
50     void setBlocking(bool value);
51     bool connect();
52     bool connect(Connection const& connection);
53     bool connect(QString const& id);
54     bool getBestConnection(Connection& connection);
55     bool autoConnect();
56     bool disconnect(bool force = false);
57     bool isConnected();
58     bool scanConnections(QList<Connection>& connections);
59     NetworkMode getNetworkMode();
60     Error error() const;
61     static unsigned int const TIMEOUT = 20000;
62
63 signals:
64     void connectReply(bool connected);
65     void isConnectedReply(bool connected);
66     void newConnection(ConnectionManager::Connection const& connection);
67     void scanReady();
68
69 protected:
70     virtual void timerEvent(QTimerEvent* event);
71
72 private slots:
73     void stateChange(const QDBusMessage& rep);
74     void connectionChange(const QDBusMessage& rep);
75     void scanResult(const QDBusMessage& rep);
76
77 private:
78     bool waitSignal(bool* ready);
79     bool blocking_;
80     bool stateReady_;
81     bool connectionReady_;
82     bool scanReady_;
83     bool connected_;
84     bool timeout_;
85     int numberOfConnections_;
86     int scannedConnections_;
87     int timer_;
88     Error error_;
89     QList<Connection>* connections_;
90     QDBusInterface* icd2interface_;
91 };
92
93 #endif