wlanutilities/wlanqtutilities/base/src/wlanqtutilsiapsettings.cpp
author hgs
Mon, 24 May 2010 21:11:39 +0300
changeset 31 e8f4211554fb
child 39 7b3e49e4608a
permissions -rw-r--r--
201021
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: 
hgs
parents:
diff changeset
    15
* WLAN Qt Utilities WLAN IAP settings handling.
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// System includes
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include <QScopedPointer>
hgs
parents:
diff changeset
    21
#include <QSharedPointer>
hgs
parents:
diff changeset
    22
#include <QVariant>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <cmmanager_shim.h>
hgs
parents:
diff changeset
    25
#include <cmdestination_shim.h>
hgs
parents:
diff changeset
    26
#include <cmconnectionmethod_shim.h>
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
// User includes
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include "wlanqtutils.h"
hgs
parents:
diff changeset
    31
#include "wlanqtutilsap.h"
hgs
parents:
diff changeset
    32
#include "wlanqtutilsiap.h"
hgs
parents:
diff changeset
    33
#include "wlanqtutilsiapsettings.h"
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#include "OstTraceDefinitions.h"
hgs
parents:
diff changeset
    36
#ifdef OST_TRACE_COMPILER_IN_USE
hgs
parents:
diff changeset
    37
#include "wlanqtutilsiapsettingsTraces.h"
hgs
parents:
diff changeset
    38
#endif
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
/*!
hgs
parents:
diff changeset
    41
    \class WlanQtUtilsIapSettings
hgs
parents:
diff changeset
    42
    \brief WLAN IAP related settings handler.
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
    Provides functionality to manipulate WLAN IAPs via the CM Manager Shim
hgs
parents:
diff changeset
    45
    interface.
hgs
parents:
diff changeset
    46
    
hgs
parents:
diff changeset
    47
    NOTE: Shim functions may throw exceptions that need to be catched in
hgs
parents:
diff changeset
    48
    this class.
hgs
parents:
diff changeset
    49
*/
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
// External function prototypes
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
// Local constants
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
// WEP key lengths used to determine key format
hgs
parents:
diff changeset
    56
static const int WepHex64BitMaxLength = 10;
hgs
parents:
diff changeset
    57
static const int WepHex128BitMaxLength = 26;
hgs
parents:
diff changeset
    58
static const int WepAscii64BitMaxLength = 5;
hgs
parents:
diff changeset
    59
static const int WepAscii128BitMaxLength = 13;
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
// ======== LOCAL FUNCTIONS ========
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
/*!
hgs
parents:
diff changeset
    66
    Constructor.
hgs
parents:
diff changeset
    67
    
hgs
parents:
diff changeset
    68
    @param [in] parent Parent object.
hgs
parents:
diff changeset
    69
*/
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
WlanQtUtilsIapSettings::WlanQtUtilsIapSettings(QObject *parent) :
hgs
parents:
diff changeset
    72
    QObject(parent),
hgs
parents:
diff changeset
    73
    mCmManager(new CmManagerShim())
hgs
parents:
diff changeset
    74
{
hgs
parents:
diff changeset
    75
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_WLANQTUTILSIAPSETTINGS_ENTRY);
hgs
parents:
diff changeset
    76
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_WLANQTUTILSIAPSETTINGS_EXIT);
hgs
parents:
diff changeset
    77
}
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
/*!
hgs
parents:
diff changeset
    80
    Destructor.
hgs
parents:
diff changeset
    81
*/
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
WlanQtUtilsIapSettings::~WlanQtUtilsIapSettings()
hgs
parents:
diff changeset
    84
{
hgs
parents:
diff changeset
    85
    OstTraceFunctionEntry0(DUP1_WLANQTUTILSIAPSETTINGS_WLANQTUTILSIAPSETTINGS_ENTRY);
hgs
parents:
diff changeset
    86
    
hgs
parents:
diff changeset
    87
    delete mCmManager;
hgs
parents:
diff changeset
    88
    
hgs
parents:
diff changeset
    89
    OstTraceFunctionExit0(DUP1_WLANQTUTILSIAPSETTINGS_WLANQTUTILSIAPSETTINGS_EXIT);
hgs
parents:
diff changeset
    90
}
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
/*!
hgs
parents:
diff changeset
    93
    Fetch all WLAN IAPs.
hgs
parents:
diff changeset
    94
    
hgs
parents:
diff changeset
    95
    @param [out] iapList List of WLAN IAPs.
hgs
parents:
diff changeset
    96
*/
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
void WlanQtUtilsIapSettings::fetchIaps(
hgs
parents:
diff changeset
    99
    QList< QSharedPointer<WlanQtUtilsIap> > &iapList) const
