diff -r 000000000000 -r e4d67989cc36 genericservices/httputils/UriParser/TValidator.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericservices/httputils/UriParser/TValidator.h Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,155 @@ +// Copyright (c) 2001-2009 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: +// Internal classes for PREQ748 - Adding support for the SIP scheme in URIs. +// Classes for validating URIs according to their scheme +// File contains internal classes for validatin URIs according to +// their scheme type +// +// + +/** + @file TValidator.h + @see Uri8.h +*/ + +#ifndef __TVALIDATOR_H__ +#define __TVALIDATOR_H__ + +#include +#include + +// Constants +// +_LIT8(KAlwaysValidChars, "-_.!~*'"); +_LIT8(KCommonValidChars, "()/+$"); +_LIT8(KValidUserChars, "=,;?&"); +_LIT8(KValidParamChars, "[]:&"); +_LIT8(KValidHeaderChars, "[]:?"); +_LIT8(KUriAlwaysValidSipMarkChars, "-_.!~*'()"); +_LIT8(KUriValidSipPwdChars, "&=+$,"); +_LIT8(KUriValidSipToken, "%+`"); + +const TUint32 KCharSetNumber = 0x001; +const TUint32 KCharSetLowerAlpha = 0x002; +const TUint32 KCharSetUpperAlpha = 0x004; +const TUint32 KCharSetAlways = 0x008; +const TUint32 KCharSetCommon = 0x010; +const TUint32 KCharSetUser = 0x020; +const TUint32 KCharSetParam = 0x040; +const TUint32 KCharSetHeader = 0x080; +const TUint32 KCharSetSipMark = 0x100; +const TUint32 KCharSetSipPwd = 0x200; +const TUint32 KCharSetSipTkn = 0x400; +const TUint32 KCharSetAlphnumberic = KCharSetNumber | KCharSetLowerAlpha | KCharSetUpperAlpha; +const TUint32 KCharSetUserAll = KCharSetUser | KCharSetAlphnumberic | KCharSetAlways | KCharSetCommon; +const TUint32 KCharSetParamAll = KCharSetParam | KCharSetAlphnumberic | KCharSetAlways | KCharSetCommon; +const TUint32 KCharSetHeaderAll = KCharSetHeader | KCharSetAlphnumberic | KCharSetAlways | KCharSetCommon; +const TUint32 KCharSetSipPassWord = KCharSetAlphnumberic| KCharSetSipPwd | KCharSetSipMark ; +const TUint32 KCharSetSipToken = KCharSetAlphnumberic| KCharSetAlways | KCharSetSipTkn; + +/** + Comments : This class provides Base functionality for Validation of an URI. + which needs to be overridden by derived classes for validation Based on their RFC + specifications. + + @internalComponent + @released +*/ +class TValidatorBase + { +public: + TValidatorBase(const TUriC8& aUri); + TInt Validate(); + +protected: + // Implemented by derived validator classes + virtual TBool IsValidUserInfo() const = 0; + virtual TBool IsValidHost() const = 0; + virtual TBool IsValidPort() const = 0; + virtual TBool IsValidPath() const = 0; + virtual TBool IsValidQuery() const = 0; + virtual TBool IsValidFragment() const = 0; + + // general utility methods + TBool IsValidCharacters(const TDesC8& aDes, TUint32 aCharTypes, TBool aEscapeValid = EFalse) const; + TBool IsEmpty(const TDesC8& aDes) const; + +private: + TBool IsInCharSet(TText8 aChar, const TDesC8& aCharSet) const; + +protected: + const TUriC8& iUri; + }; + +/** +Dependencies : TValidatorBase. +Comments : This class provides Sip Uri Validation functinality. + This is implemented as specified in RFC 3261. + + @internalComponent + @released +*/ +class TValidatorSip: public TValidatorBase + { +public: + TValidatorSip(const TUriC8& aUri); +private: + // from TValidatorBase + TBool IsValidUserInfo() const; + TBool IsValidHost() const; + TBool IsValidPort() const; + TBool IsValidPath() const; + TBool IsValidQuery() const; + TBool IsValidFragment() const; + + // supporting methods for the above + TBool IsValidUser(const TDesC8& aUser) const; + TBool IsValidPassword(const TDesC8& aPassword) const; + TBool IsDuplicated(const TDesC8& aParamName, const TDelimitedParserBase8 aParamList) const; + TBool IsValidParam(const TDesC8& aParam) const; + TBool IsValidParamSegment(const TDesC8& aName, const TDesC8& aValue) const; + TBool IsValidHeader(const TDesC8& aHeader) const; + TBool IsValidHeaderSegment(const TDesC8& aName, const TDesC8& aValue) const; + TBool IsValidParamToken(const TDesC8& aParam) const; + TBool IsValidParamTtl(const TDesC8& aParam) const; + TBool IsValidParamMaddr(const TDesC8& aParam) const; +}; + +/** +Dependencies : TValidatorBase. +Comments : This class provides Tel Uri Validation functinality. + Only Partial support for tel-Uris specified in RFC 3966. + section 5 of RFC 3966 is not supported. + @internalComponent + @released +*/ +class TValidatorTel: public TValidatorBase + { +public: + TValidatorTel(const TUriC8& aUri); +private: + // from TValidatorBase + TBool IsValidUserInfo() const; + TBool IsValidHost() const; + TBool IsValidPort() const; + TBool IsValidPath() const; + TBool IsValidQuery() const; + TBool IsValidFragment() const; + + // supporting methods for the above + TBool IsDuplicated(const TDesC8& aParamName, const TDelimitedParserBase8 aParamList) const; + TBool IsValidParamSegment(const TDesC8& aName, const TDesC8& aValue) const; +}; + +#endif // __TVALIDATOR_H__