networkcontrol/ipnetworklayer/src/notify.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkcontrol/ipnetworklayer/src/notify.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,290 @@
+// 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:
+// Support for TCP/IP stack calling NIFMAN via MNifIfNotify pointer in CNIfIfBase.
+// 
+//
+
+/**
+ @file notify.cpp
+*/
+
+#include "notify.h"
+#include "panic.h"
+#include "idletimer.h"
+#include <comms-infras/ss_datamonitoringprovider.h>
+
+using namespace ESock;
+
+//
+// CIPShimNotify methods //
+//
+
+CIPShimNotify::CIPShimNotify(CIPShimIfBase* aIntf) : iIntf(aIntf)
+	{
+	}
+
+CIPShimNotify* CIPShimNotify::NewL(CIPShimIfBase* aIntf)
+	{
+	return new (ELeave) CIPShimNotify(aIntf);
+	}
+
+void CIPShimNotify::OpenRoute()
+	{ 
+   	iIntf->ProtcolIntf()->OpenRoute();
+	}
+	
+void CIPShimNotify::CloseRoute()
+	{	       	
+   	iIntf->ProtcolIntf()->CloseRoute();
+	}
+	
+TInt CIPShimNotify::PacketActivity(TDataTransferDirection aDirection, TUint aBytes, TBool aResetTimer)
+	{
+	ASSERT(iPacketActivity);
+	ASSERT(iConnectionVolumesPtr);
+	ASSERT(iSubConnectionVolumesPtr);
+			
+	*iPacketActivity = aResetTimer;
+
+	switch(aDirection)
+		{
+	case EIncoming:
+		/******************************
+		 * NOTE: shared memory write
+		 ******************************/
+		iConnectionVolumesPtr->iReceivedBytes += aBytes;
+		
+		if(iConnectionVolumesPtr->iReceivedBytes < aBytes)
+			{
+			iIntf->Flow().PostConnDataReceivedThresholdReached(KMaxTUint32);
+			}
+		else 
+			{
+			if(iConnectionThresholdsPtr->iReceivedThreshold && iConnectionVolumesPtr->iReceivedBytes >= iConnectionThresholdsPtr->iReceivedThreshold)
+				{
+				iConnectionThresholdsPtr->iReceivedThreshold = 0;
+				iIntf->Flow().PostConnDataReceivedThresholdReached(iConnectionVolumesPtr->iReceivedBytes);
+				}
+			}
+			
+		/******************************
+		 * NOTE: shared memory write
+		 ******************************/
+		iSubConnectionVolumesPtr->iReceivedBytes += aBytes;
+		
+		if(iSubConnectionVolumesPtr->iReceivedBytes < aBytes)
+			{
+			iIntf->Flow().PostSubConnDataReceivedThresholdReached(KMaxTUint32);
+			}
+		else
+			{
+			if(iSubConnectionThresholdsPtr->iReceivedThreshold && iSubConnectionVolumesPtr->iReceivedBytes >= iSubConnectionThresholdsPtr->iReceivedThreshold)
+				{
+				iSubConnectionThresholdsPtr->iReceivedThreshold = 0;
+				iIntf->Flow().PostSubConnDataReceivedThresholdReached(iSubConnectionVolumesPtr->iReceivedBytes);
+				}				
+			}			
+		break;
+		
+	case EOutgoing:
+		/******************************
+		 * NOTE: shared memory write
+		 ******************************/
+		iConnectionVolumesPtr->iSentBytes += aBytes;
+		
+		if(iConnectionVolumesPtr->iSentBytes < aBytes)
+			{
+			iIntf->Flow().PostConnDataSentThresholdReached(KMaxTUint32);
+			}
+		else 
+			{
+			if(iConnectionThresholdsPtr->iSentThreshold && iConnectionVolumesPtr->iSentBytes >= iConnectionThresholdsPtr->iSentThreshold)
+				{
+				iConnectionThresholdsPtr->iSentThreshold = 0;
+				iIntf->Flow().PostConnDataSentThresholdReached(iConnectionVolumesPtr->iSentBytes);
+				}
+			}
+			
+		/******************************
+		 * NOTE: shared memory write
+		 ******************************/
+		iSubConnectionVolumesPtr->iSentBytes += aBytes;
+		
+		if(iSubConnectionVolumesPtr->iSentBytes < aBytes)
+			{
+			iIntf->Flow().PostSubConnDataSentThresholdReached(KMaxTUint32);
+			}
+		else
+			{
+			if(iSubConnectionThresholdsPtr->iSentThreshold && iSubConnectionVolumesPtr->iSentBytes >= iSubConnectionThresholdsPtr->iSentThreshold)
+				{
+				iSubConnectionThresholdsPtr->iSentThreshold = 0;
+				iIntf->Flow().PostSubConnDataSentThresholdReached(iSubConnectionVolumesPtr->iSentBytes);
+				}				
+			}			
+		break;
+		
+	default:
+		break;
+		
+		} // switch(aDirection)
+
+	return KErrNone;
+	}
+
+void CIPShimNotify::SetPacketActivityFlag(volatile TBool* aPacketActivity)
+	{
+	ASSERT(aPacketActivity);
+	iPacketActivity = aPacketActivity;
+	}
+
+void CIPShimNotify::SetDataVolumePtrs(TDataVolumes* aConnectionVolumesPtr, TDataVolumes* aSubConnectionVolumesPtr)
+	{
+	ASSERT(aConnectionVolumesPtr);
+	ASSERT(aSubConnectionVolumesPtr);
+	
+	iConnectionVolumesPtr = aConnectionVolumesPtr;
+	iSubConnectionVolumesPtr = aSubConnectionVolumesPtr;
+	}
+	
+void CIPShimNotify::SetNotificationThresholdPtrs(TNotificationThresholds* aConnectionThresholdsPtr, TNotificationThresholds* aSubConnectionThresholdsPtr)
+	{
+	ASSERT(aConnectionThresholdsPtr);
+	ASSERT(aSubConnectionThresholdsPtr);
+	
+	iConnectionThresholdsPtr = aConnectionThresholdsPtr;
+	iSubConnectionThresholdsPtr = aSubConnectionThresholdsPtr;
+	}
+
+
+//
+// Methods stubbed out to panic
+//
+
+void CIPShimNotify::LinkLayerDown(TInt /*aReason*/, TAction /*aAction*/)
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+void CIPShimNotify::LinkLayerUp()
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+void CIPShimNotify::NegotiationFailed(CNifIfBase* /*aIf*/, TInt /*aReason*/)
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+TInt CIPShimNotify::Authenticate(TDes& /*aUsername*/, TDes& /*aPassword*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+void CIPShimNotify::CancelAuthenticate()
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+TInt CIPShimNotify::GetExcessData(TDes8& /*aBuffer*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+void CIPShimNotify::IfProgress(TInt /*aStage*/, TInt /*aError*/)
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+void CIPShimNotify::IfProgress(TSubConnectionUniqueId /*aSubConnectionUniqueId*/, TInt /*aStage*/, TInt /*aError*/)
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+TInt CIPShimNotify::Notification(TNifToAgentEventType /*aEvent*/, void * /*aInfo*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+void CIPShimNotify::BinderLayerDown(CNifIfBase* /*aBinderIf*/, TInt /*aReason*/, TAction /*aAction*/)
+	{
+	Panic(EBadNotifyCall);
+	}
+		
+void CIPShimNotify::NotifyDataSent(TSubConnectionUniqueId /*aSubConnectionUniqueId*/, TUint /*aUplinkVolume*/)
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+void CIPShimNotify::NotifyDataReceived(TSubConnectionUniqueId /*aSubConnectionUniqueId*/, TUint /*aDownlinkVolume*/)
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+void CIPShimNotify::NifEvent(TNetworkAdaptorEventType /*aEventType*/, TUint /*aEvent*/, const TDesC8& /*aEventData*/, TAny* /*aSource*/)
+	{
+	Panic(EBadNotifyCall);
+	}
+	
+TInt CIPShimNotify::DoReadInt(const TDesC& /*aField*/, TUint32& /*aValue*/, const RMessagePtr2* /*aMessage*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+TInt CIPShimNotify::DoWriteInt(const TDesC& /*aField*/, TUint32 /*aValue*/, const RMessagePtr2* /*aMessage*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+TInt CIPShimNotify::DoReadDes(const TDesC& /*aField*/, TDes8& /*aValue*/, const RMessagePtr2* /*aMessage*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+TInt CIPShimNotify::DoReadDes(const TDesC& /*aField*/, TDes16& /*aValue*/, const RMessagePtr2* /*aMessage*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+TInt CIPShimNotify::DoWriteDes(const TDesC& /*aField*/, const TDesC8& /*aValue*/, const RMessagePtr2* /*aMessage*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+TInt CIPShimNotify::DoWriteDes(const TDesC& /*aField*/, const TDesC16& /*aValue*/, const RMessagePtr2* /*aMessage*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+TInt CIPShimNotify::DoReadBool(const TDesC& /*aField*/, TBool& /*aValue*/, const RMessagePtr2* /*aMessage*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+	
+TInt CIPShimNotify::DoWriteBool(const TDesC& /*aField*/, TBool /*aValue*/, const RMessagePtr2* /*aMessage*/)
+	{
+	Panic(EBadNotifyCall);
+	return KErrNotSupported;
+	}
+