--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/gprsumtsqosinterface/src/UmtsNifControlIf.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,529 @@
+// 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:
+//
+
+#include "UmtsNifControlIf.h"
+
+GLDEF_C TInt E32Dll()
+ {
+ return(KErrNone);
+ }
+
+//
+// Fills the strcuture with invalid default values at creation
+//
+//lint -e{1927} would want to use inilializer list
+EXPORT_C TContextParameters::TContextParameters()
+ {
+ iContextType = EContextTypeUnknown; // Default value to indicate invalid
+ iContextInfo.iContextId = (TInt8)-1;// Default value to indicate invalid
+ iContextInfo.iStatus = RPacketContext::EStatusUnknown;
+ iContextConfig.Reset();
+ iTFTOperationCode = 0; // Default value to indicate invalid
+ iReasonCode = KErrGeneral;
+ }
+
+
+// Class to handle one Traffic Flow Template
+// Includes 1 - 8 Filters
+//lint -e{1927} would want to use inilializer list
+EXPORT_C TTFTInfo::TTFTInfo()
+ {
+ iFilterCount = 0;
+ iLastReturnedFilter = 0;
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+ iIMCNSubsystemflag = 0;
+#endif
+
+ for(TUint counter = 0; counter < KMaxNumberOfPacketFilters; counter++)
+ {
+ iFilterSlots[counter] = EFalse; // All free
+ }
+ iSblpParams = NULL;
+ }
+
+EXPORT_C TInt TTFTInfo::Set(const TTFTInfo& aInfo)
+ {
+ TUint counter;
+ iFilterCount = aInfo.iFilterCount;
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+ iIMCNSubsystemflag = aInfo.iIMCNSubsystemflag;
+#endif
+
+ // Loop© the new set of filters
+ for(counter = 0; counter < KMaxNumberOfPacketFilters; counter++)
+ {
+ iFilterSlots[counter] = aInfo.iFilterSlots[counter];
+ iPacketFilters[counter] = aInfo.iPacketFilters[counter];
+ }
+
+ // Added for Sblp Implementation. Set the SBlP Parameters also
+ if ( NULL == iSblpParams )
+ {
+ TRAPD(err, iSblpParams = RPacketContext::CTFTMediaAuthorizationV3::NewL());
+ if(err != KErrNone)
+ {
+ return err;
+ }
+ }
+ // Get The Params
+ aInfo.GetSblpToken(*iSblpParams);
+
+ return KErrNone;
+ }
+
+
+EXPORT_C TTFTInfo::~TTFTInfo()
+ {
+ // Additional Checking to prevent any accidental memory Leaks
+ delete iSblpParams;
+ }
+
+//
+// Adds a packet filter to the TFT. If a filter already exists with given id, it will
+// be replaced
+//
+EXPORT_C TInt TTFTInfo::AddPacketFilter(RPacketContext::TPacketFilterV2 aFilter)
+ {
+ TUint8 counter;
+
+ // Search for existing with same ID to replace
+ for(counter = 0; counter < KMaxNumberOfPacketFilters; counter++)
+ {
+ if( iFilterSlots[counter] &&
+ iPacketFilters[counter].iId == aFilter.iId)
+ {
+ iPacketFilters[counter] = aFilter; // Replace existing
+ return KErrNone;
+ }
+ }
+
+ if(iFilterCount == KMaxNumberOfPacketFilters) // Already full
+ {
+ return KErrGeneral;
+ }
+
+ for(counter = 0; counter < KMaxNumberOfPacketFilters; counter++)
+ if (iFilterSlots[counter] == EFalse)
+ {
+ iFilterSlots[counter] = ETrue; // Reserve filter slot
+ iPacketFilters[counter] = aFilter;
+ iFilterCount++;
+ iLastReturnedFilter = 0; // Resets the iterator
+ return KErrNone;
+ }
+
+ __ASSERT_DEBUG(counter < KMaxNumberOfPacketFilters, User::Panic(_L("No space for filter"), -1));
+
+ return KErrGeneral;
+ }
+//
+// Fetch a filter with given id
+//
+EXPORT_C TInt TTFTInfo::GetPacketFilter(RPacketContext::TPacketFilterV2& aFilter)
+ {
+ TUint8 counter;
+ for(counter = 0; counter < KMaxNumberOfPacketFilters; counter++)
+ {
+ if( iFilterSlots[counter] &&
+ iPacketFilters[counter].iId == aFilter.iId)
+ {
+ aFilter = iPacketFilters[counter];
+ break;
+ }
+
+ }
+
+ if(counter >= KMaxNumberOfPacketFilters)
+ return KErrNotFound;
+ else
+ return KErrNone;
+ }
+
+//
+// Remove a filter with given id
+//
+EXPORT_C TInt TTFTInfo::RemovePacketFilter(RPacketContext::TPacketFilterV2 aFilter)
+ {
+ TUint8 counter;
+ for(counter = 0; counter < KMaxNumberOfPacketFilters; counter++)
+ {
+ if( iFilterSlots[counter] &&
+ iPacketFilters[counter].iId == aFilter.iId)
+ {
+ iFilterSlots[counter] = EFalse;
+ break;
+ }
+ }
+
+ if(counter >= KMaxNumberOfPacketFilters)
+ return KErrNotFound;
+ else
+ {
+ iFilterCount--;
+ iLastReturnedFilter = 0; // Resets the iterator
+
+ return KErrNone;
+ }
+
+ }
+//
+// Iterate the next filter in TFT
+//
+EXPORT_C TInt TTFTInfo::NextPacketFilter(RPacketContext::TPacketFilterV2& aFilter)
+ {
+ if(iLastReturnedFilter >= KMaxNumberOfPacketFilters) // Iterator finished
+ return KErrNotFound;
+
+ TUint8 counter;
+ for(counter = iLastReturnedFilter; counter < KMaxNumberOfPacketFilters; counter++)
+ {
+ if(iFilterSlots[counter])
+ {
+ iLastReturnedFilter = counter;
+ aFilter = iPacketFilters[counter];
+ iLastReturnedFilter++;
+ break;
+ }
+ }
+ if(counter == KMaxNumberOfPacketFilters)
+ return KErrNotFound;
+ else
+ return KErrNone;
+ }
+
+//
+// Reset the iterator
+//
+EXPORT_C void TTFTInfo::SetToFirst()
+ {
+ iLastReturnedFilter = 0;
+ }
+
+//
+// Reset the iterator
+//
+EXPORT_C TUint8 TTFTInfo::FilterCount()
+ {
+ return iFilterCount;
+ }
+
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+EXPORT_C TInt TTFTInfo::SetIMCNSubsystemflag(TBool aIMCNSubsystemflag)
+ {
+ iIMCNSubsystemflag = aIMCNSubsystemflag;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TTFTInfo::GetIMCNSubsystemflag(TBool &aIMCNSubsystemflag) const
+ {
+ aIMCNSubsystemflag = iIMCNSubsystemflag;
+ return KErrNone;
+ }
+#endif
+
+
+EXPORT_C TTFTInfo& TTFTInfo::operator=(const TTFTInfo& aTFTInfo)
+ {
+ // Assigning to self is NOP.
+ if (this == &aTFTInfo)
+ return *this;
+
+ iFilterCount = aTFTInfo.iFilterCount;
+ iLastReturnedFilter = aTFTInfo.iLastReturnedFilter;
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+ iIMCNSubsystemflag = aTFTInfo.iIMCNSubsystemflag;
+#endif
+
+ // not using something like Mem::Copy since RPacketContext::TPacketFilterV2 might change in the future
+ for (TUint i = 0; i < KMaxNumberOfPacketFilters; ++i)
+ {
+ iPacketFilters[i] = aTFTInfo.iPacketFilters[i];
+ iFilterSlots[i] = aTFTInfo.iFilterSlots[i];
+ }
+
+ if (aTFTInfo.iSblpParams)
+ {
+ AddSblpToken(aTFTInfo.iSblpParams->iAuthorizationToken,aTFTInfo.iSblpParams->iFlowIds);
+ }
+
+ return *this;
+ }
+
+//coverity[pass_by_value]
+EXPORT_C TInt TTFTInfo::AddSblpToken(RPacketContext::TAuthorizationToken aAuthorizationToken,
+ RArray<RPacketContext::CTFTMediaAuthorizationV3::TFlowIdentifier> aFlowIds)
+ {
+ // Check whether memory is allocated to the Member or not
+ if ( NULL == iSblpParams )
+ {
+ TRAPD(err, iSblpParams = RPacketContext::CTFTMediaAuthorizationV3::NewL());
+ if(err != KErrNone)
+ {
+ return err;
+ }
+ }
+
+ iSblpParams->iAuthorizationToken.Copy(aAuthorizationToken);
+
+ iSblpParams->iFlowIds.Reset();
+ TInt i;
+ for(i=0; i<aFlowIds.Count();i++)
+ {
+ iSblpParams->iFlowIds.Append(aFlowIds[i]);
+ }
+
+ return KErrNone;
+ }
+
+// Getter Function
+EXPORT_C TInt TTFTInfo::GetSblpToken ( RPacketContext::CTFTMediaAuthorizationV3 & aSblpParams ) const
+ {
+ // Check whether memory is allocated to the Member or not
+ if ( NULL == iSblpParams )
+ {
+ return KErrNotFound;
+ }
+
+ // Copy using the Internalize mechanism of CTFTMediaAuthorisationV3
+ HBufC8 * externalizeData = NULL;
+ // First Externalize
+ TRAPD(err,iSblpParams->ExternalizeL(externalizeData));
+ if(err != KErrNone)
+ {
+ return err;
+ }
+ TPtr8 internalizePtr = externalizeData->Des();
+ TRAPD(err1,aSblpParams.InternalizeL(internalizePtr));
+ if(err1 != KErrNone)
+ {
+ return err1;
+ }
+ // Cleanup Memory
+ delete externalizeData;
+
+ return KErrNone;
+ }
+
+// removal Function
+EXPORT_C TInt TTFTInfo::RemovSblpToken ()
+ {
+ // delete Sblp Params
+ if (iSblpParams != NULL)
+ {
+ delete iSblpParams;
+ iSblpParams = NULL;
+ }
+ return KErrNone;
+ }
+
+
+EXPORT_C TContextConfig::TContextConfig()
+ {
+ // Current default values for data come from Etel class constructors.
+ // If they need other default values, they should be initialized here.
+ // RPacketContext::TContextConfigGPRS
+ // RPacketQoS::TQoSR99_R4Requested
+ // RPacketQoS::TQoSR99_R4Negotiated
+ // RPacketQos::TQoSR5Requested
+ // RPacketQos::TQoSR5Negotiated
+ }
+
+EXPORT_C TContextConfig::~TContextConfig()
+ {
+ }
+
+EXPORT_C void TContextConfig::Reset()
+ {
+ TContextConfig temp;
+ Set(temp);
+ }
+
+EXPORT_C TInt TContextConfig::Set(const TContextConfig& aConfig)
+ {
+ aConfig.GetUMTSQoSNeg(iUMTSQoS);
+ aConfig.GetUMTSQoSReq(iUMTSQoSReq);
+ aConfig.GetTFTInfo(iTFTInfo);
+
+ iContextConfig = aConfig.iContextConfig;
+ iContextConfig.iPdpType = aConfig.iContextConfig.iPdpType;
+ iContextConfig.iAccessPointName = aConfig.iContextConfig.iAccessPointName;
+ iContextConfig.iPdpAddress = aConfig.iContextConfig.iPdpAddress;
+ iContextConfig.iPdpCompression = aConfig.iContextConfig.iPdpCompression;
+
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetPdpType(RPacketContext::TProtocolType aPdpType)
+ {
+ iContextConfig.iPdpType = aPdpType;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetAccessPointName(const RPacketContext::TGSNAddress& aAccessPointName)
+ {
+ iContextConfig.iAccessPointName = aAccessPointName;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetPdpAddress(const RPacketContext::TProtocolAddress& aPdpAddress)
+ {
+ iContextConfig.iPdpAddress = aPdpAddress;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetPdpCompression(TUint aPdpCompression)
+ {
+ iContextConfig.iPdpCompression = aPdpCompression;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetTFTInfo(const TTFTInfo& aTFTInfo)
+ {
+ iTFTInfo.Set(aTFTInfo);
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetPdpType(RPacketContext::TProtocolType& aPdpType) const
+ {
+ aPdpType = iContextConfig.iPdpType;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetAccessPointName(RPacketContext::TGSNAddress& aAccessPointName) const
+ {
+ aAccessPointName = iContextConfig.iAccessPointName;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetPdpAddress(RPacketContext::TProtocolAddress& aPdpAddress) const
+ {
+ aPdpAddress = iContextConfig.iPdpAddress;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetPdpCompression(TUint& aPdpCompression) const
+ {
+ aPdpCompression = iContextConfig.iPdpCompression;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetTFTInfo(TTFTInfo& aTFTInfo) const
+ {
+ aTFTInfo.Set(iTFTInfo);
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetUMTSQoSReq(const RPacketQoS::TQoSR99_R4Requested& aUMTSQoSRequest)
+ {
+ iUMTSQoSReq.iReqTrafficClass = aUMTSQoSRequest.iReqTrafficClass;
+ iUMTSQoSReq.iMinTrafficClass = aUMTSQoSRequest.iMinTrafficClass;
+ iUMTSQoSReq.iReqDeliveryOrderReqd = aUMTSQoSRequest.iReqDeliveryOrderReqd;
+ iUMTSQoSReq.iMinDeliveryOrderReqd = aUMTSQoSRequest.iMinDeliveryOrderReqd;
+ iUMTSQoSReq.iReqDeliverErroneousSDU = aUMTSQoSRequest.iReqDeliverErroneousSDU;
+ iUMTSQoSReq.iMinDeliverErroneousSDU = aUMTSQoSRequest.iMinDeliverErroneousSDU;
+ iUMTSQoSReq.iReqMaxSDUSize = aUMTSQoSRequest.iReqMaxSDUSize;
+ iUMTSQoSReq.iMinAcceptableMaxSDUSize = aUMTSQoSRequest.iMinAcceptableMaxSDUSize;
+ iUMTSQoSReq.iReqMaxRate = aUMTSQoSRequest.iReqMaxRate;
+ iUMTSQoSReq.iMinAcceptableMaxRate = aUMTSQoSRequest.iMinAcceptableMaxRate;
+ iUMTSQoSReq.iReqBER = aUMTSQoSRequest.iReqBER;
+ iUMTSQoSReq.iMaxBER = aUMTSQoSRequest.iMaxBER;
+ iUMTSQoSReq.iReqSDUErrorRatio = aUMTSQoSRequest.iReqSDUErrorRatio;
+ iUMTSQoSReq.iMaxSDUErrorRatio = aUMTSQoSRequest.iMaxSDUErrorRatio;
+ iUMTSQoSReq.iReqTrafficHandlingPriority = aUMTSQoSRequest.iReqTrafficHandlingPriority;
+ iUMTSQoSReq.iMinTrafficHandlingPriority = aUMTSQoSRequest.iMinTrafficHandlingPriority;
+ iUMTSQoSReq.iReqTransferDelay = aUMTSQoSRequest.iReqTransferDelay;
+ iUMTSQoSReq.iMaxTransferDelay = aUMTSQoSRequest.iMaxTransferDelay;
+ iUMTSQoSReq.iReqGuaranteedRate = aUMTSQoSRequest.iReqGuaranteedRate;
+ iUMTSQoSReq.iMinGuaranteedRate = aUMTSQoSRequest.iMinGuaranteedRate;
+
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+ iUMTSQoSReq.iSignallingIndication = 0;
+ iUMTSQoSReq.iSourceStatisticsDescriptor = RPacketQoS::ESourceStatisticsDescriptorUnknown;
+#endif
+
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetUMTSQoSReq(RPacketQoS::TQoSR99_R4Requested& aUMTSQoSRequest) const
+ {
+ aUMTSQoSRequest = iUMTSQoSReq;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetUMTSQoSNeg(const RPacketQoS::TQoSR99_R4Negotiated& aUMTSQoS)
+ {
+ iUMTSQoS.iTrafficClass = aUMTSQoS.iTrafficClass;
+ iUMTSQoS.iDeliveryOrderReqd = aUMTSQoS.iDeliveryOrderReqd;
+ iUMTSQoS.iDeliverErroneousSDU = aUMTSQoS.iDeliverErroneousSDU;
+ iUMTSQoS.iMaxSDUSize = aUMTSQoS.iMaxSDUSize;
+ iUMTSQoS.iMaxRate = aUMTSQoS.iMaxRate;
+ iUMTSQoS.iBER = aUMTSQoS.iBER;
+ iUMTSQoS.iSDUErrorRatio = aUMTSQoS.iSDUErrorRatio;
+ iUMTSQoS.iTrafficHandlingPriority = aUMTSQoS.iTrafficHandlingPriority;
+ iUMTSQoS.iTransferDelay = aUMTSQoS.iTransferDelay;
+ iUMTSQoS.iGuaranteedRate = aUMTSQoS.iGuaranteedRate;
+
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+ iUMTSQoS.iSignallingIndication = 0;
+ iUMTSQoS.iSourceStatisticsDescriptor = RPacketQoS::ESourceStatisticsDescriptorUnknown;
+#endif
+
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetUMTSQoSNeg(RPacketQoS::TQoSR99_R4Negotiated& aUMTSQoS) const
+ {
+ aUMTSQoS = iUMTSQoS;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetContextConfig(const RPacketContext::TContextConfigGPRS& aContextConfig)
+ {
+ iContextConfig = aContextConfig;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetContextConfig(RPacketContext::TContextConfigGPRS& aContextConfig) const
+ {
+ aContextConfig = iContextConfig;
+ return KErrNone;
+ }
+
+#ifdef SYMBIAN_NETWORKING_UMTSR5
+EXPORT_C TInt TContextConfig::SetUMTSQoSNeg(const RPacketQoS::TQoSR5Negotiated& aR5QoSNeg)
+ {
+ iUMTSQoS = aR5QoSNeg;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetUMTSQoSNeg(RPacketQoS::TQoSR5Negotiated& aR5QoSNeg) const
+ {
+ aR5QoSNeg = iUMTSQoS;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::SetUMTSQoSReq(const RPacketQoS::TQoSR5Requested& aR5QoSReq)
+ {
+ iUMTSQoSReq = aR5QoSReq;
+ return KErrNone;
+ }
+
+EXPORT_C TInt TContextConfig::GetUMTSQoSReq(RPacketQoS::TQoSR5Requested& aR5QoSReq) const
+ {
+ aR5QoSReq = iUMTSQoSReq;
+ return KErrNone;
+ }
+#endif
+