wapstack/wapmessageapi/te_wapstack/src/WapBoundWSPSteps.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 06 Jul 2010 15:36:38 +0300
changeset 49 f50f4094acd7
permissions -rw-r--r--
Revision: 201027 Kit: 2010127

// Copyright (c) 2003-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:
// CStepOne derived implementation
// 
//

/**
 @file
 @internalComponent
*/

#include "WapBoundWSPSteps.h"
#include "WapStackSuiteDefs.h"
#include <simtsy.h>
#include <ecom/ecom.h>

CBoundWSPStepBase::CBoundWSPStepBase()
/**
* Constructor
*/
	{
	}

CBoundWSPStepBase::~CBoundWSPStepBase()
/**
* Destructor
*/
	{
	if(iImp) 
		{
		UnloadInterface();
		}
	}

CWapBoundCLWSPService* CBoundWSPStepBase::LoadInterface()
	{
	TInt trapValue;
	CWapBoundCLWSPService* implementation = NULL;
	// UID {0x101FBB3C} - SWS implementation
	TUid KInterfaceUid = {0x101FBB3C}; 	
	INFO_PRINTF2(_L("Calling new NewL(0x%08X) method"), KInterfaceUid);
	TRAP(trapValue, implementation = CWapBoundCLWSPService::NewL(KInterfaceUid));
	if(!trapValue)
		{
		INFO_PRINTF2(_L("Interface is loaded: implementation.addr = 0x%08x"), implementation);
		return implementation;
		}
	else return NULL;
	}

void CBoundWSPStepBase::UnloadInterface()
	{
	INFO_PRINTF2(_L("Interface at implementation.addr = 0x%08x is deleted"), iImp);
	delete iImp;
	iImp = NULL;
	REComSession::FinalClose();	
	}

CBoundWSPStep_1::~CBoundWSPStep_1()
/**
* Destructor
*/
	{
	}

CBoundWSPStep_1::CBoundWSPStep_1()
/**
* Constructor
*/
	{
	}

TVerdict CBoundWSPStep_1::doTestStepL()
/**
* @return - TVerdict code
* Override of base class pure virtual
* Our implementation only gets called if the base class doTestStepPreambleL() did
* not leave. That being the case, the current test result value will be EPass.
*/
	{
	//
	// CWapBoundCLWSPService
	// 
	INFO_PRINTF1(_L("CreateImplementation - CWapBoundCLWSPService"));
	INFO_PRINTF1(_L("Calling old NewL() method"));
	
	TInt trapValue; 
	
	SetTestStepResult(EFail);
	TRAP(trapValue, iImp = CWapBoundCLWSPService::NewL());
	if(!trapValue)
		{
		// interface is loaded
		INFO_PRINTF2(_L("Interface is loaded: implementation.addr = 0x%08x"), iImp);
		UnloadInterface();
		iImp = LoadInterface();
		if(iImp)
			{
			INFO_PRINTF1(_L("CreateImplementation - OK"));
			SetTestStepResult(EPass);
			UnloadInterface();
			}
		}
	return TestStepResult();
	}

CBoundWSPStep_2::CBoundWSPStep_2()
/**
* Constructor
*/
	{
	}

CBoundWSPStep_2::~CBoundWSPStep_2() 
/**
* Destructor
*/
	{
	}

