--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ximpfw/core/srcclient/ximpsrvcontextclient.cpp Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2006 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: XIMP Framework PSC Server context session.
+ *
+*/
+
+#include "ximpsrvcontextclient.h"
+#include "ximpprocessstarter.h"
+#include "ximpserverdefs.h"
+
+#include <e32base.h>
+
+//Import NXIMPSrv
+using namespace NXIMPSrv;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::RXIMPSrvContextClient()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RXIMPSrvContextClient::RXIMPSrvContextClient()
+ {
+ }
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::Connect()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RXIMPSrvContextClient::ConnectL( TUid aProtocolImpUid )
+ {
+ iMyUid = aProtocolImpUid;
+
+ // create the server name: "!XIMPCtxSrv9bde667a"
+ HBufC* serverName = HBufC::NewLC( NName::KSymbianServer().Length() +
+ NStartupParam::KProtocolUidMaxLen +
+ 1 );
+
+ serverName->Des().Copy( NName::KSymbianServer );
+ serverName->Des().AppendNumFixedWidth( iMyUid.iUid,
+ EHex,
+ NStartupParam::KProtocolUidMaxLen );
+
+ // Pass the UID to server side.
+ // For security reasons it was not allowed to pass the complete
+ // server name descriptor but just the UID part
+ RArray< TXIMPProcessStartupParam > params;
+ CleanupClosePushL( params );
+
+ TXIMPProcessStartupParam paramUid;
+ paramUid.Set( NStartupParam::KProtocolUidIndex,
+ iMyUid.iUid );
+
+ User::LeaveIfError( params.Append( paramUid ) );
+ TArray< TXIMPProcessStartupParam > array = params.Array();
+
+
+ //Get path to correct exe to launch
+ TFileName fullExePath;
+ XIMPProcessStarter::FullExePathForClienLocation( NName::KExecutable,
+ fullExePath );
+
+ //Create a connection
+ TInt ret = XIMPProcessStarter::ConnectToServer( fullExePath,
+ KNullDesC,
+ &array,
+ *this,
+ *serverName,
+ TVersion( NVersion::KMajor,
+ NVersion::KMinor,
+ NVersion::KBuild ),
+ NRequest::KMsgSlotCount );
+ User::LeaveIfError( ret );
+ CleanupStack::PopAndDestroy( 2, serverName ); // params, serverName
+
+ //Mutate the server side session to correct type
+ User::LeaveIfError( SendReceive( NRequest::EBecomeCtxSession ) );
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::Close()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RXIMPSrvContextClient::Close()
+ {
+ RSessionBase::Close();
+ #if _BullseyeCoverage
+ cov_write();
+ #endif
+ }
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::DoQueueOperation()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RXIMPSrvContextClient::DoQueueOperation(
+ TInt aOperationType,
+ const TDesC8& aOperationParams,
+ TXIMPRequestId& aReqId )
+ {
+ TPckgBuf< TXIMPRequestId > reqIdPck;
+
+ TIpcArgs msgArgs;
+ msgArgs.Set( 0, aOperationType );
+ msgArgs.Set( 1, &aOperationParams );
+ msgArgs.Set( 2, &reqIdPck );
+
+ TInt err = SendReceive( NRequest::ECtxSsQueueOperation, msgArgs );
+
+ aReqId = reqIdPck();
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::DoQueueOperation2()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RXIMPSrvContextClient::DoQueueOperation2(
+ TInt aOperationType,
+ const TDesC8& aOperationParams,
+ TXIMPRequestId& aReqId )
+ {
+ TPckgBuf< TXIMPRequestId > reqIdPck;
+
+ TIpcArgs msgArgs;
+ msgArgs.Set( 0, aOperationType );
+ msgArgs.Set( 1, &aOperationParams );
+ msgArgs.Set( 2, &reqIdPck );
+
+ TInt err = SendReceive( NRequest::ECtxSsQueueBindOperation, msgArgs );
+ aReqId = reqIdPck();
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::GetContextCapabilitiesL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* RXIMPSrvContextClient::GetContextFeaturesL() const
+ {
+ return PrepareAndGetDataL( NRequest::ECtxSsPrepareContextFeatures );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::ListenEvent()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RXIMPSrvContextClient::ListenEvent( TRequestStatus& aStatus )
+ {
+ SendReceive( NRequest::ECtxSsSetEventListenScout, aStatus );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::CancelListening()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RXIMPSrvContextClient::CancelListening()
+ {
+ SendReceive( NRequest::ECtxSsCancelEventListenScout );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::InstallEventFilterL()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RXIMPSrvContextClient::InstallEventFilterL(
+ const TDesC8& aFilterData )
+ {
+ TIpcArgs msgArgs;
+ msgArgs.Set( 0, &aFilterData );
+ User::LeaveIfError( SendReceive( NRequest::ECtxSsInstallEventFilter,
+ msgArgs ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::FetchTopEventDataLC()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C HBufC8* RXIMPSrvContextClient::FetchTopEventDataLC()
+ {
+ TInt bufSize = SendReceive( NRequest::ECtxSsFetchTopEventDataSize );
+ User::LeaveIfError( bufSize );
+
+ HBufC8* eventBuf = HBufC8::NewLC( bufSize );
+ TPtr8 ptrBuf( eventBuf->Des() );
+
+ TIpcArgs msgArgs;
+ msgArgs.Set( 0, &ptrBuf );
+
+ User::LeaveIfError( SendReceive( NRequest::ECtxSsFetchTopEventData,
+ msgArgs ) );
+ return eventBuf;
+ }
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::FetchTopEventReqId()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RXIMPSrvContextClient::FetchTopEventReqId(
+ TXIMPRequestId& aReqId )
+ {
+ TPckgBuf< TXIMPRequestId > reqIdPck;
+
+ TIpcArgs msgArgs;
+ msgArgs.Set( 0, &reqIdPck );
+
+ TInt err = SendReceive( NRequest::ECtxSsFetchTopEventReqId, msgArgs );
+
+ aReqId = reqIdPck();
+ return err;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::DropTopEvent()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt RXIMPSrvContextClient::DropTopEvent()
+ {
+ TInt err = SendReceive( NRequest::ECtxSsDropTopEvent );
+ return err;
+ }
+
+
+
+// ---------------------------------------------------------------------------
+// RXIMPSrvContextClient::PrepareAndGetDataL()
+// ---------------------------------------------------------------------------
+//
+HBufC8* RXIMPSrvContextClient::PrepareAndGetDataL( TInt aMsg ) const
+ {
+ TInt bufSize = SendReceive( aMsg );
+ User::LeaveIfError( bufSize );
+
+ HBufC8* buf = HBufC8::NewLC( bufSize );
+ TPtr8 ptrBuf( buf->Des() );
+
+ TIpcArgs msgArgs;
+ msgArgs.Set( 0, &ptrBuf );
+
+ User::LeaveIfError( SendReceive( NRequest::ECtxSsGetPreparedData,
+ msgArgs ) );
+
+ CleanupStack::Pop( buf );
+ return buf;
+ }
+
+
+// End of file
+
+