diff -r 000000000000 -r af10295192d8 linklayerprotocols/pppnif/INC/ncpip.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linklayerprotocols/pppnif/INC/ncpip.h Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,231 @@ +// Copyright (c) 1997-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: +// ncpip4.H +// +// + +/** + @file + @internalComponent +*/ + +#if !defined(__NCPIP4_H__) +#define __NCPIP4_H__ + +#include +#include +#include +#include +#include +#include + +const TUint KPppIpIfaceFeatures = +// KIfIsLoopback | + KIfIsPointToPoint | +// KIfCanBroadcast | +// KIfCanMulticast | +// KIfCanSetMTU | +// KIfHasHardwareAddr | +// KIfCanSetHardwareAddr | + 0; + +const TUint KIpcpSendPriority = 10; +//const TUint KPppIdIp = 0x0021; // MOVED TO VJ.H + +const TUint KPppIdIpcp = 0x8021; +const TUint KPppIdCompressed = 0x00fd; +const TUint KPppIdHeadComp = 0x004f; +const TUint KPppIdHeadCompCp = 0x804f; + +const TUint8 KPppIpcpOptIpAddresses = 1; +const TUint8 KPppIpcpOptIpCompressionProtocol = 2; +const TUint8 KPppIpcpOptIpAddress = 3; +const TUint8 KPppIpcpOptPrimaryDnsAddress = 129; +const TUint8 KPppIpcpOptSecondaryDnsAddress = 131; +// NetBios +const TUint8 KPppIpcpOptPrimaryNbnsAddress = 130; +const TUint8 KPppIpcpOptSecondaryNbnsAddress = 132; + +const TUint KSlashChar='\\'; + +class MIpcpIpRecvr : public MPppRecvr + { +public: + MIpcpIpRecvr(CPppLcp* aLcp); + virtual TBool RecvFrame(RMBufChain& aPacket); + virtual void FrameError(); + virtual void KillProtocol(); + }; + +class MIpcpTcpVjCompRecvr : public MPppRecvr + { +public: + MIpcpTcpVjCompRecvr(CPppLcp* aLcp); + virtual TBool RecvFrame(RMBufChain& aPacket); + virtual void FrameError(); + virtual void KillProtocol(); + }; + +class MIpcpTcpVjUncompRecvr : public MPppRecvr + { +public: + MIpcpTcpVjUncompRecvr(CPppLcp* aLcp); + virtual TBool RecvFrame(RMBufChain& aPacket); + virtual void FrameError(); + virtual void KillProtocol(); + }; + +class CVJCompressorIf; +class CVJDeCompressorIf; + +class CPppLcp; +class CPppNifSubConnectionFlow; + +NONSHARABLE_CLASS(CPppBinderIp4) : public CBase, public MPppFsm, + public ESock::MLowerDataSender, public ESock::MLowerControl +/** +Implements IPCP and support for IP datagrams (RFC 1332) + +@internalComponent +*/ + { +public: + static CPppBinderIp4* NewL(CPppLcp* aLcp); + ~CPppBinderIp4(); + + //-========================================================= + // MLowerDataSender methods + //-========================================================= + virtual ESock::MLowerDataSender::TSendResult Send(RMBufChain& aPdu); + + //-========================================================= + // MLowerControl methods + //-========================================================= + virtual TInt GetName(TDes& aName); + virtual TInt BlockFlow(ESock::MLowerControl::TBlockOption /*aOption*/); + virtual TInt GetConfig(TBinderConfig& aConfig); + virtual TInt Control(TUint aLevel, TUint aName, TDes8& aOption); + + //-========================================================= + // Callthrough from MFlowBinderControl instance + //-========================================================= + MLowerDataSender* BindL(ESock::MUpperDataReceiver& aUpperReceiver, ESock::MUpperControl& aControl); + void UnBind(ESock::MUpperDataReceiver& aUpperReceiver, ESock::MUpperControl& aControl); + + // + TBool MatchesUpperControl(const ESock::MUpperControl* aUpperControl) const; + + void SendFlowOn(); + void Error(TInt aError); + TInt Notification(TAgentToNifEventType aEvent); + + // + void RecvIp(RMBufChain& aPacket); + void RecvVjCompTcp(RMBufChain& aPacket); + void RecvVjUncompTcp(RMBufChain& aPacket); + void IpFrameError(); + void VjCompTcpFrameError(); + void VjUncompTcpFrameError(); + void IpKillProtocol(); + void VjCompTcpKillProtocol(); + void VjUncompTcpKillProtocol(); + + // + +protected: + + // PPP FSM Upcalls + virtual TInt FsmLayerStarted(); + virtual void FsmLayerFinished(TInt aReason=KErrNone); + virtual void FsmLayerUp(); + virtual void FsmLayerDown(TInt aReason=KErrNone); + virtual void FsmFillinConfigRequestL(RPppOptionList& aRequestList); + virtual void FsmCheckConfigRequest(RPppOptionList& aRequestList, RPppOptionList& aAckList, RPppOptionList& aNakList, RPppOptionList& aRejList); + virtual void FsmApplyConfigRequest(RPppOptionList& aRequestList); + virtual void FsmRecvConfigAck(RPppOptionList& aReplyList); + virtual void FsmRecvConfigNak(RPppOptionList& aReplyList, RPppOptionList& aReqList); + virtual void FsmRecvConfigReject(RPppOptionList& aReplyList, RPppOptionList& aReqList); + virtual void FsmTerminationPhaseComplete(); + virtual TBool FsmRecvUnknownCode(TUint8 aCode, TUint8 aId, TInt aLength, RMBufChain& aPacket); + virtual void KillProtocol(); +private: + void ConstructL(); + CPppBinderIp4(CPppLcp* aLcp); + + MLowerDataSender::TSendResult SendProtFrame(RMBufChain& aPacket, TUint aProtocol); + static TInt SendCallBack(TAny* aCProtocol); + void DoSend(); + CVJCompressorIf* LoadVJCompressorL(); + CVJDeCompressorIf* LoadVJDeCompressorL(); + + inline CPppLcp* Flow(); + + __FLOG_DECLARATION_MEMBER; +private: + // + CPppLcp* iPppNifSubConnectionFlow; + + ESock::MUpperDataReceiver* iUpperReceiver; + ESock::MUpperControl* iUpperControl; + + TBool iAuthenticated; + RMBufPktQ iSendQ; + CAsyncCallBack* iSendCallBack; + + TInterfaceName iIfName; + + // + ESock::MLowerDataSender::TSendResult iLowerFlowOn; + ESock::MLowerDataSender::TSendResult iUpperFlowOn; + // + TPppExtraRecvr iIpRecvr; + TPppExtraRecvr iVjCompTcpRecvr; + TPppExtraRecvr iVjUncompTcpRecvr; + + // Negotiated information + TUint32 iPrimaryDns; + TUint32 iSecondaryDns; + + /** Held in case of a future NetBios protocol */ + TUint32 iPrimaryNbns; + + /** Held in case of a future NetBios protocol */ + TUint32 iSecondaryNbns; + + TUint32 iRemoteAddr; + TUint32 iLocalAddr; + TUint32 iNetworkMask; + CVJDeCompressorIf* iVJDecompressor; + CVJCompressorIf* iVJCompressor; + CObjectCon* iVJCompressorCon; + CObjectCon* iVJDeCompressorCon; + + /** ETrue if the user enabled VJ compression */ + TBool iVJCompressionOn; + + TUint iMaxVJSlots; + TBool iCompressConnId; + }; + +// +// Inline functions +// + +CPppLcp* CPppBinderIp4::Flow() + { + return iPppNifSubConnectionFlow; + } + + +#endif // __PPPBINDERIP4_H__