TVerdict CBoundWSPStep_2::doTestStepL()
/** 
* Test Connect methoths 
* @return - TVerdict code
* 
*/
	{
	INFO_PRINTF1(_L("BOUND-WSP: Testing Connect"));
	if(TestStepResult() == EPass )
		{
		SetTestStepResult(EFail);
		iImp = LoadInterface();
		if(iImp)
			{
			TInt bearer, port;
			TInt error	= KErrNone;
			TBool secure= EFalse;
			TBool reconnect= EFalse;
			TBool delay = EFalse;
			SetLastError(KErrNone);
			
			if(GetIntFromConfig(ConfigSection(),KWapBearer, bearer)) iBearer = (Wap::TBearer)bearer;
			if(GetIntFromConfig(ConfigSection(),KWapLocalPort, port)) iLocalPort = (Wap::TPort)port;
			if(GetIntFromConfig(ConfigSection(), KWapExError, error)) SetExpectedError(error);
			if(GetBoolFromConfig(ConfigSection(), KWapSecure, secure)) iSecure = secure;
			if(GetBoolFromConfig(ConfigSection(),_L("Reconnect"), reconnect)) iReconnect = reconnect;
			if(GetBoolFromConfig(ConfigSection(),KWapDelayPortClosure, delay)) iDelayPortClosure = delay;
			
			if(UseSimTsy())
				{
				GetIntFromConfig(ConfigSection(), KWapSIMTSYState, iSimTsyState);
				User::LeaveIfError(RProperty::Set(KUidPSSimTsyCategory, KPSSimTsyTestNumber, iSimTsyState));
				}
			User::LeaveIfError(RProperty::Set(KUidSystemCategory, KUidPhonePwr.iUid, ESAPhoneOn));

			SetState(EConnect);
			iControl->ReStart();
			ShowConnectionInfo();
			StartScheduler();
			UnloadInterface();
			}
		}
	return TestStepResult();
	}

TInt CBoundWSPStep_2::CallStateMachine()
	{
	TInt err = KErrNone;
	INFO_PRINTF2(_L("CallStateMachine: state %d"), State());
	switch(iState)
		{
		case EConnect:
			INFO_PRINTF1(_L("EConnect"));
			err = iImp->Connect(iBearer, iLocalPort, iSecure);
			INFO_PRINTF2(_L("Connection completed with code = %d"), err);
			if( err == KErrNone)
				{
				if(iReconnect)
					{ 
					INFO_PRINTF1(_L("Reconnection"));
					iControl->ReStart();
					break;
					}
				}
			SetState(EFinish);
			SetLastError(err);
			iControl->ReStart();
			break;
			
		case EFinish:
			// it's necessary to delay port closure, let the other concurrent test step
			// can fail opening the same port with expected error EPortAlreadyBound (-5498)
			if (iDelayPortClosure)
				User::After(5000000);

			INFO_PRINTF1(_L("EFinish"));
			if(GetLastError() == GetExpectedError()) SetTestStepResult(EPass);
			else SetTestStepResult(EFail);
			SetState(EIdle);
			StopScheduler();
			break;
			
		case EIdle:
		default:
			INFO_PRINTF2(_L("Error: EIdle or unknown state %d"), State());
			SetTestStepResult(EFail);
			StopScheduler();
			break;
		}
	return (0);
	}

CBoundWSPStep_3::CBoundWSPStep_3()
/**
* Constructor
*/
	{
	}

CBoundWSPStep_3::~CBoundWSPStep_3() 
/**
* Destructor
*/
	{
	}

