bluetoothapitest/bluetoothsvs/T_BTSdpAPI/src/T_DataRSdpDatabase.cpp
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothapitest/bluetoothsvs/T_BTSdpAPI/src/T_DataRSdpDatabase.cpp	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,372 @@
+/*
+* 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_DataRSdpDatabase.h"
+
+/*@{*/
+
+//Parameters
+_LIT(KObjectName,							"objectName");
+_LIT(KInputUUIDHex,							"inputUUIDHex");
+_LIT(KInputAttrIDHex,						"inputAttrIDHex");
+_LIT(KInputDesCValueEight,					"inputDesCValueEight");
+_LIT(KInputDesCValueSixteen,				"inputDesCValueSixteen");
+_LIT(KInputInt,								"inputInt");
+_LIT(KInputArrayPosition,					"inputArrayPosition");
+
+//Commands
+_LIT(KCmdConstructor,						"Constructor");
+_LIT(KCmdOpen,								"Open");
+_LIT(KCmdClose,								"Close");
+_LIT(KCmdCreateServiceRecordL,				"CreateServiceRecordL");
+_LIT(KCmdDeleteRecordL,						"DeleteRecordL");
+_LIT(KCmdDeleteRecord,						"DeleteRecord");
+_LIT(KCmdDeleteAttributeL,					"DeleteAttributeL");
+_LIT(KCmdDeleteAttribute,					"DeleteAttribute");
+_LIT(KCmdUpdateAttributeL,					"UpdateAttributeL");
+/*@}*/
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CT_DataRSdpdatabase* CT_DataRSdpdatabase::NewL()
+	{
+	CT_DataRSdpdatabase*	ret=new	(ELeave) CT_DataRSdpdatabase();
+	CleanupStack::PushL(ret);
+	ret->ConstructL();
+	CleanupStack::Pop(ret);
+	return ret;
+	}
+
+CT_DataRSdpdatabase::CT_DataRSdpdatabase()
+:	iHandleArray(NULL)
+	{
+	}
+
+void CT_DataRSdpdatabase::ConstructL()
+	{
+	}
+
+CT_DataRSdpdatabase::~CT_DataRSdpdatabase()
+	{
+	DestroyData();
+	}
+
+void CT_DataRSdpdatabase::SetObjectL(TAny* aAny)
+	{
+	DestroyData();
+	iHandleArray = static_cast<CRSdpHandleArray*> (aAny);
+	}
+
+void CT_DataRSdpdatabase::DisownObjectL()
+	{
+	iHandleArray = NULL;
+	}
+
+void CT_DataRSdpdatabase::DestroyData()
+	{
+	delete iHandleArray;
+	iHandleArray=NULL;
+	}
+
+inline TCleanupOperation CT_DataRSdpdatabase::CleanupOperation()
+	{
+	return CleanupOperation;
+	}
+
+void CT_DataRSdpdatabase::CleanupOperation(TAny* aAny)
+	{
+	CRSdpHandleArray* handleArray=static_cast<CRSdpHandleArray*>(aAny);
+	delete handleArray;
+	}
+
+/**
+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_DataRSdpdatabase::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
+	{
+	TBool	ret=ETrue;
+
+	if ( aCommand==KCmdConstructor )
+		{
+		DoCmdConstructor();
+		}
+	else if	( aCommand==KCmdOpen )
+		{
+		DoCmdOpen(aSection);
+		}
+	else if( aCommand==KCmdClose )
+		{
+		DoCmdClose();
+		}
+	else if( aCommand==KCmdCreateServiceRecordL	)
+		{
+		DoCmdCreateServiceRecordL(aSection);
+		}
+	else if( aCommand==KCmdDeleteRecordL )
+		{
+		DoCmdDeleteRecordL(aSection);
+		}
+	else if( aCommand==KCmdDeleteRecord )
+		{
+		DoCmdDeleteRecord(aSection);
+		}
+	else if( aCommand==KCmdDeleteAttributeL )
+		{
+		DoCmdDeleteAttributeL(aSection);
+		}
+	else if( aCommand==KCmdDeleteAttribute )
+		{
+		DoCmdDeleteAttribute(aSection);
+		}
+	else if( aCommand==KCmdUpdateAttributeL )
+		{
+		DoCmdUpdateAttributeL(aSection);
+		}
+	else
+		{
+		ret=EFalse;
+		}
+
+	return ret;
+	}
+
+
+void CT_DataRSdpdatabase::DoCmdConstructor()
+	{
+	DestroyData();
+
+	TRAPD(err,	iHandleArray =	new	(ELeave) CRSdpHandleArray());
+	if(err	!= KErrNone)
+		{
+		ERR_PRINTF2(_L("**** RSdpDatabase	Constructor	failed	with error %d"), err);
+		SetError(err);
+		}
+	}
+
+void CT_DataRSdpdatabase::DoCmdOpen(const TDesC& aSection)
+	{
+	TPtrC		objectName;
+
+	if( GetStringFromConfig(aSection, KObjectName(), objectName) )
+		{
+		RSdp*	rsdp = static_cast<RSdp*>(GetDataObjectL(objectName));
+
+		TInt error	= iHandleArray->iDatabase.Open(*rsdp);
+		if(error !=	KErrNone)
+			{
+			ERR_PRINTF2(_L("**** RSdpDatabase	Open failed	with error %d"), error);
+			SetError(error);
+			}
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Missing parameter %S"), &KObjectName());
+		SetBlockResult(EFail);
+		}
+	}
+
+void CT_DataRSdpdatabase::DoCmdClose()
+	{
+	iHandleArray->iDatabase.Close();
+	}
+
+void CT_DataRSdpdatabase::DoCmdCreateServiceRecordL(const TDesC& aSection)
+	{
+	TInt	inputHex=0;
+
+	if(	GetHexFromConfig(aSection, KInputUUIDHex(), inputHex))
+		{
+		INFO_PRINTF2(_L("Input Hex = %d"),inputHex);
+
+		TRAPD(errOne,	iHandleArray->iDatabase.CreateServiceRecordL(TUUID(TUint32(inputHex)), iRecHandle));
+		if(errOne	!= KErrNone)
+			{
+			ERR_PRINTF2(_L("**** CreateServiceRecordL	failed with	error %d"),	errOne);
+			SetError(errOne);
+			}
+
+		INFO_PRINTF1(_L("RSdpDatabase::CreateServiceRecordL"));
+		}
+	else
+		{
+		TPtrC				objectName;
+
+		if( GetStringFromConfig(aSection, KObjectName(), objectName) )
+			{
+			CSdpAttrValueDES*	tempUUIDList = static_cast<CSdpAttrValueDES*>(GetDataObjectL(objectName));
+
+			TRAPD(errTwo,	iHandleArray->iDatabase.CreateServiceRecordL(*tempUUIDList, iRecHandle));
+			if(errTwo	!= KErrNone)
+				{
+				ERR_PRINTF2(_L("**** CreateServiceRecordL	failed with	error %d"),	errTwo);
+				SetError(errTwo);
+				}
+
+			INFO_PRINTF1(_L("RSdpDatabase::CreateServiceRecordL (list)"));
+			}
+		else
+			{
+			ERR_PRINTF2(_L("Missing parameter %S"), &KObjectName());
+			SetBlockResult(EFail);
+			}
+		}
+
+	INFO_PRINTF2(_L("iRecHandle = %d"), iRecHandle);
+	iHandleArray->iRecHandleArray.Append(iRecHandle);
+	}
+
+void CT_DataRSdpdatabase::DoCmdDeleteRecord(const TDesC& aSection)
+	{
+	TInt	temp=0;
+	if(	GetIntFromConfig(aSection, KInputArrayPosition(), temp))
+		{
+		iHandleArray->iDatabase.DeleteRecord(iHandleArray->iRecHandleArray[temp]);
+		iHandleArray->iRecHandleArray.Remove(temp);
+		}
+	else
+		{
+		TInt lastPosition=iHandleArray->iRecHandleArray.Count()-1;
+		INFO_PRINTF2(_L("DeleteRecord iRecHandle = %d"), iHandleArray->iRecHandleArray[lastPosition]);
+		iHandleArray->iDatabase.DeleteRecord(iHandleArray->iRecHandleArray[lastPosition]);
+		iHandleArray->iRecHandleArray.Remove(lastPosition);
+		}
+	}
+
+void CT_DataRSdpdatabase::DoCmdDeleteRecordL(const TDesC& aSection)
+	{
+
+	TInt	temp=0;
+	if(	GetIntFromConfig(aSection, KInputArrayPosition(), temp))
+		{
+		iHandleArray->iDatabase.DeleteRecordL(iHandleArray->iRecHandleArray[temp]);
+		iHandleArray->iRecHandleArray.Remove(temp);
+		}
+	else
+		{
+		TInt lastPosition=iHandleArray->iRecHandleArray.Count()-1;
+		INFO_PRINTF2(_L("DeleteRecord iRecHandle = %d"), iHandleArray->iRecHandleArray[lastPosition]);
+		iHandleArray->iDatabase.DeleteRecordL(iHandleArray->iRecHandleArray[lastPosition]);
+		iHandleArray->iRecHandleArray.Remove(lastPosition);
+		}
+	}
+
+void CT_DataRSdpdatabase::DoCmdDeleteAttribute(const TDesC& aSection)
+	{
+	TInt		inputHex=0;
+	if(	GetHexFromConfig(aSection, KInputAttrIDHex(), inputHex))
+		{
+		iHandleArray->iDatabase.DeleteAttribute(iRecHandle, inputHex);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Missing parameter %S"), &KInputAttrIDHex());
+		SetBlockResult(EFail);
+		}
+	}
+
+void CT_DataRSdpdatabase::DoCmdDeleteAttributeL(const TDesC& aSection)
+	{
+	TInt		inputHex=0;
+
+	if(	GetHexFromConfig(aSection, KInputAttrIDHex(), inputHex))
+		{
+		iHandleArray->iDatabase.DeleteAttributeL(iRecHandle, inputHex);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Missing parameter %S"), &KInputAttrIDHex());
+		SetBlockResult(EFail);
+		}
+	}
+
+void CT_DataRSdpdatabase::DoCmdUpdateAttributeL(const TDesC& aSection)
+	{
+	TInt				inputHex=0;
+	TInt				inputInt=0;
+	TPtrC				inputStr;
+	TPtrC				objectName;
+	CSdpAttrValue*		attrVal= NULL;
+
+	if(	GetHexFromConfig(aSection, KInputAttrIDHex(), inputHex))
+		{
+		INFO_PRINTF2(_L("Input Hex = %d"),inputHex);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Missing parameter %S"), &KInputAttrIDHex());
+		SetBlockResult(EFail);
+		}
+
+	TInt	err=KErrNone;
+	if(	GetIntFromConfig(aSection, KInputInt(), inputInt))
+		{
+		INFO_PRINTF2(_L("Input Int = %d"),inputInt);
+
+		TRAP(err, iHandleArray->iDatabase.UpdateAttributeL(iRecHandle, inputHex, inputInt));
+		INFO_PRINTF1(_L("RSdpDatabase::UpdateAttributeL (Int)"));
+		}
+	else
+		{
+		if( GetStringFromConfig(aSection, KObjectName(), objectName) )
+			{
+			attrVal = static_cast<CSdpAttrValue*>(GetDataObjectL(objectName));
+
+			TRAP(err, iHandleArray->iDatabase.UpdateAttributeL(iRecHandle, inputHex, *attrVal));
+			INFO_PRINTF1(_L("RSdpDatabase::UpdateAttributeL (attribute)"));
+			}
+		else
+			{
+			if(	GetStringFromConfig(aSection, KInputDesCValueEight(),	inputStr))
+				{
+				HBufC8*		tempStr = HBufC8::NewLC(inputStr.Length());
+				tempStr->Des().Copy(inputStr);
+
+				TRAP(err, iHandleArray->iDatabase.UpdateAttributeL(iRecHandle, inputHex, *tempStr));
+				INFO_PRINTF1(_L("RSdpDatabase::UpdateAttributeL (descriptor TDesC8)"));
+				CleanupStack::PopAndDestroy(tempStr);
+				}
+			else
+				{
+				if(	GetStringFromConfig(aSection, KInputDesCValueSixteen(),	inputStr))
+					{
+					TRAP(err, iHandleArray->iDatabase.UpdateAttributeL(iRecHandle, inputHex, inputStr));
+					INFO_PRINTF1(_L("RSdpDatabase::UpdateAttributeL (descriptor TDesC16)"));
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Missing parameter %S"), &KInputDesCValueSixteen());
+					SetBlockResult(EFail);
+					}
+				}
+			}
+		}
+	if(err	!= KErrNone)
+		{
+		ERR_PRINTF2(_L("**** UpdateAttributeL	failed with	error %d"),	err);
+		SetError(err);
+		}
+
+	INFO_PRINTF2(_L("iRecHandle = %d"), iRecHandle);
+	}