ximpfw/core/srcclient/ximpsrvcontextclient.cpp
changeset 0 e6b17d312c8b
--- /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
+
+