--- a/securitysettings/qtconfigutils/eapqtconfiginterface/src/eapqtconfiginterface_p.cpp Tue Aug 31 15:16:37 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1934 +0,0 @@
-/*
- * 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:
- * EAP method configuration QT interface
- *
- */
-
-/*
- * %version: 52 %
- */
-
-// System includes
-#include <QDir>
-#include <QList>
-#include <QVariant>
-#include <QPluginLoader>
-#include <HbTranslator>
-#include <QLocale>
-#include <QCoreApplication>
-#include <QDebug>
-#include <cmmanager.h>
-#include <cmpluginwlandef.h>
-#include <EapGeneralSettings.h>
-#include <eapqtplugininfo.h>
-#include <eapqtcertificateinfo.h>
-
-// User includes
-#include "cpeapplugininterface.h"
-#include "eapqtconfiginterface_p.h"
-#include "eapqtvalidatorpassword.h"
-#include "eapqtvalidatorusername.h"
-#include "eapqtvalidatorrealm.h"
-#include "eapqtvalidatorpacstorepassword.h"
-#include "eapqtvalidatorpacstorepasswordconfirm.h"
-
-/*!
- * \class EapQtConfigInterfacePrivate
- * \brief Private implementation of EAP QT configuration interface
- */
-
-// External function prototypes
-
-// Local constants
-static const QString eapTranslationFile("cpeapuiplugins");
-
-// ======== LOCAL FUNCTIONS ========
-
-// ======== MEMBER FUNCTIONS ========
-
-EapQtConfigInterfacePrivate::EapQtConfigInterfacePrivate() :
- mValidatorInstance(true),
- mLastOuterHandle(EapQtPluginHandle::PluginUndefined),
- mTranslator(NULL),
- mEapGsIf(NULL),
- mEapTypeIf(NULL),
- mIapId(0),
- mEapBearer(ELan),
- mEapDbIndex(EapQtConfigInterface::IapIdUndefined),
- mEapDbIndexValid(false)
-{
- qDebug("EapQtConfigInterfacePrivate() - created validator instance, this = 0x%08x", this);
-}
-
-EapQtConfigInterfacePrivate::EapQtConfigInterfacePrivate(
- const EapQtConfigInterface::EapBearerType bearerType, const int iapId) :
- mValidatorInstance(false),
- mLastOuterHandle(EapQtPluginHandle::PluginUndefined),
- mTranslator(NULL),
- mEapGsIf(NULL),
- mEapTypeIf(NULL),
- mIapId(iapId),
- mEapBearer(ELan),
- mEapDbIndex(EapQtConfigInterface::IapIdUndefined),
- mEapDbIndexValid(false)
-{
- qDebug("EapQtConfigInterfacePrivate() - creating non-validator instance, this = 0x%08x", this);
-
- switch (bearerType) {
- case EapQtConfigInterface::EapBearerTypeVpn:
- mEapBearer = EVpn;
- break;
- default:
- // All others default to EapQtConfigInterface::EapBearerTypeWlan i.e. ELan
- mEapBearer = ELan;
- }
-
- if (!setEapDbIndex(iapId)) {
- qDebug("ERROR: EapQtConfigInterfacePrivate() - setIapId failed, bearer = %d, index = %d",
- mEapBearer, iapId);
- shutdown();
- // throw an exception
- qt_symbian_throwIfError(KErrNotFound);
- }
-
- // load plugins after everything else is ok
- qDebug("EapQtConfigInterfacePrivate() - load plugins");
- loadPlugins();
-
- qDebug("EapQtConfigInterfacePrivate() - ends");
-}
-
-EapQtConfigInterfacePrivate::~EapQtConfigInterfacePrivate()
-{
- qDebug("EapQtConfigInterfacePrivate::~EapQtConfigInterfacePrivate(), this = 0x%08x", this);
-
- shutdown();
-}
-
-void EapQtConfigInterfacePrivate::shutdown()
-{
- qDebug("EapQtConfigInterfacePrivate::shutdown(), this = 0x%08x", this);
-
- mOuterEapsOn.Close();
- mOuterEapsOff.Close();
-
- // cleanup Ecom
- REComSession::FinalClose();
-
- // mTranslator gets deleted automatically (QScopedPointer)
- // mEapTypeIf gets deleted automatically (QScopedPointer)
- // mEapGsIf gets deleted automatically (QScopedPointer)
-}
-
-bool EapQtConfigInterfacePrivate::setConfigurationReference(const int iapId)
-{
- qDebug("EapQtConfigInterfacePrivate::setConfigurationReference - requested id: %d, this = 0x%08x", iapId, this);
-
- checkInstanceThrowing();
- return setEapDbIndex(iapId);
-}
-
-bool EapQtConfigInterfacePrivate::setEapDbIndex(const int iapId)
-{
-
- qDebug("EapQtConfigInterfacePrivate::setIapId - requested id: %d, this = 0x%08x", iapId, this);
-
-
- // optimization: do not re-create the interface if the reference does
- // not change and mEapGsIf exists already
-
- // WLAN reference is checked after setEapWlanDbIndex below since iapId may be
- // different than WLAN service ID
-
- // case for EapQtConfigInterface::IapIdUndefined i.e. setIapId was called
- // with a negative id last time and now again
- if (!mEapDbIndexValid && !mEapGsIf.isNull() && iapId < 0) {
- qDebug(
- "EapQtConfigInterfacePrivate::setIapId - interface created for IapIdUndefined already");
- return true;
- }
-
- // case for VPN (or any other bearer) in which iap id equals EAP db index
- if (mEapBearer != ELan && mEapDbIndexValid && !mEapGsIf.isNull() && iapId == mEapDbIndex) {
- qDebug(
- "EapQtConfigInterfacePrivate::setIapId - interface created for requested IAP ID for VPN already");
- return true;
- }
-
- // save the current id for checking if WLAN reference changes or not
- TInt previousEapDbIndex = mEapDbIndex;
- bool wlanIndexOk = true;
-
- // allow accessing certain methods with negative iapId
- if (iapId < 0) {
- // set to zero to be able to create EAP server instances
- mEapDbIndex = 0;
- mEapDbIndexValid = false;
- }
- // for real usage iapId must not be negative
- else {
- // for VPN
- mIapId = iapId;
- mEapDbIndex = iapId;
- mEapDbIndexValid = true;
-
- // for WLAN
- if (mEapBearer == ELan) {
- // get WLAN service ID as the reference
- mEapDbIndexValid = setEapWlanDbIndex(iapId);
- wlanIndexOk = mEapDbIndexValid;
- // do not re-create if the interface is ok for the new (i.e. same) index already
- if (!mEapGsIf.isNull() && mEapDbIndex == previousEapDbIndex) {
- qDebug() << "EapQtConfigInterfacePrivate::setIapId - interface"
- << "created for requested IAP ID for WLAN already";
- return true;
- }
-
- }
- }
-
- // delete possibly existing instances
- mEapGsIf.reset(NULL);
- mEapTypeIf.reset(NULL);
-
- mCurrentServerEapType = *EapExpandedTypeNone.GetType();
- mLastOuterHandle = EapQtPluginHandle::PluginUndefined;
-
- if (!wlanIndexOk && mEapBearer == ELan) {
- // setEapWlanDbIndex was called and failed
- qDebug("ERROR: EapQtConfigInterfacePrivate::setIapId() - setEapWlanDbIndex failed");
- return false;
- }
-
- qDebug(
- "EapQtConfigInterfacePrivate::setIapId() - calls CEapGeneralSettings::NewL(), bearer = %d, index = %d",
- mEapBearer, mEapDbIndex);
-
- // load EAP general settings interface
- CEapGeneralSettings* tmp = NULL;
- TRAPD(err, tmp = CEapGeneralSettings::NewL(mEapBearer, mEapDbIndex));
- if (err != KErrNone) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::setIapId - CEapGeneralSettings::NewL() failed");
- mEapDbIndexValid = false;
- return false;
- }
-
- // set to the created instance
- mEapGsIf.reset(tmp);
-
- return true;
-}
-
-bool EapQtConfigInterfacePrivate::setEapWlanDbIndex(const int iapId)
-{
- qDebug("EapQtConfigInterfacePrivate::setEapWlanDbIndex - requested id: %d, this = 0x%08x", iapId, this);
-
- RCmManager cmm;
- TRAPD(err, cmm.OpenL());
- if (err != KErrNone) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::setEapWlanDbIndex - cmm.OpenL() failed",
- mEapBearer, iapId);
- mEapDbIndex = EapQtConfigInterface::IapIdUndefined;
- mIapId = 0;
- return false;
- }
-
- TRAP(err, mEapDbIndex = cmm.GetConnectionMethodInfoIntL(iapId, CMManager::EWlanServiceId));
- if (err != KErrNone) {
- qDebug(
- "ERROR: EapQtConfigInterfacePrivate::setEapWlanDbIndex - cmm.GetConnectionMethodInfoIntL() failed",
- mEapBearer, iapId);
- cmm.Close();
- mEapDbIndex = EapQtConfigInterface::IapIdUndefined;
- mIapId = 0;
- return false;
- }
-
- cmm.Close();
-
- qDebug("EapQtConfigInterfacePrivate::setEapWlanDbIndex - obtained WLAN service id: %d",
- mEapDbIndex);
-
- return true;
-}
-
-void EapQtConfigInterfacePrivate::checkInstanceThrowing() const
-{
- qDebug() << "EapQtConfigInterfacePrivate::checkInstanceThrowing() - mValidatorInstance:"
- << mValidatorInstance;
-
- if (mValidatorInstance) {
- qDebug(
- "ERROR: EapQtConfigInterfacePrivate::checkInstanceThrowing - method not supported by this instance");
- qt_symbian_throwIfError(KErrNotSupported);
- }
-}
-
-void EapQtConfigInterfacePrivate::appendEapTypes(const RArray<TEapExpandedType>* const eapTypes,
- QList<QByteArray>* const eapList)
-{
- qDebug("EapQtConfigInterfacePrivate::appendEapTypes(), this = 0x%08x", this);
-
- Q_ASSERT(eapTypes);
- Q_ASSERT(eapList);
-
- qDebug("EapQtConfigInterfacePrivate - appendEapTypes, EAP count = %d", eapTypes->Count());
-
- QByteArray tmpEap;
- for (int ind = 0; ind < eapTypes->Count(); ind++) {
- tmpEap.append(reinterpret_cast<const char*> ((*eapTypes)[ind].GetValue().Ptr()),
- (*eapTypes)[ind].GetValue().Length());
- eapList->append(tmpEap);
- qDebug() << "EapQtConfigInterfacePrivate - appendEapTypes added EAP: " << tmpEap.toHex();
- tmpEap.clear();
- }
-}
-
-QList<EapQtPluginInfo> EapQtConfigInterfacePrivate::supportedOuterTypes()
-{
- qDebug("EapQtConfigInterfacePrivate::supportedOuterTypes(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- if (mEapGsIf.isNull()) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::supportedOuterTypes() - mEapGsIf is NULL");
- mOuterEapsOn.Reset();
- mOuterEapsOff.Reset();
- // return empty list
- mSupportedOuterTypes.clear();
- return mSupportedOuterTypes;
- }
-
- // get outer EAPs from EAP server,
- // returned in two lists: enabled and disabled outer EAPs
- // do this always as the list might have changed and mOuterEapsOn/Off are needed in
- // other methods
-
- mOuterEapsOn.Reset();
- mOuterEapsOff.Reset();
-
- qDebug("EapQtConfigInterfacePrivate::supportedOuterTypes() - calls GetEapMethods()");
-
- TUint err = mEapGsIf->GetEapMethods(mOuterEapsOn, mOuterEapsOff);
- if (err != KErrNone) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::supportedOuterTypes() - GetEapMethods failed");
- mOuterEapsOn.Reset();
- mOuterEapsOff.Reset();
- // return empty list
- mSupportedOuterTypes.clear();
- return mSupportedOuterTypes;
- }
-
- // optimization: collect the list only once per instance life time
- // since no new EAPs will appear to the combination of mOuterEapsOn and mOuterEapsOff
- if (mSupportedOuterTypes.count() > 0) {
- qDebug(
- "EapQtConfigInterfacePrivate - supportedOuterTypes: supported EAPs already listed, return stored list");
- return mSupportedOuterTypes;
- }
-
- qDebug("EapQtConfigInterfacePrivate - supportedOuterTypes: copy response to QList");
-
- // copy response to qlist for easier comparison
- QList<QByteArray> outerEaps;
-
- appendEapTypes(&mOuterEapsOn, &outerEaps);
- appendEapTypes(&mOuterEapsOff, &outerEaps);
-
- qDebug("EapQtConfigInterfacePrivate - supportedOuterTypes: EAP server outer type count: %d",
- outerEaps.count());
-
- qDebug("EapQtConfigInterfacePrivate - supportedOuterTypes: collected UI plugin count: %d",
- mPluginInfos.count());
-
- // set mSupportedOuterTypes to contain only EAPs that both UI and EAP server support
- QByteArray tmpEap;
- for (int ind = 0; ind < mPluginInfos.count(); ind++) {
- tmpEap = mPluginInfos[ind].pluginHandle().type().eapExpandedData();
- if (outerEaps.contains(tmpEap)) {
- mSupportedOuterTypes.append(mPluginInfos[ind]);
- qDebug() << "EapQtConfigInterfacePrivate - supportedOuterTypes: appended EAP: "
- << tmpEap.toHex();
- }
- }
-
- // sort the list
- qSort(mSupportedOuterTypes.begin(), mSupportedOuterTypes.end(),
- EapQtConfigInterfacePrivate::pluginLessThan);
-
- qDebug("EapQtConfigInterfacePrivate - supportedOuterTypes: supported EAP count: %d",
- mSupportedOuterTypes.count());
-
- return mSupportedOuterTypes;
-}
-
-// checks if UI plugins support supplied eapType and returns the
-// index (in mPluginInfos) of the supporting plugin
-bool EapQtConfigInterfacePrivate::isUiSupported(const QByteArray &eapType, int &pluginIndex) const
-{
- qDebug("EapQtConfigInterfacePrivate::isUiSupported(), this = 0x%08x", this);
-
- bool ret = false;
- for (int ind = 0; ind < mPluginInfos.count(); ind++) {
- qDebug("EapQtConfigInterfacePrivate::isUiSupported() - checking index: %d", ind);
- pluginIndex = ind;
- if (eapType == mPluginInfos[ind].pluginHandle().type().eapExpandedData()) {
- qDebug("EapQtConfigInterfacePrivate::isUiSupported() - ui supported!");
- ret = true;
- break;
- }
- }
- return ret;
-}
-
-QList<EapQtPluginInfo> EapQtConfigInterfacePrivate::supportedInnerTypes(
- const EapQtPluginHandle &outer)
-{
- qDebug("EapQtConfigInterfacePrivate::supportedInnerTypes(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- // check if we already have up-to-date data
- if (mLastOuterHandle == outer) {
- return mSupportedInnerTypes;
- }
-
- // clear previous query result
- mSupportedInnerTypes.clear();
- mLastOuterHandle = EapQtPluginHandle::PluginUndefined;
-
- qDebug()
- << "EapQtConfigInterfacePrivate::supportedInnerTypes() - calls isSupportedOuterType for: "
- << outer.type().eapExpandedData().toHex();
-
- // check if the queried outer EAP is supported
- if (!isSupportedOuterType(outer)) {
- qDebug()
- << "ERROR: EapQtConfigInterfacePrivate::supportedInnerTypes() - queried outer type not supported: "
- << outer.type().eapExpandedData().toHex();
- // return empty list
- return mSupportedInnerTypes;
- }
-
- qDebug("EapQtConfigInterfacePrivate::supportedInnerTypes() - calls getEapTypeIf");
-
- // get outer EAP settings interface
- getEapTypeIf(outer);
- if (mEapTypeIf.isNull()) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::supportedInnerTypes() - getEapTypeIf failed");
- // return empty list
- return mSupportedInnerTypes;
- }
-
- // get outer EAP settings
- EAPSettings eapSettings;
- TRAPD(err, mEapTypeIf->GetConfigurationL(eapSettings));
- // getEapTypeIf has set mCurrentServerEapType correctly for comparison
- if (err != KErrNone || eapSettings.iEAPExpandedType != mCurrentServerEapType) {
- qDebug()
- << "ERROR: EapQtConfigInterfacePrivate::supportedInnerTypes - GetConfigurationL failed, code:"
- << err;
- // clear the instance so that the next attempt starts from scratch
- mEapTypeIf.reset(NULL);
- // return empty list
- return mSupportedInnerTypes;
- }
-
- // store inner EAPs supported by EAP server
- QList<QByteArray> innerEaps;
- appendEapTypes(&(eapSettings.iEnabledEncapsulatedEAPExpandedTypes), &innerEaps);
- appendEapTypes(&(eapSettings.iDisabledEncapsulatedEAPExpandedTypes), &innerEaps);
-
- int pluginIndex = 0;
- for (int ind = 0; ind < innerEaps.count(); ind++) {
- // report only EAPs which do have an UI plugin
- if (isUiSupported(innerEaps[ind], pluginIndex)) {
- mSupportedInnerTypes.append(mPluginInfos[pluginIndex]);
- qDebug() << "EapQtConfigInterfacePrivate::supportedInnerTypes - added inner EAP: "
- << innerEaps[ind].toHex();
- }
- }
-
- mLastOuterHandle = outer;
-
- // sort the list
- qSort(mSupportedInnerTypes.begin(), mSupportedInnerTypes.end(),
- EapQtConfigInterfacePrivate::pluginLessThan);
-
- qDebug("EapQtConfigInterfacePrivate - supportedInnerTypes: supported EAP count: %d",
- mSupportedInnerTypes.count());
-
- return mSupportedInnerTypes;
-}
-
-void EapQtConfigInterfacePrivate::copyCertificateInfo(
- const RPointerArray<EapCertificateEntry>* const certEntries,
- QList<EapQtCertificateInfo>* const certInfos)
-{
- qDebug("EapQtConfigInterfacePrivate::copyCertificateInfo(), this = 0x%08x", this);
-
- Q_ASSERT(certEntries);
- Q_ASSERT(certInfos);
-
- certInfos->clear();
-
- EapQtCertificateInfo cert;
- TKeyIdentifier subjectKeyId;
- const TDes* text = 0;
- int ind = 0;
-
- for (ind = 0; ind < certEntries->Count(); ind++) {
-
- // cleanup cert
- cert.clear();
-
- EapCertificateEntry* certPtr = (*certEntries)[ind];
-
- qDebug() << "EapQtConfigInterfacePrivate - copyCertificateInfo *** certificate starts *** ";
-
- if (certPtr->GetSubjectNamePresent() != EFalse) {
-
- text = certPtr->GetSubjectName();
- cert.setValue(EapQtCertificateInfo::SubjectName, QString::fromUtf16(text->Ptr(),
- text->Length()));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyCertificateInfo SubjectName: "
- << QString::fromUtf16(text->Ptr(), text->Length());
- }
- if (certPtr->GetIssuerNamePresent() != EFalse) {
-
- text = certPtr->GetIssuerName();
- cert.setValue(EapQtCertificateInfo::IssuerName, QString::fromUtf16(text->Ptr(),
- text->Length()));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyCertificateInfo IssuerName: "
- << QString::fromUtf16(text->Ptr(), text->Length());
- }
- if (certPtr->GetSerialNumberPresent() != EFalse) {
-
- text = certPtr->GetSerialNumber();
- cert.setValue(EapQtCertificateInfo::SerialNumber, QString::fromUtf16(text->Ptr(),
- text->Length()));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyCertificateInfo SerialNumber: "
- << QString::fromUtf16(text->Ptr(), text->Length());
- }
- if (certPtr->GetSubjectKeyIdPresent() != EFalse) {
-
- subjectKeyId = certPtr->GetSubjectKeyId();
- cert.setValue(EapQtCertificateInfo::SubjectKeyId, QByteArray(
- reinterpret_cast<const char*> (subjectKeyId.Ptr()), subjectKeyId.Length()));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyCertificateInfo SubjectKeyId: "
- << (QByteArray(reinterpret_cast<const char*> (subjectKeyId.Ptr()),
- subjectKeyId.Length())).toHex();
- }
- if (certPtr->GetThumbprintPresent() != EFalse) {
-
- text = certPtr->GetThumbprint();
- cert.setValue(EapQtCertificateInfo::ThumbPrint, QString::fromUtf16(text->Ptr(),
- text->Length()));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyCertificateInfo ThumbPrint: "
- << QString::fromUtf16(text->Ptr(), text->Length());
- }
- if (certPtr->GetLabelPresent() != EFalse) {
-
- text = certPtr->GetLabel();
- cert.setValue(EapQtCertificateInfo::CertificateLabel, QString::fromUtf16(text->Ptr(),
- text->Length()));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyCertificateInfo CertificateLabel: "
- << QString::fromUtf16(text->Ptr(), text->Length());
- }
-
- qDebug() << "EapQtConfigInterfacePrivate - copyCertificateInfo *** certificate ends *** ";
-
- certInfos->append(cert);
-
- }
-}
-
-bool EapQtConfigInterfacePrivate::fetchCertificates(QList<EapQtCertificateInfo>* const caInfos,
- QList<EapQtCertificateInfo>* const clientInfos)
-{
- qDebug("EapQtConfigInterfacePrivate::fetchCertificates(), this = 0x%08x", this);
-
- Q_ASSERT(caInfos != NULL || clientInfos != NULL);
- Q_ASSERT(!mEapGsIf.isNull());
-
- TInt err(KErrNone);
- RPointerArray<EapCertificateEntry> clientCerts;
- RPointerArray<EapCertificateEntry> caCerts;
-
- err = mEapGsIf->GetCertificateLists(clientCerts, caCerts);
- if (err != KErrNone) {
- qDebug("EapQtConfigInterfacePrivate - fetchCertificates failed: %d", err);
- caCerts.ResetAndDestroy();
- clientCerts.ResetAndDestroy();
- return false;
- }
-
- qDebug("user cert count: %d, CA cert count: %d", clientCerts.Count(), caCerts.Count());
-
- if (caInfos != NULL) {
- copyCertificateInfo(&caCerts, caInfos);
- }
- if (clientInfos != NULL) {
- copyCertificateInfo(&clientCerts, clientInfos);
- }
-
- caCerts.ResetAndDestroy();
- clientCerts.ResetAndDestroy();
- return true;
-}
-
-bool EapQtConfigInterfacePrivate::updateCertificates() {
-
- qDebug("EapQtConfigInterfacePrivate::updateCertificates(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- // empty current state
- mCaCertificates.clear();
- mUserCertificates.clear();
-
- return fetchCertificates(&mCaCertificates, &mUserCertificates);
-}
-
-QList<EapQtCertificateInfo> EapQtConfigInterfacePrivate::certificateAuthorityCertificates()
-{
- qDebug("EapQtConfigInterfacePrivate::certificateAuthorityCertificates(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- // update only if the list is empty
- if(mCaCertificates.length() == 0) {
- qDebug() << "EapQtConfigInterfacePrivate::certificateAuthorityCertificates() - updates certificate lists";
- updateCertificates();
- }
-
- return mCaCertificates;
-}
-
-QList<EapQtCertificateInfo> EapQtConfigInterfacePrivate::userCertificates()
-{
- qDebug("EapQtConfigInterfacePrivate::userCertificates(), this = 0x%08x", this);
-
- // use the CA certificates method, it will update both the lists
- // if CA list is empty
- (void) certificateAuthorityCertificates();
- return mUserCertificates;
-}
-
-void EapQtConfigInterfacePrivate::getEapTypeIf(const EapQtPluginHandle &pluginHandle)
-{
- qDebug("EapQtConfigInterfacePrivate::getEapTypeIf(), this = 0x%08x", this);
-
- // dig up the EAP type in TEapExpandedType format
- TEapExpandedType eapServerType;
- QByteArray eapType = pluginHandle.type().eapExpandedData();
- TInt err(KErrNone);
-
- qDebug() << "EapQtConfigInterfacePrivate - getEapTypeIf: wanted EAP type: " << eapType.toHex();
-
- // no need to check if this is successful,
- // CEapType::NewL call will handle errors
- (void) eapServerType.SetValue(eapType.data(), eapType.length());
-
- // slight optimization, load interface only if it does not exist or the EAP type changes
- if (mEapTypeIf.isNull() || mCurrentServerEapType != eapServerType) {
-
- qDebug("EapQtConfigInterfacePrivate - getEapTypeIf deletes previous instance");
-
- // delete previous instance
- mEapTypeIf.reset(NULL);
- mCurrentServerEapType = eapServerType;
-
- qDebug("EapQtConfigInterfacePrivate - getEapTypeIf calls CEapType::NewL()");
-
- // trap all leaves
- CEapType* tmp = NULL;
- TRAP(err, tmp = CEapType::NewL(mEapBearer, mEapDbIndex, mCurrentServerEapType));
- if (err != KErrNone) {
- qDebug(
- "ERROR: EapQtConfigInterfacePrivate - getEapTypeIf CEapType::NewL failed with error: %d",
- err);
- mCurrentServerEapType = *EapExpandedTypeNone.GetType();
- }
- mEapTypeIf.reset(tmp);
- }
-
- // always clear the tunnelling type state just in case some earlier call has set it
- if (!mEapTypeIf.isNull()) {
- mEapTypeIf->SetTunnelingType(*EapExpandedTypeNone.GetType());
- }
-
-}
-
-// in config:
-// if OuterType is defined, the configuration for pluginHandle is set inside this OuterType
-// if OuterType is not defined, pluginHandle is for an outer type
-// if InnerType is defined, the defined inner types in config are activated for pluginHandle
-// if InnerType is not defined, the pluginHandle does not activate any inner type (or they do not exist)
-bool EapQtConfigInterfacePrivate::saveConfiguration(const EapQtPluginHandle &pluginHandle,
- const EapQtConfig &config)
-{
- qDebug("EapQtConfigInterfacePrivate::saveConfiguration(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- if (!mEapDbIndexValid) {
- qDebug() << "ERROR: Database reference not valid, call setConfigurationReference first!";
- return false;
- }
-
- // set tunneling type & check if the requested EAP is supported
- // if we are configuring outer type, OuterType == QVariant::Invalid or
- // EapQtPluginHandle::PluginUndefined
-
- EapQtPluginHandle tmpOuterHandle;
- QVariant varValue = config.value(EapQtConfig::OuterType);
- if (varValue != QVariant::Invalid && !(varValue.value<EapQtPluginHandle> () == EapQtPluginHandle::PluginUndefined)) {
- tmpOuterHandle = varValue.value<EapQtPluginHandle> ();
- // check if supported
- if(!isSupportedInnerType(tmpOuterHandle, pluginHandle)) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::saveConfiguration() - not supported outer/inner type combination");
- return false;
- }
- }
- else {
- tmpOuterHandle = EapQtPluginHandle::PluginUndefined;
- // check if supported
- if(!isSupportedOuterType(pluginHandle)) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::saveConfiguration() - not supported outer type");
- return false;
- }
- }
-
- getEapTypeIf(pluginHandle);
- if (mEapTypeIf.isNull()) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::saveConfiguration() - getEapTypeIf failed");
- return false;
- }
-
- TEapExpandedType tmpOuterEap;
- tmpOuterEap.SetValue(tmpOuterHandle.type().eapExpandedData().data(),
- tmpOuterHandle.type().eapExpandedData().length());
-
- qDebug() << "EapQtConfigInterfacePrivate::saveConfiguration() - sets tunnelling type to: "
- << tmpOuterHandle.type().eapExpandedData().toHex();
-
- mEapTypeIf->SetTunnelingType(tmpOuterEap);
-
- // set EAP type here
- QByteArray eapType = pluginHandle.type().eapExpandedData();
-
- // copy config to EAP settings,
- // no need to check if this is successful,
- // SetConfigurationL call will handle errors
- EAPSettings eapSettings;
- (void) eapSettings.iEAPExpandedType.SetValue(eapType.data(), eapType.length());
-
- // copy the rest of the settings in the function
- copyToEapSettings(config, eapSettings);
- // store settings
- TRAPD(err, mEapTypeIf->SetConfigurationL(eapSettings));
- if (err != KErrNone) {
- qDebug("ERROR: EapQtConfigInterfacePrivate - saveConfiguration: SetConfigurationL failed");
- // clear the instance so that the next attempt starts from scratch
- mEapTypeIf.reset(NULL);
- mCurrentServerEapType = *EapExpandedTypeNone.GetType();
- return false;
- }
-
- return true;
-}
-
-// config must be empty when calling
-bool EapQtConfigInterfacePrivate::readConfiguration(const EapQtPluginHandle &outerHandle,
- const EapQtPluginHandle &pluginHandle, EapQtConfig &config)
-{
- qDebug("EapQtConfigInterfacePrivate::readConfiguration(), this = 0x%08x", this);
-
- // clear input
- config.clear();
-
- checkInstanceThrowing();
-
- if (!mEapDbIndexValid) {
- qDebug() << "ERROR: Database reference not valid, call setConfigurationReference first!";
- return false;
- }
-
- // check EAP type support
- if(!(outerHandle == EapQtPluginHandle::PluginUndefined)) {
- if(!isSupportedInnerType(outerHandle, pluginHandle)) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::readConfiguration() - not supported outer/inner type combination");
- return false;
- }
- } else {
- if(!isSupportedOuterType(pluginHandle)) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::readConfiguration() - not supported outer type");
- return false;
- }
- }
-
- getEapTypeIf(pluginHandle);
- if (mEapTypeIf.isNull()) {
- qDebug("ERROR: EapQtConfigInterfacePrivate::readConfiguration - getEapTypeIf failed");
- return false;
- }
-
- // set tunneling type
- // if we are configuring outer type, outerHandle == EapQtPluginHandle::PluginUndefined
- // and calling SetTunnelingType is also ok
- TEapExpandedType tmpEap;
- tmpEap.SetValue(outerHandle.type().eapExpandedData().data(),
- outerHandle.type().eapExpandedData().length());
-
- qDebug() << "EapQtConfigInterfacePrivate::readConfiguration - sets tunnelling type to: "
- << outerHandle.type().eapExpandedData().toHex();
-
- mEapTypeIf->SetTunnelingType(tmpEap);
-
- // always set OuterType,
- // set to EapQtPluginHandle::PluginUndefined if no outer type specified
- config.setValue(EapQtConfig::OuterType, qVariantFromValue(outerHandle));
-
- qDebug("EapQtConfigInterfacePrivate::readConfiguration - calls GetConfigurationL()");
-
- // trap all leaves
- EAPSettings eapSettings;
- TRAPD(err, mEapTypeIf->GetConfigurationL(eapSettings));
-
- // check if failed or something strange happened (incorrect EAP type settings received)
- if (err != KErrNone || eapSettings.iEAPExpandedType != mCurrentServerEapType) {
- qDebug()
- << "ERROR: EapQtConfigInterfacePrivate - readConfiguration: GetConfigurationL failed"
- << "wanted EAP:" << pluginHandle.type().eapExpandedData().toHex()
- << "- got EAP vendor ID:" << eapSettings.iEAPExpandedType.GetVendorId()
- << ", vendor type" << eapSettings.iEAPExpandedType.GetVendorType() << ", error code:"
- << err;
- // clear the instance so that the next attempt starts from scratch
- mEapTypeIf.reset(NULL);
- mCurrentServerEapType = *EapExpandedTypeNone.GetType();
- // nothing to be set to config
- return false;
- }
- copyFromEapSettings(eapSettings, config);
- return true;
-}
-
-bool EapQtConfigInterfacePrivate::convertToBool(TBool value)
-{
- return (value != EFalse ? true : false);
-}
-
-TBool EapQtConfigInterfacePrivate::convertToTbool(bool value)
-{
- return (value ? ETrue : EFalse);
-}
-
-void EapQtConfigInterfacePrivate::copyToEapSettings(const EapQtConfig &config, EAPSettings &eapSettings)
-{
- qDebug("EapQtConfigInterfacePrivate::copyToEapSettings(), this = 0x%08x", this);
-
- int ind = 0;
-
- QVariant varValue = config.value(EapQtConfig::UsernameAutomatic);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iUseAutomaticUsernamePresent = ETrue;
- eapSettings.iUseAutomaticUsername = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings UsernameAutomatic: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::AuthorityCertificateAutomatic);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iUseAutomaticCACertificatePresent = ETrue;
- eapSettings.iUseAutomaticCACertificate = convertToTbool(varValue.toBool());
- qDebug()
- << "EapQtConfigInterfacePrivate - copyToEapSettings AuthorityCertificateAutomatic: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::Username);
- // do not copy if too large string
- if (varValue.type() == QVariant::String && varValue.toString().count() <= StringMaxLength) {
- // QString::utf16 returns a null terminated string
- eapSettings.iUsername.Copy(varValue.toString().utf16());
- eapSettings.iUsernamePresent = ETrue;
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings Username: "
- << varValue.toString();
- }
-
- varValue = config.value(EapQtConfig::PasswordPrompt);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iShowPassWordPromptPresent = ETrue;
- eapSettings.iShowPassWordPrompt = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings PasswordPrompt: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::Password);
- // do not copy if too large string
- if (varValue.type() == QVariant::String && varValue.toString().count() <= StringMaxLength) {
- //QString::utf16 returns a null terminated string
- eapSettings.iPassword.Copy(varValue.toString().utf16());
- eapSettings.iPasswordPresent = ETrue;
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings Password: "
- << varValue.toString();
- }
-
- varValue = config.value(EapQtConfig::PasswordClear);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iPasswordExistPresent = ETrue;
- // eapSettings.iPasswordExist = false cleans the password from database, true does nothing
- eapSettings.iPasswordExist = convertToTbool(!varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings PasswordClear: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::RealmAutomatic);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iUseAutomaticRealmPresent = ETrue;
- eapSettings.iUseAutomaticRealm = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings RealmAutomatic: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::Realm);
- // do not copy if too large string
- if (varValue.type() == QVariant::String && varValue.toString().count() <= StringMaxLength) {
- // QString::utf16 returns a null terminated string
- eapSettings.iRealm.Copy(varValue.toString().utf16());
- eapSettings.iRealmPresent = ETrue;
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings Realm: "
- << varValue.toString();
- }
-
- varValue = config.value(EapQtConfig::UsePseudonyms);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iUsePseudonymsPresent = ETrue;
- eapSettings.iUsePseudonyms = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings UsePseudonyms: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::VerifyServerRealm);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iVerifyServerRealmPresent = ETrue;
- eapSettings.iVerifyServerRealm = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings VerifyServerRealm: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::ClientAuthenticationRequired);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iRequireClientAuthenticationPresent = ETrue;
- eapSettings.iRequireClientAuthentication = convertToTbool(varValue.toBool());
- qDebug()
- << "EapQtConfigInterfacePrivate - copyToEapSettings ClientAuthenticationRequired: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::SessionValidityTime);
- if (varValue.type() == QVariant::UInt) {
- eapSettings.iSessionValidityTimePresent = ETrue;
- eapSettings.iSessionValidityTime = varValue.toUInt();
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings SessionValidityTime: "
- << varValue.toUInt();
- }
-
- varValue = config.value(EapQtConfig::PeapVersion0Allowed);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iPEAPVersionsPresent = ETrue;
- eapSettings.iPEAPv0Allowed = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings PeapVersion0Allowed: "
- << varValue.toBool();
- } else {
- // in any other case disable PEAP version;
- // no need to set eapSettings.iPEAPVersionsPresent,
- // it will be set if one of the other PEAP versions is enabled,
- // otherwise this setting is redundant and can be ignored
- eapSettings.iPEAPv0Allowed = EFalse;
- }
-
- varValue = config.value(EapQtConfig::PeapVersion1Allowed);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iPEAPVersionsPresent = ETrue;
- eapSettings.iPEAPv1Allowed = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings PeapVersion1Allowed: "
- << varValue.toBool();
- } else {
- // in any other case disable PEAP version;
- // no need to set eapSettings.iPEAPVersionsPresent,
- // it will be set if one of the other PEAP versions is enabled,
- // otherwise this setting is redundant and can be ignored
- eapSettings.iPEAPv1Allowed = EFalse;
- }
-
- varValue = config.value(EapQtConfig::PeapVersion2Allowed);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iPEAPVersionsPresent = ETrue;
- eapSettings.iPEAPv2Allowed = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings PeapVersion2Allowed: "
- << varValue.toBool();
- } else {
- // in any other case disable PEAP version;
- // no need to set eapSettings.iPEAPVersionsPresent,
- // it will be set if one of the other PEAP versions is enabled,
- // otherwise this setting is redundant and can be ignored
- eapSettings.iPEAPv2Allowed = EFalse;
- }
-
- varValue = config.value(EapQtConfig::ProvisioningModeAuthenticated);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iAuthProvModeAllowedPresent = ETrue;
- eapSettings.iAuthProvModeAllowed = convertToTbool(varValue.toBool());
- qDebug()
- << "EapQtConfigInterfacePrivate - copyToEapSettings ProvisioningModeAuthenticated: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::ProvisioningModeUnauthenticated);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iUnauthProvModeAllowedPresent = ETrue;
- eapSettings.iUnauthProvModeAllowed = convertToTbool(varValue.toBool());
- qDebug()
- << "EapQtConfigInterfacePrivate - copyToEapSettings ProvisioningModeUnauthenticated: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::PACGroupReference);
- // do not copy if too large string
- if (varValue.type() == QVariant::String && varValue.toString().count() <= StringMaxLength) {
- eapSettings.iPACGroupReference.Copy(varValue.toString().utf16());
- eapSettings.iPACGroupReferencePresent = ETrue;
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings PACGroupReference: "
- << varValue.toString();
- }
-
- varValue = config.value(EapQtConfig::WarnADHPNoPAC);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iWarnADHPNoPACPresent = ETrue;
- eapSettings.iWarnADHPNoPAC = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings WarnADHPNoPAC: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::WarnADHPNoMatchingPAC);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iWarnADHPNoMatchingPACPresent = ETrue;
- eapSettings.iWarnADHPNoMatchingPAC = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings WarnADHPNoMatchingPAC: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::WarnNotDefaultServer);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iWarnNotDefaultServerPresent = ETrue;
- eapSettings.iWarnNotDefaultServer = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings WarnNotDefaultServer: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::UseIdentityPrivacy);
- if (varValue.type() == QVariant::Bool) {
- eapSettings.iUseIdentityPrivacyPresent = ETrue;
- eapSettings.iUseIdentityPrivacy = convertToTbool(varValue.toBool());
- qDebug() << "EapQtConfigInterfacePrivate - copyToEapSettings UseIdentityPrivacy: "
- << varValue.toBool();
- }
-
- varValue = config.value(EapQtConfig::InnerType);
- if (varValue.type() == QVariant::List) {
-
- // not need to set disable inner types
- // EAP server takes care of them internally
-
- qDebug() << "EapQtConfigInterfacePrivate::copyToEapSettings() - InnerType present";
-
- QList<QVariant> varList = varValue.toList();
- TEapExpandedType tmpEap;
- EapQtPluginHandle tmpHandle;
- TUint err(KErrNone);
-
- for (ind = 0; ind < varList.count(); ind++) {
- if (varList[ind].canConvert<EapQtPluginHandle> ()) {
- // set to true only if at least one item is ok
- eapSettings.iEnabledEncapsulatedEAPExpandedTypesPresent = ETrue;
-
- tmpHandle = varList[ind].value<EapQtPluginHandle> ();
- tmpEap.SetValue(tmpHandle.type().eapExpandedData().data(),
- tmpHandle.type().eapExpandedData().length());
- err = eapSettings.iEnabledEncapsulatedEAPExpandedTypes.Append(tmpEap);
- if(err != KErrNone)
- {
- qDebug() << "ERROR: EapQtConfigInterfacePrivate::copyToEapSettings() - RArray::Append failed for inner types";
- eapSettings.iEnabledEncapsulatedEAPExpandedTypes.Reset();
- // no dynamic memory allocated for tmpEap, just continue with
- // the rest of the settings; EapSettings takes care of deallocations in its destructor
- break;
- }
-
- qDebug()
- << "EapQtConfigInterfacePrivate::copyToEapSettings() - Added to InnerType: "
- << tmpHandle.type().eapExpandedData().toHex();
- }
- }
- }
-
- varValue = config.value(EapQtConfig::CipherSuites);
- if (varValue.type() == QVariant::List) {
-
- qDebug() << "EapQtConfigInterfacePrivate::copyToEapSettings() - CipherSuites present";
- QList<QVariant> varCiphers = varValue.toList();
-
- // clears the ciphersuite configuration if the provided list is empty
- eapSettings.iCipherSuitesPresent = ETrue;
- TUint err(KErrNone);
-
- for (ind = 0; ind < varCiphers.count(); ind++) {
- // check that the item is of correct type (int also accepted to not be too strict)
- if (varCiphers[ind].type() == QVariant::UInt || varCiphers[ind].type() == QVariant::Int) {
-
- err = eapSettings.iCipherSuites.Append(varCiphers[ind].toUInt());
- if(err != KErrNone)
- {
- qDebug() << "ERROR: EapQtConfigInterfacePrivate::copyToEapSettings() - RArray::Append failed for ciphersuites";
- eapSettings.iCipherSuites.Reset();
- // continue with the rest of the settings, no dynamic
- // memory allocated for varCiphers[ind].toUInt()
- break;
- }
-
- qDebug(
- "EapQtConfigInterfacePrivate::copyToEapSettings() - CipherSuites at %d: 0x%08x",
- ind, varCiphers[ind].toUInt());
- }
- }
- }
-
- // set always to true to support clearing previously configured CA/user certificates
- // if the EAP method in question does not use certificates,
- // EAP server will ignore the setting;
- // CA/user certificates get cleared if EapQtConfig::Authority/UserCertificate is QVariant::Invalid or
- // the provided lists are empty
- eapSettings.iCertificatesPresent = ETrue;
-
- varValue = config.value(EapQtConfig::AuthorityCertificate);
- if (varValue.type() == QVariant::List) {
-
- qDebug()
- << "EapQtConfigInterfacePrivate::copyToEapSettings() - AuthorityCertificate present";
-
- QList<QVariant> varCerts = varValue.toList();
- for (ind = 0; ind < varCerts.count(); ind++) {
- // check that the item is of correct type
- if (varCerts[ind].canConvert<EapQtCertificateInfo> ()) {
- appendCertificateInfo(true, varCerts[ind].value<EapQtCertificateInfo> (),
- &(eapSettings.iCertificates));
- qDebug()
- << "EapQtConfigInterfacePrivate::copyToEapSettings() - AuthorityCertificate appended";
- }
- }
- }
-
- varValue = config.value(EapQtConfig::UserCertificate);
- if (varValue.type() == QVariant::List) {
-
- qDebug() << "EapQtConfigInterfacePrivate::copyToEapSettings() - UserCertificate present";
-
- QList<QVariant> varCerts = varValue.toList();
- for (ind = 0; ind < varCerts.count(); ind++) {
- // check that the item is of correct type
- if (varCerts[ind].canConvert<EapQtCertificateInfo> ()) {
- appendCertificateInfo(false, varCerts[ind].value<EapQtCertificateInfo> (),
- &(eapSettings.iCertificates));
- qDebug()
- << "EapQtConfigInterfacePrivate::copyToEapSettings() - AuthorityCertificate appended";
- }
- }
- }
-
-}
-
-// caller takes care of deallocating resulting data in certList
-void EapQtConfigInterfacePrivate::appendCertificateInfo(bool isCaCertificate,
- const EapQtCertificateInfo& certInfo, RPointerArray<EapCertificateEntry>* const certList)
-{
- qDebug("EapQtConfigInterfacePrivate::appendCertificateInfo(), this = 0x%08x", this);
-
- Q_ASSERT(certList);
-
- // use scoped pointer to make sure memory is not leaked in failures
- QScopedPointer<EapCertificateEntry> certEntry(new EapCertificateEntry);
-
- // set certificate enabled in EAP settings
- certEntry->SetIsEnabledPresent();
- certEntry->SetIsEnabled(ETrue);
-
- if (isCaCertificate) {
- qDebug("EapQtConfigInterfacePrivate::appendCertificateInfo() - CA certificate");
- certEntry->SetCertType(EapCertificateEntry::ECA);
- }
- else {
- qDebug("EapQtConfigInterfacePrivate::appendCertificateInfo() - Client certificate");
- certEntry->SetCertType(EapCertificateEntry::EUser);
- }
-
- qDebug("EapQtConfigInterfacePrivate::appendCertificateInfo() - *** Adding cert data");
-
- TBuf<KGeneralStringMaxLength> certText;
-
- QVariant varValue = certInfo.value(EapQtCertificateInfo::SubjectName);
- if (varValue.type() == QVariant::String && varValue.toString().count() <= StringMaxLength) {
- certEntry->SetSubjectNamePresent();
- certText.Copy(varValue.toString().utf16());
- certEntry->SetSubjectName(certText);
-
- qDebug() << "EapQtConfigInterfacePrivate::appendCertificateInfo() - SubjectName: "
- << varValue.toString();
- }
-
- varValue = certInfo.value(EapQtCertificateInfo::IssuerName);
- if (varValue.type() == QVariant::String && varValue.toString().count() <= StringMaxLength) {
- certEntry->SetIssuerNamePresent();
- certText.Copy(varValue.toString().utf16());
- certEntry->SetIssuerName(certText);
-
- qDebug() << "EapQtConfigInterfacePrivate::appendCertificateInfo() - IssuerName: "
- << varValue.toString();
- }
-
- varValue = certInfo.value(EapQtCertificateInfo::SerialNumber);
- if (varValue.type() == QVariant::String && varValue.toString().count() <= StringMaxLength) {
- certEntry->SetSerialNumberPresent();
- certText.Copy(varValue.toString().utf16());
- certEntry->SetSerialNumber(certText);
-
- qDebug() << "EapQtConfigInterfacePrivate::appendCertificateInfo() - SerialNumber: "
- << varValue.toString();
- }
-
- TCertLabel certLabel;
-
- varValue = certInfo.value(EapQtCertificateInfo::CertificateLabel);
- if (varValue.type() == QVariant::String && varValue.toString().count() <= CertLabelMaxLength) {
- certEntry->SetLabelPresent();
- certLabel.Copy(varValue.toString().utf16());
- certEntry->SetLabel(certLabel);
-
- qDebug() << "EapQtConfigInterfacePrivate::appendCertificateInfo() - CertificateLabel: "
- << varValue.toString();
- }
-
- TBuf<KThumbprintMaxLength> thumbPrint;
-
- varValue = certInfo.value(EapQtCertificateInfo::ThumbPrint);
- if (varValue.type() == QVariant::String && varValue.toString().count()
- <= CertThumbprintMaxLength) {
- certEntry->SetThumbprintPresent();
- thumbPrint.Copy(varValue.toString().utf16());
- certEntry->SetThumbprint(thumbPrint);
-
- qDebug() << "EapQtConfigInterfacePrivate::appendCertificateInfo() - ThumbPrint: "
- << varValue.toString();
- }
-
- TKeyIdentifier keyId;
-
- varValue = certInfo.value(EapQtCertificateInfo::SubjectKeyId);
- if (varValue.type() == QVariant::ByteArray && varValue.toByteArray().count()
- <= CertSubjectKeyIdLength) {
- certEntry->SetSubjectKeyIdPresent();
- keyId.Copy(reinterpret_cast<unsigned char*> (varValue.toByteArray().data()),
- varValue.toByteArray().size());
- certEntry->SetSubjectKeyId(keyId);
-
- qDebug() << "EapQtConfigInterfacePrivate::appendCertificateInfo() - SubjectKeyId: "
- << varValue.toByteArray().toHex();
- }
-
- TUint err = certList->Append(certEntry.data());
- if (err != KErrNone) {
- qDebug() << "ERROR: EapQtConfigInterfacePrivate::appendCertificateInfo()"
- << "- RPointerArray::Append failed for certificate entry";
- // scoped certEntry pointer deleted automatically
- // no need to touch the array, it is handled by the caller
- }
- else {
- qDebug() << "EapQtConfigInterfacePrivate::appendCertificateInfo()"
- << "- *** certificate appended to list";
- // remove the ownerhsip from scoped pointer, entry owned by the array now
- (void) certEntry.take();
- }
-
- // EapSettings destructor takes care of deallocating the array entries
-}
-
-void EapQtConfigInterfacePrivate::copyFromEapSettings(EAPSettings &eapSettings, EapQtConfig &config)
-{
- qDebug("EapQtConfigInterfacePrivate::copyFromEapSettings(), this = 0x%08x", this);
-
- int ind = 0;
-
- // automatic username
- if (eapSettings.iUseAutomaticUsernamePresent) {
- config.setValue(EapQtConfig::UsernameAutomatic, convertToBool(
- eapSettings.iUseAutomaticUsername));
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings UsernameAutomatic: "
- << config.value(EapQtConfig::UsernameAutomatic).toBool();
- }
-
- // automatic CA certificate
- if (eapSettings.iUseAutomaticCACertificatePresent) {
- config.setValue(EapQtConfig::AuthorityCertificateAutomatic, convertToBool(
- eapSettings.iUseAutomaticCACertificate));
- qDebug()
- << "EapQtConfigInterfacePrivate - copyFromEapSettings AuthorityCertificateAutomatic: "
- << config.value(EapQtConfig::AuthorityCertificateAutomatic).toBool();
- }
-
- // username
- if (eapSettings.iUsernamePresent) {
- config.setValue(EapQtConfig::Username, QString::fromUtf16(eapSettings.iUsername.Ptr(),
- eapSettings.iUsername.Length()));
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings Username: " << config.value(
- EapQtConfig::Username).toString();
- }
-
- // password existence check, password itself is write-only, cannot be read
- if (eapSettings.iPasswordExistPresent) {
- // report to caller if password exists in the database
- config.setValue(EapQtConfig::PasswordStored, convertToBool(eapSettings.iPasswordExist));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings PasswordStored: "
- << config.value(EapQtConfig::PasswordStored).toBool();
- }
-
- // password prompt
- if (eapSettings.iShowPassWordPromptPresent) {
- config.setValue(EapQtConfig::PasswordPrompt, convertToBool(eapSettings.iShowPassWordPrompt));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings PasswordPrompt: "
- << config.value(EapQtConfig::PasswordPrompt).toBool();
- }
-
- // automatic realm
- if (eapSettings.iUseAutomaticRealmPresent) {
- config.setValue(EapQtConfig::RealmAutomatic, convertToBool(eapSettings.iUseAutomaticRealm));
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings RealmAutomatic: "
- << config.value(EapQtConfig::RealmAutomatic).toBool();
- }
-
- // realm
- if (eapSettings.iRealmPresent) {
- config.setValue(EapQtConfig::Realm, QString::fromUtf16(eapSettings.iRealm.Ptr(),
- eapSettings.iRealm.Length()));
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings Realm: " << config.value(
- EapQtConfig::Realm).toString();
- }
-
- // server name
- if (eapSettings.iVerifyServerRealmPresent) {
- config.setValue(EapQtConfig::VerifyServerRealm, convertToBool(
- eapSettings.iVerifyServerRealm));
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings VerifyServerRealm: "
- << config.value(EapQtConfig::VerifyServerRealm).toBool();
- }
-
- // pseudonym
- if (eapSettings.iUsePseudonymsPresent) {
- config.setValue(EapQtConfig::UsePseudonyms, convertToBool(eapSettings.iUsePseudonyms));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings UsePseudonyms: "
- << config.value(EapQtConfig::UsePseudonyms).toBool();
- }
-
- // policy: server must require client authentication
- if (eapSettings.iRequireClientAuthenticationPresent) {
- config.setValue(EapQtConfig::ClientAuthenticationRequired, convertToBool(
- eapSettings.iRequireClientAuthentication));
-
- qDebug()
- << "EapQtConfigInterfacePrivate - copyFromEapSettings ClientAuthenticationRequired: "
- << config.value(EapQtConfig::ClientAuthenticationRequired).toBool();
- }
-
- // session validity time
- if (eapSettings.iSessionValidityTimePresent) {
- config.setValue(EapQtConfig::SessionValidityTime, eapSettings.iSessionValidityTime);
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings SessionValidityTime: "
- << config.value(EapQtConfig::SessionValidityTime).toUInt();
- }
-
- // TLS ciphersuites
- if (eapSettings.iCipherSuitesPresent) {
- QList<QVariant> ciphers; // QVariant has a constructor for uint
- for (ind = 0; ind < eapSettings.iCipherSuites.Count(); ind++) {
- ciphers.append(eapSettings.iCipherSuites[ind]);
- qDebug("EapQtConfigInterfacePrivate - copyFromEapSettings CipherSuites at %d: 0x%08x",
- ind, ciphers[ind].toUInt());
- }
- config.setValue(EapQtConfig::CipherSuites, ciphers);
- }
-
- // certificates
- if (eapSettings.iCertificatesPresent) {
-
- QList<EapQtCertificateInfo> caCerts;
- QList<EapQtCertificateInfo> clientCerts;
- RPointerArray<EapCertificateEntry> serverCaCerts;
- RPointerArray<EapCertificateEntry> serverClientCerts;
-
- // separate CA and client certs to their own lists
- for (ind = 0; ind < eapSettings.iCertificates.Count(); ind++) {
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings certificates, "
- << "cert type: " << eapSettings.iCertificates[ind]->GetCertType() << ", enabled: "
- << convertToBool(eapSettings.iCertificates[ind]->GetIsEnabled());
-
- // only enabled certificates are reported
- if (eapSettings.iCertificates[ind]->GetCertType() == EapCertificateEntry::EUser
- && eapSettings.iCertificates[ind]->GetIsEnabled() != EFalse) {
- // no need to check the return value for failures,
- // serverClientCerts does not own the pointed data,
- // eapSettings owns and deallocates it
- (void) serverClientCerts.Append(eapSettings.iCertificates[ind]);
- }
- // only enabled certificates are reported
- else if (eapSettings.iCertificates[ind]->GetCertType() == EapCertificateEntry::ECA
- && eapSettings.iCertificates[ind]->GetIsEnabled() != EFalse) {
- // no need to check the return value for failures,
- // serverCaCerts does not own the pointed data,
- // eapSettings owns and deallocates it
- (void) serverCaCerts.Append(eapSettings.iCertificates[ind]);
- }
- else {
- qDebug()
- << "WARNING: EapQtConfigInterfacePrivate - copyFromEapSettings certificates, "
- << "unknown certificate type in the list or certificate not enabled";
- }
- }
-
- // copy to lists of our type
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings AuthorityCertificates";
- copyCertificateInfo(&serverCaCerts, &caCerts);
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings UserCertificates";
- copyCertificateInfo(&serverClientCerts, &clientCerts);
-
- // reset the arrays, data is owned by EapSettings.h,
- // must not be destroyed here
- serverCaCerts.Reset();
- serverClientCerts.Reset();
-
- // we still need to convert QList<EapQtCertificateInfo> to QList<QVariant>
- // to be able to store to config
- QVariant tmp;
- QList<QVariant> varCaCerts;
- QList<QVariant> varClientCerts;
-
- for (ind = 0; ind < caCerts.count(); ind++) {
- tmp.setValue(caCerts[ind]);
- varCaCerts.append(tmp);
- }
- for (ind = 0; ind < clientCerts.count(); ind++) {
- tmp.setValue(clientCerts[ind]);
- varClientCerts.append(tmp);
- }
-
- // finally copy to config
- config.setValue(EapQtConfig::AuthorityCertificate, varCaCerts);
- config.setValue(EapQtConfig::UserCertificate, varClientCerts);
- }
-
- // PEAP specific
- if (eapSettings.iPEAPVersionsPresent) {
- config.setValue(EapQtConfig::PeapVersion0Allowed, convertToBool(eapSettings.iPEAPv0Allowed));
- config.setValue(EapQtConfig::PeapVersion1Allowed, convertToBool(eapSettings.iPEAPv1Allowed));
- config.setValue(EapQtConfig::PeapVersion2Allowed, convertToBool(eapSettings.iPEAPv2Allowed));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings PeapVersion0Allowed: "
- << config.value(EapQtConfig::PeapVersion0Allowed).toBool();
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings PeapVersion1Allowed: "
- << config.value(EapQtConfig::PeapVersion1Allowed).toBool();
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings PeapVersion2Allowed: "
- << config.value(EapQtConfig::PeapVersion2Allowed).toBool();
- }
-
- // TLS privacy
- if (eapSettings.iUseIdentityPrivacyPresent) {
- config.setValue(EapQtConfig::UseIdentityPrivacy, convertToBool(
- eapSettings.iUseIdentityPrivacy));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings UseIdentityPrivacy: "
- << config.value(EapQtConfig::UseIdentityPrivacy).toBool();
- }
-
- // EAP-FAST specific
- if (eapSettings.iAuthProvModeAllowedPresent) {
- config.setValue(EapQtConfig::ProvisioningModeAuthenticated, convertToBool(
- eapSettings.iAuthProvModeAllowed));
-
- qDebug()
- << "EapQtConfigInterfacePrivate - copyFromEapSettings ProvisioningModeAuthenticated: "
- << config.value(EapQtConfig::ProvisioningModeAuthenticated).toBool();
- }
- if (eapSettings.iUnauthProvModeAllowedPresent) {
- config.setValue(EapQtConfig::ProvisioningModeUnauthenticated, convertToBool(
- eapSettings.iUnauthProvModeAllowed));
-
- qDebug()
- << "EapQtConfigInterfacePrivate - copyFromEapSettings ProvisioningModeUnauthenticated: "
- << config.value(EapQtConfig::ProvisioningModeUnauthenticated).toBool();
- }
- if (eapSettings.iWarnADHPNoPACPresent) {
- config.setValue(EapQtConfig::WarnADHPNoPAC, convertToBool(eapSettings.iWarnADHPNoPAC));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings WarnADHPNoPAC: "
- << config.value(EapQtConfig::WarnADHPNoPAC).toBool();
- }
- if (eapSettings.iWarnADHPNoMatchingPACPresent) {
- config.setValue(EapQtConfig::WarnADHPNoMatchingPAC, convertToBool(
- eapSettings.iWarnADHPNoMatchingPAC));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings WarnADHPNoMatchingPAC: "
- << config.value(EapQtConfig::WarnADHPNoMatchingPAC).toBool();
- }
- if (eapSettings.iWarnNotDefaultServerPresent) {
- config.setValue(EapQtConfig::WarnNotDefaultServer, convertToBool(
- eapSettings.iWarnNotDefaultServer));
-
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings WarnNotDefaultServer: "
- << config.value(EapQtConfig::WarnNotDefaultServer).toBool();
- }
- if (eapSettings.iPACGroupReferencePresent) {
- config.setValue(EapQtConfig::PACGroupReference, QString::fromUtf16(
- eapSettings.iPACGroupReference.Ptr(), eapSettings.iPACGroupReference.Length()));
- qDebug() << "EapQtConfigInterfacePrivate - copyFromEapSettings PACGroupReference: "
- << config.value(EapQtConfig::PACGroupReference).toString();
- }
-
- // enabled inner EAPs
- if (eapSettings.iEnabledEncapsulatedEAPExpandedTypesPresent) {
-
- qDebug("EapQtConfigInterfacePrivate - copyFromEapSettings InnerType, enabled count %d",
- eapSettings.iEnabledEncapsulatedEAPExpandedTypes.Count());
-
- QList<QByteArray> innerEapsOn;
- appendEapTypes(&(eapSettings.iEnabledEncapsulatedEAPExpandedTypes), &innerEapsOn);
-
- // convert to QList<QVariant> to be able to store to config
- QVariant varTmp;
- QList<QVariant> varInnerEapsOn;
- int dummy = 0;
-
- for (ind = 0; ind < innerEapsOn.count(); ind++) {
- // report only EAPs which do have an UI plugin
- if (isUiSupported(innerEapsOn[ind], dummy)) {
- // create plugin handle from EAP type with constructors
- // calls: EapQtExpandedEapType(const QByteArray data) -> EapQtPluginHandle(EapQtExpandedEapType type)
- varTmp.setValue(EapQtPluginHandle(EapQtExpandedEapType(innerEapsOn[ind])));
- varInnerEapsOn.append(varTmp);
- qDebug()
- << "EapQtConfigInterfacePrivate - copyFromEapSettings InnerType: added EAP: "
- << innerEapsOn[ind].toHex();
- }
- }
-
- // copy to config
- config.setValue(EapQtConfig::InnerType, varInnerEapsOn);
- }
-
- // disabled inner EAPs
- if (eapSettings.iDisabledEncapsulatedEAPExpandedTypesPresent) {
- // setting is not needed, enabled are enough
- qDebug(
- "EapQtConfigInterfacePrivate - copyFromEapSettings InnerType: disabled count %d (not needed for anything here)",
- eapSettings.iDisabledEncapsulatedEAPExpandedTypes.Count());
- }
-
-}
-
-QList<EapQtPluginHandle> EapQtConfigInterfacePrivate::selectedOuterTypes()
-{
- qDebug("EapQtConfigInterfacePrivate::selectedOuterTypes(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- if (!mEapDbIndexValid) {
- qDebug() << "ERROR: Database reference not valid, call setConfigurationReference first!";
- return QList<EapQtPluginHandle> ();
- }
-
- // call to make sure the members (mOuterEapsOn and mSupportedOuterTypes) are up-to-date
- (void) supportedOuterTypes();
-
- QList<EapQtPluginHandle> selectedOuterTypes;
-
- QList<QByteArray> tmpEaps;
- appendEapTypes(&mOuterEapsOn, &tmpEaps);
-
- // report only the ones that also have an UI, i.e. listed in mSupportedOuterTypes
- for (int ind = 0; ind < mSupportedOuterTypes.count(); ind++) {
- if (tmpEaps.contains(mSupportedOuterTypes[ind].pluginHandle().type().eapExpandedData())) {
- selectedOuterTypes.append(mSupportedOuterTypes[ind].pluginHandle());
- }
- }
-
- qDebug("EapQtConfigInterfacePrivate - selected outer type count: %d",
- selectedOuterTypes.count());
-
- return selectedOuterTypes;
-}
-
-bool EapQtConfigInterfacePrivate::isSupportedOuterType(const EapQtPluginHandle &handle)
-{
- qDebug("EapQtConfigInterfacePrivate::isSupportedOuterType(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- // check if mSupportedOuterTypes is up-to-date
- if (mSupportedOuterTypes.count() <= 0) {
- // update mSupportedOuterTypes
- (void) supportedOuterTypes();
- }
-
- bool ret = false;
- for (int ind = 0; ind < mSupportedOuterTypes.count(); ind++) {
- if (mSupportedOuterTypes[ind].pluginHandle() == handle) {
- ret = true;
- }
- }
- return ret;
-}
-
-bool EapQtConfigInterfacePrivate::setSelectedOuterTypes(
- const QList<EapQtPluginHandle> &outerHandles)
-{
- qDebug("EapQtConfigInterfacePrivate::setSelectedOuterTypes()");
-
- checkInstanceThrowing();
-
- if (!mEapDbIndexValid || mEapGsIf.isNull()) {
- qDebug()
- << "ERROR: Database reference not valid (or mEapGsIf is NULL), call setConfigurationReference first!";
- return false;
- }
-
- // check if mSupportedOuterTypes is up-to-date
- if (mSupportedOuterTypes.count() <= 0) {
- // update mSupportedOuterTypes
- (void) supportedOuterTypes();
- }
-
- // clear arrays
- mOuterEapsOn.Reset();
- mOuterEapsOff.Reset();
-
- // pick only the supported ones from outerHandles
- TEapExpandedType tmpEap;
- TUint err(KErrNone);
- for (int ind = 0; ind < mSupportedOuterTypes.count(); ind++) {
- if (outerHandles.contains(mSupportedOuterTypes[ind].pluginHandle())) {
-
- // convert to TEapExpandedType
- tmpEap.SetValue(
- mSupportedOuterTypes[ind].pluginHandle().type().eapExpandedData().data(),
- mSupportedOuterTypes[ind].pluginHandle().type().eapExpandedData().length());
-
- // add to mOuterEapsOn
- err = mOuterEapsOn.Append(tmpEap);
- if(err != KErrNone)
- {
- qDebug() << "ERROR: EapQtConfigInterfacePrivate - setSelectedOuterTypes RArray::Append failed";
- // reset the array, no dynamic memory allocated for tmpEap
- mOuterEapsOn.Reset();
- return false;
- }
-
- qDebug()
- << "EapQtConfigInterfacePrivate - setSelectedOuterTypes adding to enabledOuterHandles: "
- << mSupportedOuterTypes[ind].pluginHandle().type().eapExpandedData().toHex();
- }
- }
-
- bool ret = true;
-
- // set selection to EAP server, no need to have correct content in mOuterEapsOff,
- // EAP server handles it, mOuterEapsOn is only important
- err = mEapGsIf->SetEapMethods(mOuterEapsOn, mOuterEapsOff);
- if (err != KErrNone) {
- qDebug("EapQtConfigInterfacePrivate::setSelectedOuterTypes() - SetEapMethods failed: %d",
- err);
- // nothing we can do to recover, just exit
- ret = false;
- }
- return ret;
-}
-
-bool EapQtConfigInterfacePrivate::isSupportedInnerType(const EapQtPluginHandle &outerHandle,
- const EapQtPluginHandle &innerHandle)
-{
- qDebug("EapQtConfigInterfacePrivate::isSupportedInnerType(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- // update mSupportedInnerTypes
- (void) supportedInnerTypes(outerHandle);
-
- for (int ind = 0; ind < mSupportedInnerTypes.count(); ind++) {
- if (mSupportedInnerTypes[ind].pluginHandle() == innerHandle) {
- return true;
- }
- }
- return false;
-}
-
-bool EapQtConfigInterfacePrivate::deleteConfiguration()
-{
- qDebug("EapQtConfigInterfacePrivate::deleteConfiguration(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- if (!mEapDbIndexValid || mEapGsIf.isNull()) {
- qDebug()
- << "ERROR: Database reference not valid (or mEapGsIf is NULL), call setConfigurationReference first!";
- return false;
- }
-
- bool ret = true;
- TInt err = mEapGsIf->DeleteAllEapSettings();
- if (err != KErrNone) {
- ret = false;
- }
- return ret;
-}
-
-void EapQtConfigInterfacePrivate::loadPlugins()
-{
- qDebug("EapQtConfigInterfacePrivate::loadPlugins(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- // plugin directory defined in cpeapplugininterface.h
- QDir pluginsDir(CpEapPluginInterfacePluginDirectory);
- foreach( QString fileName, pluginsDir.entryList(QDir::Files) )
- {
- QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
- QObject *tmp = loader.instance();
- if (tmp) {
- CpEapPluginInterface *plugin = qobject_cast<CpEapPluginInterface*> (tmp);
- if (plugin) {
- mPlugins.append(plugin);
- }
- }
- }
-
- // collect UI plugin infos
- QList<CpEapPluginInterface*>::iterator iter;
- for (iter = mPlugins.begin(); iter != mPlugins.end(); ++iter) {
- mPluginInfos.append((*iter)->pluginInfo());
- }
-
- // sort the UI plugins according to their order number
- qSort(mPluginInfos.begin(), mPluginInfos.end(), EapQtConfigInterfacePrivate::pluginLessThan);
-
- qDebug("EapQtConfigInterfacePrivate - loadPlugins: supported EAP plugin count: %d",
- mPluginInfos.count());
-}
-
-bool EapQtConfigInterfacePrivate::pluginLessThan(
- const EapQtPluginInfo &plugin1,
- const EapQtPluginInfo &plugin2)
-{
- return plugin1.orderNumber() < plugin2.orderNumber();
-}
-
-CpBaseSettingView *EapQtConfigInterfacePrivate::uiInstance(const EapQtPluginHandle &outerHandle,
- const EapQtPluginHandle &pluginHandle)
-{
- qDebug("EapQtConfigInterfacePrivate::uiInstance(), this = 0x%08x", this);
-
- checkInstanceThrowing();
-
- // if outer type UI is requested, outerHandle must be undefined and pluginHandle
- // must be supported as outer type
- if (outerHandle == EapQtPluginHandle::PluginUndefined) {
- if (!isSupportedOuterType(pluginHandle)) {
- qDebug() << "ERROR: EapQtConfigInterfacePrivate::uiInstance() -"
- << "plugin not supported as outer type";
- return NULL;
- }
- }
- else {
- // outerHandle defined, pluginHandle must be supported inside outerHandle
- if (!isSupportedInnerType(outerHandle, pluginHandle)) {
- qDebug() << "ERROR: EapQtConfigInterfacePrivate::uiInstance() -"
- << "plugin not supported as the inner type of the specified outer type";
- return NULL;
- }
- }
-
- if (mTranslator.isNull()) {
- // install translations for EAP UI plugins
- mTranslator.reset(new HbTranslator(eapTranslationFile));
- }
-
- // go through all interfaces (dlls)
- QList<CpEapPluginInterface*>::iterator iter;
- for (iter = mPlugins.begin(); iter != mPlugins.end(); ++iter) {
- QList<EapQtPluginInfo> plugins;
- plugins.append((*iter)->pluginInfo());
-
- // go through all plugings inside the interface implementation
- QList<EapQtPluginInfo>::iterator j;
- for (j = plugins.begin(); j != plugins.end(); ++j) {
- if ((*j).pluginHandle() == pluginHandle) {
- qDebug("EapQtConfigInterfacePrivate::uiInstance() - found plugin");
- // indicate configured IAP to plugin
- (*iter)->setSettingsReference(getEapBearer(), mIapId);
- return (*iter)->uiInstance(outerHandle, *j);
- }
- }
-
- }
- qDebug("ERROR: EapQtConfigInterfacePrivate::uiInstance() - plugin not found");
- return NULL;
-}
-
-EapQtConfigInterface::EapBearerType EapQtConfigInterfacePrivate::getEapBearer()
-{
- EapQtConfigInterface::EapBearerType ret(EapQtConfigInterface::EapBearerTypeWlan);
-
- switch (mEapBearer) {
- case EVpn:
- ret = EapQtConfigInterface::EapBearerTypeVpn;
- break;
- default:
- ret = EapQtConfigInterface::EapBearerTypeWlan;
- break;
- }
- return ret;
-}
-
-EapQtValidator *EapQtConfigInterfacePrivate::validatorEap(const EapQtExpandedEapType &type,
- const EapQtConfig::SettingsId id)
-{
- qDebug("EapQtConfigInterfacePrivate::validatorEap(), this = 0x%08x", this);
-
- qDebug() << "EapQtConfigInterfacePrivate::validatorEap() - requested EAP: "
- << type.eapExpandedData().toHex();
- qDebug() << "EapQtConfigInterfacePrivate::validatorEap() - setting: " << id;
-
- EapQtValidator *ret = NULL;
-
- switch (id) {
-
- case EapQtConfig::Username:
- switch (type.type()) {
- case EapQtExpandedEapType::TypeEapAka:
- case EapQtExpandedEapType::TypeEapFast:
- case EapQtExpandedEapType::TypeEapGtc:
- case EapQtExpandedEapType::TypeLeap:
- case EapQtExpandedEapType::TypeEapMschapv2:
- case EapQtExpandedEapType::TypePeap:
- case EapQtExpandedEapType::TypeEapSim:
- case EapQtExpandedEapType::TypeEapTls:
- case EapQtExpandedEapType::TypeEapTtls:
- case EapQtExpandedEapType::TypePap:
- case EapQtExpandedEapType::TypePlainMschapv2:
- ret = new EapQtValidatorUsername(type);
- break;
- default:
- ret = NULL;
- }
- break;
-
- case EapQtConfig::Password:
- switch (type.type()) {
- case EapQtExpandedEapType::TypeEapGtc:
- case EapQtExpandedEapType::TypeLeap:
- case EapQtExpandedEapType::TypeEapMschapv2:
- case EapQtExpandedEapType::TypePap:
- case EapQtExpandedEapType::TypePlainMschapv2:
- ret = new EapQtValidatorPassword(type);
- break;
- default:
- ret = NULL;
- }
- break;
-
- case EapQtConfig::Realm:
- switch (type.type()) {
- case EapQtExpandedEapType::TypeEapAka:
- case EapQtExpandedEapType::TypeEapFast:
- case EapQtExpandedEapType::TypePeap:
- case EapQtExpandedEapType::TypeEapSim:
- case EapQtExpandedEapType::TypeEapTls:
- case EapQtExpandedEapType::TypeEapTtls:
- ret = new EapQtValidatorRealm(type);
- break;
- default:
- ret = NULL;
- }
- break;
-
- default:
- ret = NULL;
-
- }
-
- qDebug() << "EapQtConfigInterfacePrivate::validatorEap() - is returning NULL: " << (ret == NULL);
-
- return ret;
-}
-
-bool EapQtConfigInterfacePrivate::readPacStoreConfiguration(EapQtPacStoreConfig& /* config */)
-{
- // not supported
- return false;
-}
-
-bool EapQtConfigInterfacePrivate::savePacStoreConfiguration(const EapQtPacStoreConfig& /* config */)
-{
- // not supported
- return false;
-}
-
-EapQtValidator *EapQtConfigInterfacePrivate::validatorPacStore(
- const EapQtPacStoreConfig::PacStoreSettings id)
-{
- qDebug("EapQtConfigInterfacePrivate::validatorPacStore(), this = 0x%08x", this);
-
- EapQtValidator *ret = NULL;
-
- switch (id) {
- case EapQtPacStoreConfig::PacStorePassword:
- ret = new EapQtValidatorPacStorePassword();
- break;
- case EapQtPacStoreConfig::PacStorePasswordConfirmation:
- ret = new EapQtValidatorPacStorePasswordConfirm();
- break;
- default:
- ret = NULL;
- }
-
- return ret;
-}