wlanutilities/wlanqtutilities/base/src/wlanqtutilsiapsettings.cpp
branchRCL_3
changeset 25 f28ada11abbf
parent 24 63be7eb3fc78
--- a/wlanutilities/wlanqtutilities/base/src/wlanqtutilsiapsettings.cpp	Tue Aug 31 16:18:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,633 +0,0 @@
-/*
-* Copyright (c) 2009-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 Qt Utilities WLAN IAP settings handling.
-*/
-
-// System includes
-
-#include <QScopedPointer>
-#include <QSharedPointer>
-#include <QVariant>
-
-#include <cmmanager_shim.h>
-#include <cmdestination_shim.h>
-#include <cmconnectionmethod_shim.h>
-
-// User includes
-
-#include "wlanqtutils.h"
-#include "wlanqtutilsap.h"
-#include "wlanqtutilsiap.h"
-#include "wlanqtutilsiapsettings.h"
-
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "wlanqtutilsiapsettingsTraces.h"
-#endif
-
-/*!
-    \class WlanQtUtilsIapSettings
-    \brief WLAN IAP related settings handler.
-
-    Provides functionality to manipulate WLAN IAPs via the CM Manager Shim
-    interface.
-    
-    NOTE: Shim functions may throw exceptions that need to be catched in
-    this class.
-*/
-
-// External function prototypes
-
-// Local constants
-
-//! IAP trace types
-#define WLANQTUTILS_IAP_TRACE_FETCH     1
-#define WLANQTUTILS_IAP_TRACE_CREATE    2
-#define WLANQTUTILS_IAP_TRACE_UPDATE    3
-
-// WEP key lengths used to determine key format
-static const int WepHex64BitMaxLength = 10;
-static const int WepHex128BitMaxLength = 26;
-static const int WepAscii64BitMaxLength = 5;
-static const int WepAscii128BitMaxLength = 13;
-
-// ======== LOCAL FUNCTIONS ========
-
-// ======== MEMBER FUNCTIONS ========
-
-/*!
-    Constructor.
-    
-    @param [in] parent Parent object.
-*/
-
-WlanQtUtilsIapSettings::WlanQtUtilsIapSettings(QObject *parent) :
-    QObject(parent),
-    mCmManager(new CmManagerShim())
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_WLANQTUTILSIAPSETTINGS_ENTRY);
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_WLANQTUTILSIAPSETTINGS_EXIT);
-}
-
-/*!
-    Destructor.
-*/
-
-WlanQtUtilsIapSettings::~WlanQtUtilsIapSettings()
-{
-    OstTraceFunctionEntry0(DUP1_WLANQTUTILSIAPSETTINGS_WLANQTUTILSIAPSETTINGS_ENTRY);
-    
-    delete mCmManager;
-    
-    OstTraceFunctionExit0(DUP1_WLANQTUTILSIAPSETTINGS_WLANQTUTILSIAPSETTINGS_EXIT);
-}
-
-/*!
-    Fetch all WLAN IAPs.
-    
-    @param [out] iapList List of WLAN IAPs.
-*/
-
-void WlanQtUtilsIapSettings::fetchIaps(
-    QList< QSharedPointer<WlanQtUtilsIap> > &iapList) const
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_FETCHIAPS_ENTRY);
-    
-    // Clear the list content first for safety
-    iapList.clear();
-    
-    QList<uint> iapIds;
-    try {
-        mCmManager->connectionMethod(iapIds, false);
-    } catch (const std::exception &ex) {
-        int error = qt_symbian_exception2Error(ex);
-        OstTrace1(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_FETCHIAPS_EXCEPTION,
-            "WlanQtUtilsIapSettings::fetchIaps exception;error=%d",
-            error);
-    }
-
-#ifdef OST_TRACE_COMPILER_IN_USE
-    int iapCount = iapIds.count();
-    OstTrace1(
-        TRACE_NORMAL,
-        WLANQTUTILSIAPSETTINGS_FETCHIAPS_COUNT,
-        "WlanQtUtilsIapSettings::fetchIaps;iapCount=%d",
-        iapCount);
-#endif
-
-    foreach (uint iapId, iapIds) {
-        QSharedPointer<WlanQtUtilsIap> wlanIap = fetchIap(iapId);
-        if (wlanIap) {
-            iapList.append(wlanIap);
-        }
-    }
-    
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_FETCHIAPS_EXIT);
-}
-
-/*!
-    Fetch WLAN IAP with the given ID
-    
-    @param [in] iapId ID of IAP to fetch.
-    
-    @return Found IAP, NULL if not found.
-*/
-
-QSharedPointer<WlanQtUtilsIap> WlanQtUtilsIapSettings::fetchIap(uint iapId) const
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_FETCHIAP_ENTRY);
-
-    QSharedPointer<WlanQtUtilsIap> wlanIap;
-    try {
-        QScopedPointer<CmConnectionMethodShim> iap(
-            mCmManager->connectionMethod(iapId));
-        if (iap && iap->getIntAttribute(CMManagerShim::CmBearerType) ==
-            KUidWlanBearerType) {
-
-            // Get WLAN IAP parameters
-            int netId = iap->getIntAttribute(CMManagerShim::CmNetworkId);
-            QString name = iap->getStringAttribute(CMManagerShim::CmName);
-            QString ssid = iap->getStringAttribute(CMManagerShim::WlanSSID);
-            int connMode = iap->getIntAttribute(CMManagerShim::WlanConnectionMode);
-            int secMode = iap->getIntAttribute(
-                CMManagerShim::WlanSecurityMode);
-            bool wpaPskUse = iap->getBoolAttribute(
-                CMManagerShim::WlanEnableWpaPsk);
-    
-            // Create a WLAN Qt Utils IAP
-            wlanIap = QSharedPointer<WlanQtUtilsIap>(new WlanQtUtilsIap());
-            wlanIap->setValue(WlanQtUtilsIap::ConfIdIapId, iapId);
-            wlanIap->setValue(WlanQtUtilsIap::ConfIdNetworkId, netId);
-            wlanIap->setValue(WlanQtUtilsIap::ConfIdName, name);
-            wlanIap->setValue(WlanQtUtilsAp::ConfIdSsid, ssid);
-            wlanIap->setValue(WlanQtUtilsAp::ConfIdConnectionMode, connMode);
-            wlanIap->setValue(WlanQtUtilsAp::ConfIdSecurityMode, secMode);
-            wlanIap->setValue(WlanQtUtilsAp::ConfIdWpaPskUse, wpaPskUse);
-            
-            // Trace the fetched IAP
-            traceIap(
-                wlanIap.data(),
-                WLANQTUTILS_IAP_TRACE_FETCH,
-                iapId);
-        }
-    } catch (const std::exception &ex) {
-        int error = qt_symbian_exception2Error(ex);
-        OstTrace1(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_FETCHIAP_EXCEPTION,
-            "WlanQtUtilsIapSettings::fetchIap exception;error=%d",
-            error);
-    }
-    
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_FETCHIAP_EXIT);
-    return wlanIap;
-}
-
-/*!
-    Create a new WLAN IAP as an uncategorized IAP.
-    
-    @param [in] wlanAp Information about the WLAN AP.
-    
-    @return ID of the created IAP, IapIdNone in error cases.
-*/
-
-int WlanQtUtilsIapSettings::createIap(const WlanQtUtilsAp *wlanAp)
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_CREATEIAP_ENTRY);
-    
-    int iapId = WlanQtUtils::IapIdNone;
-    
-    try {
-        // Create the new IAP
-        QScopedPointer<CmConnectionMethodShim> iap(
-            mCmManager->createConnectionMethod(KUidWlanBearerType));
-        storeSettings(wlanAp, iap.data());
-        iapId = iap->getIntAttribute(CMManagerShim::CmIapId);
-        
-        // Trace the created IAP
-        traceIap(
-            wlanAp,
-            WLANQTUTILS_IAP_TRACE_CREATE,
-            iapId);
-    } catch (const std::exception &ex) {
-        // Trace error cause and return failure (default value) to caller.
-        int error = qt_symbian_exception2Error(ex);
-        OstTrace1(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_CREATEIAP_EXCEPTION,
-            "WlanQtUtilsIapSettings::createIap exception;error=%d",
-            error);
-    }
-    
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_CREATEIAP_EXIT);
-    return iapId;
-}
-
-/*!
-    Update the WLAN IAP given as parameter. All settings are stored to
-    database (again) without checking whether they have actually changed
-    or not.
-    
-    @param [in] iapId ID of IAP to update.
-    @param [in] wlanAp Information about the WLAN AP.
-    
-    @return Was update succesful or not?
-*/
-
-bool WlanQtUtilsIapSettings::updateIap(
-    int iapId,
-    const WlanQtUtilsAp *wlanAp)
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_UPDATEIAP_ENTRY);
-    
-    bool success = false;
-    
-    try {
-        QScopedPointer<CmConnectionMethodShim> iap(
-            mCmManager->connectionMethod(iapId));
-        storeSettings(wlanAp, iap.data());
-        // Trace the updated IAP
-        traceIap(
-            wlanAp,
-            WLANQTUTILS_IAP_TRACE_UPDATE,
-            iapId);
-        success = true;
-    } catch (const std::exception &ex) {
-        // Trace error cause and return failure (default value) to caller.
-        int error = qt_symbian_exception2Error(ex);
-        OstTrace1(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_UPDATEIAP_EXCEPTION,
-            "WlanQtUtilsIapSettings::updateIap exception;error=%d",
-            error);
-    }
-    
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_UPDATEIAP_EXIT);
-    return success;
-}
-
-/*!
-    Delete the WLAN IAP given as parameter.
-    
-    @param [in] iapId ID of IAP to delete.
-*/
-
-void WlanQtUtilsIapSettings::deleteIap(int iapId)
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_DELETEIAP_ENTRY);
-    
-    try {
-        QScopedPointer<CmConnectionMethodShim> iap(
-            mCmManager->connectionMethod(iapId));
-        iap->deleteConnectionMethod();
-    } catch (const std::exception &ex) {
-        // Just trace error cause. It is not fatal, if we are not able to
-        // delete the IAP. No need to retry, since errors should be very
-        // rare and user can delete the IAP later from Control Panel, if
-        // needed.
-        int error = qt_symbian_exception2Error(ex);
-        OstTrace1(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_DELETEIAP_EXCEPTION,
-            "WlanQtUtilsIapSettings::deleteIap exception;error=%d",
-            error);
-    }
-
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_DELETEIAP_EXIT);
-}
-
-/*!
-    Move IAP to the Internet SNAP.
-    
-    @param [in] iapId ID of the IAP to move.
-*/
-
-void WlanQtUtilsIapSettings::moveIapToInternetSnap(int iapId)
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_MOVEIAPTOINTERNETSNAP_ENTRY);
-    
-    // Read all destination (SNAP) IDs
-    QList<uint> destinations;
-    try {
-        mCmManager->allDestinations(destinations);
-        foreach (int destId, destinations) {
-            QScopedPointer<CmDestinationShim> destination(
-                mCmManager->destination(destId));
-        
-            // Internet destination will always exist in the system. It has 
-            // SnapPurposeInternet set in its metadata.
-            if (destination->metadata(CMManagerShim::SnapMetadataPurpose)
-                == CMManagerShim::SnapPurposeInternet) {
-                QScopedPointer<CmConnectionMethodShim> iap(
-                    mCmManager->connectionMethod(iapId));
-                destination->addConnectionMethod(iap.data());
-                destination->update();
-                break;
-            }
-        }
-    } catch (const std::exception &ex) {
-        int error = qt_symbian_exception2Error(ex);
-        OstTrace1(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_MOVEIAPTOINTERNETSNAP_EXCEPTION,
-            "WlanQtUtilsIapSettings::moveIapToInternetSnap exception;error=%d",
-            error);
-    }
-
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_MOVEIAPTOINTERNETSNAP_EXIT);
-}
-
-/*!
-    Set Hotspot metadata to the Hotspot IAP given as parameter.
-    
-    @param [in] iapId ID of IAP to set.
-*/
-
-void WlanQtUtilsIapSettings::setAsHotspotIap(int iapId)
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_SETASHOTSPOTIAP_ENTRY);
-        
-    try {
-        QScopedPointer<CmConnectionMethodShim> iap(
-            mCmManager->connectionMethod(iapId));
-        iap->setBoolAttribute(CMManagerShim::CmMetaHotSpot, true);
-        iap->update();
-    } catch (const std::exception &ex) {
-        // Just trace error cause. It is not fatal, if we are not able to
-        // set IAP as hotspot IAP. No need to retry, since errors should be very
-        // rare and it does not prevent connection opening of the hotspot IAP.
-        int error = qt_symbian_exception2Error(ex);
-        OstTrace1(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_SETASHOTSPOTIAP_EXCEPTION,
-            "WlanQtUtilsIapSettings::setAsHotspotIap exception;error=%d",
-            error);
-    }
-                 
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_SETASHOTSPOTIAP_EXIT);
-}
-
-/*!
-    Stores the given Wlan AP settings to database using CM Manager Shim.
-   
-    @param [in] wlanAp WLAN AP settings to store.
-    @param [in] iap WLAN IAP to store to.
-*/
-
-void WlanQtUtilsIapSettings::storeSettings(
-    const WlanQtUtilsAp *wlanAp,
-    CmConnectionMethodShim *iap)
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_STORESETTINGS_ENTRY);
-
-    int secMode = wlanAp->value(WlanQtUtilsAp::ConfIdSecurityMode).toInt();
-    QString ssid = wlanAp->value(WlanQtUtilsAp::ConfIdSsid).toString();
-
-    // Store general settings
-    iap->setStringAttribute(CMManagerShim::CmName, ssid);
-    iap->setStringAttribute(CMManagerShim::WlanSSID, ssid);
-    iap->setIntAttribute(CMManagerShim::WlanSecurityMode, secMode);
-    iap->setIntAttribute(
-        CMManagerShim::WlanConnectionMode, 
-        wlanAp->value(WlanQtUtilsAp::ConfIdConnectionMode).toInt());
-    iap->setBoolAttribute(
-        CMManagerShim::CmHidden,
-        wlanAp->value(WlanQtUtilsAp::ConfIdHidden).toBool());
-    iap->setBoolAttribute(
-        CMManagerShim::WlanScanSSID,
-        wlanAp->value(WlanQtUtilsAp::ConfIdWlanScanSSID).toBool());
-
-    // Store the WEP settings
-    storeWepKey(
-        wlanAp->value(WlanQtUtilsAp::ConfIdWepKey1).toString(),
-        1,
-        iap);
-    storeWepKey(
-        wlanAp->value(WlanQtUtilsAp::ConfIdWepKey2).toString(),
-        2,
-        iap);
-    storeWepKey(
-        wlanAp->value(WlanQtUtilsAp::ConfIdWepKey3).toString(),
-        3,
-        iap);
-    storeWepKey(
-        wlanAp->value(WlanQtUtilsAp::ConfIdWepKey4).toString(),
-        4,
-        iap);
-    iap->setIntAttribute(
-        CMManagerShim::WlanWepKeyIndex,
-        wlanAp->value(WlanQtUtilsAp::ConfIdWepDefaultIndex).toInt());
-
-    // Store WPA PSK settings
-    bool usePsk = wlanAp->value(WlanQtUtilsAp::ConfIdWpaPskUse).toBool();
-    iap->setBoolAttribute(CMManagerShim::WlanEnableWpaPsk, usePsk);
-    QString wpaKey(wlanAp->value(WlanQtUtilsAp::ConfIdWpaPsk).toString());
-    iap->setString8Attribute(CMManagerShim::WlanWpaPreSharedKey, wpaKey);
-
-    // Write the settings.
-    iap->update();
-
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_STORESETTINGS_EXIT);
-}
-
-/*!
-    Stores the given valid WEP key to database using CM Manager Shim. If key
-    is not used an empty key must be provided.
-  
-    @note This method MUST not be called for invalid WEP Keys and/or indexes.
-          Wlanwizard validates keys, before accepting user input.
-          
-    @param [in] key Key to write.
-    @param [in] index Key index. Valid range is [0,4].
-    @param [in] iap WLAN IAP to store the key into.
-*/
-
-void WlanQtUtilsIapSettings::storeWepKey(
-    const QString &key,
-    int index,
-    CmConnectionMethodShim *iap)
-{
-    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_STOREWEPKEY_ENTRY);
-    
-    int length = key.length();
-    if (length == WepHex64BitMaxLength || length == WepHex128BitMaxLength) {
-        // HEX
-        iap->setString8Attribute(mapWepKeyIndexHex(index), key);
-    } else if (length == WepAscii64BitMaxLength || length == WepAscii128BitMaxLength) {
-        // ASCII
-        iap->setString8Attribute(mapWepKeyIndexAscii(index), key);
-    } else {
-        // Length must always be a valid one or zero
-        Q_ASSERT(length == 0);
-        
-        // Write default value. Note that the key is stored in the same data
-        // field regardless of the format so writing only one key is enough.
-        iap->setString8Attribute(mapWepKeyIndexHex(index), key);
-    }
-
-    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_STOREWEPKEY_EXIT);
-}
-
-/*!
-    Maps given Hex WEP key index into the corresponding CM Manager Connection
-    Method attribute.
-    
-    @param [in] index Hex WEP key index [1,4].
-    
-    @return Connection Method attribute. 
-*/
-
-CMManagerShim::ConnectionMethodAttribute WlanQtUtilsIapSettings::mapWepKeyIndexHex(
-    int index)
-{
-    CMManagerShim::ConnectionMethodAttribute attribute = 
-        CMManagerShim::WlanWepKey1InHex;
-    
-    switch (index) {
-    case 1:
-        attribute = CMManagerShim::WlanWepKey1InHex;
-        break;
-        
-    case 2:
-        attribute = CMManagerShim::WlanWepKey2InHex;
-        break;
-        
-    case 3:
-        attribute = CMManagerShim::WlanWepKey3InHex;
-        break;
-        
-    case 4:
-        attribute = CMManagerShim::WlanWepKey4InHex;
-        break;
-        
-#ifndef QT_NO_DEBUG
-    default:
-        // Invalid key index detected
-        Q_ASSERT(0);
-        break;
-#endif
-    }
-
-    return attribute;
-}
-
-/*!
-    Maps given Ascii WEP key index into the corresponding CM Manager Connection
-    Method attribute.
-    
-    @param [in] index Ascii WEP key index [1,4].
-    
-    @return Connection Method attribute. 
-*/
-
-CMManagerShim::ConnectionMethodAttribute WlanQtUtilsIapSettings::mapWepKeyIndexAscii(
-    int index)
-{
-    CMManagerShim::ConnectionMethodAttribute attribute = 
-        CMManagerShim::WlanWepKey1InAscii;
-
-    switch (index) {
-    case 1:
-        attribute = CMManagerShim::WlanWepKey1InAscii;
-        break;
-        
-    case 2:
-        attribute = CMManagerShim::WlanWepKey2InAscii;
-        break;
-        
-    case 3:
-        attribute = CMManagerShim::WlanWepKey3InAscii;
-        break;
-
-    case 4:
-        attribute = CMManagerShim::WlanWepKey4InAscii;
-        break;
-        
-#ifndef QT_NO_DEBUG
-    default:
-        // Invalid key index detected
-        Q_ASSERT(0);
-        break;
-#endif            
-    }
-
-    return attribute;
-}
-
-/*
-    Traces given IAP (which is taken in as an AP).
-
-    @param [in] ap IAP to trace.
-    @param [in] traceType Trace type (WLANQTUTILS_IAP_TRACE_*).
-    @param [in] iapId IAP ID.
-*/
-
-void WlanQtUtilsIapSettings::traceIap(
-    const WlanQtUtilsAp *ap,
-    int traceType,
-    uint iapId) const
-{
-#ifndef OST_TRACE_COMPILER_IN_USE
-    Q_UNUSED(ap);
-    Q_UNUSED(traceType);
-    Q_UNUSED(iapId);
-#else    
-    QString ssid_string(ap->value(WlanQtUtilsAp::ConfIdSsid).toString());
-    TPtrC16 ssid(ssid_string.utf16(), ssid_string.length());
-    int secMode = ap->value(WlanQtUtilsAp::ConfIdSecurityMode).toInt();
-    int connMode = ap->value(WlanQtUtilsAp::ConfIdConnectionMode).toInt();    
-    bool useWpaPsk = ap->value(WlanQtUtilsAp::ConfIdWpaPskUse).toBool();
-    
-    switch (traceType) {
-    case WLANQTUTILS_IAP_TRACE_FETCH:
-        OstTraceExt5(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_TRACEIAP_FETCH,
-            "WlanQtUtilsIapSettings::traceIap Fetched;iapId=%u;ssid=%S;secMode=%{WlanSecMode};useWpaPsk=%u;connMode=%{WlanConnMode}",
-            iapId,
-            ssid,
-            secMode,
-            useWpaPsk,
-            connMode);
-        break;
-
-    case WLANQTUTILS_IAP_TRACE_CREATE:
-        OstTraceExt5(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_TRACEIAP_CREATE,
-            "WlanQtUtilsIapSettings::traceIap Created;iapId=%u;ssid=%S;secMode=%{WlanSecMode};useWpaPsk=%u;connMode=%{WlanConnMode}",
-            iapId,
-            ssid,
-            secMode,
-            useWpaPsk,
-            connMode);
-        break;
-
-    case WLANQTUTILS_IAP_TRACE_UPDATE:
-        OstTraceExt5(
-            TRACE_NORMAL,
-            WLANQTUTILSIAPSETTINGS_TRACEIAP_UPDATE,
-            "WlanQtUtilsIapSettings::traceIap Updated;iapId=%u;ssid=%S;secMode=%{WlanSecMode};useWpaPsk=%u;connMode=%{WlanConnMode}",
-            iapId,
-            ssid,
-            secMode,
-            useWpaPsk,
-            connMode);
-        break;
-    }
-#endif
-}