diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wlanwizard/src/wlanwizardutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlanwizard/src/wlanwizardutils.cpp Tue Aug 31 16:18:40 2010 +0300 @@ -0,0 +1,274 @@ +/* + * 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 +#include +#include + +// 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) +{ + OstTraceFunctionEntry0( WLANWIZARDUTILS_VALIDATEWPAKEY_ENTRY ); +#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 ); + + OstTraceFunctionExit0( WLANWIZARDUTILS_VALIDATEWPAKEY_EXIT ); + 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) +{ + OstTraceFunctionEntry0( WLANWIZARDUTILS_VALIDATEWEPKEY_ENTRY ); +#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 ); + + OstTraceFunctionExit0( WLANWIZARDUTILS_VALIDATEWEPKEY_EXIT ); + 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) +{ + OstTraceFunctionEntry0( WLANWIZARDUTILS_ISASCII_ENTRY ); + 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) { + OstTraceFunctionExit0( WLANWIZARDUTILS_ISASCII_EXIT ); + return KeyStatusIllegalCharacters; + } + ++data; + } + OstTraceFunctionExit0( DUP1_WLANWIZARDUTILS_ISASCII_EXIT ); + 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) +{ + OstTraceFunctionEntry0( WLANWIZARDUTILS_ISHEX_ENTRY ); + 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 { + OstTraceFunctionExit0( WLANWIZARDUTILS_ISHEX_EXIT ); + return KeyStatusIllegalCharacters; + } + } + OstTraceFunctionExit0( DUP1_WLANWIZARDUTILS_ISHEX_EXIT ); + 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) +{ + OstTraceFunctionEntry0( WLANWIZARDUTILS_VALIDATESSID_ENTRY ); + 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 ); + OstTraceFunctionExit0( WLANWIZARDUTILS_VALIDATESSID_EXIT ); + return ret; +}