bearermanagement/mpm/inc/mpmwlanquerydialog.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 14 Apr 2010 16:22:04 +0300
branchRCL_3
changeset 17 c14618f9de99
parent 0 5a93021fdf25
permissions -rw-r--r--
Revision: 201013 Kit: 201015

/*
* 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: Handles displaying wlan related dialogs
*
*/


#ifndef MPMWLANQUERYDIALOG_H
#define MPMWLANQUERYDIALOG_H

#include <e32std.h>
#include <wdbifwlansettings.h> //for struct
#include <ConnectionUiUtilities.h>
#include <wifiprotuiclient.h>
#include <wifiprotreturn.h>

#include "mpmcommsdataccess.h"


// ID of Easy Wep dialog
const TUid KUidEasyWepDlg = { 0x101FD673 };

// ID of Easy Wpa dialog
const TUid KUidEasyWpaDlg = { 0x101FD674 };

// ID of OfflineWlanNote dialog
const TUid KUidCOfflineWlanNoteDlg = { 0x101FD671 };

/**
 * This structure is copied from ConnectionUiUtilitiesCommon.h,
 * but given here a different name.
 * Defines preferences of the Wlan Network
 */
class TMpmWlanNetworkPrefs
    {
public:
    TWlanSsid                           iSsId;        ///< Ssid of Wlan network
    TWlanConnectionMode                 iNetworkMode; ///< mode of Wlan network
    TWlanConnectionSecurityMode         iSecMode;     ///< Security mode of Wlan network
    TBool                               iProtectedSetupSupported; 
                                        ///< Wlan network supports Protected Setup
    };

const TInt KEasyWepQuery256BitMaxLength = 58;

class TWlanAgtWepKeyData
    {
public:
    TBuf< KEasyWepQuery256BitMaxLength > iKey;
    TBool iHex;
    };

class CMPMIapSelection;
/**
 *  Handles displaying wlan related dialogs
 *
 *  @lib mpmserver.exe
 *  @since S60 v3.2
 */
