diff -r 8d540f55e491 -r 425d8f4f7fa5 linklayerprotocols/tundriver/inc/tundriverbinder.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linklayerprotocols/tundriver/inc/tundriverbinder.h Wed Sep 15 00:18:51 2010 +0300 @@ -0,0 +1,139 @@ +/** +* Copyright (c) 2010 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: +* Header file for the Ip4 and Ip6 Binder Configuration. +* +* +*/ + +/** + @file tundriverbinder.h + @internalTechnology +*/ + +#ifndef _TUNDRIVERBINDER_H +#define _TUNDRIVERBINDER_H + +#include +#include +#include +#include +#include +#include +#include +#include "es_protbinder.h" +#include "tundriverflow.h" + +const TInt KMTU = 1500; + +const TInt KSpeedMetric = 0; + +const TUint KTUNDriverTos = 192; // 0xC0; uses the UNUSED 7,8 MSB of Differentiated Services + +class CTunDriverSubConnectionFlow; + +class CTunDriverBinder : public CBase, public ESock::MLowerDataSender, public ESock::MLowerControl +/** +Common Binder for the tunnel driver binder. This binder will be inherited by IPv4 or IPv6 Binder classes. +*/ + { +public: + virtual MLowerDataSender* Bind(ESock::MUpperDataReceiver& aUpperReceiver , ESock::MUpperControl& aUpperControl); + virtual void Unbind (ESock::MUpperDataReceiver& aUpperReceiver, ESock::MUpperControl& aUpperControl); + virtual TBool MatchesUpperControl(ESock::MUpperControl* aUpperControl) const; + virtual TInt Control(TUint, TUint, TDes8&); + void SetPort(TUint aPort); + TUint GetPort(); +protected: + CTunDriverBinder(CTunDriverSubConnectionFlow& aTunDriverSubConnectionFlow); +protected: + __FLOG_DECLARATION_MEMBER; +private: + CTunDriverSubConnectionFlow& iTunDriverSubConnectionFlow; + TUint iPort; + }; + +class CTunDriverBinder4 : public CTunDriverBinder + { +public: + static CTunDriverBinder4* NewL(CTunDriverSubConnectionFlow& aLink); + ~CTunDriverBinder4(); + // from MLowerDataSender + virtual TInt GetName(TDes& aName); + virtual TInt GetConfig(TBinderConfig& aConfig); + MLowerDataSender* Bind(ESock::MUpperDataReceiver& aUpperReceiver , ESock::MUpperControl& aUpperControl); + void Unbind (ESock::MUpperDataReceiver& aUpperReceiver, ESock::MUpperControl& aUpperControl); + TBool MatchesUpperControl(ESock::MUpperControl* aUpperControl) const; + ESock::MLowerDataSender::TSendResult Send(RMBufChain& aData); + void StartSending(); +private: + CTunDriverBinder4(CTunDriverSubConnectionFlow& aLink); + void ConstructL(); + void TunnelProcessing(RMBufPacket& aPacket, RMBufPacket& aRecv); + inline CTunDriverSubConnectionFlow* Flow(); + virtual void DoSend(); + virtual void DoProcess(); + static TInt RecvCallBack(TAny* aCProtocol); + static TInt SendCallBack(TAny* aCProtocol); +private: + TInetAddr iLocalAddress; + CTunDriverSubConnectionFlow& iTunDriverSubConnectionFlow; + ESock::MUpperDataReceiver* iUpperReceiver; + ESock::MUpperControl* iUpperControl; + RMBufPktQ iSendQ; + RMBufPktQ iRecvQ; + CAsyncCallBack* iSendCallBack; + CAsyncCallBack* iRecvCallBack; + }; + +CTunDriverSubConnectionFlow* CTunDriverBinder4::Flow() + { + return &iTunDriverSubConnectionFlow; + } + +#ifdef IPV6SUPPORT +class CTunDriverBinder6 : public CTunDriverBinder + { +public: + static CTunDriverBinder6* NewL(CTunDriverSubConnectionFlow& aLink); + ~CTunDriverBinder6(); + // from MLowerDataSender + virtual TInt GetName(TDes& aName); + virtual TInt GetConfig(TBinderConfig& aConfig); + MLowerDataSender* Bind(ESock::MUpperDataReceiver& aUpperReceiver , ESock::MUpperControl& aUpperControl); + void Unbind (ESock::MUpperDataReceiver& aUpperReceiver, ESock::MUpperControl& aUpperControl); + TBool MatchesUpperControl(ESock::MUpperControl* aUpperControl) const; + ESock::MLowerDataSender::TSendResult Send(RMBufChain& aData); + void StartSending(); +private: + CTunDriverBinder6(CTunDriverSubConnectionFlow& aLink); + void ConstructL(); + void TunnelProcessing(RMBufPacket& aPacket, RMBufPacket& aRecv); + inline CTunDriverSubConnectionFlow* Flow(); + virtual void DoSend(); + virtual void DoProcess(); + static TInt RecvCallBack(TAny* aCProtocol); + static TInt SendCallBack(TAny* aCProtocol); +private: + TInetAddr iLocalAddress; + CTunDriverSubConnectionFlow& iTunDriverSubConnectionFlow; + ESock::MUpperDataReceiver* iUpperReceiver; + ESock::MUpperControl* iUpperControl; + RMBufPktQ iSendQ; + RMBufPktQ iRecvQ; + CAsyncCallBack* iSendCallBack; + CAsyncCallBack* iRecvCallBack; + }; +#endif +#endif // _TUNDRIVERBINDER_H