networkingtestandutils/networkingunittest/DummyNifProtos/inc/Dummynifbinder.h
changeset 0 af10295192d8
child 5 1422c6cd3f0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/networkingunittest/DummyNifProtos/inc/Dummynifbinder.h	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,215 @@
+/**
+* Copyright (c) 2005-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:
+* Header file for the Default SubConnection Flow
+* 
+*
+*/
+
+
+
+/**
+ @file DummyNifBinder.h
+*/
+
+#ifndef DUMMYNIFBINDER_H_INCLUDED_
+#define DUMMYNIFBINDER_H_INCLUDED_
+
+#include <ip4_hdr.h>
+#include <ip6_hdr.h>
+#include <udp_hdr.h>
+#include <comms-infras/ss_protflow.h>
+#include <comms-infras/ss_flowbinders.h>
+#include <comms-infras/commsdebugutility.h>
+#include "es_protbinder.h"
+#include "DummyNifFlow.h"
+
+/*
+TODO NW: is there potential commonality that can be placed into a binder base class ?
+*/
+
+class CDummyErrorOneShot : public CAsyncOneShot
+/**
+Class used to asynchronously signal a binder error
+*/
+	{
+	friend class CDummyNifBinder4;		// for iUpperControl
+public:
+	CDummyErrorOneShot();
+	void RunL();
+	void Schedule(ESock::MUpperControl* iUpperControl);
+
+private:
+	ESock::MUpperControl* iUpperControl;
+	};
+
+class CDummyNifSubConnectionFlow;
+class CDummyNifFlowTestingSubscriber;
+
+class CDummyNifBinder4 : public CBase, public ESock::MLowerDataSender, public ESock::MLowerControl
+/**
+IP4 binder
+*/
+	{
+public:
+	static CDummyNifBinder4* NewL(CDummyNifSubConnectionFlow& aDummyNifSubConnectionFlow);
+	virtual ~CDummyNifBinder4();
+	
+	MLowerDataSender* Bind(ESock::MUpperDataReceiver& aUpperReceiver , ESock::MUpperControl& aUpperControl);
+	void Unbind (ESock::MUpperDataReceiver& aUpperReceiver, ESock::MUpperControl& aUpperControl);
+
+	void BinderReady();
+	void ProcessPacket(RMBufChain& aData);
+
+	// from MLowerDataSender
+	virtual ESock::MLowerDataSender::TSendResult Send(RMBufChain& aData);
+	
+	// from MLowerControl
+	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);
+
+	// Utility functions
+	TBool MatchesUpperControl(ESock::MUpperControl* aUpperControl) const;
+
+protected:
+	CDummyNifBinder4(CDummyNifSubConnectionFlow& aDummyNifSubConnectionFlow);
+
+private:
+    void UpdateHeaders(TInet6HeaderIP4* aIp4, TInet6HeaderUDP* aUdp);
+	inline CDummyNifSubConnectionFlow* Flow();
+
+private:
+   	TUint32 iLocalAddressBase;
+   	TUint32 iLocalAddress;
+    CDummyNifSubConnectionFlow& iDummyNifSubConnectionFlow;
+	ESock::MUpperDataReceiver* iUpperReceiver;
+	ESock::MUpperControl* iUpperControl;
+	CDummyErrorOneShot iErrorOneShot;
+
+public:
+	CDummyNifFlowTestingSubscriber* iTestSubscriber;
+
+protected:
+    __FLOG_DECLARATION_MEMBER;
+	};
+
+class CDummyNifBinder6 : public CBase, public ESock::MLowerDataSender, public ESock::MLowerControl
+/**
+IP6 binder
+*/
+	{
+public:
+	static CDummyNifBinder6* NewL(CDummyNifSubConnectionFlow& aDummyNifSubConnectionFlow);
+	virtual ~CDummyNifBinder6();
+	
+	MLowerDataSender* Bind(ESock::MUpperDataReceiver& aUpperReceiver , ESock::MUpperControl& aUpperControl);
+	void Unbind (ESock::MUpperDataReceiver& aUpperReceiver, ESock::MUpperControl& aUpperControl);
+
+	void BinderReady();
+	void ProcessPacket(RMBufChain& aData);
+
+	// from MLowerDataSender
+	virtual ESock::MLowerDataSender::TSendResult Send(RMBufChain& aData);
+	
+	// from MLowerControl
+	virtual TInt GetName(TDes& aName);
+	virtual TInt BlockFlow(MLowerControl::TBlockOption /*aOption*/);
+	virtual TInt GetConfig(TBinderConfig& aConfig);
+	virtual TInt Control(TUint aLevel, TUint aName, TDes8& aOption);
+
+	// Utility functions
+	TBool MatchesUpperControl(ESock::MUpperControl* aUpperControl) const;
+
+protected:
+	CDummyNifBinder6(CDummyNifSubConnectionFlow& aDummyNifSubConnectionFlow);
+
+private:
+    void UpdateHeaders(TInet6HeaderIP* aIp6, TInet6HeaderUDP* /*aUdp*/);
+	void StaticDnsConfiguration(TBinderConfig6& aConfig);
+	inline CDummyNifSubConnectionFlow* Flow();
+
+private:
+    CDummyNifSubConnectionFlow& iDummyNifSubConnectionFlow;
+	ESock::MUpperDataReceiver* iUpperReceiver;
+	ESock::MUpperControl* iUpperControl;
+
+protected:
+    __FLOG_DECLARATION_MEMBER;
+
+	};
+
+//
+// Inlines
+//
+
+CDummyNifSubConnectionFlow* CDummyNifBinder4::Flow()
+	{
+	return &iDummyNifSubConnectionFlow;
+	}
+
+CDummyNifSubConnectionFlow* CDummyNifBinder6::Flow()
+	{
+	return &iDummyNifSubConnectionFlow;
+	}
+
+// various things that will get set up on each interface by dummy nifs
+// will be added to the address base to make the broadcast address...
+const TUint KBroadcastAddressSuffix = 255;
+// some arbitrary num to add to the base to give the default gateway machine...
+const TUint KDefaultGatewayAddressSuffix = 10;
+// some arbitrary num to add to the base to give the secondary dns server...
+const TUint KSecondaryDnsAddressSuffix = 11;
+// obviously all the above addresses are totally arbitrary to a certain extent... :-)
+
+
+const TUid KDummyNifTestingPubSubUid={0x10272F42};
+
+NONSHARABLE_CLASS(CDummyNifFlowTestingSubscriber) : public CActive
+	{
+public:
+	TBool IsEnabled()
+		{
+		return iIsEnabled;
+		}
+
+	static TBool ShouldRun(TUint aApId);
+
+	static CDummyNifFlowTestingSubscriber* NewL(CDummyNifSubConnectionFlow& aFlow, TUint aApId)
+		{
+		CDummyNifFlowTestingSubscriber* ats = new(ELeave)CDummyNifFlowTestingSubscriber(aFlow, aApId);
+		CleanupStack::PushL(ats);
+		ats->ConstructL();
+		CleanupStack::Pop(ats);
+		return ats;
+		}
+
+	virtual ~CDummyNifFlowTestingSubscriber();
+
+public:
+	CDummyNifFlowTestingSubscriber(CDummyNifSubConnectionFlow& aFlow, TUint aApId);
+	void ConstructL();
+	
+	void RunL();
+	void DoCancel();
+
+private:
+	CDummyNifSubConnectionFlow& iFlow;
+	TInt iApId;
+	RProperty iProperty;
+	TBool iIsEnabled : 1;
+	};
+
+#endif // DUMMYNIFBINDER_H_INCLUDED_