obex/obexprotocol/obex/src/TObexServerStateDisconnecting.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:11:40 +0200
changeset 0 d0791faffa3f
permissions -rw-r--r--
Revision: 201003 Kit: 201005

// Copyright (c) 2006-2009 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:
//

#include <obex.h>
#include "obexserverstatemachine.h"

#if ( defined __FLOG_ACTIVE && defined __LOG_FUNCTIONS__ )
_LIT8(KLogComponent, "OBEX");
#endif

/**
@file
@internalComponent

Disconnecting State
In this state, the server has received a (correctly-addressed) disconnect 
request from the client, and placed an asynchronous request on the transport 
to ACK it.
This state is interested in the completion of that send request so it can (a) 
complete the client's notifications, (b) move to 'transport connected' state 
and (c) pull down the transport.
*/

TObexServerStateDisconnecting::TObexServerStateDisconnecting()
	{
#ifdef __FLOG_ACTIVE
	_LIT8(KName, "Disconnecting");
	iName = KName;
#endif
	}

void TObexServerStateDisconnecting::Connect(CObexServerStateMachine& aContext, CObexPacket& /*aPacket*/)
	{
	aContext.Owner().Error(KErrIrObexBadEvent);
	}

void TObexServerStateDisconnecting::Disconnect(CObexServerStateMachine& aContext, CObexPacket& /*aPacket*/)
	{
	aContext.Owner().Error(KErrIrObexBadEvent);
	}

void TObexServerStateDisconnecting::Put(CObexServerStateMachine& aContext, CObexPacket& /*aPacket*/)
	{
	aContext.Owner().Error(KErrIrObexBadEvent);
	}

void TObexServerStateDisconnecting::Get(CObexServerStateMachine& aContext, CObexPacket& /*aPacket*/)
	{
	aContext.Owner().Error(KErrIrObexBadEvent);
	}

void TObexServerStateDisconnecting::SetPath(CObexServerStateMachine& aContext, CObexPacket& /*aPacket*/)
	{
	aContext.Owner().Error(KErrIrObexBadEvent);
	}

void TObexServerStateDisconnecting::Abort(CObexServerStateMachine& aContext)
	{
	aContext.Owner().Error(KErrIrObexBadEvent);
	}
	
void TObexServerStateDisconnecting::OverrideRequestHandling(CObexServerStateMachine& aContext, TObexResponse /*aResponse*/)
	{
	aContext.Owner().Error(KErrIrObexBadEvent);
	}

void TObexServerStateDisconnecting::WriteComplete(CObexServerStateMachine& aContext)
	{
	LOG_FUNC

	aContext.Notification().ObexDisconnectIndication(KNullDesC8);
	// ControlledTransportDown() may raise a TransportDown event immediately, 
	// re-entering the state machine, so we need to be in the correct state 
	// (TransportConnected) before the call.
	// Also need to keep current operation == EOpDisconnect until transport is 
	// happy (which is done in CObex) so ETransportConnected does not set 
	// iCurrentOperation to EOpIdle.
	aContext.ChangeState(CObexServerStateMachine::ETransportConnected);
	aContext.ControlledTransportDown();
	}