diff -r 000000000000 -r 094583676ce7 PECengine/PresenceServer2/ServerSrc/CPEngHandlerLogIn.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/PresenceServer2/ServerSrc/CPEngHandlerLogIn.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,286 @@ +/* +* Copyright (c) 2002 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: Log in Handler +* Handles Log in for opening of the network session +* +*/ + + + +// INCLUDE FILES +#include +#include "CPEngHandlerLogIn.h" +#include "MPEngRequestHandlerObserver.h" +#include "MPEngAccessHandler.h" +#include "MPEngSubSession.h" +#include "TPEngServerMessages.h" + +// Debug prints +#include "PresenceDebugPrint.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::CPEngHandlerLogIn +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CPEngHandlerLogIn::CPEngHandlerLogIn( + MPEngRequestHandlerObserver& aObserver, + MPEngAccessHandler& aAccessHandler, + MPEngSubSession& aSubSession, + const RPEngMessage& aMessage, + TInt32 aSessionId, + TInt32 aSubSessionId ) + : CActive( CActive::EPriorityStandard ), + iSessionId( aSessionId ), + iSubSessionId( aSubSessionId ), + iFunction( aMessage.Function() ), + iAccessHandler( aAccessHandler ), + iObserver( aObserver ), + iSubSession( aSubSession ) + { + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPEngHandlerLogIn::ConstructL() + { + // add active object to the active scheduler + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPEngHandlerLogIn* CPEngHandlerLogIn::NewL( + MPEngRequestHandlerObserver& aObserver, + MPEngAccessHandler& aAccessHandler, + MPEngSubSession& aSubSession, + const RPEngMessage& aMessage, + TInt32 aSessionId, + TInt32 aSubSessionId ) + { + CPEngHandlerLogIn* self = NewLC( aObserver, + aAccessHandler, + aSubSession, + aMessage, + aSessionId, + aSubSessionId ); + + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPEngHandlerLogIn* CPEngHandlerLogIn::NewLC( + MPEngRequestHandlerObserver& aObserver, + MPEngAccessHandler& aAccessHandler, + MPEngSubSession& aSubSession, + const RPEngMessage& aMessage, + TInt32 aSessionId, + TInt32 aSubSessionId ) + { + CPEngHandlerLogIn* self = new( ELeave ) CPEngHandlerLogIn( + aObserver, + aAccessHandler, + aSubSession, + aMessage, + aSessionId, + aSubSessionId ); + + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + + +// Destructor +CPEngHandlerLogIn::~CPEngHandlerLogIn() + { + Cancel(); + // remove handler from the CSP Session manager + iObserver.CompleteRequestHandler( this ); + } + +///////////////////////////////////////////////////////////////////////////////// +// =============== New Functions of the MPEngRequestHandler class ============== +///////////////////////////////////////////////////////////////////////////////// + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::StartHandlerL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPEngHandlerLogIn::StartHandlerL( + const RPEngMessage& aMessage ) + { + PENG_DP( D_PENG_LIT( "CPEngHandlerLogIn::StartHandlerL" ) ); + // read log in buffer + HBufC8* loginData = aMessage.ReadOneDescriptor8L( KMessageSlot0 ); + // Issue request to the access handler and activate Active object + // takes ownership of login buffer, safe to call + iAccessHandler.LogInL( iStatus, loginData ); + if ( iStatus == KRequestPending ) + { + SetActive(); + } + else + { + aMessage.Complete( KErrNone ); + delete this; + } + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::SessionId +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt32 CPEngHandlerLogIn::SessionId() const + { + return iSessionId; + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::SubSessionId +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPEngHandlerLogIn::SubSessionId() const + { + return iSubSessionId; + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::RequestFunction +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPEngHandlerLogIn::RequestFunction() const + { + return iFunction; + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::CancelRequestD +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPEngHandlerLogIn::CancelRequestD() + { + PENG_DP( D_PENG_LIT( "CPEngHandlerLogIn::CancelRequest" ) ); + // delete handler, it will cancel itself + delete this; + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::SetMessage +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPEngHandlerLogIn::SetMessage( + const RPEngMessage& aMessage ) + { + iMessage = aMessage; + } + + +///////////////////////////////////////////////////////////////////////////////// +// =============== New Functions of the CActive class ========================== +///////////////////////////////////////////////////////////////////////////////// + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::RunL +// Handles an active object’s request completion event. +// Check if log in was successful and update state according to it, then complete +// request with appropriate Error code +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPEngHandlerLogIn::RunL() + { + // what is necessary depends how request went + TInt compCode ( iStatus.Int() ); + PENG_DP( D_PENG_LIT( "CPEngHandlerLogIn::RunL() - result: %d" ), compCode ); + switch ( compCode ) + { + case KErrNone: + { + // log in successful, update state of the CSP holder + iObserver.SetCSPSessionOpenedL(); + iSubSession.HandleLogInL(); + break; + } + default: + { + // complete Client's message with the error, this might lead to + // deletion of whole session holder, along with this handler, + // so later completion would not be safe,we might not exist anymore + break; + } + } + iMessage.Complete( compCode ); + delete this; + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::RunError +// Handles a leave occurring in the request completion event handler RunL() +// implementation should return KErrNone, if it handles the leave +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CPEngHandlerLogIn::RunError( + TInt aError ) + { + // seems like nothing to do here + PENG_DP( D_PENG_LIT( "CPEngHandlerLogIn::RunError() - result: %d" ), aError ); + // nothing to do, just to complete and destroy this object + iMessage.Complete( aError ); + delete this; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CPEngHandlerLogIn::DoCancel +// Implements cancellation of an outstanding request. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPEngHandlerLogIn::DoCancel() + { + // request was canceled, cancel log in, complete RPEngMessage + // we should not leave, but if it fails we are baaaad + iAccessHandler.Cancel(); + + // complete message + iMessage.Complete( KErrCancel ); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// End of File