telephonyprotocols/pdplayer/src/PDPConfig.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 23 6b1d113cdff3
--- a/telephonyprotocols/pdplayer/src/PDPConfig.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyprotocols/pdplayer/src/PDPConfig.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,522 +1,522 @@
-// Copyright (c) 2006-2010 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:
-// PDP Config structures for TProvision message.
-// 
-//
-
-/**
- @file
- @internalComponent
-*/
-
-#include <comms-infras/ss_log.h>
-#include <in_sock.h>
-#include <comms-infras/metadata.h>
-#include <comms-infras/agentmcpr.h>
-#include <comms-infras/ss_log.h>
-#include <comms-infras/ss_tiermanagerutils.h>
-
-#include "PDPProvision.h"
-
-using namespace ESock;
-
-#if defined(__CFLOG_ACTIVE)
-#define KPDPMCprTag KESockMetaConnectionTag
-_LIT8(KPDPMCprSubTag, "pdpmcpr");
-#endif
-
-//
-// Attribute table for provisioning structure passed to CFProtocol
-//
-START_ATTRIBUTE_TABLE(CGPRSProvision, CGPRSProvision::EUid, CGPRSProvision::ETypeId)
-// No attributes defined, as no serialisation takes place.
-END_ATTRIBUTE_TABLE()
-
-START_ATTRIBUTE_TABLE(CTSYProvision, CGPRSProvision::EUid, CTSYProvision::ETypeId)
-// No attributes defined, as no serialisation takes place.
-END_ATTRIBUTE_TABLE()
-
-START_ATTRIBUTE_TABLE(CDefaultPacketQoSProvision, CDefaultPacketQoSProvision::EUid, CDefaultPacketQoSProvision::ETypeId)
-// No attributes defined, as no serialisation takes place.
-END_ATTRIBUTE_TABLE()
-
-START_ATTRIBUTE_TABLE(CImsExtProvision, CImsExtProvision::EUid, CImsExtProvision::ETypeId)
-// No attributes defined, as no serialisation takes place.
-END_ATTRIBUTE_TABLE()
-
-CGPRSProvision* CGPRSProvision::NewLC(ESock::CCommsDatIapView* aIapView)
-	{
-	CGPRSProvision* self = new (ELeave) CGPRSProvision;
-	CleanupStack::PushL(self);
-	self->InitialiseConfigL(aIapView);
-	return self;
-	}
-TInt CGPRSProvision::UmtsGprsRelease() const
-	{
-	return iUmtsGprsRelease;
-	}
-
-void CGPRSProvision::InitialiseConfigL(ESock::CCommsDatIapView* aIapView)
-    {	
-	TInt getErr = aIapView->GetInt(KCDTIdUmtsGprsRelease | KCDTIdOutgoingGprsRecord, iUmtsGprsRelease);
-		
-	if (getErr == KErrNotFound || getErr == KErrUnknown)
-	    {
-	    // default to GPRS
-	    getErr = KErrNone;
-	    iUmtsGprsRelease = TPacketDataConfigBase::KConfigGPRS;
-	    }
-	    
-	TBool useEdge = EFalse;
-	
-	aIapView->GetBoolL(KCDTIdWCDMAUseEdge | KCDTIdOutgoingGprsRecord, useEdge);
-	
-	getErr = InitialiseScratchContext(iUmtsGprsRelease);
-	//-====================================================
-	//LENIENT PROVISION
-	//-====================================================
-	//With some provision parameters (e.g.: pdpAddress), CGPRSProvision 
-	//tries to be lenient as technically they can be supplied by
-	//someone further in the chain (e.g.: GPRS), if not found in the db.
-	switch (iUmtsGprsRelease)
-		{
-    	case TPacketDataConfigBase::KConfigGPRS:
-			{
-            RPacketContext::TContextConfigGPRS& contextGPRS = GetScratchContextAs<RPacketContext::TContextConfigGPRS>();
-            RetrievePdpTypeL(contextGPRS.iPdpType, aIapView);
-            RetrieveApnNameL(contextGPRS.iAccessPointName, aIapView);
-            RetrieveIPAndDnsSettingsL(contextGPRS.iPdpAddress,
-                contextGPRS.iProtocolConfigOption.iDnsAddresses.iPrimaryDns,
-                contextGPRS.iProtocolConfigOption.iDnsAddresses.iSecondaryDns, aIapView);
-            RetrieveAuthenticationInfoL(contextGPRS.iProtocolConfigOption, aIapView);
-            // GPRS specific
-        	RetrieveGprsCompression(contextGPRS.iPdpCompression, aIapView);
-        	RetrieveGprsAnonymousAccess(contextGPRS.iAnonymousAccessReqd, aIapView);
-        	contextGPRS.iUseEdge = useEdge;
-			}
-			break;
-	    case TPacketDataConfigBase::KConfigRel5:
-			{
-            // Rel 5 specific
-            RPacketContext::TContextConfig_R5& contextR5 = GetScratchContextAs<RPacketContext::TContextConfig_R5>();
-            RetrieveUmtsCompressionL(contextR5.iPdpHeaderCompression, contextR5.iPdpDataCompression, aIapView);
-            
-            RetrievePdpTypeL(contextR5.iPdpType, aIapView);
-            RetrieveApnNameL(contextR5.iAccessPointName, aIapView);
-            RetrieveIPAndDnsSettingsL(contextR5.iPdpAddress,
-            		contextR5.iProtocolConfigOption.iDnsAddresses.iPrimaryDns,
-            		contextR5.iProtocolConfigOption.iDnsAddresses.iSecondaryDns, aIapView);
-            RetrieveAuthenticationInfoL(contextR5.iProtocolConfigOption, aIapView);
-            contextR5.iUseEdge = useEdge;
-
-    		RetrieveUmtsPacketFlowIdentifierL(contextR5.iPFI, aIapView);
-			}
-			break;
-	    case TPacketDataConfigBase::KConfigRel99Rel4:
-			{
-            RPacketContext::TContextConfigR99_R4& contextUMTS = GetScratchContextAs<RPacketContext::TContextConfigR99_R4>();
-
-            RetrievePdpTypeL(contextUMTS.iPdpType, aIapView);
-            RetrieveApnNameL(contextUMTS.iAccessPointName, aIapView);
-            RetrieveIPAndDnsSettingsL(contextUMTS.iPdpAddress,
-                contextUMTS.iProtocolConfigOption.iDnsAddresses.iPrimaryDns,
-                contextUMTS.iProtocolConfigOption.iDnsAddresses.iSecondaryDns, aIapView);
-            RetrieveAuthenticationInfoL(contextUMTS.iProtocolConfigOption, aIapView);
-            contextUMTS.iUseEdge = useEdge;
-            RetrieveUmtsPacketFlowIdentifierL(contextUMTS.iPFI, aIapView);
-			}
-			break;
-	    default:
-	    	User::Leave(KErrNotSupported);
-		}
-    }
-
-void CGPRSProvision::RetrieveGprsCompression(TUint& aCompression, ESock::CCommsDatIapView* aIapView) const
-	{
-	aCompression = 0;
-	TBool isCompression = EFalse;
-	aIapView->GetBool(KCDTIdWCDMADataCompression | KCDTIdOutgoingGprsRecord, isCompression);
-	if (isCompression)
-		{
-		aCompression |= RPacketContext::KPdpDataCompression;
-		}
-
-	isCompression = EFalse;
-	aIapView->GetBool(KCDTIdWCDMAHeaderCompression | KCDTIdOutgoingGprsRecord, isCompression);
-	if (isCompression)
-		{
-		aCompression |= RPacketContext::KPdpHeaderCompression;
-		}
-	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::InitialiseConfigL() KCDTIdWCDMADataCompression|KCDTIdWCDMAHeaderCompression [%d]"), this, aCompression));
-	}
-
-void CGPRSProvision::RetrieveGprsAnonymousAccess(RPacketContext::TAnonymousAccess& aAnonymous, ESock::CCommsDatIapView* aIapView) const
-	{	
-	TBool isAnonymous = EFalse;
-	aIapView->GetBool(KCDTIdWCDMAAnonymousAccess | KCDTIdOutgoingGprsRecord,isAnonymous);
-	if (isAnonymous)
-		aAnonymous = RPacketContext::ERequired;
-	else
-		aAnonymous = RPacketContext::ENotRequired;
-	
-	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::InitialiseConfigL() KCDTIdWCDMAAnonymousAccess [%d]"), this, aAnonymous));
-	}
-
-void CGPRSProvision::RetrieveApnNameL(TDes8& aApnName, ESock::CCommsDatIapView* aIapView) const
-	{
-	HBufC* buf = NULL;
-	TInt getErr;
-
-	if ((getErr = aIapView->GetText(KCDTIdAPN | KCDTIdOutgoingGprsRecord, buf)) == KErrNone)
-    		{
-    		aApnName.Copy(*buf);
-    		delete buf;
-    		}
-    	else if (getErr != KErrNotFound )
-    		{
-    		User::Leave(getErr);
-    		}
-	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::InitialiseConfigL() KCDTIdAPN [%S]"), this, &aApnName));
-	}
-
-void CGPRSProvision::RetrievePdpTypeL(RPacketContext::TProtocolType& aPdpType, ESock::CCommsDatIapView* aIapView) const	
-	{
-	TUint32 pdpType(0);
-
-	aIapView->GetIntL(KCDTIdWCDMPDPType | KCDTIdOutgoingGprsRecord, pdpType);
-	aPdpType = static_cast<RPacketContext::TProtocolType>(pdpType);
-	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::InitialiseConfigL() KCDTIdWCDMPDPType=%d"), this, aPdpType)); 	
-	}
-
-void CGPRSProvision::RetrieveAuthenticationInfoL(RPacketContext::TProtocolConfigOptionV2& aProtocolConfigOption, ESock::CCommsDatIapView* aIapView)
-    {
-    HBufC* buf = NULL;
-    TInt getErr;
-
-    __CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::RetrieveAuthenticationInfoL()"), this));
-
-    getErr = aIapView->GetText(KCDTIdWCDMAIfAuthName | KCDTIdOutgoingGprsRecord, buf);
-    if ( getErr == KErrNone )
-        {
-        ASSERT(buf);
-        aProtocolConfigOption.iAuthInfo.iUsername.Copy(*buf);
-        delete buf;
-        buf = NULL;
-        
-        __CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::RetrieveAuthenticationInfoL() KCDTIdWCDMAIfAuthName [%S] "), this, &aProtocolConfigOption.iAuthInfo.iUsername));
-        
-		aProtocolConfigOption.iId = 1;
-        getErr = aIapView->GetText(KCDTIdWCDMAIfAuthPass | KCDTIdOutgoingGprsRecord, buf);
-        if ( getErr == KErrNone )
-            {
-            ASSERT(buf);
-            aProtocolConfigOption.iAuthInfo.iPassword.Copy(*buf);
-            delete buf;
-            buf = NULL;
-            
-            __CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::RetrieveAuthenticationInfoL() KCDTIdWCDMAIfAuthPass [%S]"), this, &aProtocolConfigOption.iAuthInfo.iPassword));
-            }
-        else if (getErr != KErrNotFound)
-            {
-            User::Leave(getErr);
-            }
-        }
-    else if (getErr != KErrNotFound)
-        {
-        User::Leave(getErr);
-        }
-    }
-
-void CGPRSProvision::RetrieveIPAndDnsSettingsL(TDes8& aPdpAddress, TDes8& aDns1, TDes8& aDns2, ESock::CCommsDatIapView* aIapView) const
-	{
-	HBufC* buf = NULL;
-
-	aPdpAddress.SetLength(0);
-	aDns1.SetLength(0);
-	aDns2.SetLength(0);
-	
-	TBool fromServer;
-	aIapView->GetBoolL(KCDTIdWCDMAIPAddrFromServer | KCDTIdOutgoingGprsRecord, fromServer);
-	if (!fromServer)
-	    {
-    	aIapView->GetTextL(KCDTIdWCDMAIPAddr | KCDTIdOutgoingGprsRecord, buf);
-    	TInetAddr addr;
-    	User::LeaveIfError(addr.Input(*buf));
-    	// sending ASCII to MA but checking the validity of the address above.
-    	aPdpAddress.Copy(*buf);
-    	delete buf;
-    	buf = NULL;
-	    }
-	
-    // We can only use IPv4 or IPv6 - we use the first one listed in the IfNetworks field
-	aIapView->GetTextL(KCDTIdWCDMAIfNetworks | KCDTIdOutgoingGprsRecord, buf);
-
-	TInt pos = buf->Find(_L(","));
-	if (pos == KErrNotFound)
-	    {
-	    pos = buf->Length();
-	    }
-
-	TBufC<KCommsDbSvrMaxFieldLength> temp(buf->Mid(0, pos));
-	delete buf;
-	buf = NULL;
-	_LIT(KIp4, "ip");
-	_LIT(KIp6, "ip6");
-	if (temp.CompareF(KIp4) == 0)
-	    {
-	    // IPv4 settings
-    	aIapView->GetBoolL(KCDTIdWCDMAIPDNSAddrFromServer | KCDTIdOutgoingGprsRecord, fromServer);
-    	if (!fromServer)
-    	    {
-    	    aIapView->GetTextL(KCDTIdWCDMAIPNameServer1 | KCDTIdOutgoingGprsRecord, buf);
-            TInetAddr addr;
-            User::LeaveIfError(addr.Input(*buf));
-            // sending ASCII to MA but checking the validity of the address above.
-    	    aDns1.Copy(*buf);
-        	delete buf;
-        	buf = NULL;
-    	    aIapView->GetTextL(KCDTIdWCDMAIPNameServer2 | KCDTIdOutgoingGprsRecord, buf);
-    	    User::LeaveIfError(addr.Input(*buf));
-            // sending ASCII to MA but checking the validity of the address above.
-        	aDns2.Copy(*buf);
-    	    delete buf;
-        	buf = NULL;
-    	    }
-	    }
-	else if (temp.CompareF(KIp6) == 0)
-	    {
-	    // IPv6 settings
-    	aIapView->GetBoolL(KCDTIdWCDMAIP6DNSAddrFromServer | KCDTIdOutgoingGprsRecord, fromServer);
-    	if (!fromServer)
-    	    {
-    	    aIapView->GetTextL(KCDTIdWCDMAIP6NameServer1 | KCDTIdOutgoingGprsRecord, buf);
-            TInetAddr addr;
-            User::LeaveIfError(addr.Input(*buf));
-            // sending ASCII to MA but checking the validity of the address above.
-            aDns1.Copy(*buf);
-    	    delete buf;
-    		buf = NULL;
-    	    aIapView->GetTextL(KCDTIdWCDMAIP6NameServer2 | KCDTIdOutgoingGprsRecord, buf);
-            User::LeaveIfError(addr.Input(*buf));
-            // sending ASCII to MA but checking the validity of the address above.
-          	aDns2.Copy(*buf);
-        	delete buf;
-            buf = NULL;
-    	    }
-	    }
-	else
-	    {
-	    // Anything else is a serious misconfiguration
-	    User::Leave(KErrArgument);
-	    }
-	}
-void CGPRSProvision::RetrieveUmtsCompressionL(RPacketContext::THeaderCompression& aHeaderCompression, RPacketContext::TDataCompression& aDataCompression, ESock::CCommsDatIapView* aIapView) const
-	{
-	TUint32 headerComp;
-	TUint32 dataComp;
-	TInt err;
-	
-	err = aIapView->GetInt(KCDTIdR5DataCompression | KCDTIdOutgoingGprsRecord, headerComp);
-	if (err == KErrNotFound || err == KErrUnknown)
-	    {
-	    err = KErrNone;
-	    headerComp = RPacketContext::ENoHeaderCompression;
-	    }
-	User::LeaveIfError(err);
-	
-	aHeaderCompression = static_cast<RPacketContext::THeaderCompression>(headerComp);
-	
-	err = aIapView->GetInt(KCDTIdR5HeaderCompression | KCDTIdOutgoingGprsRecord, dataComp);
-	if (err == KErrNotFound || err == KErrUnknown)
-	    {
-	    err = KErrNone;
-	    dataComp = RPacketContext::ENoDataCompression;
-	    }
-	User::LeaveIfError(err);
-
-	aDataCompression = static_cast<RPacketContext::TDataCompression>(dataComp);	
-	}
-
-void CGPRSProvision::RetrieveUmtsPacketFlowIdentifierL(RPacketContext::TPacketFlowIdentifier& aPfi, ESock::CCommsDatIapView* aIapView) const
-	{
-	TUint32 pfi;
-	TInt err = aIapView->GetInt(KCDTIdPacketFlowIdentifier | KCDTIdOutgoingGprsRecord, pfi);
-	if (err == KErrNotFound || err == KErrUnknown)
-	    {
-	    err = KErrNone;
-	    pfi = RPacketContext::EBestEffort;
-	    }
-	User::LeaveIfError(err);
-	aPfi = static_cast<RPacketContext::TPacketFlowIdentifier>(pfi);
-	}
-
-
-TInt CGPRSProvision::InitialiseScratchContext(TUint32 aConfigRel) const
-	{
-    switch(aConfigRel)
-        {
-        case TPacketDataConfigBase::KConfigGPRS:
-            {
-            RPacketContext::TContextConfigGPRS tmp;
-            Mem::Copy(const_cast<TUint8*>(iScratchContext.Ptr()), &tmp, sizeof(tmp));
-            }
-            break;
-            
-        case TPacketDataConfigBase::KConfigRel99Rel4:
-            {
-            RPacketContext::TContextConfigR99_R4 tmp;
-            Mem::Copy(const_cast<TUint8*>(iScratchContext.Ptr()), &tmp, sizeof(tmp));
-            }
-            break;
-            
-        case TPacketDataConfigBase::KConfigRel5:
-            {
-            RPacketContext::TContextConfig_R5 tmp;
-            Mem::Copy(const_cast<TUint8*>(iScratchContext.Ptr()), &tmp, sizeof(tmp));
-            }
-            break;
-        default:
-        	return KErrNotSupported;
-        }
-    return KErrNone;
-    }
-
-
-CTSYProvision* CTSYProvision::NewLC(ESock::CCommsDatIapView* aIapView)
-	{
-	CTSYProvision* self = new (ELeave) CTSYProvision;
-	CleanupStack::PushL(self);
-	self->InitialiseConfigL(aIapView);
-	return self;
-	}
-
-void CTSYProvision::InitialiseConfigL(ESock::CCommsDatIapView* aIapView)
-    {
-	HBufC* buf = NULL;
-	
-	aIapView->GetTextL(KCDTIdTsyName, buf);
-	iTsyName.Copy(*buf);
-	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CTSYProvision [this=%08x]::InitialiseConfigL() KCDTIdTsyName=%s"), this, &iTsyName)); 	
-	delete buf;
-    }
-
-CDefaultPacketQoSProvision* CDefaultPacketQoSProvision::NewL(ESock::CCommsDatIapView* aIapView)
-	{
-	CDefaultPacketQoSProvision* self = new (ELeave) CDefaultPacketQoSProvision;
-	CleanupStack::PushL(self);
-	self->InitialiseConfigL(aIapView);
-	CleanupStack::Pop(self);
-	return self;
-	}
-	
- void CDefaultPacketQoSProvision::InitialiseConfigL(ESock::CCommsDatIapView* aIapView)
-    {
-    TUint32 data;
-	    
-	aIapView->GetIntL(KCDTIdWCDMAReqTrafficClass,data);
-	iParams.iReqTrafficClass = (RPacketQoS::TTrafficClass)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMinTrafficClass,data);
-	iParams.iMinTrafficClass = (RPacketQoS::TTrafficClass)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqDeliveryOrder,data);
-	iParams.iReqDeliveryOrderReqd = (RPacketQoS::TDeliveryOrder)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMinDeliveryOrder,data);
-	iParams.iMinDeliveryOrderReqd = (RPacketQoS::TDeliveryOrder)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqDeliverErroneousSDU,data);
-	iParams.iReqDeliverErroneousSDU = (RPacketQoS::TErroneousSDUDelivery)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMinDeliverErroneousSDU,data);
-	iParams.iMinDeliverErroneousSDU = (RPacketQoS::TErroneousSDUDelivery)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqMaxSDUSize,data);
-	iParams.iReqMaxSDUSize = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMinAcceptableMaxSDUSize,data);
-	iParams.iMinAcceptableMaxSDUSize = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqMaxUplinkRate,data);
-	iParams.iReqMaxRate.iUplinkRate = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqMinUplinkRate,data);
-	iParams.iMinAcceptableMaxRate.iUplinkRate = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqMaxDownlinkRate,data);
-	iParams.iReqMaxRate.iDownlinkRate = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqMinDownlinkRate,data);
-	iParams.iMinAcceptableMaxRate.iDownlinkRate = (TInt)data;
-		
-	aIapView->GetIntL(KCDTIdWCDMAReqBER,data);
-	iParams.iReqBER = (RPacketQoS::TBitErrorRatio)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMaxBER,data);
-	iParams.iMaxBER = (RPacketQoS::TBitErrorRatio)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqSDUErrorRatio,data);
-	iParams.iReqSDUErrorRatio = (RPacketQoS::TSDUErrorRatio)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMaxSDUErrorRatio,data);
-	iParams.iMaxSDUErrorRatio = (RPacketQoS::TSDUErrorRatio)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqTrafficHandlingPriority,data);
-	iParams.iReqTrafficHandlingPriority = (RPacketQoS::TTrafficHandlingPriority)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMinTrafficHandlingPriority,data);
-	iParams.iMinTrafficHandlingPriority = (RPacketQoS::TTrafficHandlingPriority)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqTransferDelay,data);
-	iParams.iReqTransferDelay = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMaxTransferDelay,data);
-	iParams.iMaxTransferDelay = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqGuaranteedUplinkRate,data);
-	iParams.iReqGuaranteedRate.iUplinkRate = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAMinGuaranteedUplinkRate,data);			
-	iParams.iMinGuaranteedRate.iUplinkRate = (TInt)data;
-	
-	aIapView->GetIntL(KCDTIdWCDMAReqGuaranteedDownlinkRate,data);
-	iParams.iReqGuaranteedRate.iDownlinkRate = (TInt)data;
-		
-	aIapView->GetIntL(KCDTIdWCDMAMinGuaranteedDownlinkRate,data);
-	iParams.iMinGuaranteedRate.iDownlinkRate = (TInt)data;
-
-	TBool bdata = EFalse;
-#ifdef _DEBUG
-	TInt debugErr = 
-#endif
-	aIapView->GetBool(KCDTIdWCDMASignallingIndication,bdata);
-	iParams.iSignallingIndication = bdata;
-    }
-    
-CImsExtProvision* CImsExtProvision::NewLC(ESock::CCommsDatIapView* aIapView)
-	{
-	CImsExtProvision* self = new (ELeave) CImsExtProvision;
-	CleanupStack::PushL(self);
-	self->InitialiseConfigL(aIapView);
-	return self;
-	}
-
-void CImsExtProvision::InitialiseConfigL(ESock::CCommsDatIapView* aIapView)
-    {
-	TBool bdata = EFalse;
-	aIapView->GetBool(KCDTIdWCDMAImCmSignallingIndication,bdata);
-	iImsSignalIndicator = bdata;
-    }
-
-
+// Copyright (c) 2006-2010 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:
+// PDP Config structures for TProvision message.
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include <comms-infras/ss_log.h>
+#include <in_sock.h>
+#include <comms-infras/metadata.h>
+#include <comms-infras/agentmcpr.h>
+#include <comms-infras/ss_log.h>
+#include <comms-infras/ss_tiermanagerutils.h>
+
+#include "PDPProvision.h"
+
+using namespace ESock;
+
+#if defined(__CFLOG_ACTIVE)
+#define KPDPMCprTag KESockMetaConnectionTag
+_LIT8(KPDPMCprSubTag, "pdpmcpr");
+#endif
+
+//
+// Attribute table for provisioning structure passed to CFProtocol
+//
+START_ATTRIBUTE_TABLE(CGPRSProvision, CGPRSProvision::EUid, CGPRSProvision::ETypeId)
+// No attributes defined, as no serialisation takes place.
+END_ATTRIBUTE_TABLE()
+
+START_ATTRIBUTE_TABLE(CTSYProvision, CGPRSProvision::EUid, CTSYProvision::ETypeId)
+// No attributes defined, as no serialisation takes place.
+END_ATTRIBUTE_TABLE()
+
+START_ATTRIBUTE_TABLE(CDefaultPacketQoSProvision, CDefaultPacketQoSProvision::EUid, CDefaultPacketQoSProvision::ETypeId)
+// No attributes defined, as no serialisation takes place.
+END_ATTRIBUTE_TABLE()
+
+START_ATTRIBUTE_TABLE(CImsExtProvision, CImsExtProvision::EUid, CImsExtProvision::ETypeId)
+// No attributes defined, as no serialisation takes place.
+END_ATTRIBUTE_TABLE()
+
+CGPRSProvision* CGPRSProvision::NewLC(ESock::CCommsDatIapView* aIapView)
+	{
+	CGPRSProvision* self = new (ELeave) CGPRSProvision;
+	CleanupStack::PushL(self);
+	self->InitialiseConfigL(aIapView);
+	return self;
+	}
+TInt CGPRSProvision::UmtsGprsRelease() const
+	{
+	return iUmtsGprsRelease;
+	}
+
+void CGPRSProvision::InitialiseConfigL(ESock::CCommsDatIapView* aIapView)
+    {	
+	TInt getErr = aIapView->GetInt(KCDTIdUmtsGprsRelease | KCDTIdOutgoingGprsRecord, iUmtsGprsRelease);
+		
+	if (getErr == KErrNotFound || getErr == KErrUnknown)
+	    {
+	    // default to GPRS
+	    getErr = KErrNone;
+	    iUmtsGprsRelease = TPacketDataConfigBase::KConfigGPRS;
+	    }
+	    
+	TBool useEdge = EFalse;
+	
+	aIapView->GetBoolL(KCDTIdWCDMAUseEdge | KCDTIdOutgoingGprsRecord, useEdge);
+	
+	getErr = InitialiseScratchContext(iUmtsGprsRelease);
+	//-====================================================
+	//LENIENT PROVISION
+	//-====================================================
+	//With some provision parameters (e.g.: pdpAddress), CGPRSProvision 
+	//tries to be lenient as technically they can be supplied by
+	//someone further in the chain (e.g.: GPRS), if not found in the db.
+	switch (iUmtsGprsRelease)
+		{
+    	case TPacketDataConfigBase::KConfigGPRS:
+			{
+            RPacketContext::TContextConfigGPRS& contextGPRS = GetScratchContextAs<RPacketContext::TContextConfigGPRS>();
+            RetrievePdpTypeL(contextGPRS.iPdpType, aIapView);
+            RetrieveApnNameL(contextGPRS.iAccessPointName, aIapView);
+            RetrieveIPAndDnsSettingsL(contextGPRS.iPdpAddress,
+                contextGPRS.iProtocolConfigOption.iDnsAddresses.iPrimaryDns,
+                contextGPRS.iProtocolConfigOption.iDnsAddresses.iSecondaryDns, aIapView);
+            RetrieveAuthenticationInfoL(contextGPRS.iProtocolConfigOption, aIapView);
+            // GPRS specific
+        	RetrieveGprsCompression(contextGPRS.iPdpCompression, aIapView);
+        	RetrieveGprsAnonymousAccess(contextGPRS.iAnonymousAccessReqd, aIapView);
+        	contextGPRS.iUseEdge = useEdge;
+			}
+			break;
+	    case TPacketDataConfigBase::KConfigRel5:
+			{
+            // Rel 5 specific
+            RPacketContext::TContextConfig_R5& contextR5 = GetScratchContextAs<RPacketContext::TContextConfig_R5>();
+            RetrieveUmtsCompressionL(contextR5.iPdpHeaderCompression, contextR5.iPdpDataCompression, aIapView);
+            
+            RetrievePdpTypeL(contextR5.iPdpType, aIapView);
+            RetrieveApnNameL(contextR5.iAccessPointName, aIapView);
+            RetrieveIPAndDnsSettingsL(contextR5.iPdpAddress,
+            		contextR5.iProtocolConfigOption.iDnsAddresses.iPrimaryDns,
+            		contextR5.iProtocolConfigOption.iDnsAddresses.iSecondaryDns, aIapView);
+            RetrieveAuthenticationInfoL(contextR5.iProtocolConfigOption, aIapView);
+            contextR5.iUseEdge = useEdge;
+
+    		RetrieveUmtsPacketFlowIdentifierL(contextR5.iPFI, aIapView);
+			}
+			break;
+	    case TPacketDataConfigBase::KConfigRel99Rel4:
+			{
+            RPacketContext::TContextConfigR99_R4& contextUMTS = GetScratchContextAs<RPacketContext::TContextConfigR99_R4>();
+
+            RetrievePdpTypeL(contextUMTS.iPdpType, aIapView);
+            RetrieveApnNameL(contextUMTS.iAccessPointName, aIapView);
+            RetrieveIPAndDnsSettingsL(contextUMTS.iPdpAddress,
+                contextUMTS.iProtocolConfigOption.iDnsAddresses.iPrimaryDns,
+                contextUMTS.iProtocolConfigOption.iDnsAddresses.iSecondaryDns, aIapView);
+            RetrieveAuthenticationInfoL(contextUMTS.iProtocolConfigOption, aIapView);
+            contextUMTS.iUseEdge = useEdge;
+            RetrieveUmtsPacketFlowIdentifierL(contextUMTS.iPFI, aIapView);
+			}
+			break;
+	    default:
+	    	User::Leave(KErrNotSupported);
+		}
+    }
+
+void CGPRSProvision::RetrieveGprsCompression(TUint& aCompression, ESock::CCommsDatIapView* aIapView) const
+	{
+	aCompression = 0;
+	TBool isCompression = EFalse;
+	aIapView->GetBool(KCDTIdWCDMADataCompression | KCDTIdOutgoingGprsRecord, isCompression);
+	if (isCompression)
+		{
+		aCompression |= RPacketContext::KPdpDataCompression;
+		}
+
+	isCompression = EFalse;
+	aIapView->GetBool(KCDTIdWCDMAHeaderCompression | KCDTIdOutgoingGprsRecord, isCompression);
+	if (isCompression)
+		{
+		aCompression |= RPacketContext::KPdpHeaderCompression;
+		}
+	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::InitialiseConfigL() KCDTIdWCDMADataCompression|KCDTIdWCDMAHeaderCompression [%d]"), this, aCompression));
+	}
+
+void CGPRSProvision::RetrieveGprsAnonymousAccess(RPacketContext::TAnonymousAccess& aAnonymous, ESock::CCommsDatIapView* aIapView) const
+	{	
+	TBool isAnonymous = EFalse;
+	aIapView->GetBool(KCDTIdWCDMAAnonymousAccess | KCDTIdOutgoingGprsRecord,isAnonymous);
+	if (isAnonymous)
+		aAnonymous = RPacketContext::ERequired;
+	else
+		aAnonymous = RPacketContext::ENotRequired;
+	
+	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::InitialiseConfigL() KCDTIdWCDMAAnonymousAccess [%d]"), this, aAnonymous));
+	}
+
+void CGPRSProvision::RetrieveApnNameL(TDes8& aApnName, ESock::CCommsDatIapView* aIapView) const
+	{
+	HBufC* buf = NULL;
+	TInt getErr;
+
+	if ((getErr = aIapView->GetText(KCDTIdAPN | KCDTIdOutgoingGprsRecord, buf)) == KErrNone)
+    		{
+    		aApnName.Copy(*buf);
+    		delete buf;
+    		}
+    	else if (getErr != KErrNotFound )
+    		{
+    		User::Leave(getErr);
+    		}
+	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::InitialiseConfigL() KCDTIdAPN [%S]"), this, &aApnName));
+	}
+
+void CGPRSProvision::RetrievePdpTypeL(RPacketContext::TProtocolType& aPdpType, ESock::CCommsDatIapView* aIapView) const	
+	{
+	TUint32 pdpType(0);
+
+	aIapView->GetIntL(KCDTIdWCDMPDPType | KCDTIdOutgoingGprsRecord, pdpType);
+	aPdpType = static_cast<RPacketContext::TProtocolType>(pdpType);
+	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::InitialiseConfigL() KCDTIdWCDMPDPType=%d"), this, aPdpType)); 	
+	}
+
+void CGPRSProvision::RetrieveAuthenticationInfoL(RPacketContext::TProtocolConfigOptionV2& aProtocolConfigOption, ESock::CCommsDatIapView* aIapView)
+    {
+    HBufC* buf = NULL;
+    TInt getErr;
+
+    __CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::RetrieveAuthenticationInfoL()"), this));
+
+    getErr = aIapView->GetText(KCDTIdWCDMAIfAuthName | KCDTIdOutgoingGprsRecord, buf);
+    if ( getErr == KErrNone )
+        {
+        ASSERT(buf);
+        aProtocolConfigOption.iAuthInfo.iUsername.Copy(*buf);
+        delete buf;
+        buf = NULL;
+        
+        __CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::RetrieveAuthenticationInfoL() KCDTIdWCDMAIfAuthName [%S] "), this, &aProtocolConfigOption.iAuthInfo.iUsername));
+        
+		aProtocolConfigOption.iId = 1;
+        getErr = aIapView->GetText(KCDTIdWCDMAIfAuthPass | KCDTIdOutgoingGprsRecord, buf);
+        if ( getErr == KErrNone )
+            {
+            ASSERT(buf);
+            aProtocolConfigOption.iAuthInfo.iPassword.Copy(*buf);
+            delete buf;
+            buf = NULL;
+            
+            __CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CGPRSProvision [this=%08x]::RetrieveAuthenticationInfoL() KCDTIdWCDMAIfAuthPass [%S]"), this, &aProtocolConfigOption.iAuthInfo.iPassword));
+            }
+        else if (getErr != KErrNotFound)
+            {
+            User::Leave(getErr);
+            }
+        }
+    else if (getErr != KErrNotFound)
+        {
+        User::Leave(getErr);
+        }
+    }
+
+void CGPRSProvision::RetrieveIPAndDnsSettingsL(TDes8& aPdpAddress, TDes8& aDns1, TDes8& aDns2, ESock::CCommsDatIapView* aIapView) const
+	{
+	HBufC* buf = NULL;
+
+	aPdpAddress.SetLength(0);
+	aDns1.SetLength(0);
+	aDns2.SetLength(0);
+	
+	TBool fromServer;
+	aIapView->GetBoolL(KCDTIdWCDMAIPAddrFromServer | KCDTIdOutgoingGprsRecord, fromServer);
+	if (!fromServer)
+	    {
+    	aIapView->GetTextL(KCDTIdWCDMAIPAddr | KCDTIdOutgoingGprsRecord, buf);
+    	TInetAddr addr;
+    	User::LeaveIfError(addr.Input(*buf));
+    	// sending ASCII to MA but checking the validity of the address above.
+    	aPdpAddress.Copy(*buf);
+    	delete buf;
+    	buf = NULL;
+	    }
+	
+    // We can only use IPv4 or IPv6 - we use the first one listed in the IfNetworks field
+	aIapView->GetTextL(KCDTIdWCDMAIfNetworks | KCDTIdOutgoingGprsRecord, buf);
+
+	TInt pos = buf->Find(_L(","));
+	if (pos == KErrNotFound)
+	    {
+	    pos = buf->Length();
+	    }
+
+	TBufC<KCommsDbSvrMaxFieldLength> temp(buf->Mid(0, pos));
+	delete buf;
+	buf = NULL;
+	_LIT(KIp4, "ip");
+	_LIT(KIp6, "ip6");
+	if (temp.CompareF(KIp4) == 0)
+	    {
+	    // IPv4 settings
+    	aIapView->GetBoolL(KCDTIdWCDMAIPDNSAddrFromServer | KCDTIdOutgoingGprsRecord, fromServer);
+    	if (!fromServer)
+    	    {
+    	    aIapView->GetTextL(KCDTIdWCDMAIPNameServer1 | KCDTIdOutgoingGprsRecord, buf);
+            TInetAddr addr;
+            User::LeaveIfError(addr.Input(*buf));
+            // sending ASCII to MA but checking the validity of the address above.
+    	    aDns1.Copy(*buf);
+        	delete buf;
+        	buf = NULL;
+    	    aIapView->GetTextL(KCDTIdWCDMAIPNameServer2 | KCDTIdOutgoingGprsRecord, buf);
+    	    User::LeaveIfError(addr.Input(*buf));
+            // sending ASCII to MA but checking the validity of the address above.
+        	aDns2.Copy(*buf);
+    	    delete buf;
+        	buf = NULL;
+    	    }
+	    }
+	else if (temp.CompareF(KIp6) == 0)
+	    {
+	    // IPv6 settings
+    	aIapView->GetBoolL(KCDTIdWCDMAIP6DNSAddrFromServer | KCDTIdOutgoingGprsRecord, fromServer);
+    	if (!fromServer)
+    	    {
+    	    aIapView->GetTextL(KCDTIdWCDMAIP6NameServer1 | KCDTIdOutgoingGprsRecord, buf);
+            TInetAddr addr;
+            User::LeaveIfError(addr.Input(*buf));
+            // sending ASCII to MA but checking the validity of the address above.
+            aDns1.Copy(*buf);
+    	    delete buf;
+    		buf = NULL;
+    	    aIapView->GetTextL(KCDTIdWCDMAIP6NameServer2 | KCDTIdOutgoingGprsRecord, buf);
+            User::LeaveIfError(addr.Input(*buf));
+            // sending ASCII to MA but checking the validity of the address above.
+          	aDns2.Copy(*buf);
+        	delete buf;
+            buf = NULL;
+    	    }
+	    }
+	else
+	    {
+	    // Anything else is a serious misconfiguration
+	    User::Leave(KErrArgument);
+	    }
+	}
+void CGPRSProvision::RetrieveUmtsCompressionL(RPacketContext::THeaderCompression& aHeaderCompression, RPacketContext::TDataCompression& aDataCompression, ESock::CCommsDatIapView* aIapView) const
+	{
+	TUint32 headerComp;
+	TUint32 dataComp;
+	TInt err;
+	
+	err = aIapView->GetInt(KCDTIdR5DataCompression | KCDTIdOutgoingGprsRecord, headerComp);
+	if (err == KErrNotFound || err == KErrUnknown)
+	    {
+	    err = KErrNone;
+	    headerComp = RPacketContext::ENoHeaderCompression;
+	    }
+	User::LeaveIfError(err);
+	
+	aHeaderCompression = static_cast<RPacketContext::THeaderCompression>(headerComp);
+	
+	err = aIapView->GetInt(KCDTIdR5HeaderCompression | KCDTIdOutgoingGprsRecord, dataComp);
+	if (err == KErrNotFound || err == KErrUnknown)
+	    {
+	    err = KErrNone;
+	    dataComp = RPacketContext::ENoDataCompression;
+	    }
+	User::LeaveIfError(err);
+
+	aDataCompression = static_cast<RPacketContext::TDataCompression>(dataComp);	
+	}
+
+void CGPRSProvision::RetrieveUmtsPacketFlowIdentifierL(RPacketContext::TPacketFlowIdentifier& aPfi, ESock::CCommsDatIapView* aIapView) const
+	{
+	TUint32 pfi;
+	TInt err = aIapView->GetInt(KCDTIdPacketFlowIdentifier | KCDTIdOutgoingGprsRecord, pfi);
+	if (err == KErrNotFound || err == KErrUnknown)
+	    {
+	    err = KErrNone;
+	    pfi = RPacketContext::EBestEffort;
+	    }
+	User::LeaveIfError(err);
+	aPfi = static_cast<RPacketContext::TPacketFlowIdentifier>(pfi);
+	}
+
+
+TInt CGPRSProvision::InitialiseScratchContext(TUint32 aConfigRel) const
+	{
+    switch(aConfigRel)
+        {
+        case TPacketDataConfigBase::KConfigGPRS:
+            {
+            RPacketContext::TContextConfigGPRS tmp;
+            Mem::Copy(const_cast<TUint8*>(iScratchContext.Ptr()), &tmp, sizeof(tmp));
+            }
+            break;
+            
+        case TPacketDataConfigBase::KConfigRel99Rel4:
+            {
+            RPacketContext::TContextConfigR99_R4 tmp;
+            Mem::Copy(const_cast<TUint8*>(iScratchContext.Ptr()), &tmp, sizeof(tmp));
+            }
+            break;
+            
+        case TPacketDataConfigBase::KConfigRel5:
+            {
+            RPacketContext::TContextConfig_R5 tmp;
+            Mem::Copy(const_cast<TUint8*>(iScratchContext.Ptr()), &tmp, sizeof(tmp));
+            }
+            break;
+        default:
+        	return KErrNotSupported;
+        }
+    return KErrNone;
+    }
+
+
+CTSYProvision* CTSYProvision::NewLC(ESock::CCommsDatIapView* aIapView)
+	{
+	CTSYProvision* self = new (ELeave) CTSYProvision;
+	CleanupStack::PushL(self);
+	self->InitialiseConfigL(aIapView);
+	return self;
+	}
+
+void CTSYProvision::InitialiseConfigL(ESock::CCommsDatIapView* aIapView)
+    {
+	HBufC* buf = NULL;
+	
+	aIapView->GetTextL(KCDTIdTsyName, buf);
+	iTsyName.Copy(*buf);
+	__CFLOG_VAR((KPDPMCprTag, KPDPMCprSubTag, _L8("CTSYProvision [this=%08x]::InitialiseConfigL() KCDTIdTsyName=%s"), this, &iTsyName)); 	
+	delete buf;
+    }
+
+CDefaultPacketQoSProvision* CDefaultPacketQoSProvision::NewL(ESock::CCommsDatIapView* aIapView)
+	{
+	CDefaultPacketQoSProvision* self = new (ELeave) CDefaultPacketQoSProvision;
+	CleanupStack::PushL(self);
+	self->InitialiseConfigL(aIapView);
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+ void CDefaultPacketQoSProvision::InitialiseConfigL(ESock::CCommsDatIapView* aIapView)
+    {
+    TUint32 data;
+	    
+	aIapView->GetIntL(KCDTIdWCDMAReqTrafficClass,data);
+	iParams.iReqTrafficClass = (RPacketQoS::TTrafficClass)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMinTrafficClass,data);
+	iParams.iMinTrafficClass = (RPacketQoS::TTrafficClass)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqDeliveryOrder,data);
+	iParams.iReqDeliveryOrderReqd = (RPacketQoS::TDeliveryOrder)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMinDeliveryOrder,data);
+	iParams.iMinDeliveryOrderReqd = (RPacketQoS::TDeliveryOrder)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqDeliverErroneousSDU,data);
+	iParams.iReqDeliverErroneousSDU = (RPacketQoS::TErroneousSDUDelivery)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMinDeliverErroneousSDU,data);
+	iParams.iMinDeliverErroneousSDU = (RPacketQoS::TErroneousSDUDelivery)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqMaxSDUSize,data);
+	iParams.iReqMaxSDUSize = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMinAcceptableMaxSDUSize,data);
+	iParams.iMinAcceptableMaxSDUSize = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqMaxUplinkRate,data);
+	iParams.iReqMaxRate.iUplinkRate = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqMinUplinkRate,data);
+	iParams.iMinAcceptableMaxRate.iUplinkRate = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqMaxDownlinkRate,data);
+	iParams.iReqMaxRate.iDownlinkRate = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqMinDownlinkRate,data);
+	iParams.iMinAcceptableMaxRate.iDownlinkRate = (TInt)data;
+		
+	aIapView->GetIntL(KCDTIdWCDMAReqBER,data);
+	iParams.iReqBER = (RPacketQoS::TBitErrorRatio)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMaxBER,data);
+	iParams.iMaxBER = (RPacketQoS::TBitErrorRatio)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqSDUErrorRatio,data);
+	iParams.iReqSDUErrorRatio = (RPacketQoS::TSDUErrorRatio)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMaxSDUErrorRatio,data);
+	iParams.iMaxSDUErrorRatio = (RPacketQoS::TSDUErrorRatio)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqTrafficHandlingPriority,data);
+	iParams.iReqTrafficHandlingPriority = (RPacketQoS::TTrafficHandlingPriority)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMinTrafficHandlingPriority,data);
+	iParams.iMinTrafficHandlingPriority = (RPacketQoS::TTrafficHandlingPriority)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqTransferDelay,data);
+	iParams.iReqTransferDelay = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMaxTransferDelay,data);
+	iParams.iMaxTransferDelay = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqGuaranteedUplinkRate,data);
+	iParams.iReqGuaranteedRate.iUplinkRate = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAMinGuaranteedUplinkRate,data);			
+	iParams.iMinGuaranteedRate.iUplinkRate = (TInt)data;
+	
+	aIapView->GetIntL(KCDTIdWCDMAReqGuaranteedDownlinkRate,data);
+	iParams.iReqGuaranteedRate.iDownlinkRate = (TInt)data;
+		
+	aIapView->GetIntL(KCDTIdWCDMAMinGuaranteedDownlinkRate,data);
+	iParams.iMinGuaranteedRate.iDownlinkRate = (TInt)data;
+
+	TBool bdata = EFalse;
+#ifdef _DEBUG
+	TInt debugErr = 
+#endif
+	aIapView->GetBool(KCDTIdWCDMASignallingIndication,bdata);
+	iParams.iSignallingIndication = bdata;
+    }
+    
+CImsExtProvision* CImsExtProvision::NewLC(ESock::CCommsDatIapView* aIapView)
+	{
+	CImsExtProvision* self = new (ELeave) CImsExtProvision;
+	CleanupStack::PushL(self);
+	self->InitialiseConfigL(aIapView);
+	return self;
+	}
+
+void CImsExtProvision::InitialiseConfigL(ESock::CCommsDatIapView* aIapView)
+    {
+	TBool bdata = EFalse;
+	aIapView->GetBool(KCDTIdWCDMAImCmSignallingIndication,bdata);
+	iImsSignalIndicator = bdata;
+    }
+
+