class CMPMWlanQueryDialog : public CActive
    {

enum TWlanQueryState
    {
    EOffline,
    EWlanNetwork,
    EWepSettings,
    EWpaSettings, 
    EWPS,
    ERetrySettingsStorage
    };

public:

    static CMPMWlanQueryDialog* NewL( CMPMIapSelection&  aSession,
                                      TUint32            aSelectedWlanIap );

    /**
    * Destructor.
    */
    virtual ~CMPMWlanQueryDialog();

public: // Functions from base classes

        /**
        * From CActive. Cancels UI dialogs.
        * @since 3.2
        */        
        void DoCancel();
        
        /**
        * From CActive. Run when UI dialog finished.
        * @since 3.2
        */               
        void RunL();
        
        /**
        * From CActive. Run if RunL leaves.
        * @since 3.2
        * @param aError Error that caused leave.
        * @return KErrNone
        */
        TInt RunError( TInt aError );

public:

        /**
        * Starts displaying wlan dialogs if necessary
        * @since 3.2
        */
        void StartWlanQueryL();
        
        /**
        * Stores user defined easy wlan parameters to commsdat
        * if easy wlan has been selected.
        *
        * @since 3.2
        */
        void StoreEasyWlanSelectionL();

private:

        /**
         * Propagates wlan network selection as an initial value for the dialog,
         * Used if there are several dialogs queued.
         *
         * @param aWlanIapId     Selected WLAN IAP
         * @param aDialogStatus  Status of the dialog when destroyed.
         * @since 3.2
         */
        void OfferInformation( TUint32 aWlanIapId, 
                               TInt aDialogStatus );

        CMPMWlanQueryDialog( CMPMIapSelection&  aSession,
                             TUint32            aSelectedWlanIap );

        void ConstructL();

        /**
        * Gets Easy Wlan data from member variables and stores 
        * it to arguments
        *
        * @since 9.1
        * @param aSsid Wlan iap ssid, stored in used ssid field
        * @param aSecMode Wlan iap security mode
        * @param aConnMode Wlan iap connection mode
        * @param aWepKeyData Wlan iap wep key data
        * @param aEnableWpaPsk Wlan iap enable psk mode
        * @param aWpaPsk Wlan iap wpa psk
        * @param aWpaKeyLen Wlan iap wpa key length
        */
        void GetEasyWlanDataL( TWlanSsid&    aSsid,
                               TUint&        aSecMode,
                               TWlanNetMode& aConnMode,
                               TWepKeyData&  aWepKeyData, 
                               TUint&        aEnableWpaPsk,
                               TDes8&        aWpaPsk,
                               TUint&        aWpaKeyLen  );

        /**
        * Maps TWlanConnectionSecurityMode to security mode stored in CommsDat
        *
        * @since 9.1
        * @param aConnSecmode Security mode in TWlanConnectionSecurityMode format
        * @param aCommsdatSecMode returned security mode value in CommsDat format
        */
        TInt ConnSecModeToCommsDatSecMode( TWlanConnectionSecurityMode aConnSecmode,
                                           TUint& aCommsdatSecMode ) const;

        /**
        * Maps TWlanIapSecurityMode to security mode stored in CommsDat
        *
        * @since 9.1
        * @param aConnSecmode Security mode in TWlanIapSecurityMode format
        * @param aCommsdatSecMode returned security mode value in CommsDat format
        */
        TInt IapSecModeToCommsDatSecMode( TWlanIapSecurityMode aConnSecmode,
                                          TUint& aCommsdatSecMode ) const;

        /**
        * Gets Easy Wlan data from member variables when WPS has been used 
        * and stores it to arguments
        *
        * @since 9.1
        * @param aSsid Wlan iap ssid, stored in used ssid field
        * @param aSecMode Wlan iap security mode
        * @param aConnMode Wlan iap connection mode
        * @param aWepKeyData WEP key data
        * @param aEnableWpaPsk Wlan iap enable psk mode
        * @param aWpaPsk Wlan iap wpa psk
        * @param aWpaKeyLen Wlan iap wpa key length
        */
        void GetEasyWlanDataForWpsL( TWlanSsid&    aSsid,
                                     TUint&        aSecMode,
                                     TWlanNetMode& aConnMode,
                                     TWepKeyData&  aWepKeyData, 
                                     TUint&        aEnableWpaPsk,
                                     TDes8&        aWpaPsk,
                                     TUint&        aWpaKeyLen  );

        /**
        * Starts WPS dialog and sets the active object active.
        *
        * @since 9.1
        */
        void StartWpsDlgL();

        /**
        * Determines whether WEP key is hex format based on the length
        *
        * @since 9.1
        * @param aLength 
        * @return ETrue if format is hex, otherwise EFalse
        */
        TBool IsWepFormatHexL( TInt aLength ) const;

        /**
        * Get the network preferences using ConnectionUiUtilities API.
        *
        * @since 5.1
        */
        void GetNetworkPrefs();

private: // data

        // Reference to iap selection object
        CMPMIapSelection& iIapSelection;

        // Stores data for offline note
        TPckgBuf<TBool> iOfflineReply;
        
        // Stores data for wlan network guery
        TPckgBuf<TMpmWlanNetworkPrefs> iNetworkPrefs;
        
        // Stores data for wep query
        TPckgBuf<TWlanAgtWepKeyData> iNotifWep;
        
        // Stores data for wpa query
        TPckgBuf< TBuf< KWLMMaxWpaPskLength > > iNotifWpaKey;

        //Interfce to Notifier
        RNotifier iNotifier;

        //State of querying Wlan settings
        TWlanQueryState iWlanQueryState;
            
        // selected wlan iap id
        TUint32 iWlanIapId;
            
        // ETrue if user has selected easy wlan
        TBool iEasyWlanSelected;
            
        // Flag that can be used to cancel the dialog startup based on earlier dialog
        TInt iOverrideStatus;
            
        // Connection Ui Utilities pointer
        CConnectionUiUtilities* iConnUiUtils;

        // Contains WLAN settings received through WPS
        TWlanProtectedSetupCredentialAttribute iWpsAttribute;

        // WPS client pointer for displaying WPS dialogs
        CWiFiProtUiClient* iWps;

        // Contains WPS return value
        WiFiProt::TWiFiReturn iWpsReturn;

        // True if wps has been completed. 
        TBool iWpsCompleted;
        
        // Retry count
        TUint32 iRetryCount;
        
        // Retry timer
        RTimer iTimer;
    };

#endif // MPMWLANQUERYDIALOG_H