TVerdict CBoundWSPStep_3::doTestStepL()
/*
* Test the BoundWSP APIs in unconnected state.
*/
	{
	INFO_PRINTF1(_L("BoundCLPush. Requests without connection"));
	// check preamble result
	TVerdict verdict = TestStepResult();
	if (verdict==EPass)
		{
		TInt err, ret;
		iImp = LoadInterface();
		if (!iImp)
			{
			ERR_PRINTF1(_L("Unable to load BoundWSP Interface"));
			verdict = EFail;
			}
		else
			{
			GetIntFromConfig(ConfigSection(),KWapExError,(TInt&)iExError);
			ShowConnectionInfo();
			TBuf8<100> header, body;
			TPckgBuf<TUint8> idPckg;
			TWSPStatus wspStatus;
			TRequestStatus reqStatus;
			TUint32 timeout = 0;
			iImp->MethodResult(header, body, idPckg, wspStatus, reqStatus, timeout);
			TRAP(ret, TEST_CHECKL(reqStatus.Int(), iExError, _L("MethodResult Fails not as expected")))
				if (ret) 
					verdict = EFail;
				else
					{
					Wap::TPort port;
					err=iImp->GetLocalPort(port);
					TRAP(ret, TEST_CHECKL(err, iExError, _L("GetLocalPort Fails not as expected")))
						if (ret)
							verdict = EFail;
						else
							{
							HBufC8* localHost;					
							err=iImp->GetLocalAddress(localHost);
							TRAP(ret, TEST_CHECKL(err, iExError, _L("GetLocalAddress Fails not as expected")))
								if (ret) 
									verdict = EFail;
								else
									{
									err=iImp->GetBearer(iBearer);
									TRAP(ret, TEST_CHECKL(err, iExError, _L("GetBearer Fails not as expected")))
										if (ret) 
											verdict = EFail;
										else
											{
											HBufC8* host;
											err=iImp->GetServerAddress(host);
											TRAP(ret, TEST_CHECKL(err, iExError, _L("GetServerAddress Fails not as expected")))
												if (ret) 
													verdict = EFail;
												else
													{
													TBuf<100> uri;
													TUint8 id = 0;
													err=iImp->MethodInvoke(iBearer, iRemoteHost, iRemotePort, 0x40, uri, header, body, id);
													TRAP(ret, TEST_CHECKL(err, iExError, _L("MethodInvoke Fails not as expected")))
														if (ret) 
															verdict = EFail;
													}
											}
									}
							}
					}
				UnloadInterface();
			}
		}
	if (verdict==EPass)
		{
		INFO_PRINTF1(_L("BoundWSP. Requests Fail as expected"));
		}
	SetTestStepResult(verdict);
	return TestStepResult();
	}

TInt CBoundWSPStep_3::CallStateMachine()
	{
	return (0);
	}


CBoundWSPStep_4::CBoundWSPStep_4()
/**
* Constructor
*/
	{
	}

CBoundWSPStep_4::~CBoundWSPStep_4() 
/**
* Destructor
*/
	{
	}

TVerdict CBoundWSPStep_4::doTestStepL()
/** 
* Test Connect methoths 
* @return - TVerdict code
* 
*/
	{
	INFO_PRINTF1(_L("BOUND-WSP: UnitInvoke-UnitResult"));
	if(TestStepResult() == EPass )
		{
		SetTestStepResult(EFail);
		iImp = LoadInterface();
		if(iImp)
			{
			SetLastError(KErrNone);
			
			TInt bearer, port, repeat, method;
			TInt error = KErrNone;
			TPtrC headers;
			TPtrC body;
			TPtrC uri;
			
			if(GetIntFromConfig(ConfigSection(),KWapBearer, bearer)) iBearer = (Wap::TBearer)bearer;
			if(GetIntFromConfig(ConfigSection(),KWapLocalPort, port)) iLocalPort = (Wap::TPort)port;
			if(GetIntFromConfig(ConfigSection(),KWapExError, error)) SetExpectedError(error);
			if(GetIntFromConfig(ConfigSection(),KWapWSPMethod, method)) iMethod = method;
			if(GetIntFromConfig(ConfigSection(), KWapRepeat, repeat)) iRepeat = repeat;

			if(!GetStringFromConfig(ConfigSection(),KWapURI, uri)) 
				{
				User::Leave(KErrNoMemory);
				}
			
			GetStringFromConfig(ConfigSection(),KWapWSPHeaders, headers);
			GetStringFromConfig(ConfigSection(),KWapWSPBody, body);

			User::LeaveIfError(RProperty::Set(KUidSystemCategory, KUidPhonePwr.iUid, ESAPhoneOn));
			
			if(UseSimTsy())
				{
				User::LeaveIfError(RProperty::Set(KUidPSSimTsyCategory, KPSSimTsyTestNumber, 41));
				}
			
			
			iURI = HBufC16::NewL(uri.Length());
			
			iSendHeaders = HBufC8::NewL(headers.Length());
			
			iSendBody = HBufC8::NewL(body.Length());
			
			iRecvHeaders = HBufC8::NewL(KMaxWapWspHeaderBufferLength);
			iRecvBody = HBufC8::NewL(KMaxWapWspDataBufferLength);

			TPtr16 tmp16 = iURI->Des();
			tmp16.Copy(uri);
			TPtr8 tmp1 = iSendHeaders->Des();
			tmp1.Copy(headers);
			TPtr8 tmp2 = iSendBody->Des();
			tmp2.Copy(body);

			iRecvHeadersBuf.Set(iRecvHeaders->Des());
			iRecvHeadersBuf.Zero();
			iRecvBodyBuf.Set(iRecvBody->Des());
			iRecvBodyBuf.Zero();
			
			SetState(EConnect);
			iControl->ReStart();
			ShowConnectionInfo();

			StartScheduler();

			delete iRecvBody;
			iRecvBody=NULL;
			delete iRecvHeaders;
			iRecvHeaders=NULL;

			delete iSendBody;
			iSendBody=NULL;
			delete iSendHeaders;
			iSendHeaders=NULL;
			delete iURI;
			iURI=NULL;

			UnloadInterface();
			}
		}
	return TestStepResult();
	}

