--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/CoreProviders/src/coretiermanagerselector.cpp Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,124 @@
+// 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:
+// coretiermanagersuperselector.cpp
+//
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#include "coretiermanagerselector.h"
+#include <comms-infras/esock_params.h>
+#include <connpref.h>
+#include <comms-infras/metadata.h>
+#include <comms-infras/ss_log.h>
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdattypesv1_1_partner.h>
+#endif
+
+// remove DETAILED_LOG condition if ever used for more than detailed logs. Condition added to remove build warnings
+#if (defined(__CFLOG_ACTIVE) || defined(SYMBIAN_TRACE_ENABLE)) && defined(DETAILED_LOG)
+ _LIT8(KCoreTMgrSelSupSubTag, "coretiermgrselectorsuper");
+#endif
+
+#ifdef _DEBUG
+// Panic category for "absolutely impossible!" vanilla ASSERT()-type panics from this module
+// (if it could happen through user error then you should give it an explicit, documented, category + code)
+_LIT(KSpecAssert_ESockCrPrvTMSelC, "ESockCrPrvTMSelC");
+#endif
+
+//
+//CCoreSelector
+void CCoreProviderSelectorSuper::SelectL(ISelectionNotify& aSelectionNotify)
+ {
+ //This code doesn't need to be in a seperate selector. It could be moved to
+ //a transition if the method FindOrCreateProviderL was re-created in
+ //another file (it is currently inherited from ASimpleSelectorBase)
+
+ CMDBSession* dbs = CMDBSession::NewLC(KCDVersion1_2);
+
+ iTierRecord = TierManagerUtils::LoadTierRecordL(iTierId,*dbs);
+ CleanupStack::Pop();
+ iDbs = dbs;
+
+ __ASSERT_DEBUG(iDbs, User::Panic(KSpecAssert_ESockCrPrvTMSelC, 1));
+ __ASSERT_DEBUG(iTierRecord, User::Panic(KSpecAssert_ESockCrPrvTMSelC, 2));
+
+ TUint accessPoint = 0;
+ CCDAccessPointRecord* apRec;
+ TUid tierId;
+ TUint selected = 0;
+
+ //This iterator links to all the elements of TConnAPPref that exist in the list
+ ESock::RConnPrefList::TIter<TConnAPPref> iterAP = iConnPrefList.getIter<TConnAPPref>();
+
+ // If there are no TConnAPPref in the prefs, load the default AP
+ if (iterAP.IsEnd())
+ {
+ accessPoint = iTierRecord->iDefaultAccessPoint;
+ LOG_DETAILED( ESockLog::Printf(KCoreTMgrSelSupSubTag, _L("CCoreProviderSelectorSuper %08x:\t No AP specified, using default for tier [Tier: %08x, AP: %d]"), this, iTierId, accessPoint ) );
+ apRec = TierManagerUtils::LoadAccessPointRecordL(accessPoint, *iDbs);
+ tierId = TierManagerUtils::MapElementIdToTagId(apRec->iTier, *iDbs);
+ delete apRec;
+
+ if(iTierId == tierId)
+ {
+ aSelectionNotify.SelectComplete(this,FindOrCreateProviderL(accessPoint));
+ ++selected;
+ }
+ else
+ {
+ LOG_DETAILED( ESockLog::Printf(KCoreTMgrSelSupSubTag, _L("CCoreProviderSelectorSuper %08x:\t AP %d not in tier %08x"), this, accessPoint, iTierId) );
+ User::Leave(KErrArgument);
+ }
+ }
+
+ //This iterator runs through all the instances of TConnAPPref
+ while(!iterAP.IsEnd())
+ {
+ accessPoint = iterAP->GetAP();
+ //The access point record that that access point represents is retrived
+ apRec = TierManagerUtils::LoadAccessPointRecordL(accessPoint,*iDbs);
+ //tierId = TUid::Uid(apRec->iTier);
+ tierId = TierManagerUtils::MapElementIdToTagId(apRec->iTier, *iDbs);
+ //TUid TierManagerUtils::MapElementIdToTagId(TUint aElementId, CommsDat::CMDBSession& aDbs)
+ delete apRec;
+ //If the access point is related to this tier manager the provider
+ //is created and the TConnAPPref removed
+ if(iTierId == tierId)
+ {
+ aSelectionNotify.SelectComplete(this,FindOrCreateProviderL(accessPoint));
+ ++selected;
+ delete iterAP.Remove();
+ }
+ else
+ {
+ LOG_DETAILED( ESockLog::Printf(KCoreTMgrSelSupSubTag, _L("CCoreProviderSelectorSuper %08x:\t AP %d not in tier %08x"), this, accessPoint, iTierId) );
+ iterAP++;
+ }
+ }
+
+ if (selected == 0)
+ {
+ LOG_DETAILED( ESockLog::Printf(KCoreTMgrSelSupSubTag, _L("CCoreProviderSelectorSuper %08x:\t No APs selected [Tier: %08x]"), this, iTierId) );
+ User::Leave(KErrArgument);
+ }
+
+ aSelectionNotify.SelectComplete(this,NULL);
+ return;
+ }
+