hgs
parents:
diff changeset
   100
{
hgs
parents:
diff changeset
   101
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_FETCHIAPS_ENTRY);
hgs
parents:
diff changeset
   102
    
hgs
parents:
diff changeset
   103
    // Clear the list content first for safety
hgs
parents:
diff changeset
   104
    iapList.clear();
hgs
parents:
diff changeset
   105
    
hgs
parents:
diff changeset
   106
    QList<uint> iapIds;
hgs
parents:
diff changeset
   107
    try {
hgs
parents:
diff changeset
   108
        mCmManager->connectionMethod(iapIds, false);
hgs
parents:
diff changeset
   109
    } catch (const std::exception &ex) {
hgs
parents:
diff changeset
   110
        int error = qt_symbian_exception2Error(ex);
hgs
parents:
diff changeset
   111
        OstTrace1(
hgs
parents:
diff changeset
   112
            TRACE_NORMAL,
hgs
parents:
diff changeset
   113
            WLANQTUTILSIAPSETTINGS_FETCHIAPS_EXCEPTION,
hgs
parents:
diff changeset
   114
            "WlanQtUtilsIapSettings::fetchIaps exception;error=%d",
hgs
parents:
diff changeset
   115
            error);
hgs
parents:
diff changeset
   116
    }
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
    foreach (int iapId, iapIds) {
hgs
parents:
diff changeset
   119
        QSharedPointer<WlanQtUtilsIap> wlanIap = fetchIap(iapId);
hgs
parents:
diff changeset
   120
        if (wlanIap) {
hgs
parents:
diff changeset
   121
            iapList.append(wlanIap);
hgs
parents:
diff changeset
   122
        }
hgs
parents:
diff changeset
   123
    }
hgs
parents:
diff changeset
   124
    
hgs
parents:
diff changeset
   125
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_FETCHIAPS_EXIT);
hgs
parents:
diff changeset
   126
}
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
/*!
hgs
parents:
diff changeset
   129
    Fetch WLAN IAP with the given ID
hgs
parents:
diff changeset
   130
    
hgs
parents:
diff changeset
   131
    @param [in] iapId ID of IAP to fetch.
hgs
parents:
diff changeset
   132
    
hgs
parents:
diff changeset
   133
    @return Found IAP, NULL if not found.
hgs
parents:
diff changeset
   134
*/
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
QSharedPointer<WlanQtUtilsIap> WlanQtUtilsIapSettings::fetchIap(int iapId) const
hgs
parents:
diff changeset
   137
{
hgs
parents:
diff changeset
   138
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_FETCHIAP_ENTRY);
hgs
parents:
diff changeset
   139
    
hgs
parents:
diff changeset
   140
    OstTrace1(
hgs
parents:
diff changeset
   141
        TRACE_NORMAL,
hgs
parents:
diff changeset
   142
        WLANQTUTILSIAPSETTINGS_FETCHIAP,
hgs
parents:
diff changeset
   143
        "WlanQtUtilsIapSettings::fetchIap;iapId=%d",
hgs
parents:
diff changeset
   144
        iapId);
hgs
parents:
diff changeset
   145
    
hgs
parents:
diff changeset
   146
    QSharedPointer<WlanQtUtilsIap> wlanIap;
