diff -r 000000000000 -r b497e44ab2fc syncmlfw/common/obex/obexserverbinding/src/nsmlobexserverbinding.cpp --- /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 +