PECengine/PresenceManager2/SrcNWSessionSlot/CPEngNWSessionOpenOp.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/PresenceManager2/SrcNWSessionSlot/CPEngNWSessionOpenOp.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,175 @@
+/*
+* Copyright (c) 2004 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:  Operation handler for opening the network session.
+*
+*/
+
+// INCLUDE FILES
+#include "CPEngNWSessionOpenOp.h"
+#include "PEngLoginDataCodec.h"
+#include "CPEngNWSessionSlotID2Imp.h"
+#include "CPEngNWSessionProxy.h"
+#include "PresenceDebugPrint.h"
+#include <CoreApplicationUIsSDKCRKeys.h>
+#include <centralrepository.h>
+#include <PEngPresenceEngineConsts2.h>
+#include <CPEngNWSessionSlotID2.h>
+
+
+
+//LOCAL constants
+#ifdef _DEBUG
+namespace
+    {
+    //Panic
+    _LIT( KPEngNWSessionOpenOpPanic, "PEngNWOpenOp" );
+
+    //Panic reasons
+    enum TPEngNWSessionOpenOpPanicReasons
+        {
+        ENWSessionOpenOpInUse = 1,
+        };
+
+    void PEngNWSessionOpenOpPanic( TPEngNWSessionOpenOpPanicReasons aPanicReason )
+        {
+        User::Panic( KPEngNWSessionOpenOpPanic, aPanicReason );
+        }
+    }
+#endif
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CPEngNWSessionOpenOp::NewL()
+// -----------------------------------------------------------------------------
+CPEngNWSessionOpenOp* CPEngNWSessionOpenOp::NewL( TInt aPriority,
+                                                  CPEngNWSessionProxy& aNWSessionProxy,
+                                                  CPEngNWSessionSlot2& aInterface,
+                                                  const CIMPSSAPSettings& aImpsSap,
+                                                  MPEngNWSessionOperationObserver2& aObserver )
+    {
+    CPEngNWSessionOpenOp* self = new ( ELeave ) CPEngNWSessionOpenOp( aPriority,
+                                                                      aNWSessionProxy,
+                                                                      aInterface,
+                                                                      aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL( aImpsSap );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEngNWSessionOpenOp::~CPEngNWSessionOpenOp()
+// -----------------------------------------------------------------------------
+CPEngNWSessionOpenOp::~CPEngNWSessionOpenOp()
+    {
+    CActive::Cancel();
+    delete iLoginData;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngNWSessionOpenOp::CPEngNWSessionOpenOp()
+// -----------------------------------------------------------------------------
+CPEngNWSessionOpenOp::CPEngNWSessionOpenOp( TInt aPriority,
+                                            CPEngNWSessionProxy& aNWSessionProxy,
+                                            CPEngNWSessionSlot2& aInterface,
+                                            MPEngNWSessionOperationObserver2& aObserver )
+        : CPEngNWSessionOperation( aPriority, aNWSessionProxy, aInterface, aObserver )
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngNWSessionOpenOp::ConstructL()
+// -----------------------------------------------------------------------------
+void CPEngNWSessionOpenOp::ConstructL( const CIMPSSAPSettings& aImpsSap )
+    {
+    //Is network access allowed?
+    CheckNetworkAccessAllowedL();
+
+    //Let the base to do its construction stuff
+    CPEngNWSessionOpenOp::BaseConstructL();
+    iLoginData = PEngLoginDataCodec::PackLoginDataL( aImpsSap );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngNWSessionOpenOp::IssueNWSessionOpen()
+// -----------------------------------------------------------------------------
+void CPEngNWSessionOpenOp::IssueNWSessionOpen()
+    {
+    __ASSERT_DEBUG( !IsActive(),
+                    PEngNWSessionOpenOpPanic( ENWSessionOpenOpInUse ) );
+
+    TInt err = iNWSessionProxy.OpenSession( *iLoginData, iStatus );
+    HandleOperationIssued( err, EPEngNWSSOpNWSessionOpen );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngNWSessionOpenOp::DoCancel()
+// -----------------------------------------------------------------------------
+void CPEngNWSessionOpenOp::DoCancel()
+    {
+    iNWSessionProxy.CancelOpenSession();
+    NotifyObserverFromCancel();
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngNWSessionOpenOp::DoHandleOpCompleted()
+// -----------------------------------------------------------------------------
+void CPEngNWSessionOpenOp::DoHandleOpCompleted( TInt aError )
+    {
+    PENG_DP( D_PENG_LIT( "CPEngNWSessionSlot2::OpenNWPresenceSession() - completed [%d]" ), aError );
+
+    //Suppress unreferenced parameter warning
+    ( void ) aError;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngNWSessionOpenOp::CheckNetworkAccessAllowedL()
+// -----------------------------------------------------------------------------
+//
+void CPEngNWSessionOpenOp::CheckNetworkAccessAllowedL()
+    {
+    TBool connectionAllowed = ETrue;
+
+    //Dig out the real status
+    CRepository* cenRep = CRepository::NewLC( KCRUidCoreApplicationUIs );
+    TInt status = ECoreAppUIsNetworkConnectionAllowed;
+    cenRep->Get( KCoreAppUIsNetworkConnectionAllowed, status );
+    if ( status == ECoreAppUIsNetworkConnectionNotAllowed )
+        {
+        connectionAllowed = EFalse;
+        }
+    CleanupStack::PopAndDestroy(); //cenRep
+
+    //Handle the case
+    if ( !connectionAllowed )
+        {
+        User::Leave( KErrAccessDenied );
+        }
+    }
+
+
+
+// End of file
+
+