datacommsserver/esockserver/inc/ss_DataMonitoringProvider.h
changeset 0 dfb7c4ff071f
child 14 4ccf8e394726
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_DataMonitoringProvider.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,285 @@
+/**
+* Copyright (c) 2006-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:
+* DataMonitoringProvider.h
+* 
+*
+*/
+
+
+
+/**
+ @file
+ @internalComponent 
+*/
+
+#if !defined(DATAMONITORINGPROVIDER_H_INCLUDED)
+#define DATAMONITORINGPROVIDER_H_INCLUDED
+
+#include <e32const.h>
+#include <comms-infras/ss_datamon_apiext.h>
+#include <comms-infras/ss_nodemessages.h>
+
+namespace ESock
+{
+
+class TCFDataMonitoringNotification
+	{
+private:
+	enum
+	{
+    ECFDataMonitoringNotification   = 1
+	};
+public:
+    enum { ERealmId = 0x10285A78 }; //UID allocated on 21/11/2007
+    /*==========================================================================
+    [Name]:      TDataMonitoringNotification
+    [Semantics]: [399TODO] RZ: Simon please finish.
+
+    [Type]:
+    [Fallible]:
+
+    [Structure]:
+    ===========================================================================*/
+	typedef Messages::TMessageSigNumberNumber<ECFDataMonitoringNotification, TCFDataMonitoringNotification::ERealmId> TDataMonitoringNotification;
+	};
+
+
+/*
+	Enumerations for typeids
+*/
+enum 
+    {
+    EDataMonitoringProvisioningInfoBase,
+    EDataMonitoringConnProvisioningInfo,
+    EDataMonitoringSubConnProvisioningInfo
+    };
+    
+/**
+	@internalTechnology
+*/
+enum TDataMonitoringDirection
+	{
+	EReceived,
+	ESent
+	};
+
+/**
+	@internalTechnology
+*/
+struct TDataVolumes
+	{
+	volatile TUint32 iReceivedBytes;
+	volatile TUint32 iSentBytes;
+	};
+	
+/**
+	@internalTechnology
+*/
+struct TNotificationThresholds
+	{
+	volatile TUint32 iReceivedThreshold;
+	volatile TUint32 iSentThreshold;
+	};
+
+
+const TUint32 KDataMonitoringProvisioningUid = 0x10281E0D;
+
+/**
+	Base class for flow provisioning data
+
+	@internalTechnology
+*/
+class TDataMonitoringProvisioningInfoBase : public Meta::SMetaData
+	{
+public:
+    enum 
+        { 
+        iId = EDataMonitoringProvisioningInfoBase,
+        iUid = KDataMonitoringProvisioningUid
+        };
+
+protected:
+	TDataMonitoringProvisioningInfoBase(TDataVolumes* aDataVolumesPtr, TNotificationThresholds* aThresholdsPtr) :
+		iDataVolumesPtr(aDataVolumesPtr), iThresholdsPtr(aThresholdsPtr)
+		{
+		}
+
+private:
+	TDataMonitoringProvisioningInfoBase();
+	
+public:        
+	TDataVolumes* iDataVolumesPtr;
+	TNotificationThresholds* iThresholdsPtr;
+
+	EXPORT_DATA_VTABLE_AND_FN
+	};
+
+/**
+	@internalTechnology
+*/
+class TDataMonitoringConnProvisioningInfo : public TDataMonitoringProvisioningInfoBase
+	{
+public:
+    enum 
+        { 
+        iId = EDataMonitoringConnProvisioningInfo
+        };
+        
+	IMPORT_C TDataMonitoringConnProvisioningInfo(TDataVolumes* aDataVolumesPtr, TNotificationThresholds* aThresholdsPtr);
+		
+	EXPORT_DATA_VTABLE_AND_FN
+		
+private:
+	TDataMonitoringConnProvisioningInfo();
+	};
+
+/**
+	@internalTechnology
+*/
+class TDataMonitoringSubConnProvisioningInfo : public TDataMonitoringProvisioningInfoBase
+	{
+public:
+    enum 
+        { 
+        iId = EDataMonitoringSubConnProvisioningInfo
+        };
+
+	IMPORT_C TDataMonitoringSubConnProvisioningInfo(TDataVolumes* aDataVolumesPtr, TNotificationThresholds* aThresholdsPtr);
+
+	EXPORT_DATA_VTABLE_AND_FN
+
+private:
+	TDataMonitoringSubConnProvisioningInfo();		
+	};
+
+/**
+	@internalTechnology
+*/
+class TNotificationRequest
+	{
+public:
+	TNotificationRequest(CDataMonitoringResponder* aResponder, TSubSessionUniqueId aClientId) 
+		: iThreshold(0), iResponder(aResponder), iClientId(aClientId), iCancelled(EFalse), iWrapped(EFalse)
+		{		
+		}
+	
+	TUint32 Threshold() const
+		{
+		return iThreshold;
+		}
+		
+	void SetThreshold(TUint32 aThreshold)
+		{
+		iThreshold = aThreshold;
+		}
+		
+	void SetThresholdFromDelta(TUint32 aVolume, TUint32 aDelta);		
+	
+
+	CDataMonitoringResponder*& Responder()
+		{
+		return iResponder;
+		}
+		
+	TSubSessionUniqueId ClientId() const
+		{
+		return iClientId;
+		}
+	
+	TBool Cancelled() const
+		{
+		return iCancelled;
+		}
+		
+	void SetCancelled()
+		{
+		iCancelled = ETrue;
+		}
+	
+	TBool Wrapped() const
+		{
+		return iWrapped;
+		}
+
+	void SetWrapped(TBool aWrapped)
+		{
+		iWrapped = aWrapped;
+		}
+
+	static TInt CompareThresholds(const TNotificationRequest& aFirst, const TNotificationRequest& aSecond);
+	static TBool CompareClientIds(const TNotificationRequest& aFirst, const TNotificationRequest& aSecond);
+	
+private:
+	TUint32 iThreshold;	
+	CDataMonitoringResponder* iResponder;
+	TSubSessionUniqueId iClientId;
+	TBool iCancelled;
+	TBool iWrapped;
+	};
+	
+typedef RPointerArray<TNotificationRequest> RNotificationRequestArray;
+
+/**
+	@internalTechnology
+*/
+class ADataMonitoringProvider : public ADataMonitoringProtocolReq
+	{
+public:
+	IMPORT_C virtual ~ADataMonitoringProvider();	
+	
+	// MExtensionInterfaceBase virtuals
+	IMPORT_C virtual void CancelClientExtItfRequests(TSubSessionUniqueId aClientId);
+	
+	// ADataMonitoringProtocolReq virtuals
+	IMPORT_C virtual void RequestDataTransferred(CDataMonitoringResponder*& aResponder, TSubSessionUniqueId aClientId);
+	IMPORT_C virtual void CancelDataTransferredRequest(TSubSessionUniqueId aClientId);
+	IMPORT_C virtual void RequestDataReceivedNotification(CDataMonitoringResponder*& aResponder, TUint32 aDelta, TUint32 aReceivedBytes, TSubSessionUniqueId aClientId);
+	IMPORT_C virtual void CancelDataReceivedNotificationRequest(TSubSessionUniqueId aClientId);
+	IMPORT_C virtual void RequestDataSentNotification(CDataMonitoringResponder*& aResponder, TUint32 aDelta, TUint32 aSentBytes, TSubSessionUniqueId aClientId);
+	IMPORT_C virtual void CancelDataSentNotificationRequest(TSubSessionUniqueId aClientId);
+    	
+  	IMPORT_C void DataReceivedNotificationL(TUint32 aNotificationValue);
+  	IMPORT_C void DataSentNotificationL(TUint32 aNotificationValue);
+  	IMPORT_C void DataNotificationL(const TCFDataMonitoringNotification::TDataMonitoringNotification& aNotification);
+
+	TDataVolumes* DataVolumesPtr() { return &iDataVolumes; }
+	TNotificationThresholds* NotificationThresholdsPtr() { return &iThresholds; }
+	
+protected:
+	IMPORT_C ADataMonitoringProvider();
+	IMPORT_C void ConstructL();
+		
+private:
+	RNotificationRequestArray* NotificationRequestArray(TDataMonitoringDirection aDirection);
+	void InsertWrapMarkerL(TDataMonitoringDirection aDirection);	
+	TInt InsertNotificationRequest(TNotificationRequest* aRequest, TDataMonitoringDirection aDirection);
+	void SetNextNotificationThreshold(TDataMonitoringDirection aDirection);
+
+private:	
+	// Notification request arrays
+	RNotificationRequestArray iReceivedNotificationRequests;
+	RNotificationRequestArray iSentNotificationRequests;
+	
+protected:
+	// Shared memory
+	TDataVolumes iDataVolumes;
+	TNotificationThresholds iThresholds;
+	};
+
+} //namespace ESock
+
+#endif
+
+