TInt CBoundWSPStep_4::CallStateMachine()
	{
	TVerdict verdict = EFail;
	TInt err = KErrNone;
	TInt activate = 0;
	static TUint total_headers = 0;		
	static TUint total_body = 0;		
	static TUint repeat = 0;		
	
	INFO_PRINTF2(_L("CallStateMachine [state %d]"), State());

	switch(iState)
		{
		case EConnect:
			total_headers = 0;
			total_body = 0;
			err = iImp->Connect(iBearer, iLocalPort, EFalse);
			if( err == KErrNone)
				{
				SetState(EUnitInvoke);
				}
			else
				{
				SetState(EFinish);
				}
			SetLastError(err);
			INFO_PRINTF2(_L("Connection completed with code = %d"), err);
			iControl->ReStart();
			break;

		case EUnitInvoke:
			INFO_PRINTF2(_L("EUnitInvoke: Method - 0x%02x"), iMethod);
			if(iBearer != Wap::EIP)
			{
				TRAP(err, WaitForInitializeL());
			}
			if(iSendHeaders->Length() !=0 )
				{
				INFO_PRINTF1(_L("Headers to send:"));
				DumpBuf(iSendHeaders->Des());
				}	
			if(iSendBody->Length() !=0 )
				{
				INFO_PRINTF1(_L("Data to send:"));
				DumpBuf(iSendBody->Des());
				}
			err = iImp->MethodInvoke(iBearer, iRemoteHost, iRemotePort, iMethod, iURI->Des(), iSendHeaders->Des(), iSendBody->Des(), iTransactionId);
			INFO_PRINTF3(_L("MethodInvoke() retcode: - dec: %d hex: 0x%08x"), err, err);
			if(err == KErrNone) 
				{	
				SetState(EUnitResult);
				}
			else 
				{
				SetState(EFinish);
				}
			SetLastError(err);
			iControl->ReStart();
			break;

		case EUnitResult:

			iRecvHeadersBuf.Set(iRecvHeaders->Des());
			iRecvHeadersBuf.Zero();
			iRecvBodyBuf.Set(iRecvBody->Des());
			iRecvBodyBuf.Zero();
			iImp->MethodResult(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, iWspStatus, *iStatus, iTimeout);
			INFO_PRINTF2(_L("EUnitResult: status 0x%08x"), iStatus->Int());
			activate = 1;
			SetLastError(err);
			SetState(EFinish);
			break;
			
		case EFinish:
			
			INFO_PRINTF4(_L("EFinish: Status: %d, WSP status: %d (0x%02x)"), iStatus->Int(), iWspStatus, iWspStatus);

			if(iRecvHeadersBuf.Length() != 0)
				{
				INFO_PRINTF1(_L("Headers"));
				total_headers += iRecvHeadersBuf.Length();
				DumpBuf(iRecvHeadersBuf);
				}

			if(iRecvBodyBuf.Length() != 0)
				{
				INFO_PRINTF1(_L("Body"));
				total_body += iRecvBodyBuf.Length();
				DumpBuf(iRecvBodyBuf);
				}

			if(iStatus->Int() != KErrNone) 
				{
				SetLastError(iStatus->Int());
				if(iStatus->Int() == Wap::EMoreData)
					{
					INFO_PRINTF1(_L("NOTE: More data... calling MethodResult()"));
					SetState(EUnitResult);
					iControl->ReStart();
					break;
					}
				}

			INFO_PRINTF3(_L("Data received: headers - %d bytes, body - %d bytes"), total_headers, total_body);
			total_headers = 0;
			total_body = 0;
			if((--iRepeat != 0) && (iStatus->Int() == KErrNone))
				{
				++repeat;
				INFO_PRINTF2(_L("REPEAT TEST - %d"), repeat);
				if(err == KErrNone) 
					{	
					SetState(EUnitInvoke);
					iControl->ReStart();
					break;
					}
				}

			verdict = (GetLastError() == GetExpectedError())?EPass:EFail;
			SetTestStepResult(verdict);
			SetState(EIdle);
			StopScheduler();
			break;
			
		case EIdle:
		default:
			INFO_PRINTF2(_L("Error: EIdle or unknown state %d"), State());
			SetTestStepResult(verdict);
			StopScheduler();
			break;
		}
	return (activate);
	}

