diff -r 000000000000 -r 3553901f7fa8 telephonyprotocols/pdplayer/src/pdptiermanagerselector.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyprotocols/pdplayer/src/pdptiermanagerselector.cpp Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,142 @@ +// 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: +// + +/** + @file + @internalComponent +*/ + +#include "pdptiermanagerselector.h" +#include "pdptiermanagerfactory.h" + +#include +#include +#include +#include +#include //TConnIdList +#include + +#ifdef __CFLOG_ACTIVE +#define KPdpTierMgrTag KESockTierTag +_LIT8(KPdpTierMgrSubTag, "pdptiermgr"); +#endif // __CFLOG_ACTIVE + +using namespace ESock; +using namespace CommsDat; + + +//Panic codes +_LIT(KPdpSelectorPanic, "PdpSelector"); +enum TPdpSelectorPanic + { + EExpectedAccessPointAwareSystem = 0, + EUnExpectedSelectionPreferences = 1 + }; + +// +//CPdpProviderSelector +class CPdpProviderSelector : public CBase, public ASimpleSelectorBase +/** Link connection selector. + Simple selector object for the link layer. + +@internalComponent +@prototype +*/ + { +public: + explicit CPdpProviderSelector(const Meta::SMetaData& aSelectionPreferences) + : ASimpleSelectorBase(aSelectionPreferences) + { + } + +private: + virtual void SelectL(ESock::ISelectionNotify& aSelectionNotify); + }; + +void CPdpProviderSelector::SelectL(ISelectionNotify& aSelectionNotify) + { + ASSERT(iDbs); + ASSERT(iTierRecord); + TUint32 defaultAccessPoint = iTierRecord->iDefaultAccessPoint; + + //This selector deals only with the AccessPoint aware system! + __ASSERT_DEBUG(defaultAccessPoint!=0,User::Panic(KPdpSelectorPanic,EExpectedAccessPointAwareSystem)); + + if (iSelectionPrefs.IsEmpty()) + { + //Implicit case on the new setup + __CFLOG_VAR((KPdpTierMgrTag, KPdpTierMgrSubTag, _L8("CPdpProviderSelector %08x::\tSelectL() Using Default AP:%d"),this,defaultAccessPoint)); + aSelectionNotify.SelectComplete(this,FindOrCreateProviderL(defaultAccessPoint)); + aSelectionNotify.SelectComplete(this,NULL); + return; + } + + const TConnPref& prefs = iSelectionPrefs.Prefs(); + if (prefs.ExtensionId() == TConnPref::EConnPrefProviderInfo) + { + ASSERT(iSelectionPrefs.Scope() & TSelectionPrefs::ESelectFromExisting); //This is always attach + const TConnProviderInfo& connProvInfo = static_cast(prefs).Info(); + __CFLOG_VAR((KPdpTierMgrTag, KPdpTierMgrSubTag, _L8("CPdpProviderSelector %08x::\tSelectL() Using TConnProviderInfoPref, AP:%d"),this,connProvInfo.iInfo[1])); + aSelectionNotify.SelectComplete(this,FindProviderL(connProvInfo.iInfo[1],(TAny*)connProvInfo.iInfo[2])); + aSelectionNotify.SelectComplete(this,NULL); + return; + } + + if (prefs.ExtensionId() == TConnPref::EConnPrefSnap) + { + TUint accessPoint = static_cast(prefs).Snap(); + __CFLOG_VAR((KPdpTierMgrTag, KPdpTierMgrSubTag, _L8("CPdpProviderSelector %08x::\tSelectL() Using TConnPrefSnap, AP:%d"),this,accessPoint)); + aSelectionNotify.SelectComplete(this,FindOrCreateProviderL(accessPoint)); + aSelectionNotify.SelectComplete(this,NULL); + return; + } + + if (prefs.ExtensionId() == TConnPref::EConnPrefIdList) + { + __CFLOG_VAR((KPdpTierMgrTag, KPdpTierMgrSubTag, _L8("CPdpProviderSelector %08x::\tSelectL() Using TConnIdList"),this)); + const TConnIdList& list = static_cast(prefs); + TInt count = list.Count(); + for (TInt i = 0; i < count; i++) + { + aSelectionNotify.SelectComplete(this,FindOrCreateProviderL(list.Get(i))); + } + aSelectionNotify.SelectComplete(this,NULL); + return; + } + + //In this selector we _must_ have the new preferences, otherwise it means that + //a critical, non-recoverable mitsake has occured before when this selector has been picked. + __CFLOG_VAR((KPdpTierMgrTag, KPdpTierMgrSubTag, _L8("ERROR: CPdpProviderSelector %08x::\tSelectL() Unexpected selection preferences"),this)); + User::Panic(KPdpSelectorPanic,EUnExpectedSelectionPreferences); + } + +// +// TPdpSelectorFactory::NewSelectorL - This fn matches a selector +MProviderSelector* TPdpSelectorFactory::NewSelectorL(const Meta::SMetaData& aSelectionPreferences) + { + __CFLOG_VAR((KPdpTierMgrTag, KPdpTierMgrSubTag, _L8("CPdpMetaCprSelectorBase::\tNewL()"))); + ASSERT(aSelectionPreferences.IsTypeOf(TSelectionPrefs::TypeId())); + CMDBSession* dbs = CMDBSession::NewLC(KCDVersion1_2); + CPdpProviderSelector* self = new (ELeave) CPdpProviderSelector(aSelectionPreferences); + CleanupStack::PushL(self); + ASSERT(self->iTierRecord==NULL); + self->iTierRecord = TierManagerUtils::LoadTierRecordL(TUid::Uid(CPDPTierManagerFactory::EUid),*dbs); + CleanupStack::Pop(self); + CleanupStack::Pop(dbs); + ASSERT(self->iDbs==NULL); + self->iDbs = dbs; + return self; + } +