syncmlfw/common/sosserver_clientapi/src/NSmlDMClientAPI.cpp
changeset 0 b497e44ab2fc
--- /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 <s32mem.h>
+#include <SyncMLClientDM.h>
+#include <nsmldebug.h>
+
+#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<TInt> 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<TInt> 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<TInt> 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<TInt> 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()
+	{
+	}
+	
+
+
+
+
+