diff -r 000000000000 -r b497e44ab2fc syncmlfw/dm/treemodule/src/nsmldmhostclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/dm/treemodule/src/nsmldmhostclient.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,906 @@ +/* +* Copyright (c) 2005 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: DM tree etc. +* +*/ + + +#include +#include +#include + +#include +#include "nsmldmhostclient.h" +#include "nsmldmcmdarghandler.h" +#include "nsmldmtreedtd.h" +#include "nsmldmddf.h" +// FOTA +#include "nsmldmimpluids.h" +// FOTA end + +const TInt KNSmlMinChunk = 4096; + +//******************************** +//RNSmlDMDataSession +//******************************** + +// ------------------------------------------------------------------------------------------------ +//void RNSmlDMDataSession::RNSmlDMDataSession() +// ------------------------------------------------------------------------------------------------ +RNSmlDMDataSession::RNSmlDMDataSession() : + iCallback( NULL ), + iMapUris( NULL ), + iMapLuids( NULL ), + iServerId( 0 ), + iLargeObjectUri( NULL ) + { + } + +// ------------------------------------------------------------------------------------------------ +//void RNSmlDMDataSession::~RNSmlDMDataSession() +// ------------------------------------------------------------------------------------------------ +RNSmlDMDataSession::~RNSmlDMDataSession() + { + if(iMapUris!=0) + { + iMapUris->ResetAndDestroy(); + delete iMapUris; + } + if(iMapLuids!=0) + { + iMapLuids->ResetAndDestroy(); + delete iMapLuids; + } + delete iLargeObjectUri; + } + +// ------------------------------------------------------------------------------------------------ +//void RNSmlDMDataSession::Connect() +// Connect to the server - default number of message slots is four +// ------------------------------------------------------------------------------------------------ +TInt RNSmlDMDataSession::ConnectL(const TDesC& aServerName, + CNSmlDmDDF* aCallback) + { + iCallback = aCallback; + + TInt result( KErrNone ); + TVersion ver ( KNSmlDmHostServerVerMajor, KNSmlDmHostServerVerMinor, + KNSmlDmHostServerVerBuild ); + + result = CreateSession( aServerName, ver ); + if(result!=KErrNone) + { + if(aServerName.Compare(KNSmlDmHostServer1Name)==0) + { + result = LaunchServerL( KNSmlDmHostServer1Exe ); + iServerId = 1; + } + else if(aServerName.Compare(KNSmlDmHostServer2Name)==0) + { + result = LaunchServerL( KNSmlDmHostServer2Exe ); + iServerId = 2; + } + else if(aServerName.Compare(KNSmlDmHostServer3Name)==0) + { + result = LaunchServerL( KNSmlDmHostServer3Exe ); + iServerId = 3; + } + else if(aServerName.Compare(KNSmlDmHostServer4Name)==0) + { + result = LaunchServerL( KNSmlDmHostServer4Exe ); + iServerId = 4; + } + if ( result == KErrNone ) + { + result = CreateSession( aServerName, ver ); + } + } + + return result; + } + + +// ------------------------------------------------------------------------------------------------ +// void RNSmlDMDataSession::Version() +// Return the version number +// ------------------------------------------------------------------------------------------------ +TVersion RNSmlDMDataSession::Version(void) const + { + TVersion ver ( KNSmlDmHostServerVerMajor, KNSmlDmHostServerVerMinor, + KNSmlDmHostServerVerBuild ); + + return ver; + } + + +// ------------------------------------------------------------------------------------------------ +// void RNSmlDMDataSession::Close() +// Close the session; makes call to server which deletes the object +// container and object index for this session +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::Close() + { + iChunk.Close(); + SendReceive(ENSmlDMCloseSession,TIpcArgs()); + RHandleBase::Close(); + if(iMapUris) + { + iMapUris->ResetAndDestroy(); + delete iMapUris; + iMapUris = NULL; + } + if(iMapLuids) + { + iMapLuids->ResetAndDestroy(); + delete iMapLuids; + iMapLuids = NULL; + } + delete iLargeObjectUri; + iLargeObjectUri = NULL; + } + + +// ------------------------------------------------------------------------------------------------ +//void RNSmlDMDataSession::LaunchServer( const TDesC& aServerExeName ) +// ------------------------------------------------------------------------------------------------ +TInt RNSmlDMDataSession::LaunchServerL( const TDesC& aServerExeName ) + { + TInt result( KErrNone ); + TParse parser; + parser.Set ( aServerExeName, &KDC_PROGRAMS_DIR, NULL ); + + RProcess server; + result = server.Create( parser.FullName(), KNullDesC ); + + // Process creation failed. + User::LeaveIfError( result ); + + TRequestStatus status; + server.Rendezvous( status ); + + if ( status != KRequestPending ) + { + server.Kill( 0 ); // abort startup + server.Close(); + return KErrGeneral; // status can be KErrNone: don't return status.Int() + } + else + { + server.Resume(); // logon OK - start the server + } + + User::WaitForRequest( status ); + + result = status.Int(); + + if ( status == KErrNone ) + { + server.Close(); + } + + return result; + } + + +// ------------------------------------------------------------------------------------------------ +//TInt RNSmlDMDataSession::DDFStructureL(MSmlDmDDFObject& aDDF) +// ------------------------------------------------------------------------------------------------ +TInt RNSmlDMDataSession::DDFStructureL(CNSmlDmMgmtTree& aRoot) + { + iChunk.Close(); + User::LeaveIfError(iChunk.CreateGlobal( KNullDesC, + KNSmlDmHostChunkMinSize, KNSmlDmHostChunkMaxSize )); + SendChunkHandle(); + + RArray loadedAdapters; + aRoot.FindLoadedAdaptersL(loadedAdapters); + + TUint8 count = loadedAdapters.Count(); + + //1 byte for count and 4 bytes/implUid + HBufC8* adaptersBuffer = HBufC8::NewLC(1+4*count); + + TPtr8 adapterBufPtr = adaptersBuffer->Des(); + RDesWriteStream writeStream(adapterBufPtr); + CleanupClosePushL(writeStream); + writeStream.WriteUint8L(count); + for(TUint8 i=0;i checkSum; + TPckgBuf callbackCalled; + + TIpcArgs args(&adapterBufPtr,0,&checkSum,&callbackCalled); + CleanupStack::PopAndDestroy(); //writeStream + + TInt errCode = SendReceive( ENSmlDMGetDDF, args ); + + CleanupStack::PopAndDestroy(); //adaptersBuf + + if(errCode!=KErrNone) + { + return 0; + } + + RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( readStream ); + + aRoot.ParseWBXMLL(readStream); + CleanupStack::PopAndDestroy(); // readStream + + return checkSum(); + } + + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::HandleCallbacks(TNSmlDmHostCallbackType aCallbackType) +// handles callbacks +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::HandleCallbacksL( + TNSmlDmHostCallbackType aCallbackType) + { + TNSmlDmHostCallbackType callbackType=aCallbackType; + TPckgBuf callbackCalled; + + while(callbackType!=ENSmlDmCallbackNone) + { + if(callbackType==ENSmlDmCallbackMappings) + { + _DBG_FILE("CNSmlDmDDF::HandleCallbacksL():mappings"); + TIpcArgs args(0,0,0,&callbackCalled); + SendReceive( ENSmlDMGetMappings,args); + + callbackType = callbackCalled(); + RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( readStream ); + + if(iMapUris==0) + { + iMapUris = new (ELeave) CArrayPtrSeg (4); + } + if(iMapLuids==0) + { + iMapLuids = new (ELeave) CArrayPtrSeg (4); + } + + + NSmlDmCmdArgHandler::ParseMappingsL(readStream,*iMapUris, + *iMapLuids); + + for(TInt i=0;iCount();i++) + { + if(iMapUris->At(i)->Length()&&iMapLuids->At(i)->Length()) + { + iCallback->SetMappingL(*iMapUris->At(i),*iMapLuids->At(i)); + } + } + + iMapUris->ResetAndDestroy(); + iMapLuids->ResetAndDestroy(); + + CleanupStack::PopAndDestroy(); // readStream + } + else if(callbackType==ENSmlDmCallbackStatuses) + { + _DBG_FILE("CNSmlDmDDF::HandleCallbacksL():statuses"); + TIpcArgs args(0,0,0,&callbackCalled); + SendReceive( ENSmlDMGetStatuses,args); + + callbackType = callbackCalled(); + RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( readStream ); + + RArray statusArray; + CleanupClosePushL(statusArray); + NSmlDmCmdArgHandler::ParseStatusesL(readStream,statusArray); + + for(TInt i=0;iSetStatusL(statusArray[i].iStatusRef, + statusArray[i].iStatus); + } + CleanupStack::PopAndDestroy(2); // readStream, statusArray + } + else if(callbackType==ENSmlDmCallbackResults) + { + _DBG_FILE("CNSmlDmDDF::HandleCallbacksL():results"); + TPckgBuf dataLength; + TIpcArgs args(0,0,&dataLength,&callbackCalled); + SendReceive( ENSmlDMGetResults,args); + + callbackType = callbackCalled(); + RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( readStream ); + + RPointerArray resultArray; + CleanupStack::PushL ( PtrArrCleanupItemRArr ( CNSmlDmResultElement, &resultArray ) ); + + NSmlDmCmdArgHandler::ParseResultsL(readStream,resultArray); + + if(callbackType==ENSmlDmCallbackChunkFull) + { + _DBG_FILE("CNSmlDmDDF::HandleCallbacksL():results chunk full"); + for(TInt i=0;iSetResultsL(resultArray[i]->iResultRef, + *resultArray[i]->iResult,*resultArray[i]->iMimeType, + dataLength(),iServerId-1); + } + } + else + { + for(TInt i=0;iSetResultsL(resultArray[i]->iResultRef, + *resultArray[i]->iResult,*resultArray[i]->iMimeType, + resultArray[i]->iResult->Size(),iServerId-1); + } + } + CleanupStack::PopAndDestroy(2); // readStream,resultArray + } + else if(callbackType==ENSmlDmCallbackChunkFull) + { + callbackType=ENSmlDmCallbackNone; + } + else + { + callbackType=ENSmlDmCallbackNone; + } + } // end while + } + + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::SendChunkHandle +// Sends Chunk handle to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +TInt RNSmlDMDataSession::SendChunkHandle() + { + TIpcArgs args; + args.Set(0, iChunk); + args.Set(1, iServerId); + const TInt error = SendReceive( ENSmlDMChunkHandle, args ); + return error; + } + + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::UpdateLeafL +// Sends update leaf IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::UpdateLeafL(TUint32 aAdapterId, + const TDesC8& aLuid, + const TInt32 aStatusRef, + const TDesC8& aURI, + const TDesC8& aObject, + const TDesC8& aType, + const TBool aLargeItem, + // FOTA + const TInt aTotSizeOfLarge + // FOTA end + ) + { + TPckgBuf callbackCalled(ENSmlDmCallbackNone); + TInt dataLen = aObject.Length() + +aURI.Length()+aType.Length()+aLuid.Length()+16; + //16=4*4bytes, TInt = 4 bytes, each datasize must be stored to stream + if(dataLenCompare(aURI)==0) + { + TIpcArgs args(aAdapterId,aStatusRef,EFalse,&callbackCalled); + ret = SendReceive( ENSmlDMUpdateLeafLarge,args); + } + else + { + ret = KErrGeneral; + } + } + else + { + iLargeObjectUri=aURI.AllocL(); + // FOTA + if ( aTotSizeOfLarge && aAdapterId == KNSmlDMFotaAdapterImplUid ) + { + // For the FOTA adapter the third parameter is overloaded. + // It contains the overall size of the large object. + // The size information is sent only with the first chunk. + TIpcArgs args(aAdapterId,aStatusRef,aTotSizeOfLarge,&callbackCalled); + ret = SendReceive( ENSmlDMUpdateLeafLarge,args); + } + else + { + TIpcArgs args(aAdapterId,aStatusRef,EFalse,&callbackCalled); + ret = SendReceive( ENSmlDMUpdateLeafLarge,args); + } + // FOTA end + } + } + else + { + if(iLargeObjectUri) + { + delete iLargeObjectUri; + iLargeObjectUri=NULL; + TIpcArgs args(aAdapterId,aStatusRef,ETrue,&callbackCalled); + ret = SendReceive( ENSmlDMUpdateLeafLarge,args); + } + else + { + TIpcArgs args(aAdapterId,aStatusRef,0,&callbackCalled); + ret = SendReceive( ENSmlDMUpdateLeaf,args); + } + } + + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + // FOTA + if ( aAdapterId == KNSmlDMFotaAdapterImplUid && ret == KErrTooBig ) + { + iCallback->SetStatusL(aStatusRef,MSmlDmAdapter::ETooLargeObject); + delete iLargeObjectUri; + iLargeObjectUri=NULL; + } + // FOTA end + else if(ret!=KErrNone) + { + iCallback->SetStatusL(aStatusRef,MSmlDmAdapter::EError); + delete iLargeObjectUri; + iLargeObjectUri=NULL; + } + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::AddNodeL +// Sends add node IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::AddNodeL(const TUint32 aAdapterId, + const TDesC8& aLuid, + const TInt32 aStatusRef, + const TDesC8& aURI) + { + TPckgBuf callbackCalled; + iChunk.Adjust(KNSmlMinChunk); + + TIpcArgs args(aAdapterId,aStatusRef,0,&callbackCalled); + RMemWriteStream writeStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( writeStream ); + + NSmlDmCmdArgHandler::PacketDataL(writeStream,aLuid,KNullDesC8, + aURI,KNullDesC8); + CleanupStack::PopAndDestroy(); // writeStream + + SendReceive( ENSmlDMAddNode,args); + + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::ExecuteCommandL +// Sends execute IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::ExecuteCommandL(const TUint32 aAdapterId, + const TDesC8& aLuid, + const TInt32 aStatusRef, + const TDesC8& aURI, + const TDesC8& aObject, + const TDesC8& aType, + const TBool aLargeItem) + { + TPckgBuf callbackCalled(ENSmlDmCallbackNone); + + TInt dataLen = aObject.Length() + +aURI.Length()+aType.Length()+aLuid.Length()+16; + //16=4*4bytes, TInt = 4 bytes, each datasize must be stored to stream + + if(dataLenCompare(aURI)==0) + { + TIpcArgs args(aAdapterId,aStatusRef,EFalse,&callbackCalled); + ret = SendReceive( ENSmlDMExecuteLarge,args); + } + else + { + ret = KErrGeneral; + } + } + else + { + iLargeObjectUri=aURI.AllocL(); + TIpcArgs args(aAdapterId,aStatusRef,EFalse,&callbackCalled); + ret = SendReceive( ENSmlDMExecuteLarge,args); + } + } + else + { + if(iLargeObjectUri) + { + delete iLargeObjectUri; + iLargeObjectUri=NULL; + TIpcArgs args(aAdapterId,aStatusRef,ETrue,&callbackCalled); + ret = SendReceive( ENSmlDMExecuteLarge,args); + } + else + { + TIpcArgs args(aAdapterId,aStatusRef,0,&callbackCalled); + ret = SendReceive( ENSmlDMExecute,args); + } + } + + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + if(ret!=KErrNone) + { + iCallback->SetStatusL(aStatusRef,MSmlDmAdapter::EError); + } + } + + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::CopyCommandL +// Sends copy IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::CopyCommandL(const TUint32 aAdapterId, + const TDesC8& aTargetLuid, + const TDesC8& aTargetURI, + const TDesC8& aSourceLuid, + const TDesC8& aSourceURI, + const TInt32 aStatusRef, + const TDesC8& aType) + { + TPckgBuf callbackCalled; + iChunk.Adjust(KNSmlMinChunk); + + TIpcArgs args(aAdapterId,aStatusRef,0,&callbackCalled); + RMemWriteStream writeStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( writeStream ); + + NSmlDmCmdArgHandler::PacketCopyArgumentsL(writeStream, + aTargetLuid,aTargetURI,aSourceLuid,aSourceURI,aType); + + CleanupStack::PopAndDestroy(); // writeStream + + TInt ret = SendReceive( ENSmlDMCopy,args); + + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + if(ret!=KErrNone) + { + iCallback->SetStatusL(aStatusRef,MSmlDmAdapter::EError); + } + } + + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::DeleteObjectL +// Sends delete IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::DeleteObjectL(const TUint32 aAdapterId, + const TDesC8& aLuid, + const TInt32 aStatusRef, + const TDesC8& aURI) + { + TPckgBuf callbackCalled; + iChunk.Adjust(KNSmlMinChunk); + + TIpcArgs args(aAdapterId,aStatusRef,0,&callbackCalled); + RMemWriteStream writeStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( writeStream ); + + NSmlDmCmdArgHandler::PacketDataL(writeStream, + aLuid,KNullDesC8,aURI,KNullDesC8); + + CleanupStack::PopAndDestroy(); // writeStream + + TInt ret = SendReceive( ENSmlDMDelete,args); + + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + if(ret!=KErrNone) + { + iCallback->SetStatusL(aStatusRef,MSmlDmAdapter::EError); + } + + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::FetchLeafObjectL +// Sends fetch IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::FetchLeafObjectL(const TUint32 aAdapterId, + const TDesC8& aURI, + const TDesC8& aLuid, + const TDesC8& aType, + const TInt aResultsRef, + const TInt aStatusRef ) + { + TPckgBuf callbackCalled; + TIpcArgs args(aAdapterId,aStatusRef,aResultsRef,&callbackCalled); + iChunk.Adjust(KNSmlMinChunk); + RMemWriteStream writeStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( writeStream ); + CArrayFixFlat* mapArray = + new (ELeave) CArrayFixFlat(1); + + CleanupStack::PushL(mapArray); + NSmlDmCmdArgHandler::PacketFetchArgumentsL(writeStream,aLuid, + aURI,aType,*mapArray); + + CleanupStack::PopAndDestroy(2); // writeStream,mapArray + + TInt ret = SendReceive( ENSmlDMFetchLeaf,args); + + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + if(ret!=KErrNone) + { + iCallback->SetStatusL(aStatusRef,MSmlDmAdapter::EError); + } + + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::FetchLeafObjectSizeL +// Sends fetch size IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::FetchLeafObjectSizeL(const TUint32 aAdapterId, + const TDesC8& aURI, + const TDesC8& aLuid, + const TDesC8& aType, + const TInt aResultsRef, + const TInt aStatusRef ) + { + TPckgBuf callbackCalled; + TIpcArgs args(aAdapterId,aStatusRef,aResultsRef,&callbackCalled); + iChunk.Adjust(KNSmlMinChunk); + RMemWriteStream writeStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( writeStream ); + CArrayFixFlat* mapArray = + new (ELeave) CArrayFixFlat(1); + CleanupStack::PushL(mapArray); + + NSmlDmCmdArgHandler::PacketFetchArgumentsL(writeStream,aLuid,aURI, + aType,*mapArray); + + CleanupStack::PopAndDestroy(2); // writeStream,mapArray + + TInt ret = SendReceive( ENSmlDMFetchLeafSize,args); + + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + if(ret!=KErrNone) + { + iCallback->SetStatusL(aStatusRef,MSmlDmAdapter::EError); + } + } + + + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::ChildURIListL +// Sends child urilist IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::ChildURIListL(const TUint32 aAdapterId, + const TDesC8& aURI, + const TDesC8& aLuid, + const CArrayFixFlat& aPreviousURISegmentList, + const TInt aResultsRef,const TInt aStatusRef ) + { + TPckgBuf callbackCalled; + TIpcArgs args(aAdapterId,aStatusRef,aResultsRef,&callbackCalled); + iChunk.Adjust(KNSmlMinChunk); + RMemWriteStream writeStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( writeStream ); + + NSmlDmCmdArgHandler::PacketFetchArgumentsL(writeStream,aLuid, + aURI,KNullDesC8,aPreviousURISegmentList); + + CleanupStack::PopAndDestroy(); // writeStream + + TInt ret = SendReceive( ENSmlDMChildUriList,args); + + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + if(ret!=KErrNone) + { + iCallback->SetStatusL(aStatusRef,MSmlDmAdapter::EError); + } + } + + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::CompleteOutstandingCmdsL +// Sends CompleteOutstandingCmds IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::CompleteOutstandingCmdsL() + { + _DBG_FILE("CNSmlDmDDF::CompleteOutstandingCmdsL():begin"); + TPckgBuf callbackCalled; + TIpcArgs args(0,0,0,&callbackCalled); + SendReceive( ENSmlDMCompleteCommands,args); + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + _DBG_FILE("CNSmlDmDDF::CompleteOutstandingCmdsL():end"); + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::MoreDataL +// Sends get more data IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::MoreDataL(CBufBase*& aData) + { + TPckgBuf callbackCalled; + TIpcArgs args(0,0,0,&callbackCalled); + SendReceive( ENSmlDMGetMore,args); + RMemReadStream readStream( iChunk.Base(), iChunk.Size() ); + CleanupClosePushL( readStream ); + + RPointerArray resultArray; + CleanupStack::PushL ( PtrArrCleanupItemRArr ( CNSmlDmResultElement, &resultArray ) ); + + NSmlDmCmdArgHandler::ParseResultsL(readStream,resultArray); + + + RBufWriteStream writeStream(*aData,aData->Size()); + CleanupClosePushL(writeStream); + + if(resultArray.Count()>0) + { + writeStream.WriteL(resultArray[0]->iResult->Ptr(0), + resultArray[0]->iResult->Size()); + } + CleanupStack::PopAndDestroy(3); //writeStream, readStream, resultArray + } + + + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::StartAtomicL +// Sends start atomic IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::StartAtomicL() + { + TPckgBuf callbackCalled; + TIpcArgs args(0,0,0,&callbackCalled); + SendReceive( ENSmlDMStartAtomic,args); + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::CommitAtomicL +// Sends commit atomic IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::CommitAtomicL() + { + TPckgBuf callbackCalled; + TIpcArgs args(0,0,0,&callbackCalled); + SendReceive( ENSmlDMCommitAtomic,args); + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + } + +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::RollbackAtomic +// Sends rollback atomic IPC call to SyncML DM Host Servers. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::RollbackAtomicL() + { + TPckgBuf callbackCalled; + TIpcArgs args(0,0,0,&callbackCalled); + SendReceive( ENSmlDMRollbackAtomic,args); + TNSmlDmHostCallbackType callbackType = callbackCalled(); + if(callbackType!=ENSmlDmCallbackNone) + { + HandleCallbacksL(callbackType); + } + } + +// FOTA +// ------------------------------------------------------------------------------------------------ +// RNSmlDMDataSession::MarkGenAlertsSent() +// When the generic alerts are successfully sent to the remote +// server, the FOTA adapter needs to be informed about this. +// This command is chained through the DM engine. +// In this function a request is issued as an IPC call. +// ------------------------------------------------------------------------------------------------ +void RNSmlDMDataSession::MarkGenAlertsSent() + { + SendReceive ( ENSmlDMGenericAlertsSent,TIpcArgs ( TIpcArgs::ENothing ) ); + } + + +void RNSmlDMDataSession::MarkGenAlertsSent(const TDesC8 &aURI) + { + + _DBG_FILE(" RNSmlDMDataSession::MarkGenAlertsSent calling with the URI "); + SendReceive ( ENSmlDMGenericAlertsSent,TIpcArgs ( &aURI ) ); + } +// FOTA end