CBoundWSPStep_5::CBoundWSPStep_5()
/**
* Constructor
*/
	{
	}

CBoundWSPStep_5::~CBoundWSPStep_5() 
/**
* Destructor
*/
	{
	}

TVerdict CBoundWSPStep_5::doTestStepL()
/** 
* Test Cancel Request 
* @return - TVerdict code
* 
*/
	{
	INFO_PRINTF1(_L("BoundCLPush. Testing Cancel Request"));
	if(TestStepResult() == EPass )
		{
		SetTestStepResult(EFail);
		iImp = LoadInterface();
		if(iImp)
			{
			TInt bearer, port;
			TInt err = KErrNone;
			TBool secure= EFalse;
			TBool reconnect= EFalse;
			SetLastError(KErrNone);
			
			if(GetIntFromConfig(ConfigSection(),KWapBearer, bearer)) iBearer = (Wap::TBearer)bearer;
			if(GetIntFromConfig(ConfigSection(),KWapLocalPort, port)) iLocalPort = (Wap::TPort)port;
			if(GetIntFromConfig(ConfigSection(), KWapExError, err)) SetExpectedError(err);
			if(GetBoolFromConfig(ConfigSection(), KWapSecure, secure)) iSecure = secure;
			if(GetBoolFromConfig(ConfigSection(),_L("Reconnect"), reconnect)) iReconnect = reconnect;

			ShowConnectionInfo();
			err = iImp->Connect(iBearer, iLocalPort, iSecure);
			INFO_PRINTF2(_L("Connection completed with code = %d"), err);
			if( err == KErrNone)
				{
				TBuf8<100> header, body;
				TPckgBuf<TUint8> idPckg;
				TWSPStatus wspStatus;
				TRequestStatus reqStatus;
				TUint32 timeout=0;
				iImp->MethodResult(header, body, idPckg, wspStatus, reqStatus, timeout);
				SetState(EUnitResult);
				StartScheduler();
				iControl->ReStart();
				if(reqStatus==KErrCancel)
					{
					SetTestStepResult(EPass);
					}
				
				}
			}
		}
	return TestStepResult();
	}

