diff -r 000000000000 -r b497e44ab2fc syncmlfw/common/sosserver_clientapi/src/NSmlDMClientAPI.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/syncmlfw/common/sosserver_clientapi/src/NSmlDMClientAPI.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,318 @@ +/* +* Copyright (c) 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: Implementation of DM specific client api. +* +*/ + + +#include +#include +#include + +#include "NSmlClientAPIUtils.h" +#include "nsmlsosserverdefs.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// +// RSyncMLDevManJob +// + +// ----------------------------------------------------------------------------- +// RSyncMLDevManJob::RSyncMLDevManJob() +// Constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C RSyncMLDevManJob::RSyncMLDevManJob() + : RSyncMLJobBase() + { + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevManJob::CreateL() +// Creates DM job. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevManJob::CreateL( RSyncMLSession& aSession, TSmlProfileId aProfileId ) + { + _DBG_FILE("RSyncMLDevManJob::CreateL() ECmdDevManJobCreate: begin"); + + // check that profile is not yet open and dm sync is supported + CClientSessionData::PanicIfAlreadyCreated( iData ); + NSmlClientAPIFeatureHandler::LeaveIfDevManNotSupportedL(); + + CDevManJobSessionData* data = new (ELeave) CDevManJobSessionData(); + CleanupStack::PushL( data ); + + // add profile id to parameters and write the buffer + data->AddParamL( aProfileId ); + data->WriteIntegersToBufferL(); + + TPtr8 dataPtr = data->DataBufferPtr(); + TPckgBuf jobId; + TIpcArgs args( &jobId, &dataPtr ); + + // open the sub-session + User::LeaveIfError( CreateSubSession( aSession, ECmdDevManJobCreate, args ) ); + + data->SetProfile( aProfileId ); + data->SetIdentifier( jobId() ); + + iData = data; + CleanupStack::Pop(); // data + + _DBG_FILE("RSyncMLDevManJob::CreateL(): end"); + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevManJob::CreateL() +// Creates DM job, transport override. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevManJob::CreateL( RSyncMLSession& aSession, TSmlProfileId aProfileId, TSmlConnectionId aTransportId ) + { + _DBG_FILE("RSyncMLDevManJob::CreateL() ECmdDevManJobCreateForTransport: begin"); + + // check that profile is not yet open and dm sync is supported + CClientSessionData::PanicIfAlreadyCreated( iData ); + NSmlClientAPIFeatureHandler::LeaveIfDevManNotSupportedL(); + + CDevManJobSessionData* data = new (ELeave) CDevManJobSessionData(); + CleanupStack::PushL( data ); + + // add profile id to parameters and write the buffer + data->AddParamL( aProfileId ); + data->AddParamL( aTransportId ); + data->WriteIntegersToBufferL(); + + TPtr8 dataPtr = data->DataBufferPtr(); + TPckgBuf jobId; + TIpcArgs args( &jobId, &dataPtr ); + + // open the sub-session + User::LeaveIfError( CreateSubSession( aSession, ECmdDevManJobCreateForTransport, args ) ); + + data->SetProfile( aProfileId ); + data->SetIdentifier( jobId() ); + + iData = data; + CleanupStack::Pop(); // data + + _DBG_FILE("RSyncMLDevManJob::CreateL(): end"); + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevManJob::OpenL(). +// Opens given job. If not found, leaves with KErrNotFound. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevManJob::OpenL( RSyncMLSession& aSession, TSmlJobId aJobId ) + { + _DBG_FILE("RSyncMLDevManJob::OpenL(): begin"); + + CClientSessionData::PanicIfAlreadyCreated( iData ); + + CDevManJobSessionData* data = new (ELeave) CDevManJobSessionData(); + CleanupStack::PushL( data ); + + // open the sub-session and get size of data to be received + TPckgBuf dataSize; + TIpcArgs args( &dataSize, aJobId ); + User::LeaveIfError( CreateSubSession( aSession, ECmdJobOpen, args ) ); + + data->SetIdentifier( aJobId ); + + iData = data; + CleanupStack::Pop(); // data + + CleanupClosePushL( *this ); // if leave occures, Close is called by cleanup + + // get the data + GetJobL( dataSize(), EFalse ); + + CleanupStack::Pop(); // this + + _DBG_FILE("RSyncMLDevManJob::OpenL(): end"); + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevManJob::StopL() +// If this job has started to execute in server, it is stopped and an +// event is emitted. If the job is still in job queue, it is merely +// removed from the queue. If not found, leaves with KErrNotFound. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevManJob::StopL() + { + _DBG_FILE("RSyncMLDevManJob::StopL(): begin"); + + TInt jobId = Identifier(); + TIpcArgs args( jobId ); + User::LeaveIfError( SendReceive( ECmdJobStop, args ) ); + + _DBG_FILE("RSyncMLDevManJob::StopL(): end"); + } + + +// +// RSyncMLDevManProfile +// + +// ----------------------------------------------------------------------------- +// RSyncMLDevManProfile::RSyncMLDevManProfile() +// Constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C RSyncMLDevManProfile::RSyncMLDevManProfile() + : RSyncMLProfileBase() + { + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevManProfile::OpenL() +// Opens given profile in read-only mode. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevManProfile::OpenL( RSyncMLSession& aSession, TSmlProfileId aProfileId ) + { + _DBG_FILE("RSyncMLDevManProfile::OpenL(): begin"); + + OpenL( aSession, aProfileId, ESmlOpenRead ); + + _DBG_FILE("RSyncMLDevManProfile::OpenL(): end"); + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevManProfile::OpenL() +// Opens given profile. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevManProfile::OpenL( RSyncMLSession& aSession, TSmlProfileId aProfileId, TSmlOpenMode aOpenMode ) + { + _DBG_FILE("RSyncMLDevManProfile::OpenL(): begin"); + + CClientSessionData::PanicIfAlreadyCreated( iData ); + + CDevManProfileSessionData* data = CDevManProfileSessionData::NewLC(); + + TPckgBuf dataSize; + TIpcArgs args( &dataSize, aProfileId, aOpenMode ); + + // open the sub-session + User::LeaveIfError( CreateSubSession( aSession, ECmdProfileOpenDM, args ) ); + + data->SetIdentifier( aProfileId ); + data->SetOpenMode( (TSmlOpenMode)aOpenMode ); + + iData = data; + CleanupStack::Pop(); // data + + CleanupClosePushL( *this ); // if leave occures, Close is called by cleanup + + // dataSize contains now the size of the data buffer that is received next -> get data + GetProfileL( dataSize() ); + + CleanupStack::Pop(); // this + + _DBG_FILE("RSyncMLDevManProfile::OpenL(): end"); + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevManProfile::CreateL() +// Creates new DM profile. +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevManProfile::CreateL( RSyncMLSession& aSession ) + { + _DBG_FILE("RSyncMLDevManProfile::CreateL(): begin"); + + // check that profile is not yet open and dm sync is supported + CClientSessionData::PanicIfAlreadyCreated( iData ); + NSmlClientAPIFeatureHandler::LeaveIfDevManNotSupportedL(); + + CDevManProfileSessionData* data = CDevManProfileSessionData::NewLC( ETrue ); + + // create sub-session and new profile + User::LeaveIfError( CreateSubSession( aSession, ECmdProfileCreateDM ) ); + + iData = data; + CleanupStack::Pop(); // data + + _DBG_FILE("RSyncMLDevManProfile::CreateL(): end"); + } + + + +// +// RSyncMLDevMan ( Not supported ) +// + +// ----------------------------------------------------------------------------- +// RSyncMLDevMan::RSyncMLDevMan() +// ----------------------------------------------------------------------------- +// +EXPORT_C RSyncMLDevMan::RSyncMLDevMan() + { + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevMan::OpenL() +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevMan::OpenL( RSyncMLSession& ) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevMan::ClearRootAclL() +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevMan::ClearRootAclL() + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevMan::SetUserInteractionNotifierTimeoutL() +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevMan::SetUserInteractionNotifierTimeoutL( TUint /*aSeconds*/ ) + { + User::Leave( KErrNotSupported ); + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevMan::UserInteractionNotifierTimeout() +// ----------------------------------------------------------------------------- +// +EXPORT_C TUint RSyncMLDevMan::UserInteractionNotifierTimeout() const + { + return 0; + } + +// ----------------------------------------------------------------------------- +// RSyncMLDevMan::Close() +// ----------------------------------------------------------------------------- +// +EXPORT_C void RSyncMLDevMan::Close() + { + } + + + + + +