--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/PresenceServer2/ClientSrc/RPEngSessionHolder.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,299 @@
+/*
+* 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: Sub session of the Presence server
+* It is used to maintain one session slot.
+*
+*/
+
+
+// INCLUDES
+#include <f32file.h>
+
+#include "RPEngSessionHolder.h"
+
+#include "TPEngServerMessages.h"
+
+#include "PEngWVServices2.h"
+
+
+// PEC Engine internal constants
+#include "PEngInternalGlobalConsts.h"
+
+// debug prints
+#include "PresenceDebugPrint.h"
+
+// CONSTANTS
+// estimation of the Log In data buffer size, used for optimization
+const TInt KPEngLogInDataEstimation = 300;
+
+
+// MACROS
+/**
+ * Return error code if client is not connected
+ */
+#define RETURN_ERR_IF_NOT_CONNECTED()\
+ if(!iConnected)\
+ {\
+ return KErrDisconnected;\
+ }
+/**
+ * Return from function if client is not connected
+ */
+#define RETURN_IF_NOT_CONNECTED()\
+ if(!iConnected)\
+ {\
+ return;\
+ }
+
+/**
+ * Return Error code if pointer is NULL
+ */
+#define RETURN_IF_NULL( aPointer, aErrorCode )\
+ if ( !aPointer )\
+ {\
+ return aErrorCode;\
+ }
+
+// ============================ EXPORTED FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::RPEngSessionHolder
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RPEngSessionHolder::RPEngSessionHolder()
+ : iLogInData( KPEngLogInDataEstimation )
+ {
+ }
+
+// Destructor
+EXPORT_C RPEngSessionHolder::~RPEngSessionHolder()
+ {
+ }
+
+// ============== CONNECTION FUNCTIONS ========================================
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::Connect
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::Connect(
+ const TDesC8& aSessSlotId,
+ const TDesC16& aAppId,
+ RPEngManagerClient& aManagerClient )
+ {
+ PENG_DP_TXT( "RPEngSessionHolder::Connect()" );
+
+ TIpcArgs messArguments;
+ messArguments.Set( KMessageSlot0, &aSessSlotId );
+ messArguments.Set( KMessageSlot1, &aAppId );
+
+ TInt err( RSubSessionBase::CreateSubSession( aManagerClient,
+ EMainSessCreateHolderSubSession,
+ messArguments ) );
+
+ iConnected = ( err == KErrNone );
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::Close
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RPEngSessionHolder::Close()
+ {
+ PENG_DP_TXT( "RPEngSessionHolder::Close()" );
+
+ // all requests from this sub-session are canceled by framework
+ CloseSubSession( EMainSessCloseSubSession );
+ iConnected = EFalse;
+
+
+#if _BullseyeCoverage
+ cov_write();
+#endif
+ }
+
+
+// ============== NEW CONNECTION HANDLING FUNCTIONS ============================
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::LogIn
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::LogIn(
+ const TDesC8& aLogInData,
+ TRequestStatus& aStatus )
+ {
+ RETURN_ERR_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ iLogInData = aLogInData.Length();
+ messArgs.Set( KMessageSlot0, &aLogInData );
+ SendReceive( ESubSessLogIn , messArgs, aStatus );
+ return KErrNone;
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::CancelLogIn
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RPEngSessionHolder::CancelLogIn()
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, ESubSessLogIn );
+ SendReceive( ESubSessCancelRequest , messArgs );
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::Attach
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::Attach()
+ {
+ RETURN_ERR_IF_NOT_CONNECTED();
+ return SendReceive( ESubSessAttachHolder );
+ }
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::Attach
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::Attach(
+ const TDesC& aProcessName )
+ {
+ RETURN_ERR_IF_NOT_CONNECTED();
+ TIpcArgs messArg;
+ messArg.Set( KMessageSlot0, &aProcessName );
+ return SendReceive( ESubSessAttachWithProcessName, messArg );
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::ForceLogOut
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::ForceLogOut(
+ TRequestStatus& aStatus )
+ {
+ RETURN_ERR_IF_NOT_CONNECTED();
+ SendReceive( ESubSessForceLogOut, aStatus );
+ return KErrNone;
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::CancelLogOut
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RPEngSessionHolder::CancelLogOut()
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, ESubSessForceLogOut );
+ SendReceive( ESubSessCancelRequest , messArgs );
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::Detach
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::Detach(
+ TRequestStatus& aStatus )
+ {
+ RETURN_ERR_IF_NOT_CONNECTED();
+ SendReceive( ESubSessDetachHolder, aStatus );
+ return KErrNone;
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::CancelDetach
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RPEngSessionHolder::CancelDetach()
+ {
+ RETURN_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, ESubSessDetachHolder );
+ SendReceive( ESubSessCancelRequest , messArgs );
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::LeaveAlive
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::LeaveAlive(
+ const TDesC& aProcessName )
+ {
+ RETURN_ERR_IF_NOT_CONNECTED();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, &aProcessName );
+ return SendReceive( ESubSessLeaveAlive, messArgs );
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::GetServiceTree
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::GetServiceTree(
+ TPEngWVCspServicesTree2& aServiceTree )
+ {
+ RETURN_ERR_IF_NOT_CONNECTED();
+ TPckgBuf<TPEngWVCspServicesTree2> serviceTree( aServiceTree );
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, &serviceTree );
+ TInt err( SendReceive( ESubSessGetServiceTree, messArgs ) );
+ aServiceTree = serviceTree();
+ return err;
+ }
+
+
+// -----------------------------------------------------------------------------
+// RPEngSessionHolder::LogInData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RPEngSessionHolder::LogInData(
+ HBufC8*& aLogInData )
+ {
+ RETURN_ERR_IF_NOT_CONNECTED();
+ delete aLogInData;
+ aLogInData = HBufC8::New( iLogInData );
+ RETURN_IF_NULL( aLogInData, KErrNoMemory );
+ TPtr8 buffDes = aLogInData->Des();
+ TIpcArgs messArgs;
+ messArgs.Set( KMessageSlot0, & buffDes );
+ TInt err( SendReceive( ESubSessGetLogInData, messArgs ) );
+ if ( err > 0 )
+ {
+ delete aLogInData;
+ aLogInData = NULL;
+ aLogInData = HBufC8::New( err );
+ RETURN_IF_NULL( aLogInData, KErrNoMemory );
+ buffDes.Set( aLogInData->Des() );
+ err = SendReceive( ESubSessGetLogInData, messArgs );
+ }
+ if ( err != KErrNone )
+ {
+ delete aLogInData;
+ aLogInData = NULL;
+ }
+ return err;
+ }
+
+// End of File