TInt CBoundWSPStep_5::CallStateMachine()
	{
	INFO_PRINTF2(_L("CallStateMachine: step %d"), State());
	switch(iState)
		{
		case EUnitResult:
			INFO_PRINTF1(_L("EUnitResult"));
			iImp->CancelReq();
			SetState(EFinish);
			iControl->ReStart();
			break;
			
		case EFinish:
			INFO_PRINTF1(_L("EFinish"));
			SetState(EIdle);
			StopScheduler();
			break;
			
		case EIdle:
		default:
			INFO_PRINTF2(_L("Error: EIdle or unknown state %d"), State());
			SetTestStepResult(EFail);
			StopScheduler();
			break;
		}
	return (0);
	}

CBoundWSPStep_6::CBoundWSPStep_6() 
	{
	}
CBoundWSPStep_6::~CBoundWSPStep_6()  
	{
	}

TVerdict CBoundWSPStep_6::doTestStepL()
/*
* Test receive time out
*/
	{
	INFO_PRINTF1(_L("BOUND-WSP: Connect-UnitResult-TimeOut"));
	if(TestStepResult() == EPass )
		{
		SetTestStepResult(EFail);
		iImp = LoadInterface();
		if(iImp)
			{
			SetLastError(KErrNone);
			TInt bearer, port;
			TInt error = KErrNone;
			if(GetIntFromConfig(ConfigSection(),KWapBearer, bearer))
				{
				iBearer = static_cast<Wap::TBearer>(bearer);
				}
			if(GetIntFromConfig(ConfigSection(),KWapLocalPort, port))
				{
				iLocalPort = static_cast<Wap::TPort>(port);
				}
			if(GetIntFromConfig(ConfigSection(),KWapExError, error))
				{
				SetExpectedError(error);
				}
			TInt headerLength, bufLength, timeOut; 
			if(GetIntFromConfig(ConfigSection(),KWapWSPRecvHeaderLength, headerLength))
				{
				iHeaderRecvBufLength=static_cast<TUint16>(headerLength);
				}
			if(GetIntFromConfig(ConfigSection(),KWapWSPRecvBodyLength, bufLength))
				{
				iBodyRecvBufLength=static_cast<TUint16>(bufLength);
				}
			if(GetIntFromConfig(ConfigSection(),KWapTimeOut, timeOut))
				{
				iTimeout=timeOut;
				}
			iRecvHeaders = HBufC8::NewL(iHeaderRecvBufLength);
			iRecvBody = HBufC8::NewL(iBodyRecvBufLength);
			SetState(EConnect);
			iControl->ReStart();
			ShowConnectionInfo();
			StartScheduler();
			delete iRecvBody;
			iRecvBody=NULL;
			delete iRecvHeaders;
			iRecvHeaders=NULL;
			UnloadInterface();
			}
		}
	return TestStepResult();
	}

TInt CBoundWSPStep_6::CallStateMachine()
/*
* Test receive time out
*/
	{
	TVerdict verdict = EFail;
	TInt err = KErrNone;
	TInt activate = 0;
	
	INFO_PRINTF2(_L("CallStateMachine: state [%d]"), State());
	switch(iState)
		{
		case EConnect:
			INFO_PRINTF1(_L("EConnect"));
			err = iImp->Connect(iBearer, iLocalPort, EFalse);
			INFO_PRINTF2(_L("Connection completed with code = %d"), err);
			if( err == KErrNone)
				{
//				WaitForInitializeL();
				iRecvHeadersBuf.Set(iRecvHeaders->Des());
				iRecvBodyBuf.Set(iRecvBody->Des());
				iImp->MethodResult(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, iWspStatus, *iStatus, iTimeout);
				INFO_PRINTF1(_L("MethodResult"));
				activate = 1;
				}
			else
				{
				iControl->ReStart();
				}
			SetLastError(err);
			SetState(EFinish);
			break;
			
		case EFinish:
			
			INFO_PRINTF1(_L("EFinish"));
			if(iStatus->Int() != KErrNone) 
				{
				SetLastError(iStatus->Int());
				}
			verdict = (GetLastError() == GetExpectedError())?EPass:EFail;
			SetTestStepResult(verdict);
			SetState(EIdle);
			StopScheduler();
			break;
			
		case EIdle:
		default:
			INFO_PRINTF2(_L("Error: EIdle or unknown state %d"), State());
			SetTestStepResult(verdict);
			StopScheduler();
			
			break;
		}
	return (activate);
	}

