--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/simpleselectorbase/src/simpleselectorbase.cpp Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,169 @@
+// 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:
+// CORETIERMANAGER.CPP
+//
+//
+
+#include "simpleselectorbase.h"
+
+#include <comms-infras/ss_log.h>
+#include <ss_glob.h>
+#include <commsdattypesv1_1.h> // CommsDat
+#include <comms-infras/ss_tiermanagerutils.h>
+#include <in_sock.h> //KAfInet
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <commsdattypesv1_1_partner.h>
+#include <es_sock_internal.h>
+#endif
+
+#include <comms-infras/ss_metaconnprov_internal.h>
+
+
+#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_ESockSimpleSelsm, "ESockSimpleSelsm");
+#endif
+
+using namespace ESock;
+
+//
+//ASimpleSelectorBase
+EXPORT_C ASimpleSelectorBase::ASimpleSelectorBase()
+: iDbs(NULL),
+ iMetaContainer((*SockManGlobals::Get()->iMetaConnectionFactories))
+ {}
+
+EXPORT_C ASimpleSelectorBase::ASimpleSelectorBase(const Meta::SMetaData& aSelectionPreferences)
+ : iDbs(NULL),
+ iMetaContainer((*SockManGlobals::Get()->iMetaConnectionFactories)),
+ iTypeId(0)
+ {
+ iSelectionPrefs.Copy(aSelectionPreferences);
+ }
+
+EXPORT_C ASimpleSelectorBase::ASimpleSelectorBase(const TUint aTypeId, const Meta::SMetaData& aSelectionPreferences)
+ : iDbs(NULL),
+ iMetaContainer((*SockManGlobals::Get()->iMetaConnectionFactories)),
+ iTypeId(aTypeId)
+ {
+ iSelectionPrefs.Copy(aSelectionPreferences);
+ }
+
+EXPORT_C ASimpleSelectorBase::~ASimpleSelectorBase()
+ {
+ Cancel();
+ delete iTierRecord;
+ delete iDbs;
+ }
+
+EXPORT_C void ASimpleSelectorBase::Cancel()
+ {
+ }
+
+EXPORT_C CMetaConnectionProviderBase* ASimpleSelectorBase::FindOrCreateProviderL(TUint aAccessPoint, TAny* aInstance)
+ {
+ /**
+ At this point the 'aAccessPoint' parameter is ALWAYS a tag field!!
+ */
+ __ASSERT_DEBUG(aAccessPoint, User::Panic(KSpecAssert_ESockSimpleSelsm, 1)); //Must not be 0
+
+
+ TUid mCprUid = TierManagerUtils::ReadMCprUidL(aAccessPoint,*iDbs);
+ CMetaConnectionProviderFactoryBase* factory = static_cast<CMetaConnectionProviderFactoryBase*>(iMetaContainer.FindOrCreateFactoryL(mCprUid));
+
+ //Create the provider
+ TUid tierId = TUid::Uid(iTierRecord->iRecordTag);
+ TUid tierImplUid = TUid::Uid(iTierRecord->iTierImplUid);
+ TMetaConnectionFactoryQuery query (TProviderInfo(tierId,aAccessPoint,aInstance),tierImplUid);
+ CMetaConnectionProviderBase* provider = static_cast<CMetaConnectionProviderBase*>(factory->FindOrCreateObjectL(query));
+ __ASSERT_DEBUG(provider, User::Panic(KSpecAssert_ESockSimpleSelsm, 2));
+ provider->IncrementBlockingDestroy();
+ return provider;
+ }
+
+EXPORT_C CMetaConnectionProviderBase* ASimpleSelectorBase::FindProviderL(TUint aAccessPoint, TAny* aInstance)
+ {
+ /**
+ At this point the 'aAccessPoint' parameter is ALWAYS a tag field!!
+ */
+ __ASSERT_DEBUG(aAccessPoint, User::Panic(KSpecAssert_ESockSimpleSelsm, 3)); //Must not be 0
+
+ //Find factory
+ TUid mCprUid = TierManagerUtils::ReadMCprUidL(aAccessPoint,*iDbs);
+ CMetaConnectionProviderFactoryBase* factory = static_cast<CMetaConnectionProviderFactoryBase*>(iMetaContainer.FindFactory(mCprUid));
+ User::LeaveIfError(factory? KErrNone : KErrNotFound);
+
+ //Create the provider
+ TUid tierId = TUid::Uid(iTierRecord->iRecordTag);
+ TUid tierImplUid = TUid::Uid(iTierRecord->iTierImplUid);
+ TMetaConnectionFactoryQuery query (TProviderInfo(tierId,aAccessPoint,aInstance),tierImplUid);
+ return static_cast<CMetaConnectionProviderBase*>(factory->Find(query));
+ }
+
+//
+//CSimplePromptingSelectorBase
+EXPORT_C CSimplePromptingSelectorBase::CSimplePromptingSelectorBase()
+: CActive(CActive::EPriorityUserInput)
+, ASimpleSelectorBase()
+ {
+ CActiveScheduler::Add(this);
+ }
+
+EXPORT_C CSimplePromptingSelectorBase::CSimplePromptingSelectorBase(const TUint aTypeId, const Meta::SMetaData& aSelectionPreferences)
+: CActive(CActive::EPriorityUserInput),
+ ASimpleSelectorBase(aTypeId, aSelectionPreferences)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+EXPORT_C CSimplePromptingSelectorBase::CSimplePromptingSelectorBase(const Meta::SMetaData& aSelectionPreferences)
+: CActive(CActive::EPriorityUserInput),
+ ASimpleSelectorBase(aSelectionPreferences)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+EXPORT_C CSimplePromptingSelectorBase::~CSimplePromptingSelectorBase()
+ {
+ static_cast<CActive*>(this)->Cancel();
+ iDlgServ.Close();
+ }
+
+EXPORT_C void CSimplePromptingSelectorBase::DoCancel()
+ {
+ iDlgServ.CancelIapConnection();
+ static_cast<MProviderSelector*>(this)->Cancel(); //Invoke the virtual Cancel not the CActive's one.
+ }
+
+EXPORT_C void CSimplePromptingSelectorBase::PromptUserL(ISelectionNotify& aSelectionNotify)
+ {
+ User::LeaveIfError(iDlgServ.Connect());
+ iDlgServ.AccessPointConnection(iSelectedAPId,KAfInet,iStatus);
+ SetActive();
+ iSelectionNotify = aSelectionNotify;
+ }
+
+//prompting for an IAP/Link level AP
+EXPORT_C void CSimplePromptingSelectorBase::PromptUserL(ESock::ISelectionNotify& aSelectionNotify,
+ const TConnectionPrefs& aPrefs)
+ {
+ User::LeaveIfError(iDlgServ.Connect());
+ iDlgServ.IapConnection(iSelectedAPId, aPrefs, iStatus);
+ SetActive();
+ iSelectionNotify = aSelectionNotify;
+ }
+
+