hotspotfw/internetconnectivitytestservice/src/ictsengine.cpp
changeset 0 56b72877c1cb
child 2 6e4b6261703d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hotspotfw/internetconnectivitytestservice/src/ictsengine.cpp	Thu Dec 17 09:20:28 2009 +0200
@@ -0,0 +1,285 @@
+/*
+* Copyright (c) 2006 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:   Actual implementation of DLL. 
+*
+*/
+
+
+#include <apgcli.h>
+#include <eikenv.h> 
+#include <apgtask.h>
+#include <coemain.h> 
+#include <cmmanagerext.h>
+#include <cmmanagerdef.h>
+#include <f32file.h> 
+
+#include "ictsengine.h"
+#include "internetconnectivitycrkeys.h"
+#include "ictsasyncwait.h"
+#include "am_debug.h"
+#include "hotspotclientserver.h"
+
+
+using namespace CMManager;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::CIctsEngine
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CIctsEngine::CIctsEngine( TUint32 aIapId, 
+                          TUint32 aNetworkId,
+                          MIctsObserver& aClient ) :
+iIapId( aIapId ), iNetworkId( aNetworkId ), iPollingStatus( EFalse ), 
+iRepository( NULL ), iClient( aClient )
+    {
+    
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIctsEngine::ConstructL()
+    {
+    DEBUG("CIctsEngine::ConstructL");
+    _LIT8(KIp, "http://connectivity-test.ext.nokia.com/");
+    
+    // CenRep uses UTF 16
+    HBufC16* uriBuffer = HBufC16::NewLC( KMaxIpLength );
+    TPtr16 uriPtr = uriBuffer->Des();
+    // For HTTP FW change it to 8bit
+    HBufC8* uriBuffer8 = HBufC8::NewLC( KMaxIpLength );
+    TPtr8 uriPtr8 = uriBuffer8->Des();
+    TRAPD(err, iRepository = CRepository::NewL( 
+                                    KCRUidInternetConnectivitySettings ) );
+    if ( KErrNone == err )
+        {
+        TInt err = iRepository->Get( KIctsIpDestination, uriPtr );
+        uriPtr8.Copy( uriPtr );
+        iIPAddress = uriPtr8;
+        if ( KErrNone != err )
+            {
+            iIPAddress = KIp();
+            }
+        }
+    else
+        {   
+        iIPAddress = KIp();
+        }
+    CleanupStack::PopAndDestroy(uriBuffer8);
+    CleanupStack::PopAndDestroy(uriBuffer);
+    iPollingIntervalTimer = CIctsPollingIntervalTimer::NewL( *this );
+    
+    iPollingTimeTimer = CIctsPollingTimeTimer::NewL( *this );
+    
+    iHttpHandler = CIctsHttpHandler::NewL( *this, KHttpResponseTime );
+    
+    RCmManagerExt cmManager;
+    cmManager.OpenL();
+    CleanupClosePushL( cmManager );
+    
+    iEasyWlanIapId = cmManager.EasyWlanIdL();
+    DEBUG1("CIctsEngine::ConstructL iEasyWlanIapId %d", iEasyWlanIapId );
+    CleanupStack::PopAndDestroy( &cmManager );
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::NewL
+// ---------------------------------------------------------------------------
+//
+CIctsEngine* CIctsEngine::NewL( TUint32 aIapId, 
+                                                TUint32 aNetworkId,
+                                                MIctsObserver& aClient
+                                                 )
+    {
+    CIctsEngine* self =  new (ELeave) CIctsEngine( aIapId, 
+                                                                   aNetworkId,
+                                                                   aClient );
+    CleanupStack::PushL( self );
+    self->ConstructL();                                                            
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::~CIctsEngine
+// ---------------------------------------------------------------------------
+//
+CIctsEngine::~CIctsEngine()
+    {
+    DEBUG("CIctsEngine::~CIctsEngine()");
+    if ( iRepository )
+        {
+        delete iRepository;
+        }
+    
+    if ( iPollingIntervalTimer )
+        {
+        delete iPollingIntervalTimer;
+        }
+    
+    if ( iPollingTimeTimer )
+        {
+        delete iPollingTimeTimer;
+        }
+    
+    if ( iHttpHandler )
+        {
+        delete iHttpHandler;
+        }
+        
+    iHsServer.Close();
+    DEBUG("CIctsEngine::~CIctsEngine() DONE");
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::Start
+// ---------------------------------------------------------------------------
+//
+void CIctsEngine::StartL()
+    { 
+    DEBUG("CIctsEngine::StartL()");
+    if ( CheckSettingL() == EIctsRunAutomatically )
+        {
+        TInt result = iHttpHandler->SendHttpRequestL( iIPAddress , iIapId, iNetworkId );
+            
+        // Sending HTTP request did not succeed. RConnection failed.
+        if ( KErrNone != result )
+            {
+            iClient.ConnectivityObserver( EConnectionNotOk, iString );
+            }
+        }
+    else 
+        {
+        iClient.ConnectivityObserver( EConnectionNotOk, iString );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::CancelStart
+// ---------------------------------------------------------------------------
+//
+void CIctsEngine::CancelStartL()
+    { 
+    DEBUG("CIctsEngine::CancelStartL()");
+    iHttpHandler->CancelHttpRequestL(); 
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::StartPolling
+// ---------------------------------------------------------------------------
+//
+void CIctsEngine::StartPolling( TInt aTime, 
+                                        TInt aInterval )
+    {
+    DEBUG("CIctsEngine::StartPolling()");
+    iPollingStatus = ETrue;
+    iPollingInterval = aInterval;
+    // Do not send right away HTTP request since most likely it will fail. -> hotspot browser case.
+    iPollingIntervalTimer->After( KStartPollingWait );
+    iPollingTimeTimer->After( aTime + KStartPollingWait );
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::StopPolling
+// ---------------------------------------------------------------------------
+//
+void CIctsEngine::StopPolling()
+    {
+    DEBUG("CIctsEngine::StopPolling()");
+    iPollingIntervalTimer->Cancel();
+    iPollingTimeTimer->Cancel();
+    iPollingStatus = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::CheckSettingL
+// ---------------------------------------------------------------------------
+//
+TInt CIctsEngine::CheckSettingL()
+    {
+    DEBUG("CIctsEngine::CheckSettingL()");
+    // Check connectivity test setting from CenRep
+    TInt ret( EIctsRunAutomatically );
+    iRepository->Get( KIctsTestPermission, ret );
+    
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::PollingIntervalTimeout
+// ---------------------------------------------------------------------------
+// 
+void CIctsEngine::PollingIntervalTimeout()
+    {
+    DEBUG("CIctsEngine::PollingIntervalTimeout()");
+    TRAPD( err, iHttpHandler->SendHttpRequestL( iIPAddress , 
+                                            iIapId, 
+                                            iNetworkId ));
+        
+    if ( KErrNone != err )
+        {
+        DEBUG1("CIctsEngine::PollingIntervalTimeout() err: %d", err);
+        StopPolling();
+        iClient.ConnectivityObserver( EConnectionNotOk, iString );    
+        }
+    iPollingIntervalTimer->After( iPollingInterval );
+    }
+    
+// ---------------------------------------------------------------------------
+// CIctsEngine::PollingTimeTimeout
+// ---------------------------------------------------------------------------
+// 
+void CIctsEngine::PollingTimeTimeout()
+    {
+    DEBUG("CIctsEngine::PollingTimeTimeout()");
+    StopPolling();
+    iClient.ConnectivityObserver( ETimeout, iString );
+    }
+
+// ---------------------------------------------------------------------------
+// CIctsEngine::HttpEventL
+// ---------------------------------------------------------------------------
+//  
+void CIctsEngine::HttpEventL( TIctsTestResult aResult, TDesC& aString )
+    {
+    DEBUG("CIctsEngine::HttpEventL()");
+   
+    if( iPollingStatus )
+        {
+        DEBUG("CIctsEngine::HttpEventL() polling");
+        // We are polling. Send only EConnectionOk result to client.
+        // Otherwise continue polling.
+        if ( aResult == EConnectionOk)   
+            {
+            DEBUG("CIctsEngine::HttpEventL() EConnectionOk");
+            StopPolling();
+            iClient.ConnectivityObserver( aResult, aString );
+            }
+    
+        }
+    else
+        {
+        DEBUG("CIctsEngine::HttpEventL() not polling");
+        iClient.ConnectivityObserver( aResult, aString );
+        DEBUG("CIctsEngine::HttpEventL() result sent");
+        }
+    }
+
+// End of File