Revision: 201023 RCL_3 PDK_3.0.1
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 21 Jun 2010 16:55:05 +0300
branchRCL_3
changeset 20 a9524956f6b5
parent 18 aaabc7526ded
child 22 3b2fb68d23df
Revision: 201023 Kit: 2010125
hotspotfw/hsclient/inc/hssiaphandler.h
hotspotfw/hsclient/src/hssiaphandler.cpp
hotspotfw/hsserver/src/hotspotsession.cpp
wlanutilities/wlansniffer/aiplugin/inc/wsfactivewrappers.h
wlanutilities/wlansniffer/aiplugin/inc/wsfaicontroller.h
wlanutilities/wlansniffer/aiplugin/inc/wsfconnectactivewrapper.h
wlanutilities/wlansniffer/aiplugin/src/wsfactivewrappers.cpp
wlanutilities/wlansniffer/aiplugin/src/wsfaicontroller.cpp
wlanutilities/wlansniffer/aiplugin/src/wsfconnectactivewrapper.cpp
wlanutilities/wlansniffer/engine/client/bwins/wsfclientu.def
wlanutilities/wlansniffer/engine/client/eabi/wsfclientu.def
wlanutilities/wlansniffer/engine/client/inc/wsfsession.h
wlanutilities/wlansniffer/engine/client/src/wsfsession.cpp
wlanutilities/wlansniffer/engine/server/group/server.mmp
wlanutilities/wlansniffer/engine/server/inc/wsfengine.h
wlanutilities/wlansniffer/engine/server/inc/wsfict.h
wlanutilities/wlansniffer/engine/server/inc/wsfwlanbearerconnectionmonitor.h
wlanutilities/wlansniffer/engine/server/inc/wsfwlanscanner.h
wlanutilities/wlansniffer/engine/server/src/wsfengine.cpp
wlanutilities/wlansniffer/engine/server/src/wsfict.cpp
wlanutilities/wlansniffer/engine/server/src/wsfsession.cpp
wlanutilities/wlansniffer/engine/server/src/wsfwlanbearerconnectionmonitor.cpp
wlanutilities/wlansniffer/engine/server/src/wsfwlanscanner.cpp
wlanutilities/wlansniffer/mainapplication/data/wlansniffer.rss
wlanutilities/wlansniffer/mainapplication/src/wsfdetailscontainer.cpp
wlanutilities/wlansniffer/mainapplication/src/wsfmaincontroller.cpp
wlanutilities/wlansniffer/model/bwins/wsfmodelu.def
wlanutilities/wlansniffer/model/eabi/wsfmodelu.def
wlanutilities/wlansniffer/model/group/model.mmp
wlanutilities/wlansniffer/model/inc/wsfmodel.h
wlanutilities/wlansniffer/model/src/wsfmodel.cpp
--- a/hotspotfw/hsclient/inc/hssiaphandler.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/hotspotfw/hsclient/inc/hssiaphandler.h	Mon Jun 21 16:55:05 2010 +0300
@@ -123,6 +123,12 @@
         * @param aEapCode, Eap id code
         */                 
         void GetEapTypeDesC( TUint aEapType, TDes8& aEapString, TChar& aEapCode );
+        
+        /**
+        * Removes brackets from UID
+        * @param aUid, UID of the client
+        */
+        void ModifyClientUid( TDes& aUid );
        
     private: // Data
         
--- a/hotspotfw/hsclient/src/hssiaphandler.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/hotspotfw/hsclient/src/hssiaphandler.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -31,6 +31,10 @@
 #include <cmmanagerdef.h>
 #include <cmdestinationext.h>
 
+// CONSTANTS
+const TInt  KRetryCount   = 20;
+const TInt  KRetryTimeout = 100000;
+
 using namespace CMManager;
 
 // ============================ MEMBER FUNCTIONS ===============================
@@ -276,12 +280,31 @@
 	            eaps->SetL( enabledEapList );
             	}
         }
-    // now update the access point
-    iWLANRecord->ModifyL( *dbSession );
+    
+    // Update access point, be prepared that Commsdat might be locked
+    TInt errCode( KErrLocked );
+    TInt retryCount( 0 );
+    
+    while( errCode == KErrLocked && retryCount < KRetryCount )
+        {
+        TRAP( errCode, iWLANRecord->ModifyL( *dbSession ) );
+
+        if ( errCode == KErrLocked )
+            {	
+            User::After( KRetryTimeout );
+            }	
+        retryCount++;	        
+        }
+    
+    if ( errCode )
+        {
+        // override previous ret value only when error happened        	    	
+        ret = errCode;
+        }
     
     CleanupStack::PopAndDestroy( dbSession );
     DEBUG("CHssIapHandler::ChangeSettingsL DONE");
-	return ret;
+    return ret;
     }
  
 // -----------------------------------------------------------------------------
@@ -557,8 +580,11 @@
     {
     DEBUG("CHssIapSettingsHandler::GetClientsIapsL");
     TBuf<32> buffer;                    // Temporary buffer for found UID from destination.
-    TUidName uidClient = aUId.Name();   // UID of the client.
     TUint32 iapId = 0;                  // IAP Identifiier.
+    TBuf<KIapNameLength> uidClient;     // UID of the client.
+    
+    uidClient.Copy( aUId.Name() );
+    ModifyClientUid( uidClient );
 
     RArray<TUint32> destArray = RArray<TUint32>( 10 );  // KCmArrayGranularity instead of 10
     CleanupClosePushL( destArray );
@@ -610,4 +636,23 @@
     CleanupStack::PopAndDestroy( &destArray );
     }
 
+// -----------------------------------------------------------------------------
+// ModifyClientUid
+// -----------------------------------------------------------------------------
+//
+void CHssIapHandler::ModifyClientUid( TDes& aUid )
+    {
+    DEBUG("CHssIapHandler::ModifyClientUid");
+    TInt indx = aUid.Find( KMark1 );
+    if ( KErrNotFound != indx )
+        {
+        aUid.Delete( indx, 1 );
+        indx = aUid.Find( KMark2 );
+        if ( KErrNotFound != indx )
+            {
+            aUid.Delete( indx, 1 );
+            }
+        }
+    }
+
 // End of File
--- a/hotspotfw/hsserver/src/hotspotsession.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/hotspotfw/hsserver/src/hotspotsession.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -38,6 +38,10 @@
 class CWlanMgmtClient;
 class MWlanMgmtNotifications;
 
+// Constants
+const TInt KSeparatorsLength = 4;    
+const TInt KBrowserUid = 0x2000AFCC; // WLAN Login UID
+
 // ============================ MEMBER FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
@@ -1112,9 +1116,30 @@
 void CHotSpotSession::AuthenticateL( const TDesC& aString )
     {
     DEBUG("CHotSpotSession::AuthenticateL()");
-
-    const TInt KBrowserUid = 0x2000AFCC; // hotspot browser application
-    HBufC* param = HBufC::NewLC( KMaxFileName );
+    
+    // Count IAP Id length
+    TInt iapIdLength ( 1 );
+    TInt iapId = iIapId;
+    while ( iapId >= 10 )
+        {
+        iapId = iapId / 10;
+        iapIdLength++;
+        }
+    
+    // Count Network Id length
+    TInt netIdLength ( 1 );
+    TInt netId = iNetId;
+    while ( netId >= 10 )
+        {
+        netId = netId / 10;
+        netIdLength++;
+        }
+    
+    TInt length = aString.Length() + 
+                  iapIdLength + 
+                  netIdLength + 
+                  KSeparatorsLength;
+    HBufC* param = HBufC::NewLC( length );
     _LIT(tmpString, "%d, %d, %S");
     param->Des().Format( tmpString, iIapId, iNetId, &aString );
     TUid uid( TUid::Uid( KBrowserUid ) );
--- a/wlanutilities/wlansniffer/aiplugin/inc/wsfactivewrappers.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/aiplugin/inc/wsfactivewrappers.h	Mon Jun 21 16:55:05 2010 +0300
@@ -81,8 +81,12 @@
     /**
      * Starts connecting
      * @since S60 5.2     
+     * @param aIapId WLAN IAP id to connect to.
+     * @param aConnectOnly ETrue if Connect selected
+     * @param aPersistence Persistence property of the IAP
      */
-    void Connect( TUint aIapID, TWsfIapPersistence aPersistence );
+    void Connect( TUint aIapID, TBool aConnectOnly, 
+                  TWsfIapPersistence aPersistence );
 
     /**
      * Starts refresh scan
--- a/wlanutilities/wlansniffer/aiplugin/inc/wsfaicontroller.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/aiplugin/inc/wsfaicontroller.h	Mon Jun 21 16:55:05 2010 +0300
@@ -366,12 +366,7 @@
         /**
          * Indicates whether Connect or Start Web browsing was selected
          */
-        TBool iShouldConnectOnly;
-        
-        /**
-         * Indicates whether access point needs testing
-         */
-        TBool iTestAccessPoint;
+        TBool iConnectOnly;
         
         /**
         * A pointer to CWsfActiveWrappers
--- a/wlanutilities/wlansniffer/aiplugin/inc/wsfconnectactivewrapper.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/aiplugin/inc/wsfconnectactivewrapper.h	Mon Jun 21 16:55:05 2010 +0300
@@ -62,8 +62,12 @@
     /**
      * Function for making the initial request
      * @since S60 5.2     
+     * @param aIapId WLAN IAP id to connect to.
+     * @param aConnectOnly ETrue if Connect selected
+     * @param aPersistence Persistence property of the IAP
      */
-    void Start( TUint aIapID, TWsfIapPersistence aPersistence );
+    void Start( TUint aIapID, TBool aConnectOnly, 
+                TWsfIapPersistence aPersistence );
 
 private:
 
@@ -131,6 +135,11 @@
     TUint iIapID;
     
     /**
+     * Indicates whether Connect or Start Web browsing was selected
+     */
+    TBool iConnectOnly;
+    
+    /**
      * Persistence value of IAP
      */
     TWsfIapPersistence iPersistence;
--- a/wlanutilities/wlansniffer/aiplugin/src/wsfactivewrappers.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/aiplugin/src/wsfactivewrappers.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -117,10 +117,11 @@
 // CWsfActiveWrappers::Connect
 // ----------------------------------------------------------------------------
 //
-void CWsfActiveWrappers::Connect( TUint aIapID, TWsfIapPersistence aPersistence )
+void CWsfActiveWrappers::Connect( TUint aIapID, TBool aConnectOnly, 
+                                  TWsfIapPersistence aPersistence )
     {
     LOG_ENTERFN( "CWsfActiveWrappers::Connect" );
-    iConnectActiveWrapper->Start( aIapID, aPersistence );
+    iConnectActiveWrapper->Start( aIapID, aConnectOnly, aPersistence );
     }
 
 
--- a/wlanutilities/wlansniffer/aiplugin/src/wsfaicontroller.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/aiplugin/src/wsfaicontroller.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -80,8 +80,7 @@
     iAiModel( NULL ),
     iUi( NULL ),
     iDbObserver( NULL ),
-    iShouldConnectOnly( EFalse ),
-    iTestAccessPoint( EFalse )
+    iConnectOnly( EFalse )
     {
     // null the pointers
     iConnectedWlan.iConnectionState = ENotConnected;
@@ -461,14 +460,10 @@
     if ( aResult == KErrNone )
         {
         iAiModel->SetConnected( ETrue );
-        if ( !iShouldConnectOnly )
+        if ( !iConnectOnly )
             {
             StartWebBrowserL( iUsedInfo );
             }
-        if ( iTestAccessPoint )
-            {
-            iModel->TestConnectedAccessPointL( iUsedInfo, iShouldConnectOnly );
-            }
         }
     else
         {
@@ -511,7 +506,7 @@
     else
         {
         LOG_WRITE("Start browser to connected network...");
-        iShouldConnectOnly = EFalse;
+        iConnectOnly = EFalse;
         StartWebBrowserL( iUsedInfo );
         }
     
@@ -558,8 +553,8 @@
     LOG_ENTERFN( "TWsfAiController::ConnectL" );
     
     _ASS_D( iModel );
-    iTestAccessPoint = aTestAccessPoint;
-    iShouldConnectOnly = aConnectOnly;
+    TBool testAccessPoint = aTestAccessPoint;
+    iConnectOnly = aConnectOnly;
     iUsedInfo = aInfo;
     
     // Prevent connections to ad-hoc + WPA 
@@ -602,29 +597,31 @@
             User::Leave( accessPointCreatedError );
             }
         ConnectingL( iUsedInfo.iIapId );
-        iTestAccessPoint = ETrue;
+        testAccessPoint = ETrue;
         }
     else if ( !iUsedInfo.iIapId )
         {
+        testAccessPoint = ETrue;
         // let the helper app do the query if necessary
         LOG_WRITE("AiHelper needs to be launched");
-        iTestAccessPoint = ETrue;
         iActiveWrappers->LaunchHelperApplicationL( iUsedInfo, 
-                                                   iShouldConnectOnly,
-                                                   iTestAccessPoint );
+                                                   iConnectOnly,
+                                                   testAccessPoint );
         }
     
     // Connect
     if ( iUsedInfo.iIapId )
         {
-        if ( iTestAccessPoint )
+        if ( testAccessPoint )
             {
-            iActiveWrappers->Connect( iUsedInfo.iIapId, EIapExpireOnDisconnect );
+            iActiveWrappers->Connect( iUsedInfo.iIapId, iConnectOnly, 
+                                      EIapExpireOnDisconnect );
             
             }
         else
             {
-            iActiveWrappers->Connect( iUsedInfo.iIapId, EIapPersistent );
+            iActiveWrappers->Connect( iUsedInfo.iIapId, iConnectOnly, 
+                                      EIapPersistent );
             }
         }
     // pop cleanup item 
--- a/wlanutilities/wlansniffer/aiplugin/src/wsfconnectactivewrapper.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/aiplugin/src/wsfconnectactivewrapper.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -102,12 +102,14 @@
 // CWsfConnectActiveWrapper::StartL
 // --------------------------------------------------------------------------
 //
