diff -r 000000000000 -r 8e480a14352b messagingfw/senduiservices/launcher/src/senduiservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/senduiservices/launcher/src/senduiservice.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,193 @@ +/* +* 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: SendUi service class. Receives message data from the +* SendUi host. +* +*/ + + + + +#include +#include + +#include +#include +#include + +#include "senduiservice.h" +#include "senduilauncherappui.h" +#include "senduiserviceslog.h" +#include "SendUiPrivateCRKeys.h" +#include "senduiservicecommands.h" +#include "senduilauncher.h" +#include + +typedef TBuf8 TTransferBuf; +// --------------------------------------------------------------------------- +// ConstructL +// --------------------------------------------------------------------------- +// +void CSendUiService::ConstructL() + { + iAppUi = (CSendUiLauncherAppUi*)CEikonEnv::Static()->EikAppUi(); + } + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CSendUiService* CSendUiService::NewL() + { + CSendUiService* self = new( ELeave ) CSendUiService; + CleanupStack::PushL( self ); + self->ConstructL(); + + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CSendUiService::~CSendUiService() + { + LOGTEXT(_L("CSendUiService->~ >>")); + delete iMessageData; + delete iTransferBuffer; + delete iReadStream; + LOGTEXT(_L("CSendUiService->~ <<")); + } + +// --------------------------------------------------------------------------- +// ServiceL +// Receives message from SendUi and passes data to AppUi +// --------------------------------------------------------------------------- +// +void CSendUiService::ServiceL( const RMessage2& aMessage ) + { + LOGTEXT(_L("CSendUiService->ServiceL >>")); + + TTransferBuf transferBuffer; + + switch (aMessage.Function()) + { + case ESendUiDataBlock: // receive main message data in blocks + { + TPckgBuf bufPckg; + TPckgBuf blockSizePckg; + TPckgBuf totalSizePckg; + + aMessage.ReadL( ESlot1, bufPckg ); + aMessage.ReadL( ESlot2, blockSizePckg ); + aMessage.ReadL( ESlot3, totalSizePckg ); + + TInt blockSize = blockSizePckg(); + TInt totalSize = totalSizePckg(); + + transferBuffer = bufPckg(); + + if (!iTransferBuffer) + { + iTransferredBytes = 0; + iTransferBuffer = HBufC8::NewL( totalSize ); + } + TPtr8 bufferPtr8( iTransferBuffer->Des() ); + bufferPtr8.Insert( iTransferredBytes, transferBuffer ); + + iTransferredBytes += blockSize; + break; + } + case EDataSent: // this is the last data block, start reading + { + + iReadStream = new(ELeave)RDesReadStream( *iTransferBuffer ); + TUid serviceProviderUid(KNullUid); + TUid dataTypeUid(KNullUid); + + if ( iTransferBuffer ) + { + LOGTEXT(_L("CSendUiService->ServiceL: ELaunchSendUi: openstream")); + + TUint32 tmpVal = iReadStream->ReadUint32L(); + serviceProviderUid = TUid::Uid( tmpVal ); + + tmpVal = iReadStream->ReadUint32L(); + dataTypeUid = TUid::Uid( tmpVal ); + } + iMessageData = CMessageData::NewL(); + break; + } + case ECopyFileHandle: // receive file handles + { + LOGTEXT(_L("CSendUiService->ServiceL: ECopyFileHandle")); + + // open source file handle + RFile sourceFile; + User::LeaveIfError(sourceFile.AdoptFromClient(aMessage, 0, 1)); + CleanupClosePushL(sourceFile); + iMessageData->AppendAttachmentHandleL( sourceFile ); + CleanupStack::Pop(&sourceFile); + + LOGTEXT(_L("CSendUiService->ServiceL: ECopyFileHandle done")); + break; + } + case ELaunchSendUi: // construct message data and invoke sendui + { + LOGTEXT(_L("CSendUiService->ServiceL: ELaunchSendUi>>")); + + if ( iReadStream ) + { + LOGTEXT(_L("CSendUiService->ServiceL: ELaunchSendUi: openstream")); + + + TUint32 tmpVal = iReadStream->ReadUint32L(); + TUid serviceUid( TUid::Uid( tmpVal )); + + tmpVal = iReadStream->ReadUint32L(); + TBool launchEmbedded( tmpVal ); + + tmpVal = iReadStream->ReadUint32L(); + + if (tmpVal ) + { + iMessageData->InternalizeL( *iReadStream ); + } + + iReadStream->Release(); + iReadStream->Close(); + + iAppUi->CreateAndSendMessageL( + serviceUid, + iMessageData, + launchEmbedded ); + } + iAppUi->DoDelayedExitL( 0 ); + + LOGTEXT(_L("CSendUiService->ServiceL: complete message")); + + break; + } + default: + // No other commands exist. + LOGTEXT(_L("CSendUiService->ServiceL: ERROR! Unknown command")); + } + aMessage.Complete( KErrNone ); + +}; + +// End of File +