sl@0: // Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // Internal classes for PREQ748 - Adding support for the SIP scheme in URIs. sl@0: // Classes for validating URIs according to their scheme sl@0: // File contains internal classes for validatin URIs according to sl@0: // their scheme type sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file TValidator.h sl@0: @see Uri8.h sl@0: */ sl@0: sl@0: #ifndef __TVALIDATOR_H__ sl@0: #define __TVALIDATOR_H__ sl@0: sl@0: #include sl@0: #include sl@0: sl@0: // Constants sl@0: // sl@0: _LIT8(KAlwaysValidChars, "-_.!~*'"); sl@0: _LIT8(KCommonValidChars, "()/+$"); sl@0: _LIT8(KValidUserChars, "=,;?&"); sl@0: _LIT8(KValidParamChars, "[]:&"); sl@0: _LIT8(KValidHeaderChars, "[]:?"); sl@0: _LIT8(KUriAlwaysValidSipMarkChars, "-_.!~*'()"); sl@0: _LIT8(KUriValidSipPwdChars, "&=+$,"); sl@0: _LIT8(KUriValidSipToken, "%+`"); sl@0: sl@0: const TUint32 KCharSetNumber = 0x001; sl@0: const TUint32 KCharSetLowerAlpha = 0x002; sl@0: const TUint32 KCharSetUpperAlpha = 0x004; sl@0: const TUint32 KCharSetAlways = 0x008; sl@0: const TUint32 KCharSetCommon = 0x010; sl@0: const TUint32 KCharSetUser = 0x020; sl@0: const TUint32 KCharSetParam = 0x040; sl@0: const TUint32 KCharSetHeader = 0x080; sl@0: const TUint32 KCharSetSipMark = 0x100; sl@0: const TUint32 KCharSetSipPwd = 0x200; sl@0: const TUint32 KCharSetSipTkn = 0x400; sl@0: const TUint32 KCharSetAlphnumberic = KCharSetNumber | KCharSetLowerAlpha | KCharSetUpperAlpha; sl@0: const TUint32 KCharSetUserAll = KCharSetUser | KCharSetAlphnumberic | KCharSetAlways | KCharSetCommon; sl@0: const TUint32 KCharSetParamAll = KCharSetParam | KCharSetAlphnumberic | KCharSetAlways | KCharSetCommon; sl@0: const TUint32 KCharSetHeaderAll = KCharSetHeader | KCharSetAlphnumberic | KCharSetAlways | KCharSetCommon; sl@0: const TUint32 KCharSetSipPassWord = KCharSetAlphnumberic| KCharSetSipPwd | KCharSetSipMark ; sl@0: const TUint32 KCharSetSipToken = KCharSetAlphnumberic| KCharSetAlways | KCharSetSipTkn; sl@0: sl@0: /** sl@0: Comments : This class provides Base functionality for Validation of an URI. sl@0: which needs to be overridden by derived classes for validation Based on their RFC sl@0: specifications. sl@0: sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: class TValidatorBase sl@0: { sl@0: public: sl@0: TValidatorBase(const TUriC8& aUri); sl@0: TInt Validate(); sl@0: sl@0: protected: sl@0: // Implemented by derived validator classes sl@0: virtual TBool IsValidUserInfo() const = 0; sl@0: virtual TBool IsValidHost() const = 0; sl@0: virtual TBool IsValidPort() const = 0; sl@0: virtual TBool IsValidPath() const = 0; sl@0: virtual TBool IsValidQuery() const = 0; sl@0: virtual TBool IsValidFragment() const = 0; sl@0: sl@0: // general utility methods sl@0: TBool IsValidCharacters(const TDesC8& aDes, TUint32 aCharTypes, TBool aEscapeValid = EFalse) const; sl@0: TBool IsEmpty(const TDesC8& aDes) const; sl@0: sl@0: private: sl@0: TBool IsInCharSet(TText8 aChar, const TDesC8& aCharSet) const; sl@0: sl@0: protected: sl@0: const TUriC8& iUri; sl@0: }; sl@0: sl@0: /** sl@0: Dependencies : TValidatorBase. sl@0: Comments : This class provides Sip Uri Validation functinality. sl@0: This is implemented as specified in RFC 3261. sl@0: sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: class TValidatorSip: public TValidatorBase sl@0: { sl@0: public: sl@0: TValidatorSip(const TUriC8& aUri); sl@0: private: sl@0: // from TValidatorBase sl@0: TBool IsValidUserInfo() const; sl@0: TBool IsValidHost() const; sl@0: TBool IsValidPort() const; sl@0: TBool IsValidPath() const; sl@0: TBool IsValidQuery() const; sl@0: TBool IsValidFragment() const; sl@0: sl@0: // supporting methods for the above sl@0: TBool IsValidUser(const TDesC8& aUser) const; sl@0: TBool IsValidPassword(const TDesC8& aPassword) const; sl@0: TBool IsDuplicated(const TDesC8& aParamName, const TDelimitedParserBase8 aParamList) const; sl@0: TBool IsValidParam(const TDesC8& aParam) const; sl@0: TBool IsValidParamSegment(const TDesC8& aName, const TDesC8& aValue) const; sl@0: TBool IsValidHeader(const TDesC8& aHeader) const; sl@0: TBool IsValidHeaderSegment(const TDesC8& aName, const TDesC8& aValue) const; sl@0: TBool IsValidParamToken(const TDesC8& aParam) const; sl@0: TBool IsValidParamTtl(const TDesC8& aParam) const; sl@0: TBool IsValidParamMaddr(const TDesC8& aParam) const; sl@0: }; sl@0: sl@0: /** sl@0: Dependencies : TValidatorBase. sl@0: Comments : This class provides Tel Uri Validation functinality. sl@0: Only Partial support for tel-Uris specified in RFC 3966. sl@0: section 5 of RFC 3966 is not supported. sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: class TValidatorTel: public TValidatorBase sl@0: { sl@0: public: sl@0: TValidatorTel(const TUriC8& aUri); sl@0: private: sl@0: // from TValidatorBase sl@0: TBool IsValidUserInfo() const; sl@0: TBool IsValidHost() const; sl@0: TBool IsValidPort() const; sl@0: TBool IsValidPath() const; sl@0: TBool IsValidQuery() const; sl@0: TBool IsValidFragment() const; sl@0: sl@0: // supporting methods for the above sl@0: TBool IsDuplicated(const TDesC8& aParamName, const TDelimitedParserBase8 aParamList) const; sl@0: TBool IsValidParamSegment(const TDesC8& aName, const TDesC8& aValue) const; sl@0: }; sl@0: sl@0: #endif // __TVALIDATOR_H__