--- /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
+