hgs
parents:
diff changeset
   147
    try {
hgs
parents:
diff changeset
   148
        QScopedPointer<CmConnectionMethodShim> iap(
hgs
parents:
diff changeset
   149
            mCmManager->connectionMethod(iapId));
hgs
parents:
diff changeset
   150
        if (iap && iap->getIntAttribute(CMManagerShim::CmBearerType) ==
hgs
parents:
diff changeset
   151
            KUidWlanBearerType) {
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
            // Get WLAN IAP parameters
hgs
parents:
diff changeset
   154
            int netId = iap->getIntAttribute(CMManagerShim::CmNetworkId);
hgs
parents:
diff changeset
   155
            QString name = iap->getStringAttribute(CMManagerShim::CmName);
hgs
parents:
diff changeset
   156
            QString ssid = iap->getStringAttribute(CMManagerShim::WlanSSID);
hgs
parents:
diff changeset
   157
            int secMode = iap->getIntAttribute(
hgs
parents:
diff changeset
   158
                CMManagerShim::WlanSecurityMode);
hgs
parents:
diff changeset
   159
            bool wpaPskUse = iap->getBoolAttribute(
hgs
parents:
diff changeset
   160
                CMManagerShim::WlanEnableWpaPsk);
hgs
parents:
diff changeset
   161
    
hgs
parents:
diff changeset
   162
            // Create a WLAN Qt Utils IAP
hgs
parents:
diff changeset
   163
            wlanIap = QSharedPointer<WlanQtUtilsIap>(new WlanQtUtilsIap());
hgs
parents:
diff changeset
   164
            wlanIap->setValue(WlanQtUtilsIap::ConfIdIapId, iapId);
hgs
parents:
diff changeset
   165
            wlanIap->setValue(WlanQtUtilsIap::ConfIdNetworkId, netId);
hgs
parents:
diff changeset
   166
            wlanIap->setValue(WlanQtUtilsIap::ConfIdName, name);
hgs
parents:
diff changeset
   167
            wlanIap->setValue(WlanQtUtilsAp::ConfIdSsid, ssid);
hgs
parents:
diff changeset
   168
            wlanIap->setValue(WlanQtUtilsAp::ConfIdSecurityMode, secMode);
hgs
parents:
diff changeset
   169
            wlanIap->setValue(WlanQtUtilsAp::ConfIdWpaPskUse, wpaPskUse);
hgs
parents:
diff changeset
   170
        }
hgs
parents:
diff changeset
   171
    } catch (const std::exception &ex) {
hgs
parents:
diff changeset
   172
        int error = qt_symbian_exception2Error(ex);
hgs
parents:
diff changeset
   173
        OstTrace1(
hgs
parents:
diff changeset
   174
            TRACE_NORMAL,
hgs
parents:
diff changeset
   175
            WLANQTUTILSIAPSETTINGS_FETCHIAP_EXCEPTION,
hgs
parents:
diff changeset
   176
            "WlanQtUtilsIapSettings::fetchIap exception;error=%d",
hgs
parents:
diff changeset
   177
            error);
hgs
parents:
diff changeset
   178
    }
hgs
parents:
diff changeset
   179
    
hgs
parents:
diff changeset
   180
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_FETCHIAP_EXIT);
hgs
parents:
diff changeset
   181
    return wlanIap;
hgs
parents:
diff changeset
   182
}
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
/*!
hgs
parents:
diff changeset
   185
    Create a new WLAN IAP as an uncategorized IAP.
hgs
parents:
diff changeset
   186
    
hgs
parents:
diff changeset
   187
    @param [in] wlanAp Information about the WLAN AP.
hgs
parents:
diff changeset
   188
    
hgs
parents:
diff changeset
   189
    @return ID of the created IAP, IapIdNone in error cases.
hgs
parents:
diff changeset
   190
*/
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
int WlanQtUtilsIapSettings::createIap(const WlanQtUtilsAp *wlanAp)
hgs
parents:
diff changeset
   193
{
hgs
parents:
diff changeset
   194
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_CREATEIAP_ENTRY);
hgs
parents:
diff changeset
   195
    
hgs
parents:
diff changeset
   196
    int iapId = WlanQtUtils::IapIdNone;
hgs
parents:
diff changeset
   197
    