-void CWsfConnectActiveWrapper::Start(TUint aIapID, TWsfIapPersistence aPersistence )
+void CWsfConnectActiveWrapper::Start( TUint aIapID, TBool aConnectOnly, 
+                                      TWsfIapPersistence aPersistence )
     {
     LOG_ENTERFN( "CWsfConnectActiveWrapper::Start" );
     Cancel(); // Cancel any request, just to be sure
     iState = EUninitialized;
     iIapID = aIapID;
+    iConnectOnly = aConnectOnly;
     iPersistence = aPersistence;
     SetActive();
     TRequestStatus* status = &iStatus;
@@ -127,7 +129,7 @@
         if ( iState == EUninitialized )
             {
             LOG_WRITE( "Start connect" );
-            iModel->ConnectL( iPckg, iIapID, iPersistence, iStatus );
+            iModel->ConnectL( iPckg, iIapID, iConnectOnly, iPersistence, iStatus );
             iState = EInitialized;
             SetActive(); // Tell scheduler a request is active
             }
--- a/wlanutilities/wlansniffer/engine/client/bwins/wsfclientu.def	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/client/bwins/wsfclientu.def	Mon Jun 21 16:55:05 2010 +0300
@@ -2,29 +2,29 @@
 	?SetIapPersistenceL@RWsfSession@@QAEHW4TWsfIapPersistence@@@Z @ 1 NONAME ; int RWsfSession::SetIapPersistenceL(enum TWsfIapPersistence)
 	?GetWlanList@RWsfSession@@QAEXAAV?$TPckgBuf@I@@AAVTPtr8@@AAVTRequestStatus@@@Z @ 2 NONAME ; void RWsfSession::GetWlanList(class TPckgBuf<unsigned int> &, class TPtr8 &, class TRequestStatus &)
 	?DisconnectWlanBearer@RWsfSession@@QAEXAAV?$TPckgBuf@H@@AAVTRequestStatus@@@Z @ 3 NONAME ; void RWsfSession::DisconnectWlanBearer(class TPckgBuf<int> &, class TRequestStatus &)
-	?RequestScanL@RWsfSession@@QAEHXZ @ 4 NONAME ; int RWsfSession::RequestScanL(void)
-	??0RWsfSession@@QAE@XZ @ 5 NONAME ; RWsfSession::RWsfSession(void)
-	?CancelNotifyEvent@RWsfSession@@QAEXXZ @ 6 NONAME ; void RWsfSession::CancelNotifyEvent(void)
-	?CancelAll@RWsfSession@@QAEXXZ @ 7 NONAME ; void RWsfSession::CancelAll(void)
-	?GetConnectedWlanDetailsL@RWsfSession@@QAEHAAVTWsfWlanInfo@@@Z @ 8 NONAME ; int RWsfSession::GetConnectedWlanDetailsL(class TWsfWlanInfo &)
-	?EnableScanL@RWsfSession@@QAEHXZ @ 9 NONAME ; int RWsfSession::EnableScanL(void)
-	?DisconnectWlanBearerL@RWsfSession@@QAEHXZ @ 10 NONAME ; int RWsfSession::DisconnectWlanBearerL(void)
-	?ConnectWlanBearer@RWsfSession@@QAEXAAV?$TPckgBuf@H@@KW4TWsfIapPersistence@@AAVTRequestStatus@@@Z @ 11 NONAME ; void RWsfSession::ConnectWlanBearer(class TPckgBuf<int> &, unsigned long, enum TWsfIapPersistence, class TRequestStatus &)
-	?UpdateWlanListL@RWsfSession@@QAEXPAVCWsfWlanInfoArray@@@Z @ 12 NONAME ; void RWsfSession::UpdateWlanListL(class CWsfWlanInfoArray *)
-	?NotifyEventL@RWsfSession@@QAEXAAVMWsfStateChangeObserver@@@Z @ 13 NONAME ; void RWsfSession::NotifyEventL(class MWsfStateChangeObserver &)
-	?MonitorAccessPointL@RWsfSession@@QAEXK@Z @ 14 NONAME ; void RWsfSession::MonitorAccessPointL(unsigned long)
-	?GetWlanListSize@RWsfSession@@QAEXAAV?$TPckgBuf@I@@AAVTRequestStatus@@@Z @ 15 NONAME ; void RWsfSession::GetWlanListSize(class TPckgBuf<unsigned int> &, class TRequestStatus &)
-	?AbortConnectingL@RWsfSession@@QAEXXZ @ 16 NONAME ; void RWsfSession::AbortConnectingL(void)
-	?ConnectWlanBearerL@RWsfSession@@QAEHKW4TWsfIapPersistence@@@Z @ 17 NONAME ; int RWsfSession::ConnectWlanBearerL(unsigned long, enum TWsfIapPersistence)
+	?GetConnectedWlanDetails@RWsfSession@@QAEXAAV?$TPckgBuf@H@@AAVTWsfWlanInfo@@AAVTRequestStatus@@@Z @ 4 NONAME ; void RWsfSession::GetConnectedWlanDetails(class TPckgBuf<int> &, class TWsfWlanInfo &, class TRequestStatus &)
+	?RequestScanL@RWsfSession@@QAEHXZ @ 5 NONAME ; int RWsfSession::RequestScanL(void)
+	??0RWsfSession@@QAE@XZ @ 6 NONAME ; RWsfSession::RWsfSession(void)
+	?ConnectWlanBearerL@RWsfSession@@QAEHKHW4TWsfIapPersistence@@@Z @ 7 NONAME ; int RWsfSession::ConnectWlanBearerL(unsigned long, int, enum TWsfIapPersistence)
+	?CancelNotifyEvent@RWsfSession@@QAEXXZ @ 8 NONAME ; void RWsfSession::CancelNotifyEvent(void)
+	?CancelAll@RWsfSession@@QAEXXZ @ 9 NONAME ; void RWsfSession::CancelAll(void)
+	?GetConnectedWlanDetailsL@RWsfSession@@QAEHAAVTWsfWlanInfo@@@Z @ 10 NONAME ; int RWsfSession::GetConnectedWlanDetailsL(class TWsfWlanInfo &)
+	?EnableScanL@RWsfSession@@QAEHXZ @ 11 NONAME ; int RWsfSession::EnableScanL(void)
+	?DisconnectWlanBearerL@RWsfSession@@QAEHXZ @ 12 NONAME ; int RWsfSession::DisconnectWlanBearerL(void)
+	?UpdateWlanListL@RWsfSession@@QAEXPAVCWsfWlanInfoArray@@@Z @ 13 NONAME ; void RWsfSession::UpdateWlanListL(class CWsfWlanInfoArray *)
+	?NotifyEventL@RWsfSession@@QAEXAAVMWsfStateChangeObserver@@@Z @ 14 NONAME ; void RWsfSession::NotifyEventL(class MWsfStateChangeObserver &)
+	?MonitorAccessPointL@RWsfSession@@QAEXK@Z @ 15 NONAME ; void RWsfSession::MonitorAccessPointL(unsigned long)
+	?GetWlanListSize@RWsfSession@@QAEXAAV?$TPckgBuf@I@@AAVTRequestStatus@@@Z @ 16 NONAME ; void RWsfSession::GetWlanListSize(class TPckgBuf<unsigned int> &, class TRequestStatus &)
+	?AbortConnectingL@RWsfSession@@QAEXXZ @ 17 NONAME ; void RWsfSession::AbortConnectingL(void)
 	?ConnectedAccountNameL@RWsfSession@@QAEPAVHBufC16@@XZ @ 18 NONAME ; class HBufC16 * RWsfSession::ConnectedAccountNameL(void)
-	?SetConnectWlanBearerResult@RWsfSession@@QAEXH@Z @ 19 NONAME ; void RWsfSession::SetConnectWlanBearerResult(int)
-	?AbortScanningL@RWsfSession@@QAEXXZ @ 20 NONAME ; void RWsfSession::AbortScanningL(void)
-	?RequestScan@RWsfSession@@QAEXAAV?$TPckgBuf@H@@AAVTRequestStatus@@@Z @ 21 NONAME ; void RWsfSession::RequestScan(class TPckgBuf<int> &, class TRequestStatus &)
-	?IsConnectedL@RWsfSession@@QAEHXZ @ 22 NONAME ; int RWsfSession::IsConnectedL(void)
-	?Close@RWsfSession@@QAEXXZ @ 23 NONAME ; void RWsfSession::Close(void)
-	?IsScanEnabledL@RWsfSession@@QAEHXZ @ 24 NONAME ; int RWsfSession::IsScanEnabledL(void)
-	?ControlDisconnectTimerL@RWsfSession@@QAEHI@Z @ 25 NONAME ; int RWsfSession::ControlDisconnectTimerL(unsigned int)
-	?Connect@RWsfSession@@QAEHXZ @ 26 NONAME ; int RWsfSession::Connect(void)
-	?DisableScanL@RWsfSession@@QAEHXZ @ 27 NONAME ; int RWsfSession::DisableScanL(void)
-	?GetConnectedWlanDetails@RWsfSession@@QAEXAAV?$TPckgBuf@H@@AAVTWsfWlanInfo@@AAVTRequestStatus@@@Z @ 28 NONAME ; void RWsfSession::GetConnectedWlanDetails(class TPckgBuf<int> &, class TWsfWlanInfo &, class TRequestStatus &)
+	?ConnectWlanBearer@RWsfSession@@QAEXAAV?$TPckgBuf@H@@KHW4TWsfIapPersistence@@AAVTRequestStatus@@@Z @ 19 NONAME ; void RWsfSession::ConnectWlanBearer(class TPckgBuf<int> &, unsigned long, int, enum TWsfIapPersistence, class TRequestStatus &)
+	?SetConnectWlanBearerResult@RWsfSession@@QAEXH@Z @ 20 NONAME ; void RWsfSession::SetConnectWlanBearerResult(int)
+	?AbortScanningL@RWsfSession@@QAEXXZ @ 21 NONAME ; void RWsfSession::AbortScanningL(void)
+	?RequestScan@RWsfSession@@QAEXAAV?$TPckgBuf@H@@AAVTRequestStatus@@@Z @ 22 NONAME ; void RWsfSession::RequestScan(class TPckgBuf<int> &, class TRequestStatus &)
+	?IsConnectedL@RWsfSession@@QAEHXZ @ 23 NONAME ; int RWsfSession::IsConnectedL(void)
+	?Close@RWsfSession@@QAEXXZ @ 24 NONAME ; void RWsfSession::Close(void)
+	?IsScanEnabledL@RWsfSession@@QAEHXZ @ 25 NONAME ; int RWsfSession::IsScanEnabledL(void)
+	?ControlDisconnectTimerL@RWsfSession@@QAEHI@Z @ 26 NONAME ; int RWsfSession::ControlDisconnectTimerL(unsigned int)
+	?Connect@RWsfSession@@QAEHXZ @ 27 NONAME ; int RWsfSession::Connect(void)
+	?DisableScanL@RWsfSession@@QAEHXZ @ 28 NONAME ; int RWsfSession::DisableScanL(void)
 
--- a/wlanutilities/wlansniffer/engine/client/eabi/wsfclientu.def	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/client/eabi/wsfclientu.def	Mon Jun 21 16:55:05 2010 +0300
@@ -12,19 +12,19 @@
 	_ZN11RWsfSession15UpdateWlanListLEP17CWsfWlanInfoArray @ 11 NONAME
 	_ZN11RWsfSession16AbortConnectingLEv @ 12 NONAME
 	_ZN11RWsfSession17CancelNotifyEventEv @ 13 NONAME
-	_ZN11RWsfSession17ConnectWlanBearerER8TPckgBufIiEm18TWsfIapPersistenceR14TRequestStatus @ 14 NONAME
-	_ZN11RWsfSession18ConnectWlanBearerLEm18TWsfIapPersistence @ 15 NONAME
+	_ZN11RWsfSession17ConnectWlanBearerER8TPckgBufIiEmi18TWsfIapPersistenceR14TRequestStatus @ 14 NONAME
+	_ZN11RWsfSession18ConnectWlanBearerLEmi18TWsfIapPersistence @ 15 NONAME
 	_ZN11RWsfSession18SetIapPersistenceLE18TWsfIapPersistence @ 16 NONAME
 	_ZN11RWsfSession19MonitorAccessPointLEm @ 17 NONAME
 	_ZN11RWsfSession20DisconnectWlanBearerER8TPckgBufIiER14TRequestStatus @ 18 NONAME
 	_ZN11RWsfSession21ConnectedAccountNameLEv @ 19 NONAME
 	_ZN11RWsfSession21DisconnectWlanBearerLEv @ 20 NONAME
 	_ZN11RWsfSession23ControlDisconnectTimerLEj @ 21 NONAME
-	_ZN11RWsfSession24GetConnectedWlanDetailsLER12TWsfWlanInfo @ 22 NONAME
-	_ZN11RWsfSession26SetConnectWlanBearerResultEi @ 23 NONAME
-	_ZN11RWsfSession5CloseEv @ 24 NONAME
-	_ZN11RWsfSession7ConnectEv @ 25 NONAME
-	_ZN11RWsfSessionC1Ev @ 26 NONAME
-	_ZN11RWsfSessionC2Ev @ 27 NONAME
-	_ZN11RWsfSession23GetConnectedWlanDetailsER8TPckgBufIiER12TWsfWlanInfoR14TRequestStatus @ 28 NONAME
+	_ZN11RWsfSession23GetConnectedWlanDetailsER8TPckgBufIiER12TWsfWlanInfoR14TRequestStatus @ 22 NONAME
+	_ZN11RWsfSession24GetConnectedWlanDetailsLER12TWsfWlanInfo @ 23 NONAME
+	_ZN11RWsfSession26SetConnectWlanBearerResultEi @ 24 NONAME
+	_ZN11RWsfSession5CloseEv @ 25 NONAME
+	_ZN11RWsfSession7ConnectEv @ 26 NONAME
+	_ZN11RWsfSessionC1Ev @ 27 NONAME
+	_ZN11RWsfSessionC2Ev @ 28 NONAME
 
--- a/wlanutilities/wlansniffer/engine/client/inc/wsfsession.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/client/inc/wsfsession.h	Mon Jun 21 16:55:05 2010 +0300
@@ -188,10 +188,12 @@
         * then starts a synchronous wait until the connection is established.
         * @since S60 5.0
         * @param aIapId The id of the IAP to connect to
+        * @param aConnectOnly ETrue if Connect selected
         * @param aPersistence The value of the persistence property
         * @return KErrNone if managed to connect, otherwise error code
         */
         IMPORT_C TInt ConnectWlanBearerL( TUint32 aIapId, 
+                                          TBool aConnectOnly,
                            TWsfIapPersistence aPersistence = EIapPersistent );
         
         /**
@@ -199,13 +201,15 @@
          * @since S60 5.2
          * @param aPckg request result
          * @param aIapId The id of the IAP to connect to
+         * @param aConnectOnly ETrue if Connect selected
          * @param aPersistence The value of the persistence property
          * @param aStatus The request status object used to contain 
          *        the completion status of the request.
          */
         IMPORT_C void ConnectWlanBearer( TPckgBuf<TBool>& aPckg,
                                          TUint32 aIapId, 
-                                         TWsfIapPersistence aPersistence,
+                                         TBool aConnectOnly,
+                                         TWsfIapPersistence aPersistence, 
                                          TRequestStatus& aStatus );
         
         /**
--- a/wlanutilities/wlansniffer/engine/client/src/wsfsession.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/client/src/wsfsession.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -480,7 +480,8 @@
 // ---------------------------------------------------------------------------
 //
 EXPORT_C TInt RWsfSession::ConnectWlanBearerL( TUint32 aIapId, 
-                                              TWsfIapPersistence aPersistence )
+                                               TBool aConnectOnly,
+                                               TWsfIapPersistence aPersistence )
     {
     LOG_ENTERFN( "RWsfSession::ConnectWlanBearerL" );
     LOG_WRITEF( "IAP id = %d", aIapId );
@@ -495,8 +496,10 @@
     CWsfActiveWaiter *waiter = CWsfActiveWaiter::NewL();
     CleanupStack::PushL( waiter );
 
-    SendReceive( ESnifferCmdConnect, TIpcArgs( &pckg, aIapId, aPersistence ), 
-                                                             waiter->iStatus );
+    SendReceive( ESnifferCmdConnect, 
+                 TIpcArgs( &pckg, aIapId, aConnectOnly, aPersistence ), 
+                 waiter->iStatus );
+    
     waiter->WaitForRequest();
     LOG_WRITEF( "message[%d] call returned %d", 
                 ESnifferCmdConnect,
@@ -534,6 +537,7 @@
 //
 EXPORT_C void RWsfSession::ConnectWlanBearer( TPckgBuf<TBool>& aPckg,
                                                TUint32 aIapId, 
+                                               TBool aConnectOnly,
                                                TWsfIapPersistence aPersistence,
                                                TRequestStatus& aStatus )
     {
@@ -544,8 +548,9 @@
     iEventHandler->UnBlockNextConnectedEvent();
     iEventHandler->SetConnecting( ETrue );
 
-    SendReceive( ESnifferCmdConnect, TIpcArgs( &aPckg, aIapId, aPersistence ), 
-                                                aStatus );
+    SendReceive( ESnifferCmdConnect, 
+                 TIpcArgs( &aPckg, aIapId, aConnectOnly, aPersistence ), 
+                 aStatus );
     }
 
 
--- a/wlanutilities/wlansniffer/engine/server/group/server.mmp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/server/group/server.mmp	Mon Jun 21 16:55:05 2010 +0300
@@ -40,6 +40,7 @@
 SOURCE                  wsfservercloser.cpp
 SOURCE                  wsfwlanbearerconnectionmonitor.cpp
 SOURCE                  wsfactivewaiter.cpp
+SOURCE                  wsfict.cpp
 
 
 // own headers
@@ -70,6 +71,7 @@
 LIBRARY     commdb.lib
 LIBRARY     cmmanagerdatabase.lib
 LIBRARY     cmmanager.lib
+LIBRARY     ictsclientinterface.lib
 
 LIBRARY     esock.lib 
 LIBRARY     charconv.lib
--- a/wlanutilities/wlansniffer/engine/server/inc/wsfengine.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/server/inc/wsfengine.h	Mon Jun 21 16:55:05 2010 +0300
@@ -143,10 +143,13 @@
         * Connects to the given IAP
         * @since S60 5.0
         * @param aIapId The IAP to connect to
+        * @param aConnectOnly ETrue if Connect selected
         * @param aPersistence Persistence property of the IAP
         * @return KErrNone if successful, otherwise error code
         */
-        TInt ConnectWlanL( TUint32 aIapId, TWsfIapPersistence aPersistence );
+        TInt ConnectWlanL( TUint32 aIapId,
+                           TBool aConnectOnly,
+                           TWsfIapPersistence aPersistence );
 
         /**
         * Disconnects the active WLAN connection
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/engine/server/inc/wsfict.h	Mon Jun 21 16:55:05 2010 +0300
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Class header for CWsfIct
+*
+*/
+
+
+
+#ifndef C_WSFICT_H
+#define C_WSFICT_H
+
+
+//  EXTERNAL INCLUDES
+#include <e32base.h>
+#include <ictsclientinterface.h>
+
+
+//  FORWARD DECLARATIONS
+
+
+//  CLASS DEFINITION
+/**
+ * Class to monitor and control ICT interface
+ *
+ * @lib wsfserver.exe
+ * @since S60 5.2
+ */
+NONSHARABLE_CLASS( CWsfIct ): public CBase,
+                              public MIctsObserver
+    {
+    public:     // Constructors and destructor
+
+        /**
+        * Factory function.
+        * @since S60 5.2
+        * @return CWsfIct instance
+        */
+        IMPORT_C static CWsfIct* NewL();
+
+        /**
+        * Factory function.
+        * @since S60 5.2
+        * @return CWsfIct instance
+        */
+        IMPORT_C static CWsfIct* NewLC();
+
+        IMPORT_C ~CWsfIct();
+
+    private:    // Constructors
+        CWsfIct();
+
+        /**
+        * Factory function.
+        * @since S60 5.2
+        */
+        void ConstructL();
+
+    public:     // New methods
+        
+        /**
+        * Tests the connected WLAN access point
+        * @since S60 5.2
+        * @param aIapId Id of the connection method
+        */
+        void TestConnectedAccessPointL( TUint aIapId );
+        
+        /**
+        * Initializes ICT parameters
+        * @since S60 5.2
+        * @param ETrue if ICT needs to be executed
+        * @param aIapId Id of the connection method
+        * @param aConnectOnly ETrue if connect only case, 
+        * EFalse if browser is launched after successful connection.
+        */
+        void InitializeIctL( TBool aTestAccessPoint,
+                             TUint aIapId,
+                             TBool aConnectOnly );
+
+    public: // from MIctsObserver
+
+        /**
+        * Called by ICTS during/after connectivity test
+        * @since S60 5.2
+        * @param aResult Result code of the connectivity test
+        * @param aString Parameter to hold auxiliary data
+        */
+        void ConnectivityObserver( TIctsTestResult aResult, const TDesC& aString );
+
+
+    private:  // New methods
+        
+        /**
+        * Starts WLAN Login application
+        * @param aString Contains redirect URL
+        */  
+        void LaunchWlanLoginL( const TDesC& aString );
+        
+        /**
+        * Moves the IAP to internet SNAP
+        * @param aIapId Id of the connection method
+        */  
+        void MoveToInternetSnapL( const TUint32 aIapId );
+
+
+    private:    // Data
+
+        /**
+        * Id of currently connected IAP (if applicable)
+        */
+        TUint iIapId;
+        
+        /**
+        * Network id of currently connected IAP (if applicable)
+        */
+        TUint iNetId;
+        
+        /**
+        * Indicates if "Connect" or "Start Web browsing" is selected.
+        */
+        TBool iConnectOnly;
+        
+        /**
+        * ICT class. Owned.
+        */
+        CIctsClientInterface* iIct;
+
+    };
+
+#endif      //  C_WSFICT_H
+
+// End of file
--- a/wlanutilities/wlansniffer/engine/server/inc/wsfwlanbearerconnectionmonitor.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/server/inc/wsfwlanbearerconnectionmonitor.h	Mon Jun 21 16:55:05 2010 +0300
@@ -36,6 +36,7 @@
 //  FORWARD DECLARATIONS
 class MWsfWlanMonitorObserver;
 class MWsfServerCloserAdapter;
+class CWsfIct;
 
 
 //  CLASS DEFINITION
@@ -150,9 +151,14 @@
         /*
         * Connects to the given IAP
         * @since S60 5.0
+        * @param aIapId WLAN IAP id to connect to.
+        * @param aConnectOnly ETrue if Connect selected
+        * @param aTestAccessPoint ETrue if accesspoint needs testing
         * @return KErrNone on success, error code otherwise
         */
-        TInt ConnectBearer( TUint32 aIapId );
+        TInt ConnectBearer( TUint32 aIapId,
+                            TBool aConnectOnly,
+                            TBool aTestAccessPoint );
 
         /*
         * Disconnects active connection
@@ -401,6 +407,11 @@
         */
         MWsfServerCloserAdapter& iServerCloser;
         
+        /**
+        * Reference to ICT handler
+        */
+        CWsfIct* iIct;
+        
     };
 
 
