bluetoothapitest/bluetoothsvs/t_btgavdpapi/src/t_data_rgavdp.cpp
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothapitest/bluetoothsvs/t_btgavdpapi/src/t_data_rgavdp.cpp	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,1655 @@
+/*
+* Copyright (c) 2005-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:
+*
+*/
+
+#include "t_data_rgavdp.h"
+#include "T_BTUtil.h"
+#include <e32des8.h>
+
+using namespace SymbianBluetoothAV;
+
+/*@{*/
+
+//Parameters
+_LIT(KFldSocketServ,						"socketserv");
+_LIT(KFldBTDevAddr,							"btdevaddr");
+_LIT(KFldSEPInfo,							"avdtpsepinfo");
+_LIT(KFldServiceCapability,					"avdtpservicecapability");
+_LIT(KFldSecurityData,						"securitydata");
+_LIT(KFldSEPsCount,							"expected_sepcount");
+_LIT(KFldRemoteSEPs,						"remotesep_%d");
+_LIT(KFldServiceCategory,					"servicecategory");
+_LIT(KFldRemoteCaps,						"expected_remotecap_%d");
+_LIT(KFldSEID,								"seid");
+_LIT(KFldLocalSEID,							"localseid");
+_LIT(KFldRemoteSEID,						"remoteseid");
+_LIT(KFldIgnored1,							"ignored1");
+_LIT(KFldIgnored2,							"ignored2");
+_LIT(KFldSendData,							"senddata");
+_LIT(KFldExpectedData,						"expecteddata");
+_LIT(KFldExpectedEvents,					"expectedevents");
+_LIT(KFldExpectedResponseData,				"expectedresponsedata");
+_LIT(KFldExpectedMaxLength,					"expectedmaxlength");
+_LIT(KFldExistRemoteSEPs,					"exist_remote_sep");
+_LIT(KFldConfigReturnCode,					"config_return_code");
+_LIT(KFldConfigEndReturnCode,				"config_end_return_code");
+
+_LIT(KEGAVDP_NoneEvent,						"EGAVDP_NoneEvent");
+_LIT(KEGAVDP_ConnectConfirm,				"EGAVDP_ConnectConfirm");
+_LIT(KEGAVDP_SEPDiscovered,					"EGAVDP_SEPDiscovered");
+_LIT(KEGAVDP_SEPDiscoveryComplete,			"EGAVDP_SEPDiscoveryComplete");
+_LIT(KEGAVDP_SEPCapability,					"EGAVDP_SEPCapability");
+_LIT(KEGAVDP_SEPCapabilityComplete,			"EGAVDP_SEPCapabilityComplete");
+_LIT(KEGAVDP_AbortStreamConfirm,			"EGAVDP_AbortStreamConfirm");
+_LIT(KEGAVDP_StartStreamsConfirm,			"EGAVDP_StartStreamsConfirm");
+_LIT(KEGAVDP_SuspendStreamsConfirm,			"EGAVDP_SuspendStreamsConfirm");
+_LIT(KEGAVDP_SecurityControlConfirm,		"EGAVDP_SecurityControlConfirm");
+_LIT(KEGAVDP_ConfigurationConfirm,			"EGAVDP_ConfigurationConfirm");
+_LIT(KEGAVDP_ConfigurationStartIndication,	"EGAVDP_ConfigurationStartIndication");
+_LIT(KEGAVDP_ConfigurationIndication,		"EGAVDP_ConfigurationIndication");
+_LIT(KEGAVDP_ConfigurationEndIndication,	"EGAVDP_ConfigurationEndIndication");
+_LIT(KEGAVDP_StartIndication,				"EGAVDP_StartIndication");
+_LIT(KEGAVDP_SuspendIndication,				"EGAVDP_SuspendIndication");
+_LIT(KEGAVDP_SecurityControlIndication,		"EGAVDP_SecurityControlIndication");
+_LIT(KEGAVDP_AbortIndication,				"EGAVDP_AbortIndication");
+_LIT(KEGAVDP_ReleaseIndication,				"EGAVDP_ReleaseIndication");
+_LIT(KEGAVDP_BearerReady,					"EGAVDP_BearerReady");
+_LIT(KEGAVDP_Error,							"EGAVDP_Error");
+
+//Commands
+_LIT(KCmdDestructorGeneral,					"~");
+_LIT(KCmdDestructor,						"~RGavdp");
+_LIT(KCmdConstructor,						"new");
+_LIT(KCmdOpen,								"Open");
+_LIT(KCmdListen,							"Listen");
+_LIT(KCmdConnect,							"Connect");
+_LIT(KCmdClose,								"Close");
+_LIT(KCmdCancel,							"Cancel");
+_LIT(KCmdDiscoverRemoteSEPs,				"DiscoverRemoteSEPs");
+_LIT(KCmdGetRemoteSEPCapabilities,			"GetRemoteSEPCapabilities");
+_LIT(KCmdRegisterSEP,						"RegisterSEP");
+_LIT(KCmdBeginConfiguringRemoteSEP,			"BeginConfiguringRemoteSEP");
+_LIT(KCmdBeginConfiguringLocalSEP,			"BeginConfiguringLocalSEP");
+_LIT(KCmdAddSEPCapability,					"AddSEPCapability");
+_LIT(KCmdCommitSEPConfiguration,			"CommitSEPConfiguration");
+_LIT(KCmdStartStream,						"StartStream");
+_LIT(KCmdSuspendStream,						"SuspendStream");
+_LIT(KCmdAbortStream,						"AbortStream");
+_LIT(KCmdSendSecurityControl,				"SendSecurityControl");
+_LIT(KCmdCreateBearerSockets,				"CreateBearerSockets");
+_LIT(KCmdMaxSecurityControlLength,			"MaxSecurityControlLength");
+_LIT(KCmdShutdown,							"Shutdown");
+//Utility
+_LIT(KCmdIncOutstanding,					"IncOutstanding");
+_LIT(KCmdRead,								"Read");
+_LIT(KCmdSend,								"Send");
+_LIT(KCmdCloseBearerSockets,				"CloseBearerSockets");
+
+///	Logging
+_LIT(KLogInfoCmdConstructor,				"execute new RGavdp::RGavdp()");
+_LIT(KLogInfoCmdOpen,						"execute RGavdp::Open()");
+_LIT(KLogInfoCmdDestructor1,				"execute ~RGavdp()");
+_LIT(KLogInfoCmdClose,						"execute RGavdp::Close()");
+_LIT(KLogInfoCmdListen,						"execute RGavdp::Listen()");
+_LIT(KLogInfoCmdCancel,						"execute RGavdp::Cancel()");
+_LIT(KLogInfoCmdConnnect,        			"execute RGavdp::Connect()");
+_LIT(KLogInfoCmdDiscoverRemoteSEPs,			"execute RGavdp::DiscoverRemoteSEPs()");
+_LIT(KLogInfoCmdGetRemoteSEPCapabilities,	"execute RGavdp::GetRemoteSEPCapabilities()");
+_LIT(KLogInfoCmdRegisterSEP,				"execute RGavdp::RegisterSEP()");
+_LIT(KLogInfoCmdBeginConfiguringRemoteSEP,	"execute RGavdp::BeginConfiguringRemoteSEP()");
+_LIT(KLogInfoCmdBeginConfiguringLocalSEP,	"execute RGavdp::BeginConfiguringLocalSEP()");
+_LIT(KLogInfoCmdAddSEPCapability,			"execute RGavdp::AddSEPCapability()");
+_LIT(KLogInfoCmdCommitSEPConfiguration,		"execute RGavdp::CommitSEPConfiguration()");
+_LIT(KLogInfoCmdStartStream,				"execute RGavdp::StartStream()");
+_LIT(KLogInfoCmdSuspendStream,				"execute RGavdp::SuspendStream()");
+_LIT(KLogInfoCmdAbortStream,				"execute RGavdp::AbortStream()");
+_LIT(KLogInfoCmdSendSecurityControl,		"execute RGavdp::SendSecurityControl()");
+_LIT(KLogInfoCmdCreateBearerSockets1,		"execute RGavdp::CreateBearerSockets(TSEID)");
+_LIT(KLogInfoCmdCreateBearerSockets2,		"execute RGavdp::CreateBearerSockets(TSEID, TBool, TBool)");
+_LIT(KLogInfoCmdMaxSecurityControlLength1,	"execute RGavdp::MaxSecurityControlLength()");
+_LIT(KLogInfoCmdShutdown,					"execute RGavdp::Shutdown()");
+_LIT(KLogInfoReading,						"Start reading");
+_LIT(KLogInfoSending,						"Start sending");
+_LIT(KLogInfoCmdMaxSecurityControlLength2,	"RGavdp::MaxSecurityControlLength = %d");
+
+_LIT(KLogErrMissingParameter,				"Missing parameter '%S'");
+_LIT(KLogErrCmdConstructor,					"**** RGavdp Constructor failed with error %d");
+_LIT(KLogErrCmdOpen,						"**** RGavdp Open failed with error %d");
+_LIT(KLogErrCmdListen,						"**** RGavdp Listen failed with error %d");
+_LIT(KLogErrCmdRegisterSEP,					"**** RGavdp RegisterSEP failed with error %d");
+_LIT(KLogErrCmdBeginConfiguringRemoteSEP,	"**** RGavdp BeginConfiguringRemoteSEP failed with error %d");
+_LIT(KLogErrCmdBeginConfiguringLocalSEP,	"**** RGavdp BeginConfiguringLocalSEP failed with error %d");
+_LIT(KLogErrCmdAddSEPCapability,			"**** RGavdp AddSEPCapability failed with error %d");
+_LIT(KLogErrCmdCreateBearerSockets,			"**** RGavdp CreateBearerSockets failed with error %d");
+_LIT(KLogErrCmdShutdown,					"**** RGavdp Shutdown failed with error %d");
+
+//call back
+_LIT(KLogInfoConnectConfirm,				"MGavdpUser::GAVDP_ConnectConfirm() call back");
+_LIT(KLogInfoSEPDiscovered,					"MGavdpUser::GAVDP_SEPDiscovered() call back");
+_LIT(KLogInfoSEPDiscoveryComplete,			"MGavdpUser::GAVDP_SEPDiscoveryComplete() call back.");
+_LIT(KLogInfoSEPCapability,					"MGavdpUser::GAVDP_SEPCapability() call back.");
+_LIT(KLogInfoSEPCapabilityComplete,			"MGavdpUser::GAVDP_SEPCapabilityComplete() call back.");
+_LIT(KLogInfoAbortStreamConfirm,			"MGavdpUser::GAVDP_AbortStreamConfirm() call back.");
+_LIT(KLogInfoStartStreamsConfirm,			"MGavdpUser::GAVDP_StartStreamsConfirm() call back.");
+_LIT(SuspendStreamsConfirm,					"MGavdpUser::GAVDP_SuspendStreamsConfirm() call back.");
+_LIT(KLogInfoSecurityControlConfirm,		"MGavdpUser::GAVDP_SecurityControlConfirm() call back");
+_LIT(KLogInfoConfigurationConfirm,			"MGavdpUser::GAVDP_ConfigurationConfirm() call back.");
+_LIT(KLogInfoConfigurationStartIndication,	"MGavdpUser::GAVDP_ConfigurationStartIndication() call back");
+_LIT(KLogInfoConfigurationIndication1,		"MGavdpUser::GAVDP_ConfigurationIndication() call back");
+_LIT(KLogInfoConfigurationIndication2,		"Category = %d");
+_LIT(KLogInfoConfigurationEndIndication,	"MGavdpUser::GAVDP_ConfigurationEndIndication() call back.");
+_LIT(KLogInfoStartIndication,				"MGavdpUser::GAVDP_StartIndication() call back");
+_LIT(KLogInfoSuspendIndication,				"MGavdpUser::GAVDP_SuspendIndication() call back");
+_LIT(KLogInfoSecurityControlIndication,		"MGavdpUser::GAVDP_SecurityControlIndication() call back");
+_LIT(KLogInfoAbortIndication,				"MGavdpUser::GAVDP_AbortIndication() call back");
+_LIT(KLogInfoReleaseIndication,				"MGavdpUser::GAVDP_ReleaseIndication() call back");
+_LIT(KLogInfoBearerReady,					"MGavdpUser::GAVDP_BearerReady() call back");
+_LIT(KLogInfoError1,						"MGavdpUser::GAVDP_Error() call back");
+_LIT(KLogInfoError2,						"aError: %d, aErrorData: %s");
+
+_LIT(KLogInfoSEPValue,						"SEID: %d");
+_LIT(KLogInfoMediaTypeAudio,				"Audio");
+_LIT(KLogInfoMediaTypeVideo,				"Video");
+_LIT(KLogInfoMediaTypeMultimedia,			"Multimedia");
+_LIT(KLogInfoAvdtpSink,						"Sink");
+_LIT(KLogInfoAvdtpSource,					"Source");
+_LIT(KLogInfoAvdtpInUse,					"[In use]");
+_LIT(KLogInfoServiceCategoryMediaTransport,	"Category = EServiceCategoryMediaTransport");
+_LIT(KLogInfoServiceCategoryReporting,		"Category = EServiceCategoryReporting");
+_LIT(KLogInfoServiceCategoryRecovery,		"Category = EServiceCategoryRecovery");
+_LIT(KLogInfoServiceCategoryContentProtection, "Category = EServiceCategoryContentProtection");
+_LIT(KLogInfoBearerTypeEMedia,				"EMedia");
+_LIT(KLogInfoBearerTypeEReporting,			"EReporting");
+_LIT(KLogInfoBearerTypeERecovery,			"ERecovery");
+_LIT(KLogInfoSendSucess,					"Send successfully");
+_LIT(KLogInfoReceived,						"Recevied Data :%S");
+
+
+_LIT(KLogErrCallback,						"Called function is not as expected");
+_LIT(KLogErrLocalSEID,						"SEID used for call back is not as expected, expected_SEID=%d actual_SEID=%d");
+_LIT(KLogErrConnect,						"Remote device address is not as expected");
+_LIT(KLogErrCapability,						"Received capability is not as expected");
+_LIT(KLogErrExpectedEvents,					"Given expected events (%S) is invalid");
+_LIT(KLogErrExpectedResponseData,			"Response security data is not as expected");
+_LIT(KLogErrReceivedSecurityData,			"Received security data is not as expected");
+_LIT(KLogErrExpectedMaxLength,				"MaxSecurityControlLength is not as expected");
+_LIT(KLogErrExistRemoteSEPs,				"Given exist remote SEPs are invalid");
+_LIT(KLogErrDiscoverRemoteSEPsCount,		"Discover remote SEPs fail expected_count=%d actual_count=%d");
+_LIT(KLogErrReadData,						"Not received expected data");
+_LIT(KLogErrSocket,							"Socket Error= %d");
+
+//SecurityData
+_LIT(KLogInfoSecurityDataUnchanged,			"Security data not changed");
+_LIT(KLogInfoSecurityDataChanged,			"Have changed security data to: %S");
+_LIT(KLogDataFixed,							"Do not change me");
+_LIT(KLogDataChange,						"Change me");
+_LIT(KLogDataChanged,						"Changed data");
+
+/*@}*/
+
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CT_DataRGavdp* CT_DataRGavdp::NewL()
+	{
+	CT_DataRGavdp*	ret=new	(ELeave) CT_DataRGavdp();
+	CleanupStack::PushL(ret);
+	ret->ConstructL();
+	CleanupStack::Pop(ret);
+	return ret;
+	}
+
+CT_DataRGavdp::CT_DataRGavdp()
+:	iRGavdp(NULL),
+	iRemoteAddr(NULL),
+	iExpectedEventCount(0),
+	iEventCount(0),
+	iExpectedSEPsCount(0),
+	iDiscoverdSEPsCount(0),
+	iSrvCategory(EServiceCategoryNull),
+	iReadBuffer(NULL),
+	iReadBufferDes(NULL, NULL),
+	iReadExpectBuffer(NULL),
+	iSendBuffer(NULL),
+	iExpectedResponseSecurityData(NULL),
+	iActive(NULL),
+	iCmdIndex(0),
+	iConfigReturnCode(0),
+	iConfigEndReturnCode(0)
+	{
+	}
+
+void CT_DataRGavdp::ConstructL()
+	{
+	iActive = CActiveCallback::NewL(*this);
+	}
+
+CT_DataRGavdp::~CT_DataRGavdp()
+	{
+	DestroyData();
+
+	delete iActive;
+	iActive = NULL;
+	}
+
+void CT_DataRGavdp::SetObjectL(TAny* aAny)
+	{
+	DestroyData();
+	iRGavdp	= static_cast<RGavdp*> (aAny);
+	}
+
+void CT_DataRGavdp::DisownObjectL()
+	{
+	iRGavdp	= NULL;
+	}
+
+void CT_DataRGavdp::DestroyData()
+	{
+	DoCmdDestructor();
+	
+	iRemoteAddr=NULL;
+	iExpectedEvent.Close();
+	iExpectedEventCount=0;
+	iEventCount=0;
+	iExistRemoteSEIDs.Close();
+	iExpectedSEPsCount=0;
+	iDiscoverdSEPsCount=0;
+	iRemoteSEPs.Close();
+	iRemoteCapabilities.Close();
+	iSrvCategory=EServiceCategoryNull;
+	delete iReadBuffer;
+	iReadBuffer = NULL;
+	delete iReadExpectBuffer;
+	iReadExpectBuffer = NULL;
+	delete iExpectedResponseSecurityData;
+	iExpectedResponseSecurityData = NULL;
+	delete iSendBuffer;
+	iSendBuffer = NULL;
+	iConfigReturnCode = 0;
+	iConfigEndReturnCode = 0;
+	}
+
+inline TCleanupOperation CT_DataRGavdp::CleanupOperation()
+	{
+	return CleanupOperation;
+	}
+
+void CT_DataRGavdp::CleanupOperation(TAny* aAny)
+	{
+	RGavdp* gavdp=static_cast<RGavdp*>(aAny);
+	gavdp->Close();
+	delete gavdp;
+	}
+
+/**
+test script	command	entry point
+@internalAll
+@return	ETrue if syncronous	command	otherwise EFalse
+@param aParam1 descriptor containing the command value
+@param aParam2 descriptor containing the command parameter
+@pre N/A
+@post N/A
+*/
+TBool CT_DataRGavdp::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	ret=ETrue;
+
+	if ( aCommand==KCmdDestructorGeneral || aCommand==KCmdDestructor )
+		{
+		DoCmdDestructor();
+		}
+	else if ( aCommand==KCmdConstructor )
+		{
+		DoCmdConstructor();
+		}
+	else if( aCommand==KCmdOpen )
+		{
+		DoCmdOpen(aSection);
+		}
+	else if( aCommand==KCmdListen )
+		{
+		DoCmdListen(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdClose )
+		{
+		DoCmdClose();
+		}
+	else if( aCommand==KCmdCancel )
+		{
+		DoCmdCancel();
+		}
+	else if( aCommand==KCmdConnect )
+		{
+		DoCmdConnect(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdDiscoverRemoteSEPs )
+		{
+		DoCmdDiscoverRemoteSEPs(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdGetRemoteSEPCapabilities )
+		{
+		DoCmdGetRemoteSEPCapabilities(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdRegisterSEP )
+		{
+		DoCmdRegisterSEP(aSection);
+		}
+	else if( aCommand==KCmdBeginConfiguringRemoteSEP )
+		{
+		DoCmdBeginConfiguringRemoteSEP(aSection);
+		}
+	else if( aCommand==KCmdBeginConfiguringLocalSEP )
+		{
+		DoCmdBeginConfiguringLocalSEP(aSection);
+		}
+	else if( aCommand==KCmdAddSEPCapability )
+		{
+		DoCmdAddSEPCapability(aSection);
+		}
+	else if( aCommand==KCmdCommitSEPConfiguration )
+		{
+		DoCmdCommitSEPConfiguration(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdStartStream )
+		{
+		DoCmdStartStream(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdSuspendStream )
+		{
+		DoCmdSuspendStream(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdAbortStream )
+		{
+		DoCmdAbortStream(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdSendSecurityControl )
+		{
+		DoCmdSendSecurityControl(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdCreateBearerSockets )
+		{
+		DoCmdCreateBearerSockets(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdMaxSecurityControlLength )
+		{
+		DoCmdMaxSecurityControlLength(aSection);
+		}
+	else if( aCommand==KCmdShutdown )
+		{
+		DoCmdShutdown();
+		}
+	else if( aCommand==KCmdRead )
+		{
+		Read(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdSend )
+		{
+		Send(aSection, aAsyncErrorIndex);
+		}
+	else if( aCommand==KCmdCloseBearerSockets)
+		{
+		CloseBearerSockets();
+		}
+	else if( aCommand==KCmdIncOutstanding )
+		{
+		IncreaseOutstanding(aSection, aAsyncErrorIndex);
+		}
+	else
+		{
+		ret=EFalse;
+		}
+
+	return ret;
+	}
+
+void CT_DataRGavdp::DoCmdDestructor()
+	{
+	if (iRGavdp) 
+		{
+		INFO_PRINTF1(KLogInfoCmdDestructor1);
+		delete iRGavdp;
+		iRGavdp = NULL;
+		}
+	}
+
+void CT_DataRGavdp::DoCmdConstructor()
+	{
+	DestroyData();
+
+	INFO_PRINTF1(KLogInfoCmdConstructor);
+	TRAPD(err,	iRGavdp = new (ELeave) RGavdp());
+	if(err	!= KErrNone)
+		{
+		ERR_PRINTF2(KLogErrCmdConstructor, err);
+		SetError(err);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdOpen(const TTEFSectionName& aSection)
+	{
+	TBool	dataOk=ETrue;
+	
+	RSocketServ* socketServ;
+	if ( !CT_BTUtil::GetSocketServL(*this, aSection, KFldSocketServ, socketServ) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSocketServ());
+		SetBlockResult(EFail);		
+		}
+	
+	TInt err = KErrNone;
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdOpen);
+		err = iRGavdp->Open(*this,*socketServ);
+		}
+
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(KLogErrCmdOpen, err);
+		SetError(err);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdListen(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	INFO_PRINTF1(KLogInfoCmdListen);
+	
+	if(!GetIntFromConfig(aSection, KFldConfigReturnCode(), iConfigReturnCode))
+		{
+		iConfigReturnCode=KErrNone;
+		}
+	if(!GetIntFromConfig(aSection, KFldConfigEndReturnCode(), iConfigEndReturnCode))
+		{
+		iConfigEndReturnCode=KErrNone;
+		}
+		
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		TInt err = iRGavdp->Listen();
+		if(err != KErrNone)
+			{
+			ERR_PRINTF2(KLogErrCmdListen, err);
+			SetError(err);
+			}
+		}
+	}
+
+void CT_DataRGavdp::DoCmdClose()
+	{
+	INFO_PRINTF1(KLogInfoCmdClose);
+	iRGavdp->Close();
+	}
+
+void CT_DataRGavdp::DoCmdCancel()
+	{
+	INFO_PRINTF1(KLogInfoCmdCancel);
+	iRGavdp->Cancel();
+	}
+
+void CT_DataRGavdp::DoCmdConnect(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool dataOk = ETrue;
+	TPtrC		objectName;
+	if (!GetStringFromConfig(aSection, KFldBTDevAddr(), objectName) )
+		{
+		dataOk = EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldBTDevAddr());
+		SetBlockResult(EFail);
+		}
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		dataOk = EFalse;
+		SetBlockResult(EFail);
+		}
+	if (dataOk)
+		{
+		iRemoteAddr = static_cast<TBTDevAddr*>(GetDataObjectL(objectName));
+		INFO_PRINTF1(KLogInfoCmdConnnect);
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		iRGavdp->Connect(*iRemoteAddr);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdDiscoverRemoteSEPs(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool dataOk = ETrue;
+	TBuf<KMaxTestExecuteCommandLength>	tempStore;
+
+	iExistRemoteSEIDs.Reset();
+	TPtrC existSEIDstr(0,0);
+	if(GetStringFromConfig(aSection, KFldExistRemoteSEPs(), existSEIDstr) 
+		&& (existSEIDstr.Length() != 0))
+		{
+		if (!ConvertSEIDs(existSEIDstr, iExistRemoteSEIDs))
+			{
+			ERR_PRINTF1(KLogErrExistRemoteSEPs);
+			SetBlockResult(EFail);
+			}
+		}
+		
+	iExpectedSEPsCount=0;
+	iDiscoverdSEPsCount=0;
+	iRemoteSEPs.Reset();
+
+	TInt SEPCount;
+	TAvdtpSEPInfo* SEPInfo = NULL;
+	if(!GetIntFromConfig(aSection, KFldSEPsCount(), iExpectedSEPsCount))
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEPsCount());
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		for(SEPCount=1; SEPCount<=iExpectedSEPsCount; SEPCount++)
+			{
+			tempStore.Format(KFldRemoteSEPs, SEPCount);
+			if ( CT_BTUtil::GetAvdtpSEPInfoL(*this, aSection, tempStore, SEPInfo) )
+				{
+				iRemoteSEPs.Append(SEPInfo);
+				SEPInfo = NULL;
+				}
+			else
+				{
+				dataOk = EFalse;
+				ERR_PRINTF2(KLogErrMissingParameter, &tempStore);
+				SetBlockResult(EFail);
+				break;
+				}
+			}
+		}
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		dataOk = EFalse;
+		SetBlockResult(EFail);
+		}
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdDiscoverRemoteSEPs);
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		iRGavdp->DiscoverRemoteSEPs();
+		}
+	}
+
+void CT_DataRGavdp::DoCmdGetRemoteSEPCapabilities(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	dataOk=ETrue;
+	TBuf<KMaxTestExecuteCommandLength>	tempStore;
+
+	iSrvCategory=EServiceCategoryNull;
+	iRemoteCapabilities.Reset();
+	
+	TInt capsCount;
+	TAvdtpSEPInfo* SEPInfo;
+	TAvdtpServiceCapability* capability;
+	if ( !CT_BTUtil::GetAvdtpSEPInfoL(*this, aSection, KFldSEPInfo, SEPInfo) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEPInfo());
+		SetBlockResult(EFail);		
+		}
+
+	if ( !CT_BTUtil::ReadAvdtpServiceCategory(*this, aSection, KFldServiceCategory(), iSrvCategory))
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldServiceCategory());
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		if(iSrvCategory == EAllServiceCategories)
+			{
+			for(capsCount=0; capsCount<ENumberOfServiceCategories; capsCount++)
+				{
+				iRemoteCapabilities.Append(NULL);
+				}
+			dataOk=EFalse;
+			for(capsCount=0; capsCount<ENumberOfServiceCategories; capsCount++)
+				{
+				tempStore.Format(KFldRemoteCaps, capsCount);
+				if ( CT_BTUtil::GetAvdtpServiceCapabilityL(*this, aSection, tempStore, capability) )
+					{
+					iRemoteCapabilities[capability->Category()] = capability;
+					dataOk=ETrue;
+					}
+				}
+			}
+		else
+			{
+			iRemoteCapabilities.Append(NULL);
+			tempStore.Format(KFldRemoteCaps, 1);
+			if ( CT_BTUtil::GetAvdtpServiceCapabilityL(*this, aSection, tempStore, capability) )
+				{
+				iRemoteCapabilities[0] = capability;
+				}
+			else
+				{
+				dataOk=EFalse;
+				}
+			}
+		if ( !dataOk )
+			{
+			tempStore.Format(KFldRemoteCaps, 1);
+			ERR_PRINTF2(KLogErrMissingParameter, &tempStore);
+			SetBlockResult(EFail);
+			}		
+		}
+	
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		dataOk = EFalse;
+		SetBlockResult(EFail);
+		}
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdGetRemoteSEPCapabilities);
+		TAvdtpServiceCategories caps;
+		caps.SetCapability(iSrvCategory);
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		iRGavdp->GetRemoteSEPCapabilities(SEPInfo->SEID(), caps);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdRegisterSEP(const TTEFSectionName& aSection)
+	{
+	TBool	dataOk=ETrue;
+	
+	TAvdtpSEPInfo* SEPInfo;
+	if ( !CT_BTUtil::GetAvdtpSEPInfoL(*this, aSection, KFldSEPInfo, SEPInfo) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEPInfo());
+		SetBlockResult(EFail);		
+		}
+	
+	TInt err = 0;
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdRegisterSEP);
+		err = iRGavdp->RegisterSEP(*SEPInfo);
+		}
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(KLogErrCmdRegisterSEP, err);
+		SetError(err);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdBeginConfiguringRemoteSEP(const TTEFSectionName& aSection)
+	{
+	TBool	dataOk=ETrue;
+	
+	TSEID* remoteSEID;
+	if ( !CT_BTUtil::GetSEIDL(*this, aSection, KFldRemoteSEID, remoteSEID) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldRemoteSEID());
+		SetBlockResult(EFail);		
+		}
+	TSEID* localSEID;
+	if ( !CT_BTUtil::GetSEIDL(*this, aSection, KFldLocalSEID, localSEID) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldLocalSEID());
+		SetBlockResult(EFail);
+		}
+	
+	TInt err = 0;
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdBeginConfiguringRemoteSEP);
+		err = iRGavdp->BeginConfiguringRemoteSEP(*remoteSEID, *localSEID);
+		}
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(KLogErrCmdBeginConfiguringRemoteSEP, err);
+		SetError(err);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdBeginConfiguringLocalSEP(const TTEFSectionName& aSection)
+	{
+	TBool	dataOk=ETrue;
+	
+	TSEID* localSEID;
+	if ( !CT_BTUtil::GetSEIDL(*this, aSection, KFldSEID, localSEID) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEID());
+		SetBlockResult(EFail);
+		}
+	
+	TInt err = 0;
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdBeginConfiguringLocalSEP);
+		err = iRGavdp->BeginConfiguringLocalSEP(*localSEID);
+		}
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(KLogErrCmdBeginConfiguringLocalSEP, err);
+		SetError(err);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdAddSEPCapability(const TTEFSectionName& aSection)
+	{
+	TBool	dataOk=ETrue;
+	
+	TAvdtpServiceCapability* capability;
+	if ( !CT_BTUtil::GetAvdtpServiceCapabilityL(*this, aSection, KFldServiceCapability, capability) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldServiceCapability());
+		SetBlockResult(EFail);		
+		}
+	
+	TInt err = 0;
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdAddSEPCapability);
+		err = iRGavdp->AddSEPCapability(*capability);
+		}
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(KLogErrCmdAddSEPCapability, err);
+		SetError(err);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdCommitSEPConfiguration(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	INFO_PRINTF1(KLogInfoCmdCommitSEPConfiguration);
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		iRGavdp->CommitSEPConfiguration();
+		}
+	}
+
+void CT_DataRGavdp::DoCmdStartStream(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	dataOk=ETrue;
+	
+	TSEID* SEID;
+	if ( !CT_BTUtil::GetSEIDL(*this, aSection, KFldSEID, SEID) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEID());
+		SetBlockResult(EFail);		
+		}
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		dataOk = EFalse;
+		SetBlockResult(EFail);
+		}
+	
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdStartStream);
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		iRGavdp->StartStream(*SEID);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdSuspendStream(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	dataOk=ETrue;
+	
+	TSEID* SEID;
+	if ( !CT_BTUtil::GetSEIDL(*this, aSection, KFldSEID, SEID) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEID());
+		SetBlockResult(EFail);		
+		}
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		dataOk = EFalse;
+		SetBlockResult(EFail);
+		}
+	
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdSuspendStream);
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		iRGavdp->SuspendStream(*SEID);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdAbortStream(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	dataOk=ETrue;
+	
+	TSEID* SEID;
+	if ( !CT_BTUtil::GetSEIDL(*this, aSection, KFldSEID, SEID) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEID());
+		SetBlockResult(EFail);
+		}
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		dataOk = EFalse;
+		SetBlockResult(EFail);
+		}
+	
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdAbortStream);
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		iRGavdp->AbortStream(*SEID);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdSendSecurityControl(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	dataOk=ETrue;
+	
+	TSEID* SEID;
+	if ( !CT_BTUtil::GetSEIDL(*this, aSection, KFldSEID, SEID) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEID());
+		SetBlockResult(EFail);		
+		}
+	
+	TPtrC 	inputStr;
+	HBufC8 *securityData = HBufC8::NewL(512);
+	if( GetStringFromConfig(aSection, KFldSecurityData, inputStr))
+		{
+		TPtr8 des = securityData->Des();
+		des.Copy(inputStr);
+		}
+	else
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSecurityData());
+		SetBlockResult(EFail);		
+		}
+	
+	if( GetStringFromConfig(aSection, KFldExpectedResponseData, inputStr))
+		{
+		if (!iExpectedResponseSecurityData)
+			iExpectedResponseSecurityData = HBufC8::NewL(512);
+		TPtr8 des = iExpectedResponseSecurityData->Des();
+		des.Copy(inputStr);
+		}
+	else
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldExpectedResponseData());
+		SetBlockResult(EFail);		
+		if (iExpectedResponseSecurityData)
+			{
+			delete iExpectedResponseSecurityData;
+			iExpectedResponseSecurityData = NULL;
+			}
+		}
+	
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		dataOk = EFalse;
+		SetBlockResult(EFail);
+		}
+	
+	if ( dataOk )
+		{
+		INFO_PRINTF1(KLogInfoCmdSendSecurityControl);
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		iRGavdp->SendSecurityControl(*SEID, *securityData);
+		}
+	
+	delete 	securityData;
+	}
+
+void CT_DataRGavdp::DoCmdCreateBearerSockets(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	dataOk=ETrue;
+	TInt    err = 0;
+	
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		dataOk = EFalse;
+		SetBlockResult(EFail);
+		}
+	
+	TSEID* SEID;
+	if ( !CT_BTUtil::GetSEIDL(*this, aSection, KFldSEID, SEID) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSEID());
+		SetBlockResult(EFail);		
+		}
+
+	TBool	ignored1;
+	TBool	ignored2;
+	if ( (!GetBoolFromConfig(aSection, KFldIgnored1, ignored1))
+		|| (!GetBoolFromConfig(aSection, KFldIgnored2, ignored2)) )
+		{
+		if ( dataOk )
+			{
+			// Execute command and log parameters
+			INFO_PRINTF1(KLogInfoCmdCreateBearerSockets1);
+			SetEventOutstanding();
+			iCmdIndex = aAsyncErrorIndex;
+			err = iRGavdp->CreateBearerSockets(*SEID);
+			}
+		}
+	else
+		{
+		if ( dataOk )
+			{
+			// Execute command and log parameters
+			INFO_PRINTF1(KLogInfoCmdCreateBearerSockets2);
+			SetEventOutstanding();
+			iCmdIndex = aAsyncErrorIndex;
+			err = iRGavdp->CreateBearerSockets(*SEID, ignored1, ignored2);
+			}
+		}
+	
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(KLogErrCmdCreateBearerSockets, err);
+		SetError(err);
+		}
+	}
+
+void CT_DataRGavdp::DoCmdMaxSecurityControlLength(const TTEFSectionName& aSection)
+	{
+	TInt actual = 0;
+	INFO_PRINTF1(KLogInfoCmdMaxSecurityControlLength1);
+	actual = iRGavdp->MaxSecurityControlLength();
+	INFO_PRINTF2(KLogInfoCmdMaxSecurityControlLength2, actual);
+	
+	TInt	expected;
+	if ( GetIntFromConfig(aSection, KFldExpectedMaxLength(), expected) )
+		{
+		if ( actual!=expected )
+			{
+			ERR_PRINTF1(KLogErrExpectedMaxLength);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+void CT_DataRGavdp::DoCmdShutdown()
+	{
+	INFO_PRINTF1(KLogInfoCmdShutdown);
+	TInt err = iRGavdp->Shutdown();
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(KLogErrCmdShutdown, err);
+		SetError(err);
+		}
+	}
+
+
+void CT_DataRGavdp::GAVDP_ConnectConfirm(const TBTDevAddr& aDeviceAddr)
+	{
+	INFO_PRINTF1(KLogInfoConnectConfirm);
+	CheckEvent(EGAVDP_ConnectConfirm);
+	if ( (iRemoteAddr)
+		&&( aDeviceAddr != *iRemoteAddr ) )
+		{
+		ERR_PRINTF1(KLogErrConnect);
+		SetAsyncError(iCmdIndex, KErrGeneral);
+		}
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_SEPDiscovered(const TAvdtpSEPInfo& aSEP)
+	{
+	INFO_PRINTF1(KLogInfoSEPDiscovered);
+	
+	INFO_PRINTF2(KLogInfoSEPValue, aSEP.SEID().Value());
+
+	switch (aSEP.MediaType())
+		{
+		case EAvdtpMediaTypeAudio:
+			INFO_PRINTF1(KLogInfoMediaTypeAudio);
+			break;
+		case EAvdtpMediaTypeVideo:
+			INFO_PRINTF1(KLogInfoMediaTypeVideo);
+			break;
+		case EAvdtpMediaTypeMultimedia:
+			INFO_PRINTF1(KLogInfoMediaTypeMultimedia);
+			break;
+		}
+	
+	if (aSEP.IsSink())
+		INFO_PRINTF1(KLogInfoAvdtpSink);
+	else 
+		INFO_PRINTF1(KLogInfoAvdtpSource);
+	
+	if (aSEP.InUse())
+		INFO_PRINTF1(KLogInfoAvdtpInUse);
+	
+	if (!isExistSEID( aSEP.SEID().Value()))
+		{
+		iDiscoverdSEPsCount += 1;
+		if (iDiscoverdSEPsCount <= iExpectedSEPsCount)
+			{
+			*(iRemoteSEPs[iDiscoverdSEPsCount-1])=aSEP;
+			}
+		
+		CheckEvent(EGAVDP_SEPDiscovered);
+		DecOutstanding();
+		}
+	
+	}
+void CT_DataRGavdp::GAVDP_SEPDiscoveryComplete()
+	{
+	INFO_PRINTF1(KLogInfoSEPDiscoveryComplete);
+	//verify
+	CheckEvent(EGAVDP_SEPDiscoveryComplete);
+	if (iDiscoverdSEPsCount != iExpectedSEPsCount)
+		{
+		ERR_PRINTF3(KLogErrDiscoverRemoteSEPsCount, iExpectedSEPsCount, iDiscoverdSEPsCount);
+		SetAsyncError(iCmdIndex, KErrGeneral);
+		}
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_SEPCapability(TAvdtpServiceCapability* aCapability)
+	{
+	INFO_PRINTF1(KLogInfoSEPCapability);
+
+	//verify
+	TAvdtpServiceCategory category = aCapability->Category();
+	switch(category)
+		{
+		case EServiceCategoryMediaTransport:
+			INFO_PRINTF1(KLogInfoServiceCategoryMediaTransport);
+			if (!iRemoteCapabilities[category])
+				{
+				ERR_PRINTF1(KLogErrCapability);
+				SetAsyncError(iCmdIndex, KErrGeneral);
+				}
+			break;
+		case EServiceCategoryReporting:
+			INFO_PRINTF1(KLogInfoServiceCategoryReporting);
+			if (!iRemoteCapabilities[category])
+				{
+				ERR_PRINTF1(KLogErrCapability);
+				SetAsyncError(iCmdIndex, KErrGeneral);
+				}			
+			break;
+		case EServiceCategoryRecovery:
+			{
+			INFO_PRINTF1(KLogInfoServiceCategoryRecovery);
+			TAvdtpRecoveryCapabilities* received = (TAvdtpRecoveryCapabilities*)aCapability;
+			TAvdtpRecoveryCapabilities* expected = (TAvdtpRecoveryCapabilities*)iRemoteCapabilities[category];
+			if ( (received->MaxWindowSize() != expected->MaxWindowSize())
+					||(received->MinWindowSize() != expected->MinWindowSize())
+					||(received->RecoveryType() != expected->RecoveryType()))
+				{
+				ERR_PRINTF1(KLogErrCapability);
+				SetAsyncError(iCmdIndex, KErrGeneral);
+				}
+			}
+			break;
+		case EServiceCategoryContentProtection:
+			{
+			INFO_PRINTF1(KLogInfoServiceCategoryContentProtection);
+			TAvdtpContentProtectionCapabilities* received = (TAvdtpContentProtectionCapabilities*)aCapability;
+			TAvdtpContentProtectionCapabilities* expected = (TAvdtpContentProtectionCapabilities*)iRemoteCapabilities[category];
+			if ( ( received->ContentProtectionType() != expected->ContentProtectionType() )
+				||( received->ContentProtectionData().Compare(expected->ContentProtectionData())!=0 ) )
+				{
+				ERR_PRINTF1(KLogErrCapability);
+				SetAsyncError(iCmdIndex, KErrGeneral);
+				}
+			}
+			break;
+		default:
+			break;
+		}
+	delete aCapability;
+	
+	CheckEvent(EGAVDP_SEPCapability);
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_SEPCapabilityComplete()
+	{
+	INFO_PRINTF1(KLogInfoSEPCapabilityComplete);
+	//verify
+	CheckEvent(EGAVDP_SEPCapabilityComplete);
+	DecOutstanding();
+	
+	}
+void CT_DataRGavdp::GAVDP_AbortStreamConfirm()
+	{
+	INFO_PRINTF1(KLogInfoAbortStreamConfirm);
+	//verify
+	CheckEvent(EGAVDP_AbortStreamConfirm);
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_StartStreamsConfirm()
+	{
+	INFO_PRINTF1(KLogInfoStartStreamsConfirm);
+	//verify
+	CheckEvent(EGAVDP_StartStreamsConfirm);
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_SuspendStreamsConfirm()
+	{
+	INFO_PRINTF1(SuspendStreamsConfirm);
+	//verify
+	CheckEvent(EGAVDP_SuspendStreamsConfirm);
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_SecurityControlConfirm(const TDesC8& aResponseData)
+	{
+	INFO_PRINTF1(KLogInfoSecurityControlConfirm);
+
+	//verify
+	if (!iExpectedResponseSecurityData)
+		{
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldExpectedResponseData());
+		SetBlockResult(EFail);		
+		}
+	else if (iExpectedResponseSecurityData->Compare(aResponseData)!=0)
+		{
+		ERR_PRINTF1(KLogErrExpectedResponseData);
+		SetAsyncError(iCmdIndex, KErrGeneral);
+		}
+	
+	CheckEvent(EGAVDP_SecurityControlConfirm);
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_ConfigurationConfirm()
+	{
+	INFO_PRINTF1(KLogInfoConfigurationConfirm);
+	//verify
+	CheckEvent(EGAVDP_ConfigurationConfirm);
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_ConfigurationStartIndication(TSEID aLocalSEID, TSEID aRemoteSEID)
+	{
+	INFO_PRINTF1(KLogInfoConfigurationStartIndication);
+	iLocalSEID = aLocalSEID;
+	iRemoteSEID = aRemoteSEID;
+	//verify
+	CheckEvent(EGAVDP_ConfigurationStartIndication);
+	DecOutstanding();
+	}
+TInt CT_DataRGavdp::GAVDP_ConfigurationIndication(TAvdtpServiceCapability* aCapability)
+	{
+	INFO_PRINTF1(KLogInfoConfigurationIndication1);
+	INFO_PRINTF2(KLogInfoConfigurationIndication2, aCapability->Category());
+	delete aCapability;
+	//verify
+	CheckEvent(EGAVDP_ConfigurationIndication);
+	DecOutstanding();
+	return iConfigReturnCode;
+	}
+TInt CT_DataRGavdp::GAVDP_ConfigurationEndIndication()
+	{
+	INFO_PRINTF1(KLogInfoConfigurationEndIndication);
+	//verify
+	CheckEvent(EGAVDP_ConfigurationEndIndication);
+	DecOutstanding();
+	return iConfigEndReturnCode;
+	}
+TInt CT_DataRGavdp::GAVDP_StartIndication(TSEID aSEID)
+	{
+	INFO_PRINTF1(KLogInfoStartIndication);
+	//verify
+	CheckEvent(EGAVDP_StartIndication);
+	CheckLocalSEID(aSEID);
+	DecOutstanding();
+	return KErrNone;
+	}
+TInt CT_DataRGavdp::GAVDP_SuspendIndication(TSEID aSEID)
+	{
+	INFO_PRINTF1(KLogInfoSuspendIndication);
+	//verify
+	CheckEvent(EGAVDP_SuspendIndication);
+	CheckLocalSEID(aSEID);
+	DecOutstanding();
+	return KErrNone;
+	}
+TInt CT_DataRGavdp::GAVDP_SecurityControlIndication(TSEID /*aSEID*/, TDes8& aSecurityDataInOut)
+	{
+	INFO_PRINTF1(KLogInfoSecurityControlIndication);
+
+	//verify
+	CheckEvent(EGAVDP_SecurityControlIndication);
+	
+	HBufC16* securityDataInOut = HBufC16::NewL(aSecurityDataInOut.Length());
+	securityDataInOut->Des().Copy(aSecurityDataInOut);
+	if (KLogDataFixed().Compare(*securityDataInOut)==0)
+		{
+		INFO_PRINTF1(KLogInfoSecurityDataUnchanged);
+		}
+	else if(KLogDataChange().Compare(*securityDataInOut)==0)
+		{
+		aSecurityDataInOut.Copy(KLogDataChanged());
+		INFO_PRINTF2(KLogInfoSecurityDataChanged, &KLogDataChanged());
+		}
+	else
+		{
+		ERR_PRINTF1(KLogErrReceivedSecurityData);
+		SetAsyncError(iCmdIndex, KErrGeneral);
+		}
+	delete securityDataInOut;
+	
+	DecOutstanding();
+	return KErrNone;
+	}
+void CT_DataRGavdp::GAVDP_AbortIndication(TSEID aSEID)
+	{
+	INFO_PRINTF1(KLogInfoAbortIndication);
+	//verify
+	CheckEvent(EGAVDP_AbortIndication);
+	CheckLocalSEID(aSEID);
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_ReleaseIndication(TSEID aSEID)
+	{
+	INFO_PRINTF1(KLogInfoReleaseIndication);
+	//verify
+	CheckEvent(EGAVDP_ReleaseIndication);
+	CheckLocalSEID(aSEID);
+	DecOutstanding();
+	}
+void CT_DataRGavdp::GAVDP_BearerReady(RSocket aSocket, const TAvdtpSockAddr& aAddress)
+	{
+	INFO_PRINTF1(KLogInfoBearerReady);
+		
+	switch(aAddress.Session())
+		{
+		case EMedia:
+			INFO_PRINTF1(KLogInfoBearerTypeEMedia);
+			iSockets[0] = aSocket;
+			break;
+		case EReporting:
+			INFO_PRINTF1(KLogInfoBearerTypeEReporting);
+			iSockets[1] = aSocket;
+			break;
+		case ERecovery:
+			INFO_PRINTF1(KLogInfoBearerTypeERecovery);
+			iSockets[2] = aSocket;
+			break;
+		default:
+			break;
+		}
+	
+	//verify
+	CheckEvent(EGAVDP_BearerReady);
+	DecOutstanding();
+	
+	}
+void CT_DataRGavdp::GAVDP_Error(TInt aError, const TDesC8& aErrorData)
+	{
+	INFO_PRINTF1(KLogInfoError1);
+	INFO_PRINTF3(KLogInfoError2, aError, &aErrorData);
+	SetAsyncError(iCmdIndex, aError);
+	//verify
+	CheckEvent(EGAVDP_Error);
+	DecOutstanding();
+	}
+
+void CT_DataRGavdp::CloseBearerSockets()
+	{
+	iSockets[0].Close();
+	iSockets[1].Close();
+	iSockets[2].Close();
+	}
+
+void CT_DataRGavdp::Read(const TDesC& aSection, const TInt aAsyncErrorIndex)
+	{
+	TPtrC 	inputStr;
+	if( GetStringFromConfig(aSection, KFldExpectedData, inputStr))
+		{
+		if (!iReadExpectBuffer)
+			iReadExpectBuffer = HBufC8::NewL(512);
+		TPtr8 des = iReadExpectBuffer->Des();
+		des.Copy(inputStr);
+		}
+	else
+		{
+		if (iReadExpectBuffer)
+			{
+			delete iReadExpectBuffer;
+			iReadExpectBuffer = NULL;
+			}
+		}
+	
+	INFO_PRINTF1(KLogInfoReading);
+	iReadBuffer = HBufC8::NewL(512);
+	iReadBuffer->Des().SetMax();
+	iReadBufferDes.Set(iReadBuffer->Des());
+	
+	iSockets[0].Read(iReadBufferDes,iActive->iStatus);
+	iActive->Activate(aAsyncErrorIndex);
+	IncOutstanding();
+	}
+void CT_DataRGavdp::RunL(CActive* aActive, TInt aIndex)
+	{
+    TInt err = aActive->iStatus.Int();
+    SetAsyncError(aIndex, err);
+    DecOutstanding();
+    
+    if (iReadBuffer)
+    	{
+    	if (aActive->iStatus.Int()==KErrNone)
+    		{
+    		if (iReadExpectBuffer)
+    			{
+    			if (iReadExpectBuffer->Compare(*iReadBuffer)!=0)
+    				{
+    				ERR_PRINTF1(KLogErrReadData);
+    				SetError(EFail);
+    				}
+    			}
+    		HBufC16* readbufdes = HBufC16::NewL(iReadBuffer->Length());
+    		readbufdes->Des().Copy(*iReadBuffer);
+    		INFO_PRINTF2(KLogInfoReceived,readbufdes);
+    		delete readbufdes;
+    		}
+    	else
+    		{
+    		ERR_PRINTF2(KLogErrSocket, aActive->iStatus.Int());
+    		}
+   	
+    	delete iReadBuffer;
+    	iReadBuffer = NULL;
+    	}
+
+    if (iSendBuffer)
+    	{
+    	if (aActive->iStatus.Int()!=KErrNone)
+    		{
+    		ERR_PRINTF2(KLogErrSocket, aActive->iStatus.Int());
+    		}
+    	else
+    		INFO_PRINTF1(KLogInfoSendSucess);
+    	delete iSendBuffer;
+    	iSendBuffer = NULL;
+    	}
+
+	}
+void CT_DataRGavdp::Send(const TDesC& aSection, const TInt aAsyncErrorIndex)
+	{
+	TPtrC 	inputStr;
+	if( GetStringFromConfig(aSection, KFldSendData, inputStr))
+		{
+		INFO_PRINTF1(KLogInfoSending);
+		iSendBuffer = HBufC8::NewL(512);
+		TPtr8 des = iSendBuffer->Des();
+		des.Copy(inputStr);
+		
+		iSockets[0].Write(*iSendBuffer, iActive->iStatus);
+		iActive->Activate(aAsyncErrorIndex);
+		IncOutstanding();
+		}
+	else
+		{
+		ERR_PRINTF2(KLogErrMissingParameter, &KFldSendData());
+		SetBlockResult(EFail);		
+		}
+	}
+
+void CT_DataRGavdp::SetEventOutstanding()
+	{
+	TInt count = iExpectedEventCount;
+	for (;count>0;count--)
+		{
+		IncOutstanding();
+		}
+	}
+
+void CT_DataRGavdp::IncreaseOutstanding(const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	if (!ReadExpectedEventsFromConfig(aSection))
+		{
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		SetEventOutstanding();
+		iCmdIndex = aAsyncErrorIndex;
+		}
+	}
+
+TBool CT_DataRGavdp::ReadExpectedEventsFromConfig(const TTEFSectionName& aSection)
+	{
+	TBool ret = ETrue;
+	TPtrC inputStr;
+	
+	if( GetStringFromConfig(aSection, KFldExpectedEvents, inputStr))
+		{
+		iExpectedEvent.Reset();
+		iExpectedEventCount = 0;
+		iEventCount = 0;
+		if ( ConvertEvents(inputStr, iExpectedEvent) )
+			{
+			if (iExpectedEvent[0] != EGAVDP_NoneEvent)
+				iExpectedEventCount = iExpectedEvent.Count();
+			}
+		else
+			{
+			iExpectedEvent.Reset();
+			ERR_PRINTF2(KLogErrExpectedEvents, &inputStr);
+			ret = EFalse;
+			}
+		}
+
+	return ret;
+	}
+
+TBool CT_DataRGavdp::ConvertEvents(TDesC &aEventStr, RArray<TUint>& aEvent)
+	{
+	
+	TBool ret = ETrue;
+
+	if (aEventStr == KEGAVDP_NoneEvent)
+		{
+		aEvent.Append(EGAVDP_NoneEvent);
+		}
+	else if (aEventStr == KEGAVDP_ConnectConfirm)
+		{
+		aEvent.Append(EGAVDP_ConnectConfirm);
+		}
+	else if (aEventStr == KEGAVDP_SEPDiscovered)
+		{
+		aEvent.Append(EGAVDP_SEPDiscovered);
+		}
+	else if (aEventStr == KEGAVDP_SEPDiscoveryComplete)
+		{
+		aEvent.Append(EGAVDP_SEPDiscoveryComplete);
+		}
+	else if (aEventStr == KEGAVDP_SEPCapability)
+		{
+		aEvent.Append(EGAVDP_SEPCapability);
+		}
+	else if (aEventStr == KEGAVDP_SEPCapabilityComplete)
+		{
+		aEvent.Append(EGAVDP_SEPCapabilityComplete);
+		}
+	else if (aEventStr == KEGAVDP_AbortStreamConfirm)
+		{
+		aEvent.Append(EGAVDP_AbortStreamConfirm);
+		}
+	else if (aEventStr == KEGAVDP_StartStreamsConfirm)
+		{
+		aEvent.Append(EGAVDP_StartStreamsConfirm);
+		}
+	else if (aEventStr == KEGAVDP_SuspendStreamsConfirm)
+		{
+		aEvent.Append(EGAVDP_SuspendStreamsConfirm);
+		}
+	else if (aEventStr == KEGAVDP_SecurityControlConfirm)
+		{
+		aEvent.Append(EGAVDP_SecurityControlConfirm);
+		}
+	else if (aEventStr == KEGAVDP_ConfigurationConfirm)
+		{
+		aEvent.Append(EGAVDP_ConfigurationConfirm);
+		}
+	else if (aEventStr == KEGAVDP_ConfigurationStartIndication)
+		{
+		aEvent.Append(EGAVDP_ConfigurationStartIndication);
+		}
+	else if (aEventStr == KEGAVDP_ConfigurationIndication)
+		{
+		aEvent.Append(EGAVDP_ConfigurationIndication);
+		}
+	else if (aEventStr == KEGAVDP_ConfigurationEndIndication)
+		{
+		aEvent.Append(EGAVDP_ConfigurationEndIndication);
+		}
+	else if (aEventStr == KEGAVDP_StartIndication)
+		{
+		aEvent.Append(EGAVDP_StartIndication);
+		}
+	else if (aEventStr == KEGAVDP_SuspendIndication)
+		{
+		aEvent.Append(EGAVDP_SuspendIndication);
+		}
+	else if (aEventStr == KEGAVDP_SecurityControlIndication)
+		{
+		aEvent.Append(EGAVDP_SecurityControlIndication);
+		}
+	else if (aEventStr == KEGAVDP_AbortIndication)
+		{
+		aEvent.Append(EGAVDP_AbortIndication);
+		}
+	else if (aEventStr == KEGAVDP_ReleaseIndication)
+		{
+		aEvent.Append(EGAVDP_ReleaseIndication);
+		}
+	else if (aEventStr == KEGAVDP_BearerReady)
+		{
+		aEvent.Append(EGAVDP_BearerReady);
+		}
+	else if (aEventStr == KEGAVDP_Error)
+		{
+		aEvent.Append(EGAVDP_Error);
+		}
+	else
+		{
+		TInt location = aEventStr.Match(_L("*|*"));
+		if( location != KErrNotFound )
+			{
+			//Converting Left part of the data
+			TPtrC	tempStr = aEventStr.Left(location);
+			ret = ConvertEvents(tempStr, aEvent);
+			if(ret)
+				{
+				//Converting right data can be with another "|"
+				tempStr.Set(aEventStr.Mid(location + 1));
+				ret = ConvertEvents(tempStr, aEvent);
+				}
+			}
+		else
+			{
+			ret = EFalse;
+			}
+		}
+
+	return ret;
+	}
+
+void CT_DataRGavdp::CheckEvent(TUint aEvent)
+	{
+	iEventCount++;
+	if ((iExpectedEventCount == 0)
+			||(iEventCount > iExpectedEventCount)
+			||(iExpectedEvent[iEventCount-1] != aEvent) )
+		{
+		ERR_PRINTF1(KLogErrCallback);
+		if (aEvent == EGAVDP_Error)
+			SetBlockResult(EFail);
+		else
+			SetAsyncError(iCmdIndex, KErrGeneral);
+		}
+	};
+void CT_DataRGavdp::CheckLocalSEID(TSEID aSEID)
+	{
+	if (aSEID != iLocalSEID )
+		{
+		ERR_PRINTF3(KLogErrLocalSEID, iLocalSEID.SEID(), aSEID.SEID());
+		SetAsyncError(iCmdIndex, KErrGeneral);
+		}
+	}
+
+TBool CT_DataRGavdp::ConvertSEIDs(TDesC &aSEIDsStr, RArray<TUint>& aSEIDs)
+	{
+	
+	TBool ret = ETrue;
+
+	TLex lex(aSEIDsStr);
+	TInt tempSEID;
+	if (lex.Val(tempSEID) == KErrNone)
+		{
+		aSEIDs.Append(tempSEID);
+		}
+	else
+		{
+		TInt location = aSEIDsStr.Match(_L("*,*"));
+		if( location != KErrNotFound )
+			{
+			//Converting Left part of the data
+			TPtrC	tempStr = aSEIDsStr.Left(location);
+			ret = ConvertSEIDs(tempStr, aSEIDs);
+			if(ret)
+				{
+				//Converting right data can be with another ","
+				tempStr.Set(aSEIDsStr.Mid(location + 1));
+				ret = ConvertSEIDs(tempStr, aSEIDs);
+				}
+			}
+		else
+			{
+			ret = EFalse;
+			}
+		}
+
+	return ret;
+	}
+
+TBool CT_DataRGavdp::isExistSEID(TUint aSEID)
+	{
+	TInt i;
+	for (i=0; i<iExistRemoteSEIDs.Count(); i++)
+		{
+		if (iExistRemoteSEIDs[i] == aSEID)
+			return ETrue;
+		}
+	return EFalse;
+	}