hgs
parents:
diff changeset
   198
    try {
hgs
parents:
diff changeset
   199
        // Create the new IAP
hgs
parents:
diff changeset
   200
        QScopedPointer<CmConnectionMethodShim> iap(
hgs
parents:
diff changeset
   201
            mCmManager->createConnectionMethod(KUidWlanBearerType));
hgs
parents:
diff changeset
   202
        storeSettings(wlanAp, iap.data());
hgs
parents:
diff changeset
   203
        iapId = iap->getIntAttribute(CMManagerShim::CmIapId);
hgs
parents:
diff changeset
   204
    } catch (const std::exception &ex) {
hgs
parents:
diff changeset
   205
        // Trace error cause and return failure (default value) to caller.
hgs
parents:
diff changeset
   206
        int error = qt_symbian_exception2Error(ex);
hgs
parents:
diff changeset
   207
        OstTrace1(
hgs
parents:
diff changeset
   208
            TRACE_NORMAL,
hgs
parents:
diff changeset
   209
            WLANQTUTILSIAPSETTINGS_CREATEIAP_EXCEPTION,
hgs
parents:
diff changeset
   210
            "WlanQtUtilsIapSettings::createIap exception;error=%d",
hgs
parents:
diff changeset
   211
            error);
hgs
parents:
diff changeset
   212
    }
hgs
parents:
diff changeset
   213
    
hgs
parents:
diff changeset
   214
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_CREATEIAP_EXIT);
hgs
parents:
diff changeset
   215
    return iapId;
hgs
parents:
diff changeset
   216
}
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
/*!
hgs
parents:
diff changeset
   219
    Update the WLAN IAP given as parameter. All settings are stored to
hgs
parents:
diff changeset
   220
    database (again) without checking whether they have actually changed
hgs
parents:
diff changeset
   221
    or not.
hgs
parents:
diff changeset
   222
    
hgs
parents:
diff changeset
   223
    @param [in] iapId ID of IAP to update.
hgs
parents:
diff changeset
   224
    @param [in] wlanAp Information about the WLAN AP.
hgs
parents:
diff changeset
   225
    
hgs
parents:
diff changeset
   226
    @return Was update succesful or not?
hgs
parents:
diff changeset
   227
*/
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
bool WlanQtUtilsIapSettings::updateIap(
hgs
parents:
diff changeset
   230
    int iapId,
hgs
parents:
diff changeset
   231
    const WlanQtUtilsAp *wlanAp)
hgs
parents:
diff changeset
   232
{
hgs
parents:
diff changeset
   233
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_UPDATEIAP_ENTRY);
hgs
parents:
diff changeset
   234
    
hgs
parents:
diff changeset
   235
    bool success = false;
hgs
parents:
diff changeset
   236
    
hgs
parents:
diff changeset
   237
    try {
hgs
parents:
diff changeset
   238
        QScopedPointer<CmConnectionMethodShim> iap(
hgs
parents:
diff changeset
   239
            mCmManager->connectionMethod(iapId));
hgs
parents:
diff changeset
   240
        storeSettings(wlanAp, iap.data());
hgs
parents:
diff changeset
   241
        success = true;
hgs
parents:
diff changeset
   242
    } catch (const std::exception &ex) {
hgs
parents:
diff changeset
   243
        // Trace error cause and return failure (default value) to caller.
hgs
parents:
diff changeset
   244
        int error = qt_symbian_exception2Error(ex);
hgs
parents:
diff changeset
   245
        OstTrace1(
hgs
parents:
diff changeset
   246
            TRACE_NORMAL,
hgs
parents:
diff changeset
   247
            WLANQTUTILSIAPSETTINGS_UPDATEIAP_EXCEPTION,
hgs
parents:
diff changeset
   248
            "WlanQtUtilsIapSettings::updateIap exception;error=%d",
hgs
parents:
diff changeset
   249
            error);
hgs
parents:
diff changeset
   250
    }
hgs
parents:
diff changeset
   251
    
hgs
parents:
diff changeset
   252
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_UPDATEIAP_EXIT);
hgs
parents:
diff changeset
   253
    return success;
