diff -r f5050f1da672 -r 04becd199f91 javaextensions/satsa/pki/src.s60/tstscharactersetconverter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/satsa/pki/src.s60/tstscharactersetconverter.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2008 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: +* +*/ + + + +// INCLUDE FILES +#include "tstscharactersetconverter.h" +#include "stspkiconstants.h" + + + + + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TSTSCharacterSetConverter::TSTSCharacterSetConverter +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +TSTSCharacterSetConverter::TSTSCharacterSetConverter() +{ +} + + +// ----------------------------------------------------------------------------- +// TSTSCharacterSetConverter::EscapedUnicodeToPrintableL +// Converts string from escaped unicode to printable string +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +HBufC8* TSTSCharacterSetConverter::EscapedUnicodeToPrintableLC( + const TDesC& aValue) const +{ + TInt valueLength = aValue.Length(); + // returned value can never be longer than the original (it can be shorter) + HBufC8* value = HBufC8::NewL(valueLength); + CleanupStack::PushL(value); + TPtr8 valueDes = value->Des(); + + TLex lexer(aValue); + + while (!lexer.Eos()) + { + TChar currentChar = lexer.Get(); + if (currentChar == '\\') + { + // we are escaping + if (lexer.Eos()) + { + User::Leave(KSTSErrInvalidCAName); + } + lexer.Mark(); + currentChar = lexer.Get(); + if (!IsSpecial(currentChar)) + { + if (lexer.Eos()) + { + User::Leave(KSTSErrInvalidCAName); + } + lexer.Get(); + TLex hexPair(lexer.MarkedToken()); + TUint hexChar; + User::LeaveIfError(hexPair.Val(hexChar, EHex)); + currentChar = hexChar; + } + } + if (IsPrintable(currentChar)) + { + valueDes.Append(currentChar); + } + else + { + User::Leave(KSTSErrInvalidCharactersInCAName); + } + } + + return value; +} + +// ----------------------------------------------------------------------------- +// TSTSCharacterSetConverter::IsSpecial +// checks if the given character is "special" +// ----------------------------------------------------------------------------- +// +TBool TSTSCharacterSetConverter::IsSpecial( + const TChar& aValue) const +{ + switch (aValue) + { + case(','): + case('+'): + case('\"'): + case('\\'): + case('<'): + case('>'): + case(';'): + { + return ETrue; + } + default: + { + return EFalse; + } + } +} + +// ----------------------------------------------------------------------------- +// TSTSCharacterSetConverter::IsPrintable +// checks if the given character is allowed in PrintableString +// ----------------------------------------------------------------------------- +// +TBool TSTSCharacterSetConverter::IsPrintable( + const TChar& aValue) const +{ + if (aValue > 128) // non-ascii characters are not allowed + { + return EFalse; + } + if (aValue.IsAlphaDigit()) // A-Z,a-z,0-9 are allowed + { + return ETrue; + } + switch (aValue) // some other characters are also allowed + { + case(' '): + case('\''): + case('('): + case(')'): + case('+'): + case(','): + case('-'): + case('.'): + case('/'): + case(':'): + case('='): + case('?'): + { + return ETrue; + } + default: + { + return EFalse; + } + } +} + + + + +// End of File