// Copyright (c) 2004-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:
// loop6.h - loopback interface for IPv6
//



/**
 @internalComponent
*/
#ifndef __LOOP6_H__
#define __LOOP6_H__

//
// In Epoc R6 nifman.h has been split, CNifIfBase definition has been moved
// into <comms-infras/nifif.h>. 
//
#include <nifman.h>
#	include <comms-infras/nifif.h>	// ..for CNifIfBase in Epoc R6 and later
#include <nifmbuf.h>
#include <es_prot.h>

const TUint KProtocolInet6Loop = 0x1F00;	// Virtual

class CIfLoop6 : public CNifIfBase
{
    public:
	CIfLoop6();
	virtual void ConstructL(const TDesC& aTag);
	~CIfLoop6();

	static CIfLoop6* NewL(const TDesC& aTag);
	
	virtual void BindL(TAny *aId);
	virtual TInt State();
	virtual TInt Control(TUint aLevel,TUint aName,TDes8& aOption, TAny* aSource);
	virtual void Info(TNifIfInfo& aInfo) const;
	virtual TInt Send(RMBufChain& aPdu, TAny* aSource);
	virtual TInt Notification(TAgentToNifEventType /* aEvent */, void * /* aInfo */ )
	{
		return KErrNone;
	};  
	
    protected:
	virtual void DoSend();
	virtual void DoProcess();
	void Loop(RMBufPacket& aTxPkt, RMBufPacket& aRxPkt);

    private:
	static TInt RecvCallBack(TAny* aCProtocol);
	static TInt SendCallBack(TAny* aCProtocol);

    protected:
	CProtocolBase* iNetwork;
	RMBufPktQ iSendQ;
	RMBufPktQ iRecvQ;
	CAsyncCallBack* iSendCallBack;
	CAsyncCallBack* iRecvCallBack;

    private:
	HBufC* iIfaceName;
	TInt iIfaceMTU;
};

#endif
