--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/senduiservices/src/senduiserviceclient.cpp Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,138 @@
+/*
+* 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: Communicates message data to SendUILauncher server application
+*
+*/
+
+
+
+#include <aknappui.h>
+#include <AknServerApp.h>
+#include <s32mem.h>
+
+#include <CMessageData.h>
+#include <SendUiConsts.h>
+
+#include "senduiserviceclient.h"
+#include "senduiserviceslog.h"
+#include "senduilauncher.h"
+#include "senduiservicecommands.h"
+
+typedef TBuf8<KTransferBufferSize> TTransferBuf;
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Launch SendUi
+// ---------------------------------------------------------------------------
+//
+void RSendUiServiceClient::LaunchSendUiL(
+ TUid& aServiceUid,
+ TUid& aServiceProviderUid,
+ TBool& aLaunchEmbedded,
+ const CMessageData* aMessageData )
+ {
+ CBufBase* buffer = CBufFlat::NewL( KMessageBufferSize );
+ CleanupStack::PushL( buffer );
+
+ RBufWriteStream bufStream;
+ bufStream.Open( *buffer );
+
+ bufStream.WriteUint32L( aServiceProviderUid.iUid );
+ TUid dataType(KSenduiMsgDataBase);
+ if ( aMessageData )
+ {
+ dataType = aMessageData->DataType();
+ }
+ bufStream.WriteUint32L( dataType.iUid );
+ bufStream.WriteUint32L( aServiceUid.iUid );
+ bufStream.WriteUint32L( aLaunchEmbedded ? 1 : 0);
+ bufStream.WriteUint32L( aMessageData ? 1 : 0);
+
+ if ( aMessageData )
+ {
+ aMessageData->ExternalizeL( bufStream );
+ }
+
+ bufStream.CommitL();
+ bufStream.Close();
+
+
+ LOGTEXT2(_L("RSendUiServiceClient->LaunchSendUiL: buffer size %d"), buffer->Size() );
+ TInt totalSize = buffer->Size();
+ TInt transferredBytes(0);
+ TInt blockSize(0);
+
+ TTransferBuf transferBuffer;
+
+ while( transferredBytes < totalSize)
+ {
+ // determine block size
+ if ( transferredBytes + KTransferBufferSize < totalSize )
+ {
+ blockSize = KTransferBufferSize;
+ }
+ else
+ {
+ // the last block size
+ blockSize = totalSize - transferredBytes;
+ }
+ buffer->Read( transferredBytes, transferBuffer, blockSize );
+
+ TPckgBuf<TTransferBuf> transferBufferPckg( transferBuffer );
+ TPckgBuf<TInt> totalSizePckg( totalSize );
+ TPckgBuf<TInt> blockSizePckg( blockSize );
+
+ SendReceive( ESendUiDataBlock,
+ TIpcArgs( &transferBufferPckg, &blockSizePckg, &totalSizePckg ) );
+
+ transferredBytes += blockSize;
+ } // while..
+
+ SendReceive( EDataSent );
+
+ if ( aMessageData )
+ {
+ TInt index(0);
+ TInt fileHandleCount = aMessageData->AttachmentHandleArray().Count();
+
+ // Transfer filehandles separately
+ while( index < fileHandleCount )
+ {
+ TIpcArgs ipcArgs;
+ aMessageData->AttachmentHandleArray()[index++].TransferToServer(ipcArgs, 0, 1);
+ SendReceive(ECopyFileHandle, ipcArgs);
+ }
+ }
+ SendReceive( ELaunchSendUi );
+
+ CleanupStack::PopAndDestroy(buffer);
+}
+
+// ---------------------------------------------------------------------------
+// Return service identifier
+// ---------------------------------------------------------------------------
+//
+TUid RSendUiServiceClient::ServiceUid() const
+ {
+ return KSendUiLauncherAppServiceUid;
+ }
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+RSendUiServiceClient::~RSendUiServiceClient()
+ {
+ Close();
+ }