Connection handling improved again. Added ability to bybass general Maemo connectivit...
[jenirok] / src / common / connectionmanager.cpp
index 8196520..caf6709 100644 (file)
@@ -20,6 +20,7 @@
 #include <QApplication>
 #include <QtCore/QTimerEvent>
 #include <QtCore/QVariant>
+#include <QtCore/QStringList>
 #include <QtDBus/QDBusArgument>
 #include <QtDBus/QDBusConnection>
 #include <icd/dbus_api.h>
@@ -128,7 +129,7 @@ bool ConnectionManager::connect(QString const& id)
     return true;
 }
 
-bool ConnectionManager::getBestConnection(Connection& connection)
+bool ConnectionManager::getBestConnection(Connection& connection, ConnectionType type)
 {
     bool blockingValue = blocking_;
 
@@ -145,7 +146,6 @@ bool ConnectionManager::getBestConnection(Connection& connection)
 
     if(connections.size() == 0)
     {
-        qDebug() << "No connections";
         error_ = NO_AVAILABLE_CONNECTIONS;
         return false;
     }
@@ -160,7 +160,7 @@ bool ConnectionManager::getBestConnection(Connection& connection)
        switch(connections.at(i).type)
        {
        case WLAN:
-           if(connections.at(i).strength > biggestWlan)
+           if(type != GPRS && connections.at(i).strength > biggestWlan)
            {
                biggestWlan = connections.at(i).strength;
                bestWlan = i;
@@ -168,7 +168,7 @@ bool ConnectionManager::getBestConnection(Connection& connection)
            break;
 
        case GPRS:
-           if(connections.at(i).strength > biggestGprs)
+           if(type != WLAN && connections.at(i).strength > biggestGprs)
            {
                biggestGprs = connections.at(i).strength;
                bestGprs = i;
@@ -198,21 +198,6 @@ bool ConnectionManager::getBestConnection(Connection& connection)
 
 }
 
-bool ConnectionManager::autoConnect()
-{
-   Connection best;
-
-   if(!getBestConnection(best))
-   {
-       return false;
-   }
-
-   qDebug() << "Best connection: " << best.name;
-
-   return connect(best.id);
-
-}
-
 bool ConnectionManager::disconnect(bool force)
 {
     // Forced disconnect is not allowed if connection
@@ -261,19 +246,38 @@ bool ConnectionManager::isConnected()
     return true;
 }
 
-bool ConnectionManager::scanConnections(QList<ConnectionManager::Connection>& connections)
+bool ConnectionManager::scanConnections(QList<ConnectionManager::Connection>& connections,
+                                        ConnectionManager::ConnectionType type)
 {
     unsigned int flags = static_cast<unsigned int>(ICD_SCAN_REQUEST_ACTIVE_SAVED);
     scanReady_ = false;
     scannedConnections_ = 0;
     connections_ = &connections;
-    QDBusMessage rep = icd2interface_->call(ICD_DBUS_API_SCAN_REQ, QVariant(flags));
+
+    QStringList networks;
+
+    switch(type)
+    {
+    case WLAN:
+        networks << "WLAN_INFRA" << "WLAN_ADHOC";
+        break;
+    case GPRS:
+        networks << "GPRS";
+        break;
+    default:
+        break;
+    }
+
+    QDBusMessage rep = icd2interface_->call(ICD_DBUS_API_SCAN_REQ,
+                                            QVariant(flags),
+                                            QVariant(networks));
 
     numberOfConnections_ = rep.arguments().value(0).toList().size();
 
     if(numberOfConnections_ == 0)
     {
         connections_ = 0;
+        qDebug() << "No connections";
         return false;
     }
 
@@ -287,46 +291,6 @@ bool ConnectionManager::scanConnections(QList<ConnectionManager::Connection>& co
     return true;
 }
 
-ConnectionManager::NetworkMode ConnectionManager::getNetworkMode()
-{
-    QDBusMessage msg = QDBusMessage::createMethodCall("com.nokia.phone.net",
-                                                      "/com/nokia/phone/net",
-                                                      "Phone.Net",
-                                                      "get_registration_status");
-
-    QDBusMessage rep = QDBusConnection::systemBus().call(msg);
-
-    if(rep.type() == QDBusMessage::ErrorMessage)
-    {
-        qDebug() << rep.errorMessage();
-
-        return NETWORK_UNKNOWN;
-    }
-
-    char services = rep.arguments().value(6).toChar().toAscii();
-
-    qDebug() << services;
-
-    if(services & 0x08)
-    {
-        return NETWORK_3_5G;
-    }
-    else if(services & 0x04)
-    {
-        return NETWORK_3G;
-    }
-    else if(services & 0x01)
-    {
-        return NETWORK_2_5G;
-    }
-    else if(services & 0x02)
-    {
-        return NETWORK_2G;
-    }
-
-    return NETWORK_UNKNOWN;
-}
-
 ConnectionManager::Error ConnectionManager::error() const
 {
     return error_;