PECengine/PresenceServer2/ServerSrc/CPEngHandlerLogIn.cpp
changeset 0 094583676ce7
--- /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    <e32std.h>
+#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