wapstack/wapmessageapi/te_wapstack/src/WapBoundCLPushSteps.cpp
branchRCL_3
changeset 18 50bae5c5c85f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wapstack/wapmessageapi/te_wapstack/src/WapBoundCLPushSteps.cpp	Tue Apr 20 17:00:49 2010 +0100
@@ -0,0 +1,896 @@
+// Copyright (c) 2002-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:
+// CBoundCLPushStep_xyz derived implementations
+// 
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include "WapBoundCLPushSteps.h"
+#include "WapStackSuiteDefs.h"
+#include <simtsy.h>
+#include <wapmsgerr.h>
+#include <ecom/ecom.h>
+
+
+CBoundCLPushStepBase::CBoundCLPushStepBase()
+/**
+* Constructor
+*/
+	{
+	}
+
+CBoundCLPushStepBase::~CBoundCLPushStepBase()
+/**
+* Destructor
+*/
+	{
+	if(iImp) 
+		{
+		UnloadInterface();
+		}
+	}
+
+// Load CWapBoundCLPushService Interface 
+CWapBoundCLPushService* CBoundCLPushStepBase::LoadInterface()
+	{
+	TInt trapValue;
+	CWapBoundCLPushService* implementation = NULL;
+	// UID {0x101FBB39} - SWS implementation
+	TUid KInterfaceUid = {0x101FBB39}; 	
+	INFO_PRINTF2(_L("Calling new NewL(0x%08X) method"), KInterfaceUid);
+	TRAP(trapValue, implementation = CWapBoundCLPushService::NewL(KInterfaceUid));
+	if(!trapValue)
+		{
+		INFO_PRINTF2(_L("Interface is loaded: implementation.addr = 0x%08x"), implementation);
+		return implementation;
+		}
+	else return NULL;
+	}
+
+void CBoundCLPushStepBase::UnloadInterface()
+	{
+	INFO_PRINTF2(_L("Interface at implementation.addr = 0x%08x is deleted"), iImp);
+	delete iImp;
+	iImp = NULL;
+	REComSession::FinalClose();
+	}
+
+CBoundCLPushStep_1::~CBoundCLPushStep_1()
+/**
+* Destructor
+*/
+	{
+	}
+
+CBoundCLPushStep_1::CBoundCLPushStep_1()
+/**
+* Constructor
+*/
+	{
+	}
+
+TVerdict CBoundCLPushStep_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.
+*/
+	{
+	//
+	// CWapBoundCLPushService
+	// 
+	INFO_PRINTF1(_L("CreateImplementation - CWapBoundCLPushService"));
+	INFO_PRINTF1(_L("Calling old NewL() method"));
+	
+	TInt trapValue; 
+	
+	SetTestStepResult(EFail);
+	TRAP(trapValue, iImp = CWapBoundCLPushService::NewL());
+	if(!trapValue)
+		{
+		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();
+	}
+
+CBoundCLPushStep_2::CBoundCLPushStep_2()
+/**
+* Constructor
+*/
+	{
+	}
+
+CBoundCLPushStep_2::~CBoundCLPushStep_2() 
+/**
+* Destructor
+*/
+	{
+	}
+
+TVerdict CBoundCLPushStep_2::doTestStepL()
+/** 
+* Test Connect methoths 
+* @return - TVerdict code
+* 
+*/
+	{
+	INFO_PRINTF1(_L("BOUNDCL-PUSH: Testing Connect"));
+	if(TestStepResult() == EPass )
+		{
+		SetTestStepResult(EFail);
+		iImp = LoadInterface();
+		if(iImp)
+			{
+			TInt bearer, port;
+			TInt error	= KErrNone;
+			TBool secure= EFalse;
+			TBool reconnect= EFalse;
+			SetLastError(KErrNone);
+			TBool delay = EFalse;
+			
+			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 CBoundCLPushStep_2::CallStateMachine()
+	{
+	TInt err = KErrNone;
+	INFO_PRINTF2(_L("CallStateMachine: state [%d]"), State());
+	switch(iState)
+		{
+		case EConnect:
+			INFO_PRINTF1(_L("EConnect"));
+			err = iImp->Connect(iBearer, (Wap::TPort)iLocalPort, iSecure);
+			INFO_PRINTF2(_L("Connection completed with code = %d"), err);
+			if( err == KErrNone)
+				{
+				if(iReconnect)
+					{ 
+					INFO_PRINTF1(_L("Second connect"));
+					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);
+	}
+
+CBoundCLPushStep_3::CBoundCLPushStep_3()
+/**
+* Constructor
+*/
+	{
+	}
+
+CBoundCLPushStep_3::~CBoundCLPushStep_3() 
+/**
+* Destructor
+*/
+	{
+	}
+
+TVerdict CBoundCLPushStep_3::doTestStepL()
+/*
+* Test the BoundCLPush 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 BoundCLPush Interface"));
+			verdict = EFail;
+			}
+		else
+			{
+			GetIntFromConfig(ConfigSection(),KWapExError,(TInt&)iExError);
+			ShowConnectionInfo();
+			TRequestStatus reqStatus;
+			iImp->AwaitPush(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, reqStatus);
+			TRAP(ret, TEST_CHECKL(reqStatus.Int(), iExError, _L("AwaitPush 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;
+											}
+									}
+							}
+					}
+				UnloadInterface();
+			}
+		}
+	if (verdict==EPass)
+		{
+		INFO_PRINTF1(_L("BoundCLPush. Requests Fail as expected"));
+		}
+	SetTestStepResult(verdict);
+	return TestStepResult();
+	}
+
+TInt CBoundCLPushStep_3::CallStateMachine()
+	{
+	return (0);
+	}
+
+
+CBoundCLPushStep_4::CBoundCLPushStep_4()
+/**
+* Constructor
+*/
+	{
+	}
+
+CBoundCLPushStep_4::~CBoundCLPushStep_4() 
+/**
+* Destructor
+*/
+	{
+	}
+
+TVerdict CBoundCLPushStep_4::doTestStepL()
+/** 
+* Test Connect methoths 
+* @return - TVerdict code
+* 
+*/
+	{
+	INFO_PRINTF1(_L("BOUND-CLPUSH: Connect-AwaitPush"));
+	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);
+				}
+			GetBoolFromConfig(ConfigSection(), KMiddleCancel, iMiddleCancel);
+			GetBoolFromConfig(ConfigSection(), KMultiReadCancel, iMultiReadCancel);
+			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);
+
+			User::LeaveIfError(RProperty::Set(KUidSystemCategory, KUidPhonePwr.iUid, ESAPhoneOn));
+			
+
+			if(UseSimTsy())
+				{
+				GetIntFromConfig(ConfigSection(),KWapSIMTSYState, iSimTsyState);
+				User::LeaveIfError(RProperty::Set(KUidPSSimTsyCategory, KPSSimTsyTestNumber, iSimTsyState));
+				}
+
+						
+			SetState(EConnect);
+			iControl->ReStart();
+			ShowConnectionInfo();
+
+			StartScheduler();
+			delete iRecvBody;
+			iRecvBody=NULL;
+			delete iRecvHeaders;
+			iRecvHeaders=NULL;
+			UnloadInterface();
+			}
+		}
+	return TestStepResult();
+	}
+
+TInt CBoundCLPushStep_4::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)
+				{
+				if(iBearer != Wap::EIP)
+					{
+					TRAP(err, WaitForInitializeL());
+					}
+				iRecvHeadersBuf.Set(iRecvHeaders->Des());
+				iRecvBodyBuf.Set(iRecvBody->Des());
+				iImp->AwaitPush(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, *iStatus);
+				INFO_PRINTF1(_L("Start AwaitingPush....."));
+				activate = 1;
+				if (!iMiddleCancel)
+					{
+					SetState(EAwaitPush);
+					}
+				else
+					{
+					INFO_PRINTF1(_L("Cancel AwaitPush"));
+					iImp->CancelAwaitPush();
+					SetState(EFinish);
+					}
+				}
+			else 
+				{
+				SetState(EFinish);
+				iControl->ReStart();
+				}
+			SetLastError(err);
+			break;
+			
+		case EAwaitPush:
+			
+			INFO_PRINTF1(_L("EAwaitPush"));
+			if(iStatus->Int() != KErrNone && iStatus->Int()!=Wap::EMoreData) 
+				// AwaitPush failed
+				{
+				INFO_PRINTF1(_L("AwaitPush failed"));
+				SetLastError(iStatus->Int());
+				SetState(EFinish);
+				iControl->ReStart();
+				}
+			else
+				{
+				iMaxWspHeaderRecvBuffer.Append(iRecvHeadersBuf);
+				iMaxWspDataRecvBuffer.Append(iRecvBodyBuf);
+				if (iStatus->Int()==Wap::EMoreData)
+					{
+					iImp->AwaitPush(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, *iStatus);
+					activate = 1;
+					if (!iMultiReadCancel)
+						{
+						SetState(EAwaitPush);
+						}
+					else
+						{
+						INFO_PRINTF1(_L("Cancel Receive in EMutipleReceive state"));
+						iImp->CancelAwaitPush();
+						SetState(EFinish);
+						}					
+					}
+				else
+					{
+					SetLastError(iStatus->Int());
+					iControl->ReStart();
+					SetState(EFinish);
+					}
+				}
+			break;
+			
+		case EFinish:
+			
+			INFO_PRINTF1(_L("EFinish"));
+			if(iStatus->Int() != KErrNone) 
+				{
+				SetLastError(iStatus->Int());
+				}
+			verdict = (GetLastError() == GetExpectedError())?EPass:EFail;
+			if (verdict==EPass && !iMiddleCancel && !iMultiReadCancel)
+				{
+				iImp->CancelAwaitPush();
+				INFO_PRINTF1(_L("Headers:"));
+				DumpBuf(iMaxWspHeaderRecvBuffer);
+				INFO_PRINTF1(_L("Body"));
+				DumpBuf(iMaxWspDataRecvBuffer);
+				if (verdict==EPass)
+					{
+					HBufC8* buf;
+					iImp->GetServerAddress(buf);
+					verdict = (buf->Match(iRemoteHost)!=KErrNotFound)?EPass:EFail;
+					delete buf;
+					}
+				if (verdict==EPass)
+					{
+					Wap::TPort port;
+					iImp->GetLocalPort(port);
+					verdict = (port == iLocalPort)?EPass:EFail;
+					}
+				if (verdict==EPass)
+					{
+					Wap::TBearer bearer;
+					iImp->GetBearer(bearer);
+					verdict = (bearer == iBearer)?EPass:EFail;
+					}
+				if (verdict==EPass)
+					{
+					//This test can not perform.
+					HBufC8* buf;
+					iImp->GetLocalAddress(buf);
+					delete buf;
+					}
+				}
+			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);
+}
+
+CBoundCLPushStep_5::CBoundCLPushStep_5()
+/**
+* Constructor
+*/
+	{
+	}
+
+CBoundCLPushStep_5::~CBoundCLPushStep_5() 
+/**
+* Destructor
+*/
+	{
+	}
+
+TVerdict CBoundCLPushStep_5::doTestStepL()
+/** 
+* Test Cancel 
+* @return - TVerdict code
+* 
+*/
+	{
+	INFO_PRINTF1(_L("BOUNDCL-PUSH: Testing Cancel"));
+	if(TestStepResult() == EPass )
+		{
+		SetTestStepResult(EFail);
+		iImp = LoadInterface();
+		if(iImp)
+			{
+			TInt bearer, port;
+			TInt error	= 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, error)) SetExpectedError(error);
+			if(GetBoolFromConfig(ConfigSection(), KWapSecure, secure)) iSecure = secure;
+			if(GetBoolFromConfig(ConfigSection(),_L("Reconnect"), reconnect)) iReconnect = reconnect;
+			
+			ShowConnectionInfo();
+			error = iImp->Connect(iBearer, iLocalPort, iSecure);
+			INFO_PRINTF2(_L("Connection completed with code = %d"), error);
+			if( error == KErrNone)
+				{
+				TBuf8<100> header, body;
+				TPckgBuf<TUint8> pushIdPckg;
+				TRequestStatus reqStatus;
+				iImp->AwaitPush(header, body, pushIdPckg, reqStatus);
+				SetState(EAwaitPush);
+				StartScheduler();
+				iControl->ReStart();
+				if(reqStatus==KErrCancel)
+					{
+					SetTestStepResult(EPass);
+					}
+				}
+			
+			}
+		}
+	return TestStepResult();
+	}
+
+TInt CBoundCLPushStep_5::CallStateMachine()
+	{
+	INFO_PRINTF2(_L("CallStateMachine: state [%d]"), State());
+	switch(iState)
+		{
+		case EAwaitPush:
+			INFO_PRINTF1(_L("EAwaitPush"));
+			iImp->CancelAwaitPush();
+			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);
+	}
+
+
+CBoundCLPushStep_6::CBoundCLPushStep_6() 
+	{
+	}
+CBoundCLPushStep_6::~CBoundCLPushStep_6() 
+	{
+	}
+TVerdict CBoundCLPushStep_6::doTestStepL()
+	{
+	return TestStepResult();
+	}
+TInt CBoundCLPushStep_6::CallStateMachine()
+	{
+	return (0);
+	}
+
+CBoundCLPushStep_7::CBoundCLPushStep_7() 
+	{
+	}
+CBoundCLPushStep_7::~CBoundCLPushStep_7() 
+	{
+	}
+TVerdict CBoundCLPushStep_7::doTestStepL()
+	{
+	INFO_PRINTF1(_L("BOUND-CLPUSH: Connect-AwaitPush-AwaitPush"));
+	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();
+
+			StartScheduler();
+			delete iRecvBody;
+			iRecvBody=NULL;
+			delete iRecvHeaders;
+			iRecvHeaders=NULL;
+			UnloadInterface();
+			}
+		}
+	return TestStepResult();
+	}
+TInt CBoundCLPushStep_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)
+				{
+				iRecvHeadersBuf.Set(iRecvHeaders->Des());
+				iRecvBodyBuf.Set(iRecvBody->Des());
+				TRequestStatus reqStatus;
+				iImp->AwaitPush(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, reqStatus);
+				iImp->AwaitPush(iRecvHeadersBuf, iRecvBodyBuf, iTransactionIdPckg, *iStatus);
+				INFO_PRINTF1(_L("AwaitPush"));
+				activate = 1;
+				}
+			else
+				{
+				iControl->ReStart();
+				}
+			SetLastError(err);
+			SetState(EFinish);
+			break;
+			
+		case EFinish:
+			
+			INFO_PRINTF1(_L("EFinish"));
+			iImp->CancelAwaitPush();
+			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);
+	}
+
+CBoundCLPushStep_8::CBoundCLPushStep_8() 
+	{
+	}
+CBoundCLPushStep_8::~CBoundCLPushStep_8() 
+	{
+	}
+TVerdict CBoundCLPushStep_8::doTestStepL()
+/**
+*	@return - TVerdict code
+*	Wrong parameter values for Bound CL Push API:
+*	- Wrong TUid on construction
+*	- Connect to wrong bearer (already implemented in test 2)
+*/
+	{
+	INFO_PRINTF1(_L("CreateImplementation with wrong Uid- CWapBoundCLPushService"));
+	if(TestStepResult() == EPass )
+		{
+		TInt error;
+		if(GetIntFromConfig(ConfigSection(),KWapExError2, error))
+			{
+			iExError2=error;
+			}
+		TInt trapValue;
+		
+		TUid invalidInterfaceUid = {0x00000000}; 
+		
+		INFO_PRINTF2(_L("Calling new NewL(0x%08X) method"), invalidInterfaceUid);
+		TRAP(trapValue, iImp = CWapBoundCLPushService::NewL(invalidInterfaceUid));
+		TVerdict verdict = (trapValue == iExError2)?EPass:EFail;
+		if (verdict==EPass)
+			{
+			INFO_PRINTF2(_L("CreateImplementation with wrong Uid- Failed as expected with error %d"),trapValue);
+			}
+		SetTestStepResult(verdict);
+		}
+	return TestStepResult();
+	}
+TInt CBoundCLPushStep_8::CallStateMachine()
+	{
+	return (0);
+	}
+
+CBoundCLPushStep_9::CBoundCLPushStep_9() 
+	{
+	}
+CBoundCLPushStep_9::~CBoundCLPushStep_9() 
+	{
+	}
+TVerdict CBoundCLPushStep_9::doTestStepL()
+	{
+	INFO_PRINTF1(_L("BOUND-CLPUSH: Sending Push Message"));
+	if(TestStepResult() == EPass )
+		{
+		User::After(20000000);
+		SetTestStepResult(EFail);
+		SetLastError(KErrNone);
+		TInt error = KErrNone;
+		/**
+		Getting information from config file
+		Local port
+		Remote port
+		Local address
+		Remote address
+		*/
+		GetIntFromConfig(ConfigSection(),KLocalPort, iLclPort);
+		GetIntFromConfig(ConfigSection(),KRemotePort, iRmtPort);
+		TPtrC temp;
+		if(GetStringFromConfig(ConfigSection(),KWapLocalHost, temp))
+			{
+			error = iLocalAddr.Input(temp);
+			if(error)
+				{
+				User::Leave(error);
+				}
+			}
+		if(GetStringFromConfig(ConfigSection(),KWapRemoteHost, temp ))
+			{
+			error = iRemoteAddr.Input(temp);
+			if(error)
+				{
+				User::Leave(error);
+				}
+			}
+//		error = GetStringFromConfig(ConfigSection(),KWapData, temp);
+
+		RFs fS;
+		RFile file;
+		User::LeaveIfError(fS.Connect());
+		_LIT(KPduFilename,"z:\\testdata\\configs\\pushpdu.bin");
+		User::LeaveIfError(file.Open(fS, KPduFilename , EFileStream | EFileRead));
+		/* Read PDU from the file */
+
+		iSendBuffPtr = HBufC8::NewL(1024);
+		TPtr8 tmpbuf = iSendBuffPtr->Des();
+		User::LeaveIfError(file.Read(tmpbuf));
+
+		file.Close();
+		fS.Close();
+		/**
+		Settings
+		*/
+		iLocalAddr.SetPort(iLclPort);
+		iRemoteAddr.SetPort(iRmtPort);
+//		iSendBuffPtr = HBufC8::NewL(temp.Length());
+//		TPtr8 tmp = iSendBuffPtr->Des();
+//		tmp.Copy(temp);
+
+		/**
+		socket server 
+		*/
+		RSocketServ socketServer;
+	    User::LeaveIfError(socketServer.Connect());
+		CleanupClosePushL(socketServer);
+		RSocket sock;
+		User::LeaveIfError(sock.Open(socketServer, KAfInet, KSockDatagram, KProtocolInetUdp));
+		CleanupClosePushL(sock);
+		TRequestStatus status;
+		sock.SendTo(iSendBuffPtr->Des(),iRemoteAddr , 0, status);
+		User::WaitForRequest(status);
+		INFO_PRINTF2(_L("Send Push Message - status = %d"), status.Int());
+		User::LeaveIfError(status.Int());
+		sock.Close();
+		socketServer.Close();
+		CleanupStack::PopAndDestroy(&sock);
+		CleanupStack::Pop(&socketServer);
+		TVerdict verdict = (status.Int() == KErrNone)?EPass:EFail;
+		SetTestStepResult(verdict);
+		}
+	return TestStepResult();
+	}
+TInt CBoundCLPushStep_9::CallStateMachine()
+	{
+			return (0);
+	}
+
+
+
+