ncdengine/engine/accesspointmanager/src/catalogsremoveaccesspointshutdownoperation.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/accesspointmanager/src/catalogsremoveaccesspointshutdownoperation.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 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 CCatalogsRemoveAccesspointShutdownOperation implementation
+*
+*/
+
+
+#include "catalogsremoveaccesspointshutdownoperation.h"
+
+#include "catalogsconnectionmethod.h"
+#include "catalogsaccesspointmanagerimpl.h"
+#include "catalogshttpsessionmanagerimpl.h"
+#include "catalogsnetworkmanager.h"
+
+// one minute
+const TTimeIntervalMicroSeconds32 KTimerDelay( 60 * 1000000 );
+
+
+TInt CCatalogsRemoveAccesspointShutdownOperation::CallbackRemoveAccessPoint( 
+    TAny* aData )
+    {
+    static_cast< CCatalogsRemoveAccesspointShutdownOperation* >( 
+        aData )->RemoveAccessPoint();
+    return KErrNone;
+    }
+
+CCatalogsRemoveAccesspointShutdownOperation* 
+    CCatalogsRemoveAccesspointShutdownOperation::NewL( 
+        const TUid& aFamilyUid,
+        const TUint32 aApnId )
+    {
+    CCatalogsRemoveAccesspointShutdownOperation* self = new( ELeave ) 
+        CCatalogsRemoveAccesspointShutdownOperation( aFamilyUid, aApnId );
+    return self;
+    }
+
+
+CCatalogsRemoveAccesspointShutdownOperation::CCatalogsRemoveAccesspointShutdownOperation(
+    const TUid& aFamilyUid,
+    const TUint32 aApnId ) 
+    : CCatalogsShutdownOperation( aFamilyUid ),
+      iApnId( aApnId )
+    {    
+    }
+
+    
+CCatalogsRemoveAccesspointShutdownOperation::~CCatalogsRemoveAccesspointShutdownOperation()
+    {
+    Cancel();
+    }
+
+
+void CCatalogsRemoveAccesspointShutdownOperation::HandleAccessPointEventL( 
+    const TCatalogsConnectionMethod& aAp,
+    const TCatalogsAccessPointEvent& aEvent )
+    {
+    DLTRACEIN((""));
+    if ( aEvent == ECatalogsAccessPointReallyClosed &&
+         aAp.iApnId == iApnId )
+        {
+        DLTRACE(("AP closed, delete it"));
+        RemoveAccessPoint();
+        }
+    }
+
+
+void CCatalogsRemoveAccesspointShutdownOperation::DoExecuteL()
+    {
+    DLTRACEIN((""));
+    iNetworkManager = &CCatalogsHttpSessionManager::NetworkManagerL();
+    iNetworkManager->AddObserverL( *this );
+    
+    iNetworkManager->UpdateConnectionsL();    
+    
+    TCatalogsConnectionMethod method( 
+        iApnId, 
+        ECatalogsConnectionMethodTypeAccessPoint );
+    method.iId = iApnId;
+    
+    TBool apIsOpen = iNetworkManager->IsAccessPointOpen( method );
+    if ( !apIsOpen ) 
+        {
+        // Try to delete the accesspoint again
+        RemoveAccessPoint();
+        }
+    // this is the ultimate failsafe that ensures that we actually stop the 
+    // engine at some point even if we don't get any connection closed events.
+    else
+        {
+        iTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+        iTimer->Start( 
+            KTimerDelay, 
+            KTimerDelay, 
+            TCallBack( &CallbackRemoveAccessPoint, this ) );
+        }
+    }
+
+
+void CCatalogsRemoveAccesspointShutdownOperation::DoCancel()
+    {
+    delete iTimer;
+    iTimer = NULL;
+
+    if ( iNetworkManager )
+        {
+        iNetworkManager->RemoveObserver( *this );
+        iNetworkManager = NULL;
+        }
+    }
+
+
+void CCatalogsRemoveAccesspointShutdownOperation::RemoveAccessPoint()
+    {
+    DLTRACEIN((""));
+    Cancel();
+    
+    // If this fails then it fails. We've tried hard enough
+    TRAP_IGNORE( 
+        CCatalogsAccessPointManager::RemoveApFromCommsDatabaseL( iApnId ) );
+    
+    // Notify owner which will delete this object
+    NotifyObserver( KErrNone );
+    }
+
+
+