CBoundWSPStep_7::CBoundWSPStep_7() 
	{
	}
CBoundWSPStep_7::~CBoundWSPStep_7()
	{
	}

TVerdict CBoundWSPStep_7::doTestStepL()
//
//Wrong sequence
//
	{
	INFO_PRINTF1(_L("BOUND-WSP: Connect-UnitResult-UnitResult"));
	if(TestStepResult() == EPass )
		{
		SetTestStepResult(EFail);
		iImp = LoadInterface();
		if(iImp)
			{
			SetLastError(KErrNone);
			TInt bearer, port;
			TInt error = KErrNone;
			if(GetIntFromConfig(ConfigSection(),KWapBearer, bearer))
				{
				iBearer = static_cast<Wap::TBearer>(bearer);
				}
			if(GetIntFromConfig(ConfigSection(),KWapLocalPort, port))
				{
				iLocalPort = static_cast<Wap::TPort>(port);
				}
			if(GetIntFromConfig(ConfigSection(),KWapExError, error))
				{
				SetExpectedError(error);
				}
			TInt headerLength, bufLength; 
			if(GetIntFromConfig(ConfigSection(),KWapWSPRecvHeaderLength, headerLength))
				{
				iHeaderRecvBufLength=static_cast<TUint16>(headerLength);
				}
			if(GetIntFromConfig(ConfigSection(),KWapWSPRecvBodyLength, bufLength))
				{
				iBodyRecvBufLength=static_cast<TUint16>(bufLength);
				}
			iRecvHeaders = HBufC8::NewL(iHeaderRecvBufLength);
			iRecvBody = HBufC8::NewL(iBodyRecvBufLength);
			SetState(EConnect);
			iControl->ReStart();
			ShowConnectionInfo();
			// Start state machine
			StartScheduler();
			delete iRecvBody;
			iRecvBody=NULL;
			delete iRecvHeaders;
			iRecvHeaders=NULL;
			UnloadInterface();
			}
		}
	return TestStepResult();
	}

TInt CBoundWSPStep_7::CallStateMachine()
	{
	TVerdict verdict = EFail;
	TInt err = KErrNone;
	TInt activate = 0;
	
	INFO_PRINTF2(_L("CallStateMachine: state [%d]"), State());
	switch(iState)
		{
		case EConnect:
			INFO_PRINTF1(_L("EConnect"));
			err = iImp->Connect(iBearer, iLocalPort, EFalse);
			INFO_PRINTF2(_L("Connection completed with code = %d"), err);
			if( err == KErrNone)
				{
//				WaitForInitializeL();
				TRequestStatus reqStatus;
				iRecvHeadersBuf.Set(iRecvHeaders->Des());
				iRecvBodyBuf.Set(iRecvBody->Des());
				iImp->MethodResult(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, iWspStatus, reqStatus, iTimeout);
				iImp->MethodResult(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, iWspStatus, *iStatus, iTimeout);
				INFO_PRINTF1(_L("MethodResult"));
				activate = 1;
				}
			else
				{
				iControl->ReStart();
				}
			SetLastError(err);
			SetState(EFinish);
			break;
			
		case EFinish:
			INFO_PRINTF1(_L("EFinish"));
			iImp->CancelReq();
			if(iStatus->Int() != KErrNone) 
				{
				SetLastError(iStatus->Int());
				}
			verdict = (GetLastError() == GetExpectedError())?EPass:EFail;
			SetTestStepResult(verdict);
			SetState(EIdle);
			StopScheduler();
			break;
			
		case EIdle:
		default:
			INFO_PRINTF2(_L("Error: EIdle or unknown state %d, State = %d"), State());
			SetTestStepResult(verdict);
			StopScheduler();
			
			break;
		}
	return (activate);
	}

