--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/PresenceManager2/SrcSearch/CPEngSearchSessionHandler.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,258 @@
+/*
+* 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: this class handles the search session
+*
+*/
+
+// INCLUDE FILES
+#include "CPEngSearchSessionHandler.h"
+#include "CPEngNWSessionSlot2.h"
+#include "PEngWVSearchPanics.h"
+#include <CIMPSSAPSettings.h>
+#include <impserrors.h>
+
+//MACROS
+
+#define RETURN_IF_NOT_PENDING( aId ) \
+ { \
+ if( !IsRequestPending( aId ) ) \
+ { \
+ return; \
+ } \
+ } \
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::NewL()
+// -----------------------------------------------------------------------------
+CPEngSearchSessionHandler* CPEngSearchSessionHandler::NewL(
+ TInt aPriority,
+ const CPEngNWSessionSlotID2& aNWSessionSlotID )
+ {
+ CPEngSearchSessionHandler* self = new ( ELeave ) CPEngSearchSessionHandler();
+ CleanupStack::PushL( self );
+ self->ConstructL( aPriority, aNWSessionSlotID );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::CPEngSearchSessionHandler()
+// -----------------------------------------------------------------------------
+CPEngSearchSessionHandler::CPEngSearchSessionHandler()
+ : iOperation( EPEngAccOp_Idle )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::~CPEngSearchSessionHandler()
+// -----------------------------------------------------------------------------
+CPEngSearchSessionHandler::~CPEngSearchSessionHandler()
+ {
+ iImpsAccClient.Unregister();
+ iImpsEng.Close();
+
+ delete iImpsSap;
+
+ if ( iRequest )
+ {
+ User::RequestComplete( iRequest, KErrCancel );
+ }
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::ConstructL()
+// -----------------------------------------------------------------------------
+void CPEngSearchSessionHandler::ConstructL( TInt aPriority,
+ const CPEngNWSessionSlotID2& aNWSessionSlotID )
+ {
+ iImpsSap = CIMPSSAPSettings::NewL();
+
+
+ //Load SAP data
+ CPEngNWSessionSlot2* slot = CPEngNWSessionSlot2::NewLC( aNWSessionSlotID, aPriority );
+ User::LeaveIfError( slot->OpenNWPresenceSessionOwnership() );
+ User::LeaveIfError( slot->GetNWPresenceSessionSap( *iImpsSap ) );
+ CleanupStack::PopAndDestroy( slot );
+
+
+ User::LeaveIfError( iImpsEng.Connect() );
+ iImpsAccClient.RegisterL( iImpsEng, this, aPriority );
+ iImpsAccClient.RegisterErrorObserverL( *this );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::OpenCspSessionL()
+// -----------------------------------------------------------------------------
+void CPEngSearchSessionHandler::OpenCspSessionL( TRequestStatus& aStatus )
+ {
+ __ASSERT_ALWAYS( !iRequest, User::Leave( KErrAlreadyExists ) );
+ __ASSERT_ALWAYS( iImpsSap, SearchPanicOrLeaveL( EPEngNoSapContainerLoaded, KErrNotReady ) );
+
+
+ TImpsCspIdentifier sessIndentifier;
+ sessIndentifier.SetUserIdL( iImpsSap->SAPUserId() );
+ sessIndentifier.SetSapL( iImpsSap->SAPAddress() );
+
+ iOpId = iImpsAccClient.LoginL( sessIndentifier,
+ iImpsSap->SAPUserPassword(),
+ iImpsSap->ClientId(),
+ iImpsSap->AccessPoint(),
+ &( iImpsSap->ServerAuthenticationName() ),
+ &( iImpsSap->ServerAuthenticationPassword() ) );
+
+
+
+
+
+ iRequest = &aStatus;
+ *iRequest = KRequestPending;
+ iOperation = EPEngAccOp_LogIn;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::CloseCspSessionL()
+// -----------------------------------------------------------------------------
+void CPEngSearchSessionHandler::CloseCspSessionL( TRequestStatus& aStatus )
+ {
+ __ASSERT_ALWAYS( !iRequest, User::Leave( KErrAlreadyExists ) );
+
+ iOpId = iImpsAccClient.LogoutL();
+ iRequest = &aStatus;
+ *iRequest = KRequestPending;
+ iOperation = EPEngAccOp_LogOut;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::ImpsEngine()
+// -----------------------------------------------------------------------------
+RImpsEng& CPEngSearchSessionHandler::ImpsEngine()
+ {
+ return iImpsEng;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::IsRequestPending()
+// -----------------------------------------------------------------------------
+TBool CPEngSearchSessionHandler::IsRequestPending( TInt aId )
+ {
+ if ( ( aId == iOpId ) && iRequest )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::HandleLoginL()
+// From MImpsAccessHandler2
+// -----------------------------------------------------------------------------
+void CPEngSearchSessionHandler::HandleLoginL( TInt aId,
+ TImpsCspIdentifier& /*aCspId*/ )
+ {
+ RETURN_IF_NOT_PENDING( aId );
+ User::RequestComplete( iRequest, KErrNone );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::HandleLoginL()
+// From MImpsAccessHandler2
+// -----------------------------------------------------------------------------
+void CPEngSearchSessionHandler::HandleLogoutL( TInt aId,
+ TImpsCspIdentifier& /*aCspId*/ )
+ {
+ RETURN_IF_NOT_PENDING( aId );
+ User::RequestComplete( iRequest, KErrNone );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::HandleLoginL()
+// From MImpsAccessHandler2
+// -----------------------------------------------------------------------------
+void CPEngSearchSessionHandler::HandleLoginCancelL( TInt aCancelledOpId,
+ TImpsCspIdentifier& /*aCspId*/ )
+ {
+ RETURN_IF_NOT_PENDING( aCancelledOpId );
+ User::RequestComplete( iRequest, KErrCancel );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::HandleLoginL()
+// From MImpsAccessHandler2
+// -----------------------------------------------------------------------------
+void CPEngSearchSessionHandler::HandleNbrSessionsL( TInt /*aId*/,
+ TInt /*aNbr*/,
+ TImpsCspIdentifier& /*aCspId*/ )
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEngSearchSessionHandler::HandleErrorL()
+// From MImpsErrorHandler2
+// -----------------------------------------------------------------------------
+void CPEngSearchSessionHandler::HandleErrorL( TInt aStatus,
+ TInt aOpId,
+ const TDesC* /*aDescription*/,
+ const CImpsDetailed* /*aDetailedRes*/,
+ TImpsCspIdentifier& /*aCspId*/ )
+ {
+ RETURN_IF_NOT_PENDING( aOpId );
+
+ //Map ignorable errors to KErrNone
+ switch ( iOperation )
+ {
+ case EPEngAccOp_LogOut:
+ {
+ if ( ( aStatus == KImpsErrorNotLogged ) ||
+ ( aStatus == KImpsErrorOthersLogged ) ||
+ ( aStatus == KImpsErrorShuttingDown ) ||
+ ( aStatus == KImpsErrorBearerSuspended ) )
+ {
+ aStatus = KErrNone;
+ }
+ break;
+ }
+
+ default:
+ {
+ //Nothing to do
+ break;
+ }
+ }
+
+ User::RequestComplete( iRequest, aStatus );
+ }
+
+
+// End of file