--- a/wlanutilities/wlansniffer/engine/server/inc/wsfwlanscanner.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/server/inc/wsfwlanscanner.h	Mon Jun 21 16:55:05 2010 +0300
@@ -136,9 +136,14 @@
             EIdle,
             
             /**
+            * Do broadcast scan
+            */
+            EBroadcastScan,
+            
+            /**
             * Processing broadcast scan results
             */
-            EBroadcastScan,
+            EProcessBroadcastScan,
             
             /**
             * Processing direct scan results
@@ -572,9 +577,24 @@
         TBuf8<KWlanMaxAccessPointNameLength> iConnectedSsidOrIap;
         
 		/**
-        * Array containing the available IAP IDs 
+        * Array containing the available IAP IDs and Signal Strengths
+        */
+        RArray<TWlanIapAvailabilityData> iAvailableIaps;
+        
+        /**
+        * Cache lifetime.
+        * Parameter needed for issuing "get available WLAN IAPs"
+        * request.
         */
-        RArray<TUint> iAvailableIaps;
+        TInt iCacheLifetime;
+        
+        /**
+        * Max Delay.
+        * Parameter needed for issuing "get available WLAN IAPs"
+        * request.
+        */
+        TUint iMaxDelay; 
+
         
     };
 
--- a/wlanutilities/wlansniffer/engine/server/src/wsfengine.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/server/src/wsfengine.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -481,6 +481,38 @@
     RCmManagerExt cmMgr;
     cmMgr.OpenLC();
     
+    RArray<TUint32> cmIds;
+    CleanupClosePushL( cmIds );
+    cmMgr.ConnectionMethodL( cmIds, ETrue, ETrue, EFalse );
+    TBool foundFromUncategorized = EFalse;
+    
+    for ( TInt k = 0; k < cmIds.Count(); k++ )
+        {
+        RCmConnectionMethodExt cm;
+        TRAPD( error, cm = cmMgr.ConnectionMethodL( cmIds[k] ) );
+        if ( KErrNone == error )
+            {
+            CleanupClosePushL( cm );
+
+            TUint iapId = cm.GetIntAttributeL( CMManager::ECmIapId );
+            if ( iapId == aIapId )
+                {
+                LOG_WRITE( "IAP is uncategorized" );
+                foundFromUncategorized = ETrue;
+                }
+            CleanupStack::PopAndDestroy( &cm );
+            }
+        }
+    
+    CleanupStack::PopAndDestroy( &cmIds );
+    
+    if ( !foundFromUncategorized )
+        {
+        LOG_WRITE( "Not deleting IAP since it is in SNAP" );
+        CleanupStack::PopAndDestroy( &cmMgr );
+        return;
+        }
+    
     RCmConnectionMethodExt ictCm = cmMgr.ConnectionMethodL( aIapId );
     CleanupClosePushL( ictCm );
 
@@ -542,7 +574,8 @@
 // CWsfEngine::ConnectWlanL
 // ----------------------------------------------------------------------------
 //
