--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkingtestandutils/networkingunittest/dummynif/dummyniffactory.cpp Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,99 @@
+// Copyright (c) 2003-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 <es_mbuf.h>
+#include "dummynif.h"
+#include "dummynifvar.h"
+
+/*
+ * Factory functions...
+ * Build this file with its factory when you want a normal dummy nif which will
+ * echo back udp packets and respond to commands
+ */
+
+EXPORT_C CNifFactory* NewInterfaceFactoryL()
+ {
+ return new(ELeave) CDummyIfFactory;
+ }
+
+void CDummyIfFactory::InstallL()
+ {
+ iDelayPipe.SetLengthL(KDelayQueueSize);
+ for(TInt prime = 0; prime < KDelaySlots; ++prime)
+ {
+ RMBuf* stopper = NULL;
+ User::LeaveIfError(iDelayPipe.Add(&stopper));
+ }
+ if(KDelaySlots > 0)
+ {
+ iNetDelayTimer = CPeriodic::NewL(50000); // arbitrary stupid high priority, but we really need to run on our ticks & not get delayed until flow-offs & retransmits
+ iNetDelayTimer->Start(KDelayQuantum, KDelayQuantum, TCallBack(CDummyIfFactory::DripCallback, this));
+ TCallBack callBack(DripCallback, this);
+ }
+ }
+
+void CDummyIfFactory::SetDripReceiver(TCallBack aReceiver)
+ {
+ iDripReceiver = aReceiver;
+ }
+
+TInt CDummyIfFactory::DripCallback(TAny* aSelf)
+ {
+ CDummyIfFactory* self = (CDummyIfFactory*) aSelf;
+ if(self->iDripReceiver.iPtr)
+ {
+ RMBuf* stopper = NULL;
+ self->iDelayPipe.Add(&stopper); // keep the supply of backstops constant
+ self->iDripReceiver.CallBack();
+ }
+ return 0;
+ }
+
+RMBuf* CDummyIfFactory::GetDrip()
+ {
+ RMBuf* next = NULL;
+ iDelayPipe.Remove(&next);
+ return next;
+ }
+
+void CDummyIfFactory::AddDrip(RMBuf* aDrip)
+ {
+ TInt err = iDelayPipe.Add(&aDrip);
+ __ASSERT_ALWAYS(err == 1, User::Panic(_L("DummyIfOver"), 0));
+ }
+
+
+
+CDummyIfFactory::~CDummyIfFactory()
+ {
+ delete iNetDelayTimer;
+ }
+
+
+CNifIfBase* CDummyIfFactory::NewInterfaceL(const TDesC& /*aName*/)
+ {
+ CDummyIfLink* s = new(ELeave) CDummyIfLink(*this);
+ CleanupStack::PushL(s);
+ s->TimerConstructL(ESocketTimerPriority);
+ CleanupStack::Pop();
+ return s;
+ }
+
+TInt CDummyIfFactory::Info(TNifIfInfo& aInfo, TInt /*aIndex*/) const
+ {
+ CDummyIfLink::FillInInfo(aInfo, (TAny*)this);
+
+ return 1;
+ }