hgs
parents:
diff changeset
   254
}
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
/*!
hgs
parents:
diff changeset
   257
    Delete the WLAN IAP given as parameter.
hgs
parents:
diff changeset
   258
    
hgs
parents:
diff changeset
   259
    @param [in] iapId ID of IAP to delete.
hgs
parents:
diff changeset
   260
*/
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
void WlanQtUtilsIapSettings::deleteIap(int iapId)
hgs
parents:
diff changeset
   263
{
hgs
parents:
diff changeset
   264
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_DELETEIAP_ENTRY);
hgs
parents:
diff changeset
   265
    
hgs
parents:
diff changeset
   266
    try {
hgs
parents:
diff changeset
   267
        QScopedPointer<CmConnectionMethodShim> iap(
hgs
parents:
diff changeset
   268
            mCmManager->connectionMethod(iapId));
hgs
parents:
diff changeset
   269
        iap->deleteConnectionMethod();
hgs
parents:
diff changeset
   270
    } catch (const std::exception &ex) {
hgs
parents:
diff changeset
   271
        // Just trace error cause. It is not fatal, if we are not able to
hgs
parents:
diff changeset
   272
        // delete the IAP. No need to retry, since errors should be very
hgs
parents:
diff changeset
   273
        // rare and user can delete the IAP later from Control Panel, if
hgs
parents:
diff changeset
   274
        // needed.
hgs
parents:
diff changeset
   275
        int error = qt_symbian_exception2Error(ex);
hgs
parents:
diff changeset
   276
        OstTrace1(
hgs
parents:
diff changeset
   277
            TRACE_NORMAL,
hgs
parents:
diff changeset
   278
            WLANQTUTILSIAPSETTINGS_DELETEIAP_EXCEPTION,
hgs
parents:
diff changeset
   279
            "WlanQtUtilsIapSettings::deleteIap exception;error=%d",
hgs
parents:
diff changeset
   280
            error);
hgs
parents:
diff changeset
   281
    }
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_DELETEIAP_EXIT);
hgs
parents:
diff changeset
   284
}
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
/*!
hgs
parents:
diff changeset
   287
    Move IAP to the Internet SNAP.
hgs
parents:
diff changeset
   288
    
hgs
parents:
diff changeset
   289
    @param [in] iapId ID of the IAP to move.
hgs
parents:
diff changeset
   290
*/
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
void WlanQtUtilsIapSettings::moveIapToInternetSnap(int iapId)
hgs
parents:
diff changeset
   293
{
hgs
parents:
diff changeset
   294
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_MOVEIAPTOINTERNETSNAP_ENTRY);
hgs
parents:
diff changeset
   295
    
hgs
parents:
diff changeset
   296
    // Read all destination (SNAP) IDs
hgs
parents:
diff changeset
   297
    QList<uint> destinations;
