diff -r 000000000000 -r 3ce708148e4d customization/DMUtils/src/TARMDmStreamAdapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/customization/DMUtils/src/TARMDmStreamAdapter.cpp Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,414 @@ +/* +* Copyright (c) 2002-2004 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: $Description: $ +* +*/ + + + +// INCLUDE FILES +#include "TARMDmStreamAdapter.h" +#include "debug.h" +#include +_LIT( KTempFilePath, "C:\\system\\temp\\" ); + + +// ============================ MEMBER FUNCTIONS =============================== + + +/////////////////////////////////////////////////////////////////////////////////////////////////// +// +// CTARMDmStreamAdapter +// +/////////////////////////////////////////////////////////////////////////////////////////////////// + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::CTARMDmStreamAdapter +// +// ----------------------------------------------------------------------------- +// +CTARMDmStreamAdapter::CTARMDmStreamAdapter( MSmlDmCallback* aCallback ) + : CTARMDmAdapter( aCallback ) + , iActionInfo( 0 ) + { + RDEBUG( "CTARMDmStreamAdapter::CTARMDmStreamAdapter" ); + if(!iFs.Connect()) + { + RDEBUG( "CTARMDmStreamAdapter::CTARMDmStreamAdapter unable to connect to the fileserver" ); + } + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::~CTARMDmStreamAdapter +// +// ----------------------------------------------------------------------------- +// +CTARMDmStreamAdapter::~CTARMDmStreamAdapter() + { + RDEBUG( "CTARMDmStreamAdapter::~CTARMDmStreamAdapter >" ); + ClearActionInfo(); + iFs.Close(); + RDEBUG( "CTARMDmStreamAdapter::~CTARMDmStreamAdapter <" ); + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter:: +// +// ----------------------------------------------------------------------------- +// +void CTARMDmStreamAdapter::UpdateLeafObjectL( const TDesC8& aURI, const TDesC8& aLUID, RWriteStream*& aStream, const TDesC8& aType, TInt aStatusRef ) + { + RDEBUG( "CTARMDmStreamAdapter::UpdateLeafObjectL >" ); + +//#ifdef __SAP_POLICY_MANAGEMENT +TRAPD( errf, FeatureManager::InitializeLibL() ); + if( errf != KErrNone ) + { + User::Leave(errf); + } +if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement )) +{ + if (CheckPolicyL( aURI ) != KErrNone) + { + Callback().SetStatusL( aStatusRef, EError ); + return; + } +} +FeatureManager::UnInitializeLib(); + + +//#endif + + SetActionInfoL(CTARMDmStreamAdapterBuffer::ETARMActionUpdate, + aURI, + aLUID, + aType, + aStatusRef, + -1); // No result ref + + TInt itemSize; + TAdapterStreamType streamType = EStreamToNone; + if( StreamingSupport( itemSize ) ) + { + streamType = StreamType( aURI ); + } + + if( EStreamToNone != streamType ) + { + if( EStreamToFile == streamType ) + { + StreamToFileL( aStream ); + } + else + if( EStreamToBuffer == streamType ) + { + StreamToBufferL( aStream ); + } + Callback().SetStatusL( aStatusRef, EOk ); + } + else + { + _UpdateLeafObjectL( aURI, aLUID, aStream, aType, aStatusRef ); + } + + RDEBUG( "CTARMDmStreamAdapter::UpdateLeafObjectL <" ); + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter:: +// +// ----------------------------------------------------------------------------- +// +void CTARMDmStreamAdapter::ExecuteCommandL( const TDesC8& aURI, const TDesC8& aLUID, RWriteStream*& aStream, const TDesC8& aType, TInt aStatusRef ) + { + RDEBUG( "CTARMDmStreamAdapter::ExecuteCommandL (stream) >" ); + +//#ifdef __SAP_POLICY_MANAGEMENT +TRAPD( errf, FeatureManager::InitializeLibL() ); + if( errf != KErrNone ) + { + User::Leave(errf); + } +if(FeatureManager::FeatureSupported(KFeatureIdSapPolicyManagement )) +{ + if (CheckPolicyL( aURI ) != KErrNone) + { + Callback().SetStatusL( aStatusRef, EError ); + return; + } +} +FeatureManager::UnInitializeLib(); +//#endif + + SetActionInfoL(CTARMDmStreamAdapterBuffer::ETARMActionExecute, + aURI, + aLUID, + aType, + aStatusRef, + -1); // no result ref + + TInt itemSize; + TAdapterStreamType streamType = CTARMDmStreamAdapter::EStreamToNone; + if( StreamingSupport( itemSize ) ) + { + streamType = StreamType( aURI ); + } + + if( CTARMDmStreamAdapter::EStreamToNone != streamType ) + { + if( CTARMDmStreamAdapter::EStreamToFile == streamType ) + { + StreamToFileL( aStream ); + } + else + if( CTARMDmStreamAdapter::EStreamToBuffer == streamType ) + { + StreamToBufferL( aStream ); + } + Callback().SetStatusL( aStatusRef, EOk ); + } + else + { + _ExecuteCommandL( aURI, aLUID, aStream, aType, aStatusRef ); + } + + RDEBUG( "CTARMDmStreamAdapter::ExecuteCommandL (stream) <" ); + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::StreamType +// +// ----------------------------------------------------------------------------- +// +CTARMDmStreamAdapter::TAdapterStreamType CTARMDmStreamAdapter::StreamType( const TDesC8& /*aURI*/ ) + { + RDEBUG( "CTARMDmStreamAdapter::StreamType ><" ); + + return CTARMDmStreamAdapter::EStreamToNone; + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::StreamToBufferL +// +// ----------------------------------------------------------------------------- +// +void CTARMDmStreamAdapter::StreamToBufferL( RWriteStream*& aStream ) + { + RDEBUG( "CTARMDmStreamAdapter::StreamToBufferL >" ); + + User::LeaveIfError( iWriteStream.Temp( + iFs, + KTempFilePath(), + iFileStoreFileName, + EFileWrite + )); + + aStream = &iWriteStream; + // StreamCommittedL is called when stream is complete + iStreamType = CTARMDmStreamAdapter::EStreamToBuffer; + + + RDEBUG( "CTARMDmStreamAdapter::StreamToBufferL <" ); + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::StreamToFileL +// +// ----------------------------------------------------------------------------- +// +void CTARMDmStreamAdapter::StreamToFileL( RWriteStream*& aStream ) + { + RDEBUG( "CTARMDmStreamAdapter::StreamToFileL >" ); + + + User::LeaveIfError( iWriteStream.Temp( + iFs, + KTempFilePath(), + iFileStoreFileName, + EFileWrite + )); + + aStream = &iWriteStream; + // StreamCommittedL is called when stream is complete + iStreamType = CTARMDmStreamAdapter::EStreamToFile; + + + RDEBUG( "CTARMDmStreamAdapter::StreamToFileL <" ); + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::StreamCommittedL +// +// ----------------------------------------------------------------------------- +// +#ifdef __TARM_SYMBIAN_CONVERGENCY +void CTARMDmStreamAdapter::StreamCommittedL( RWriteStream& /*aStream*/ ) +#else +void CTARMDmStreamAdapter::StreamCommittedL() +#endif + { + RDEBUG( "CTARMDmStreamAdapter::StreamCommittedL >" ); + + TInt itemSize = 0; + if( StreamingSupport( itemSize ) ) + { + + TAdapterStreamType type = iStreamType; + iStreamType = CTARMDmStreamAdapter::EStreamToNone; + + if(CTARMDmStreamAdapter::EStreamToNone == type ) + { + ClearActionInfo(); + User::Leave( KErrGeneral ); + } + + iWriteStream.Close(); + + if(CTARMDmStreamAdapter::EStreamToBuffer == type ) + { + // Load file to memory + RFile f; + User::LeaveIfError( f.Open( iFs, iFileStoreFileName, EFileRead ) ); + CleanupClosePushL( f ); + + TInt size; + User::LeaveIfError( f.Size( size ) ); + + HBufC8* buf = HBufC8::NewLC( size ); + TPtr8 ptr8( buf->Des() ); + User::LeaveIfError( f.Read( ptr8 ) ); + + // Pass data as argument + CommitActionL( ptr8 ); + + CleanupStack::PopAndDestroy( buf ); + CleanupStack::PopAndDestroy( &f ); + } + else + { + // Streamed to file, no data in arguments + CommitActionL( KNullDesC8() ); + } + + iFs.Delete( iFileStoreFileName ); + + } + + ClearActionInfo(); + + RDEBUG( "CTARMDmStreamAdapter::StreamCommittedL <" ); + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::SetActionInfoL +// +// ----------------------------------------------------------------------------- +// +void CTARMDmStreamAdapter::SetActionInfoL( CTARMDmStreamAdapterBuffer::TTARMDMAction aAction, + const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + TInt aStatusRef, + TInt aResultRef ) + { + RDEBUG( "CTARMDmStreamAdapter::SetActionInfoL >" ); + + ClearActionInfo(); + iActionInfo = CTARMDmStreamAdapterBuffer::NewL( + aURI, + aLUID, + aType, + aStatusRef, + aResultRef, + aAction + ); + + RDEBUG( "CTARMDmStreamAdapter::SetActionInfoL <" ); + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::ClearActionInfo +// +// ----------------------------------------------------------------------------- +// +void CTARMDmStreamAdapter::ClearActionInfo() + { + RDEBUG( "CTARMDmStreamAdapter::ClearActionInfo >" ); + + delete iActionInfo; + iActionInfo = 0; + + RDEBUG( "CTARMDmStreamAdapter::ClearActionInfo <" ); + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::ActionInfoL +// +// ----------------------------------------------------------------------------- +// +CTARMDmStreamAdapter::CTARMDmStreamAdapterBuffer& CTARMDmStreamAdapter::ActionInfoL() + { + RDEBUG( "CTARMDmStreamAdapter::ActionInfoL >" ); + + if( 0 == iActionInfo ) + { + User::Leave( KErrNotFound ); + } + + RDEBUG( "CTARMDmStreamAdapter::ActionInfoL <" ); + return *iActionInfo; + } + +// ----------------------------------------------------------------------------- +// CTARMDmStreamAdapter::CommitActionL +// +// ----------------------------------------------------------------------------- +// +void CTARMDmStreamAdapter::CommitActionL( const TDesC8 &aObject ) + { + RDEBUG( "CTARMDmStreamAdapter::CommitActionL >" ); + + CTARMDmStreamAdapterBuffer& action = ActionInfoL(); + + switch( action.Action() ) + { + case CTARMDmStreamAdapterBuffer::ETARMActionUpdate: + _UpdateLeafObjectL( + action.URI(), + action.LUID(), + aObject, + action.Type(), + action.StatusRef() + ); + break; + + case CTARMDmStreamAdapterBuffer::ETARMActionExecute: + _ExecuteCommandL( + action.URI(), + action.LUID(), + aObject, + action.Type(), + action.StatusRef() + ); + break; + + default: + User::Leave( KErrNotSupported ); + break; + } + + RDEBUG( "CTARMDmStreamAdapter::CommitActionL <" ); + } + +// End of File