browsercore/core/network/WebNetworkConnectionManager.cpp
changeset 6 1c3b8676e58c
parent 5 0f2326c2a325
child 10 232fbd5a2dcb
--- a/browsercore/core/network/WebNetworkConnectionManager.cpp	Wed Jun 23 17:59:43 2010 +0300
+++ b/browsercore/core/network/WebNetworkConnectionManager.cpp	Tue Jul 06 14:03:49 2010 +0300
@@ -27,7 +27,7 @@
     Constructs a WebNetworkConfigurationManager with the given \a parent.
 */
 WebNetworkConnectionManager::WebNetworkConnectionManager(QObject *parent)
-    : QObject(parent), m_WebNetworkSession(0)
+    : QObject(parent), m_WebNetworkSession(0), m_offlined(false)
 { 
     // set up handlers for Network Configuration Manager signals
     connect(&m_NetworkConfigurationManager, SIGNAL(updateCompleted()), 
@@ -117,8 +117,6 @@
     // set up handlers for the WebNetworkSession signals
     connect(m_WebNetworkSession, SIGNAL(sessionConfigurationChanged(const QNetworkConfiguration &)),
             this, SLOT(handleSessionConfigurationChanged(const QNetworkConfiguration &)));
-    connect(m_WebNetworkSession, SIGNAL(sessionStateChanged(const QNetworkConfiguration &, QNetworkSession::State)),
-            this, SLOT(handleSessionStateChanged(const QNetworkConfiguration &, QNetworkSession::State))); 
 }
 
 /*! 
@@ -128,6 +126,7 @@
 void WebNetworkConnectionManager::deleteSession(void)
 {   
     delete m_WebNetworkSession;
+    m_WebNetworkSession = 0;
 }
 
 /*!
@@ -164,17 +163,21 @@
 }
 
 /*! 
-    Handle the conlineStateChanged signal from Network Configuration Manager.
+    Handle the onlineStateChanged signal from Network Configuration Manager.
 */
 void WebNetworkConnectionManager::handleOnlineStateChanged(bool isOnline)
 {
+    emit networkOnlineStateChanged(isOnline);
+    
     if (!isOnline)
     {
         qDebug() << "offline";
+        m_offlined = true;
     }
     else
     {
         qDebug() << "online";
+        m_offlined = false;
     }
     // flash icon to indicate the online state change with "online" and "offline".
 }
@@ -184,8 +187,48 @@
 */
 void WebNetworkConnectionManager::handleConfigurationChanged(const QNetworkConfiguration &config)
 {
-    qDebug() << "Configuration" << config.name() << "Changed";  
-}
+    qDebug() << "Configuration" << config.name() << "Changed";
+    qDebug() << "bearername:" << config.bearerName() << "type:" << config.type() << "state:" << config.state() << "purpose:" << config.purpose();
+    
+    /* The QNetworkSession is closed becuase of previous offline condition. Re-open the session if 
+       the configuration matches the configurations hold by the QNetworkSession */
+#ifdef NO_OFFLINED_BUG
+    if (isOfflined())
+    {
+#endif // NO_OFFLINED_BUG
+        if (m_WebNetworkSession && !m_WebNetworkSession->isOpen())
+        {
+            QNetworkConfiguration sessionConfig = m_WebNetworkSession->configuration();
+            QList<QNetworkConfiguration> children = sessionConfig.children();
+        	  switch(sessionConfig.type())
+            {
+                case QNetworkConfiguration::ServiceNetwork:        
+                    /* Traverse all configuration to find the matching configuration */
+                    foreach(QNetworkConfiguration tmpConfig, children)
+                    {
+        	              if (config == tmpConfig)
+        	              {
+        	              	  if ((config.state() == QNetworkConfiguration::Discovered) ||
+        	              	  	   (config.state() == QNetworkConfiguration::Active))
+        	                      m_WebNetworkSession->open();
+            	              break;
+            	          }
+            	      }
+                    break;  
+               case QNetworkConfiguration::InternetAccessPoint:
+        	          qDebug() << "InternetAccessPoint";
+                    break;
+               case QNetworkConfiguration::UserChoice:
+        	          qDebug() << "UserChoice";
+        	          break;
+               default:
+        	         break;
+            } 	  
+        }
+#ifdef NO_OFFLINED_BUG
+    }
+#endif // NO_OFFLINED_BUG
+} 
 
 /*! 
     Handle the networkNameChanged signal from Network Configuration Manager and translate 
@@ -195,75 +238,13 @@
 */
 void WebNetworkConnectionManager::handleSessionConfigurationChanged(const QNetworkConfiguration &config)
 {  
-    qDebug() << "handleSessionConfigurationChanged" << "bearname:" << config.bearerName();
+    qDebug() << "handleSessionConfigurationChanged" << "bearername:" << config.bearerName();
 
 #ifdef QT_MOBILITY_SYSINFO  
     QSystemNetworkInfo::NetworkMode mode;
     mode = m_mapStringNetworkMode[config.bearerName()];
-    switch(mode)
-    {
-    	  case QSystemNetworkInfo::EthernetMode:
-    	  case QSystemNetworkInfo::WlanMode:
-    	  case QSystemNetworkInfo::BluetoothMode:
-    	  case QSystemNetworkInfo::WimaxMode:
-            emit networkNameChanged(mode, config.name());
-            break;
-        case QSystemNetworkInfo::GsmMode:
-        case QSystemNetworkInfo::CdmaMode:
-        case QSystemNetworkInfo::WcdmaMode:
-        	  break;
-        case QSystemNetworkInfo::UnknownMode:
-        default:
-        	  emit networkNameChanged(mode, config.name());
-        	  break;
-    }
-#endif // QT_MOBILITY_SYSINFO
-}
 