hgs
parents:
diff changeset
   298
    try {
hgs
parents:
diff changeset
   299
        mCmManager->allDestinations(destinations);
hgs
parents:
diff changeset
   300
        foreach (int destId, destinations) {
hgs
parents:
diff changeset
   301
            QScopedPointer<CmDestinationShim> destination(
hgs
parents:
diff changeset
   302
                mCmManager->destination(destId));
hgs
parents:
diff changeset
   303
        
hgs
parents:
diff changeset
   304
            // Internet destination will always exist in the system. It has 
hgs
parents:
diff changeset
   305
            // SnapPurposeInternet set in its metadata.
hgs
parents:
diff changeset
   306
            if (destination->metadata(CMManagerShim::SnapMetadataPurpose)
hgs
parents:
diff changeset
   307
                == CMManagerShim::SnapPurposeInternet) {
hgs
parents:
diff changeset
   308
                QScopedPointer<CmConnectionMethodShim> iap(
hgs
parents:
diff changeset
   309
                    mCmManager->connectionMethod(iapId));
hgs
parents:
diff changeset
   310
                destination->addConnectionMethod(iap.data());
hgs
parents:
diff changeset
   311
                destination->update();
hgs
parents:
diff changeset
   312
                break;
hgs
parents:
diff changeset
   313
            }
hgs
parents:
diff changeset
   314
        }
hgs
parents:
diff changeset
   315
    } catch (const std::exception &ex) {
hgs
parents:
diff changeset
   316
        int error = qt_symbian_exception2Error(ex);
hgs
parents:
diff changeset
   317
        OstTrace1(
hgs
parents:
diff changeset
   318
            TRACE_NORMAL,
hgs
parents:
diff changeset
   319
            WLANQTUTILSIAPSETTINGS_MOVEIAPTOINTERNETSNAP_EXCEPTION,
hgs
parents:
diff changeset
   320
            "WlanQtUtilsIapSettings::moveIapToInternetSnap exception;error=%d",
hgs
parents:
diff changeset
   321
            error);
hgs
parents:
diff changeset
   322
    }
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_MOVEIAPTOINTERNETSNAP_EXIT);
hgs
parents:
diff changeset
   325
}
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
/*!
hgs
parents:
diff changeset
   328
    Stores the given Wlan AP settings to database using CM Manager Shim.
hgs
parents:
diff changeset
   329
   
hgs
parents:
diff changeset
   330
    @param [in] wlanAp WLAN AP settings to store.
hgs
parents:
diff changeset
   331
    @param [in] iap WLAN IAP to store to.
hgs
parents:
diff changeset
   332
*/
hgs
parents:
diff changeset
   333
hgs
parents:
diff changeset
   334
void WlanQtUtilsIapSettings::storeSettings(
hgs
parents:
diff changeset
   335
    const WlanQtUtilsAp *wlanAp,
hgs
parents:
diff changeset
   336
    CmConnectionMethodShim *iap)
hgs
parents:
diff changeset
   337
{
hgs
parents:
diff changeset
   338
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_STORESETTINGS_ENTRY);
hgs
parents:
diff changeset
   339
    
hgs
parents:
diff changeset
   340
    int secMode = wlanAp->value(WlanQtUtilsAp::ConfIdSecurityMode).toInt();
hgs
parents:
diff changeset
   341
    QString ssid = wlanAp->value(WlanQtUtilsAp::ConfIdSsid).toString();
hgs
parents:
diff changeset
   342
    
hgs
parents:
diff changeset
   343
    // Store general values
hgs
parents:
diff changeset
   344
    iap->setStringAttribute(CMManagerShim::CmName, ssid);
hgs
parents:
diff changeset
   345
    iap->setStringAttribute(CMManagerShim::WlanSSID, ssid);
hgs
parents:
diff changeset
   346
    iap->setIntAttribute(CMManagerShim::WlanSecurityMode, secMode);
hgs
parents:
diff changeset
   347
    iap->setIntAttribute(
hgs
parents:
diff changeset
   348
        CMManagerShim::WlanConnectionMode, 
hgs
parents:
diff changeset
   349
        wlanAp->value(WlanQtUtilsAp::ConfIdConnectionMode).toInt());
hgs
parents:
diff changeset
   350
    
