syncmlfw/common/obex/obexserverbinding/src/nsmlobexserverbinding.cpp
changeset 0 b497e44ab2fc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/common/obex/obexserverbinding/src/nsmlobexserverbinding.cpp	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2002 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 server binding
+*
+*/
+
+
+#include "nsmlobexserverbinding.h"
+#include "nsmlerror.h"
+
+// CONSTANTS
+_LIT( KInvalidState, "Invalid state" );
+
+//============================================================
+// CNSmlObexServerBinding definition
+//============================================================
+
+//------------------------------------------------------------
+// CNSmlObexServerBinding::NewL()
+//------------------------------------------------------------
+CNSmlObexServerBinding* CNSmlObexServerBinding::NewL()
+    {
+	CNSmlObexServerBinding* self = new (ELeave) CNSmlObexServerBinding();
+	CleanupStack::PushL( self );
+    self->ConstructL();
+	CleanupStack::Pop(); //self
+    return self;
+    }
+//------------------------------------------------------------
+// CNSmlObexServerBinding::CNSmlObexServerBinding()
+//------------------------------------------------------------
+CNSmlObexServerBinding::CNSmlObexServerBinding() : CActive(0)
+	{
+	CActiveScheduler::Add( this );
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::~CNSmlObexServerBinding()
+//------------------------------------------------------------
+CNSmlObexServerBinding::~CNSmlObexServerBinding()
+	{
+	_DBG_FILE("CNSmlObexServerBinding::~CNSmlObexServerBinding() begin");
+	if( iContent == ENSmlDataSync && iSessionAlive )
+		{
+		_DBG_FILE("Closing iCsDS");
+		iCsDS.Disconnect();
+		iCsDS.Close();
+		}
+	if( iContent == ENSmlDeviceManagement && iSessionAlive )
+		{
+		_DBG_FILE("Closing iCsDM");
+		iCsDM.Disconnect();
+		iCsDM.Close();
+		}
+	Cancel();
+	_DBG_FILE("CNSmlObexServerBinding::~CNSmlObexServerBinding() end");
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::ConstructL()
+// 2-phase
+//------------------------------------------------------------
+void CNSmlObexServerBinding::ConstructL()
+    {
+	iSessionAlive = EFalse;
+    }
+//------------------------------------------------------------
+// CNSmlObexServerBinding* CreateCNsmlObexServerBindingL()
+// 
+//------------------------------------------------------------
+EXPORT_C CNSmlObexServerBinding* CreateCNsmlObexServerBindingL()
+	{
+	return CNSmlObexServerBinding::NewL();
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::Connect( TNSmlObexTransport /*aTransport*/,TBool /*aServerAlerted*/, TDesC8& /*aMimeType*/, TRequestStatus &aStatus )
+// 
+//------------------------------------------------------------
+void CNSmlObexServerBinding::Connect( TNSmlObexTransport /*aTransport*/,TBool /*aServerAlerted*/, TDesC8& aMimeType, TRequestStatus &aStatus )
+	{
+	_DBG_FILE("CNSmlObexServerBinding::Connect");
+	TInt err ( KErrNone );
+	iCancelledByServer = EFalse;
+	iAgentStatus = &aStatus;
+	*iAgentStatus = KRequestPending;
+
+	if( aMimeType.Compare( KDataSyncMIME ) == 0 )
+		{
+		_DBG_FILE("Data sync MIME type");
+		iContent = ENSmlDataSync;
+		}
+	else
+		{
+		_DBG_FILE("Dev Man MIME type");
+		iContent = ENSmlDeviceManagement;
+		}
+	err = ConnectToServer();
+	DBG_FILE_CODE( err, _S8("ConnectToServer returned") );
+	if ( err )
+	    {
+	    _DBG_FILE("ConnectToServer error converted to Server not responding");
+	    err = TNSmlError::ESmlServerNotResponding;
+	    }
+	User::RequestComplete( iAgentStatus, err );
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::ConnectToServer()
+// 
+//------------------------------------------------------------
+TInt CNSmlObexServerBinding::ConnectToServer()
+	{
+	_DBG_FILE("CNSmlObexServerBinding::ConnectToServer");
+	TInt err( KErrNone );
+	if( iContent == ENSmlDataSync )
+		{
+		_DBG_FILE("DS client session");
+		err = iCsDS.Connect();
+		if( err == KErrNone )
+			{
+			iSessionAlive = ETrue;
+			}
+		}
+	else
+		{
+		_DBG_FILE("DM client session");
+		err = iCsDM.Connect();
+		if( err == KErrNone )
+			{
+			iSessionAlive = ETrue;
+			}
+		}
+	return err;
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::DoCancel()
+// From CActive
+//------------------------------------------------------------
+void CNSmlObexServerBinding::DoCancel()
+	{
+	_DBG_FILE("CNSmlObexServerBinding::DoCancel");
+	if( iState == EReceiving )
+		{
+		_DBG_FILE("CNSmlObexServerBinding - Canceling receive");
+		if( iContent == ENSmlDataSync )
+			{
+			_DBG_FILE("Canceling iCsDS");
+			iCsDS.CancelReceive();
+			}
+		else
+			{
+			_DBG_FILE("Canceling iCsDM");
+			iCsDM.CancelReceive();
+			}
+		if( iCancelledByServer )
+			{
+			_DBG_FILE("iCancelledByServer");
+			User::RequestComplete( iAgentStatus, KErrCancel );
+			}
+		else
+			{
+			_DBG_FILE("Cancelled by sync app");
+			User::RequestComplete( iAgentStatus, KErrNone );
+			}
+		}
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::RunL()
+// From CActive
+//------------------------------------------------------------
+void CNSmlObexServerBinding::RunL()
+	{
+	TState s = iState;
+	iState = EIdle;
+	if( iStatus.Int() != KErrNone )
+		{
+		DBG_FILE_CODE( iStatus.Int(), _S8("error...") );
+		if( iContent == ENSmlDataSync )
+			{
+			_DBG_FILE("Disconnecting iCsDS");
+			iCsDS.Disconnect();
+			iCsDS.Close();
+			iSessionAlive = EFalse;
+			}
+		else
+			{
+			_DBG_FILE("Disconnecting iCsDM");
+			iCsDM.Disconnect();
+			iCsDM.Close();
+			iSessionAlive = EFalse;
+			}
+		User::RequestComplete( iAgentStatus, iStatus.Int() );
+		}
+	else
+		{
+		switch( s )
+			{
+			case EIdle:
+				if( iContent == ENSmlDataSync )
+					{
+					_DBG_FILE("Disconnecting iCsDS");
+					iCsDS.Disconnect();
+					iCsDS.Close();
+					iSessionAlive = EFalse;
+					}
+				else
+					{
+					_DBG_FILE("Disconnecting iCsDM");
+					iCsDM.Disconnect();
+					iCsDM.Close();
+					iSessionAlive = EFalse;
+					}
+				break;
+			case EConnecting:
+			case ESending:
+			case EReceiving:
+				User::RequestComplete( iAgentStatus, iStatus.Int() );
+				iState = EIdle;
+				break;
+			default:
+				User::Panic( KInvalidState, s );
+			}
+		}
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::Send( TDesC8& aStartPtr, TBool /*aFinalPacket*/, TRequestStatus &aStatus )
+// 
+//------------------------------------------------------------
+void CNSmlObexServerBinding::Send( const TDesC8& aStartPtr, TBool /*aFinalPacket*/, TRequestStatus &aStatus )
+	{
+	_DBG_FILE("CNSmlObexServerBinding::Send");
+	iCancelledByServer = EFalse;
+	iState = ESending;
+	iAgentStatus = &aStatus;
+	*iAgentStatus = KRequestPending;
+
+	if( iContent == ENSmlDataSync )
+		{
+		_DBG_FILE("iCsDS Send");
+		iCsDS.Send( aStartPtr );
+		}
+	else
+		{
+		_DBG_FILE("iCsDM Send");
+		iCsDM.Send( aStartPtr );
+		}
+	User::RequestComplete( iAgentStatus, KErrNone );
+	iState = EIdle;
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::Receive( TDes8& aStartPtr, TRequestStatus &aStatus )
+// 
+//------------------------------------------------------------
+void CNSmlObexServerBinding::Receive( TDes8& aStartPtr, TRequestStatus &aStatus )
+	{
+	_DBG_FILE("CNSmlObexServerBinding::Receive");
+	iCancelledByServer = EFalse;
+	iState = EReceiving;
+	iAgentStatus = &aStatus;
+	*iAgentStatus = KRequestPending;
+
+	if( iContent == ENSmlDataSync )
+		{
+		_DBG_FILE("iCsDS Receive");
+		iCsDS.Receive( aStartPtr, iStatus );
+		}
+	else
+		{
+		_DBG_FILE("iCsDM Receive");
+		iCsDM.Receive( aStartPtr, iStatus );
+		}
+	SetActive();
+	}
+//------------------------------------------------------------
+// CNSmlObexServerBinding::Disconnect()
+// 
+//------------------------------------------------------------
+void CNSmlObexServerBinding::Disconnect()
+	{
+	_DBG_FILE("CNSmlObexServerBinding::Disconnect");
+	if( iSessionAlive )
+		{
+		if( iContent == ENSmlDataSync )
+			{
+			_DBG_FILE("iCsDS Disconnect");
+			iCsDS.Disconnect();
+			iCsDS.Close();
+			iSessionAlive = EFalse;
+			}
+		else
+			{
+			_DBG_FILE("iCsDM Disconnect");
+			iCsDM.Disconnect();
+			iCsDM.Close();
+			iSessionAlive = EFalse;
+			}
+		}
+	}
+
+//End of File
+