--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/simtsy/inc/CSimPacketQoS.h Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,274 @@
+// Copyright (c) 2002-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:
+// This file contains the definitions of the Simulator TSY Packet Quality of Service class.
+//
+//
+
+/**
+ @file
+ @internalAll
+*/
+
+#ifndef __CSIMPACKETQOS_H__
+#define __CSIMPACKETQOS_H__
+
+#include <et_phone.h>
+#include <etelqos.h>
+#include "utils.h"
+#include "csimtimer.h"
+#include "CSimPubSubChange.h"
+
+struct TProfileConfig //< Used for holding the GPRS Requested and Minimum Profile parameters
+ { //< read from the configuration file.
+ TUint8 iMinPrecedence;
+ TUint8 iReqPrecedence;
+ TUint8 iMinDelay;
+ TUint8 iReqDelay;
+ TUint8 iMinReliability;
+ TUint8 iReqReliability;
+ TUint8 iMinPeekThroughput;
+ TUint8 iReqPeekThroughput;
+ TUint8 iMinMeanThroughput;
+ TUint8 iReqMeanThroughput;
+ };
+
+struct TNegProfileConfig //< Used for holding the GPRS Negotiated Profile Parameters
+ { //< read from the configuration file.
+ TUint8 iNegPrecedence;
+ TUint8 iNegDelay;
+ TUint8 iNegReliability;
+ TUint8 iNegPeekThroughput;
+ TUint8 iNegMeanThroughput;
+ };
+
+struct TProfileCapsGPRS //< Used for holding the GPRS Capability Profile Parameters
+ {
+ TUint8 iPrecedence;
+ TUint8 iDelay;
+ TUint8 iReliability;
+ TUint8 iPeak;
+ TUint8 iMean;
+ };
+
+
+struct TProfileReqR99 //< Used for holding the Rel99 Release Profile parameters
+ {
+ TName iContextName;
+ TUint8 iReqTraffic;
+ TUint8 iMinTraffic;
+ TUint8 iReqDeliveryOrder;
+ TUint8 iMinDeliveryOrder;
+ TUint8 iReqErroneousSDU;
+ TUint8 iMinErroneousSDU;
+ TInt iMaxSDUSize;
+ TInt iMinSDUSize;
+ TInt iReqUpLinkTBitRate;
+ TInt iReqDownLinkTBitRate;
+ TInt iMinUpLinkTBitRate;
+ TInt iMinDownLinkTBitRate;
+ TUint8 iReqTBitErrorRatio;
+ TUint8 iMinTBitErrorRatio;
+ TUint8 iReqTSDUErrorRatio;
+ TUint8 iMinTSDUErrorRatio;
+ TUint8 iReqTTrafficHandlingPriority;
+ TUint8 iMinTTrafficHandlingPriority;
+ TInt iReqTransferDelay;
+ TInt iMinTransferDelay;
+ TInt iReqGuaranteedUpLinkTBitRate;
+ TInt iReqGuaranteedDownLinkTBitRate;
+ TInt iMinGuaranteedUpLinkTBitRate;
+ TInt iMinGuaranteedDownLinkTBitRate;
+ };
+
+struct TProfileNegR99 //< Used for holding the Neg99 Negotiated Profile parameters
+ {
+ TName iContextName;
+ TUint8 iDuration;
+ TUint8 iNegTraffic;
+ TUint8 iNegDeliveryOrder;
+ TUint8 iNegErroneousSDUDelivery;
+ TInt iNegMaxSDUSize;
+ TUint8 iNegTBitErrorRatio;
+ TUint8 iNegTSDUErrorRatio;
+ TUint8 iNegTrafficHandlingPriority;
+ TInt iNegTransferDelay;
+ TInt iNegGuaranteedUpLinkBitRate;
+ TInt iNegGuaranteedDownLinkBitRate;
+ TInt iNegMaxUpLinkRate;
+ TInt iNegMaxDownLinkRate;
+ };
+
+struct TProfileCapsR99 //< Used for holding the Rel99 Capability Profile parameters
+ {
+ TUint8 iTraffic;
+ TUint8 iDeliveryOrderReq;
+ TUint8 iDeliverErroneousSDU;
+ TUint8 iBER;
+ TUint8 iSDUErrorRatio;
+ TUint8 iTrafficHandlingPriority;
+ };
+
+struct TProfileCapsR5 : TProfileCapsR99 //< Used for holding the Rel5 Capability Profile parameters
+ {
+ TBool iSignallingIndication;
+ TUint8 iNegTSourceStatisticsDescriptor;
+ };
+
+struct TSetProfileFail // struct to SetProfile() call to fail
+ {
+ TInt iNumberOfTimes;
+ TInt iFailErrorCode;
+ };
+
+struct TProfileReqR5 : TProfileReqR99 //< Used for holding the Rel5 Release Profile parameters
+ {
+ TBool iSignallingIndication;
+ TUint8 iReqTSourceStatisticsDescriptor;
+ };
+
+struct TProfileNegR5 : TProfileNegR99 //< Used for holding the Neg5 Negotiated Profile parameters
+ {
+ TBool iSignallingIndication;
+ TUint8 iNegTSourceStatisticsDescriptor;
+ };
+
+
+class CSimPacketContext;
+class CSimPacketQoS : public CSubSessionExtBase, public MTimerCallBack, public MPubSubChangeCallback
+ {
+public:
+ static CSimPacketQoS* NewL(CSimPhone* aPhone, CSimPacketContext* aPacketContext);
+ CSimPacketQoS(CSimPhone* aPhone, CSimPacketContext* aPacketContext);
+ void ConstructL();
+ ~CSimPacketQoS();
+public:
+ virtual TInt ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,const TDataPackage& aPackage);
+ virtual TReqMode ReqModeL(const TInt aIpc);
+ virtual CTelObject* OpenNewObjectByNameL(const TDesC& aName);
+ virtual CTelObject* OpenNewObjectL(TDes& aNewName);
+ virtual TInt CancelService(const TInt aIpc, const TTsyReqHandle aTsyReqHandle);
+ virtual void Init();
+ virtual TInt RegisterNotification(const TInt aIpc);
+ virtual TInt DeregisterNotification(const TInt aIpc);
+ virtual TInt NumberOfSlotsL(const TInt aIpc);
+
+ TInt PerformProfileChange();
+ void ClearChangeQoSPending();
+
+private:
+ TInt SetProfile(const TTsyReqHandle aTsyReqHandle,const TDesC8* aConfig);
+ TInt SetProfileCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt GetProfile(const TTsyReqHandle aTsyReqHandle,TDes8* aConfig);
+ TInt GetProfileCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt GetProfileCaps(const TTsyReqHandle aTsyReqHandle, TDes8* aConfig);
+ TInt GetProfileCapsCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt NotifyProfileChanged(const TTsyReqHandle aTsyReqHandle, TDes8* aConfig);
+ TInt NotifyProfileChangedCancel(const TTsyReqHandle aTsyReqHandle);
+
+ TInt MatchContext(TProfileNegR99& R99NegProfile);
+ TInt MatchContext(TProfileReqR99& R99ReqProfile);
+
+ TInt MatchContext(TProfileNegR5& R5NegProfile);
+ TInt MatchContext(TProfileReqR5& R5ReqProfile);
+
+ void CompleteNotifications(TProfileNegR99& aProfile);
+ void CompleteNotifications(TProfileNegR5& aProfile);
+
+ void PubSubCallback(TInt aRegStat);
+
+ // methods to retrieve config file settings
+ void GetGPRSReqProfilesL();
+ void GetGPRSNegProfilesL();
+ void GetR99ReqProfilesL();
+ void GetR99NegProfilesL();
+ void GetR99NetworkNotificationsL();
+ void GetGPRSQosProfileCaps();
+ void GetR99QosProfileCaps();
+ void GetProfileFailSettings();
+ void GetR5ReqProfilesL();
+ void GetR5NegProfilesL();
+ void GetR5NetworkNotificationsL();
+ void GetR5QosProfileCaps();
+ void GetSetQoSSettings();
+
+
+private: //Data
+ CSimPhone* iPhone;
+ CSimPacketContext* iPacketContext; //< pointer to the parent class CSimPacketContext
+ CArrayFixFlat<TProfileConfig>* iProfiles; //< Holds a list of requested GPRS profiles read from the config file
+ CArrayFixFlat<TNegProfileConfig>* iNegProfiles; //< Holds a list of Negotiated GPRS profiles read from the config file
+
+ CArrayFixFlat<TProfileReqR99>* iReqR99Profiles;
+ CArrayFixFlat<TProfileNegR99>* iNegR99Profiles;
+ CArrayFixFlat<TProfileCapsR99>* iCapsR99Profiles;
+
+ CArrayFixFlat<TProfileReqR5>* iReqR5Profiles;
+ CArrayFixFlat<TProfileNegR5>* iNegR5Profiles;
+
+ TNotificationType iNetworkNotificationType;
+ CArrayFixFlat<TProfileNegR99>* iQosNetworkNotifications;
+ CArrayFixFlat<TProfileNegR5>* iQosR5NetworkNotifications;
+
+ TInt iCurrentNeg; //< index for the iNegProfiles. indicates the next profile to use.
+ TInt iCurrentNeg99;
+ TInt iCurrentNegR5;
+ TBool iSetProfilePending;
+
+ TInt iCurrentProfileRel; //< Release format used to set this QoS (only used for R99_R4 and R5 formats)
+
+ TNotifyData iNotifyProfileGPRS; //< Holds the notification data (a flag, TsyReqHandle and any raw data)
+ TNotifyData iNotifyProfileR99; //< Holds the notification data (a flag, TsyReqHandle and any raw data)
+ TNotifyData iNotifyProfileR5; //< Holds the notification data (a flag, TsyReqHandle and any raw data)
+ TProfileCapsGPRS iCapsGPRS; //< holds the GPRS Profile capabilities parameters
+
+ TProfileReqR99 iReq99;
+ TProfileNegR99 iNegR99;
+ TProfileCapsR99 iCapsR99;
+ TProfileCapsR5 iCapsR5;
+
+ TProfileNegR99 iQosNetworkNotification;
+ TSetProfileFail iSetProfileFail;
+ /******/
+
+ TInt iSetProfileCallCount;
+ TInt iQosNetworkNotificationCount;
+ TInt iQosR5NetworkNotificationCount;
+ TBool iUseNetworkNotificationBool;
+ virtual void TimerCallBack(TInt aId);
+
+ CSimTimer* iTimer; //< pointer to the timer object
+ CSimTimer* iSetQoSTimer; //< pointer to the timer object used for set qos delay
+
+ TBool iTimerStartedBool;
+
+ CSimPubSubChange* iSimQoSChange;
+
+ TInt iSetQoSDelay; //< Used to hold the delay before setting qos
+ TInt iSetQoSDelayAt; //< Which set qos operation should the delay be introduced
+
+ class TSetQoSData //< Class used to construct an array of qos data
+ {
+ public:
+ static TInt Find(CArrayFixFlat<TSetQoSData>* aSetQoSArray, TTsyReqHandle aTsyReqHandle, TInt& aIndex);
+ TTsyReqHandle iTsyReqHandle;
+ TDesC8* iData;
+ };
+ CArrayFixFlat<TSetQoSData> *iSetQoSData; //< array used to store qos data prior to set qos delay
+
+ };
+
+#endif