hgs
parents:
diff changeset
   351
    switch (secMode) {
hgs
parents:
diff changeset
   352
    case CMManagerShim::WlanSecModeWep:
hgs
parents:
diff changeset
   353
        // Store the 4 WEP keys (function does nothing, if a key is not set)
hgs
parents:
diff changeset
   354
        storeWepKey(
hgs
parents:
diff changeset
   355
            wlanAp->value(WlanQtUtilsAp::ConfIdWepKey1).toString(),
hgs
parents:
diff changeset
   356
            1,
hgs
parents:
diff changeset
   357
            iap);
hgs
parents:
diff changeset
   358
        storeWepKey(
hgs
parents:
diff changeset
   359
            wlanAp->value(WlanQtUtilsAp::ConfIdWepKey2).toString(),
hgs
parents:
diff changeset
   360
            2,
hgs
parents:
diff changeset
   361
            iap);
hgs
parents:
diff changeset
   362
        storeWepKey(
hgs
parents:
diff changeset
   363
            wlanAp->value(WlanQtUtilsAp::ConfIdWepKey3).toString(),
hgs
parents:
diff changeset
   364
            3,
hgs
parents:
diff changeset
   365
            iap);
hgs
parents:
diff changeset
   366
        storeWepKey(
hgs
parents:
diff changeset
   367
            wlanAp->value(WlanQtUtilsAp::ConfIdWepKey4).toString(),
hgs
parents:
diff changeset
   368
            4,
hgs
parents:
diff changeset
   369
            iap);
hgs
parents:
diff changeset
   370
        
hgs
parents:
diff changeset
   371
        iap->setIntAttribute(
hgs
parents:
diff changeset
   372
            CMManagerShim::WlanWepKeyIndex,
hgs
parents:
diff changeset
   373
            wlanAp->value(WlanQtUtilsAp::ConfIdWepDefaultIndex).toInt());
hgs
parents:
diff changeset
   374
        break;
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
    case CMManagerShim::WlanSecModeWpa:
hgs
parents:
diff changeset
   377
    case CMManagerShim::WlanSecModeWpa2:
hgs
parents:
diff changeset
   378
        // Store WPA PSK values
hgs
parents:
diff changeset
   379
        bool usePsk = wlanAp->value(WlanQtUtilsAp::ConfIdWpaPskUse).toBool();
hgs
parents:
diff changeset
   380
        iap->setBoolAttribute(CMManagerShim::WlanEnableWpaPsk, usePsk);
hgs
parents:
diff changeset
   381
        if (usePsk) {
hgs
parents:
diff changeset
   382
            QString wpaKey(wlanAp->value(WlanQtUtilsAp::ConfIdWpaPsk ).toString());
hgs
parents:
diff changeset
   383
            iap->setString8Attribute(CMManagerShim::WlanWpaPreSharedKey, wpaKey);
hgs
parents:
diff changeset
   384
        }
hgs
parents:
diff changeset
   385
        break;
hgs
parents:
diff changeset
   386
    }
hgs
parents:
diff changeset
   387
    
hgs
parents:
diff changeset
   388
    iap->update();
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_STORESETTINGS_EXIT);
hgs
parents:
diff changeset
   391
}
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
/*!
hgs
parents:
diff changeset
   394
    Stores the given valid WEP key to database using CM Manager Shim. Ignores
hgs
parents:
diff changeset
   395
    keys with zero length.
hgs
parents:
diff changeset
   396
  
hgs
parents:
diff changeset
   397
    @note This method MUST not be called for invalid WEP Keys. Wlanwizard
hgs
parents:
diff changeset
   398
          validates keys, before accepting user input.
hgs
parents:
diff changeset
   399
          
hgs
parents:
diff changeset
   400
    @param [in] key Key to write.
hgs
parents:
diff changeset
   401
    @param [in] index Key index. Valid range is [0,4].
hgs
parents:
diff changeset
   402
    @param [in] iap WLAN IAP to store the key into.
hgs
parents:
diff changeset
   403
*/
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
void WlanQtUtilsIapSettings::storeWepKey(
hgs
parents:
diff changeset
   406
    const QString &key,
hgs
parents:
diff changeset
   407
    int index,
hgs
parents:
diff changeset
   408
    CmConnectionMethodShim *iap)
