--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlanwizard/src/wlanwizardutils.cpp Fri Jun 11 14:43:07 2010 +0300
@@ -0,0 +1,262 @@
+/*
+ * 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:
+ * WLAN Wizard Utilities
+ *
+ */
+
+// System includes
+#include <QString>
+#include <QDebug>
+#include <QVariant>
+
+// User includes
+#include "wlanwizardutils.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanwizardutilsTraces.h"
+#endif
+
+/*!
+ \class WlanWizardUtils wlanwizardutils.cpp
+ \brief Utilities for WLAN key validations.
+
+*/
+/*!
+ \enum WlanWizardUtils::KeyStatus
+ This enum defines the validation results.
+
+ \var WlanWizardUtils::KeyStatusOk
+ Key is valid.
+
+ \var WlanWizardUtils::KeyStatusIllegalCharacters
+ Key contains illegal characters.
+
+ \var WlanWizardUtils::KeyStatusWpaTooShort
+ WPA key is too short. Minimum allowed length is 8. See
+ WlanWizardUtils::validateWpaKey().
+
+ \var WlanWizardUtils::KeyStatusWpaTooLong
+ WPA key is too long. Minimum allowed length is 64 for hex key and 63 for
+ ascii key. See WlanWizardUtils::validateWpaKey().
+
+ \var WlanWizardUtils::KeyStatusWepInvalidLength
+ WEP key length is not valid. Valid keys are
+ - hex: 10 or 26 characters
+ - ascii: 5 or 13 characters. See WlanWizardUtils::validateWpaKey().
+
+ \var WlanWizardUtils::SsidMinLength
+ Minumum acceptable length for SSID.
+
+ \var WlanWizardUtils::SsidMaxLength
+ Maximum acceptable length for SSID.
+
+ \var WlanWizardUtils::WpaMinLength
+ Minumum acceptable length for WPA key.
+
+ \var WlanWizardUtils::WpaMaxLength
+ Maximum acceptable length for WPA key.
+
+ \var WlanWizardUtils::WepHex64BitMaxLength
+ Length of WEP key: format hex 64-bits.
+
+ \var WlanWizardUtils::WepHex128BitMaxLength
+ Length of WEP key: format hex 128-bits.
+
+ \var WlanWizardUtils::WepAscii64BitMaxLength
+ Length of WEP key: format ascii 64-bits.
+
+ \var WlanWizardUtils::WepAscii128BitMaxLength
+ Length of WEP key: format ascii 128-bits.
+
+*/
+
+// External function prototypes
+
+// Local constants
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+
+/*!
+ Process WPA key validation. A passphrase can contain from 8 to 63 ASCII
+ characters where each character MUST have a decimal encoding in the range of
+ 32 to 126, inclusive.
+
+ A preshared key is stored as 64 character hex string.
+
+ @param [in] key PSK to be validated
+
+ @return Following values are possible
+ - KeyStatusOk
+ - KeyStatusIllegalCharacters
+ - KeyStatusWpaTooShort
+ - KeyStatusWpaTooLong
+ */
+WlanWizardUtils::KeyStatus WlanWizardUtils::validateWpaKey(const QString &key)
+{
+#ifdef OST_TRACE_COMPILER_IN_USE
+ TPtrC tmp(key.utf16(),key.length() );
+ OstTraceExt1( TRACE_NORMAL, WLANWIZARDUTILS_VALIDATEWPAKEY,
+ "WlanWizardUtils::validateWpaKey;key=%S", tmp );
+#endif
+
+ int length = key.length();
+ KeyStatus ret = KeyStatusOk;
+
+ if (length < WpaMinLength) {
+ ret = KeyStatusWpaTooShort;
+ } else if (length > WpaMaxLength) {
+ ret = KeyStatusWpaTooLong;
+ } else if (length == WpaMaxLength) {
+ ret = isHex(key);
+ } else {
+ ret = isAscii(key);
+ }
+
+ OstTrace1(
+ TRACE_NORMAL, WLANWIZARDUTILS_VALIDATEWPAKEY_RETURN,
+ "WlanWizardUtils::validateWpaKey - Return;ret=%{KeyStatus}", ret );
+
+ return ret;
+}
+
+/*!
+ Process WEP key validation. Following keys are allowed:
+
+ HEX:
+ - 64 bit: allowed key length = 10
+ - 128 bit: allowed key length = 26
+
+ ASCII:
+ - 64 bit: allowed key length = 5
+ - 128 bit: allowed key length = 13
+
+ @param [in] key WEP Key to be validated
+
+ @return Following values are possible
+ - KeyStatusOk
+ - KeyStatusIllegalCharacters
+ - KeyStatusWepInvalidLength
+ */
+WlanWizardUtils::KeyStatus WlanWizardUtils::validateWepKey(const QString &key)
+{
+#ifdef OST_TRACE_COMPILER_IN_USE
+ TPtrC tmp(key.utf16(),key.length() );
+ OstTraceExt1( TRACE_NORMAL, WLANWIZARDUTILS_VALIDATEWEPKEY,
+ "WlanWizardUtils::validateWepKey;key=%S", tmp );
+#endif
+
+ int length = key.length();
+ KeyStatus ret = KeyStatusOk;
+
+ if (length == WepHex64BitMaxLength || length == WepHex128BitMaxLength) {
+ ret = isHex(key);
+ } else if (length == WepAscii64BitMaxLength || length == WepAscii128BitMaxLength) {
+ ret = isAscii(key);
+ } else {
+ ret = KeyStatusWepInvalidLength;
+ }
+
+ OstTrace1(
+ TRACE_NORMAL, WLANWIZARDUTILS_VALIDATEWEPKEY_RETURN,
+ "WlanWizardUtils::validateWepKey - Return;ret=%{KeyStatus}", ret );
+
+ return ret;
+}
+
+/*!
+ Process Ascii validation. Allowed characters are from 32 to 126.
+
+ @param [in] key to be validated.
+
+ @return Following values are possible
+ - KeyStatusOk
+ - KeyStatusIllegalCharacters
+ */
+WlanWizardUtils::KeyStatus WlanWizardUtils::isAscii(const QString &key)
+{
+ static const QChar ch32(32); // First visible ascii character
+ static const QChar ch126(126); // Last visible ascii character
+
+ const QChar *data = key.data();
+ while (!data->isNull()) {
+ if ((*data) < ch32 || (*data) > ch126) {
+ return KeyStatusIllegalCharacters;
+ }
+ ++data;
+ }
+ return KeyStatusOk;
+}
+
+/*!
+ Process Hex validation. Allowed characters are
+ - from 0 to 9
+ - from a to f
+ - from A to F
+
+ @param [in] key to be validated.
+
+ @return Following values are possible
+ - KeyStatusOk
+ - KeyStatusIllegalCharacters
+ */
+WlanWizardUtils::KeyStatus WlanWizardUtils::isHex(const QString &key)
+{
+ static const QChar ch_A(65); // Character: A
+ static const QChar ch_F(70); // Character: F
+ static const QChar ch_a(97); // Character: a
+ static const QChar ch_f(102);// Character: f
+
+ const QChar *data = key.data();
+ while (!data->isNull()) {
+ if (data->isDigit() ||
+ (*data) >= ch_a && (*data) <= ch_f ||
+ (*data) >= ch_A && (*data) <= ch_F) {
+ ++data;
+ } else {
+ return KeyStatusIllegalCharacters;
+ }
+ }
+ return KeyStatusOk;
+}
+
+/*!
+ Process SSID validation.
+
+ @param [in] ssid to be validated.
+
+ @return Following values are possible
+ - SsidStatusOk
+ - SsidStatusInvalidLength
+ */
+WlanWizardUtils::SsidStatus WlanWizardUtils::validateSsid(const QString &ssid)
+{
+ TPtrC tmp(ssid.utf16(), ssid.length() );
+ OstTraceExt1( TRACE_NORMAL, WLANWIZARDUTILS_VALIDATESSID,
+ "WlanWizardUtils::validateSsid;ssid=%S", tmp );
+
+ SsidStatus ret = SsidStatusOk;
+
+ int len = ssid.length();
+ if (len < SsidMinLength || len > SsidMaxLength) {
+ ret = SsidStatusInvalidLength;
+ }
+ OstTrace1(
+ TRACE_NORMAL, WLANWIZARDUTILS_VALIDATESSID_RETURN,
+ "WlanWizardUtils::validateSsid - Return;ret=%{SsidStatus}", ret );
+ return ret;
+}