--- /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;
+ }
+