CBoundWSPStep_8::CBoundWSPStep_8() 
	{
	}
CBoundWSPStep_8::~CBoundWSPStep_8()  
	{
	}
TVerdict CBoundWSPStep_8::doTestStepL()
/*
*	Using invalid values for API parameters:
*	- Invalid TUid on construction
*	- Invalid method for MethodInvoke
*	- Invalid timeout for MethodResult
*	Note: wrong bearer value has already been implemented as part of test 2
*/
	{
	INFO_PRINTF1(_L("BOUND-WSP: Wrong parameters testing"));
	if(TestStepResult() == EPass )
		{
		TInt error;
		if(GetIntFromConfig(ConfigSection(),KWapExError2, error))
			{
			iExError2=error;
			}
		TInt trapValue;
		TUid invalidInterfaceUid = {0x00000000}; /*{0x101FBB3C};*/
		INFO_PRINTF2(_L("Calling new NewL(0x%08X) method"), invalidInterfaceUid);
		TRAP(trapValue, iImp = CWapBoundCLWSPService::NewL(invalidInterfaceUid));
		TVerdict verdict = (trapValue == iExError2)?EPass:EFail;
		if (verdict==EFail)
			{
			SetTestStepResult(EFail);
			return TestStepResult();
			}
		else
			{
			INFO_PRINTF2(_L("CreateImplementation with wrong Uid- Failed as expected with error %d"),trapValue);
			// Now use the correct Uid
			iImp = LoadInterface();
			if(iImp)
				{
				SetLastError(KErrNone);
				TInt method;
				TInt error = KErrNone;
				TPtrC headers;
				TPtrC body;
				TPtrC uri;
				
				if(GetIntFromConfig(ConfigSection(), KWapExError, error))
					{
					SetExpectedError(error);
					}
				if (GetIntFromConfig(ConfigSection(),KWapWSPMethod, method))
					{
					iMethod=method;
					}
				
				if(!GetStringFromConfig(ConfigSection(),KWapURI, uri) || \
					!GetStringFromConfig(ConfigSection(),KWapWSPHeaders, headers) || \
					!GetStringFromConfig(ConfigSection(),KWapWSPBody, body))
					{
					User::Leave(KErrNoMemory);
					}
				
				iURI = HBufC16::NewL(uri.Length());
				
				iSendHeaders = HBufC8::NewL(headers.Length());
				
				iSendBody = HBufC8::NewL(body.Length());
				
				TPtr16 tmp16 = iURI->Des();
				tmp16.Copy(uri);
				TPtr8 tmp = iSendHeaders->Des();
				tmp.Copy(headers);
				TPtr8 tmp1 = iSendBody->Des();
				tmp1.Copy(body);

				ShowConnectionInfo();
				error = iImp->Connect(iBearer, iLocalPort, EFalse);
				INFO_PRINTF2(_L("Connection completed with code = %d"), error);
				if( error == KErrNone)
					{
					error = iImp->MethodInvoke(iBearer, iRemoteHost, iRemotePort, iMethod, iURI->Des(), iSendHeaders->Des(), iSendBody->Des(), iTransactionId);
					}
				TVerdict verdict = (error == GetExpectedError())?EPass:EFail;
				SetTestStepResult(verdict);
				
				delete iSendBody;
				iSendBody=NULL;
				delete iSendHeaders;
				iSendHeaders=NULL;
				delete iURI;
				iURI=NULL;
				UnloadInterface();
				}
			}
		}
	return TestStepResult();
	}
TInt CBoundWSPStep_8::CallStateMachine()
	{
	return (0);
	}

CBoundWSPStep_9::CBoundWSPStep_9() {}
CBoundWSPStep_9::~CBoundWSPStep_9()  {}

TVerdict CBoundWSPStep_9::doTestStepL()
	{
	return TestStepResult();
	}

TInt CBoundWSPStep_9::CallStateMachine()
	{
	return (0);
	}