diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/ProfileAgent/PluginMgr/Src/SipProfileAgentConfigRetriever.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/ProfileAgent/PluginMgr/Src/SipProfileAgentConfigRetriever.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,207 @@ +// Copyright (c) 2008-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: +// Name : SipProfileAgentConfigRetriever.cpp +// Part of : SIP / SIP Profile Server +// + + + +#include +#include "SipProfileAgentConfigRetriever.h" +#include + +#define KIETFDefaultExpiryValue 3600 +#define KIMSDefaultExpiryValue 600000 +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::NewL +// ----------------------------------------------------------------------------- +// +CSipProfileAgentConfigRetriever* CSipProfileAgentConfigRetriever::NewL() + { + CSipProfileAgentConfigRetriever* self = new (ELeave) CSipProfileAgentConfigRetriever(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::CSipProfileAgentConfigRetriever +// ----------------------------------------------------------------------------- +// +CSipProfileAgentConfigRetriever::CSipProfileAgentConfigRetriever() : + CActive(EPriorityStandard) + { + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::ConstructL +// ----------------------------------------------------------------------------- +// +void CSipProfileAgentConfigRetriever::ConstructL() + { + iRepository = CRepository::NewL(KCRUidProfileSrv); + for(TUint32 i = 0; i < TSIPProfileTypeInfo::EMaxSIPProfileClass; i++) + { + for(TUint32 j = 0; j < CSipProfileAgentConfigExtension::EMaxProfileProperty; j++) + { + iProfilePropertyKeys[i][j] = 0; + } + iDefaultRegistrationValue[i] = 0; + iDefaultSubscriptionValue[i] = 0; + } + ReadValuesL(); + ListenForChangesL(); + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::~CSipProfileAgentConfigRetriever +// ----------------------------------------------------------------------------- +// +CSipProfileAgentConfigRetriever::~CSipProfileAgentConfigRetriever() + { + Cancel(); + delete iRepository; + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::DoCancel +// ----------------------------------------------------------------------------- +// +void CSipProfileAgentConfigRetriever::DoCancel() + { + if (iRepository) + { + iRepository->NotifyCancelAll(); + } + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::RunL +// ----------------------------------------------------------------------------- +// +void CSipProfileAgentConfigRetriever::RunL() + { + + // In S60, repository completes the notification request with value 1, even + // though there is no error. + if (iStatus.Int() >= KErrNone) + { + ReadValuesL(); + } + + ListenForChangesL(); + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::RunError +// ----------------------------------------------------------------------------- +// +TInt CSipProfileAgentConfigRetriever::RunError(TInt aError) + { + return (aError == KErrNoMemory) ? aError : KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::ExpiryValueL +// ----------------------------------------------------------------------------- +// +TUint CSipProfileAgentConfigRetriever::ExpiryValueL( + TSIPProfileTypeInfo::TSIPProfileClass aClass, + CSipProfileAgentConfigExtension::TProfileProperty aProperty) + { + + if(!(aClass < TSIPProfileTypeInfo::EMaxSIPProfileClass) || + !(aProperty < CSipProfileAgentConfigExtension::EMaxProfileProperty)) + { + return KIETFDefaultExpiryValue; + } + + TUint32 Val = 0; + + switch(aProperty) + { + case CSipProfileAgentConfigExtension::EProfileRegistrationValue: + Val = iDefaultRegistrationValue[aClass];break; + case CSipProfileAgentConfigExtension::EProfileSubscriptionValue: + Val = iDefaultSubscriptionValue[aClass];break; + } + + if(0 == Val) + { + if(TSIPProfileTypeInfo::EIms == aClass) + Val = KIMSDefaultExpiryValue; + else + Val = KIETFDefaultExpiryValue; + } + return Val; + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::ReadValuesL +// If the values read from repository are invalid, use the previous values. +// ----------------------------------------------------------------------------- +// +void CSipProfileAgentConfigRetriever::ReadValuesL() + { + RArray ProfilePropertiesTableKeys; + TUint ProfileType(0); + TUint Property(0); + TInt PptVal(0); + + iRepository->FindL(KSIPProfilePropertiesTable,KSIPProfileTableMask, + ProfilePropertiesTableKeys); + TInt count = ProfilePropertiesTableKeys.Count(); + for(TUint16 i=0;i> + KSIPProfileTypeShift; + Property = (ProfilePropertiesTableKeys[i] & KSIPProfilePropertyMask) >> + KSIPProfilePropertyShift; + if((ProfileType-1) < TSIPProfileTypeInfo::EMaxSIPProfileClass && + (Property-1) < CSipProfileAgentConfigExtension::EMaxProfileProperty) + { + User::LeaveIfError(iRepository->Get( + ProfilePropertiesTableKeys[i], PptVal)); + iProfilePropertyKeys[ProfileType-1][Property-1] = + ProfilePropertiesTableKeys[i]; + switch(Property-1) + { + case CSipProfileAgentConfigExtension::EProfileRegistrationValue: + iDefaultRegistrationValue[ProfileType-1] = PptVal; break; + case CSipProfileAgentConfigExtension::EProfileSubscriptionValue: + iDefaultSubscriptionValue[ProfileType-1] = PptVal; break; + } + } + } + ProfilePropertiesTableKeys.Reset(); + } + +// ----------------------------------------------------------------------------- +// CSipProfileAgentConfigRetriever::ListenForChangesL +// ----------------------------------------------------------------------------- +// +void CSipProfileAgentConfigRetriever::ListenForChangesL() + { + + const TUint32 KDummyPartialKey = 0x0; + //This mask means listening for all keys + const TUint32 KMaskIncludingAllKeys = 0x0; + + User::LeaveIfError(iRepository->NotifyRequest(KDummyPartialKey, + KMaskIncludingAllKeys, + iStatus)); + SetActive(); + }