-TInt CWsfEngine::ConnectWlanL( TUint32 aIapId, 
+TInt CWsfEngine::ConnectWlanL( TUint32 aIapId,
+                               TBool aConnectOnly,
                                TWsfIapPersistence aPersistence )
     {
     LOG_ENTERFN( "CWsfEngine::ConnectWlanL" );
@@ -568,7 +601,9 @@
         iSuppressIapDeletion = EFalse;
         }
 
-    TInt ret = iWlanBearerMonitor->ConnectBearer( aIapId );
+    TInt ret = iWlanBearerMonitor->ConnectBearer( aIapId, 
+                                                  aConnectOnly,
+                                                  aPersistence != EIapPersistent );
     
     if ( !ret )
         {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/engine/server/src/wsfict.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -0,0 +1,371 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CWsfIct
+*
+*/
+
+
+//  EXTERNAL INCLUDES
+#include <apgcli.h>
+#include <apgtask.h>
+#include <ictsclientinterface.h>
+#include <cmmanagerext.h>
+#include <cmdestinationext.h>
+#include <cmpluginwlandef.h>
+
+//  CLASS HEADER
+#include "wsfict.h"
+#include "wsflogger.h"
+
+//  INTERNAL INCLUDES
+
+using namespace CMManager;
+
+/**
+* UID of Wlan Login application (hsbrowser)
+* used when launching WLAN Login application
+*/
+static const TInt KBrowserUid = { 0x2000AFCC };
+
+/**
+* Length of a needed separators
+* used when launching WLAN Login application
+*/
+const TInt KSeparatorsLength = 4;
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfIct* CWsfIct::NewL()
+    {
+    CWsfIct* self = CWsfIct::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::NewLC
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfIct* CWsfIct::NewLC()
+    {
+    CWsfIct* self = new( ELeave ) CWsfIct;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::~CWsfIct
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CWsfIct::~CWsfIct()
+    {
+    LOG_ENTERFN( "CWsfIct::~CWsfIct" );
+    if ( iIct )
+        {
+        LOG_WRITE( "ict cancel" );
+        TRAP_IGNORE( iIct->CancelStartL() );
+        delete iIct;
+        iIct = NULL;
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::CWsfIct
+// ----------------------------------------------------------------------------
+//
+CWsfIct::CWsfIct(): iConnectOnly( EFalse )
+    {
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CWsfIct::ConstructL()
+    {
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::ConnectivityObserver
+// ----------------------------------------------------------------------------
+//
+void CWsfIct::ConnectivityObserver( TIctsTestResult aResult, 
+                                    const TDesC& aString )
+    {
+    LOG_ENTERFN( "CWsfIct::ConnectivityObserver" );
+    LOG_WRITEF( "ICTS result: %d", aResult );
+    
+    // check the result
+    switch ( aResult )
+        {
+        case EConnectionOk:
+            {
+            // test succeeded
+            TRAP_IGNORE( MoveToInternetSnapL( iIapId ) );
+            LOG_WRITE( "ICT: EConnectionOk" );
+            break;            
+            }
+            
+        case EConnectionNotOk:
+            {
+            // test was run but it failed
+            LOG_WRITE( "ICT: EConnectionNotOk" );
+            break;
+            }
+        case EHttpAuthenticationNeeded:
+            {
+            // test was run but HTTP authentication is required
+            LOG_WRITE( "ICT: EHttpAuthenticationNeeded" );
+            if ( iConnectOnly )
+                {
+                // Connect selected. WLAN Login needed.
+                TRAP_IGNORE( LaunchWlanLoginL(aString) );
+                }    
+            break;
+            }    
+        case ETimeout:
+            {
+            LOG_WRITE( "ICT: ETimeout" );
+            break;
+            }
+            
+        default:
+            {
+            _LIT( KIctPanic, "ICT result" );
+            User::Panic( KIctPanic, aResult );
+            }
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CWsfIct::LaunchWlanLoginL()
+// -----------------------------------------------------------------------------
+//    
+void CWsfIct::LaunchWlanLoginL( const TDesC& aString )
+    {   
+    LOG_ENTERFN( "CWsfIct::LaunchWlanLoginL" );
+      
+    // Count IAP Id length
+    TInt iapIdLength ( 1 );
+    TInt iapId = iIapId;
+    while ( iapId >= 10 )
+        {
+        iapId = iapId/10;
+        iapIdLength++;
+        }
+  
+    // Count Network Id length
+    TInt netIdLength ( 1 );
+    TInt netId = iNetId;
+    while ( netId >= 10 )
+        {
+        netId = netId/10;
+        netIdLength++;
+        }
+    
+    TInt length = aString.Length() + 
+                  iapIdLength + 
+                  netIdLength + 
+                  KSeparatorsLength;
+    HBufC* param = HBufC::NewLC( length );
+    _LIT(tmpString, "%d, %d, %S");
+    param->Des().Format( tmpString, 
+                         iIapId, 
+                         iNetId, 
+                         &aString );
+    TUid uid( TUid::Uid( KBrowserUid ) );
+    TThreadId id;
+    
+    RApaLsSession appArcSession;
+    User::LeaveIfError( appArcSession.Connect() ); 
+    CleanupClosePushL( appArcSession );
+        
+    TInt err = appArcSession.StartDocument( *param, TUid::Uid( KBrowserUid ), id );
+    if ( err != KErrNone )
+        {
+        LOG_ENTERFN( "CWsfIct::LaunchWlanLoginL failed" );
+        }
+    CleanupStack::PopAndDestroy( &appArcSession );
+    CleanupStack::PopAndDestroy( param );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::MoveToInternetSnapL
+// ----------------------------------------------------------------------------
+//
+void CWsfIct::MoveToInternetSnapL( const TUint32 aIapId )
+    {
+	LOG_ENTERFN( "CWsfIct::MoveToInternetSnapL" );
+    RCmManagerExt cmManager;
+    cmManager.OpenL();
+    CleanupClosePushL( cmManager );
+    
+    // Check that is IAP uncategorized
+    RArray<TUint32> cmIds;
+    CleanupClosePushL( cmIds );
+    cmManager.ConnectionMethodL( cmIds, ETrue, ETrue, EFalse );
+    TBool foundFromUncategorized = EFalse;
+    
+    for ( TInt k = 0; k < cmIds.Count(); k++ )
+        {
+        RCmConnectionMethodExt cm;
+        TRAPD( error, cm = cmManager.ConnectionMethodL( cmIds[k] ) );
+        if ( KErrNone == error )
+            {
+            CleanupClosePushL( cm );
+
+            TUint iapId = cm.GetIntAttributeL( CMManager::ECmIapId );
+            if ( iapId == aIapId )
+                {
+                LOG_WRITE( "IAP is uncategorized" );
+                foundFromUncategorized = ETrue;
+                }
+            CleanupStack::PopAndDestroy( &cm );
+            }
+        }
+    
+    CleanupStack::PopAndDestroy( &cmIds );
+    
+    if ( !foundFromUncategorized )
+        {
+        LOG_WRITE( "Not moving IAP since it is in SNAP" );
+        CleanupStack::PopAndDestroy( &cmManager );
+        return;
+        }
+    
+    // Read all destination(SNAP) settings into an array
+    RArray<TUint32> destinations;
+    CleanupClosePushL( destinations );
+    
+    cmManager.AllDestinationsL( destinations );
+    RCmDestinationExt destination;
+    // Loop through each destination
+    for( TInt i = 0; i < destinations.Count(); i++ )
+        {
+        destination = cmManager.DestinationL( destinations[i] );
+        CleanupClosePushL( destination ); 
+        // Internet destination will always exist in the system.
+        // Internet destination will have ESnapPurposeInternet 
+        // set in its metadata.
+        if ( destination.MetadataL( CMManager::ESnapMetadataPurpose ) == 
+                                    CMManager::ESnapPurposeInternet )
+            {
+            RCmConnectionMethodExt iap = cmManager.ConnectionMethodL( aIapId );
+            CleanupClosePushL( iap );     
+            LOG_WRITE( "Move Iap to internet destination" );
+            destination.AddConnectionMethodL( iap );
+            destination.UpdateL();
+            CleanupStack::PopAndDestroy( &iap ); 
+            }
+        CleanupStack::PopAndDestroy( &destination ); 
+        }
+    CleanupStack::PopAndDestroy( &destinations ); 
+    CleanupStack::PopAndDestroy( &cmManager ); 
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::TestConnectedAccessPointL
+// ----------------------------------------------------------------------------
+//
+void CWsfIct::TestConnectedAccessPointL( TUint aIapId )
+    {
+    LOG_ENTERFN( "CWsfIct::TestConnectedAccessPointL" );
+    if ( !aIapId || aIapId != iIapId )
+        {
+        // the wlaninfo must already contain a valid IAP id
+        LOG_WRITE( "invalid IAP id" );
+        return;
+        }
+
+    if ( iIct )
+        {
+        iIct->CancelStartL();
+        delete iIct;
+        iIct = NULL;
+        }
+
+    LOG_WRITE( "starting ICT test..." );
+
+    iIct = CIctsClientInterface::NewL( iIapId, iNetId, *this );
+    LOG_WRITE( "ICT created" );
+    iIct->StartL();
+    LOG_WRITE( "ICT: started" );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CWsfIct::InitializeIctL
+// ----------------------------------------------------------------------------
+//
+void CWsfIct::InitializeIctL( TBool aTestAccessPoint,
+                              TUint aIapId,
+                              TBool aConnectOnly )
+    {
+    LOG_ENTERFN( "CWsfIct::InitializeIct" );
+
+    LOG_WRITEF( "IAP id = %d aTestAccessPoint = %d aConnectOnly = %d", 
+                aIapId, aTestAccessPoint, aConnectOnly );
+    
+    if ( !aIapId || !aTestAccessPoint )
+        {
+        // the wlaninfo must already contain a valid IAP id 
+        // and check that IAP needs testing
+        LOG_WRITE( "ICT not initialized" );
+        iConnectOnly = EFalse;
+        iIapId = 0;
+        iNetId = 0;
+        return;
+        }
+    
+    // set variables
+    iConnectOnly = aConnectOnly;
+    iIapId = aIapId;
+
+    if ( iIct )
+        {
+        iIct->CancelStartL();
+        delete iIct;
+        iIct = NULL;
+        }
+
+    // get network Id
+    RCmManagerExt cmManager;
+    cmManager.OpenL();
+    CleanupClosePushL(cmManager);
+
+    RCmConnectionMethodExt cm = cmManager.ConnectionMethodL(iIapId);
+    CleanupClosePushL(cm);
+
+    iNetId = cm.GetIntAttributeL(CMManager::ECmNetworkId);
+    
+    LOG_WRITEF( "Network Id=%d ", iNetId );
+
+    CleanupStack::PopAndDestroy(&cm);
+    CleanupStack::PopAndDestroy(&cmManager);
+    }
+    
+// End of file
+
--- a/wlanutilities/wlansniffer/engine/server/src/wsfsession.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/server/src/wsfsession.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -590,8 +590,9 @@
     {
     LOG_ENTERFN( "CWsfSession::ConnectWlanL" );    
     TUint32 iapId( aMessage.Int1() );
-    TWsfIapPersistence persistence( TWsfIapPersistence( aMessage.Int2() ) );
-    TPckgBuf<TInt> p( iServer.Engine()->ConnectWlanL( iapId, persistence ) );
+    TBool connectOnly( aMessage.Int2() );
+    TWsfIapPersistence persistence( TWsfIapPersistence( aMessage.Int3() ) );
+    TPckgBuf<TInt> p( iServer.Engine()->ConnectWlanL( iapId, connectOnly, persistence ) );
     aMessage.WriteL( 0, p );
     }
     
--- a/wlanutilities/wlansniffer/engine/server/src/wsfwlanbearerconnectionmonitor.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/server/src/wsfwlanbearerconnectionmonitor.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -39,6 +39,7 @@
 #include "wsfactivewaiter.h"
 #include "wsfservercloseradapter.h"
 #include "wsfcommon.h"
+#include "wsfict.h"
 
 
 //  LOCAL DEFINITIONS
@@ -148,6 +149,8 @@
         }
 
     delete iClientPoll;
+    
+    delete iIct;
 
     iCmMgr.Close();
     }
@@ -179,6 +182,7 @@
     iCmMgr.OpenL();
     iMonitor.ConnectL();
     iClientPoll = CPeriodic::NewL( CActive::EPriorityLow );
+    iIct = CWsfIct::NewL();
     FindWlanBearerConnectedL();
     }
     
@@ -425,7 +429,9 @@
 // CWsfWlanBearerConnectionMonitor::ConnectBearer
 // ---------------------------------------------------------------------------
 //
-TInt CWsfWlanBearerConnectionMonitor::ConnectBearer( TUint32 aIapId )
+TInt CWsfWlanBearerConnectionMonitor::ConnectBearer( TUint32 aIapId,
+                                                     TBool aConnectOnly,
+                                                     TBool aTestAccessPoint )
     {
     LOG_ENTERFN( "CWsfWlanBearerConnectionMonitor::ConnectBearer" );
     
@@ -445,6 +451,13 @@
         iConnectionOwned = ETrue;
         iServerCloser.WaitForOwnedConnection( ETrue );
 
+        TRAPD( err, iIct->InitializeIctL( aTestAccessPoint, aIapId, 
+                                          aConnectOnly ) );
+        if ( err )
+            {
+            LOG_WRITEF( "Ict initialization failed error = %d", err );
+            }
+        
         SetActive();
         TRequestStatus* status = &iStatus;
         User::RequestComplete( status, KErrNone );
@@ -1069,10 +1082,16 @@
                            TCallBack( CheckClientCount, this ) );
                                 
             LOG_WRITE( "connection client polling started" );
-
+            
             // notify observers of the connection name
             iObserver->ConnectionEstablishedL( iWlanNetworkName );
             
+            TRAPD( err, iIct->TestConnectedAccessPointL( iConnIap ) );
+            if ( err )
+                {
+                LOG_WRITEF( "Ict start failed error = %d", err );
+                }
+
             iConnectingState = ECsConnected;
             break;
             }
--- a/wlanutilities/wlansniffer/engine/server/src/wsfwlanscanner.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/engine/server/src/wsfwlanscanner.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -159,6 +159,7 @@
     LOG_ENTERFN( "CWsfWlanScanner::DoCancel" );
     iTimer.Cancel();
 #ifndef __WINS__
+    iWlanMgmtClient->CancelGetAvailableIaps();
     iWlanMgmtClient->CancelGetScanResults();
 #endif    
     iScanState = EIdle;    
@@ -176,8 +177,8 @@
     /*
      * Scan logic
      * 1. Get available IAPs - state = EIdle
-     * 2. Do broadcast scan - state = EIdle
-     * 3. Process broadcast scan results - state = EBroadcastScan
+     * 2. Do broadcast scan - state = EBroadcastScan
+     * 3. Process broadcast scan results - state = EProcessBroadcastScan
      * 4. Do direct scans for remaining known networks
      *    from step 2. Get available IAPs - state = EDirectScan
      * 5. Add connected network - state = EFinished
@@ -186,7 +187,7 @@
 
     if ( iScanState == EIdle )
         {
-        LOG_WRITE( "broadcast scan phase" );
+        LOG_WRITE( "Get available IAPs scan phase" );
 
         // prepare things for direct scans
         PrepareDirectScan();
@@ -196,16 +197,46 @@
             {
             iObserver->WlanScanStarted();
             }
-
         
 #ifndef __WINS__
         // get available iaps
         // (this only shows iaps with security mode matching to scan results
         // and  also finds hidden wlans for which an iap has been configured)
         iAvailableIaps.Reset();
-        iWlanMgmtClient->GetAvailableIaps( iAvailableIaps );
+        iWlanMgmtClient->GetAvailableIaps( iCacheLifetime, 
+                                           iMaxDelay, 
+                                           EFalse, 
+                                           iStatus, 
+                                           iAvailableIaps );
+        SetActive();
+#else
+        // for testing
+        SetActive();
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete( status, KErrNone );
+#endif 
+        iScanState = EBroadcastScan;
+        }
         
-		// do broadcast scan
+    else if ( iScanState == EBroadcastScan )
+        {
+        LOG_WRITEF( "GetAvailableIaps returned iStatus=%d", iStatus.Int() );
+        if ( iStatus.Int() )
+            {
+            LOG_WRITE( "Error in getting available IAPs - leave" );
+            User::Leave( iStatus.Int() );
+            }
+        
+#ifdef _DEBUG
+        for ( TInt i = 0; i < iAvailableIaps.Count(); ++i )
+            {
+            LOG_WRITEF( "iAvailableIaps array index[%d] IapId[%d] rssi[%d]", i,
+                        iAvailableIaps[i].iIapId, iAvailableIaps[i].iRssi );
+            }
+#endif
+    
+#ifndef __WINS__ 
+        // do broadcast scan
         iWlanMgmtClient->GetScanResults( iStatus, *iScanInfo );
         SetActive();
 #else
@@ -213,12 +244,11 @@
         SetActive();
         TRequestStatus* status = &iStatus;
         User::RequestComplete( status, KErrNone );
-#endif     
-        
-        iScanState = EBroadcastScan;
+#endif 
+        iScanState = EProcessBroadcastScan;
         }
         
-    else if ( iScanState == EBroadcastScan )
+    else if ( iScanState == EProcessBroadcastScan )
         {
         // process broadcast scan results
         DoScanForNetworksL();
@@ -354,6 +384,8 @@
             iTimer.After( iStatus, 
                           TTimeIntervalMicroSeconds32( iScanningInterval ) );
             Cancel();
+            iCacheLifetime = 0;
+            iMaxDelay = 0;
             SetActive();
             }
         
@@ -440,6 +472,7 @@
                 LOG_WRITE( "Info found" );
                 TWsfWlanInfo* temp = matchArray[0];
                 temp->iConnectionState = EConnected;
+                temp->iIapId = connectedInfo->iIapId;
                 temp->iSsid.Copy( connectedSsidOrIap );
                 temp->iNetworkName.Zero();
                 }
@@ -530,7 +563,7 @@
                                       &Keap: &KNullDesC );
         HBufC16 *ssid = TWsfWlanInfo::GetSsidAsUnicodeLC( wi->iSsid );
         
-        LOG_WRITEF( "[%S] %S %S %S", ssid, sm, psk, 
+        LOG_WRITEF( "[%S] IapId=%d %S %S %S", ssid, wi->iIapId, sm, psk, 
                     wi->iVisibility? &KNullDesC: &Khidden );
         CleanupStack::PopAndDestroy( ssid );
         }
@@ -565,6 +598,8 @@
         iTimer.Cancel();
         iTimer.After( iStatus, 
                       TTimeIntervalMicroSeconds32( iScanningInterval ) );
+        iCacheLifetime = 0;
+        iMaxDelay = 0;
         SetActive();    
         }
         
@@ -604,6 +639,8 @@
         if ( !iShowAvailability )
             {
             // in case show wlan availability is off, carry out a scan now
+            iCacheLifetime = 0;
+            iMaxDelay = 0;
             SetActive();
             TRequestStatus* status = &iStatus;
             User::RequestComplete( status, KErrNone );
@@ -653,7 +690,8 @@
         // we have been waiting for the timer to complete
         // cancel it manually
         Cancel();
-        
+        iCacheLifetime = 0;
+        iMaxDelay = 0;
         // then complete ourselves
         SetActive();
         TRequestStatus* status = &iStatus;
@@ -684,6 +722,8 @@
             // still, life goes on
             iTimer.After( iStatus, TTimeIntervalMicroSeconds32( 
                                                         iScanningInterval ) );
+            iCacheLifetime = 0;
+            iMaxDelay = 0;
             SetActive();        
             }
         }
@@ -710,6 +750,8 @@
     LOG_ENTERFN( "CWsfWlanScanner::BssidChanged" );
     if ( iScanState == EIdle && !IsActive() )
         {
+        iCacheLifetime = -1;
+        iMaxDelay = 0;
         // complete ourselves
         SetActive();
         TRequestStatus* status = &iStatus;
@@ -727,6 +769,8 @@
     LOG_ENTERFN( "CWsfWlanScanner::BssLost" );
     if ( iScanState == EIdle && !IsActive() )
         {
+        iCacheLifetime = -1;
+        iMaxDelay = 0;
         // complete ourselves
         SetActive();
         TRequestStatus* status = &iStatus;
@@ -744,6 +788,8 @@
     LOG_ENTERFN( "CWsfWlanScanner::BssRegained" );
     if ( iScanState == EIdle && !IsActive() )
         {
+        iCacheLifetime = -1;
+        iMaxDelay = 0;
         // complete ourselves
         SetActive();
         TRequestStatus* status = &iStatus;
@@ -761,6 +807,8 @@
     LOG_ENTERFN( "CWsfWlanScanner::NewNetworksDetected" );
     if ( iScanState == EIdle && !IsActive() )
         {
+        iCacheLifetime = -1;
+        iMaxDelay = 0;
         // complete ourselves
         SetActive();
         TRequestStatus* status = &iStatus;
@@ -778,6 +826,8 @@
     LOG_ENTERFN( "CWsfWlanScanner::OldNetworksLost" );
     if ( iScanState == EIdle && !IsActive() )
         {
+        iCacheLifetime = -1;
+        iMaxDelay = 0;
         // complete ourselves
         SetActive();
         TRequestStatus* status = &iStatus;
@@ -795,6 +845,8 @@
     LOG_ENTERFN( "CWsfWlanScanner::TransmitPowerChanged" );
     if ( iScanState == EIdle && !IsActive() )
         {
+        iCacheLifetime = -1;
+        iMaxDelay = 0;
         // complete ourselves
         SetActive();
         TRequestStatus* status = &iStatus;
@@ -812,6 +864,8 @@
     LOG_ENTERFN( "CWsfWlanScanner::RssChanged" );
     if ( iScanState == EIdle && !IsActive() )
         {
+        iCacheLifetime = -1;
+        iMaxDelay = 0;
         // complete ourselves
         SetActive();
         TRequestStatus* status = &iStatus;
@@ -957,12 +1011,13 @@
     // start by making sure the scan array is empty
     iScanArray->Reset();    
 
-    LOG_WRITEF( "GetScanResults returned %d", iStatus.Int() );
+    LOG_WRITEF( "GetScanResults returned iStatus=%d", iStatus.Int() );
     
     if ( iStatus.Int() )
         {
         // if the status is not KErrNone, we cannot be sure that iScanInfo
         // doesn't cause a crash, so it's better to leave
+        LOG_WRITE( "Error in getting scan result - leave" );
         User::Leave( iStatus.Int() );
         }
    
@@ -978,7 +1033,7 @@
         TBool addToArray( ETrue ); 
         TWsfWlanInfo* availableInfo = new ( ELeave ) TWsfWlanInfo();       
         CleanupStack::PushL( availableInfo );
-        availableInfo->iIapId = iAvailableIaps[i];
+        availableInfo->iIapId = iAvailableIaps[i].iIapId;
         TRAPD( error, GetWlanInfoFromIapL( *availableInfo ) );
 
         if ( error == KErrNotFound )
@@ -997,7 +1052,7 @@
             LOG_WRITE( "Add to array" );
             availableInfo->iCoverage = 0;
             availableInfo->iVisibility = 1;
-            availableInfo->iStrengthLevel = EWlanSignalUnavailable;
+            availableInfo->iStrengthLevel = iAvailableIaps[i].iRssi;
             availableInfo->iTransferRate = 0;
             availableInfo->iConnectionState = ENotConnected;
             iScanArray->AppendL(availableInfo);
@@ -1005,7 +1060,8 @@
 
             if ( availableInfo->iIapId )
                 {
-                LOG_WRITEF( "Append available iap [%d] for direct scan", availableInfo->iIapId );
+                LOG_WRITEF( "Append available iap[%d] rssi[%d] for direct scan", 
+                         availableInfo->iIapId, availableInfo->iStrengthLevel );
                 iDirectScanIapIDs.Append( availableInfo->iIapId );
                 iDirectScanSsids.Append( availableInfo->iSsid );
                 }
@@ -1018,6 +1074,11 @@
             CleanupStack::PopAndDestroy( availableInfo );
             }
         }
+    
+#ifdef _DEBUG
+        LOG_WRITE( "Dump scan results - available IAPs" );
+        DumpScanResultsL( iScanArray );
+#endif
       
     // Process the scanned results
     for( iScanInfo->First(); !iScanInfo->IsDone(); iScanInfo->Next() )
@@ -1353,6 +1414,7 @@
 void CWsfWlanScanner::GetWlanInfoFromIapL( TWsfWlanInfo& aWlanInfo )
     {
     LOG_ENTERFN( "CWsfWlanScanner::GetWlanInfoFromIapL" );
+    LOG_WRITEF( "Iap Id = %d", aWlanInfo.iIapId );
 
     CCommsDatabase* commsDb = CCommsDatabase::NewL();    
     CleanupStack::PushL( commsDb );
@@ -1391,6 +1453,12 @@
     // Map Wpa2 to Wpa
     secMode = ( secMode == EWlanSecModeWpa2 )? EWlanSecModeWpa : secMode;
     aWlanInfo.iSecurityMode = static_cast<TWlanSecMode>(secMode);
+    
+    TUint32 usePsk(0);
+    TRAP_IGNORE( wlanTableView->ReadUintL(TPtrC( WLAN_ENABLE_WPA_PSK ), 
+                 usePsk ) );
+    
+    aWlanInfo.SetUsesPreSharedKey( usePsk );
 
     // net mode
     TUint32 netMode(0);
@@ -1862,6 +1930,8 @@
                     }
                 iTimer.After( iStatus, TTimeIntervalMicroSeconds32( 
                         iScanningInterval ) );
+                iCacheLifetime = 0;
+                iMaxDelay = 0;
                 SetActive();
                 } 
             }
@@ -1879,6 +1949,8 @@
             Cancel();
             iTimer.After( iStatus, TTimeIntervalMicroSeconds32( 
                     iScanningInterval ) );
+            iCacheLifetime = 0;
+            iMaxDelay = 0;
             SetActive();
             }        
         }
--- a/wlanutilities/wlansniffer/mainapplication/data/wlansniffer.rss	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/mainapplication/data/wlansniffer.rss	Mon Jun 21 16:55:05 2010 +0300
@@ -567,8 +567,8 @@
                 listtype = EAknCtSingleHeadingPopupMenuListBox;
                 listbox = AVKON_LIST_QUERY_LIST
                     {
-                    flags = EAknListBoxMenuList |
-                    EAknListBoxDisableHighlight;
+                    flags = EAknListBoxDisableItemSpecificMenu |
+                    EAknListBoxViewerFlag;
                     };
                 heading = qtn_wlan_heading_connection_details;
                 };
--- a/wlanutilities/wlansniffer/mainapplication/src/wsfdetailscontainer.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/mainapplication/src/wsfdetailscontainer.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -94,7 +94,7 @@
     iListBox = new( ELeave ) CAknSingleHeadingStyleListBox;
     iListBox->SetContainerWindowL( *this );
     TInt flags = 0;
-    flags |= EAknListBoxViewerFlags;
+    flags |= EAknListBoxViewerFlags | EAknListBoxDisableItemSpecificMenu;
     iListBox->ConstructL( this, flags );
     iListBox->CreateScrollBarFrameL( ETrue );
     iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( 
--- a/wlanutilities/wlansniffer/mainapplication/src/wsfmaincontroller.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/mainapplication/src/wsfmaincontroller.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -350,6 +350,7 @@
             if ( temp )
                 {
                 temp->iConnectionState = EConnected;
+                temp->iIapId = info.iIapId;
                 iInfoArray->SortArrayL();
                 UpdateViewL( iInfoArray );
                 }
@@ -476,26 +477,31 @@
 
     TInt result( KErrNone );
     
+    TWsfIapPersistence persistence = EIapPersistent;
+    
     if ( !info.Known() && !info.Connected() )
         {
         // if not known yet, create an IAP
         if ( iModel->CreateAccessPointL( info, EFalse ) )
             {
+            persistence = EIapExpireOnDisconnect;
             // update iapID to list
             UpdateIapIdToInfoArrayL( info );
-            
-            // on success, test it and save it as well
-            result = iModel->TestAccessPointL( info, ETrue, EFalse );
             }
         else
             {
             result = KErrGeneral;
             }
         }
-    else if ( info.iIapId && !info.Connected() )
+    
+    if ( info.iIapId && !info.Connected() )
         {
         // hopefully we have a valid IAP id inside
-        result = iModel->ConnectL( info.iIapId );
+        result = iModel->ConnectL( info.iIapId, EFalse, persistence );
+        }
+    else if ( !info.Connected() )
+        {
+        result = KErrGeneral;
         }
     
     // pop cleanup item ReleaseSuppressingKeyEvents
@@ -562,28 +568,24 @@
         CleanupStack::PopAndDestroy();
         return;
         }
+    
+    TWsfIapPersistence persistence = EIapPersistent;
         
     if ( !info.Known() )
         {
         // a new access point needs to be created
         if ( iModel->CreateAccessPointL( info, EFalse ) )
             {
+            persistence = EIapExpireOnDisconnect;
             // update iapID to list
             UpdateIapIdToInfoArrayL( info );
-
-            // on success, test it and save it as well
-            // (testing actually creates the connection)
-            if ( iModel->TestAccessPointL( info, ETrue, ETrue ) == KErrCancel )
-                {
-                // connection creation was cancelled, refresh the view
-                iModel->RefreshScanL();
-                }
             }
         }
-    else if ( info.iIapId )
+    
+    if ( info.iIapId )
         {
         // hopefully we have a valid IAP id inside
-        iModel->ConnectL( info.iIapId );
+        iModel->ConnectL( info.iIapId, ETrue, persistence );
         }
 
     // pop cleanup item ReleaseSuppressingKeyEvents
--- a/wlanutilities/wlansniffer/model/bwins/wsfmodelu.def	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/model/bwins/wsfmodelu.def	Mon Jun 21 16:55:05 2010 +0300
@@ -9,36 +9,33 @@
 	?SetRefreshState@CWsfModel@@QAEXH@Z @ 8 NONAME ; void CWsfModel::SetRefreshState(int)
 	?RefreshScan@CWsfModel@@QAEXAAV?$TPckgBuf@H@@AAVTRequestStatus@@@Z @ 9 NONAME ; void CWsfModel::RefreshScan(class TPckgBuf<int> &, class TRequestStatus &)
 	?SetEngineObserver@CWsfModel@@QAEXPAVMWsfModelObserver@@@Z @ 10 NONAME ; void CWsfModel::SetEngineObserver(class MWsfModelObserver *)
-	?ConnectL@CWsfModel@@QAEHK@Z @ 11 NONAME ; int CWsfModel::ConnectL(unsigned long)
-	?CheckIsIapIdValidL@CWsfModel@@QBEXI@Z @ 12 NONAME ; void CWsfModel::CheckIsIapIdValidL(unsigned int) const
+	?CheckIsIapIdValidL@CWsfModel@@QBEXI@Z @ 11 NONAME ; void CWsfModel::CheckIsIapIdValidL(unsigned int) const
+	?ConnectL@CWsfModel@@QAEXAAV?$TPckgBuf@H@@KHW4TWsfIapPersistence@@AAVTRequestStatus@@@Z @ 12 NONAME ; void CWsfModel::ConnectL(class TPckgBuf<int> &, unsigned long, int, enum TWsfIapPersistence, class TRequestStatus &)
 	?SetActiveViewL@CWsfModel@@QAEXH@Z @ 13 NONAME ; void CWsfModel::SetActiveViewL(int)
 	?NewLC@CWsfModel@@SAPAV1@AAVMWsfStateChangeObserver@@H@Z @ 14 NONAME ; class CWsfModel * CWsfModel::NewLC(class MWsfStateChangeObserver &, int)
 	?IsScanEnabledL@CWsfModel@@QAEHXZ @ 15 NONAME ; int CWsfModel::IsScanEnabledL(void)
 	?SetConnectResultL@CWsfModel@@QAEXHI@Z @ 16 NONAME ; void CWsfModel::SetConnectResultL(int, unsigned int)
 	?AbortScanningL@CWsfModel@@QAEXXZ @ 17 NONAME ; void CWsfModel::AbortScanningL(void)
-	?TestAccessPointL@CWsfModel@@QAEHAAVTWsfWlanInfo@@HH@Z @ 18 NONAME ; int CWsfModel::TestAccessPointL(class TWsfWlanInfo &, int, int)
-	?CancelNotifyEvents@CWsfModel@@QAEXXZ @ 19 NONAME ; void CWsfModel::CancelNotifyEvents(void)
-	??1CWsfModel@@UAE@XZ @ 20 NONAME ; CWsfModel::~CWsfModel(void)
-	?GetWlanListL@CWsfModel@@QAEPAVCWsfWlanInfoArray@@XZ @ 21 NONAME ; class CWsfWlanInfoArray * CWsfModel::GetWlanListL(void)
-	?DisableScanL@CWsfModel@@QAEHXZ @ 22 NONAME ; int CWsfModel::DisableScanL(void)
-	?GetConnectedWlanDetailsL@CWsfModel@@QAEHAAVTWsfWlanInfo@@@Z @ 23 NONAME ; int CWsfModel::GetConnectedWlanDetailsL(class TWsfWlanInfo &)
-	?GetWlanListSize@CWsfModel@@QAEXAAV?$TPckgBuf@I@@AAVTRequestStatus@@@Z @ 24 NONAME ; void CWsfModel::GetWlanListSize(class TPckgBuf<unsigned int> &, class TRequestStatus &)
-	?ConnectL@CWsfModel@@QAEXAAV?$TPckgBuf@H@@KW4TWsfIapPersistence@@AAVTRequestStatus@@@Z @ 25 NONAME ; void CWsfModel::ConnectL(class TPckgBuf<int> &, unsigned long, enum TWsfIapPersistence, class TRequestStatus &)
-	?NewL@CWsfModel@@SAPAV1@AAVMWsfStateChangeObserver@@H@Z @ 26 NONAME ; class CWsfModel * CWsfModel::NewL(class MWsfStateChangeObserver &, int)
-	?Refreshing@CWsfModel@@QAEHXZ @ 27 NONAME ; int CWsfModel::Refreshing(void)
-	?ContinueBrowsingL@CWsfModel@@QAEXK@Z @ 28 NONAME ; void CWsfModel::ContinueBrowsingL(unsigned long)
-	?IctsTestPermission@CWsfModel@@SAHXZ @ 29 NONAME ; int CWsfModel::IctsTestPermission(void)
-	?DisconnectL@CWsfModel@@QAEXXZ @ 30 NONAME ; void CWsfModel::DisconnectL(void)
-	?IsConnectedL@CWsfModel@@QAEHXZ @ 31 NONAME ; int CWsfModel::IsConnectedL(void)
-	?CreateAccessPointL@CWsfModel@@QAEHAAVTWsfWlanInfo@@H@Z @ 32 NONAME ; int CWsfModel::CreateAccessPointL(class TWsfWlanInfo &, int)
-	?TestConnectedAccessPointL@CWsfModel@@QAEHAAVTWsfWlanInfo@@H@Z @ 33 NONAME ; int CWsfModel::TestConnectedAccessPointL(class TWsfWlanInfo &, int)
-	?NewLC@CWsfAppLauncher@@SAPAV1@XZ @ 34 NONAME ; class CWsfAppLauncher * CWsfAppLauncher::NewLC(void)
-	?RequestNotifyEventsL@CWsfModel@@QAEXAAVMWsfStateChangeObserver@@@Z @ 35 NONAME ; void CWsfModel::RequestNotifyEventsL(class MWsfStateChangeObserver &)
-	?GetWlanList@CWsfModel@@QAEXAAV?$TPckgBuf@I@@AAVTPtr8@@AAVTRequestStatus@@@Z @ 36 NONAME ; void CWsfModel::GetWlanList(class TPckgBuf<unsigned int> &, class TPtr8 &, class TRequestStatus &)
-	?LaunchBrowserL@CWsfModel@@UAEXK@Z @ 37 NONAME ; void CWsfModel::LaunchBrowserL(unsigned long)
-	?LaunchHelperApplicationL@CWsfModel@@QAEXAAVTWsfWlanInfo@@@Z @ 38 NONAME ; void CWsfModel::LaunchHelperApplicationL(class TWsfWlanInfo &)
-	?RefreshScanL@CWsfModel@@QAEHXZ @ 39 NONAME ; int CWsfModel::RefreshScanL(void)
-	?Disconnect@CWsfModel@@QAEXAAV?$TPckgBuf@H@@AAVTRequestStatus@@@Z @ 40 NONAME ; void CWsfModel::Disconnect(class TPckgBuf<int> &, class TRequestStatus &)
-	?SetObservedWlanL@CWsfModel@@QAEXABVTDesC8@@@Z @ 41 NONAME ; void CWsfModel::SetObservedWlanL(class TDesC8 const &)
-	?CloseHelperApplication@CWsfModel@@QAEHXZ @ 42 NONAME ; int CWsfModel::CloseHelperApplication(void)
+	?CancelNotifyEvents@CWsfModel@@QAEXXZ @ 18 NONAME ; void CWsfModel::CancelNotifyEvents(void)
+	??1CWsfModel@@UAE@XZ @ 19 NONAME ; CWsfModel::~CWsfModel(void)
+	?GetWlanListL@CWsfModel@@QAEPAVCWsfWlanInfoArray@@XZ @ 20 NONAME ; class CWsfWlanInfoArray * CWsfModel::GetWlanListL(void)
+	?DisableScanL@CWsfModel@@QAEHXZ @ 21 NONAME ; int CWsfModel::DisableScanL(void)
+	?GetConnectedWlanDetailsL@CWsfModel@@QAEHAAVTWsfWlanInfo@@@Z @ 22 NONAME ; int CWsfModel::GetConnectedWlanDetailsL(class TWsfWlanInfo &)
+	?GetWlanListSize@CWsfModel@@QAEXAAV?$TPckgBuf@I@@AAVTRequestStatus@@@Z @ 23 NONAME ; void CWsfModel::GetWlanListSize(class TPckgBuf<unsigned int> &, class TRequestStatus &)
+	?NewL@CWsfModel@@SAPAV1@AAVMWsfStateChangeObserver@@H@Z @ 24 NONAME ; class CWsfModel * CWsfModel::NewL(class MWsfStateChangeObserver &, int)
+	?Refreshing@CWsfModel@@QAEHXZ @ 25 NONAME ; int CWsfModel::Refreshing(void)
+	?ContinueBrowsingL@CWsfModel@@QAEXK@Z @ 26 NONAME ; void CWsfModel::ContinueBrowsingL(unsigned long)
+	?DisconnectL@CWsfModel@@QAEXXZ @ 27 NONAME ; void CWsfModel::DisconnectL(void)
+	?IsConnectedL@CWsfModel@@QAEHXZ @ 28 NONAME ; int CWsfModel::IsConnectedL(void)
+	?CreateAccessPointL@CWsfModel@@QAEHAAVTWsfWlanInfo@@H@Z @ 29 NONAME ; int CWsfModel::CreateAccessPointL(class TWsfWlanInfo &, int)
+	?NewLC@CWsfAppLauncher@@SAPAV1@XZ @ 30 NONAME ; class CWsfAppLauncher * CWsfAppLauncher::NewLC(void)
+	?RequestNotifyEventsL@CWsfModel@@QAEXAAVMWsfStateChangeObserver@@@Z @ 31 NONAME ; void CWsfModel::RequestNotifyEventsL(class MWsfStateChangeObserver &)
+	?GetWlanList@CWsfModel@@QAEXAAV?$TPckgBuf@I@@AAVTPtr8@@AAVTRequestStatus@@@Z @ 32 NONAME ; void CWsfModel::GetWlanList(class TPckgBuf<unsigned int> &, class TPtr8 &, class TRequestStatus &)
+	?LaunchBrowserL@CWsfModel@@UAEXK@Z @ 33 NONAME ; void CWsfModel::LaunchBrowserL(unsigned long)
+	?LaunchHelperApplicationL@CWsfModel@@QAEXAAVTWsfWlanInfo@@@Z @ 34 NONAME ; void CWsfModel::LaunchHelperApplicationL(class TWsfWlanInfo &)
+	?RefreshScanL@CWsfModel@@QAEHXZ @ 35 NONAME ; int CWsfModel::RefreshScanL(void)
+	?Disconnect@CWsfModel@@QAEXAAV?$TPckgBuf@H@@AAVTRequestStatus@@@Z @ 36 NONAME ; void CWsfModel::Disconnect(class TPckgBuf<int> &, class TRequestStatus &)
+	?SetObservedWlanL@CWsfModel@@QAEXABVTDesC8@@@Z @ 37 NONAME ; void CWsfModel::SetObservedWlanL(class TDesC8 const &)
+	?CloseHelperApplication@CWsfModel@@QAEHXZ @ 38 NONAME ; int CWsfModel::CloseHelperApplication(void)
+	?ConnectL@CWsfModel@@QAEHKHW4TWsfIapPersistence@@@Z @ 39 NONAME ; int CWsfModel::ConnectL(unsigned long, int, enum TWsfIapPersistence)
 
--- a/wlanutilities/wlansniffer/model/eabi/wsfmodelu.def	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/model/eabi/wsfmodelu.def	Mon Jun 21 16:55:05 2010 +0300
@@ -21,27 +21,24 @@
 	_ZN9CWsfModel15SetRefreshStateEi @ 20 NONAME
 	_ZN9CWsfModel16AbortConnectingLEv @ 21 NONAME
 	_ZN9CWsfModel16SetObservedWlanLERK6TDesC8 @ 22 NONAME
-	_ZN9CWsfModel16TestAccessPointLER12TWsfWlanInfoii @ 23 NONAME
-	_ZN9CWsfModel17ContinueBrowsingLEm @ 24 NONAME
-	_ZN9CWsfModel17ContinueBrowsingLEv @ 25 NONAME
-	_ZN9CWsfModel17SetConnectResultLEij @ 26 NONAME
-	_ZN9CWsfModel17SetEngineObserverEP17MWsfModelObserver @ 27 NONAME
-	_ZN9CWsfModel18CancelNotifyEventsEv @ 28 NONAME
-	_ZN9CWsfModel18CreateAccessPointLER12TWsfWlanInfoi @ 29 NONAME
-	_ZN9CWsfModel18IctsTestPermissionEv @ 30 NONAME
-	_ZN9CWsfModel20RequestNotifyEventsLER23MWsfStateChangeObserver @ 31 NONAME
-	_ZN9CWsfModel22CloseHelperApplicationEv @ 32 NONAME
-	_ZN9CWsfModel23GetConnectedWlanDetailsER8TPckgBufIiER12TWsfWlanInfoR14TRequestStatus @ 33 NONAME
-	_ZN9CWsfModel24GetConnectedWlanDetailsLER12TWsfWlanInfo @ 34 NONAME
-	_ZN9CWsfModel24LaunchHelperApplicationLER12TWsfWlanInfo @ 35 NONAME
-	_ZN9CWsfModel25TestConnectedAccessPointLER12TWsfWlanInfoi @ 36 NONAME
-	_ZN9CWsfModel4NewLER23MWsfStateChangeObserveri @ 37 NONAME
-	_ZN9CWsfModel5NewLCER23MWsfStateChangeObserveri @ 38 NONAME
-	_ZN9CWsfModel8ConnectLER8TPckgBufIiEm18TWsfIapPersistenceR14TRequestStatus @ 39 NONAME
-	_ZN9CWsfModel8ConnectLEm @ 40 NONAME
-	_ZN9CWsfModelD0Ev @ 41 NONAME
-	_ZN9CWsfModelD1Ev @ 42 NONAME
-	_ZN9CWsfModelD2Ev @ 43 NONAME
-	_ZNK9CWsfModel18CheckIsIapIdValidLEj @ 44 NONAME
-	_ZThn12_N9CWsfModel14LaunchBrowserLEm @ 45 NONAME
+	_ZN9CWsfModel17ContinueBrowsingLEm @ 23 NONAME
+	_ZN9CWsfModel17ContinueBrowsingLEv @ 24 NONAME
+	_ZN9CWsfModel17SetConnectResultLEij @ 25 NONAME
+	_ZN9CWsfModel17SetEngineObserverEP17MWsfModelObserver @ 26 NONAME
+	_ZN9CWsfModel18CancelNotifyEventsEv @ 27 NONAME
+	_ZN9CWsfModel18CreateAccessPointLER12TWsfWlanInfoi @ 28 NONAME
+	_ZN9CWsfModel20RequestNotifyEventsLER23MWsfStateChangeObserver @ 29 NONAME
+	_ZN9CWsfModel22CloseHelperApplicationEv @ 30 NONAME
+	_ZN9CWsfModel23GetConnectedWlanDetailsER8TPckgBufIiER12TWsfWlanInfoR14TRequestStatus @ 31 NONAME
+	_ZN9CWsfModel24GetConnectedWlanDetailsLER12TWsfWlanInfo @ 32 NONAME
+	_ZN9CWsfModel24LaunchHelperApplicationLER12TWsfWlanInfo @ 33 NONAME
+	_ZN9CWsfModel4NewLER23MWsfStateChangeObserveri @ 34 NONAME
+	_ZN9CWsfModel5NewLCER23MWsfStateChangeObserveri @ 35 NONAME
+	_ZN9CWsfModel8ConnectLER8TPckgBufIiEmi18TWsfIapPersistenceR14TRequestStatus @ 36 NONAME
+	_ZN9CWsfModel8ConnectLEmi18TWsfIapPersistence @ 37 NONAME
+	_ZN9CWsfModelD0Ev @ 38 NONAME
+	_ZN9CWsfModelD1Ev @ 39 NONAME
+	_ZN9CWsfModelD2Ev @ 40 NONAME
+	_ZNK9CWsfModel18CheckIsIapIdValidLEj @ 41 NONAME
+	_ZThn12_N9CWsfModel14LaunchBrowserLEm @ 42 NONAME
 
--- a/wlanutilities/wlansniffer/model/group/model.mmp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/model/group/model.mmp	Mon Jun 21 16:55:05 2010 +0300
@@ -64,7 +64,6 @@
 LIBRARY         centralrepository.lib
 LIBRARY         cmmanager.lib
 LIBRARY         cmmanagerdatabase.lib
-LIBRARY         ictsclientinterface.lib
 LIBRARY         sysutil.lib
 LIBRARY         efsrv.lib
 
--- a/wlanutilities/wlansniffer/model/inc/wsfmodel.h	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/model/inc/wsfmodel.h	Mon Jun 21 16:55:05 2010 +0300
@@ -23,7 +23,6 @@
 
 //  EXTERNAL INCLUDES
 #include <e32base.h>
-#include <ictsclientinterface.h>
 
 //  INTERNAL INCLUDES
 #include "wsfsession.h"
@@ -54,8 +53,7 @@
 NONSHARABLE_CLASS( CWsfModel ): public CBase, 
                                 public MWsfBrowserLaunchObserver, 
                                 public MWsfScreenSaverStateObserver,
-                                public MWsfBrowserLaunchAdapter,
-                                public MIctsObserver
+                                public MWsfBrowserLaunchAdapter
     {
     public:     // Constructors and destructor
 
@@ -162,21 +160,27 @@
         * Connects to the given WLAN IAP
         * @since S60 5.0
         * @param aIapId WLAN IAP id to connect to.
+        * @param aConnectOnly ETrue if Connect selected
+        * @param aPersistence The value of the persistence property
         */
-        IMPORT_C int ConnectL( TUint32 aIapId );
+        IMPORT_C int ConnectL( TUint32 aIapId, 
+                               TBool aConnectOnly,
+                               TWsfIapPersistence aPersistence );
         
         /**
         * Asyncronous request to the server to connect to the given WLAN IAP
         * @since S60 5.2
         * @param aPckg request result
         * @param aIapId WLAN IAP id to connect to.
+        * @param aConnectOnly ETrue if Connect selected
         * @param aPersistence The value of the persistence property
         * @param aStatus The request status object used to contain 
         *        the completion status of the request.
         */
-        IMPORT_C void ConnectL( TPckgBuf<TBool>& aPckg, TUint32 aIapId, 
-                               TWsfIapPersistence aPersistence,
-                               TRequestStatus& aStatus );
+        IMPORT_C void ConnectL( TPckgBuf<TBool>& aPckg, TUint32 aIapId,
+                                TBool aConnectOnly,
+                                TWsfIapPersistence aPersistence,
+                                TRequestStatus& aStatus );
 
         /**
         * Sets connection result
@@ -268,31 +272,6 @@
                                            TBool aExplicitDefine );
 
         /**
-        * Tests the WLAN access point and offers to save it to a destination
-        * @since S60 5.0
-        * @param aWlan Reference to wlaninfo to test
-        * @param aKeepConnection Indicates whether to keep alive the connection.
-        * @param aConnectOnly ETrue if the helper app is expected to connect 
-        *                     only, EFalse if it should also launch the browser 
-        *                     on successful connection.
-        * @return KErrNone if successful, system-wide error code otherwise
-        */
-        IMPORT_C TInt TestAccessPointL( TWsfWlanInfo& aWlan,
-                                        TBool aKeepConnection, 
-                                        TBool aConnectOnly );
-        
-        /**
-        * Tests the connected WLAN access point
-        * @since S60 5.0
-        * @param aWlan Reference to wlaninfo to test
-        * @param aConnectOnly ETrue if connect only case, 
-        * EFalse if launch browser case after successful connection.
-        * @return KErrNone if successful, system-wide error code otherwise
-        */
-        IMPORT_C TInt TestConnectedAccessPointL( TWsfWlanInfo& aWlan,
-                                                 TBool aConnectOnly );
-
-        /**
         * Requests a rescan for available wlans
         * @since S60 5.0
         * @return ETrue on success
@@ -390,13 +369,6 @@
         * @since S60 5.0
         */
         IMPORT_C void AbortScanningL();
-
-        /**
-        * Gets the ICTS test permission setting value 
-        * @since S60 5.0
-        * @return The ICTS setting
-        */
-        IMPORT_C static TInt IctsTestPermission();
         
         /**
         * Check if Iap Id is valid
@@ -446,42 +418,11 @@
         * @param aScreenSaverActive Current status of the screensaver
         */
         void ScreenSaverStatusChangedL( const TBool aScreenSaverActive );
-
-
-    public:     // from MIctsObserver
-
-        /**
-        * Called by ICTS during/after connectivity test
-        * @since S60 5.0
-        * @param aResult Result code of the connectivity test
-        * @param aString Parameter to hold auxiliary data
-        */
-        void ConnectivityObserver( TIctsTestResult aResult, const TDesC& aString );
-
+        
 
     private:  // New methods
         
         /**
-        * Starts WLAN Login application
-        * @param aString Contains redirect URL
-        */  
-        void LaunchWlanLoginL( const TDesC& aString );
-        
-        /**
-        * Makes the temporary IAP created for ICT persistent, i.e. notifies
-        * the server not to delete it when the connection terminates.
-        * @since S60 5.0
-        * @param aPersistence The persistence property for the IAP
-        */    
-        void MakeIctIapPersistentL( TWsfIapPersistence aPersistence );
-        
-        /**
-        * Moves the IAP to internet SNAP
-        * @param aIapId Id of the connection method
-        */  
-        void MoveToInternetSnapL( const TUint32 aIapId );
-        
-        /**
         * Check if there is disk space left 
         * Leaves with KErrDiskFull is space is below CL
         * @since S60 5.0
@@ -542,11 +483,6 @@
         * Id of currently connected IAP (if applicable)
         */
         TUint iConnectedIapId;
-        
-        /**
-        * Network id of currently connected IAP (if applicable)
-        */
-        TUint iConnectedNetId;
 
         /**
         * Refreshing status
@@ -554,40 +490,10 @@
         TBool iRefreshing;
         
         /**
-        * Persistent WlanInfo for ICT cleanup
-        */
-        TWsfWlanInfo iIctWlanInfo;
-        
-        /**
         * Indicates whether connection creation has been started but not
         * finished yet.
         */
         TBool iConnecting;
-        
-        /**
-        * Waiter for ICT
-        */
-        CActiveSchedulerWait iIctWait;
-        
-        /**
-        * Indicates that connectivity test if over.
-        */
-        TBool iIctEnded;
-        
-        /**
-        * Indicates if connection will be kept when launching browser.
-        */
-        TBool iKeepConnection;
-        
-        /**
-        * Indicates if "Connect" or "Start Web browsing" is selected.
-        */
-        TBool iConnectOnly;
-        
-		/**
-        * ICT class. Owned.
-        */
-        CIctsClientInterface* iIct;
 
     };
 
--- a/wlanutilities/wlansniffer/model/src/wsfmodel.cpp	Wed Jun 09 10:53:40 2010 +0300
+++ b/wlanutilities/wlansniffer/model/src/wsfmodel.cpp	Mon Jun 21 16:55:05 2010 +0300
@@ -52,12 +52,6 @@
 static const TUid KHelperApUid = { 0x10281CEB };
 
 /**
-* UID of Wlan Login application (hsbrowser)
-* used when launching WLAN Login application
-*/
-static const TInt KBrowserUid = { 0x2000AFCC };
-
-/**
 * Estimated overhead for access point creation 
 */
 const TInt KEstimatedOverhead = 8192;
@@ -97,18 +91,6 @@
 EXPORT_C CWsfModel::~CWsfModel()
     {
     LOG_ENTERFN( "CWsfModel::~CWsfModel" );
-    if ( iIct )
-        {
-        LOG_WRITE( "ict cancel" );
-        TRAP_IGNORE( iIct->CancelStartL() );
-        delete iIct;
-        iIct = NULL;
-        }
-    if ( iIctWait.IsStarted() )
-        {
-        LOG_WRITE( "ict wait cancel" );
-        iIctWait.AsyncStop();
-        }
     iSession.CancelNotifyEvent();
     iSession.Close();
     delete iScreenSaverWatcher;
@@ -124,10 +106,7 @@
 //
 CWsfModel::CWsfModel(): 
     iEikEnv( CEikonEnv::Static() ),
-    iRefreshing( EFalse ),
-    iIctEnded( EFalse ),
-    iKeepConnection( EFalse ),
-    iConnectOnly( EFalse )
+    iRefreshing( EFalse )
     {
     }
 
@@ -246,7 +225,8 @@
 // CWsfModel::ConnectL
 // ----------------------------------------------------------------------------
 //
-EXPORT_C int CWsfModel::ConnectL( TUint32 aIapId )
+EXPORT_C int CWsfModel::ConnectL( TUint32 aIapId, TBool aConnectOnly,
+                                  TWsfIapPersistence aPersistence )
     {
     LOG_ENTERFN( "CWsfModel::ConnectL" );
     
@@ -255,7 +235,7 @@
         iObserver->ConnectingL( aIapId );
         }
     
-    TInt err = iSession.ConnectWlanBearerL( aIapId, EIapPersistent );
+    TInt err = iSession.ConnectWlanBearerL( aIapId, aConnectOnly, aPersistence );
     if ( err == KErrNone )
         {
         iConnectedIapId = aIapId;
@@ -273,7 +253,7 @@
         iObserver->ConnectingFinishedL( err );
         }
     
-    iRefreshing = iSession.RequestScanL();   
+    iRefreshing = iSession.RequestScanL();
     
     return err;
     }
@@ -283,9 +263,10 @@
 // CWsfModel::ConnectL
 // ----------------------------------------------------------------------------
 //
-EXPORT_C void CWsfModel::ConnectL( TPckgBuf<TBool>& aPckg, TUint32 aIapId, 
-                                  TWsfIapPersistence aPersistence,
-                                  TRequestStatus& aStatus )
+EXPORT_C void CWsfModel::ConnectL( TPckgBuf<TBool>& aPckg, TUint32 aIapId,
+                                   TBool aConnectOnly,
+                                   TWsfIapPersistence aPersistence,
+                                   TRequestStatus& aStatus )
     {
     LOG_ENTERFN( "CWsfModel::ConnectL" );
     
@@ -294,7 +275,7 @@
         iObserver->ConnectingL( aIapId );
         }
     
-    iSession.ConnectWlanBearer( aPckg, aIapId, aPersistence, aStatus );
+    iSession.ConnectWlanBearer( aPckg, aIapId, aConnectOnly, aPersistence, aStatus );
     }
 
 // ----------------------------------------------------------------------------
@@ -324,8 +305,6 @@
     TBool disconnected = iSession.DisconnectWlanBearerL();
     LOG_WRITEF( "disconnected = %d", disconnected );
     iConnectedIapId = 0;
-    iConnectedNetId = 0;
-    iConnectOnly = EFalse;
     if ( !disconnected )
         {
         iRefreshing = iSession.RequestScanL(); 
@@ -342,8 +321,6 @@
     LOG_ENTERFN( "CWsfModel::Disconnect" );
     iSession.DisconnectWlanBearer( aPckg, aStatus );
     iConnectedIapId = 0;
-    iConnectedNetId = 0;
-    iConnectOnly = EFalse;
     }
 
 
@@ -457,165 +434,6 @@
 
 
 // ----------------------------------------------------------------------------
-// CWsfModel::ConnectivityObserver
-// ----------------------------------------------------------------------------
-//
-void CWsfModel::ConnectivityObserver( TIctsTestResult aResult, 
-                                      const TDesC& aString )
-    {
-    LOG_ENTERFN( "CWsfModel::ConnectivityObserver" );
-    LOG_WRITEF( "ICTS result: %d", aResult );
-    
-    TBool makePersistent( EFalse );
-    // check the result
-    switch ( aResult )
-        {
-        case EConnectionOk:
-            {
-            // test succeeded
-            TRAP_IGNORE( MoveToInternetSnapL( iConnectedIapId ) );
-            makePersistent = ETrue;
-            LOG_WRITE( "ICT: EConnectionOk" );
-            break;            
-            }
-            
-        case EConnectionNotOk:
-            {
-            // test was run but it failed
-            LOG_WRITE( "ICT: EConnectionNotOk" );
-            break;
-            }
-        case EHttpAuthenticationNeeded:
-            {
-            // test was run but HTTP authentication is required
-            LOG_WRITE( "ICT: EHttpAuthenticationNeeded" );
-            if ( iConnectOnly )
-                {
-                // Connect selected. WLAN Login needed.
-                TRAP_IGNORE( LaunchWlanLoginL(aString) );
-                }    
-            break;
-            }    
-        case ETimeout:
-            {
-            LOG_WRITE( "ICT: ETimeout" );
-            break;
-            }
-            
-        default:
-            {
-            _LIT( KIctPanic, "ICT result" );
-            User::Panic( KIctPanic, aResult );
-            }
-        }
-
-    if ( makePersistent )
-        {
-        TWsfIapPersistence pt = ( iConnectedIapId )? 
-                                     EIapPersistent: 
-                                     EIapExpireOnShutdown;
-                                     
-        TRAPD( err, MakeIctIapPersistentL( pt ) );
-        if ( err )
-            {
-            LOG_WRITEF( "MakeIctIapPersistentL leaved with error = %d", err );
-            }
-        }
-        
-    LOG_WRITE( "before AsyncStop" );
-    // finally stop blocking the caller
-    iIctEnded = ETrue; 
-    if ( iIctWait.IsStarted() )
-        {
-        LOG_WRITE( "ICT: AsyncStop" );
-        iIctWait.AsyncStop();
-        }
-    
-    }
-
-// -----------------------------------------------------------------------------
-// CWsfModel::LaunchWlanLoginL()
-// -----------------------------------------------------------------------------
-//    
-void CWsfModel::LaunchWlanLoginL( const TDesC& aString )
-    {   
-    LOG_ENTERFN( "WsfModel::LaunchWlanLoginL" );
-    HBufC* param = HBufC::NewLC( KMaxFileName );
-    _LIT(tmpString, "%d, %d, %S");
-    param->Des().Format( tmpString, 
-                         iConnectedIapId, 
-                         iConnectedNetId, 
-                         &aString );
-    TUid uid( TUid::Uid( KBrowserUid ) );
-    TThreadId id;
-    
-    RApaLsSession appArcSession;
-    User::LeaveIfError( appArcSession.Connect() ); 
-    CleanupClosePushL( appArcSession );
-        
-    TInt err = appArcSession.StartDocument( *param, TUid::Uid( KBrowserUid ), id );
-    if ( err != KErrNone )
-        {
-        LOG_ENTERFN( "WsfModel::LaunchWlanLoginL failed" );
-        }
-    CleanupStack::PopAndDestroy( &appArcSession );
-    CleanupStack::PopAndDestroy( param );
-    }
-
-// ----------------------------------------------------------------------------
-// CWsfModel::MakeIctIapPersistentL
-// ----------------------------------------------------------------------------
-//
-void CWsfModel::MakeIctIapPersistentL( TWsfIapPersistence aPersistence )
-    {
-    LOG_ENTERFN( "CWsfModel::MakeIctIapPersistentL" );
-    LOG_WRITEF( "temp ICT IAP id = %d", iIctWlanInfo.iIapId );
-    
-    if ( !iSession.SetIapPersistenceL( aPersistence ) )
-        {
-        LOG_WRITE( "setting temporary flag FAILED" );
-        }
-    
-    }
-
-// ----------------------------------------------------------------------------
-// CWsfModel::MoveToInternetSnapL
-// ----------------------------------------------------------------------------
-//
-void CWsfModel::MoveToInternetSnapL( const TUint32 aIapId )
-    {
-	LOG_ENTERFN( "CWsfModel::MoveToInternetSnapL" );
-    // Read all destination(SNAP) settings into an array
-    RArray<TUint32> destinations;
-    CleanupClosePushL(destinations);
-    RCmManagerExt cmManager;
-    cmManager.OpenL();
-    CleanupClosePushL( cmManager );      
-    cmManager.AllDestinationsL(destinations);
-    RCmDestinationExt destination;
-    // Loop through each destination
-    for(TInt i = 0; i < destinations.Count(); i++)
-        {
-        destination = cmManager.DestinationL(destinations[i]);
-        CleanupClosePushL(destination); 
-        // Internet destination will always exist in the system.
-        // Internet destination will have ESnapPurposeInternet set in its metadata.
-        if (destination.MetadataL(CMManager::ESnapMetadataPurpose) == CMManager::ESnapPurposeInternet)
-            {
-            RCmConnectionMethodExt iap = cmManager.ConnectionMethodL( aIapId );
-            CleanupClosePushL( iap );     
-            LOG_WRITE( "Move Iap to internet destination" );
-            destination.AddConnectionMethodL( iap );
-            destination.UpdateL();
-            CleanupStack::PopAndDestroy( &iap ); 
-            }
-        CleanupStack::PopAndDestroy( &destination ); 
-        }
-    CleanupStack::PopAndDestroy( &cmManager ); 
-    CleanupStack::PopAndDestroy( &destinations ); 
-    }
-
-// ----------------------------------------------------------------------------
 // CWsfModel::CreateAccessPointL
 // ----------------------------------------------------------------------------
 //
@@ -630,8 +448,7 @@
     
     CheckSpaceBelowCriticalLevelL();
     CheckUnknownWapiL( aWlan );
-
-#pragma message("TODO: oursource UI to client interfaces!")        
+      
     CWsfWlanIapWizard* iapWizard = CWsfWlanIapWizard::NewLC();
     
     // the wlaninfo must be persistent to avoid nullpointer crashes due to
@@ -667,233 +484,6 @@
 
 
 // ----------------------------------------------------------------------------
-// CWsfModel::IctsTestPermission
-// ----------------------------------------------------------------------------
-//
-EXPORT_C TInt CWsfModel::IctsTestPermission()
-    {
-    LOG_ENTERFN( "CWsfModel::IctsTestPermission" );
-    TInt ictTestPermission( 0 );
-    CRepository* repository( NULL );
-    
-    TRAPD( err, repository = CRepository::NewL( 
-                                        KCRUidInternetConnectivitySettings ) );
-    if ( err == KErrNone )
-        {
-        repository->Get( KIctsTestPermission, ictTestPermission );
-        delete repository;
-        LOG_WRITEF( "ICT is set to %d", ictTestPermission );
-        }
-    return ictTestPermission;
-    }
-
-
-// ----------------------------------------------------------------------------
-// CWsfModel::TestAccessPointL
-// ----------------------------------------------------------------------------
-//
-EXPORT_C TInt CWsfModel::TestAccessPointL( TWsfWlanInfo& aWlan,
-                                           TBool aKeepConnection, 
-                                           TBool aConnectOnly )
-    {
-    LOG_ENTERFN( "CWsfModel::TestAccessPointL" );    
-    TInt err( KErrNone );
-    iKeepConnection = aKeepConnection;
-    iConnectOnly = aConnectOnly;
-    if ( !aWlan.iIapId )
-        {
-        // the wlaninfo must already contain a valid IAP id
-        LOG_WRITE( "invalid IAP id" );
-        return KErrCorrupt;
-        }
-    
-    // the wlaninfo must be persistent to avoid nullpointer crashes due to
-    // background refreshing 
-    iIctWlanInfo = aWlan;
-
-    // create connection and test connectivity if needed
-
-    // check ICT settings
-    TInt ictTestPermission( IctsTestPermission() );
-    
-    
-    if ( aKeepConnection || ictTestPermission != EIctsNeverRun )
-        {
-        // make connection if Connect was selected or if ICT needs it
-        LOG_WRITE( "creating connection..." );
-        if ( iObserver )
-            {
-            iObserver->ConnectingL( iIctWlanInfo.iIapId );
-            }
-
-        // create the connection with temporary IAP by default
-        err = iSession.ConnectWlanBearerL( iIctWlanInfo.iIapId, 
-                                           EIapExpireOnDisconnect );
-        
-        if ( err == KErrNone )
-            {
-            LOG_WRITE( "connection OK." )
-            }
-        else
-            {
-            LOG_WRITEF( "connection creation failed with error = %d", err );
-            // either the connection creation failed or was aborted, 
-            // the server already cleaned up the mess, so nothing to do
-            }
-            
-        if ( iObserver )
-            {
-            iObserver->ConnectingFinishedL( err );
-            }
-            
-        }
-
-    if ( err == KErrNone && ictTestPermission != EIctsNeverRun )
-        {
-        // do the connectivity test
-        iConnectedIapId = iIctWlanInfo.iIapId;
-        
-        RCmManagerExt cmManager;
-        cmManager.OpenL();
-        CleanupClosePushL( cmManager );        
-
-        RCmConnectionMethodExt cm = cmManager.ConnectionMethodL( 
-                                                            iConnectedIapId );
-        CleanupClosePushL( cm );
-        
-        iConnectedNetId = cm.GetIntAttributeL( CMManager::ECmNetworkId ); 
-
-        CleanupStack::PopAndDestroy( &cm );
-        CleanupStack::PopAndDestroy( &cmManager );
-
-        LOG_WRITE( "starting ICT test..." );
-        CIctsClientInterface* ict = CIctsClientInterface::NewL( 
-                                                    iConnectedIapId, 
-                                                    iConnectedNetId,
-                                                    *this );
-        LOG_WRITE( "ICT created" );
-        CleanupStack::PushL( ict );
-        ict->StartL();
-        LOG_WRITE( "ICT: started" );
-        
-        // enter a waitloop since ICT is a kind of asynchronous service
-        if ( !iIctEnded )
-            {
-            LOG_WRITE( "ICT: iIctWait started" );
-            iIctWait.Start();
-            }
-            
-        iIctEnded = EFalse;
-        CleanupStack::PopAndDestroy( ict );
-        LOG_WRITE( "ICT test done." );
-        }
-    
-        
-    if ( ( err == KErrNone && !aKeepConnection && 
-                                     ictTestPermission != EIctsNeverRun ) ||
-         ( err != KErrNone && err != KErrCancel ) )
-        {
-        // drop the connection in case of Start web browsing, and if an error
-        // different from KErrCancel occured (on cancel the connection is
-        // closed automatically)
-        LOG_WRITE( "disconnecting..." );
-        iSession.DisconnectWlanBearerL();
-        LOG_WRITE( "Disconnected." );
-        }
-        
-    
-        
-    if ( err == KErrNone && ictTestPermission == EIctsNeverRun )
-        {
-        LOG_WRITE( "ICT is set to never run, IAP remains temporary" );
-
-        ConnectivityObserver( EConnectionNotOk, KNullDesC );
-        }
-
-    return err;
-    }
-
-
-// ----------------------------------------------------------------------------
-// CWsfModel::TestConnectedAccessPointL
-// ----------------------------------------------------------------------------
-//
-EXPORT_C TInt CWsfModel::TestConnectedAccessPointL( TWsfWlanInfo& aWlan,
-                                                    TBool aConnectOnly )
-    {
-    LOG_ENTERFN( "CWsfModel::TestConnectedAccessPointL" );    
-    TInt err( KErrNone );
-    iConnectOnly = aConnectOnly;
-    if ( !aWlan.iIapId )
-        {
-        // the wlaninfo must already contain a valid IAP id
-        LOG_WRITE( "invalid IAP id" );
-        return KErrCorrupt;
-        }
-    
-    // the wlaninfo must be persistent to avoid nullpointer crashes due to
-    // background refreshing 
-    iIctWlanInfo = aWlan;
-
-    // check ICT settings
-    TInt ictTestPermission( IctsTestPermission() );
-
-    if ( ictTestPermission != EIctsNeverRun )
-        {
-        // do the connectivity test
-        iConnectedIapId = iIctWlanInfo.iIapId;
-        
-        RCmManagerExt cmManager;
-        cmManager.OpenL();
-        CleanupClosePushL( cmManager );        
-
-        RCmConnectionMethodExt cm = cmManager.ConnectionMethodL( 
-                                                            iConnectedIapId );
-        CleanupClosePushL( cm );
-        
-        iConnectedNetId = cm.GetIntAttributeL( CMManager::ECmNetworkId ); 
-
-        CleanupStack::PopAndDestroy( &cm );
-        CleanupStack::PopAndDestroy( &cmManager );
-
-        LOG_WRITE( "starting ICT test..." );
-        
-        if ( iIct )
-            {
-            iIct->CancelStartL();
-            delete iIct;
-            iIct = NULL;
-            }
-        
-        iIct = CIctsClientInterface::NewL( iConnectedIapId, 
-                                           iConnectedNetId,
-                                           *this );
-        LOG_WRITE( "ICT created" );
-        iIct->StartL();
-        LOG_WRITE( "ICT: started" );
-        
-        // enter a waitloop since ICT is a kind of asynchronous service
-        if ( !iIctEnded )
-            {
-            LOG_WRITE( "ICT: iIctWait started" );
-            iIctWait.Start();
-            }
-        
-        iIctEnded = EFalse;
-        LOG_WRITE( "ICT test done." );
-        }
-
-    if ( ictTestPermission == EIctsNeverRun )
-        {
-        LOG_WRITE( "ICT is set to never run, IAP remains temporary" );
-        ConnectivityObserver( EConnectionNotOk, KNullDesC );
-        }
-
-    return err;
-    }
-
-
-// ----------------------------------------------------------------------------
 // CWsfModel::RefreshScanL
 // ----------------------------------------------------------------------------
 //