syncmlfw/common/obex/obexdmplugin/src/NSmlObexDMplugin.cpp
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/common/obex/obexdmplugin/src/NSmlObexDMplugin.cpp	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,708 @@
+/*
+* 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:  SyncML Obex plugin for Device Management
+*
+*/
+
+
+#include <nsmlconstants.h>
+#include <NSmlPrivateAPI.h>
+#include <nsmlsyncalerthandlerif.h>
+#include "NSmlObexDMplugin.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::NewL()
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CNSmlObexDMplugin* CNSmlObexDMplugin::NewL()
+    {
+    DBG_FILE( _S8("CNSmlObexDMplugin::NewL: begin") );
+    CNSmlObexDMplugin* self = new (ELeave) CNSmlObexDMplugin();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    DBG_FILE( _S8("CNSmlObexDMplugin::NewL: end") );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::CNSmlObexDMplugin()
+// 
+// -----------------------------------------------------------------------------
+//
+CNSmlObexDMplugin::CNSmlObexDMplugin(): iPtr( 0, 0), iSendPtr( 0, 0 )
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::ConstructL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::ConstructL()
+    {
+	iZeroPkg = ETrue;
+	iObexContent =  ENSmlDeviceManagement;
+	iState = EIdle;
+    // create OBEX object to receive obex transfer
+    iObexBufData = CBufFlat::NewL( 10*KBufferSize );
+    iObexBufObject = CObexBufObject::NewL( iObexBufData );
+	iSessCancelled = ETrue;
+	iSessionActive = EFalse;
+
+	iServiceTimer = new (ELeave) CPluginServiceTimer( this, KPluginTimeOutValue );
+	iServiceTimer->ConstructL();
+	CActiveScheduler::Add( iServiceTimer );
+
+	iGetPacketWaiter = new(ELeave) CNSmlObexPacketWaiter( iSs ); 
+	iGetPacketWaiter->ConstructL();
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::GetServerCallback()
+// Get MObexServerNotify object to bind to CObexServer
+// -----------------------------------------------------------------------------
+//
+MObexServerNotify* CNSmlObexDMplugin::GetServerCallback()
+    {
+	return this;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::IsOBEXActive()
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CNSmlObexDMplugin::IsOBEXActive()
+    {
+	return iSessionActive;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::~CNSmlObexDMplugin()
+// 
+// -----------------------------------------------------------------------------
+//
+CNSmlObexDMplugin::~CNSmlObexDMplugin()
+    {
+	DBG_FILE( _S8("CNSmlObexDMplugin::~CNSmlObexDMplugin(): begin") );
+	Disconnect();
+
+    delete iObexBufData;
+    iObexBufData = NULL;
+
+    delete iObexBufObject;
+    iObexBufObject = NULL;
+
+	if( iListener )
+		{
+		iListener->iSessCancelled = iSessCancelled;
+		delete iListener;
+		iListener = NULL;
+		}
+
+	delete iData;
+	iData = NULL;
+
+	if( iServiceTimer )
+		{
+		iServiceTimer->Cancel();
+		}
+	
+	delete iServiceTimer;
+	iServiceTimer = NULL;
+
+	delete iGetPacketWaiter;
+	iGetPacketWaiter = NULL;
+
+	DBG_FILE( _S8("CNSmlObexDMplugin::~CNSmlObexDMplugin(): end") );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::ErrorIndication( TInt aError )
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::ErrorIndication( TInt aError )
+    {
+	iZeroPkg = ETrue;
+	DBG_FILE_CODE( aError, _S8("CNSmlObexDMplugin::ErrorIndication...") );
+	Disconnect();
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::TransportUpIndication()
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::TransportUpIndication()
+    {
+	DBG_FILE( _S8("CNSmlObexDMplugin::TransportUpIndication...") );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::TransportDownIndication()
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::TransportDownIndication()
+    {
+	DBG_FILE( _S8("CNSmlObexDMplugin::TransportDownIndication...") );
+	Disconnect();
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::ObexConnectIndication( const TObexConnectInfo& /*aRemoteInfo*/, const TDesC8& /*aInfo*/ )
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::ObexConnectIndication( const TObexConnectInfo& /*aRemoteInfo*/, const TDesC8& /*aInfo*/ )
+    {
+	_DBG_FILE("CNSmlObexDMplugin::ObexConnectIndication [w45 14.11.2003]");	
+	TInt err( KErrNone );
+	iStopped = EFalse;
+
+	iStartTimer = ETrue;
+
+	if( iListener )
+		{
+		_DBG_FILE("delete iListener");	
+		delete iListener;
+		iListener = NULL;
+		}
+	
+	err = iSs.Connect();
+	if( err == KErrNotFound )
+		{
+		// obexcommserver was not running, creating one into a new thread
+		RSemaphore signal;
+		signal.CreateLocal(0);
+		RThread t;
+		TRAP( err, t.Create(_L("ObexCommServerThread"), CreateServer, 1024*6, KMinHeapSize, KMinHeapSize*250, &signal) );
+		t.Resume();
+		t.Close();
+		signal.Wait();
+		signal.Close();
+
+		err = iSs.Connect();
+		}
+	
+	if( err == KErrNone )
+		{
+		iSessCancelled = EFalse;
+		iListener = new CDisListener( iSs, this );
+		if ( !iListener )
+			{
+			err = KErrNoMemory;
+			}
+			
+		if( err == KErrNone )
+			{
+			iListener->ListenDisconnect();
+			DBG_FILE( _S8("CNSmlObexDMplugin iServiceTimer->StopTimer()") );
+			iServiceTimer->Cancel();
+			iServiceTimer->StopTimer();
+			}
+		}
+    return ConvertError( err );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::ObexDisconnectIndication( const TDesC8& /*aInfo*/ )
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::ObexDisconnectIndication( const TDesC8& /*aInfo*/ )
+    {
+	_DBG_FILE("CNSmlObexDMplugin::ObexDisconnectIndication");
+	Disconnect();
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::PutRequestIndication()
+// 
+// -----------------------------------------------------------------------------
+//
+CObexBufObject* CNSmlObexDMplugin::PutRequestIndication()
+    {
+	_DBG_FILE("CNSmlObexDMplugin::PutRequestIndication");
+	iState = EIdle;
+	if ( iObexBufObject )
+		{
+		iObexBufData->Reset();
+		iObexBufObject->Reset();
+		}
+	if( iStopped )
+		{
+		_DBG_FILE("CNSmlObexDMplugin service unavailable");
+		return NULL;
+		}
+    return iObexBufObject;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::PutPacketIndication()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::PutPacketIndication()
+    {
+	_DBG_FILE("CNSmlObexDMplugin::PutPacketIndication");
+	TInt bytes = this->iObexBufObject->BytesReceived();
+	DBG_FILE_CODE( bytes, _S8("reveived bytes") );
+	if( iStopped )
+		{
+		_DBG_FILE("CNSmlObexDMplugin service unavailable");
+		return KErrIrObexRespServiceUnavail;
+		}
+	return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::PutCompleteIndication()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::PutCompleteIndication()
+    {
+	_DBG_FILE("CNSmlObexDMplugin::PutCompleteIndication");
+	TInt err( KErrNone );
+
+	err = CheckMimeType();
+
+	_DBG_FILE("CNSmlObexDMplugin After CheckMimeType");
+
+	if( err == KErrNone )
+		{
+		if ( iObexBufData->Size() > KNSmlLocalSyncWorkspaceSize )
+		    {
+        	_DBG_FILE("CNSmlObexDMplugin: Received package too large!");
+		    return KErrIrObexRespReqEntityTooLarge;
+		    }
+		
+		if ( iZeroPkg )
+			{
+			_DBG_FILE("CNSmlObexDMplugin..Forwarding Zero Pkg");
+			DBG_DUMP((void*)iObexBufData->Ptr(0).Ptr(), iObexBufData->Size(), _S8("Zero Pkg") );
+
+			#ifdef __NSML_DEBUG__
+			_DBG_FILE("CNSmlObexDMplugin..Zero Pkg: CWbxml2XmlConverter::ConvertL() begin");
+			CWbxml2XmlConverter* c = NULL;
+			TRAP( err, c = CWbxml2XmlConverter::NewL() );
+			if (c)
+				{
+				TRAP( err, c->ConvertL(iObexBufData->Ptr(0).Ptr(), iObexBufData->Size()) );
+				DBG_DUMP((void*)c->Document().Ptr(), c->Document().Length(), _S8("Zero Pkg (XML)") );
+				delete c;
+				}
+			_DBG_FILE("CNSmlObexDMplugin..Zero Pkg: CWbxml2XmlConverter::ConvertL() end");
+			#endif // __NSML_DEBUG__
+	
+			TRAP( err, err = ForwardZeroPkgL( iObexContent ) );
+			iZeroPkg = EFalse;
+			}
+		else
+			{
+			_DBG_FILE("CNSmlObexDMplugin..SetReceivedPacket");
+			DBG_DUMP((void*)iObexBufData->Ptr(0).Ptr(), iObexBufData->Size(), _S8("CNSmlObexDMplugin SetReceivedPacket") );
+
+			#ifdef __NSML_DEBUG__
+			_DBG_FILE("CNSmlObexDMplugin..SetReceivedPacket: CWbxml2XmlConverter::ConvertL() begin");
+			CWbxml2XmlConverter* c = NULL;
+			TRAP( err, c = CWbxml2XmlConverter::NewL() );
+			if (c)
+				{
+				TRAP( err, c->ConvertL(iObexBufData->Ptr(0).Ptr(), iObexBufData->Size()) );
+				DBG_DUMP((void*)c->Document().Ptr(), c->Document().Length(), _S8("SetReceivedPacket (XML)") );
+				delete c;
+				}
+			_DBG_FILE("CNSmlObexDMplugin..SetReceivedPacket: CWbxml2XmlConverter::ConvertL() end");
+			#endif // __NSML_DEBUG__
+			
+			if( !iStopped )
+				{
+				this->iObexBufObject->BytesReceived();
+				this->iSs.SetReceivedPacket( this->iObexBufData->Ptr( 0 ) );
+				}
+			else{
+				err = KErrAccessDenied;
+				}
+			}
+		}
+	else if ( err == KErrNotSupported )
+	    {
+    	_DBG_FILE("CNSmlObexDMplugin: Mimetype not supported!");
+	    return KErrIrObexRespUnsupMediaType;
+	    }
+	
+	return ConvertError( err );
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::GetRequestIndication( CObexBaseObject* /*aRequiredObject*/ )
+// 
+// -----------------------------------------------------------------------------
+//
+CObexBufObject* CNSmlObexDMplugin::GetRequestIndication( CObexBaseObject* /*aRequiredObject*/ )
+    {
+	_DBG_FILE("CNSmlObexDMplugin::GetRequestIndication");
+
+	TInt err( KErrNone );
+	iObexBufObject->Reset();
+
+	iState = EGetSendPacket;
+	err = iGetPacketWaiter->WaitForGetData();
+	iState = EIdle;
+
+	if ( err == KErrNone )
+		{
+		iObexBufData->Reset();
+		TRAP( err, iObexBufData->InsertL( 0, iGetPacketWaiter->Data() ) );
+		}
+	if ( err != KErrNone )
+		{
+		return NULL;
+		}
+
+	#ifdef __NSML_DEBUG__
+	_DBG_FILE("CNSmlObexDMplugin GetRequestIndication: CWbxml2XmlConverter begin");
+	CWbxml2XmlConverter* c = NULL;
+	TRAP( err, c = CWbxml2XmlConverter::NewL() );
+	if (c)
+		{
+		TRAP( err, c->ConvertL(iObexBufData->Ptr(0).Ptr(), iObexBufData->Size()) );
+		DBG_DUMP((void*)c->Document().Ptr(), c->Document().Length(), _S8("CNSmlObexDMplugin GetRequestIndication (XML)") );
+		delete c;
+		c = NULL;
+		}
+	_DBG_FILE("CNSmlObexDMplugin GetRequestIndication: CWbxml2XmlConverter end");
+	#endif // __NSML_DEBUG__
+
+
+	TRAP( err, iObexBufObject->SetDataBufL( iObexBufData ) );
+	if ( err != KErrNone )
+		{
+		return NULL;
+		}
+    return iObexBufObject;
+   }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::GetPacketIndication()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::GetPacketIndication()
+    {
+	_DBG_FILE("CNSmlObexDMplugin::GetPacketIndication");
+	if( iStopped )
+		{
+		_DBG_FILE("CNSmlObexDMplugin service unavailable");
+		return KErrIrObexRespServiceUnavail;
+		}
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::GetCompleteIndication()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::GetCompleteIndication()
+    {
+	_DBG_FILE("CNSmlObexDMplugin::GetCompleteIndication");
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::SetPathIndication(const CObex::TSetPathInfo& /*aPathInfo*/, const TDesC8& /*aInfo*/)
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::SetPathIndication(const CObex::TSetPathInfo& /*aPathInfo*/, const TDesC8& /*aInfo*/)
+    {
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::AbortIndication()
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::AbortIndication()
+    {
+	_DBG_FILE("CNSmlObexDMplugin::AbortIndication");
+	Disconnect();
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::Disconnect()
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::Disconnect()
+    {
+	_DBG_FILE("CNSmlObexDMplugin::Disconnect");
+	iZeroPkg = ETrue;
+
+	if( iStartTimer != EFalse )
+		{
+		DBG_FILE( _S8("CNSmlObexDMplugin iServiceTimer->StartTimer()") );
+		iServiceTimer->Cancel();
+		iServiceTimer->StartTimer();
+		}
+	
+	iState = EIdle;
+	if( !iSessCancelled )
+		{
+		_DBG_FILE("calling iSs.Disconnect()");
+		iSs.Disconnect();
+		iSs.Close();
+		iSessCancelled = ETrue;
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::CheckMimeType()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::CheckMimeType()
+	{ 	
+	_DBG_FILE("CNSmlObexDMplugin::CheckMimeType() - mimetype in dump...");
+	
+	TBuf8<256> mimeType;
+	mimeType.Copy( this->iObexBufObject->Type() );
+	mimeType.LowerCase();
+	TrimRightSpaceAndNull( mimeType );
+
+	DBG_DUMP( (void*)mimeType.Ptr(), mimeType.Length(), _S8("Received mimetype") );
+
+	if ( (mimeType.Compare( KDataSyncDM ) == 0) ||
+		 (mimeType.Compare( KDataSyncDMAlertNotification ) == 0) )
+		{		
+		_DBG_FILE("CNSmlObexDMplugin... KDataSyncDM OBEX content");
+		iObexContent = ENSmlDeviceManagement;	
+		return KErrNone;
+		}
+	else
+		{
+		_DBG_FILE("Unsupported mime type");
+		return KErrNotSupported;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::TrimRightSpaceAndNull()
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::TrimRightSpaceAndNull( TDes8& aDes ) const
+{
+	aDes.TrimRight();
+	if ( aDes.Length() > 0 )
+		{
+		if ( aDes[aDes.Length() - 1] == NULL )
+			{
+			aDes.SetLength( aDes.Length() - 1 );
+			} 
+		}
+}
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::ForwardZeroPkgL( TNSmlObexContent aSyncSelection )
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::ForwardZeroPkgL( TNSmlObexContent aSyncSelection )
+	{
+	_DBG_FILE("CNSmlObexDMplugin::ForwardZeroPkgL()");
+	TInt err( KErrNone );
+
+	if ( aSyncSelection == ENSmlDeviceManagement )
+		{
+		_DBG_FILE("CNSmlObexDMplugin... Before StartSync");
+		
+		RNSmlPrivateAPI privateApi;
+		TRAPD(openErr, privateApi.OpenL());
+	
+		if ( openErr != KErrNone )
+			{
+			return ENSmlErrUndefined;
+			}
+	
+		TRAPD(connErr, privateApi.SendL(this->iObexBufData->Ptr(0), ESmlDevMan,
+		    ESmlVersion1_1_2,KUidNSmlMediumTypeBluetooth ));
+	
+		if ( connErr != KErrNone )
+			{
+			privateApi.Close();
+			return ENSmlErrUndefined;
+			}
+		
+		privateApi.Close();
+				
+		}
+	else
+		{
+		err = KErrNotSupported;
+		}
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::SetMediaType( TSrcsMediaType aMediaType )
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::SetMediaType( TSrcsMediaType aMediaType )
+    {
+	DBG_FILE( _S8("CNSmlObexDMplugin::SetMediaType()") );
+	iMediaType = aMediaType;
+    }
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::CreateServer( TAny* aPtr )
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::CreateServer( TAny* aPtr )
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New(); // get clean-up stack
+	CActiveScheduler* scheduler = new CActiveScheduler();
+	CActiveScheduler::Install(scheduler);	
+	TRAPD( err, StartServerL( aPtr ) );
+	__ASSERT_ALWAYS(err == KErrNone, User::Panic(_L("OBEXCommServer"), err));
+	delete scheduler;
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return KErrNone;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::StartServer( TAny* aPtr )
+// 
+// -----------------------------------------------------------------------------
+//
+void CNSmlObexDMplugin::StartServerL( TAny* aPtr )
+	{
+	CNSmlObexCommServer* server = CNSmlObexCommServer::NewL( KNSmlDMObexCommServerName() );
+	RSemaphore* s = (RSemaphore*)aPtr;
+	s->Signal();
+	CActiveScheduler::Start();
+	delete server;
+	}
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::ConvertError( TInt aError )
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::ConvertError( TInt aError )
+	{
+	DBG_FILE_CODE( aError, _S8("ConvertError...") );
+	TInt obexErr ( KErrIrObexRespInternalError );
+
+	switch (aError)
+	{
+	case KErrNone:
+		obexErr = KErrNone;
+		break;
+
+	case KErrNotFound:
+		obexErr = KErrIrObexRespNotFound;
+		break;
+
+	case KErrGeneral:
+	case KErrCancel:
+	case KErrNoMemory:
+		obexErr = KErrIrObexRespInternalError;
+		break;
+
+	case KErrNotSupported:
+		obexErr = KErrIrObexRespBadRequest;
+		break;
+
+	case KErrArgument:
+	case KErrTotalLossOfPrecision:
+	case KErrBadHandle:
+	case KErrOverflow:
+	case KErrUnderflow:
+	case KErrAlreadyExists:
+	case KErrPathNotFound:
+	case KErrDied:
+	case KErrInUse:
+	case KErrServerTerminated:
+		obexErr = KErrIrObexRespInternalError;
+		break;
+
+	case KErrServerBusy:
+		obexErr = KErrIrObexRespServiceUnavail;
+		break;
+
+	case KErrCompletion:
+	case KErrNotReady:
+	case KErrUnknown:
+	case KErrCorrupt:
+	case KErrAccessDenied:
+	case KErrLocked:
+	case KErrWrite:
+	case KErrDisMounted:
+	case KErrEof:
+	case KErrDiskFull:
+	case KErrBadDriver:
+	case KErrBadName:
+	case KErrCommsLineFail:
+	case KErrCommsFrame:
+	case KErrCommsOverrun:
+	case KErrCommsParity:
+	case KErrTimedOut:
+	case KErrCouldNotConnect:
+	case KErrCouldNotDisconnect:
+	case KErrBadLibraryEntryPoint:
+	case KErrBadDescriptor:
+	case KErrAbort:
+	case KErrTooBig:
+	case KErrDivideByZero:
+	case KErrBadPower:
+	case KErrDirFull:
+	case KErrHardwareNotAvailable:
+		obexErr = KErrIrObexRespInternalError;
+		break;
+	default:
+		obexErr = KErrIrObexRespInternalError;
+		break;
+	};
+	DBG_FILE_CODE( obexErr, _S8("ConvertError returned...") );
+	return obexErr;
+};
+
+// -----------------------------------------------------------------------------
+// CNSmlObexDMplugin::SetObexServer( CObexServer* aObexServer )
+// -----------------------------------------------------------------------------
+//
+TInt CNSmlObexDMplugin::SetObexServer( CObexServer* aObexServer )
+    {
+    DBG_FILE(_S8("CNSmlObexDMplugin::SetObexServer - Begin"));                          
+    iObexServer = aObexServer;      
+    return iObexServer->Start(this) ;
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+//End of File
+