diff -r 000000000000 -r 61fad867f68e ximpfw/core/srcclient/ximpsrvcontextclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ximpfw/core/srcclient/ximpsrvcontextclient.cpp Wed Nov 03 09:32:20 2010 +0530 @@ -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 + +//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 + +