diff options
| author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-05-22 20:51:58 +0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-22 20:51:58 +0300 | 
| commit | 6cc7dd09d5e69cf57e6de7fb568a0ad2693f9c9a (patch) | |
| tree | fab23811a5cedc1ebf01479c852ee92ff62b636c /indra/llmessage/llsdmessagereader.cpp | |
| parent | ef8f4819822288e044ea719feb6af7a1f4df4c4e (diff) | |
| parent | 7bb5afc11ee5a6af78302a8d76a9a619e2baaab2 (diff) | |
Merge pull request #1545 from Ansariel/DRTVWR-600-maint-A
Merge main into DRTVWR-600-maint-a
Diffstat (limited to 'indra/llmessage/llsdmessagereader.cpp')
| -rw-r--r-- | indra/llmessage/llsdmessagereader.cpp | 688 | 
1 files changed, 344 insertions, 344 deletions
diff --git a/indra/llmessage/llsdmessagereader.cpp b/indra/llmessage/llsdmessagereader.cpp index d533d6535b..c0e8f634b2 100644 --- a/indra/llmessage/llsdmessagereader.cpp +++ b/indra/llmessage/llsdmessagereader.cpp @@ -1,344 +1,344 @@ -/**  - * @file llsdmessagereader.cpp - * @brief LLSDMessageReader class implementation. - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#include "linden_common.h" - -#include "llsdmessagereader.h" - -#include "llmessagebuilder.h" -#include "llsdmessagebuilder.h" -#include "llsdutil.h" - -#include "llsdutil_math.h" -#include "v3math.h" -#include "v4math.h" -#include "v3dmath.h" -#include "v2math.h" -#include "llquaternion.h" -#include "v4color.h" - -LLSDMessageReader::LLSDMessageReader() : -	mMessageName(NULL) -{ -} - -//virtual  -LLSDMessageReader::~LLSDMessageReader() -{ -} - - -LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum) -{ -	// babbage: log error to LL_ERRS() if variable not found to mimic -	// LLTemplateMessageReader::getData behaviour -	if(NULL == block) -	{ -		LL_ERRS() << "NULL block name" << LL_ENDL; -		return LLSD(); -	} -	if(NULL == var) -	{ -		LL_ERRS() << "NULL var name" << LL_ENDL; -		return LLSD(); -	} -	if(! input[block].isArray()) -	{ -		// NOTE: babbage: need to return default for missing blocks to allow -		// backwards/forwards compatibility - handlers must cope with default -		// values. -		LL_WARNS() << "block " << block << " not found" << LL_ENDL; -		return LLSD(); -	} - -	LLSD result = input[block][blocknum][var];  -	if(result.isUndefined()) -	{ -		// NOTE: babbage: need to return default for missing vars to allow -		// backwards/forwards compatibility - handlers must cope with default -		// values. -		LL_WARNS() << "var " << var << " not found" << LL_ENDL; -	} -	return result; -} - -//virtual  -void LLSDMessageReader::getBinaryData(const char *block, const char *var,  -									  void *datap, S32 size, S32 blocknum,  -									  S32 max_size) -{ -	std::vector<U8> data = getLLSD(mMessage, block, var, blocknum); -	S32 data_size = (S32)data.size(); - -	if (size && data_size != size) -	{ -		return; -	} -	 -	if (max_size < data_size) -	{ -		data_size = max_size; -	} -	 -	// Calls to memcpy will fail if data_size is not positive. -	// Phoenix 2009-02-27 -	if(data_size <= 0) -	{ -		return; -	} -	memcpy(datap, &(data[0]), data_size); -} - -//virtual  -void LLSDMessageReader::getBOOL(const char *block, const char *var,  -								bool &data, -								S32 blocknum) -{ -	data = getLLSD(mMessage, block, var, blocknum); -} - -//virtual  -void LLSDMessageReader::getS8(const char *block, const char *var, S8 &data,  -					   S32 blocknum) -{ -	data = getLLSD(mMessage, block, var, blocknum).asInteger(); -} - -//virtual  -void LLSDMessageReader::getU8(const char *block, const char *var, U8 &data,  -					   S32 blocknum) -{ -	data = getLLSD(mMessage, block, var, blocknum).asInteger(); -} - -//virtual  -void LLSDMessageReader::getS16(const char *block, const char *var, S16 &data,  -						S32 blocknum) -{ -	data = getLLSD(mMessage, block, var, blocknum).asInteger(); -} - -//virtual  -void LLSDMessageReader::getU16(const char *block, const char *var, U16 &data,  -						S32 blocknum) -{ -	data = getLLSD(mMessage, block, var, blocknum).asInteger(); -} - -//virtual  -void LLSDMessageReader::getS32(const char *block, const char *var, S32 &data,  -						S32 blocknum) -{ -	data = getLLSD(mMessage, block, var, blocknum); -} - -//virtual  -void LLSDMessageReader::getF32(const char *block, const char *var, F32 &data,  -						S32 blocknum) -{ -	data = (F32)getLLSD(mMessage, block, var, blocknum).asReal(); -} - -//virtual  -void LLSDMessageReader::getU32(const char *block, const char *var, U32 &data,  -						S32 blocknum) -{ -	data = ll_U32_from_sd(getLLSD(mMessage, block, var, blocknum)); -} - -//virtual  -void LLSDMessageReader::getU64(const char *block, const char *var, -								U64 &data, S32 blocknum) -{ -	data = ll_U64_from_sd(getLLSD(mMessage, block, var, blocknum)); -} - -//virtual  -void LLSDMessageReader::getF64(const char *block, const char *var, -								F64 &data, S32 blocknum) -{ -	data = getLLSD(mMessage, block, var, blocknum); -} - -//virtual  -void LLSDMessageReader::getVector3(const char *block, const char *var,  -							LLVector3 &vec, S32 blocknum) -{ -	vec = ll_vector3_from_sd(getLLSD(mMessage, block, var, blocknum)); -} - -//virtual  -void LLSDMessageReader::getVector4(const char *block, const char *var,  -							LLVector4 &vec, S32 blocknum) -{ -	vec = ll_vector4_from_sd(getLLSD(mMessage, block, var, blocknum)); -} - -//virtual  -void LLSDMessageReader::getVector3d(const char *block, const char *var,  -							 LLVector3d &vec, S32 blocknum) -{ -	vec = ll_vector3d_from_sd(getLLSD(mMessage, block, var, blocknum)); -} - -//virtual  -void LLSDMessageReader::getQuat(const char *block, const char *var, -								 LLQuaternion &q, S32 blocknum) -{ -	q = ll_quaternion_from_sd(getLLSD(mMessage, block, var, blocknum)); -} - -//virtual  -void LLSDMessageReader::getUUID(const char *block, const char *var, -								 LLUUID &uuid, S32 blocknum) -{ -	uuid = getLLSD(mMessage, block, var, blocknum); -} - -//virtual  -void LLSDMessageReader::getIPAddr(const char *block, const char *var, -								   U32 &ip, S32 blocknum) -{ -	ip = ll_ipaddr_from_sd(getLLSD(mMessage, block, var, blocknum)); -} - -//virtual  -void LLSDMessageReader::getIPPort(const char *block, const char *var, -								   U16 &port, S32 blocknum) -{ -	port = getLLSD(mMessage, block, var, blocknum).asInteger(); -} - -//virtual  -void LLSDMessageReader::getString(const char *block, const char *var,  -						   S32 buffer_size, char *buffer, S32 blocknum) -{ -	if(buffer_size <= 0) -	{ -		LL_WARNS() << "buffer_size <= 0" << LL_ENDL; -		return; -	} -	std::string data = getLLSD(mMessage, block, var, blocknum); -	S32 data_size = data.size(); -	if (data_size >= buffer_size) -	{ -		data_size = buffer_size - 1; -	} -	memcpy(buffer, data.data(), data_size); -	buffer[data_size] = '\0'; -} - -//virtual  -void LLSDMessageReader::getString(const char *block, const char *var,  -						   std::string& outstr, S32 blocknum) -{ -	outstr = getLLSD(mMessage, block, var, blocknum).asString(); -} - -//virtual  -S32	LLSDMessageReader::getNumberOfBlocks(const char *blockname) -{ -	return mMessage[blockname].size(); -} - -S32 getElementSize(const LLSD& llsd) -{ -	LLSD::Type type = llsd.type(); -	switch(type) -	{ -	case LLSD::TypeBoolean: -		return sizeof(bool); -	case LLSD::TypeInteger: -		return sizeof(S32); -	case LLSD::TypeReal: -		return sizeof(F64); -	case LLSD::TypeString: -		return llsd.size(); -	case LLSD::TypeUUID: -		return sizeof(LLUUID); -	case LLSD::TypeDate: -		return sizeof(LLDate); -	case LLSD::TypeURI: -		return sizeof(LLURI); -	case LLSD::TypeBinary: -	{ -		std::vector<U8> data = llsd; -		return data.size() * sizeof(U8); -	} -	case LLSD::TypeMap: -	case LLSD::TypeArray: -	case LLSD::TypeUndefined: -	default:                        // TypeLLSDTypeEnd, TypeLLSDNumTypes, etc. -		return 0; -	} -	//return 0; -} - -//virtual  -//Mainly used to find size of binary block of data -S32	LLSDMessageReader::getSize(const char *blockname, const char *varname) -{ -	return getElementSize(mMessage[blockname][0][varname]); -} - - -//virtual  -S32	LLSDMessageReader::getSize(const char *blockname, S32 blocknum,  -							   const char *varname) -{ -	return getElementSize(mMessage[blockname][blocknum][varname]); -} - -//virtual  -void LLSDMessageReader::clearMessage() -{ -	mMessage = LLSD(); -} - -//virtual  -const char* LLSDMessageReader::getMessageName() const -{ -	return mMessageName; -} - -// virtual  -S32 LLSDMessageReader::getMessageSize() const -{ -	return 0; -} - -//virtual  -void LLSDMessageReader::copyToBuilder(LLMessageBuilder& builder) const -{ -	builder.copyFromLLSD(mMessage); -} - -void LLSDMessageReader::setMessage(const char* name, const LLSD& message) -{ -	mMessageName = name; -	// TODO: Validate -	mMessage = message; -} +/**
 + * @file llsdmessagereader.cpp
 + * @brief LLSDMessageReader class implementation.
 + *
 + * $LicenseInfo:firstyear=2007&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, Linden Research, Inc.
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#include "linden_common.h"
 +
 +#include "llsdmessagereader.h"
 +
 +#include "llmessagebuilder.h"
 +#include "llsdmessagebuilder.h"
 +#include "llsdutil.h"
 +
 +#include "llsdutil_math.h"
 +#include "v3math.h"
 +#include "v4math.h"
 +#include "v3dmath.h"
 +#include "v2math.h"
 +#include "llquaternion.h"
 +#include "v4color.h"
 +
 +LLSDMessageReader::LLSDMessageReader() :
 +    mMessageName(NULL)
 +{
 +}
 +
 +//virtual
 +LLSDMessageReader::~LLSDMessageReader()
 +{
 +}
 +
 +
 +LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum)
 +{
 +    // babbage: log error to LL_ERRS() if variable not found to mimic
 +    // LLTemplateMessageReader::getData behaviour
 +    if(NULL == block)
 +    {
 +        LL_ERRS() << "NULL block name" << LL_ENDL;
 +        return LLSD();
 +    }
 +    if(NULL == var)
 +    {
 +        LL_ERRS() << "NULL var name" << LL_ENDL;
 +        return LLSD();
 +    }
 +    if(! input[block].isArray())
 +    {
 +        // NOTE: babbage: need to return default for missing blocks to allow
 +        // backwards/forwards compatibility - handlers must cope with default
 +        // values.
 +        LL_WARNS() << "block " << block << " not found" << LL_ENDL;
 +        return LLSD();
 +    }
 +
 +    LLSD result = input[block][blocknum][var];
 +    if(result.isUndefined())
 +    {
 +        // NOTE: babbage: need to return default for missing vars to allow
 +        // backwards/forwards compatibility - handlers must cope with default
 +        // values.
 +        LL_WARNS() << "var " << var << " not found" << LL_ENDL;
 +    }
 +    return result;
 +}
 +
 +//virtual
 +void LLSDMessageReader::getBinaryData(const char *block, const char *var,
 +                                      void *datap, S32 size, S32 blocknum,
 +                                      S32 max_size)
 +{
 +    std::vector<U8> data = getLLSD(mMessage, block, var, blocknum);
 +    S32 data_size = (S32)data.size();
 +
 +    if (size && data_size != size)
 +    {
 +        return;
 +    }
 +
 +    if (max_size < data_size)
 +    {
 +        data_size = max_size;
 +    }
 +
 +    // Calls to memcpy will fail if data_size is not positive.
 +    // Phoenix 2009-02-27
 +    if(data_size <= 0)
 +    {
 +        return;
 +    }
 +    memcpy(datap, &(data[0]), data_size);
 +}
 +
 +//virtual
 +void LLSDMessageReader::getBOOL(const char *block, const char *var,
 +                                bool &data,
 +                                S32 blocknum)
 +{
 +    data = getLLSD(mMessage, block, var, blocknum);
 +}
 +
 +//virtual
 +void LLSDMessageReader::getS8(const char *block, const char *var, S8 &data,
 +                       S32 blocknum)
 +{
 +    data = getLLSD(mMessage, block, var, blocknum).asInteger();
 +}
 +
 +//virtual
 +void LLSDMessageReader::getU8(const char *block, const char *var, U8 &data,
 +                       S32 blocknum)
 +{
 +    data = getLLSD(mMessage, block, var, blocknum).asInteger();
 +}
 +
 +//virtual
 +void LLSDMessageReader::getS16(const char *block, const char *var, S16 &data,
 +                        S32 blocknum)
 +{
 +    data = getLLSD(mMessage, block, var, blocknum).asInteger();
 +}
 +
 +//virtual
 +void LLSDMessageReader::getU16(const char *block, const char *var, U16 &data,
 +                        S32 blocknum)
 +{
 +    data = getLLSD(mMessage, block, var, blocknum).asInteger();
 +}
 +
 +//virtual
 +void LLSDMessageReader::getS32(const char *block, const char *var, S32 &data,
 +                        S32 blocknum)
 +{
 +    data = getLLSD(mMessage, block, var, blocknum);
 +}
 +
 +//virtual
 +void LLSDMessageReader::getF32(const char *block, const char *var, F32 &data,
 +                        S32 blocknum)
 +{
 +    data = (F32)getLLSD(mMessage, block, var, blocknum).asReal();
 +}
 +
 +//virtual
 +void LLSDMessageReader::getU32(const char *block, const char *var, U32 &data,
 +                        S32 blocknum)
 +{
 +    data = ll_U32_from_sd(getLLSD(mMessage, block, var, blocknum));
 +}
 +
 +//virtual
 +void LLSDMessageReader::getU64(const char *block, const char *var,
 +                                U64 &data, S32 blocknum)
 +{
 +    data = ll_U64_from_sd(getLLSD(mMessage, block, var, blocknum));
 +}
 +
 +//virtual
 +void LLSDMessageReader::getF64(const char *block, const char *var,
 +                                F64 &data, S32 blocknum)
 +{
 +    data = getLLSD(mMessage, block, var, blocknum);
 +}
 +
 +//virtual
 +void LLSDMessageReader::getVector3(const char *block, const char *var,
 +                            LLVector3 &vec, S32 blocknum)
 +{
 +    vec = ll_vector3_from_sd(getLLSD(mMessage, block, var, blocknum));
 +}
 +
 +//virtual
 +void LLSDMessageReader::getVector4(const char *block, const char *var,
 +                            LLVector4 &vec, S32 blocknum)
 +{
 +    vec = ll_vector4_from_sd(getLLSD(mMessage, block, var, blocknum));
 +}
 +
 +//virtual
 +void LLSDMessageReader::getVector3d(const char *block, const char *var,
 +                             LLVector3d &vec, S32 blocknum)
 +{
 +    vec = ll_vector3d_from_sd(getLLSD(mMessage, block, var, blocknum));
 +}
 +
 +//virtual
 +void LLSDMessageReader::getQuat(const char *block, const char *var,
 +                                 LLQuaternion &q, S32 blocknum)
 +{
 +    q = ll_quaternion_from_sd(getLLSD(mMessage, block, var, blocknum));
 +}
 +
 +//virtual
 +void LLSDMessageReader::getUUID(const char *block, const char *var,
 +                                 LLUUID &uuid, S32 blocknum)
 +{
 +    uuid = getLLSD(mMessage, block, var, blocknum);
 +}
 +
 +//virtual
 +void LLSDMessageReader::getIPAddr(const char *block, const char *var,
 +                                   U32 &ip, S32 blocknum)
 +{
 +    ip = ll_ipaddr_from_sd(getLLSD(mMessage, block, var, blocknum));
 +}
 +
 +//virtual
 +void LLSDMessageReader::getIPPort(const char *block, const char *var,
 +                                   U16 &port, S32 blocknum)
 +{
 +    port = getLLSD(mMessage, block, var, blocknum).asInteger();
 +}
 +
 +//virtual
 +void LLSDMessageReader::getString(const char *block, const char *var,
 +                           S32 buffer_size, char *buffer, S32 blocknum)
 +{
 +    if(buffer_size <= 0)
 +    {
 +        LL_WARNS() << "buffer_size <= 0" << LL_ENDL;
 +        return;
 +    }
 +    std::string data = getLLSD(mMessage, block, var, blocknum);
 +    S32 data_size = data.size();
 +    if (data_size >= buffer_size)
 +    {
 +        data_size = buffer_size - 1;
 +    }
 +    memcpy(buffer, data.data(), data_size);
 +    buffer[data_size] = '\0';
 +}
 +
 +//virtual
 +void LLSDMessageReader::getString(const char *block, const char *var,
 +                           std::string& outstr, S32 blocknum)
 +{
 +    outstr = getLLSD(mMessage, block, var, blocknum).asString();
 +}
 +
 +//virtual
 +S32 LLSDMessageReader::getNumberOfBlocks(const char *blockname)
 +{
 +    return mMessage[blockname].size();
 +}
 +
 +S32 getElementSize(const LLSD& llsd)
 +{
 +    LLSD::Type type = llsd.type();
 +    switch(type)
 +    {
 +    case LLSD::TypeBoolean:
 +        return sizeof(bool);
 +    case LLSD::TypeInteger:
 +        return sizeof(S32);
 +    case LLSD::TypeReal:
 +        return sizeof(F64);
 +    case LLSD::TypeString:
 +        return llsd.size();
 +    case LLSD::TypeUUID:
 +        return sizeof(LLUUID);
 +    case LLSD::TypeDate:
 +        return sizeof(LLDate);
 +    case LLSD::TypeURI:
 +        return sizeof(LLURI);
 +    case LLSD::TypeBinary:
 +    {
 +        std::vector<U8> data = llsd;
 +        return data.size() * sizeof(U8);
 +    }
 +    case LLSD::TypeMap:
 +    case LLSD::TypeArray:
 +    case LLSD::TypeUndefined:
 +    default:                        // TypeLLSDTypeEnd, TypeLLSDNumTypes, etc.
 +        return 0;
 +    }
 +    //return 0;
 +}
 +
 +//virtual
 +//Mainly used to find size of binary block of data
 +S32 LLSDMessageReader::getSize(const char *blockname, const char *varname)
 +{
 +    return getElementSize(mMessage[blockname][0][varname]);
 +}
 +
 +
 +//virtual
 +S32 LLSDMessageReader::getSize(const char *blockname, S32 blocknum,
 +                               const char *varname)
 +{
 +    return getElementSize(mMessage[blockname][blocknum][varname]);
 +}
 +
 +//virtual
 +void LLSDMessageReader::clearMessage()
 +{
 +    mMessage = LLSD();
 +}
 +
 +//virtual
 +const char* LLSDMessageReader::getMessageName() const
 +{
 +    return mMessageName;
 +}
 +
 +// virtual
 +S32 LLSDMessageReader::getMessageSize() const
 +{
 +    return 0;
 +}
 +
 +//virtual
 +void LLSDMessageReader::copyToBuilder(LLMessageBuilder& builder) const
 +{
 +    builder.copyFromLLSD(mMessage);
 +}
 +
 +void LLSDMessageReader::setMessage(const char* name, const LLSD& message)
 +{
 +    mMessageName = name;
 +    // TODO: Validate
 +    mMessage = message;
 +}
  | 