hgs
parents:
diff changeset
   409
{
hgs
parents:
diff changeset
   410
    OstTraceFunctionEntry0(WLANQTUTILSIAPSETTINGS_STOREWEPKEY_ENTRY);
hgs
parents:
diff changeset
   411
    
hgs
parents:
diff changeset
   412
    // Default value is set just to silence compiler, Q_ASSERTs take care
hgs
parents:
diff changeset
   413
    // that valid attribute is set below
hgs
parents:
diff changeset
   414
    CMManagerShim::ConnectionMethodAttribute attribute = 
hgs
parents:
diff changeset
   415
        CMManagerShim::WlanWepKey1InHex;
hgs
parents:
diff changeset
   416
    
hgs
parents:
diff changeset
   417
    int length = key.length();
hgs
parents:
diff changeset
   418
    if (length == WepHex64BitMaxLength || length == WepHex128BitMaxLength) {
hgs
parents:
diff changeset
   419
        // HEX
hgs
parents:
diff changeset
   420
        switch (index) {
hgs
parents:
diff changeset
   421
        case 1:
hgs
parents:
diff changeset
   422
            attribute = CMManagerShim::WlanWepKey1InHex;
hgs
parents:
diff changeset
   423
            break;
hgs
parents:
diff changeset
   424
            
hgs
parents:
diff changeset
   425
        case 2:
hgs
parents:
diff changeset
   426
            attribute = CMManagerShim::WlanWepKey2InHex;
hgs
parents:
diff changeset
   427
            break;
hgs
parents:
diff changeset
   428
            
hgs
parents:
diff changeset
   429
        case 3:
hgs
parents:
diff changeset
   430
            attribute = CMManagerShim::WlanWepKey3InHex;
hgs
parents:
diff changeset
   431
            break;
hgs
parents:
diff changeset
   432
            
hgs
parents:
diff changeset
   433
        case 4:
hgs
parents:
diff changeset
   434
            attribute = CMManagerShim::WlanWepKey4InHex;
hgs
parents:
diff changeset
   435
            break;
hgs
parents:
diff changeset
   436
            
hgs
parents:
diff changeset
   437
#ifndef QT_NO_DEBUG
hgs
parents:
diff changeset
   438
        default:
hgs
parents:
diff changeset
   439
            // Invalid key index detected
hgs
parents:
diff changeset
   440
            Q_ASSERT(0);
hgs
parents:
diff changeset
   441
            break;
hgs
parents:
diff changeset
   442
#endif            
hgs
parents:
diff changeset
   443
        }
hgs
parents:
diff changeset
   444
    } else if (length == WepAscii64BitMaxLength || length == WepAscii128BitMaxLength) {
hgs
parents:
diff changeset
   445
        // ASCII
hgs
parents:
diff changeset
   446
        switch (index) {
hgs
parents:
diff changeset
   447
        case 1:
hgs
parents:
diff changeset
   448
            attribute = CMManagerShim::WlanWepKey1InAscii;
hgs
parents:
diff changeset
   449
            break;
hgs
parents:
diff changeset
   450
            
hgs
parents:
diff changeset
   451
        case 2:
hgs
parents:
diff changeset
   452
            attribute = CMManagerShim::WlanWepKey2InAscii;
hgs
parents:
diff changeset
   453
            break;
hgs
parents:
diff changeset
   454
            
hgs
parents:
diff changeset
   455
        case 3:
hgs
parents:
diff changeset
   456
            attribute = CMManagerShim::WlanWepKey3InAscii;
hgs
parents:
diff changeset
   457
            break;
hgs
parents:
diff changeset
   458
hgs
parents:
diff changeset
   459
        case 4:
hgs
parents:
diff changeset
   460
            attribute = CMManagerShim::WlanWepKey4InAscii;
hgs
parents:
diff changeset
   461
            break;
hgs
parents:
diff changeset
   462
            
hgs
parents:
diff changeset
   463
#ifndef QT_NO_DEBUG
hgs
parents:
diff changeset
   464
        default:
hgs
parents:
diff changeset
   465
            // Invalid key index detected
hgs
parents:
diff changeset
   466
            Q_ASSERT(0);
hgs
parents:
diff changeset
   467
            break;
hgs
parents:
diff changeset
   468
#endif            
hgs
parents:
diff changeset
   469
        }
hgs
parents:
diff changeset
   470
    }
hgs
parents:
diff changeset
   471
    
hgs
parents:
diff changeset
   472
    if (length > 0) {
hgs
parents:
diff changeset
   473
        iap->setString8Attribute(attribute, key);
hgs
parents:
diff changeset
   474
    } // else: key is not set, ignore
hgs
parents:
diff changeset
   475
hgs
parents:
diff changeset
   476
    OstTraceFunctionExit0(WLANQTUTILSIAPSETTINGS_STOREWEPKEY_EXIT);
hgs
parents:
diff changeset
   477
}