summaryrefslogtreecommitdiff
path: root/indra/llmessage/llsdmessagebuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llmessage/llsdmessagebuilder.cpp')
-rw-r--r--indra/llmessage/llsdmessagebuilder.cpp472
1 files changed, 236 insertions, 236 deletions
diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp
index 49456c71ed..4c678b235b 100644
--- a/indra/llmessage/llsdmessagebuilder.cpp
+++ b/indra/llmessage/llsdmessagebuilder.cpp
@@ -1,25 +1,25 @@
-/**
+/**
* @file llsdmessagebuilder.cpp
* @brief LLSDMessageBuilder 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$
*/
@@ -40,12 +40,12 @@
#include "v4math.h"
LLSDMessageBuilder::LLSDMessageBuilder() :
- mCurrentMessage(LLSD::emptyMap()),
- mCurrentBlock(NULL),
- mCurrentMessageName(""),
- mCurrentBlockName(""),
- mbSBuilt(FALSE),
- mbSClear(TRUE)
+ mCurrentMessage(LLSD::emptyMap()),
+ mCurrentBlock(NULL),
+ mCurrentMessageName(""),
+ mCurrentBlockName(""),
+ mbSBuilt(FALSE),
+ mbSClear(TRUE)
{
}
@@ -58,160 +58,160 @@ LLSDMessageBuilder::~LLSDMessageBuilder()
// virtual
void LLSDMessageBuilder::newMessage(const char* name)
{
- mbSBuilt = FALSE;
- mbSClear = FALSE;
+ mbSBuilt = FALSE;
+ mbSClear = FALSE;
- mCurrentMessage = LLSD::emptyMap();
- mCurrentMessageName = (char*)name;
+ mCurrentMessage = LLSD::emptyMap();
+ mCurrentMessageName = (char*)name;
}
// virtual
void LLSDMessageBuilder::clearMessage()
{
- mbSBuilt = FALSE;
- mbSClear = TRUE;
+ mbSBuilt = FALSE;
+ mbSClear = TRUE;
- mCurrentMessage = LLSD::emptyMap();
- mCurrentMessageName = "";
+ mCurrentMessage = LLSD::emptyMap();
+ mCurrentMessageName = "";
}
// virtual
void LLSDMessageBuilder::nextBlock(const char* blockname)
{
- LLSD& block = mCurrentMessage[blockname];
- if(block.isUndefined())
- {
- block[0] = LLSD::emptyMap();
- mCurrentBlock = &(block[0]);
- }
- else if(block.isArray())
- {
- block[block.size()] = LLSD::emptyMap();
- mCurrentBlock = &(block[block.size() - 1]);
- }
- else
- {
- LL_ERRS() << "existing block not array" << LL_ENDL;
- }
+ LLSD& block = mCurrentMessage[blockname];
+ if(block.isUndefined())
+ {
+ block[0] = LLSD::emptyMap();
+ mCurrentBlock = &(block[0]);
+ }
+ else if(block.isArray())
+ {
+ block[block.size()] = LLSD::emptyMap();
+ mCurrentBlock = &(block[block.size() - 1]);
+ }
+ else
+ {
+ LL_ERRS() << "existing block not array" << LL_ENDL;
+ }
}
// TODO: Remove this horror...
BOOL LLSDMessageBuilder::removeLastBlock()
{
- /* TODO: finish implementing this */
- return FALSE;
+ /* TODO: finish implementing this */
+ return FALSE;
}
void LLSDMessageBuilder::addBinaryData(
- const char* varname,
- const void* data,
- S32 size)
+ const char* varname,
+ const void* data,
+ S32 size)
{
- std::vector<U8> v;
- v.resize(size);
- memcpy(&(v[0]), reinterpret_cast<const U8*>(data), size);
- (*mCurrentBlock)[varname] = v;
+ std::vector<U8> v;
+ v.resize(size);
+ memcpy(&(v[0]), reinterpret_cast<const U8*>(data), size);
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addS8(const char* varname, S8 v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addU8(const char* varname, U8 v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addS16(const char* varname, S16 v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addU16(const char* varname, U16 v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addF32(const char* varname, F32 v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addS32(const char* varname, S32 v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addU32(const char* varname, U32 v)
{
- (*mCurrentBlock)[varname] = ll_sd_from_U32(v);
+ (*mCurrentBlock)[varname] = ll_sd_from_U32(v);
}
void LLSDMessageBuilder::addU64(const char* varname, U64 v)
{
- (*mCurrentBlock)[varname] = ll_sd_from_U64(v);
+ (*mCurrentBlock)[varname] = ll_sd_from_U64(v);
}
void LLSDMessageBuilder::addF64(const char* varname, F64 v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addIPAddr(const char* varname, U32 v)
{
- (*mCurrentBlock)[varname] = ll_sd_from_ipaddr(v);
+ (*mCurrentBlock)[varname] = ll_sd_from_ipaddr(v);
}
void LLSDMessageBuilder::addIPPort(const char* varname, U16 v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::addBOOL(const char* varname, BOOL v)
{
- (*mCurrentBlock)[varname] = (v == TRUE);
+ (*mCurrentBlock)[varname] = (v == TRUE);
}
void LLSDMessageBuilder::addString(const char* varname, const char* v)
{
- if (v)
- (*mCurrentBlock)[varname] = v; /* Flawfinder: ignore */
- else
- (*mCurrentBlock)[varname] = "";
+ if (v)
+ (*mCurrentBlock)[varname] = v; /* Flawfinder: ignore */
+ else
+ (*mCurrentBlock)[varname] = "";
}
void LLSDMessageBuilder::addString(const char* varname, const std::string& v)
{
- if (v.size())
- (*mCurrentBlock)[varname] = v;
- else
- (*mCurrentBlock)[varname] = "";
+ if (v.size())
+ (*mCurrentBlock)[varname] = v;
+ else
+ (*mCurrentBlock)[varname] = "";
}
void LLSDMessageBuilder::addVector3(const char* varname, const LLVector3& v)
{
- (*mCurrentBlock)[varname] = ll_sd_from_vector3(v);
+ (*mCurrentBlock)[varname] = ll_sd_from_vector3(v);
}
void LLSDMessageBuilder::addVector4(const char* varname, const LLVector4& v)
{
- (*mCurrentBlock)[varname] = ll_sd_from_vector4(v);
+ (*mCurrentBlock)[varname] = ll_sd_from_vector4(v);
}
void LLSDMessageBuilder::addVector3d(const char* varname, const LLVector3d& v)
{
- (*mCurrentBlock)[varname] = ll_sd_from_vector3d(v);
+ (*mCurrentBlock)[varname] = ll_sd_from_vector3d(v);
}
void LLSDMessageBuilder::addQuat(const char* varname, const LLQuaternion& v)
{
- (*mCurrentBlock)[varname] = ll_sd_from_quaternion(v);
+ (*mCurrentBlock)[varname] = ll_sd_from_quaternion(v);
}
void LLSDMessageBuilder::addUUID(const char* varname, const LLUUID& v)
{
- (*mCurrentBlock)[varname] = v;
+ (*mCurrentBlock)[varname] = v;
}
void LLSDMessageBuilder::compressMessage(U8*& buf_ptr, U32& buffer_length)
@@ -220,205 +220,205 @@ void LLSDMessageBuilder::compressMessage(U8*& buf_ptr, U32& buffer_length)
BOOL LLSDMessageBuilder::isMessageFull(const char* blockname) const
{
- return FALSE;
+ return FALSE;
}
U32 LLSDMessageBuilder::buildMessage(U8*, U32, U8)
{
- return 0;
+ return 0;
}
void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data)
{
- // copy the blocks
- // counting variables used to encode multiple block info
- S32 block_count = 0;
+ // copy the blocks
+ // counting variables used to encode multiple block info
+ S32 block_count = 0;
char* block_name = NULL;
- // loop through msg blocks to loop through variables, totalling up size
- // data and filling the new (send) message
- LLMsgData::msg_blk_data_map_t::const_iterator iter =
- data.mMemberBlocks.begin();
- LLMsgData::msg_blk_data_map_t::const_iterator end =
- data.mMemberBlocks.end();
- for(; iter != end; ++iter)
- {
- const LLMsgBlkData* mbci = iter->second;
- if(!mbci) continue;
-
- // do we need to encode a block code?
- if (block_count == 0)
- {
- block_count = mbci->mBlockNumber;
- block_name = (char*)mbci->mName;
- }
-
- // counting down mutliple blocks
- block_count--;
-
- nextBlock(block_name);
-
- // now loop through the variables
- LLMsgBlkData::msg_var_data_map_t::const_iterator dit = mbci->mMemberVarData.begin();
- LLMsgBlkData::msg_var_data_map_t::const_iterator dend = mbci->mMemberVarData.end();
-
- for(; dit != dend; ++dit)
- {
- const LLMsgVarData& mvci = *dit;
- const char* varname = mvci.getName();
-
- switch(mvci.getType())
- {
- case MVT_FIXED:
- addBinaryData(varname, mvci.getData(), mvci.getSize());
- break;
-
- case MVT_VARIABLE:
- {
- const char end = ((const char*)mvci.getData())[mvci.getSize()-1]; // Ensure null terminated
- if (mvci.getDataSize() == 1 && end == 0)
- {
- addString(varname, (const char*)mvci.getData());
- }
- else
- {
- addBinaryData(varname, mvci.getData(), mvci.getSize());
- }
- break;
- }
-
- case MVT_U8:
- addU8(varname, *(U8*)mvci.getData());
- break;
-
- case MVT_U16:
- addU16(varname, *(U16*)mvci.getData());
- break;
-
- case MVT_U32:
- addU32(varname, *(U32*)mvci.getData());
- break;
-
- case MVT_U64:
- addU64(varname, *(U64*)mvci.getData());
- break;
-
- case MVT_S8:
- addS8(varname, *(S8*)mvci.getData());
- break;
-
- case MVT_S16:
- addS16(varname, *(S16*)mvci.getData());
- break;
-
- case MVT_S32:
- addS32(varname, *(S32*)mvci.getData());
- break;
-
- // S64 not supported in LLSD so we just truncate it
- case MVT_S64:
- addS32(varname, (S32)*(S64*)mvci.getData());
- break;
-
- case MVT_F32:
- addF32(varname, *(F32*)mvci.getData());
- break;
-
- case MVT_F64:
- addF64(varname, *(F64*)mvci.getData());
- break;
-
- case MVT_LLVector3:
- addVector3(varname, *(LLVector3*)mvci.getData());
- break;
-
- case MVT_LLVector3d:
- addVector3d(varname, *(LLVector3d*)mvci.getData());
- break;
-
- case MVT_LLVector4:
- addVector4(varname, *(LLVector4*)mvci.getData());
- break;
-
- case MVT_LLQuaternion:
- {
- LLVector3 v = *(LLVector3*)mvci.getData();
- LLQuaternion q;
- q.unpackFromVector3(v);
- addQuat(varname, q);
- break;
- }
-
- case MVT_LLUUID:
- addUUID(varname, *(LLUUID*)mvci.getData());
- break;
-
- case MVT_BOOL:
- addBOOL(varname, *(BOOL*)mvci.getData());
- break;
-
- case MVT_IP_ADDR:
- addIPAddr(varname, *(U32*)mvci.getData());
- break;
-
- case MVT_IP_PORT:
- addIPPort(varname, *(U16*)mvci.getData());
- break;
-
- case MVT_U16Vec3:
- //treated as an array of 6 bytes
- addBinaryData(varname, mvci.getData(), 6);
- break;
-
- case MVT_U16Quat:
- //treated as an array of 8 bytes
- addBinaryData(varname, mvci.getData(), 8);
- break;
-
- case MVT_S16Array:
- addBinaryData(varname, mvci.getData(), mvci.getSize());
- break;
-
- default:
- LL_WARNS() << "Unknown type in conversion of message to LLSD" << LL_ENDL;
- break;
- }
- }
- }
+ // loop through msg blocks to loop through variables, totalling up size
+ // data and filling the new (send) message
+ LLMsgData::msg_blk_data_map_t::const_iterator iter =
+ data.mMemberBlocks.begin();
+ LLMsgData::msg_blk_data_map_t::const_iterator end =
+ data.mMemberBlocks.end();
+ for(; iter != end; ++iter)
+ {
+ const LLMsgBlkData* mbci = iter->second;
+ if(!mbci) continue;
+
+ // do we need to encode a block code?
+ if (block_count == 0)
+ {
+ block_count = mbci->mBlockNumber;
+ block_name = (char*)mbci->mName;
+ }
+
+ // counting down mutliple blocks
+ block_count--;
+
+ nextBlock(block_name);
+
+ // now loop through the variables
+ LLMsgBlkData::msg_var_data_map_t::const_iterator dit = mbci->mMemberVarData.begin();
+ LLMsgBlkData::msg_var_data_map_t::const_iterator dend = mbci->mMemberVarData.end();
+
+ for(; dit != dend; ++dit)
+ {
+ const LLMsgVarData& mvci = *dit;
+ const char* varname = mvci.getName();
+
+ switch(mvci.getType())
+ {
+ case MVT_FIXED:
+ addBinaryData(varname, mvci.getData(), mvci.getSize());
+ break;
+
+ case MVT_VARIABLE:
+ {
+ const char end = ((const char*)mvci.getData())[mvci.getSize()-1]; // Ensure null terminated
+ if (mvci.getDataSize() == 1 && end == 0)
+ {
+ addString(varname, (const char*)mvci.getData());
+ }
+ else
+ {
+ addBinaryData(varname, mvci.getData(), mvci.getSize());
+ }
+ break;
+ }
+
+ case MVT_U8:
+ addU8(varname, *(U8*)mvci.getData());
+ break;
+
+ case MVT_U16:
+ addU16(varname, *(U16*)mvci.getData());
+ break;
+
+ case MVT_U32:
+ addU32(varname, *(U32*)mvci.getData());
+ break;
+
+ case MVT_U64:
+ addU64(varname, *(U64*)mvci.getData());
+ break;
+
+ case MVT_S8:
+ addS8(varname, *(S8*)mvci.getData());
+ break;
+
+ case MVT_S16:
+ addS16(varname, *(S16*)mvci.getData());
+ break;
+
+ case MVT_S32:
+ addS32(varname, *(S32*)mvci.getData());
+ break;
+
+ // S64 not supported in LLSD so we just truncate it
+ case MVT_S64:
+ addS32(varname, (S32)*(S64*)mvci.getData());
+ break;
+
+ case MVT_F32:
+ addF32(varname, *(F32*)mvci.getData());
+ break;
+
+ case MVT_F64:
+ addF64(varname, *(F64*)mvci.getData());
+ break;
+
+ case MVT_LLVector3:
+ addVector3(varname, *(LLVector3*)mvci.getData());
+ break;
+
+ case MVT_LLVector3d:
+ addVector3d(varname, *(LLVector3d*)mvci.getData());
+ break;
+
+ case MVT_LLVector4:
+ addVector4(varname, *(LLVector4*)mvci.getData());
+ break;
+
+ case MVT_LLQuaternion:
+ {
+ LLVector3 v = *(LLVector3*)mvci.getData();
+ LLQuaternion q;
+ q.unpackFromVector3(v);
+ addQuat(varname, q);
+ break;
+ }
+
+ case MVT_LLUUID:
+ addUUID(varname, *(LLUUID*)mvci.getData());
+ break;
+
+ case MVT_BOOL:
+ addBOOL(varname, *(BOOL*)mvci.getData());
+ break;
+
+ case MVT_IP_ADDR:
+ addIPAddr(varname, *(U32*)mvci.getData());
+ break;
+
+ case MVT_IP_PORT:
+ addIPPort(varname, *(U16*)mvci.getData());
+ break;
+
+ case MVT_U16Vec3:
+ //treated as an array of 6 bytes
+ addBinaryData(varname, mvci.getData(), 6);
+ break;
+
+ case MVT_U16Quat:
+ //treated as an array of 8 bytes
+ addBinaryData(varname, mvci.getData(), 8);
+ break;
+
+ case MVT_S16Array:
+ addBinaryData(varname, mvci.getData(), mvci.getSize());
+ break;
+
+ default:
+ LL_WARNS() << "Unknown type in conversion of message to LLSD" << LL_ENDL;
+ break;
+ }
+ }
+ }
}
//virtual
void LLSDMessageBuilder::copyFromLLSD(const LLSD& msg)
{
- mCurrentMessage = msg;
- LL_DEBUGS() << LLSDNotationStreamer(mCurrentMessage) << LL_ENDL;
+ mCurrentMessage = msg;
+ LL_DEBUGS() << LLSDNotationStreamer(mCurrentMessage) << LL_ENDL;
}
const LLSD& LLSDMessageBuilder::getMessage() const
{
- return mCurrentMessage;
+ return mCurrentMessage;
}
//virtual
void LLSDMessageBuilder::setBuilt(BOOL b) { mbSBuilt = b; }
-//virtual
+//virtual
BOOL LLSDMessageBuilder::isBuilt() const {return mbSBuilt;}
-//virtual
+//virtual
BOOL LLSDMessageBuilder::isClear() const {return mbSClear;}
-//virtual
+//virtual
S32 LLSDMessageBuilder::getMessageSize()
{
- // babbage: size is unknown as message stored as LLSD.
- // return non-zero if pending data, as send can be skipped for 0 size.
- // return 1 to encourage senders checking size against splitting message.
- return mCurrentMessage.size()? 1 : 0;
+ // babbage: size is unknown as message stored as LLSD.
+ // return non-zero if pending data, as send can be skipped for 0 size.
+ // return 1 to encourage senders checking size against splitting message.
+ return mCurrentMessage.size()? 1 : 0;
}
-//virtual
-const char* LLSDMessageBuilder::getMessageName() const
+//virtual
+const char* LLSDMessageBuilder::getMessageName() const
{
- return mCurrentMessageName.c_str();
+ return mCurrentMessageName.c_str();
}