-/*! 
-    Handle the networkSignalStrengthChanged from Network Configuration Manager and
-    translate sessionStateChanged to networkSignalStrengthChanged.
-    
-    It a\ emits networkSignalStrengthChanged for non cellular network connection.
-*/
-void WebNetworkConnectionManager::handleSessionStateChanged(const QNetworkConfiguration &config, 
-	       QNetworkSession::State state)
-{
-	  int strength = 0;
-	  
-	  qDebug() << "handleSessionStateChanged" << "bearname:" << config.bearerName();
-	  
-	  switch(state)
-	  {
-	      case QNetworkSession::Connecting:
-	      case QNetworkSession::Connected:
-	      case QNetworkSession::Roaming:
-	      	  strength = 100;
-	      	  break;
-	      default:
-	       	  break;
-	  }
-
-#ifdef QT_MOBILITY_SYSINFO
-    QSystemNetworkInfo::NetworkMode mode;
-	  mode = m_mapStringNetworkMode[config.bearerName()];
-    switch(mode)
-    {
-    	  case QSystemNetworkInfo::EthernetMode:
-    	  case QSystemNetworkInfo::WlanMode:
-        case QSystemNetworkInfo::BluetoothMode:
-    	  case QSystemNetworkInfo::WimaxMode:
-    	  	  emit networkSignalStrengthChanged(mode, strength);
-            break;
-        case QSystemNetworkInfo::GsmMode:
-        case QSystemNetworkInfo::CdmaMode:
-        case QSystemNetworkInfo::WcdmaMode:
-        	  break;
-        case QSystemNetworkInfo::UnknownMode:
-        default:
-        	  emit networkSignalStrengthChanged(mode, strength);
-        	  break;
-    }
+    emit networkSessionNameChanged(mode, config.name());
 #endif // QT_MOBILITY_SYSINFO
 }
 
@@ -283,3 +264,4 @@
 #endif // QT_MOBILITY_SYSINFO
 
 } // WRT
+