genericservices/httputils/UriParser/TValidator.h
changeset 0 e4d67989cc36
--- /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 <uri8.h>
+#include <delimitedparser8.h>
+
+// 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__