diff -r 000000000000 -r 29b1cd4cb562 bluetoothapitest/bluetoothsvs/T_BTSdpAPI/src/T_DataSdpUtil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothapitest/bluetoothsvs/T_BTSdpAPI/src/T_DataSdpUtil.cpp Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,389 @@ +/* +* 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_DataSdpUtil.h" +#include + +/*@{*/ + +//Commands +_LIT(KCmdPutUint, "PutUint"); +_LIT(KCmdGetUint, "GetUint"); +_LIT(KCmdPutUint64, "PutUint64"); +_LIT(KCmdGetUint64, "GetUint64"); +_LIT(KCmdPutUint128, "PutUint128"); +_LIT(KCmdGetUint128, "GetUint128"); + +//Parameters +_LIT(KInt, "integer"); +_LIT(KNumberOfBytes, "numberOfBytes"); +_LIT(KObject, "object"); +_LIT(KNumber, "number"); +_LIT(KLower, "low"); +_LIT(KHigher, "high"); + +/*@}*/ + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// + +CT_DataSdpUtil* CT_DataSdpUtil::NewL() + { + CT_DataSdpUtil* ret=new (ELeave) CT_DataSdpUtil(); + CleanupStack::PushL(ret); + ret->ConstructL(); + CleanupStack::Pop(ret); + return ret; + } + +CT_DataSdpUtil::CT_DataSdpUtil() + { + } + +void CT_DataSdpUtil::ConstructL() + { + } + +CT_DataSdpUtil::~CT_DataSdpUtil() + { + DestroyData(); + } + +void CT_DataSdpUtil::SetObjectL(TAny* /*aAny*/) + { + } + +void CT_DataSdpUtil::DestroyData() + { + } + +/** + * Process a command read from the ini file + * + * @param aCommand The command to process + * @param aSection The section in the ini containing data for the command + * @param aAsyncErrorIndex Command index for async calls to return errors to + * + * @return ETrue if the command is processed + * + * @leave System wide error + */ +TBool CT_DataSdpUtil::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/) + { + TBool ret=ETrue; + + if ( aCommand==KCmdPutUint ) + { + DoCmdPutUint(aSection); + } + else if ( aCommand==KCmdGetUint ) + { + DoCmdGetUint(aSection); + } + else if ( aCommand==KCmdPutUint64 ) + { + DoCmdPutUint64(aSection); + } + else if ( aCommand==KCmdGetUint64 ) + { + DoCmdGetUint64(aSection); + } + else if ( aCommand==KCmdPutUint128 ) + { + DoCmdPutUint128(aSection); + } + else if ( aCommand==KCmdGetUint128 ) + { + DoCmdGetUint128(aSection); + } + else + { + ret=EFalse; + } + + return ret; + } + + +/** +Test PutUint() +*/ +void CT_DataSdpUtil::DoCmdPutUint(const TDesC& aSection) + { + INFO_PRINTF1(_L("SdpUtil PutUint call")); + TPckgBuf valuePackaged; + TUint8* dataPtr=&valuePackaged[0]; + + TInt theValue = 0; + if( GetIntFromConfig(aSection, KInt(), theValue) ) + { + TInt64 theInt = theValue; + + if( GetIntFromConfig(aSection, KNumberOfBytes(), theValue) ) + { + TInt numberOfBytes = theValue; + SdpUtil::PutUint(dataPtr, theInt, numberOfBytes); + + TInt64 temp = 0; + TInt64 expectedValue = 0; + for(TInt i=numberOfBytes-1; i >=0; --i) + { + temp = dataPtr[i]<<(8*(numberOfBytes-i-1)); + expectedValue = expectedValue + temp; + } + INFO_PRINTF2(_L("SdpUtil PutUint Call: actual = %d"), theInt); + INFO_PRINTF2(_L("SdpUtil PutUint Call: expected = %d"), expectedValue); + + if( expectedValue != theInt ) + { + ERR_PRINTF1(_L("PutUint is not as expected!")); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KNumberOfBytes()); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KNumberOfBytes()); + SetBlockResult(EFail); + } + } + +/** +Test GetUint() +*/ +void CT_DataSdpUtil::DoCmdGetUint(const TDesC& aSection) + { + INFO_PRINTF1(_L("SdpUtil GetUint Call")); + + TPtrC theString; + if ( GetStringFromConfig(aSection, KObject(), theString) ) + { + HBufC8* buffer8=HBufC8::NewLC(theString.Length()); + buffer8->Des().Copy(theString); + TPtr8 theString8=buffer8->Des(); + + TUint theTUint = SdpUtil::GetUint(theString8); + INFO_PRINTF2(_L("SdpUtil GetUint Call: actual = %d"), theTUint); + + TUint expectedValue = 0; + switch(theString.Length()) + { + case 0: + expectedValue = 0; + break; + case 1: + expectedValue = theString8[0]; + break; + case 2: + expectedValue = BigEndian::Get16(theString8.Ptr()); + break; + case 4: + expectedValue = BigEndian::Get32(theString8.Ptr()); + break; + default: + expectedValue = 0; + break; + } + INFO_PRINTF2(_L("SdpUtil GetUint Call: expected = %d"), expectedValue); + + if( theTUint!=expectedValue ) + { + ERR_PRINTF1(_L("GetUint is not as expected!")); + SetBlockResult(EFail); + } + CleanupStack::PopAndDestroy(buffer8); + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KObject()); + SetBlockResult(EFail); + } + } + +/** +Test PutUint64() +*/ +void CT_DataSdpUtil::DoCmdPutUint64(const TDesC& aSection) + { + INFO_PRINTF1(_L("SdpUtil PutUint64 call")); + + TInt theValue = 0; + TPckgBuf valuePackaged; + TUint8* dataPtr=&valuePackaged[0]; + + if( GetIntFromConfig(aSection, KNumber(), theValue) ) + { + TUint64 theNumber = theValue; + SdpUtil::PutUint64(dataPtr, theNumber); + + TUint64 temp = 0; + TUint64 expectedValue = 0; + for(TInt i=sizeof(TUint64)-1; i>=0; i--) + { + temp = dataPtr[i]<<(8*(sizeof(TUint64)-i-1)); + expectedValue = expectedValue + temp; + } + INFO_PRINTF2(_L("SdpUtil PutUint64 Call: actual = %lu"), theNumber); + INFO_PRINTF2(_L("SdpUtil PutUint64 Call: expected = %lu"), expectedValue); + + if( expectedValue != theNumber ) + { + ERR_PRINTF1(_L("PutUint64 is not as expected!")); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KNumber()); + SetBlockResult(EFail); + } + } + +/** +Test GetUint64() +*/ +void CT_DataSdpUtil::DoCmdGetUint64(const TDesC& aSection) + { + INFO_PRINTF1(_L("SdpUtil GetUint64 Call")); + + TPtrC theString; + if( GetStringFromConfig(aSection, KObject(), theString) ) + { + HBufC8* buffer8=HBufC8::NewLC(theString.Length()); + buffer8->Des().Copy(theString); + TPtr8 theString8=buffer8->Des(); + + TUint64 theNumber = 0; + SdpUtil::GetUint64(theString8, theNumber); + INFO_PRINTF2(_L("SdpUtil GetUint64 Call: actual = %lu"), theNumber); + + const TUint8* dataPtr = theString8.Ptr(); + TUint64 expectedValue = (static_cast(dataPtr[0])<<56) | (static_cast(dataPtr[1])<<48) | (static_cast(dataPtr[2])<<40) | (static_cast(dataPtr[3])<<32) | (dataPtr[4]<<24) | (dataPtr[5]<<16) | (dataPtr[6]<<8) | dataPtr[7]; + INFO_PRINTF2(_L("SdpUtil GetUint64 Call: expected = %lu"), expectedValue); + + if( theNumber!=expectedValue ) + { + ERR_PRINTF1(_L("GetUint64 is not as expected!")); + SetBlockResult(EFail); + } + CleanupStack::PopAndDestroy(buffer8); + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KObject()); + SetBlockResult(EFail); + } + } + +/** +Test PutUint128() +*/ +void CT_DataSdpUtil::DoCmdPutUint128(const TDesC& aSection) + { + INFO_PRINTF1(_L("SdpUtil PutUint128 call")); + + TInt theValue = 0; + TPckgBuf valuePackaged; + TUint8* dataPtr=&valuePackaged[0]; + + if( GetIntFromConfig(aSection, KLower(), theValue) ) + { + TUint64 lower = theValue; + if( GetIntFromConfig(aSection, KHigher(), theValue) ) + { + TUint64 higher = theValue; + SdpUtil::PutUint128(dataPtr, lower, higher); + INFO_PRINTF2(_L("SdpUtil PutUint128 Call: actual(Lower) = %lu"), lower); + INFO_PRINTF2(_L("SdpUtil PutUint128 Call: actual(Higher) = %lu"), higher); + + TUint64 tempLow = 0; + TUint64 tempHigh = 0; + TInt offset = sizeof(TUint64); + TUint64 lowExpectedValue = 0; + TUint64 highExpectedValue = 0; + for(TInt i=offset-1; i>=0; i--) + { + tempLow = dataPtr[i+offset]<<(8*(sizeof(TUint64)-i-1)); + lowExpectedValue = lowExpectedValue + tempLow; + + tempHigh = dataPtr[i]<<(8*(sizeof(TUint64)-i-1)); + highExpectedValue = highExpectedValue + tempHigh; + } + INFO_PRINTF2(_L("SdpUtil PutUint128 Call: expected(Lower) = %lu"), lowExpectedValue); + INFO_PRINTF2(_L("SdpUtil PutUint128 Call: expected(Higher) = %lu"), highExpectedValue); + if( (lowExpectedValue != lower) || (highExpectedValue != higher) ) + { + ERR_PRINTF1(_L("PutUint128 is not as expected!")); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KHigher()); + SetBlockResult(EFail); + } + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KHigher()); + SetBlockResult(EFail); + } + } + +/** +Test GetUint128() +*/ +void CT_DataSdpUtil::DoCmdGetUint128(const TDesC& aSection) + { + INFO_PRINTF1(_L("SdpUtil GetUint128 Call")); + + TPtrC theString; + if( GetStringFromConfig(aSection, KObject(), theString) ) + { + HBufC8* buffer8=HBufC8::NewLC(theString.Length()); + buffer8->Des().Copy(theString); + TPtr8 theString8=buffer8->Des(); + + TUint64 lower = 0; + TUint64 higher = 0; + SdpUtil::GetUint128(theString8, lower, higher); + INFO_PRINTF3(_L("SdpUtil GetUint128 Call: actual(Lower/Higher) = %lu/%lu"), lower, higher); + + const TUint8* dataPtr = theString8.Ptr(); + TUint64 highExpectedValue = (static_cast(dataPtr[0])<<56) | (static_cast(dataPtr[1])<<48) | (static_cast(dataPtr[2])<<40) | (static_cast(dataPtr[3])<<32) | (dataPtr[4]<<24) | (dataPtr[5]<<16) | (dataPtr[6]<<8) | dataPtr[7]; + TUint64 lowExpectedValue = (static_cast(dataPtr[8])<<56) | (static_cast(dataPtr[9])<<48) | (static_cast(dataPtr[10])<<40) | (static_cast(dataPtr[11])<<32) | (dataPtr[12]<<24) | (dataPtr[13]<<16) | (dataPtr[14]<<8) | dataPtr[15]; + INFO_PRINTF3(_L("SdpUtil GetUint128 Call: expected(Lower/Higher) = %lu/%lu"), lowExpectedValue, highExpectedValue); + + if( (lowExpectedValue != lower) || (highExpectedValue != higher) ) + { + ERR_PRINTF1(_L("GetUint128 is not as expected!")); + SetBlockResult(EFail); + } + CleanupStack::PopAndDestroy(buffer8); + } + else + { + ERR_PRINTF2(_L("Missing parameter %S"), &KObject()); + SetBlockResult(EFail); + } + }