diff -r 8b3129ac4c0f -r 093cf0757204 securitysettings/cpwlansecurityuiplugins/cpwpaui/src/cpwpaui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitysettings/cpwlansecurityuiplugins/cpwpaui/src/cpwpaui.cpp Fri May 14 15:54:13 2010 +0300 @@ -0,0 +1,295 @@ +/* + * 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 the License "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: + * Control Panel QT UI for WPA/WPA2 configuration + * + */ + +/* + * %version: tr1cfwln#21.1.1 % + */ +//User Includes +#include "cpwpaui.h" +#include "cpwpacmnui.h" +#include "wpakeyvalidator.h" + +// System includes +#include +#include +#include +#include +#include +#include +#include +#include + +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cpwpauiTraces.h" +#endif + +//Constants +//The order in which WPA/WPA2 only mode appears in the list of available +//security modes +const int UI_ORDER_WPA_WPA2 = 40; +/*! + \class CpWpaUi + \brief CpWpaUi implements the common Ui for WPA/WPA2 + Security Settings Control Panel Plugins, + which will allow viewing/editing of WPA/WPA2 Security Settings. + */ +//Contructs WPA/WPA2 object +CpWpaUi::CpWpaUi() : + mUi(NULL), mCmCM(NULL), mEapQtConfigInterface(NULL) +{ + mTranslator = new QTranslator(this); + mTranslator->load(":/loc/wlan_en_GB.qm"); + + qApp->installTranslator(mTranslator); + +} + +//Deletes all objects WPA/WPA2 owns +CpWpaUi::~CpWpaUi() +{ + OstTraceFunctionEntry1(CPWPAUI_CPWPAUI_ENTRY,this); + //delete mEapQtConfigInterface; + OstTraceFunctionExit1(CPWPAUI_CPWPAUI_EXIT,this); +} + +// ======== MEMBER FUNCTIONS ======== + +/*! + Getter for security mode. + + \return Security mode identifier + */ +CMManagerShim::WlanSecMode CpWpaUi::securityMode() const +{ + OstTraceFunctionEntry1(CPWPAUI_MODE_ENTRY,this); + OstTraceFunctionExit1(CPWPAUI_MODE_EXIT,this); + //return security mode + return CMManagerShim::WlanSecModeWpa; +} + +/*! + Getter for localization text identifier for the security mode, + f.ex. "txt_occ_setlabel_wlan_security_mode_val_wpawpa2". This localized + text will be shown in the UI. + + \return Localization text ID + */ +QString CpWpaUi::securityModeTextId() const +{ + OstTraceFunctionEntry1(CPWPAUI_LOCALIZATIONID_ENTRY,this); + OstTraceFunctionExit1(CPWPAUI_LOCALIZATIONID_EXIT,this); + return "txt_occ_setlabel_wlan_security_mode_val_wpawpa2"; +} + +/*! + Sets the database reference (WLAN Service Table ID). + + \param id Database reference + */ +void CpWpaUi::setReference(CmConnectionMethodShim *cmCm, uint id) +{ + OstTraceFunctionEntry1(CPWPAUI_SETREFERENCE_ENTRY,this); + // Assuming that id is the connection method Id/IAP Id. + mCmId = id; + + /*if (!mEapQtConfigInterface) { + mEapQtConfigInterface = new EapQtConfigInterface( + EapQtConfigInterface::EapBearerTypeWlan, mCmId); + // fix, hangs + }*/ + + //mCmCM is not deleted assuming mCmManager owns it. + mCmCM = cmCm; + OstTraceFunctionExit1(CPWPAUI_SETREFERENCE_EXIT,this); +} + +/*! + Getter for order number. This order number is used by the client of + this interface to put the security modes in correct order in the list. + + \return An order number + */ +int CpWpaUi::orderNumber() const +{ + OstTraceFunctionEntry1(CPWPAUI_ORDERNUMBER_ENTRY,this); + OstTraceFunctionExit1(CPWPAUI_ORDERNUMBER_EXIT,this); + return UI_ORDER_WPA_WPA2; +} + +/*! + Creates an UI instance. Caller owns the object. + + \param dataHelper Item data helper + \return Pointer to an UI object + */ +CpSettingFormItemData* CpWpaUi::uiInstance(CpItemDataHelper &dataHelper) +{ + OstTraceFunctionEntry1(CPWPAUI_UIINSTANCE_ENTRY,this); + + //reset the Common Ui Ptr + mWpaUi.reset(new CpWpaCmnUi(CMManagerShim::WlanSecModeWpa, dataHelper)); + + mUi = mWpaUi->createUi(mEapQtConfigInterface, mCmCM); + + connect(mWpaUi.data(), SIGNAL(keyChanged(QString&)), this, SLOT(pskKeyChanged(QString&))); + + connect(mWpaUi.data(), SIGNAL(pskEapModeToggled(int)), this, SLOT(wpaTypeChanged(int))); + + connect(mWpaUi.data(), SIGNAL(eapPluginChanged(int)), this, SLOT(currentEapPlugin(int))); + //} + OstTraceFunctionExit1(CPWPAUI_UIINSTANCE_EXIT,this); + return mUi; +} + + +// ======== LOCAL FUNCTIONS ======== + +/*! + Slot to handle change in wpa mode :- PSK /EAP + + \param pskEnable the current mode chosen + */ +/*void CpWpaUi::wpaTypeChanged(int pskEnable) +{ + int err; + OstTraceFunctionEntry1(CPWPAUI_WPATYPECHANGED_ENTRY,this); + + bool PskEnable = pskEnable ? ETrue : EFalse; + + QT_TRYCATCH_ERROR(err,mCmCM->setBoolAttribute(CMManagerShim::WlanEnableWpaPsk, PskEnable)); + + if(err !=KErrNone) { + OstTrace1( TRACE_ERROR, CPWPAUI_WPATYPECHANGED, "ERROR WPA/WPA2 wpatypereturned returned %d", err ); + } + tryUpdate(); + OstTraceFunctionExit1(CPWPAUI_WPATYPECHANGED_EXIT,this); +}*/ + +/*! + Slot to handle change in pre-shared key string + + \param key changed string for PSK + */ +void CpWpaUi::pskKeyChanged(QString &key) +{ + int err; + OstTraceFunctionEntry1(CPWPAUI_PSKKEYCHANGED_ENTRY,this); + //Store to native s60 type for validation + TPtrC ptrName(reinterpret_cast (key.constData())); + + //Check for Validity of Pre-shared Key + WpaKeyValidator::KeyStatus keystatus = WpaKeyValidator::validateWpaKey(key); + + if (keystatus == WpaKeyValidator::KeyStatusOk) { + + QT_TRYCATCH_ERROR(err,mCmCM->setString8Attribute(CMManagerShim::WlanWpaPreSharedKey, key)); + if(err !=KErrNone) { + OstTrace1( TRACE_ERROR,CPWPAUI_PSKKEYCHANGED, "ERROR WPA/WPA2: pskKeyChanged returned %d", err ); + } + tryUpdate(); + } + else { + showMessageBox(HbMessageBox::MessageTypeWarning, hbTrId( + "txt_occ_info_invalid_input")); + } + OstTraceFunctionExit1(CPWPAUI_PSKKEYCHANGED_EXIT,this); +} + +/*! + Slot to handle change in eap method in use + \param currentplugin plugin number to indicate the + eap method in use + */ +/*void CpWpaUi::currentEapPlugin(int plugin ) +{ + OstTraceFunctionEntry1(CPWPAUI_CURRENTEAPPLUGIN_ENTRY,this); + + //define enum to store the current EAP type + //mCmCM->setIntAttribute( use appropriate enum to get the eap plugin index ); + OstTraceFunctionExit1(CPWPAUI_CURRENTEAPPLUGIN_EXIT,this); +}*/ + +bool CpWpaUi::tryUpdate() +{ + OstTraceFunctionEntry1(CPWPAUI_TRYUPDATE_ENTRY,this); + + // Try update + try { + mCmCM->update(); + } catch (const std::exception&) { + // Handle error + handleUpdateError(); + + OstTraceFunctionExit1(CPWPAUI_TRYUPDATE_EXIT,this); + return false; + } + + OstTraceFunctionExit1(DUP1_CPWPAUI_TRYUPDATE_EXIT,this); + return true; +} + +/*! + Handles failed CommsDat update. + */ +void CpWpaUi::handleUpdateError() +{ + OstTraceFunctionEntry1(CPWPAUI_HANDLEUPDATEERROR_ENTRY,this); + + // Show error note to user + showMessageBox(HbMessageBox::MessageTypeWarning, hbTrId("txt_occ_info_unable_to_save_setting")); + // Reload settings from CommsDat and update UI + try { + mCmCM->refresh(); + } catch (const std::exception&) { + // Ignore error from refresh. Most likely this will not happen, but + // if it does, there isn't very much we can do. + OstTrace0( + TRACE_ERROR, + CPWPAUI_HANDLEUPDATEERROR, + "Refresh failed"); + }; + updateWpaSettings(); + + OstTraceFunctionExit1(CPWPAUI_HANDLEUPDATEERROR_EXIT,this); +} + +/*! + Shows message box with "OK" button using given text. + */ +void CpWpaUi::showMessageBox(HbMessageBox::MessageBoxType type, const QString &text) +{ + OstTraceFunctionEntry1(CPWPAUI_SHOWMESSAGEBOX_ENTRY,this); + + // Create a message box + mMessageBox = QSharedPointer (new HbMessageBox(type)); + mMessageBox->setText(text); + mMessageBox->open(); + + OstTraceFunctionExit1(CPWPAUI_SHOWMESSAGEBOX_EXIT,this); +} + +void CpWpaUi::updateWpaSettings() +{ + OstTraceFunctionEntry1(CPWPAUI_UPDATEWPASETTINGS_ENTRY,this); + mWpaUi->reset(); + OstTraceFunctionExit1(CPWPAUI_UPDATEWPASETTINGS_EXIT,this); +} + +Q_EXPORT_PLUGIN2(CpWpaUi, CpWpaUi) +;