wlanutilities/wlanwizard/src/wlanwizardscanlist.cpp
branchRCL_3
changeset 24 63be7eb3fc78
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlanwizard/src/wlanwizardscanlist.cpp	Tue Aug 31 16:18:40 2010 +0300
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 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: 
+ *   Wlan Wizard Scan List: Hierarchical list of scan results that can be
+ *   utilized to limit available selection options in manual wlan wizard.
+ *
+ */
+
+// System includes
+#include <HbGlobal>
+#include <QString>
+#include <cmmanagerdefines_shim.h>
+#include <wlanqtutilsap.h>
+
+// User includes
+#include "wlanwizardscanlist.h"
+#include "wlanwizardpageinternal.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanwizardscanlistTraces.h"
+#endif
+
+
+/*!
+ * Constructor for WlanWizardScanList object.
+ */
+WlanWizardScanList::WlanWizardScanList(): mWpsSelected(false)
+{
+    OstTraceFunctionEntry0( WLANWIZARDSCANLIST_WLANWIZARDSCANLIST_ENTRY );
+
+    OstTraceFunctionExit0( WLANWIZARDSCANLIST_WLANWIZARDSCANLIST_EXIT );
+}
+
+/*!
+ * Copy Constructor for WlanWizardScanList object.
+ * @param [in] scanList is the object to be copied.
+ */
+WlanWizardScanList::WlanWizardScanList(const WlanWizardScanList &scanList):
+mOpenOptions(scanList.mOpenOptions), mWpsSelected(false)
+{
+    OstTraceFunctionEntry0( DUP1_WLANWIZARDSCANLIST_WLANWIZARDSCANLIST_ENTRY );
+
+    OstTraceFunctionExit0( DUP1_WLANWIZARDSCANLIST_WLANWIZARDSCANLIST_EXIT );
+}
+
+/*!
+ * Destructor for WlanWizardScanList object.
+ */
+WlanWizardScanList::~WlanWizardScanList()
+{
+    OstTraceFunctionEntry0( DUP2_WLANWIZARDSCANLIST_WLANWIZARDSCANLIST_ENTRY );
+
+    OstTraceFunctionExit0( DUP2_WLANWIZARDSCANLIST_WLANWIZARDSCANLIST_EXIT );
+}
+
+/*!
+ * This function builds a hash list of scan results. Key value in a hash item
+ * is the network mode and the associated value is a list of security modes.
+ * In other words, it is a list of network modes where each network mode points
+ * to one or more security modes.
+ * @param [in] results contains a list of scan results.
+ */
+void WlanWizardScanList::build(const QList<WlanScanResult> &results)
+{
+    OstTraceFunctionEntry0( WLANWIZARDSCANLIST_BUILD_ENTRY );
+    
+    mWpsSelected = true;
+    
+    for (int i = 0; i < results.size(); i++) {
+        WlanNetworkSetting netMode;
+        WlanSecuritySetting secMode;
+        WlanScanResult item = results.at(i);
+
+        netMode.wpsSupported = item.scanResult->value(WlanQtUtilsAp::ConfIdWpsSupported).toBool();
+        netMode.mode = item.scanResult->value(WlanQtUtilsAp::ConfIdConnectionMode).toInt();
+        netMode.hidden = (netMode.mode == CMManagerShim::Adhoc) ? false : item.networkHidden;
+
+        secMode.mode = item.scanResult->value(WlanQtUtilsAp::ConfIdSecurityMode).toInt();
+        secMode.usePsk = (secMode.mode == CMManagerShim::WlanSecModeWep) ? true
+            : item.scanResult->value(WlanQtUtilsAp::ConfIdWpaPskUse).toBool();
+
+        switch (secMode.mode) {
+        case CMManagerShim::WlanSecMode802_1x:
+            secMode.nextPageId = WlanWizardPage::PageEapStart;
+            break;
+
+        case CMManagerShim::WlanSecModeWep:
+            secMode.nextPageId = WlanWizardPageInternal::PageKeyQuery;
+            break;
+
+        case CMManagerShim::WlanSecModeWpa:
+        case CMManagerShim::WlanSecModeWpa2:
+            if (secMode.usePsk) {
+                secMode.nextPageId = WlanWizardPageInternal::PageKeyQuery;
+            }
+            else {
+                secMode.nextPageId = WlanWizardPage::PageEapStart;
+            }
+            break;
+
+        default:
+            Q_ASSERT(CMManagerShim::WlanSecModeOpen == secMode.mode ||
+                CMManagerShim::WlanSecModeWapi == secMode.mode);
+            secMode.nextPageId = WlanWizardPage::PageProcessSettings;
+            break;
+
+        }
+
+        // prevent duplicate settings.
+        if (!mOpenOptions.contains(netMode)) {
+            mWpsSelected = (mWpsSelected && netMode.wpsSupported);
+            QList<WlanSecuritySetting> secList;
+            secList.append(secMode);
+            mOpenOptions.insert(netMode, secList);
+        }
+        else if (!(mOpenOptions.find(netMode)->contains(secMode))) {
+            mOpenOptions.find(netMode)->append(secMode);  
+        }
+        // else an identical key-value pair is already in the list -> not added.
+    }
+    OstTraceFunctionExit0( WLANWIZARDSCANLIST_BUILD_EXIT );
+}
+
+/*!
+ * This function returns a security mode setting at the requested location.
+ * This function does not do any validity checks for the lists, so the user
+ * needs to use netModes and secModes functions to prevent over-indexing.
+ * @param [in] netMode key value for the hash list.
+ * @param [in] index list index pointing to the security mode item.
+ * @return security setting item reference.
+ */
+const WlanSecuritySetting &WlanWizardScanList::getSecMode(
+    WlanNetworkSetting netMode,
+    int index) const
+{
+    OstTraceFunctionEntry0( WLANWIZARDSCANLIST_GETSECMODE_ENTRY );
+    return mOpenOptions.value(netMode).at(index);
+}
+
+/*!
+ * The number of key values available in the hash list.
+ * @return the number of keys.
+ */
+int WlanWizardScanList::netModes() const
+{
+    OstTraceFunctionEntry0( WLANWIZARDSCANLIST_NETMODES_ENTRY );
+    return mOpenOptions.size();
+}
+
+/*!
+ * The size of the security mode list associated to a network mode.
+ * @param [in] netMode key value for the hash list.
+ * @return the size of the list associated with the key.
+ */
+int WlanWizardScanList::secModes(WlanNetworkSetting netMode) const
+{
+    OstTraceFunctionEntry0( WLANWIZARDSCANLIST_SECMODES_ENTRY );
+    Q_ASSERT(mOpenOptions.contains(netMode));
+    return mOpenOptions.find(netMode)->size();
+}
+
+/*!
+ * This function returns the list of keys in the hash.
+ * @return a list of keys.
+ */
+QList<WlanNetworkSetting> WlanWizardScanList::getNetModes() const
+{
+    OstTraceFunctionEntry0( WLANWIZARDSCANLIST_GETNETMODES_ENTRY );
+    return mOpenOptions.keys();
+}
+
+/*!
+ * This function indicates whether the list of scan results supports
+ * Wi-Fi Protected Setup.
+ * @return true, if all result network modes support wps, false if even
+ * a single result does not.
+ */
+bool WlanWizardScanList::wpsSelected() const
+{
+    OstTraceFunctionEntry0( WLANWIZARDSCANLIST_WPSSELECTED_ENTRY );
+    return mWpsSelected;
+}