sl@0: // Copyright (c) 2004-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: //
sl@0: 
sl@0: #include "CSipUriAndAuthorityTest.h"
sl@0: #include "CUriAndAuthorityTest.h"
sl@0: #include <uriutilscommon.h>
sl@0: #include "SipUriAndAuthorityTests.h"
sl@0: 
sl@0: #include <e32base.h>
sl@0: #include <f32file.h>
sl@0: 
sl@0: CSipUriAndAuthorityTest* CSipUriAndAuthorityTest::NewLC(CIpuTestHarness* aTestHarness)
sl@0: 	{
sl@0: 	CSipUriAndAuthorityTest* self = new (ELeave) CSipUriAndAuthorityTest(aTestHarness);
sl@0: 	CleanupStack::PushL(self);
sl@0: 	self->ConstructL();
sl@0: 	return self;
sl@0: 	}
sl@0: 
sl@0: CSipUriAndAuthorityTest* CSipUriAndAuthorityTest::NewL(CIpuTestHarness* aTestHarness)
sl@0: 	{
sl@0: 	CSipUriAndAuthorityTest* self = CSipUriAndAuthorityTest::NewLC(aTestHarness);
sl@0: 	CleanupStack::Pop(self);
sl@0: 	return self;
sl@0: 	}
sl@0: 
sl@0: CSipUriAndAuthorityTest::CSipUriAndAuthorityTest(CIpuTestHarness* aTestHarness)
sl@0: : iTestHarness(aTestHarness)
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: void CSipUriAndAuthorityTest::ConstructL()
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: CSipUriAndAuthorityTest::~CSipUriAndAuthorityTest()
sl@0: 	{
sl@0: 	}
sl@0: 
sl@0: //
sl@0: //
sl@0: //	SIP Uri tests
sl@0: //
sl@0: //
sl@0: void CSipUriAndAuthorityTest::DoTestsL()
sl@0: 	{
sl@0: 	//allredy pushed
sl@0: 	CUriAndAuthorityTest* uriAndAuthorityTest = CUriAndAuthorityTest::NewLC(iTestHarness);
sl@0: 
sl@0: 	// Test Sips TUriParser Component Extraction
sl@0: 	uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip0, KSchemeSip0, KUserInfoSip0, KHostSip0, KPortSip0, KPathSip0, KQuerySip0, KFragmentSip0);
sl@0: 	uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip1, KSchemeSip1, KUserInfoSip1, KHostSip1, KPortSip1, KPathSip1, KQuerySip1, KFragmentSip1);
sl@0: 	uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip2, KSchemeSip2, KUserInfoSip2, KHostSip2, KPortSip2, KPathSip2, KQuerySip2, KFragmentSip2);
sl@0: 	uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip3, KSchemeSip3, KUserInfoSip3, KHostSip3, KPortSip3, KPathSip3, KQuerySip3, KFragmentSip3);
sl@0: 	uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip4, KSchemeSip4, KUserInfoSip4, KHostSip4, KPortSip4, KPathSip4, KQuerySip4, KFragmentSip4);
sl@0: 	uriAndAuthorityTest->TestUriComponentExtractionL(KCompsSip5, KSchemeSip5, KUserInfoSip5, KHostSip5, KPortSip5, KPathSip5, KQuerySip5, KFragmentSip5);		
sl@0: 	
sl@0: 	// Sip URI construction test
sl@0: 	uriAndAuthorityTest->TestUriSetComponentL(KSipUri_Scheme0, KSipUri_Host0, KSipUri_Userinfo0, KSipUri_Port0, KSipUri_Path0, KSipUri_Query0, KSipUri_Fragment0,
sl@0: 		KSipUri_SchemeComp0, KSipUri_HostComp0, KSipUri_UserinfoComp0, KSipUri_PortComp0, KSipUri_PathComp0, KSipUri_QueryComp0, KSipUri_FragmentComp0);
sl@0: 	
sl@0: /** No Fragment part exist in Sip Uri's as per RFC3261
sl@0: 	// Sip URI destruction test
sl@0: 	uriAndAuthorityTest->TestUriRemoveComponentL(KSipUri_NoScheme0, KSipUri_NoHost0, KSipUri_NoUserinfo0, KSipUri_NoPort0, KSipUri_NoPath0,
sl@0: 		KSipUri_NoQuery0, KSipUri_NoFragment0, KSipUri_Whole0);
sl@0: */
sl@0: 	// Same test as above, but with an IPv6 format host
sl@0: 	// Sip URI construction test
sl@0: 	uriAndAuthorityTest->TestUriSetComponentL(KSipUri_Scheme0, KSipUri_IPv6Host0, KSipUri_IPv6UserInfo0, KSipUri_IPv6Port0, KSipUri_IPv6Path0, KSipUri_IPv6Query0, KSipUri_IPv6Fragment0,
sl@0: 		KSipUri_SchemeComp0, KUri_IPv6HostComp, KSipUri_UserinfoComp0, KSipUri_PortComp0, KSipUri_PathComp0, KSipUri_QueryComp0, KSipUri_FragmentComp0);
sl@0: 
sl@0: /** No Fragment part exist in Sip Uri's as per RFC3261
sl@0: 	// Sip URI destruction test
sl@0: 	uriAndAuthorityTest->TestUriRemoveComponentL(KSipUri_IPv6NoScheme0, KSipUri_IPv6NoHost0, KSipUri_IPv6NoUserinfo0, KSipUri_IPv6NoPort0, KSipUri_IPv6NoPath0,
sl@0: 		KSipUri_IPv6NoQuery0, KSipUri_IPv6NoFragment0, KSipUri_IPv6Whole0);
sl@0: */	
sl@0: 	CleanupStack::PopAndDestroy(uriAndAuthorityTest);
sl@0: 	
sl@0: 	//Sip URI validation
sl@0: 	TInt error=KErrNone;
sl@0: 	error=OpenSipURIFile();
sl@0: 	if (KErrNone!=error)
sl@0: 		{
sl@0: 		iTestHarness->StartTestL(_L("Test TUriParser Component "));
sl@0: 		SipLogError(error, KCompsSipUriFileSystemError);
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		error=SipUriValidationL();		
sl@0: 	   	if (KErrNone!=error)
sl@0: 			{
sl@0: 			iTestHarness->StartTestL(_L("Test TUriParser Component Validation "));
sl@0: 			switch (error)
sl@0: 				{
sl@0: 			case KErrNotFound:
sl@0: 				{
sl@0: 				iTestHarness->LogIt(KCompsSipUriNoValidate);	
sl@0: 				}
sl@0: 				break;
sl@0: 			case KErrBadName:
sl@0: 				{
sl@0: 				iTestHarness->LogIt(KCompsSipUriNoValidateData);
sl@0: 				}
sl@0: 				break;
sl@0: 			default:
sl@0: 				break;
sl@0: 				}
sl@0: 			iTestHarness->EndTest(KErrNone);	
sl@0: 			}	
sl@0: 		
sl@0: 		if (iFoundEquivalence)
sl@0: 			{
sl@0: 			error=SipUriEquivalenceL();
sl@0: 			//No Sip URI Equivalence data
sl@0: 			if (KErrBadName==error)
sl@0: 				{
sl@0: 				iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence "));
sl@0: 				iTestHarness->LogIt(KCompsSipUriNoEquivalenceData);
sl@0: 				iTestHarness->EndTest(KErrNone);
sl@0: 				}
sl@0: 			}
sl@0: 		else
sl@0: 			{
sl@0: 			iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence "));
sl@0: 			iTestHarness->LogIt(KCompsSipUriNoEquivalence);
sl@0: 			iTestHarness->EndTest(KErrNone);
sl@0: 			error=KErrNone;
sl@0: 			}
sl@0: 		iFsSession.Close();
sl@0: 		}
sl@0: 	}
sl@0: 	
sl@0: //
sl@0: //
sl@0: //	Open SIP Uri data file
sl@0: //
sl@0: //
sl@0: TInt CSipUriAndAuthorityTest::OpenSipURIFile()
sl@0: 	{
sl@0: 	RFile file;
sl@0: 	TInt error=KErrNone;
sl@0: 
sl@0: 	error = iFsSession.Connect();
sl@0: 	if (KErrNone!=error)
sl@0: 		{
sl@0: 		return error;			
sl@0: 		}
sl@0: 		
sl@0: 	error = file.Open(iFsSession, KCompsSipUriFileName, EFileRead);
sl@0: 	if (KErrNone!=error)
sl@0: 		{
sl@0: 		iFsSession.Close();
sl@0: 		return error;			
sl@0: 		}
sl@0: 
sl@0: 	iTUriParserFile.Set(file);
sl@0: 	return error;
sl@0: 	}
sl@0: 	
sl@0: //
sl@0: //
sl@0: //	SIP Uri Logger
sl@0: //
sl@0: //
sl@0: void CSipUriAndAuthorityTest::SipLogError(TInt aError, const TDesC16& aSipUri) const
sl@0: 	{
sl@0: 	TBool wrongError=EFalse;
sl@0: 	
sl@0: 	//compare the Equivalent SIP URI to look for the correct error, these SIP URIs must be in T_UriParserSipUri.txt
sl@0: 	//All equal
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriEqual0) && KErrNone != aError 
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriEqual1) && KErrNone != aError 
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriEqual2) && KErrNone != aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriValidMess0);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 	//All not equal		
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriNotEqual0) && KUriUtilsErrDifferentUserInfo == aError 
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriNotEqual1) && KUriUtilsErrDifferentPath  == aError 
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriNotEqual2) && KUriUtilsErrDifferentPort  == aError )
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriEqualMess1);
sl@0: 		}
sl@0: 
sl@0: 	//compare the SIP URIs to look for the correct error returned by CUri for validation
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriNotEqual1) && KUriUtilsErrDifferentPath  != aError )
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriInvalidMess9);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 
sl@0: 
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriValid0) && KErrNone!= aError
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriValid1) && KErrNone!= aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriValidMess0);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriInvalid0) && KErrNotSupported != aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriInvalidMess0);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 	
sl@0: 	if( 0==aSipUri.Compare(KCompsSipUriInvalid5) && KUriUtilsErrInvalidParam!= aError
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriInvalid6) && KUriUtilsErrInvalidParam!= aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriInvalidMess1);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 	
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriInvalid3) && KUriUtilsErrInvalidHost!= aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriInvalidMess2);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 		
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriInvalid2) && KUriUtilsErrInvalidHeaders != aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriInvalidMess8);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriInvalid1) && KUriUtilsErrInvalidPort != aError
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriInvalid4) && KUriUtilsErrInvalidPort!= aError
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriNotEqual2) && KUriUtilsErrDifferentPort  != aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriInvalidMess3);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 
sl@0: 	if (0==aSipUri.Compare(KCompsSipUriInvalid7) && KUriUtilsErrInvalidUserInfo!= aError
sl@0: 		|| 0==aSipUri.Compare(KCompsSipUriNotEqual0) && KUriUtilsErrDifferentUserInfo != aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriInvalidMess7);
sl@0: 		wrongError=ETrue;
sl@0: 		}
sl@0: 
sl@0: 	if (wrongError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriInvalidMess5);
sl@0: 		}
sl@0: 	
sl@0: 	LogErrorMessage(aSipUri, aError);
sl@0: 	
sl@0: 	if (wrongError)
sl@0: 		{
sl@0: 		iTestHarness->EndTest(aError);
sl@0: 		}		
sl@0: 	else
sl@0: 		{
sl@0: 		iTestHarness->EndTest(KErrNone);	
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: //
sl@0: //
sl@0: //	SIP Uri Validation Test
sl@0: //
sl@0: //
sl@0: TInt CSipUriAndAuthorityTest::SipUriValidationL()
sl@0: 	{
sl@0: 	TBuf<256> data;
sl@0: 	TInt error=KErrNone;
sl@0: 	iFoundEquivalence=EFalse;
sl@0: 	
sl@0: 	//read the Valid section name in
sl@0: 	error=iTUriParserFile.Read(data);
sl@0: 	while(0!=data.Compare(KCompsSipUriValidate) && KErrNone==error)
sl@0: 		{
sl@0: 		if (0==data.Compare(KCompsSipUriEquivalence))
sl@0: 			{
sl@0: 			iFoundEquivalence=ETrue;
sl@0: 			break;
sl@0: 			}
sl@0: 		data.Zero();
sl@0: 		error=iTUriParserFile.Read(data);
sl@0: 		}
sl@0: 		
sl@0: 	//No Validate Section, KErrEof
sl@0: 	if (0!=data.Compare(KCompsSipUriValidate))
sl@0: 		{
sl@0: 		return KErrNotFound;
sl@0: 		}
sl@0: 	
sl@0: 	//get the validation Data
sl@0: 	error=iTUriParserFile.Read(data);
sl@0: 	
sl@0: 	//no data
sl@0: 	if (KErrEof==error)
sl@0: 		{
sl@0: 		return KErrBadName;
sl@0: 		}	
sl@0: 	
sl@0: 	//found Equivalence
sl@0: 	if (0==data.Compare(KCompsSipUriEquivalence))
sl@0: 		{
sl@0: 		iFoundEquivalence=ETrue;
sl@0: 		return KErrBadName;
sl@0: 		}	
sl@0: 
sl@0: 	while (KErrNone==error)
sl@0: 		{
sl@0: 		//check for comments
sl@0: 		while(data.Left(2)==(KCompsSipUriComment))
sl@0: 			{
sl@0: 			data.Zero();
sl@0: 			iTUriParserFile.Read(data);
sl@0: 			}
sl@0: 		if (0==data.Compare(KCompsSipUriEquivalence))
sl@0: 			{
sl@0: 			iFoundEquivalence=ETrue;
sl@0: 			break;
sl@0: 			}
sl@0: 		
sl@0: 		//validate the 16 bit Sip URI first
sl@0: 		iTestHarness->StartTestL(_L("Test TUriParser Component Validation (16-bit  SIP URI)"));
sl@0: 		iTestHarness->LogIt(_L("Uri - %S"), &data);
sl@0: 		error = DoSipUriValidation <TUriParser16>(data);
sl@0: 		SipLogError(error, data);
sl@0: 
sl@0: 		// Make 8-bit copies and validate this SIP URI
sl@0: 		HBufC8* uriBuf = HBufC8::NewLC(data.Length());
sl@0: 		TPtr8 uri8Bit = uriBuf->Des();
sl@0: 		uri8Bit.Copy(data);
sl@0: 
sl@0: 		iTestHarness->StartTestL(_L("Test TUriParser Component Validation (8-bit  SIP URI)"));	
sl@0: 		iTestHarness->LogIt(_L("Uri - %S"), &data);
sl@0: 		error = DoSipUriValidation <TUriParser8>(uri8Bit);
sl@0: 		SipLogError(error, data);
sl@0: 		
sl@0: 		data.Zero();
sl@0: 		CleanupStack::PopAndDestroy(1, uriBuf);// uriBuf
sl@0: 		
sl@0: 		error=iTUriParserFile.Read(data);
sl@0: 		}
sl@0: 	return KErrNone;		
sl@0: 	}
sl@0: 
sl@0: //
sl@0: //
sl@0: //	SIP Uri Equivalence Test
sl@0: //
sl@0: //
sl@0: TInt CSipUriAndAuthorityTest::SipUriEquivalenceL()
sl@0: 	{
sl@0: 	TBuf<256> valueA;
sl@0: 	TBuf<256> valueB;
sl@0: 	TBool sipUriError=EFalse;
sl@0: 	TInt errorA=KErrNone;
sl@0: 	TInt errorB=KErrNone;
sl@0: 	TInt error=KErrNone;
sl@0: 	
sl@0: 	//get the Equivalence Data
sl@0: 	errorA=iTUriParserFile.Read(valueA);
sl@0: 	while(valueA.Left(2)==(KCompsSipUriComment) && KErrNone==errorA)
sl@0: 		{
sl@0: 		valueA.Zero();
sl@0: 		errorA=iTUriParserFile.Read(valueA);
sl@0: 		}
sl@0: 	
sl@0: 	errorB=iTUriParserFile.Read(valueB);	
sl@0: 	//no Equivalence Data
sl@0: 	if (KErrEof==errorA || KErrEof==errorB)
sl@0: 		{
sl@0: 		return KErrBadName;
sl@0: 		}	
sl@0: 	
sl@0: 	//read the Equivalence Sip URI
sl@0: 	while (KErrNone==errorA  && KErrNone==errorB)
sl@0: 		{
sl@0: 		//check for comments	
sl@0: 		while(valueA.Left(2)==(KCompsSipUriComment))
sl@0: 			{
sl@0: 			valueA.Zero();
sl@0: 			errorA=iTUriParserFile.Read(valueA);
sl@0: 			}
sl@0: 		while(valueB.Left(2)==(KCompsSipUriComment))
sl@0: 			{
sl@0: 			valueB.Zero();
sl@0: 			errorB=iTUriParserFile.Read(valueB);
sl@0: 			}
sl@0: 		
sl@0: 		//validate the 16 bit Sip URI first
sl@0: 		iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence (16-bit  SIP)"));	
sl@0: 		iTestHarness->LogIt(_L("Uri - %S"), &valueA);
sl@0: 		iTestHarness->LogIt(_L("Uri - %S"), &valueB);
sl@0: 		
sl@0: 		error= DoSipUriEquivalence<TUriParser16>(valueA, valueB, sipUriError);
sl@0: 		//check for parsing errors on both Sip URIs
sl@0: 		if (KErrBadSipUriA==sipUriError)
sl@0: 			{
sl@0: 			SipLogError(error, valueA);
sl@0: 			}
sl@0: 		if (KErrBadSipUriB==sipUriError)
sl@0: 			{
sl@0: 			SipLogError(error, valueB);
sl@0: 			}
sl@0: 		SipLogError(error, valueA);
sl@0: 		
sl@0: 		// Make 8-bit copies and validate this SIP URI
sl@0: 		HBufC8* uriBufA = HBufC8::NewLC(valueA.Length());
sl@0: 		TPtr8 uri8BitA = uriBufA->Des();
sl@0: 		uri8BitA.Copy(valueA);
sl@0: 
sl@0: 		HBufC8* uriBufB = HBufC8::NewLC(valueB.Length());
sl@0: 		TPtr8 uri8BitB = uriBufB->Des();
sl@0: 		uri8BitB.Copy(valueB);
sl@0: 
sl@0: 		iTestHarness->StartTestL(_L("Test TUriParser Component Equivalence (8-bit  SIP)"));	
sl@0: 		iTestHarness->LogIt(_L("Uri - %S"), &valueA);
sl@0: 		iTestHarness->LogIt(_L("Uri - %S"), &valueB);
sl@0: 		error = DoSipUriEquivalence<TUriParser8>(uri8BitA, uri8BitB, sipUriError);
sl@0: 		//check for parsing errors on both Sip URIs
sl@0: 		if (KErrBadSipUriA==sipUriError)
sl@0: 			{
sl@0: 			SipLogError(error, valueA);
sl@0: 			}
sl@0: 		if (KErrBadSipUriA==sipUriError)
sl@0: 			{
sl@0: 			SipLogError(error, valueB);
sl@0: 			}
sl@0: 		SipLogError(error, valueA);
sl@0: 		
sl@0: 		CleanupStack::PopAndDestroy(2, uriBufA);// uriBufA, uriBufB
sl@0: 		
sl@0: 		errorA=iTUriParserFile.Read(valueA);
sl@0: 		errorB=iTUriParserFile.Read(valueB);
sl@0: 		}
sl@0: 	return KErrNone;
sl@0: 	}
sl@0: 
sl@0: //
sl@0: //
sl@0: //	SIP Uri Logger
sl@0: //
sl@0: //
sl@0: void CSipUriAndAuthorityTest::LogErrorMessage(const TDesC16& aSipUri, const TInt aError)const
sl@0: 	{
sl@0: 	switch (aError)
sl@0: 		{
sl@0: 		case KErrNotFound:
sl@0: 			iTestHarness->LogIt(aSipUri);
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KErrNotSupported:
sl@0: 			iTestHarness->LogIt(_L("Not Supported"));
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidScheme:
sl@0: 		case KUriUtilsErrDifferentScheme:
sl@0: 			iTestHarness->LogIt(_L("Invalid Scheme"));	
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidUserInfo:
sl@0: 		case KUriUtilsErrDifferentUserInfo:
sl@0: 			iTestHarness->LogIt(_L("Invalid UserInfo"));	
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidHost:
sl@0: 		case KUriUtilsErrDifferentHost:
sl@0: 			iTestHarness->LogIt(_L("Invalid Host"));	
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidPort:
sl@0: 		case KUriUtilsErrDifferentPort:
sl@0: 			iTestHarness->LogIt(_L("Invalid Port"));	
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidPath:
sl@0: 		case KUriUtilsErrDifferentPath:
sl@0: 			iTestHarness->LogIt(_L("Invalid Path"));	
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidParam:
sl@0: 			iTestHarness->LogIt(_L("Invalid Parameter"));	
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidQuery:
sl@0: 		case KUriUtilsErrDifferentQuery:
sl@0: 			iTestHarness->LogIt(_L("Invalid Query"));	
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidHeaders:
sl@0: 			iTestHarness->LogIt(_L("Invalid Headers"));	
sl@0: 		        break;
sl@0: 		        
sl@0: 		case KUriUtilsErrInvalidFragment:
sl@0: 		case KUriUtilsErrDifferentFragment:
sl@0: 			iTestHarness->LogIt(_L("Invalid Fragment"));	
sl@0: 			break;
sl@0: 			
sl@0: 		default:
sl@0: 			break;
sl@0: 		}
sl@0: 		
sl@0: 	//log correct message for equivalence
sl@0: 	if (iFoundEquivalence && KErrNone==aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriEqualMess0);
sl@0: 		}
sl@0: 	else if (iFoundEquivalence && KErrNone!=aError)
sl@0: 		{
sl@0: 		iTestHarness->LogIt(KCompsSipUriEqualMess1);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: //
sl@0: //
sl@0: //	Implementation of LOCAL functions
sl@0: //
sl@0: //
sl@0: 
sl@0: template<class TUriParserType, class TDesCType>
sl@0: TInt DoSipUriValidation(const TDesCType& aSipUri)
sl@0: 	{
sl@0: 	TUriParserType uriParser;
sl@0: 	TInt error = uriParser.Parse(aSipUri);
sl@0: 	// Is this a valid SIP Uri?
sl@0: 	if( KUriUtilsErrInvalidUri == error)
sl@0: 		{
sl@0: 		return error;
sl@0: 		}
sl@0: 
sl@0: 	//Validate the Sip URI
sl@0: 	return(uriParser.Validate());
sl@0: 	}
sl@0: 
sl@0: template<class TUriParserType, class TDesCType>
sl@0: TInt DoSipUriEquivalence(const TDesCType& aSipUriA, const TDesCType& aSipUriB,  TInt &aSipUriError)
sl@0: 	{
sl@0: 	TUriParserType uriParserA;
sl@0: 	TUriParserType uriParserB;
sl@0: 
sl@0: 	TBool errorA = uriParserA.Parse(aSipUriA);
sl@0: 	// Is this a valid SIP Uri?
sl@0: 	if( KUriUtilsErrInvalidUri == errorA)
sl@0: 		{
sl@0: 		aSipUriError=KErrBadSipUriA;
sl@0: 		return errorA;
sl@0: 		}
sl@0: 		
sl@0: 	TBool errorB = uriParserB.Parse(aSipUriB);
sl@0: 	// Is this a valid SIP Uri?
sl@0: 	if( KUriUtilsErrInvalidUri == errorB)
sl@0: 		{
sl@0: 		aSipUriError=KErrBadSipUriB;
sl@0: 		return errorB;
sl@0: 		}
sl@0: 	
sl@0: 	return(uriParserA.Equivalent(uriParserB));
sl@0: 	}
sl@0: 
sl@0: //End of file