diff options
author | Tess Chu <tess@lindenlab.com> | 2007-07-11 21:29:02 +0000 |
---|---|---|
committer | Tess Chu <tess@lindenlab.com> | 2007-07-11 21:29:02 +0000 |
commit | 57b8fef824b6d7f37c5be5812ebffa39ab2e8093 (patch) | |
tree | f89014544fc276b283a36eb2e0cb52e93806a44a /indra/llmessage | |
parent | a6769f262ff910949a7e1c81cf98e52ddfc2d44a (diff) |
svn merge --ignore-ancestry svn+ssh://svn/svn/linden/release@65088 svn+ssh://svn/svn/linden/branches/release-candidate@65078 -> release Paired by Tess and rdw.
Diffstat (limited to 'indra/llmessage')
33 files changed, 2001 insertions, 2262 deletions
diff --git a/indra/llmessage/llcircuit.h b/indra/llmessage/llcircuit.h index a02c67e41d..ee8792ea4d 100644 --- a/indra/llmessage/llcircuit.h +++ b/indra/llmessage/llcircuit.h @@ -38,7 +38,11 @@ const F32 LL_AVERAGED_PING_MIN = 100; // msec // IW: increased to avoid ret const U32 INITIAL_PING_VALUE_MSEC = 1000; // initial value for the ping delay, or for ping delay for an unknown circuit const TPACKETID LL_MAX_OUT_PACKET_ID = 0x01000000; -const U8 LL_PACKET_ID_SIZE = 4; + +// 0 - flags +// [1,4] - packetid +// 5 - data offset (after message name) +const U8 LL_PACKET_ID_SIZE = 6; const S32 LL_MAX_RESENT_PACKETS_PER_FRAME = 100; const S32 LL_MAX_ACKED_PACKETS_PER_FRAME = 200; diff --git a/indra/llmessage/llhost.cpp b/indra/llmessage/llhost.cpp index 6a74cfe831..9fa98cf09c 100644 --- a/indra/llmessage/llhost.cpp +++ b/indra/llmessage/llhost.cpp @@ -210,9 +210,9 @@ std::ostream& operator<< (std::ostream& os, const LLHost &hh) } -std::istream& operator>> (std::istream& is, LLHost &rh) -{ - is >> rh.mIP; - is >> rh.mPort; - return is; -} +//std::istream& operator>> (std::istream& is, LLHost &rh) +//{ +// is >> rh.mIP; +// is >> rh.mPort; +// return is; +//} diff --git a/indra/llmessage/llhost.h b/indra/llmessage/llhost.h index 09dbae61b9..df1b6f31f7 100644 --- a/indra/llmessage/llhost.h +++ b/indra/llmessage/llhost.h @@ -83,7 +83,11 @@ public: std::string getIPandPort() const; friend std::ostream& operator<< (std::ostream& os, const LLHost &hh); - friend std::istream& operator>> (std::istream& is, LLHost &hh); + + // This operator is not well defined. does it expect a + // "192.168.1.1:80" notation or "int int" format? Phoenix 2007-05-18 + //friend std::istream& operator>> (std::istream& is, LLHost &hh); + friend bool operator==( const LLHost &lhs, const LLHost &rhs ); friend bool operator!=( const LLHost &lhs, const LLHost &rhs ); friend bool operator<(const LLHost &lhs, const LLHost &rhs); diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp index 16586dc9c7..1bc6d742f1 100644 --- a/indra/llmessage/llhttpclient.cpp +++ b/indra/llmessage/llhttpclient.cpp @@ -23,12 +23,9 @@ #include <curl/curl.h> const F32 HTTP_REQUEST_EXPIRY_SECS = 60.0f; - static std::string gCABundle; - - LLHTTPClient::Responder::Responder() : mReferenceCount(0) { diff --git a/indra/llmessage/llhttpsender.cpp b/indra/llmessage/llhttpsender.cpp index 4152dedae5..b9fd8ecbf7 100644 --- a/indra/llmessage/llhttpsender.cpp +++ b/indra/llmessage/llhttpsender.cpp @@ -20,6 +20,7 @@ namespace { typedef std::map<LLHost, LLHTTPSender*> SenderMap; static SenderMap senderMap; + static LLHTTPSender* defaultSender = new LLHTTPSender(); } //virtual @@ -49,11 +50,10 @@ void LLHTTPSender::setSender(const LLHost& host, LLHTTPSender* sender) //static const LLHTTPSender& LLHTTPSender::getSender(const LLHost& host) { - static LLHTTPSender defaultSender; SenderMap::const_iterator iter = senderMap.find(host); if(iter == senderMap.end()) { - return defaultSender; + return *defaultSender; } return *(iter->second); } @@ -68,3 +68,10 @@ void LLHTTPSender::clearSender(const LLHost& host) senderMap.erase(iter); } } + +//static +void LLHTTPSender::setDefaultSender(LLHTTPSender* sender) +{ + delete defaultSender; + defaultSender = sender; +} diff --git a/indra/llmessage/llhttpsender.h b/indra/llmessage/llhttpsender.h index a9f42579c2..0ba8e30945 100644 --- a/indra/llmessage/llhttpsender.h +++ b/indra/llmessage/llhttpsender.h @@ -33,6 +33,9 @@ class LLHTTPSender /** @brief Clear sender for host. */ static void clearSender(const LLHost& host); + + /** @brief Set default sender, takes ownership of sender. */ + static void setDefaultSender(LLHTTPSender* sender); }; #endif // LL_HTTP_SENDER_H diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp index e96b23f134..d1e4a8af31 100644 --- a/indra/llmessage/lliosocket.cpp +++ b/indra/llmessage/lliosocket.cpp @@ -401,6 +401,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( PUMP_DEBUG; apr_size_t len; bool done = false; + apr_status_t status = APR_SUCCESS; while(it != end) { @@ -408,9 +409,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( if((*it).isOnChannel(channels.in())) { PUMP_DEBUG; - // *FIX: check return code - sockets will fail (broken, etc.) len = (apr_size_t)segment.size(); - apr_status_t status = apr_socket_send( + status = apr_socket_send( mDestination->getSocket(), (const char*)segment.data(), &len); @@ -418,12 +418,12 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( // completed immediately' error from apr_socket_send. In this // case we break and the data will be sent the next time the chain // is pumped. -#if LL_WINDOWS - if (status == 730035) + if(APR_STATUS_IS_EAGAIN(status)) + { + ll_apr_warn_status(status); break; -#else - (void) status; -#endif + } + mLastWritten = segment.data() + len - 1; PUMP_DEBUG; diff --git a/indra/llmessage/llmessagebuilder.h b/indra/llmessage/llmessagebuilder.h index 7ae09c54d5..7bbf7ebd56 100644 --- a/indra/llmessage/llmessagebuilder.h +++ b/indra/llmessage/llmessagebuilder.h @@ -1,3 +1,11 @@ +/** + * @file llmessagebuilder.h + * @brief Declaration of LLMessageBuilder class. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #ifndef LL_LLMESSAGEBUILDER_H #define LL_LLMESSAGEBUILDER_H @@ -20,31 +28,33 @@ public: //CLASS_LOG_TYPE(LLMessageBuilder); virtual ~LLMessageBuilder(); - virtual void newMessage(const char *name) = 0; + virtual void newMessage(const char* name) = 0; virtual void nextBlock(const char* blockname) = 0; virtual BOOL removeLastBlock() = 0; // TODO: babbage: remove this horror /** All add* methods expect pointers to canonical strings. */ - virtual void addBinaryData(const char *varname, const void *data, - S32 size) = 0; + virtual void addBinaryData( + const char* varname, + const void* data, + S32 size) = 0; virtual void addBOOL(const char* varname, BOOL b) = 0; - virtual void addS8(const char *varname, S8 s) = 0; - virtual void addU8(const char *varname, U8 u) = 0; - virtual void addS16(const char *varname, S16 i) = 0; - virtual void addU16(const char *varname, U16 i) = 0; - virtual void addF32(const char *varname, F32 f) = 0; - virtual void addS32(const char *varname, S32 s) = 0; - virtual void addU32(const char *varname, U32 u) = 0; - virtual void addU64(const char *varname, U64 lu) = 0; - virtual void addF64(const char *varname, F64 d) = 0; - virtual void addVector3(const char *varname, const LLVector3& vec) = 0; - virtual void addVector4(const char *varname, const LLVector4& vec) = 0; - virtual void addVector3d(const char *varname, const LLVector3d& vec) = 0; - virtual void addQuat(const char *varname, const LLQuaternion& quat) = 0; - virtual void addUUID(const char *varname, const LLUUID& uuid) = 0; - virtual void addIPAddr(const char *varname, const U32 ip) = 0; - virtual void addIPPort(const char *varname, const U16 port) = 0; + virtual void addS8(const char* varname, S8 s) = 0; + virtual void addU8(const char* varname, U8 u) = 0; + virtual void addS16(const char* varname, S16 i) = 0; + virtual void addU16(const char* varname, U16 i) = 0; + virtual void addF32(const char* varname, F32 f) = 0; + virtual void addS32(const char* varname, S32 s) = 0; + virtual void addU32(const char* varname, U32 u) = 0; + virtual void addU64(const char* varname, U64 lu) = 0; + virtual void addF64(const char* varname, F64 d) = 0; + virtual void addVector3(const char* varname, const LLVector3& vec) = 0; + virtual void addVector4(const char* varname, const LLVector4& vec) = 0; + virtual void addVector3d(const char* varname, const LLVector3d& vec) = 0; + virtual void addQuat(const char* varname, const LLQuaternion& quat) = 0; + virtual void addUUID(const char* varname, const LLUUID& uuid) = 0; + virtual void addIPAddr(const char* varname, const U32 ip) = 0; + virtual void addIPPort(const char* varname, const U16 port) = 0; virtual void addString(const char* varname, const char* s) = 0; virtual void addString(const char* varname, const std::string& s) = 0; @@ -54,7 +64,10 @@ public: virtual BOOL isBuilt() const = 0; virtual BOOL isClear() const = 0; - virtual U32 buildMessage(U8* buffer, U32 buffer_size) = 0; + virtual U32 buildMessage( + U8* buffer, + U32 buffer_size, + U8 offset_to_data) = 0; /**< Return built message size */ virtual void clearMessage() = 0; diff --git a/indra/llmessage/llmessageconfig.cpp b/indra/llmessage/llmessageconfig.cpp index 3cc17d67df..dd2d725d32 100644 --- a/indra/llmessage/llmessageconfig.cpp +++ b/indra/llmessage/llmessageconfig.cpp @@ -12,37 +12,44 @@ #include "llfile.h" #include "lllivefile.h" #include "llsd.h" +#include "llsdutil.h" #include "llsdserialize.h" +#include "message.h" static const char messageConfigFileName[] = "message.xml"; static const F32 messageConfigRefreshRate = 5.0; // seconds + static std::string sServerName = ""; static std::string sConfigDir = ""; +static std::string sServerDefault; +static LLSD sMessages; + + class LLMessageConfigFile : public LLLiveFile { -private: +public: LLMessageConfigFile() - : LLLiveFile(fileName(), messageConfigRefreshRate), - mChanged(false) + : LLLiveFile(fileName(), messageConfigRefreshRate) { } static std::string fileName(); - -public: + + LLSD mMessages; + std::string mServerDefault; + static LLMessageConfigFile& instance(); // return the singleton configuration file -protected: /* virtual */ void loadFile(); void loadServerDefaults(const LLSD& data); void loadMessages(const LLSD& data); + void loadCapBans(const LLSD& blacklist); + void loadMessageBans(const LLSD& blacklist); + bool isCapBanned(const std::string& cap_name) const; public: - bool mChanged; - - std::string mServerDefault; - LLSD mMessages; + LLSD mCapBans; }; std::string LLMessageConfigFile::fileName() @@ -82,26 +89,63 @@ void LLMessageConfigFile::loadFile() } loadServerDefaults(data); loadMessages(data); + loadCapBans(data); + loadMessageBans(data); } void LLMessageConfigFile::loadServerDefaults(const LLSD& data) { mServerDefault = data["serverDefaults"][sServerName].asString(); - lldebugs << "loading default " << mServerDefault << llendl; } void LLMessageConfigFile::loadMessages(const LLSD& data) { - LLPointer<LLSDXMLFormatter> formatter = new LLSDXMLFormatter; - std::ostringstream out; - mMessages = data["messages"]; + +#ifdef DEBUG + std::ostringstream out; + LLSDXMLFormatter *formatter = new LLSDXMLFormatter; formatter->format(mMessages, out); - lldebugs << "loading ... " << out.str() + llinfos << "loading ... " << out.str() << " LLMessageConfigFile::loadMessages loaded " << mMessages.size() << " messages" << llendl; +#endif } +void LLMessageConfigFile::loadCapBans(const LLSD& data) +{ + LLSD bans = data["capBans"]; + if (!bans.isMap()) + { + llinfos << "LLMessageConfigFile::loadCapBans: missing capBans section" + << llendl; + return; + } + + mCapBans = bans; + + llinfos << "LLMessageConfigFile::loadCapBans: " + << bans.size() << " ban tests" << llendl; +} + +void LLMessageConfigFile::loadMessageBans(const LLSD& data) +{ + LLSD bans = data["messageBans"]; + if (!bans.isMap()) + { + llinfos << "LLMessageConfigFile::loadMessageBans: missing messageBans section" + << llendl; + return; + } + + gMessageSystem->setMessageBans(bans["trusted"], bans["untrusted"]); +} + +bool LLMessageConfigFile::isCapBanned(const std::string& cap_name) const +{ + llinfos << "mCapBans is " << LLSDXMLStreamer(mCapBans) << llendl; + return mCapBans[cap_name]; +} //--------------------------------------------------------------- // LLMessageConfig @@ -114,98 +158,77 @@ void LLMessageConfig::initClass(const std::string& server_name, sServerName = server_name; sConfigDir = config_dir; (void) LLMessageConfigFile::instance(); - llinfos << "LLMessageConfig::intiClass config file " + llinfos << "LLMessageConfig::initClass config file " << config_dir << "/" << messageConfigFileName << llendl; } //static -bool LLMessageConfig::isServerDefaultBuilderLLSD() +void LLMessageConfig::useConfig(const LLSD& config) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isServerDefaultBuilderLLSD() before" - << " LLMessageConfig::initClass()" << llendl; - } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - return (file.mServerDefault == "llsd"); -} + LLMessageConfigFile &the_file = LLMessageConfigFile::instance(); + the_file.loadServerDefaults(config); + the_file.loadMessages(config); + the_file.loadCapBans(config); + the_file.loadMessageBans(config); -//static -bool LLMessageConfig::isServerDefaultBuilderTemplate() -{ - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isServerDefaultBuilderTemplate() before" - << " LLMessageConfig::initClass()" << llendl; - } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - return (file.mServerDefault == "template"); } //static -bool LLMessageConfig::isMessageBuiltLLSD(const std::string& msg_name) +LLMessageConfig::Flavor LLMessageConfig::getServerDefaultFlavor() { - if (sServerName.empty()) + LLMessageConfigFile& file = LLMessageConfigFile::instance(); + if (file.mServerDefault == "llsd") { - llerrs << "LLMessageConfig::isMessageBuiltLLSD(name) before" - << " LLMessageConfig::initClass()" << llendl; + return LLSD_FLAVOR; } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - LLSD config = file.mMessages[msg_name]; - if (!config.has("builder")) + if (file.mServerDefault == "template") { - return isServerDefaultBuilderLLSD(); + return TEMPLATE_FLAVOR; } - return (config["builder"].asString() == "llsd"); + return NO_FLAVOR; } //static -bool LLMessageConfig::isMessageBuiltTemplate(const std::string& msg_name) +LLMessageConfig::Flavor LLMessageConfig::getMessageFlavor(const std::string& msg_name) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isMessageBuiltTemplate(name) before" - << " LLMessageConfig::initClass()" << llendl; - } LLMessageConfigFile& file = LLMessageConfigFile::instance(); LLSD config = file.mMessages[msg_name]; - if (!config.has("builder")) + if (config["flavor"].asString() == "llsd") { - return isServerDefaultBuilderTemplate(); + return LLSD_FLAVOR; } - return (config["builder"].asString() == "template"); + if (config["flavor"].asString() == "template") + { + return TEMPLATE_FLAVOR; + } + return NO_FLAVOR; } //static -bool LLMessageConfig::isMessageTrusted(const std::string& msg_name) +LLMessageConfig::SenderTrust LLMessageConfig::getSenderTrustedness( + const std::string& msg_name) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isMessageTrusted(name) before" - << " LLMessageConfig::initClass()" << llendl; - } LLMessageConfigFile& file = LLMessageConfigFile::instance(); LLSD config = file.mMessages[msg_name]; - if (!config.has("trusted-sender")) + if (config.has("trusted-sender")) { - return false; + return config["trusted-sender"].asBoolean() ? TRUSTED : UNTRUSTED; } - return config["trusted-sender"].asBoolean(); + return NOT_SET; } //static -bool LLMessageConfig::isValidUntrustedMessage(const std::string& msg_name) +bool LLMessageConfig::isValidMessage(const std::string& msg_name) { if (sServerName.empty()) { - llerrs << "LLMessageConfig::isMessageTrusted(name) before" - << " LLMessageConfig::initClass()" << llendl; + llerrs << "LLMessageConfig::initClass() not called" << llendl; } LLMessageConfigFile& file = LLMessageConfigFile::instance(); - LLSD config = file.mMessages[msg_name]; - if (!config.has("trusted-sender")) - { - return false; - } - return !(config["trusted-sender"].asBoolean()); + return file.mMessages.has(msg_name); +} + +bool LLMessageConfig::isCapBanned(const std::string& cap_name) +{ + return LLMessageConfigFile::instance().isCapBanned(cap_name); } diff --git a/indra/llmessage/llmessageconfig.h b/indra/llmessage/llmessageconfig.h index 2fb6f2077e..a99cdc46fa 100644 --- a/indra/llmessage/llmessageconfig.h +++ b/indra/llmessage/llmessageconfig.h @@ -11,21 +11,24 @@ #include <string> +class LLSD; + class LLMessageConfig { public: + enum Flavor { NO_FLAVOR=0, LLSD_FLAVOR=1, TEMPLATE_FLAVOR=2 }; + enum SenderTrust { NOT_SET=0, UNTRUSTED=1, TRUSTED=2 }; + static void initClass(const std::string& server_name, const std::string& config_dir); - // force loading of config file during startup process - // so it can be used for startup features + static void useConfig(const LLSD& config); - static bool isServerDefaultBuilderLLSD(); - static bool isServerDefaultBuilderTemplate(); + static Flavor getServerDefaultFlavor(); // For individual messages - static bool isMessageBuiltLLSD(const std::string& msg_name); - static bool isMessageBuiltTemplate(const std::string& msg_name); - static bool isMessageTrusted(const std::string& msg_name); - static bool isValidUntrustedMessage(const std::string& msg_name); + static Flavor getMessageFlavor(const std::string& msg_name); + static SenderTrust getSenderTrustedness(const std::string& msg_name); + static bool isValidMessage(const std::string& msg_name); + static bool isCapBanned(const std::string& cap_name); }; #endif // LL_MESSAGECONFIG_H diff --git a/indra/llmessage/llmessagereader.cpp b/indra/llmessage/llmessagereader.cpp index 4824480e32..5375fab0f8 100644 --- a/indra/llmessage/llmessagereader.cpp +++ b/indra/llmessage/llmessagereader.cpp @@ -1,3 +1,11 @@ +/** + * @file llmessagereader.cpp + * @brief LLMessageReader class implementation + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #include "llmessagereader.h" static BOOL sTimeDecodes = FALSE; diff --git a/indra/llmessage/llmessagereader.h b/indra/llmessage/llmessagereader.h index 33ce9289f5..65a7032754 100644 --- a/indra/llmessage/llmessagereader.h +++ b/indra/llmessage/llmessagereader.h @@ -1,3 +1,11 @@ +/** + * @file llmessagereader.h + * @brief Declaration of LLMessageReader class. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #ifndef LL_LLMESSAGEREADER_H #define LL_LLMESSAGEREADER_H @@ -45,6 +53,7 @@ class LLMessageReader virtual void clearMessage() = 0; + /** Returns pointer to canonical (prehashed) string. */ virtual const char* getMessageName() const = 0; virtual S32 getMessageSize() const = 0; diff --git a/indra/llmessage/llmessagetemplate.cpp b/indra/llmessage/llmessagetemplate.cpp index 026843d6ec..7383308ddd 100644 --- a/indra/llmessage/llmessagetemplate.cpp +++ b/indra/llmessage/llmessagetemplate.cpp @@ -1,3 +1,11 @@ +/** + * @file llmessagetemplate.cpp + * @brief Implementation of message template classes. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #include "linden_common.h" #include "llmessagetemplate.h" @@ -94,7 +102,7 @@ std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg) for (LLMessageBlock::message_variable_map_t::iterator iter = msg.mMemberVariables.begin(); iter != msg.mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = *(*iter); s << ci; } @@ -138,7 +146,7 @@ std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg) for (LLMessageTemplate::message_block_map_t::iterator iter = msg.mMemberBlocks.begin(); iter != msg.mMemberBlocks.end(); iter++) { - LLMessageBlock* ci = iter->second; + LLMessageBlock* ci = *iter; s << *ci; } diff --git a/indra/llmessage/llmessagetemplate.h b/indra/llmessage/llmessagetemplate.h index 8847ddc0d9..b7a661fa1a 100644 --- a/indra/llmessage/llmessagetemplate.h +++ b/indra/llmessage/llmessagetemplate.h @@ -1,3 +1,11 @@ +/** + * @file llmessagetemplate.h + * @brief Declaration of the message template classes. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #ifndef LL_LLMESSAGETEMPLATE_H #define LL_LLMESSAGETEMPLATE_H @@ -123,7 +131,7 @@ public: mName = name; } - LLMessageVariable(char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size) + LLMessageVariable(const char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size) { mName = gMessageStringTable.getString(name); } @@ -154,14 +162,14 @@ typedef enum e_message_block_type class LLMessageBlock { public: - LLMessageBlock(char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0) + LLMessageBlock(const char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0) { mName = gMessageStringTable.getString(name); } ~LLMessageBlock() { - for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePairedPointer()); + for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePointer()); } void addVariable(char *name, const EMsgVariableType type, const S32 size) @@ -193,9 +201,15 @@ public: return (mMemberVariables[name])->getSize(); } + const LLMessageVariable* getVariable(char* name) const + { + message_variable_map_t::const_iterator iter = mMemberVariables.find(name); + return iter != mMemberVariables.end()? *iter : NULL; + } + friend std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg); - typedef std::map<const char *, LLMessageVariable*> message_variable_map_t; + typedef LLDynamicArrayIndexed<LLMessageVariable*, const char *, 8> message_variable_map_t; message_variable_map_t mMemberVariables; char *mName; EMsgBlockType mType; @@ -224,6 +238,13 @@ enum EMsgEncoding ME_ZEROCODED }; +enum EMsgDeprecation +{ + MD_NOTDEPRECATED, + MD_UDPDEPRECATED, + MD_DEPRECATED +}; + class LLMessageTemplate { public: @@ -234,7 +255,8 @@ public: mFrequency(freq), mTrust(MT_NOTRUST), mEncoding(ME_ZEROCODED), - mMessageNumber(message_number), + mDeprecation(MD_NOTDEPRECATED), + mMessageNumber(message_number), mTotalSize(0), mReceiveCount(0), mReceiveBytes(0), @@ -253,8 +275,8 @@ public: ~LLMessageTemplate() { - for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePairedPointer()); - } + for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePointer()); +} void addBlock(LLMessageBlock *blockp) { @@ -289,7 +311,7 @@ public: mTrust = t; } - EMsgTrust getTrust(void) + EMsgTrust getTrust(void) const { return mTrust; } @@ -299,18 +321,28 @@ public: { mEncoding = e; } - EMsgEncoding getEncoding() + EMsgEncoding getEncoding() const { return mEncoding; } + void setDeprecation(EMsgDeprecation d) + { + mDeprecation = d; + } + + EMsgDeprecation getDeprecation() const + { + return mDeprecation; + } + void setHandlerFunc(void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data) { mHandlerFunc = handler_func; mUserData = user_data; } - BOOL callHandlerFunc(LLMessageSystem *msgsystem) + BOOL callHandlerFunc(LLMessageSystem *msgsystem) const { if (mHandlerFunc) { @@ -320,20 +352,27 @@ public: return FALSE; } - bool isBanned(bool trustedSource) + bool isBanned(bool trustedSource) const { return trustedSource ? mBanFromTrusted : mBanFromUntrusted; } friend std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg); + const LLMessageBlock* getBlock(char* name) const + { + message_block_map_t::const_iterator iter = mMemberBlocks.find(name); + return iter != mMemberBlocks.end()? *iter : NULL; + } + public: - typedef std::map<char*, LLMessageBlock*> message_block_map_t; + typedef LLDynamicArrayIndexed<LLMessageBlock*, char*, 8> message_block_map_t; message_block_map_t mMemberBlocks; char *mName; EMsgFrequency mFrequency; EMsgTrust mTrust; EMsgEncoding mEncoding; + EMsgDeprecation mDeprecation; U32 mMessageNumber; S32 mTotalSize; U32 mReceiveCount; // how many of this template have been received since last reset diff --git a/indra/llmessage/llmessagetemplateparser.cpp b/indra/llmessage/llmessagetemplateparser.cpp new file mode 100644 index 0000000000..9c6dd8c73a --- /dev/null +++ b/indra/llmessage/llmessagetemplateparser.cpp @@ -0,0 +1,734 @@ +/** + * @file llmessagetemplateparser.cpp + * @brief LLMessageTemplateParser implementation + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "llmessagetemplateparser.h" +#include <boost/tokenizer.hpp> + + +// What follows is a bunch of C functions to do validation. + +// Lets support a small subset of regular expressions here +// Syntax is a string made up of: +// a - checks against alphanumeric ([A-Za-z0-9]) +// c - checks against character ([A-Za-z]) +// f - checks against first variable character ([A-Za-z_]) +// v - checks against variable ([A-Za-z0-9_]) +// s - checks against sign of integer ([-0-9]) +// d - checks against integer digit ([0-9]) +// * - repeat last check + +// checks 'a' +BOOL b_return_alphanumeric_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&( (c < '0') + ||(c > '9'))) + { + return FALSE; + } + return TRUE; +} + +// checks 'c' +BOOL b_return_character_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z'))) + { + return FALSE; + } + return TRUE; +} + +// checks 'f' +BOOL b_return_first_variable_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&(c != '_')) + { + return FALSE; + } + return TRUE; +} + +// checks 'v' +BOOL b_return_variable_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&( (c < '0') + ||(c > '9')) + &&(c != '_')) + { + return FALSE; + } + return TRUE; +} + +// checks 's' +BOOL b_return_signed_integer_ok(char c) +{ + if ( ( (c < '0') + ||(c > '9')) + &&(c != '-')) + { + return FALSE; + } + return TRUE; +} + +// checks 'd' +BOOL b_return_integer_ok(char c) +{ + if ( (c < '0') + ||(c > '9')) + { + return FALSE; + } + return TRUE; +} + +BOOL (*gParseCheckCharacters[])(char c) = +{ + b_return_alphanumeric_ok, + b_return_character_ok, + b_return_first_variable_ok, + b_return_variable_ok, + b_return_signed_integer_ok, + b_return_integer_ok +}; + +S32 get_checker_number(char checker) +{ + switch(checker) + { + case 'a': + return 0; + case 'c': + return 1; + case 'f': + return 2; + case 'v': + return 3; + case 's': + return 4; + case 'd': + return 5; + case '*': + return 9999; + default: + return -1; + } +} + +// check token based on passed simplified regular expression +BOOL b_check_token(const char *token, char *regexp) +{ + S32 tptr, rptr = 0; + S32 current_checker, next_checker = 0; + + current_checker = get_checker_number(regexp[rptr++]); + + if (current_checker == -1) + { + llerrs << "Invalid regular expression value!" << llendl; + return FALSE; + } + + if (current_checker == 9999) + { + llerrs << "Regular expression can't start with *!" << llendl; + return FALSE; + } + + for (tptr = 0; token[tptr]; tptr++) + { + if (current_checker == -1) + { + llerrs << "Input exceeds regular expression!\nDid you forget a *?" << llendl; + return FALSE; + } + + if (!gParseCheckCharacters[current_checker](token[tptr])) + { + return FALSE; + } + if (next_checker != 9999) + { + next_checker = get_checker_number(regexp[rptr++]); + if (next_checker != 9999) + { + current_checker = next_checker; + } + } + } + return TRUE; +} + +// C variable can be made up of upper or lower case letters, underscores, or numbers, but can't start with a number +BOOL b_variable_ok(const char *token) +{ + if (!b_check_token(token, "fv*")) + { + llwarns << "Token '" << token << "' isn't a variable!" << llendl; + return FALSE; + } + return TRUE; +} + +// An integer is made up of the digits 0-9 and may be preceded by a '-' +BOOL b_integer_ok(const char *token) +{ + if (!b_check_token(token, "sd*")) + { + llwarns << "Token isn't an integer!" << llendl; + return FALSE; + } + return TRUE; +} + +// An integer is made up of the digits 0-9 +BOOL b_positive_integer_ok(const char *token) +{ + if (!b_check_token(token, "d*")) + { + llwarns << "Token isn't an integer!" << llendl; + return FALSE; + } + return TRUE; +} + + +// Done with C functions, here's the tokenizer. + +typedef boost::tokenizer< boost::char_separator<char> > tokenizer; + +LLTemplateTokenizer::LLTemplateTokenizer(const std::string & contents) : mStarted(false), mTokens() +{ + boost::char_separator<char> newline("\r\n", "", boost::keep_empty_tokens); + boost::char_separator<char> spaces(" \t"); + U32 line_counter = 1; + + tokenizer line_tokens(contents, newline); + for(tokenizer::iterator line_iter = line_tokens.begin(); + line_iter != line_tokens.end(); + ++line_iter, ++line_counter) + { + tokenizer word_tokens(*line_iter, spaces); + for(tokenizer::iterator word_iter = word_tokens.begin(); + word_iter != word_tokens.end(); + ++word_iter) + { + if((*word_iter)[0] == '/') + { + break; // skip to end of line on comments + } + positioned_token pt;// = new positioned_token(); + pt.str = std::string(*word_iter); + pt.line = line_counter; + mTokens.push_back(pt); + } + } + mCurrent = mTokens.begin(); +} +void LLTemplateTokenizer::inc() +{ + if(atEOF()) + { + error("trying to increment token of EOF"); + } + else if(mStarted) + { + ++mCurrent; + } + else + { + mStarted = true; + mCurrent = mTokens.begin(); + } +} +void LLTemplateTokenizer::dec() +{ + if(mCurrent == mTokens.begin()) + { + if(mStarted) + { + mStarted = false; + } + else + { + error("trying to decrement past beginning of file"); + } + } + else + { + mCurrent--; + } +} + +std::string LLTemplateTokenizer::get() const +{ + if(atEOF()) + { + error("trying to get EOF"); + } + return mCurrent->str; +} + +U32 LLTemplateTokenizer::line() const +{ + if(atEOF()) + { + return 0; + } + return mCurrent->line; +} + +bool LLTemplateTokenizer::atEOF() const +{ + return mCurrent == mTokens.end(); +} + +std::string LLTemplateTokenizer::next() +{ + inc(); + return get(); +} + +bool LLTemplateTokenizer::want(const std::string & token) +{ + if(atEOF()) return false; + inc(); + if(atEOF()) return false; + if(get() != token) + { + dec(); // back up a step + return false; + } + return true; +} + +bool LLTemplateTokenizer::wantEOF() +{ + // see if the next token is EOF + if(atEOF()) return true; + inc(); + if(!atEOF()) + { + dec(); // back up a step + return false; + } + return true; +} + +void LLTemplateTokenizer::error(std::string message) const +{ + if(atEOF()) + { + llerrs << "Unexpected end of file: " << message << llendl; + } + else + { + llerrs << "Problem parsing message template at line " + << line() << ", with token '" << get() << "' : " + << message << llendl; + } +} + + +// Done with tokenizer, next is the parser. + +LLTemplateParser::LLTemplateParser(LLTemplateTokenizer & tokens): + mVersion(0.f), + mMessages() +{ + // the version number should be the first thing in the file + if (tokens.want("version")) + { + // version number + std::string vers_string = tokens.next(); + mVersion = (F32)atof(vers_string.c_str()); + + llinfos << "### Message template version " << mVersion << " ###" << llendl; + } + else + { + llerrs << "Version must be first in the message template, found " + << tokens.next() << llendl; + } + + while(LLMessageTemplate * templatep = parseMessage(tokens)) + { + if (templatep->getDeprecation() != MD_DEPRECATED) + { + mMessages.push_back(templatep); + } + } + + if(!tokens.wantEOF()) + { + llerrs << "Expected end of template or a message, instead found: " + << tokens.next() << " at " << tokens.line() << llendl; + } +} + +F32 LLTemplateParser::getVersion() const +{ + return mVersion; +} + +LLTemplateParser::message_iterator LLTemplateParser::getMessagesBegin() const +{ + return mMessages.begin(); +} + +LLTemplateParser::message_iterator LLTemplateParser::getMessagesEnd() const +{ + return mMessages.end(); +} + + +// static +LLMessageTemplate * LLTemplateParser::parseMessage(LLTemplateTokenizer & tokens) +{ + LLMessageTemplate *templatep = NULL; + if(!tokens.want("{")) + { + return NULL; + } + + // name first + std::string template_name = tokens.next(); + + // is name a legit C variable name + if (!b_variable_ok(template_name.c_str())) + { + llerrs << "Not legit variable name: " << template_name << " at " << tokens.line() << llendl; + } + + // ok, now get Frequency ("High", "Medium", or "Low") + EMsgFrequency frequency = MFT_LOW; + std::string freq_string = tokens.next(); + if (freq_string == "High") + { + frequency = MFT_HIGH; + } + else if (freq_string == "Medium") + { + frequency = MFT_MEDIUM; + } + else if (freq_string == "Low" || freq_string == "Fixed") + { + frequency = MFT_LOW; + } + else + { + llerrs << "Expected frequency, got " << freq_string << " at " << tokens.line() << llendl; + } + + // TODO more explicit checking here pls + U32 message_number = strtoul(tokens.next().c_str(),NULL,0); + + switch (frequency) { + case MFT_HIGH: + break; + case MFT_MEDIUM: + message_number = (255 << 8) | message_number; + break; + case MFT_LOW: + message_number = (255 << 24) | (255 << 16) | message_number; + break; + default: + llerrs << "Unknown frequency enum: " << frequency << llendl; + } + + templatep = new LLMessageTemplate( + template_name.c_str(), + message_number, + frequency); + + // Now get trust ("Trusted", "NotTrusted") + std::string trust = tokens.next(); + if (trust == "Trusted") + { + templatep->setTrust(MT_TRUST); + } + else if (trust == "NotTrusted") + { + templatep->setTrust(MT_NOTRUST); + } + else + { + llerrs << "Bad trust " << trust << " at " << tokens.line() << llendl; + } + + // get encoding + std::string encoding = tokens.next(); + if(encoding == "Unencoded") + { + templatep->setEncoding(ME_UNENCODED); + } + else if(encoding == "Zerocoded") + { + templatep->setEncoding(ME_ZEROCODED); + } + else + { + llerrs << "Bad encoding " << encoding << " at " << tokens.line() << llendl; + } + + // get deprecation + if(tokens.want("Deprecated")) + { + templatep->setDeprecation(MD_DEPRECATED); + } + else if (tokens.want("UDPDeprecated")) + { + templatep->setDeprecation(MD_UDPDEPRECATED); + } + else if (tokens.want("NotDeprecated")) + { + // this is the default value, but it can't hurt to set it twice + templatep->setDeprecation(MD_NOTDEPRECATED); + } + else { + // It's probably a brace, let's just start block processing + } + + while(LLMessageBlock * blockp = parseBlock(tokens)) + { + templatep->addBlock(blockp); + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for message " << template_name + << " at " << tokens.line() << llendl; + } + return templatep; +} + +// static +LLMessageBlock * LLTemplateParser::parseBlock(LLTemplateTokenizer & tokens) +{ + LLMessageBlock * blockp = NULL; + + if(!tokens.want("{")) + { + return NULL; + } + + // name first + std::string block_name = tokens.next(); + + // is name a legit C variable name + if (!b_variable_ok(block_name.c_str())) + { + llerrs << "not a legal block name: " << block_name + << " at " << tokens.line() << llendl; + } + + // now, block type ("Single", "Multiple", or "Variable") + std::string block_type = tokens.next(); + // which one is it? + if (block_type == "Single") + { + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), MBT_SINGLE); + } + else if (block_type == "Multiple") + { + // need to get the number of repeats + std::string repeats = tokens.next(); + + // is it a legal integer + if (!b_positive_integer_ok(repeats.c_str())) + { + llerrs << "not a legal integer for block multiple count: " + << repeats << " at " << tokens.line() << llendl; + } + + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), + MBT_MULTIPLE, + atoi(repeats.c_str())); + } + else if (block_type == "Variable") + { + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), MBT_VARIABLE); + } + else + { + llerrs << "bad block type: " << block_type + << " at " << tokens.line() << llendl; + } + + + while(LLMessageVariable * varp = parseVariable(tokens)) + { + blockp->addVariable(varp->getName(), + varp->getType(), + varp->getSize()); + delete varp; + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for block " << block_name + << " at " << tokens.line() << llendl; + } + return blockp; + +} + +// static +LLMessageVariable * LLTemplateParser::parseVariable(LLTemplateTokenizer & tokens) +{ + LLMessageVariable * varp = NULL; + if(!tokens.want("{")) + { + return NULL; + } + + std::string var_name = tokens.next(); + + if (!b_variable_ok(var_name.c_str())) + { + llerrs << "Not a legit variable name: " << var_name + << " at " << tokens.line() << llendl; + } + + std::string var_type = tokens.next(); + + if (var_type == "U8") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U8, 1); + } + else if (var_type == "U16") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U16, 2); + } + else if (var_type == "U32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U32, 4); + } + else if (var_type == "U64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U64, 8); + } + else if (var_type == "S8") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S8, 1); + } + else if (var_type == "S16") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S16, 2); + } + else if (var_type == "S32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S32, 4); + } + else if (var_type == "S64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S64, 8); + } + else if (var_type == "F32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_F32, 4); + } + else if (var_type == "F64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_F64, 8); + } + else if (var_type == "LLVector3") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector3, 12); + } + else if (var_type == "LLVector3d") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector3d, 24); + } + else if (var_type == "LLVector4") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector4, 16); + } + else if (var_type == "LLQuaternion") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLQuaternion, 12); + } + else if (var_type == "LLUUID") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLUUID, 16); + } + else if (var_type == "BOOL") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_BOOL, 1); + } + else if (var_type == "IPADDR") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_IP_ADDR, 4); + } + else if (var_type == "IPPORT") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_IP_PORT, 2); + } + else if (var_type == "Fixed" || var_type == "Variable") + { + std::string variable_size = tokens.next(); + + if (!b_positive_integer_ok(variable_size.c_str())) + { + llerrs << "not a legal integer variable size: " << variable_size + << " at " << tokens.line() << llendl; + } + + EMsgVariableType type_enum; + if(var_type == "Variable") + { + type_enum = MVT_VARIABLE; + } + else if(var_type == "Fixed") + { + type_enum = MVT_FIXED; + } + else + { + type_enum = MVT_FIXED; // removes a warning + llerrs << "bad variable type: " << var_type + << " at " << tokens.line() << llendl; + } + + varp = new LLMessageVariable( + var_name.c_str(), + type_enum, + atoi(variable_size.c_str())); + } + else + { + llerrs << "bad variable type:" << var_type + << " at " << tokens.line() << llendl; + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for variable " << var_name + << " at " << tokens.line() << llendl; + } + return varp; +} diff --git a/indra/llmessage/llmessagetemplateparser.h b/indra/llmessage/llmessagetemplateparser.h new file mode 100644 index 0000000000..0fba42bc41 --- /dev/null +++ b/indra/llmessage/llmessagetemplateparser.h @@ -0,0 +1,62 @@ +/** + * @file llmessagetemplateparser.h + * @brief Classes to parse message template. + * + * Copyright (c) 2000-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_MESSAGETEMPLATEPARSER_H +#define LL_MESSAGETEMPLATEPARSER_H + +#include <string> +#include "llmessagetemplate.h" + +class LLTemplateTokenizer +{ +public: + LLTemplateTokenizer(const std::string & contents); + + U32 line() const; + bool atEOF() const; + std::string next(); + + bool want(const std::string & token); + bool wantEOF(); +private: + void inc(); + void dec(); + std::string get() const; + void error(std::string message = "generic") const; + + struct positioned_token + { + std::string str; + U32 line; + }; + + bool mStarted; + std::list<positioned_token> mTokens; + std::list<positioned_token>::const_iterator mCurrent; +}; + +class LLTemplateParser +{ +public: + typedef std::list<LLMessageTemplate *>::const_iterator message_iterator; + + static LLMessageTemplate * parseMessage(LLTemplateTokenizer & tokens); + static LLMessageBlock * parseBlock(LLTemplateTokenizer & tokens); + static LLMessageVariable * parseVariable(LLTemplateTokenizer & tokens); + + LLTemplateParser(LLTemplateTokenizer & tokens); + message_iterator getMessagesBegin() const; + message_iterator getMessagesEnd() const; + F32 getVersion() const; + +private: + F32 mVersion; + std::list<LLMessageTemplate *> mMessages; +}; + +#endif diff --git a/indra/llmessage/llmsgvariabletype.h b/indra/llmessage/llmsgvariabletype.h index 360d949690..23370d2f48 100644 --- a/indra/llmessage/llmsgvariabletype.h +++ b/indra/llmessage/llmsgvariabletype.h @@ -1,3 +1,11 @@ +/** + * @file llmsgvariabletype.h + * @brief Declaration of the EMsgVariableType enumeration. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #ifndef LL_LLMSGVARIABLETYPE_H #define LL_LLMSGVARIABLETYPE_H diff --git a/indra/llmessage/llpacketack.cpp b/indra/llmessage/llpacketack.cpp new file mode 100644 index 0000000000..c0c8028ca3 --- /dev/null +++ b/indra/llmessage/llpacketack.cpp @@ -0,0 +1,64 @@ +/** + * @file llpacketack.cpp + * @author Phoenix + * @date 2007-05-09 + * @brief Implementation of the LLReliablePacket. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "linden_common.h" +#include "llpacketack.h" + +#if !LL_WINDOWS +#include <netinet/in.h> +#else +#include "winsock2.h" +#endif + +#include "message.h" + +LLReliablePacket::LLReliablePacket( + S32 socket, + U8* buf_ptr, + S32 buf_len, + LLReliablePacketParams* params) : + mBuffer(NULL), + mBufferLength(0) +{ + if (params) + { + mHost = params->mHost; + mRetries = params->mRetries; + mPingBasedRetry = params->mPingBasedRetry; + mTimeout = params->mTimeout; + mCallback = params->mCallback; + mCallbackData = params->mCallbackData; + mMessageName = params->mMessageName; + } + else + { + mRetries = 0; + mPingBasedRetry = TRUE; + mTimeout = 0.f; + mCallback = NULL; + mCallbackData = NULL; + mMessageName = NULL; + } + + mExpirationTime = (F64)((S64)totalTime())/1000000.0 + mTimeout; + mPacketID = ntohl(*((U32*)(&buf_ptr[PHL_PACKET_ID]))); + + mSocket = socket; + if (mRetries) + { + mBuffer = new U8[buf_len]; + if (mBuffer != NULL) + { + memcpy(mBuffer,buf_ptr,buf_len); /*Flawfinder: ignore*/ + mBufferLength = buf_len; + } + + } +} diff --git a/indra/llmessage/llpacketack.h b/indra/llmessage/llpacketack.h index 4c22dc2d62..37675d2df4 100644 --- a/indra/llmessage/llpacketack.h +++ b/indra/llmessage/llpacketack.h @@ -9,37 +9,18 @@ #ifndef LL_LLPACKETACK_H #define LL_LLPACKETACK_H -#include <cstring> -#include <stdio.h> - -#include "llerror.h" -#include "lltimer.h" #include "llhost.h" -//class LLPacketAck -//{ -//public: -// LLHost mHost; -// TPACKETID mPacketID; -//public: -// LLPacketAck(const LLHost &host, TPACKETID packet_id) -// { -// mHost = host; -// mPacketID = packet_id; -// }; -// ~LLPacketAck(){}; -//}; - class LLReliablePacketParams { public: - LLHost mHost; - S32 mRetries; - BOOL mPingBasedRetry; - F32 mTimeout; - void (*mCallback)(void **,S32); - void **mCallbackData; - char *mMessageName; + LLHost mHost; + S32 mRetries; + BOOL mPingBasedRetry; + F32 mTimeout; + void (*mCallback)(void **,S32); + void** mCallbackData; + char* mMessageName; public: LLReliablePacketParams() @@ -60,9 +41,13 @@ public: mMessageName = NULL; }; - void set ( const LLHost &host, S32 retries, BOOL ping_based_retry, - F32 timeout, - void (*callback)(void **,S32), void **callback_data, char *name ) + void set( + const LLHost& host, + S32 retries, + BOOL ping_based_retry, + F32 timeout, + void (*callback)(void**,S32), + void** callback_data, char* name) { mHost = host; mRetries = retries; @@ -77,53 +62,11 @@ public: class LLReliablePacket { public: - LLReliablePacket(S32 socket, U8 *buf_ptr, S32 buf_len, LLReliablePacketParams *params) : - mBuffer(NULL), - mBufferLength(0) - { - if (params) - { - mHost = params->mHost; - mRetries = params->mRetries; - mPingBasedRetry = params->mPingBasedRetry; - mTimeout = params->mTimeout; - mCallback = params->mCallback; - mCallbackData = params->mCallbackData; - mMessageName = params->mMessageName; - } - else - { - mRetries = 0; - mPingBasedRetry = TRUE; - mTimeout = 0.f; - mCallback = NULL; - mCallbackData = NULL; - mMessageName = NULL; - } - - mExpirationTime = (F64)((S64)totalTime())/1000000.0 + mTimeout; - mPacketID = buf_ptr[1] + ((buf_ptr[0] & 0x0f ) * 256); - if (sizeof(TPACKETID) == 4) - { - mPacketID *= 256; - mPacketID += buf_ptr[2]; - mPacketID *= 256; - mPacketID += buf_ptr[3]; - } - - mSocket = socket; - if (mRetries) - { - mBuffer = new U8[buf_len]; - if (mBuffer != NULL) - { - memcpy(mBuffer,buf_ptr,buf_len); /*Flawfinder: ignore*/ - mBufferLength = buf_len; - } - - } - }; - + LLReliablePacket( + S32 socket, + U8* buf_ptr, + S32 buf_len, + LLReliablePacketParams* params); ~LLReliablePacket() { mCallback = NULL; @@ -133,22 +76,21 @@ public: friend class LLCircuitData; protected: - S32 mSocket; - LLHost mHost; - S32 mRetries; - BOOL mPingBasedRetry; - F32 mTimeout; - void (*mCallback)(void **,S32); - void **mCallbackData; - char *mMessageName; - - U8 *mBuffer; - S32 mBufferLength; + S32 mSocket; + LLHost mHost; + S32 mRetries; + BOOL mPingBasedRetry; + F32 mTimeout; + void (*mCallback)(void**,S32); + void** mCallbackData; + char* mMessageName; + + U8* mBuffer; + S32 mBufferLength; - TPACKETID mPacketID; + TPACKETID mPacketID; - F64 mExpirationTime; - + F64 mExpirationTime; }; #endif diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp index b7deb4817f..94d2378050 100755 --- a/indra/llmessage/llsdmessagebuilder.cpp +++ b/indra/llmessage/llsdmessagebuilder.cpp @@ -1,3 +1,11 @@ +/** + * @file llsdmessagebuilder.cpp + * @brief LLSDMessageBuilder class implementation. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #include "linden_common.h" #include "llsdmessagebuilder.h" @@ -28,13 +36,13 @@ LLSDMessageBuilder::~LLSDMessageBuilder() // virtual -void LLSDMessageBuilder::newMessage(const char *name) +void LLSDMessageBuilder::newMessage(const char* name) { mbSBuilt = FALSE; mbSClear = FALSE; mCurrentMessage = LLSD::emptyMap(); - mCurrentMessageName = (char *)name; + mCurrentMessageName = (char*)name; } // virtual @@ -74,8 +82,10 @@ BOOL LLSDMessageBuilder::removeLastBlock() return FALSE; } -void LLSDMessageBuilder::addBinaryData(const char *varname, - const void *data, S32 size) +void LLSDMessageBuilder::addBinaryData( + const char* varname, + const void* data, + S32 size) { std::vector<U8> v; v.resize(size); @@ -83,57 +93,57 @@ void LLSDMessageBuilder::addBinaryData(const char *varname, (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS8(const char *varname, S8 v) +void LLSDMessageBuilder::addS8(const char* varname, S8 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU8(const char *varname, U8 v) +void LLSDMessageBuilder::addU8(const char* varname, U8 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS16(const char *varname, S16 v) +void LLSDMessageBuilder::addS16(const char* varname, S16 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU16(const char *varname, U16 v) +void LLSDMessageBuilder::addU16(const char* varname, U16 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addF32(const char *varname, F32 v) +void LLSDMessageBuilder::addF32(const char* varname, F32 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS32(const char *varname, S32 v) +void LLSDMessageBuilder::addS32(const char* varname, S32 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU32(const char *varname, U32 v) +void LLSDMessageBuilder::addU32(const char* varname, U32 v) { (*mCurrentBlock)[varname] = ll_sd_from_U32(v); } -void LLSDMessageBuilder::addU64(const char *varname, U64 v) +void LLSDMessageBuilder::addU64(const char* varname, U64 v) { (*mCurrentBlock)[varname] = ll_sd_from_U64(v); } -void LLSDMessageBuilder::addF64(const char *varname, F64 v) +void LLSDMessageBuilder::addF64(const char* varname, F64 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addIPAddr(const char *varname, U32 v) +void LLSDMessageBuilder::addIPAddr(const char* varname, U32 v) { (*mCurrentBlock)[varname] = ll_sd_from_ipaddr(v); } -void LLSDMessageBuilder::addIPPort(const char *varname, U16 v) +void LLSDMessageBuilder::addIPPort(const char* varname, U16 v) { (*mCurrentBlock)[varname] = v; } @@ -159,27 +169,27 @@ void LLSDMessageBuilder::addString(const char* varname, const std::string& v) (*mCurrentBlock)[varname] = ""; } -void LLSDMessageBuilder::addVector3(const char *varname, const LLVector3& v) +void LLSDMessageBuilder::addVector3(const char* varname, const LLVector3& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector3(v); } -void LLSDMessageBuilder::addVector4(const char *varname, const LLVector4& v) +void LLSDMessageBuilder::addVector4(const char* varname, const LLVector4& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector4(v); } -void LLSDMessageBuilder::addVector3d(const char *varname, const LLVector3d& v) +void LLSDMessageBuilder::addVector3d(const char* varname, const LLVector3d& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector3d(v); } -void LLSDMessageBuilder::addQuat(const char *varname, const LLQuaternion& v) +void LLSDMessageBuilder::addQuat(const char* varname, const LLQuaternion& v) { (*mCurrentBlock)[varname] = ll_sd_from_quaternion(v); } -void LLSDMessageBuilder::addUUID(const char *varname, const LLUUID& v) +void LLSDMessageBuilder::addUUID(const char* varname, const LLUUID& v) { (*mCurrentBlock)[varname] = v; } @@ -193,9 +203,7 @@ BOOL LLSDMessageBuilder::isMessageFull(const char* blockname) const return FALSE; } -// make sure that all the desired data is in place and then copy the data -// into MAX_BUFFER_SIZEd buffer -U32 LLSDMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) +U32 LLSDMessageBuilder::buildMessage(U8*, U32, U8) { return 0; } @@ -205,7 +213,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) // copy the blocks // counting variables used to encode multiple block info S32 block_count = 0; - char *block_name = NULL; + char* block_name = NULL; // loop through msg blocks to loop through variables, totalling up size // data and filling the new (send) message @@ -222,7 +230,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) if (block_count == 0) { block_count = mbci->mBlockNumber; - block_name = (char *)mbci->mName; + block_name = (char*)mbci->mName; } // counting down mutliple blocks @@ -248,7 +256,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) void LLSDMessageBuilder::copyFromLLSD(const LLSD& msg) { mCurrentMessage = msg; - llinfos << LLSDXMLStreamer(mCurrentMessage) << llendl; + lldebugs << LLSDXMLStreamer(mCurrentMessage) << llendl; } const LLSD& LLSDMessageBuilder::getMessage() const diff --git a/indra/llmessage/llsdmessagebuilder.h b/indra/llmessage/llsdmessagebuilder.h index f04194d12f..4e0d71fd8b 100755 --- a/indra/llmessage/llsdmessagebuilder.h +++ b/indra/llmessage/llsdmessagebuilder.h @@ -1,3 +1,11 @@ +/** + * @file llsdmessagebuilder.h + * @brief Declaration of LLSDMessageBuilder class. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #ifndef LL_LLSDMESSAGEBUILDER_H #define LL_LLSDMESSAGEBUILDER_H @@ -19,31 +27,33 @@ public: LLSDMessageBuilder(); virtual ~LLSDMessageBuilder(); - virtual void newMessage(const char *name); + virtual void newMessage(const char* name); virtual void nextBlock(const char* blockname); virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror... /** All add* methods expect pointers to canonical varname strings. */ - virtual void addBinaryData(const char *varname, const void *data, - S32 size); + virtual void addBinaryData( + const char* varname, + const void* data, + S32 size); virtual void addBOOL(const char* varname, BOOL b); - virtual void addS8(const char *varname, S8 s); - virtual void addU8(const char *varname, U8 u); - virtual void addS16(const char *varname, S16 i); - virtual void addU16(const char *varname, U16 i); - virtual void addF32(const char *varname, F32 f); - virtual void addS32(const char *varname, S32 s); - virtual void addU32(const char *varname, U32 u); - virtual void addU64(const char *varname, U64 lu); - virtual void addF64(const char *varname, F64 d); - virtual void addVector3(const char *varname, const LLVector3& vec); - virtual void addVector4(const char *varname, const LLVector4& vec); - virtual void addVector3d(const char *varname, const LLVector3d& vec); - virtual void addQuat(const char *varname, const LLQuaternion& quat); - virtual void addUUID(const char *varname, const LLUUID& uuid); - virtual void addIPAddr(const char *varname, const U32 ip); - virtual void addIPPort(const char *varname, const U16 port); + virtual void addS8(const char* varname, S8 s); + virtual void addU8(const char* varname, U8 u); + virtual void addS16(const char* varname, S16 i); + virtual void addU16(const char* varname, U16 i); + virtual void addF32(const char* varname, F32 f); + virtual void addS32(const char* varname, S32 s); + virtual void addU32(const char* varname, U32 u); + virtual void addU64(const char* varname, U64 lu); + virtual void addF64(const char* varname, F64 d); + virtual void addVector3(const char* varname, const LLVector3& vec); + virtual void addVector4(const char* varname, const LLVector4& vec); + virtual void addVector3d(const char* varname, const LLVector3d& vec); + virtual void addQuat(const char* varname, const LLQuaternion& quat); + virtual void addUUID(const char* varname, const LLUUID& uuid); + virtual void addIPAddr(const char* varname, const U32 ip); + virtual void addIPPort(const char* varname, const U16 port); virtual void addString(const char* varname, const char* s); virtual void addString(const char* varname, const std::string& s); @@ -52,8 +62,8 @@ public: virtual BOOL isBuilt() const; virtual BOOL isClear() const; - virtual U32 buildMessage(U8* buffer, U32 buffer_size); - /**< Return built message size */ + virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data); + /**< Null implementation which returns 0. */ virtual void clearMessage(); diff --git a/indra/llmessage/llsdmessagereader.cpp b/indra/llmessage/llsdmessagereader.cpp index 6312bee0ab..889cb305c2 100755 --- a/indra/llmessage/llsdmessagereader.cpp +++ b/indra/llmessage/llsdmessagereader.cpp @@ -1,7 +1,18 @@ +/** + * @file llsdmessagereader.cpp + * @brief LLSDMessageReader class implementation. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#include "linden_common.h" + #include "llsdmessagereader.h" -#include "llsdutil.h" + #include "llmessagebuilder.h" #include "llsdmessagebuilder.h" +#include "llsdutil.h" LLSDMessageReader::LLSDMessageReader() { @@ -15,11 +26,30 @@ LLSDMessageReader::~LLSDMessageReader() LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum) { - if(input[block].isArray()) + // babbage: log error to llerrs if variable not found to mimic + // LLTemplateMessageReader::getData behaviour + if(NULL == block) + { + llerrs << "NULL block name" << llendl; + return LLSD(); + } + if(NULL == var) + { + llerrs << "NULL var name" << llendl; + return LLSD(); + } + if(! input[block].isArray()) + { + llerrs << "block " << block << " not found" << llendl; + return LLSD(); + } + + LLSD result = input[block][blocknum][var]; + if(result.isUndefined()) { - return input[block][blocknum][var]; + llerrs << "var " << var << " not found" << llendl; } - return LLSD(); + return result; } //virtual @@ -167,8 +197,12 @@ void LLSDMessageReader::getIPPort(const char *block, const char *var, void LLSDMessageReader::getString(const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum) { + if(buffer_size <= 0) + { + llwarns << "buffer_size <= 0" << llendl; + return; + } std::string data = getLLSD(mMessage, block, var, blocknum); - S32 data_size = data.size(); if (data_size >= buffer_size) { @@ -241,7 +275,7 @@ void LLSDMessageReader::clearMessage() //virtual const char* LLSDMessageReader::getMessageName() const { - return mMessageName.c_str(); + return mMessageName; } // virtual @@ -256,7 +290,7 @@ void LLSDMessageReader::copyToBuilder(LLMessageBuilder& builder) const builder.copyFromLLSD(mMessage); } -void LLSDMessageReader::setMessage(const std::string& name, const LLSD& message) +void LLSDMessageReader::setMessage(const char* name, const LLSD& message) { mMessageName = name; // TODO: Validate diff --git a/indra/llmessage/llsdmessagereader.h b/indra/llmessage/llsdmessagereader.h index 57851941a2..d6d9f3d2f9 100755 --- a/indra/llmessage/llsdmessagereader.h +++ b/indra/llmessage/llsdmessagereader.h @@ -69,10 +69,11 @@ public: virtual void copyToBuilder(LLMessageBuilder&) const; - void setMessage(const std::string& name, const LLSD& msg); + /** Expects a pointer to a canonical name string */ + void setMessage(const char* name, const LLSD& msg); private: - std::string mMessageName; + const char* mMessageName; // Canonical (prehashed) string. LLSD mMessage; }; diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp index 806f03422d..18e96f26e4 100644 --- a/indra/llmessage/lltemplatemessagebuilder.cpp +++ b/indra/llmessage/lltemplatemessagebuilder.cpp @@ -1,3 +1,11 @@ +/** + * @file lltemplatemessagebuilder.cpp + * @brief LLTemplateMessageBuilder class implementation. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #include "linden_common.h" #include "lltemplatemessagebuilder.h" @@ -41,28 +49,30 @@ void LLTemplateMessageBuilder::newMessage(const char *name) delete mCurrentSMessageData; mCurrentSMessageData = NULL; - char *namep = (char *)name; - + char* namep = (char*)name; if (mMessageTemplates.count(namep) > 0) { mCurrentSMessageTemplate = mMessageTemplates[namep]; - if (mCurrentSMessageData) - { - delete mCurrentSMessageData; - } mCurrentSMessageData = new LLMsgData(namep); mCurrentSMessageName = namep; mCurrentSDataBlock = NULL; mCurrentSBlockName = NULL; // add at one of each block - LLMessageTemplate* msg_template = mMessageTemplates[namep]; - for (LLMessageTemplate::message_block_map_t::iterator iter = msg_template->mMemberBlocks.begin(); - iter != msg_template->mMemberBlocks.end(); iter++) + const LLMessageTemplate* msg_template = mMessageTemplates[namep]; + + if (msg_template->getDeprecation() != MD_NOTDEPRECATED) { - LLMessageBlock* ci = iter->second; - LLMsgBlkData *tblockp; - tblockp = new LLMsgBlkData(ci->mName, 0); + llwarns << "Sending deprecated message " << namep << llendl; + } + + LLMessageTemplate::message_block_map_t::const_iterator iter; + for(iter = msg_template->mMemberBlocks.begin(); + iter != msg_template->mMemberBlocks.end(); + ++iter) + { + LLMessageBlock* ci = *iter; + LLMsgBlkData* tblockp = new LLMsgBlkData(ci->mName, 0); mCurrentSMessageData->addBlock(tblockp); } } @@ -102,16 +112,14 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) } // now, does this block exist? - LLMessageTemplate::message_block_map_t::iterator temp_iter = mCurrentSMessageTemplate->mMemberBlocks.find(bnamep); - if (temp_iter == mCurrentSMessageTemplate->mMemberBlocks.end()) + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(bnamep); + if (!template_data) { llerrs << "LLTemplateMessageBuilder::nextBlock " << bnamep << " not a block in " << mCurrentSMessageTemplate->mName << llendl; return; } - LLMessageBlock* template_data = temp_iter->second; - // ok, have we already set this block? LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[bnamep]; if (block_data->mBlockNumber == 0) @@ -122,10 +130,10 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) mCurrentSBlockName = bnamep; // add placeholders for each of the variables - for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(); iter != template_data->mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSDataBlock->addVariable(ci.getName(), ci.getType()); } return; @@ -181,12 +189,12 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) mCurrentSMessageData->mMemberBlocks[nbnamep] = mCurrentSDataBlock; // add placeholders for each of the variables - for (LLMessageBlock::message_variable_map_t::iterator + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(), end = template_data->mMemberVariables.end(); iter != end; iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSDataBlock->addVariable(ci.getName(), ci.getType()); } return; @@ -211,12 +219,12 @@ BOOL LLTemplateMessageBuilder::removeLastBlock() // Decrement the sent total by the size of the // data in the message block that we're currently building. - LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]; + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName); - for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(); iter != template_data->mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSendTotal -= ci.getSize(); } @@ -276,7 +284,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM } // kewl, add the data if it exists - LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep]; + const LLMessageVariable* var_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName)->getVariable(vnamep); if (!var_data || !var_data->getName()) { llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl; @@ -336,7 +344,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM } // kewl, add the data if it exists - LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep]; + const LLMessageVariable* var_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName)->getVariable(vnamep); if (!var_data->getName()) { llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl; @@ -484,7 +492,7 @@ static S32 zero_code(U8 **data, U32 *data_size) // skip the packet id field - for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) + for (U32 ii = 0; ii < LL_PACKET_ID_SIZE ; ++ii) { count--; *outptr++ = *inptr++; @@ -571,7 +579,7 @@ BOOL LLTemplateMessageBuilder::isMessageFull(const char* blockname) const char* bnamep = (char*)blockname; S32 max; - LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[bnamep]; + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(bnamep); switch(template_data->mType) { @@ -593,138 +601,59 @@ BOOL LLTemplateMessageBuilder::isMessageFull(const char* blockname) const return FALSE; } - -// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer -U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) +static S32 buildBlock(U8* buffer, S32 buffer_size, const LLMessageBlock* template_data, LLMsgData* message_data) { - // basic algorithm is to loop through the various pieces, building - // size and offset info if we encounter a -1 for mSize at any - // point that variable wasn't given data - - // do we have a current message? - if (!mCurrentSMessageTemplate) - { - llerrs << "newMessage not called prior to buildMessage" << llendl; - return 0; - } - - // zero out some useful values - - // leave room for circuit counter - U32 result = LL_PACKET_ID_SIZE; - - // encode message number and adjust total_offset - if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH) - { -// old, endian-dependant way -// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8)); - -// new, independant way - buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber; - result += sizeof(U8); - } - else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM) - { - U8 temp = 255; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - - // mask off unsightly bits - temp = mCurrentSMessageTemplate->mMessageNumber & 255; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - } - else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW) - { - U8 temp = 255; - U16 message_num; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - - // mask off unsightly bits - message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF; - - // convert to network byte order - message_num = htons(message_num); - memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/ - result += sizeof(U16); - } - else - { - llerrs << "unexpected message frequency in buildMessage" << llendl; - return 0; + S32 result = 0; + LLMsgData::msg_blk_data_map_t::const_iterator block_iter = message_data->mMemberBlocks.find(template_data->mName); + const LLMsgBlkData* mbci = block_iter->second; + + // ok, if this is the first block of a repeating pack, set + // block_count and, if it's type MBT_VARIABLE encode a byte + // for how many there are + S32 block_count = mbci->mBlockNumber; + if (template_data->mType == MBT_VARIABLE) + { + // remember that mBlockNumber is a S32 + U8 temp_block_number = (U8)mbci->mBlockNumber; + if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE) + { + memcpy(&buffer[result], &temp_block_number, sizeof(U8)); + result += sizeof(U8); + } + else + { + // Just reporting error is likely not enough. Need + // to check how to abort or error out gracefully + // from this function. XXXTBD + llerrs << "buildBlock failed. Message excedding " + << "sendBuffersize." << llendl; + } } - - // counting variables used to encode multiple block info - S32 block_count = 0; - U8 temp_block_number; - - // loop through msg blocks to loop through variables, - // totalling up size data and copying into buffer - for (LLMsgData::msg_blk_data_map_t::iterator - iter = mCurrentSMessageData->mMemberBlocks.begin(), - end = mCurrentSMessageData->mMemberBlocks.end(); - iter != end; iter++) + else if (template_data->mType == MBT_MULTIPLE) { - LLMsgBlkData* mbci = iter->second; - // do we need to encode a block code? - if (block_count == 0) + if (block_count != template_data->mNumber) { - block_count = mbci->mBlockNumber; - - LLMessageBlock* template_data = - mCurrentSMessageTemplate->mMemberBlocks[mbci->mName]; - - // ok, if this is the first block of a repeating pack, set - // block_count and, if it's type MBT_VARIABLE encode a byte - // for how many there are - if (template_data->mType == MBT_VARIABLE) - { - // remember that mBlockNumber is a S32 - temp_block_number = (U8)mbci->mBlockNumber; - if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE) - { - memcpy(&buffer[result], &temp_block_number, sizeof(U8)); - result += sizeof(U8); - } - else - { - // Just reporting error is likely not enough. Need - // to check how to abort or error out gracefully - // from this function. XXXTBD - llerrs << "buildMessage failed. Message excedding " - << "sendBuffersize." << llendl; - } - } - else if (template_data->mType == MBT_MULTIPLE) - { - if (block_count != template_data->mNumber) - { - // nope! need to fill it in all the way! - llerrs << "Block " << mbci->mName - << " is type MBT_MULTIPLE but only has data for " - << block_count << " out of its " - << template_data->mNumber << " blocks" << llendl; - } - } + // nope! need to fill it in all the way! + llerrs << "Block " << mbci->mName + << " is type MBT_MULTIPLE but only has data for " + << block_count << " out of its " + << template_data->mNumber << " blocks" << llendl; } + } - // counting down multiple blocks - block_count--; - + while(block_count > 0) + { // now loop through the variables - for (LLMsgBlkData::msg_var_data_map_t::iterator iter = mbci->mMemberVarData.begin(); + for (LLMsgBlkData::msg_var_data_map_t::const_iterator iter = mbci->mMemberVarData.begin(); iter != mbci->mMemberVarData.end(); iter++) { - LLMsgVarData& mvci = *iter; + const LLMsgVarData& mvci = *iter; if (mvci.getSize() == -1) { // oops, this variable wasn't ever set! llerrs << "The variable " << mvci.getName() << " in block " << mbci->mName << " of message " - << mCurrentSMessageData->mName + << template_data->mName << " wasn't set prior to buildMessage call" << llendl; } else @@ -774,7 +703,7 @@ U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) // Just reporting error is likely not // enough. Need to check how to abort or error // out gracefully from this function. XXXTBD - llerrs << "LLMessageSystem::buildMessage failed. " + llerrs << "buildBlock failed. " << "Attempted to pack " << result + mvci.getSize() << " bytes into a buffer with size " @@ -783,6 +712,94 @@ U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) } } } + + --block_count; + ++block_iter; + if (block_iter != message_data->mMemberBlocks.end()) + { + mbci = block_iter->second; + } + } + + return result; +} + + +// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer +U32 LLTemplateMessageBuilder::buildMessage( + U8* buffer, + U32 buffer_size, + U8 offset_to_data) +{ + // basic algorithm is to loop through the various pieces, building + // size and offset info if we encounter a -1 for mSize at any + // point that variable wasn't given data + + // do we have a current message? + if (!mCurrentSMessageTemplate) + { + llerrs << "newMessage not called prior to buildMessage" << llendl; + return 0; + } + + // leave room for flags, packet sequence #, and data offset + // information. + buffer[PHL_OFFSET] = offset_to_data; + U32 result = LL_PACKET_ID_SIZE; + + // encode message number and adjust total_offset + if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH) + { +// old, endian-dependant way +// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8)); + +// new, independant way + buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber; + result += sizeof(U8); + } + else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM) + { + U8 temp = 255; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + + // mask off unsightly bits + temp = mCurrentSMessageTemplate->mMessageNumber & 255; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + } + else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW) + { + U8 temp = 255; + U16 message_num; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + + // mask off unsightly bits + message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF; + + // convert to network byte order + message_num = htons(message_num); + memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/ + result += sizeof(U16); + } + else + { + llerrs << "unexpected message frequency in buildMessage" << llendl; + return 0; + } + + // fast forward through the offset and build the message + result += offset_to_data; + for(LLMessageTemplate::message_block_map_t::const_iterator + iter = mCurrentSMessageTemplate->mMemberBlocks.begin(), + end = mCurrentSMessageTemplate->mMemberBlocks.end(); + iter != end; + ++iter) + { + result += buildBlock(buffer + result, buffer_size - result, *iter, mCurrentSMessageData); } mbSBuilt = TRUE; diff --git a/indra/llmessage/lltemplatemessagebuilder.h b/indra/llmessage/lltemplatemessagebuilder.h index ae533288fb..6cc06ee0f3 100644 --- a/indra/llmessage/lltemplatemessagebuilder.h +++ b/indra/llmessage/lltemplatemessagebuilder.h @@ -1,3 +1,11 @@ +/** + * @file lltemplatemessagebuilder.h + * @brief Declaration of LLTemplateMessageBuilder class. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #ifndef LL_LLTEMPLATEMESSAGEBUILDER_H #define LL_LLTEMPLATEMESSAGEBUILDER_H @@ -15,12 +23,12 @@ class LLTemplateMessageBuilder : public LLMessageBuilder { public: - typedef std::map<const char *, LLMessageTemplate*> message_template_name_map_t; + typedef std::map<const char* , LLMessageTemplate*> message_template_name_map_t; LLTemplateMessageBuilder(message_template_name_map_t&); virtual ~LLTemplateMessageBuilder(); - virtual void newMessage(const char *name); + virtual void newMessage(const char* name); virtual void nextBlock(const char* blockname); virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror... @@ -29,22 +37,22 @@ public: virtual void addBinaryData(const char *varname, const void *data, S32 size); virtual void addBOOL(const char* varname, BOOL b); - virtual void addS8(const char *varname, S8 s); - virtual void addU8(const char *varname, U8 u); - virtual void addS16(const char *varname, S16 i); - virtual void addU16(const char *varname, U16 i); - virtual void addF32(const char *varname, F32 f); - virtual void addS32(const char *varname, S32 s); - virtual void addU32(const char *varname, U32 u); - virtual void addU64(const char *varname, U64 lu); - virtual void addF64(const char *varname, F64 d); - virtual void addVector3(const char *varname, const LLVector3& vec); - virtual void addVector4(const char *varname, const LLVector4& vec); - virtual void addVector3d(const char *varname, const LLVector3d& vec); - virtual void addQuat(const char *varname, const LLQuaternion& quat); - virtual void addUUID(const char *varname, const LLUUID& uuid); - virtual void addIPAddr(const char *varname, const U32 ip); - virtual void addIPPort(const char *varname, const U16 port); + virtual void addS8(const char* varname, S8 s); + virtual void addU8(const char* varname, U8 u); + virtual void addS16(const char* varname, S16 i); + virtual void addU16(const char* varname, U16 i); + virtual void addF32(const char* varname, F32 f); + virtual void addS32(const char* varname, S32 s); + virtual void addU32(const char* varname, U32 u); + virtual void addU64(const char* varname, U64 lu); + virtual void addF64(const char* varname, F64 d); + virtual void addVector3(const char* varname, const LLVector3& vec); + virtual void addVector4(const char* varname, const LLVector4& vec); + virtual void addVector3d(const char* varname, const LLVector3d& vec); + virtual void addQuat(const char* varname, const LLQuaternion& quat); + virtual void addUUID(const char* varname, const LLUUID& uuid); + virtual void addIPAddr(const char* varname, const U32 ip); + virtual void addIPPort(const char* varname, const U16 port); virtual void addString(const char* varname, const char* s); virtual void addString(const char* varname, const std::string& s); @@ -53,7 +61,7 @@ public: virtual BOOL isBuilt() const; virtual BOOL isClear() const; - virtual U32 buildMessage(U8* buffer, U32 buffer_size); + virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data); /**< Return built message size */ virtual void clearMessage(); @@ -68,14 +76,14 @@ public: virtual void copyFromLLSD(const LLSD&); private: - void addData(const char *varname, const void *data, + void addData(const char* varname, const void* data, EMsgVariableType type, S32 size); - void addData(const char *varname, const void *data, + void addData(const char* varname, const void* data, EMsgVariableType type); LLMsgData* mCurrentSMessageData; - LLMessageTemplate* mCurrentSMessageTemplate; + const LLMessageTemplate* mCurrentSMessageTemplate; LLMsgBlkData* mCurrentSDataBlock; char* mCurrentSMessageName; char* mCurrentSBlockName; diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp index bb3f4f4a15..9015be7106 100644 --- a/indra/llmessage/lltemplatemessagereader.cpp +++ b/indra/llmessage/lltemplatemessagereader.cpp @@ -1,3 +1,11 @@ +/** + * @file lltemplatemessagereader.cpp + * @brief LLTemplateMessageReader class implementation. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #include "lltemplatemessagereader.h" #include "llfasttimer.h" @@ -53,7 +61,7 @@ void LLTemplateMessageReader::getData(const char *blockname, const char *varname char *bnamep = (char *)blockname + blocknum; // this works because it's just a hash. The bnamep is never derefference char *vnamep = (char *)varname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -135,7 +143,7 @@ S32 LLTemplateMessageReader::getNumberOfBlocks(const char *blockname) char *bnamep = (char *)blockname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -165,7 +173,7 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, const char *varname) char *bnamep = (char *)blockname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -214,7 +222,7 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, S32 blocknum, const char *bnamep = (char *)blockname + blocknum; char *vnamep = (char *)varname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -497,16 +505,21 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender llassert( !mCurrentRMessageData ); delete mCurrentRMessageData; // just to make sure - S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency); + // The offset tells us how may bytes to skip after the end of the + // message name. + U8 offset = buffer[PHL_OFFSET]; + S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency) + offset; // create base working data set mCurrentRMessageData = new LLMsgData(mCurrentRMessageTemplate->mName); // loop through the template building the data structure as we go - for (LLMessageTemplate::message_block_map_t::iterator iter = mCurrentRMessageTemplate->mMemberBlocks.begin(); - iter != mCurrentRMessageTemplate->mMemberBlocks.end(); iter++) + LLMessageTemplate::message_block_map_t::const_iterator iter; + for(iter = mCurrentRMessageTemplate->mMemberBlocks.begin(); + iter != mCurrentRMessageTemplate->mMemberBlocks.end(); + ++iter) { - LLMessageBlock* mbci = iter->second; + LLMessageBlock* mbci = *iter; U8 repeat_number; S32 i; @@ -528,11 +541,16 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender // repeat number is a single byte if (decode_pos >= mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0 repeats + repeat_number = 0; + } + else + { + repeat_number = buffer[decode_pos]; + decode_pos++; } - repeat_number = buffer[decode_pos]; - decode_pos++; } else { @@ -561,10 +579,12 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender mCurrentRMessageData->addBlock(cur_data_block); // now read the variables - for (LLMessageBlock::message_variable_map_t::iterator iter = mbci->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = + mbci->mMemberVariables.begin(); iter != mbci->mMemberVariables.end(); iter++) { - LLMessageVariable& mvci = *(iter->second); + const LLMessageVariable& mvci = **iter; + // ok, build out the variables // add variable block cur_data_block->addVariable(mvci.getName(), mvci.getType()); @@ -580,34 +600,33 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender if ((decode_pos + data_size) > mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0 length variable blocks + tsize = 0; } - switch(data_size) + else { - case 1: - htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1); - tsize = tsizeb; - break; - case 2: - htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2); - tsize = tsizeh; - break; - case 4: - htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4); - break; - default: - llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl; - break; - + switch(data_size) + { + case 1: + htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1); + tsize = tsizeb; + break; + case 2: + htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2); + tsize = tsizeh; + break; + case 4: + htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4); + break; + default: + llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl; + break; + } } decode_pos += data_size; - if ((decode_pos + (S32)tsize) > mReceiveSize) - { - logRanOffEndOfPacket( sender ); - return FALSE; - } cur_data_block->addData(mvci.getName(), &buffer[decode_pos], tsize, mvci.getType()); decode_pos += tsize; } @@ -615,14 +634,24 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender { // fixed! // so, copy data pointer and set data size to fixed size - if ((decode_pos + mvci.getSize()) > mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0s. + U32 size = mvci.getSize(); + std::vector<U8> data(size); + memset(&(data[0]), 0, size); + cur_data_block->addData(mvci.getName(), &(data[0]), + size, mvci.getType()); + } + else + { + cur_data_block->addData(mvci.getName(), + &buffer[decode_pos], + mvci.getSize(), + mvci.getType()); } - - cur_data_block->addData(mvci.getName(), &buffer[decode_pos], mvci.getSize(), mvci.getType()); decode_pos += mvci.getSize(); } } @@ -644,11 +673,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender decode_timer.reset(); } - // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion ) - // { - // VTResume(); // VTune - // } - { LLFastTimer t(LLFastTimer::FTM_PROCESS_MESSAGES); if( !mCurrentRMessageTemplate->callHandlerFunc(gMessageSystem) ) @@ -657,11 +681,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender } } - // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion ) - // { - // VTPause(); // VTune - // } - if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback()) { F32 decode_time = decode_timer.getElapsedTimeF32(); @@ -723,8 +742,12 @@ BOOL LLTemplateMessageReader::readMessage(const U8* buffer, //virtual const char* LLTemplateMessageReader::getMessageName() const { - static char empty_string[] = ""; - return mCurrentRMessageTemplate ? mCurrentRMessageTemplate->mName : empty_string; + if (!mCurrentRMessageTemplate) + { + llwarns << "no mCurrentRMessageTemplate" << llendl; + return ""; + } + return mCurrentRMessageTemplate->mName; } //virtual diff --git a/indra/llmessage/lltemplatemessagereader.h b/indra/llmessage/lltemplatemessagereader.h index dd5ee393fe..ea8bd52298 100644 --- a/indra/llmessage/lltemplatemessagereader.h +++ b/indra/llmessage/lltemplatemessagereader.h @@ -1,3 +1,11 @@ +/** + * @file lltemplatemessagereader.h + * @brief Declaration of LLTemplateMessageReader class. + * + * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + #ifndef LL_LLTEMPLATEMESSAGEREADER_H #define LL_LLTEMPLATEMESSAGEREADER_H diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp index 36553f8cf1..5b43ea1bad 100644 --- a/indra/llmessage/lltransfermanager.cpp +++ b/indra/llmessage/lltransfermanager.cpp @@ -581,34 +581,6 @@ void LLTransferManager::processTransferAbort(LLMessageSystem *msgp, void **) //static -void LLTransferManager::processTransferPriority(LLMessageSystem *msgp, void **) -{ - //llinfos << "LLTransferManager::processTransferPacket" << llendl; - - LLUUID transfer_id; - LLTransferChannelType channel_type; - F32 priority = 0.f; - msgp->getUUID("TransferInfo", "TransferID", transfer_id); - msgp->getS32("TransferInfo", "ChannelType", (S32 &)channel_type); - msgp->getF32("TransferInfo", "Priority", priority); - - // Hmm, not a target. Maybe it's a source. - LLTransferSourceChannel *tscp = gTransferManager.getSourceChannel(msgp->getSender(), channel_type); - if (tscp) - { - LLTransferSource *tsp = tscp->findTransferSource(transfer_id); - if (tsp) - { - tscp->updatePriority(tsp, priority); - return; - } - } - - llwarns << "Couldn't find transfer " << transfer_id << " to set priority!" << llendl; -} - - -//static void LLTransferManager::reliablePacketCallback(void **user_data, S32 result) { LLUUID *transfer_idp = (LLUUID *)user_data; diff --git a/indra/llmessage/lltransfermanager.h b/indra/llmessage/lltransfermanager.h index d258bd5f92..af2afa0f06 100644 --- a/indra/llmessage/lltransfermanager.h +++ b/indra/llmessage/lltransfermanager.h @@ -109,7 +109,6 @@ public: static void processTransferInfo(LLMessageSystem *mesgsys, void **); static void processTransferPacket(LLMessageSystem *mesgsys, void **); static void processTransferAbort(LLMessageSystem *mesgsys, void **); - static void processTransferPriority(LLMessageSystem *mesgsys, void **); static void reliablePacketCallback(void **, S32 result); diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp index 456851a3ec..1a616d9e2b 100644 --- a/indra/llmessage/message.cpp +++ b/indra/llmessage/message.cpp @@ -47,9 +47,12 @@ #include "lltemplatemessagebuilder.h" #include "lltemplatemessagereader.h" #include "llmessagetemplate.h" +#include "llmessagetemplateparser.h" #include "llsd.h" #include "llsdmessagebuilder.h" #include "llsdmessagereader.h" +#include "llsdserialize.h" +#include "llstring.h" #include "lltransfermanager.h" #include "lluuid.h" #include "llxfermanager.h" @@ -80,220 +83,28 @@ public: apr_pollfd_t mPollFD; }; -// Lets support a small subset of regular expressions here -// Syntax is a string made up of: -// a - checks against alphanumeric ([A-Za-z0-9]) -// c - checks against character ([A-Za-z]) -// f - checks against first variable character ([A-Za-z_]) -// v - checks against variable ([A-Za-z0-9_]) -// s - checks against sign of integer ([-0-9]) -// d - checks against integer digit ([0-9]) -// * - repeat last check - -// checks 'a' -BOOL b_return_alphanumeric_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&( (c < '0') - ||(c > '9'))) - { - return FALSE; - } - return TRUE; -} - -// checks 'c' -BOOL b_return_character_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z'))) - { - return FALSE; - } - return TRUE; -} - -// checks 'f' -BOOL b_return_first_variable_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&(c != '_')) - { - return FALSE; - } - return TRUE; -} - -// checks 'v' -BOOL b_return_variable_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&( (c < '0') - ||(c > '9')) - &&(c != '_')) - { - return FALSE; - } - return TRUE; -} - -// checks 's' -BOOL b_return_signed_integer_ok(char c) -{ - if ( ( (c < '0') - ||(c > '9')) - &&(c != '-')) - { - return FALSE; - } - return TRUE; -} - -// checks 'd' -BOOL b_return_integer_ok(char c) -{ - if ( (c < '0') - ||(c > '9')) - { - return FALSE; - } - return TRUE; -} - -BOOL (*gParseCheckCharacters[])(char c) = -{ - b_return_alphanumeric_ok, - b_return_character_ok, - b_return_first_variable_ok, - b_return_variable_ok, - b_return_signed_integer_ok, - b_return_integer_ok -}; - -S32 get_checker_number(char checker) -{ - switch(checker) - { - case 'a': - return 0; - case 'c': - return 1; - case 'f': - return 2; - case 'v': - return 3; - case 's': - return 4; - case 'd': - return 5; - case '*': - return 9999; - default: - return -1; - } -} - -// check token based on passed simplified regular expression -BOOL b_check_token(char *token, char *regexp) -{ - S32 tptr, rptr = 0; - S32 current_checker, next_checker = 0; - - current_checker = get_checker_number(regexp[rptr++]); - - if (current_checker == -1) - { - llerrs << "Invalid regular expression value!" << llendl; - return FALSE; - } - - if (current_checker == 9999) - { - llerrs << "Regular expression can't start with *!" << llendl; - return FALSE; - } - - for (tptr = 0; token[tptr]; tptr++) - { - if (current_checker == -1) - { - llerrs << "Input exceeds regular expression!\nDid you forget a *?" << llendl; - return FALSE; - } - - if (!gParseCheckCharacters[current_checker](token[tptr])) - { - return FALSE; - } - if (next_checker != 9999) - { - next_checker = get_checker_number(regexp[rptr++]); - if (next_checker != 9999) - { - current_checker = next_checker; - } - } - } - return TRUE; -} - -// C variable can be made up of upper or lower case letters, underscores, or numbers, but can't start with a number -BOOL b_variable_ok(char *token) -{ - if (!b_check_token(token, "fv*")) - { - llerrs << "Token '" << token << "' isn't a variable!" << llendl; - return FALSE; - } - return TRUE; -} - -// An integer is made up of the digits 0-9 and may be preceded by a '-' -BOOL b_integer_ok(char *token) -{ - if (!b_check_token(token, "sd*")) - { - llerrs << "Token isn't an integer!" << llendl; - return FALSE; - } - return TRUE; -} - -// An integer is made up of the digits 0-9 -BOOL b_positive_integer_ok(char *token) -{ - if (!b_check_token(token, "d*")) - { - llerrs << "Token isn't an integer!" << llendl; - return FALSE; - } - return TRUE; -} - namespace { class LLFnPtrResponder : public LLHTTPClient::Responder { + LOG_CLASS(LLFnPtrResponder); public: - LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData) : + LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData, const std::string& name) : mCallback(callback), - mCallbackData(callbackData) + mCallbackData(callbackData), + mMessageName(name) { } virtual void error(U32 status, const std::string& reason) { + // don't spam when agent communication disconnected already + if (status != 410) + { + llwarns << "error status " << status + << " for message " << mMessageName + << " reason " << reason << llendl; + } // TODO: Map status in to useful error code. if(NULL != mCallback) mCallback(mCallbackData, LL_ERR_TCP_TIMEOUT); } @@ -307,6 +118,7 @@ namespace void (*mCallback)(void **,S32); void **mCallbackData; + std::string mMessageName; }; } @@ -332,10 +144,28 @@ void LLTrustedMessageService::post(LLHTTPNode::ResponsePtr response, ["x-secondlife-udp-listen-port"]; LLSD message_data; - message_data["sender"] = senderIP + ":" + senderPort; + std::string sender = senderIP + ":" + senderPort; + message_data["sender"] = sender; message_data["body"] = input; - LLMessageSystem::dispatch(name, message_data, response); + // untrusted senders should not have access to the trusted message + // service, but this can happen in development, so check and warn + LLMessageConfig::SenderTrust trust = + LLMessageConfig::getSenderTrustedness(name); + if ((trust == LLMessageConfig::TRUSTED || + (trust == LLMessageConfig::NOT_SET && + gMessageSystem->isTrustedMessage(name))) + && !gMessageSystem->isTrustedSender(LLHost(sender))) + { + llwarns << "trusted message POST to /trusted-message/" + << name << " from unknown or untrusted sender " + << sender << llendl; + response->status(403, "Unknown or untrusted sender"); + } + else + { + LLMessageSystem::dispatch(name, message_data, response); + } } class LLMessageHandlerBridge : public LLHTTPNode @@ -352,14 +182,15 @@ void LLMessageHandlerBridge::post(LLHTTPNode::ResponsePtr response, const LLSD& context, const LLSD& input) const { std::string name = context["request"]["wildcard"]["message-name"]; - + char* namePtr = gMessageStringTable.getString(name.c_str()); + lldebugs << "Setting mLastSender " << input["sender"].asString() << llendl; gMessageSystem->mLastSender = LLHost(input["sender"].asString()); gMessageSystem->mPacketsIn += 1; - gMessageSystem->mLLSDMessageReader->setMessage(name, input["body"]); + gMessageSystem->mLLSDMessageReader->setMessage(namePtr, input["body"]); gMessageSystem->mMessageReader = gMessageSystem->mLLSDMessageReader; - if(gMessageSystem->callHandler(name.c_str(), false, gMessageSystem)) + if(gMessageSystem->callHandler(namePtr, false, gMessageSystem)) { response->result(LLSD()); } @@ -381,6 +212,12 @@ LLUseCircuitCodeResponder::~LLUseCircuitCodeResponder() // even abstract base classes need a concrete destructor } +static const char* nullToEmpty(const char* s) +{ + static char emptyString[] = ""; + return s? s : emptyString; +} + void LLMessageSystem::init() { // initialize member variables @@ -420,7 +257,6 @@ void LLMessageSystem::init() mIncomingCompressedSize = 0; mCurrentRecvPacketID = 0; - mMessageFileChecksum = 0; mMessageFileVersionNumber = 0.f; mTimingCallback = NULL; @@ -434,9 +270,7 @@ void LLMessageSystem::init() LLMessageSystem::LLMessageSystem(const char *filename, U32 port, S32 version_major, S32 version_minor, - S32 version_patch) : - mTemplateConfirmed(FALSE), - mTemplateMatches(FALSE) + S32 version_patch) { init(); @@ -509,6 +343,8 @@ LLMessageSystem::LLMessageSystem(const char *filename, U32 port, mTrueReceiveSize = 0; } + + // Read file and build message templates void LLMessageSystem::loadTemplateFile(const char* filename) { @@ -519,797 +355,23 @@ void LLMessageSystem::loadTemplateFile(const char* filename) return; } - char token[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - // state variables - BOOL b_template_start = TRUE; - BOOL b_template_end = FALSE; - BOOL b_template = FALSE; - BOOL b_block_start = FALSE; - BOOL b_block_end = FALSE; - BOOL b_block = FALSE; - BOOL b_variable_start = FALSE; - BOOL b_variable_end = FALSE; - BOOL b_variable = FALSE; - //BOOL b_in_comment_block = FALSE; // not yet used - - // working temp variables - LLMessageTemplate *templatep = NULL; - char template_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - LLMessageBlock *blockp = NULL; - char block_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - LLMessageVariable var; - char var_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - char formatString[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - FILE* messagefilep = NULL; - mMessageFileChecksum = 0; - mMessageFileVersionNumber = 0.f; - S32 checksum_offset = 0; - char* checkp = NULL; - - // scanf needs 1 byte more than width, thus the MAX_... -1. - snprintf( /* Flawfinder: ignore */ - formatString, - sizeof(formatString), - "%%%ds", - MAX_MESSAGE_INTERNAL_NAME_SIZE - 1); - messagefilep = LLFile::fopen(filename, "r"); /* Flawfinder: ignore */ - if (messagefilep) - { -// mName = gMessageStringTable.getString(filename); - - fseek(messagefilep, 0L, SEEK_SET ); - while(fscanf(messagefilep, formatString, token) != EOF) /* Flawfinder: ignore */ - { - // skip comments - if (token[0] == '/') - { - // skip to end of line - while (token[0] != 10) - fscanf(messagefilep, "%c", token); - continue; - } - - checkp = token; - - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // what are we looking for - if (!strcmp(token, "{")) - { - // is that a legit option? - if (b_template_start) - { - // yup! - b_template_start = FALSE; - - // remember that it could be only a signal message, so name is all that it contains - b_template_end = TRUE; - - // start working on it! - b_template = TRUE; - } - else if (b_block_start) - { - // yup! - b_block_start = FALSE; - b_template_end = FALSE; - - // start working on it! - b_block = TRUE; - } - else if (b_variable_start) - { - // yup! - b_variable_start = FALSE; - b_block_end = FALSE; - - // start working on it! - b_variable = TRUE; - } - else - { - llerrs << "Detcted unexpected token '" << token - << "' while parsing template." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - } - - if (!strcmp(token, "}")) - { - // is that a legit option? - if (b_template_end) - { - // yup! - b_template_end = FALSE; - b_template = FALSE; - b_block_start = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it! - if (NULL == templatep) - { - llerrs << "Trying to addTemplate a NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - addTemplate(templatep); - - //llinfos << "Read template: "templatep->mNametemp_str - // << llendl; - - // look for next one! - b_template_start = TRUE; - } - else if (b_block_end) - { - // yup! - b_block_end = FALSE; - b_variable_start = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it to template - if (NULL == templatep) - { - llerrs << "Trying to addBlock to NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->addBlock(blockp); - - // start working on it! - b_template_end = TRUE; - b_block_start = TRUE; - } - else if (b_variable_end) - { - // yup! - b_variable_end = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it to block - blockp->addVariable(var.getName(), var.getType(), var.getSize()); - - // start working on it! - b_variable_start = TRUE; - b_block_end = TRUE; - } - else - { - llerrs << "Detcted unexpected token '" << token - << "' while parsing template." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - } - - // now, are we looking to start a template? - if (b_template) - { - - b_template = FALSE; - - // name first - if (fscanf(messagefilep, formatString, template_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template name, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // debugging to help figure out busted templates - //llinfos << template_name << llendl; - - // is name a legit C variable name - if (!b_variable_ok(template_name)) - { - // nope! - llerrs << "Not legal message template name: " - << template_name << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = template_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // ok, now get Frequency ("High", "Medium", or "Low") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template frequency, found EOF." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // which one is it? - if (!strcmp(token, "High")) - { - if (++mNumberHighFreqMessages == 255) - { - // oops, too many High Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 254 High frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is just mNumberHighFreqMessages - templatep = new LLMessageTemplate(template_name, mNumberHighFreqMessages, MFT_HIGH); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberHighFreqMessages - // << std::dec << " high" - // << llendl; - } - else if (!strcmp(token, "Medium")) - { - if (++mNumberMediumFreqMessages == 255) - { - // oops, too many Medium Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 254 Medium frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is ((255 << 8) | mNumberMediumFreqMessages) - templatep = new LLMessageTemplate(template_name, (255 << 8) | mNumberMediumFreqMessages, MFT_MEDIUM); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberMediumFreqMessages - // << std::dec << " medium" - // << llendl; - } - else if (!strcmp(token, "Low")) - { - if (++mNumberLowFreqMessages == 65535) - { - // oops, too many High Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 65534 Low frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is ((255 << 24) | (255 << 16) | mNumberLowFreqMessages) - templatep = new LLMessageTemplate(template_name, (255 << 24) | (255 << 16) | mNumberLowFreqMessages, MFT_LOW); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberLowFreqMessages - // << std::dec << " low" - // << llendl; - } - else if (!strcmp(token, "Fixed")) - { - U32 message_num = 0; - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template number (fixed)," - << " found EOF." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - message_num = strtoul(token,NULL,0); - - // ok, we can create a template! - // message number is ((255 << 24) | (255 << 16) | mNumberLowFreqMessages) - templatep = new LLMessageTemplate(template_name, message_num, MFT_LOW); - } - else - { - // oops, bad frequency line - llerrs << "Bad frequency! " << token - << " isn't High, Medium, or Low" << llendl - mbError = TRUE; - fclose(messagefilep); - return; - } - - // Now get trust ("Trusted", "NotTrusted") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // File ended - llerrs << "Expected message template " - "trust, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32) *checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - if (strcmp(token, "Trusted") == 0) - { - if (NULL == templatep) - { - llerrs << "Trying to setTrust for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setTrust(MT_TRUST); - } - else if (strcmp(token, "NotTrusted") == 0) - { - if (NULL == templatep) - { - llerrs << "Trying to setTrust for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setTrust(MT_NOTRUST); - } - else - { - // bad trust token - llerrs << "bad trust: " << token - << " isn't Trusted or NotTrusted" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // get encoding - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // File ended - llerrs << "Expected message encoding, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - checkp = token; - while(*checkp) - { - mMessageFileChecksum += ((U32) *checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - if(0 == strcmp(token, "Unencoded")) - { - if (NULL == templatep) - { - llerrs << "Trying to setEncoding for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setEncoding(ME_UNENCODED); - } - else if(0 == strcmp(token, "Zerocoded")) - { - if (NULL == templatep) - { - llerrs << "Trying to setEncoding for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setEncoding(ME_ZEROCODED); - } - else - { - // bad trust token - llerrs << "bad encoding: " << token - << " isn't Unencoded or Zerocoded" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // ok, now we need to look for a block - b_block_start = TRUE; - continue; - } - - // now, are we looking to start a template? - if (b_block) - { - b_block = FALSE; - // ok, need to pull header info - - // name first - if (fscanf(messagefilep, formatString, block_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block name, but file ended" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = block_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is name a legit C variable name - if (!b_variable_ok(block_name)) - { - // nope! - llerrs << block_name << "is not a legal block name" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // now, block type ("Single", "Multiple", or "Variable") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block type, but file ended." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // which one is it? - if (!strcmp(token, "Single")) - { - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_SINGLE); - } - else if (!strcmp(token, "Multiple")) - { - // need to get the number of repeats - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block multiple count," - " but file ended." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << "is not a legal integer for" - " block multiple count" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_MULTIPLE, atoi(token)); - } - else if (!strcmp(token, "Variable")) - { - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_VARIABLE); - } - else - { - // oops, bad block type - llerrs << "Bad block type! " << token - << " isn't Single, Multiple, or Variable" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, now we need to look for a variable - b_variable_start = TRUE; - continue; - } - - // now, are we looking to start a template? - if (b_variable) - { - b_variable = FALSE; - // ok, need to pull header info - - // name first - if (fscanf(messagefilep, formatString, var_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable name, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = var_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is name a legit C variable name - if (!b_variable_ok(var_name)) - { - // nope! - llerrs << var_name << " is not a legal variable name" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // now, variable type ("Fixed" or "Variable") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable type, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - - // which one is it? - if (!strcmp(token, "U8")) - { - var = LLMessageVariable(var_name, MVT_U8, 1); - } - else if (!strcmp(token, "U16")) - { - var = LLMessageVariable(var_name, MVT_U16, 2); - } - else if (!strcmp(token, "U32")) - { - var = LLMessageVariable(var_name, MVT_U32, 4); - } - else if (!strcmp(token, "U64")) - { - var = LLMessageVariable(var_name, MVT_U64, 8); - } - else if (!strcmp(token, "S8")) - { - var = LLMessageVariable(var_name, MVT_S8, 1); - } - else if (!strcmp(token, "S16")) - { - var = LLMessageVariable(var_name, MVT_S16, 2); - } - else if (!strcmp(token, "S32")) - { - var = LLMessageVariable(var_name, MVT_S32, 4); - } - else if (!strcmp(token, "S64")) - { - var = LLMessageVariable(var_name, MVT_S64, 8); - } - else if (!strcmp(token, "F32")) - { - var = LLMessageVariable(var_name, MVT_F32, 4); - } - else if (!strcmp(token, "F64")) - { - var = LLMessageVariable(var_name, MVT_F64, 8); - } - else if (!strcmp(token, "LLVector3")) - { - var = LLMessageVariable(var_name, MVT_LLVector3, 12); - } - else if (!strcmp(token, "LLVector3d")) - { - var = LLMessageVariable(var_name, MVT_LLVector3d, 24); - } - else if (!strcmp(token, "LLVector4")) - { - var = LLMessageVariable(var_name, MVT_LLVector4, 16); - } - else if (!strcmp(token, "LLQuaternion")) - { - var = LLMessageVariable(var_name, MVT_LLQuaternion, 12); - } - else if (!strcmp(token, "LLUUID")) - { - var = LLMessageVariable(var_name, MVT_LLUUID, 16); - } - else if (!strcmp(token, "BOOL")) - { - var = LLMessageVariable(var_name, MVT_BOOL, 1); - } - else if (!strcmp(token, "IPADDR")) - { - var = LLMessageVariable(var_name, MVT_IP_ADDR, 4); - } - else if (!strcmp(token, "IPPORT")) - { - var = LLMessageVariable(var_name, MVT_IP_PORT, 2); - } - else if (!strcmp(token, "Fixed")) - { - // need to get the variable size - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable size, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << " is not a legal integer for" - " variable size" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - var = LLMessageVariable(var_name, MVT_FIXED, atoi(token)); - } - else if (!strcmp(token, "Variable")) - { - // need to get the variable size - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable size, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << "is not a legal integer" - " for variable size" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - var = LLMessageVariable(var_name, MVT_VARIABLE, atoi(token)); - } - else - { - // oops, bad variable type - llerrs << "Bad variable type! " << token - << " isn't Fixed or Variable" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // we got us a variable! - b_variable_end = TRUE; - continue; - } - - // do we have a version number stuck in the file? - if (!strcmp(token, "version")) - { - // version number - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected version number, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - mMessageFileVersionNumber = (F32)atof(token); - -// llinfos << "### Message template version " << mMessageFileVersionNumber << " ###" << llendl; - continue; - } - } - - llinfos << "Message template checksum = " << std::hex << mMessageFileChecksum << std::dec << llendl; - } - else + LLString template_body; + if(!LLString::read(template_body, filename)) { llwarns << "Failed to open template: " << filename << llendl; mbError = TRUE; return; } - fclose(messagefilep); + + LLTemplateTokenizer tokens(template_body); + LLTemplateParser parsed(tokens); + mMessageFileVersionNumber = parsed.getVersion(); + for(LLTemplateParser::message_iterator iter = parsed.getMessagesBegin(); + iter != parsed.getMessagesEnd(); + iter++) + { + addTemplate(*iter); + } } @@ -1373,6 +435,94 @@ BOOL LLMessageSystem::poll(F32 seconds) } } +bool LLMessageSystem::isTrustedSender(const LLHost& host) const +{ + LLCircuitData* cdp = mCircuitInfo.findCircuit(host); + if(NULL == cdp) + { + return false; + } + return cdp->getTrusted(); +} + +static LLMessageSystem::message_template_name_map_t::const_iterator +findTemplate(const LLMessageSystem::message_template_name_map_t& templates, + std::string name) +{ + const char* namePrehash = gMessageStringTable.getString(name.c_str()); + if(NULL == namePrehash) {return templates.end();} + return templates.find(namePrehash); +} + +bool LLMessageSystem::isTrustedMessage(const std::string& name) const +{ + message_template_name_map_t::const_iterator iter = + findTemplate(mMessageTemplates, name); + if(iter == mMessageTemplates.end()) {return false;} + return iter->second->getTrust() == MT_TRUST; +} + +bool LLMessageSystem::isUntrustedMessage(const std::string& name) const +{ + message_template_name_map_t::const_iterator iter = + findTemplate(mMessageTemplates, name); + if(iter == mMessageTemplates.end()) {return false;} + return iter->second->getTrust() == MT_NOTRUST; +} + +LLCircuitData* LLMessageSystem::findCircuit(const LLHost& host, + bool resetPacketId) +{ + LLCircuitData* cdp = mCircuitInfo.findCircuit(host); + if (!cdp) + { + // This packet comes from a circuit we don't know about. + + // Are we rejecting off-circuit packets? + if (mbProtected) + { + // cdp is already NULL, so we don't need to unset it. + } + else + { + // nope, open the new circuit + cdp = mCircuitInfo.addCircuitData(host, mCurrentRecvPacketID); + + if(resetPacketId) + { + // I added this - I think it's correct - DJS + // reset packet in ID + cdp->setPacketInID(mCurrentRecvPacketID); + } + // And claim the packet is on the circuit we just added. + } + } + else + { + // this is an old circuit. . . is it still alive? + if (!cdp->isAlive()) + { + // nope. don't accept if we're protected + if (mbProtected) + { + // don't accept packets from unexpected sources + cdp = NULL; + } + else + { + // wake up the circuit + cdp->setAlive(TRUE); + + if(resetPacketId) + { + // reset packet in ID + cdp->setPacketInID(mCurrentRecvPacketID); + } + } + } + } + return cdp; +} // Returns TRUE if a valid, on-circuit message has been received. BOOL LLMessageSystem::checkMessages( S64 frame_count ) @@ -1451,71 +601,12 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) } // process the message as normal - - mIncomingCompressedSize = zeroCodeExpand(&buffer,&receive_size); - mCurrentRecvPacketID = buffer[1] + ((buffer[0] & 0x0f ) * 256); - if (sizeof(TPACKETID) == 4) - { - mCurrentRecvPacketID *= 256; - mCurrentRecvPacketID += buffer[2]; - mCurrentRecvPacketID *= 256; - mCurrentRecvPacketID += buffer[3]; - } - + mIncomingCompressedSize = zeroCodeExpand(&buffer, &receive_size); + mCurrentRecvPacketID = ntohl(*((U32*)(&buffer[1]))); host = getSender(); - //llinfos << host << ":" << mCurrentRecvPacketID << llendl; - // For testing the weird case we're having in the office where the first few packets - // on a connection get dropped - //if ((mCurrentRecvPacketID < 8) && !(buffer[0] & LL_RESENT_FLAG)) - //{ - // llinfos << "Evil! Dropping " << mCurrentRecvPacketID << " from " << host << " for fun!" << llendl; - // continue; - //} - - cdp = mCircuitInfo.findCircuit(host); - if (!cdp) - { - // This packet comes from a circuit we don't know about. - - // Are we rejecting off-circuit packets? - if (mbProtected) - { - // cdp is already NULL, so we don't need to unset it. - } - else - { - // nope, open the new circuit - cdp = mCircuitInfo.addCircuitData(host, mCurrentRecvPacketID); - - // I added this - I think it's correct - DJS - // reset packet in ID - cdp->setPacketInID(mCurrentRecvPacketID); - - // And claim the packet is on the circuit we just added. - } - } - else - { - // this is an old circuit. . . is it still alive? - if (!cdp->isAlive()) - { - // nope. don't accept if we're protected - if (mbProtected) - { - // don't accept packets from unexpected sources - cdp = NULL; - } - else - { - // wake up the circuit - cdp->setAlive(TRUE); - - // reset packet in ID - cdp->setPacketInID(mCurrentRecvPacketID); - } - } - } + const bool resetPacketId = true; + cdp = findCircuit(host, resetPacketId); // At this point, cdp is now a pointer to the circuit that // this message came in on if it's valid, and NULL if the @@ -1644,6 +735,10 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) if (valid_packet) { + // enable this for output of message names + //llinfos << "< \"" << mTemplateMessageReader->getMessageName() + //<< "\"" << llendl; + /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages. if( 1 ) { @@ -1748,9 +843,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) { if (mbProtected && (!cdp)) { - llwarns << "Packet " - << mTemplateMessageReader->getMessageName() - << " from invalid circuit " << host << llendl; + llwarns << "Invalid Packet from invalid circuit " << host << llendl; mOffCircuitPackets++; } else @@ -2031,15 +1124,34 @@ S32 LLMessageSystem::flushReliable(const LLHost &host) return send_bytes; } - +LLHTTPClient::ResponderPtr LLMessageSystem::createResponder(const std::string& name) +{ + if(mSendReliable) + { + return new LLFnPtrResponder(mReliablePacketParams.mCallback, + mReliablePacketParams.mCallbackData, + name); + } + else + { + llwarns << "LLMessageSystem::sendMessage: Sending unreliable " + << mMessageBuilder->getMessageName() << " message via HTTP" + << llendl; + return new LLFnPtrResponder(NULL, NULL, + mMessageBuilder->getMessageName()); + } +} + // This can be called from signal handlers, // so should should not use llinfos. S32 LLMessageSystem::sendMessage(const LLHost &host) { if (! mMessageBuilder->isBuilt()) { - mSendSize = mMessageBuilder->buildMessage(mSendBuffer, - MAX_BUFFER_SIZE); + mSendSize = mMessageBuilder->buildMessage( + mSendBuffer, + MAX_BUFFER_SIZE, + 0); } if (!(host.isOk())) // if port and ip are zero, don't bother trying to send the message @@ -2068,6 +1180,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) else { // nope, open the new circuit + cdp = mCircuitInfo.addCircuitData(host, 0); } } @@ -2095,33 +1208,23 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) LLSD message = mLLSDMessageBuilder->getMessage(); const LLHTTPSender& sender = LLHTTPSender::getSender(host); - LLHTTPClient::ResponderPtr responder = NULL; - if(mSendReliable) - { - responder = - new LLFnPtrResponder(mReliablePacketParams.mCallback, - mReliablePacketParams.mCallbackData); - } - else - { - llwarns << "LLMessageSystem::sendMessage: Sending unreliable " << mMessageBuilder->getMessageName() << " message via HTTP" << llendl; - responder = new LLFnPtrResponder(NULL, NULL); - } sender.send(host, mLLSDMessageBuilder->getMessageName(), - message, responder); + message, createResponder(mLLSDMessageBuilder->getMessageName())); mSendReliable = FALSE; mReliablePacketParams.clear(); return 1; } - memset(mSendBuffer,0,LL_PACKET_ID_SIZE); // zero out the packet ID field + // zero out the flags and packetid. Subtract 1 here so that we do + // not overwrite the offset if it was set set in buildMessage(). + memset(mSendBuffer, 0, LL_PACKET_ID_SIZE - 1); // add the send id to the front of the message cdp->nextPacketOutID(); // Packet ID size is always 4 - *((S32*)&mSendBuffer[0]) = htonl(cdp->getPacketOutID()); + *((S32*)&mSendBuffer[PHL_PACKET_ID]) = htonl(cdp->getPacketOutID()); // Compress the message, which will usually reduce its size. U8 * buf_ptr = (U8 *)mSendBuffer; @@ -2264,7 +1367,7 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re char buffer[MAX_STRING]; /* Flawfinder: ignore */ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize: mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */ str << buffer - << mMessageReader->getMessageName() + << nullToEmpty(mMessageReader->getMessageName()) << (recv_reliable ? " reliable" : "") << " REJECTED"; llinfos << str.str() << llendl; @@ -2287,6 +1390,27 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re } } +S32 LLMessageSystem::sendMessage(const LLHost &host, const char* name, + const LLSD& message) +{ + if (!(host.isOk())) + { + llwarns << "trying to send message to invalid host" << llendl; + return 0; + } + newMessage(name); + if (mMessageBuilder != mLLSDMessageBuilder) + { + llwarns << "trying to send llsd message when builder is not LLSD!" + << llendl; + return 0; + } + + const LLHTTPSender& sender = LLHTTPSender::getSender(host); + sender.send(host, name, message, createResponder(name)); + return 1; +} + void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) { // RequestTrustedCircuit is how we establish trust, so don't spam @@ -2294,9 +1418,9 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit")) { llwarns << "Received trusted message on untrusted circuit. " - << "Will reply with deny. " - << "Message: " << mMessageReader->getMessageName() - << " Host: " << host << llendl; + << "Will reply with deny. " + << "Message: " << nullToEmpty(mMessageReader->getMessageName()) + << " Host: " << host << llendl; } if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) @@ -2346,7 +1470,7 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r char buffer[MAX_STRING]; /* Flawfinder: ignore */ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize : mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */ str << buffer - << mMessageReader->getMessageName() + << nullToEmpty(mMessageReader->getMessageName()) << (recv_reliable ? " reliable" : "") << (recv_resent ? " resent" : "") << (recv_acks ? " acks" : ""); @@ -2486,16 +1610,16 @@ void LLMessageSystem::disableCircuit(const LLHost &host) llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl; gMessageSystem->mIPPortToCircuitCode.erase(ip_port); } + mCircuitInfo.removeCircuitData(host); } else { // Sigh, since we can open circuits which don't have circuit // codes, it's possible for this to happen... - //llwarns << "Couldn't find circuit code for " << host << llendl; + llwarns << "Couldn't find circuit code for " << host << llendl; } - mCircuitInfo.removeCircuitData(host); } @@ -2917,6 +2041,30 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, } } +// static +void LLMessageSystem::processError(LLMessageSystem* msg, void**) +{ + char buffer[MTUBYTES]; + S32 error_code = 0; + msg->getS32("Data", "Code", error_code); + std::string error_token; + msg->getString("Data", "Token", MTUBYTES, buffer); + error_token.assign(buffer); + LLUUID error_id; + msg->getUUID("Data", "ID", error_id); + std::string error_system; + msg->getString("Data", "System", MTUBYTES, buffer); + error_system.assign(buffer); + std::string error_message; + msg->getString("Data", "Message", MTUBYTES, buffer); + error_message.assign(buffer); + + llwarns << "Message error from " << msg->getSender() << " - " + << error_code << " " << error_token << " " << error_id << " \"" + << error_system << "\" \"" << error_message << "\"" << llendl; +} + + static LLHTTPNode& messageRootNode() { static LLHTTPNode root_node; @@ -2944,10 +2092,13 @@ void LLMessageSystem::dispatch( const LLSD& message, LLHTTPNode::ResponsePtr responsep) { - if (msg_name.empty()) + if ((gMessageSystem->mMessageTemplates.find + (gMessageStringTable.getString(msg_name.c_str())) == + gMessageSystem->mMessageTemplates.end()) && + !LLMessageConfig::isValidMessage(msg_name)) { - llwarns << "LLMessageService::dispatch called with no message name" - << llendl; + llwarns << "Ignoring unknown message " << msg_name << llendl; + responsep->notFound("Invalid message name"); return; } @@ -2960,6 +2111,9 @@ void LLMessageSystem::dispatch( << path << llendl; return; } + // enable this for output of message names + //llinfos << "< \"" << msg_name << "\"" << llendl; + //lldebugs << "data: " << LLSDXMLStreamer(message) << llendl; handler->post(responsep, context, message); } @@ -3024,6 +2178,56 @@ void LLMessageSystem::setMessageBans( check_for_unrecognized_messages("untrusted", untrusted, mMessageTemplates); } +S32 LLMessageSystem::sendError( + const LLHost& host, + const LLUUID& agent_id, + S32 code, + const std::string& token, + const LLUUID& id, + const std::string& system, + const std::string& message, + const LLSD& data) +{ + newMessage("Error"); + nextBlockFast(_PREHASH_AgentData); + addUUIDFast(_PREHASH_AgentID, agent_id); + nextBlockFast(_PREHASH_Data); + addS32("Code", code); + addString("Token", token); + addUUID("ID", id); + addString("System", system); + std::string temp; + temp = message; + if(temp.size() > (size_t)MTUBYTES) temp.resize((size_t)MTUBYTES); + addString("Message", message); + LLPointer<LLSDBinaryFormatter> formatter = new LLSDBinaryFormatter; + std::ostringstream ostr; + formatter->format(data, ostr); + temp = ostr.str(); + bool pack_data = true; + static const std::string ERROR_MESSAGE_NAME("Error"); + if (LLMessageConfig::getMessageFlavor(ERROR_MESSAGE_NAME) == + LLMessageConfig::TEMPLATE_FLAVOR) + { + S32 msg_size = temp.size() + mMessageBuilder->getMessageSize(); + if(msg_size >= ETHERNET_MTU_BYTES) + { + pack_data = false; + } + } + if(pack_data) + { + addBinaryData("Data", (void*)temp.c_str(), temp.size()); + } + else + { + llwarns << "Data and message were too large -- data removed." + << llendl; + addBinaryData("Data", NULL, 0); + } + return sendReliable(host); +} + void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/) { TPACKETID packet_id; @@ -3049,37 +2253,8 @@ void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/) } } -void send_template_reply(LLMessageSystem* msg, const LLUUID& token) -{ - msg->newMessageFast(_PREHASH_TemplateChecksumReply); - msg->nextBlockFast(_PREHASH_DataBlock); - msg->addU32Fast(_PREHASH_Checksum, msg->mMessageFileChecksum); - msg->addU8Fast(_PREHASH_MajorVersion, U8(msg->mSystemVersionMajor) ); - msg->addU8Fast(_PREHASH_MinorVersion, U8(msg->mSystemVersionMinor) ); - msg->addU8Fast(_PREHASH_PatchVersion, U8(msg->mSystemVersionPatch) ); - msg->addU8Fast(_PREHASH_ServerVersion, U8(msg->mSystemVersionServer) ); - msg->addU32Fast(_PREHASH_Flags, msg->mVersionFlags); - msg->nextBlockFast(_PREHASH_TokenBlock); - msg->addUUIDFast(_PREHASH_Token, token); - msg->sendMessage(msg->getSender()); -} - -void process_template_checksum_request(LLMessageSystem* msg, void**) -{ - llinfos << "Message template checksum request received from " - << msg->getSender() << llendl; - send_template_reply(msg, LLUUID::null); -} - -void process_secured_template_checksum_request(LLMessageSystem* msg, void**) -{ - llinfos << "Secured message template checksum request received from " - << msg->getSender() << llendl; - LLUUID token; - msg->getUUIDFast(_PREHASH_TokenBlock, _PREHASH_Token, token); - send_template_reply(msg, token); -} +/* void process_log_messages(LLMessageSystem* msg, void**) { U8 log_message; @@ -3096,7 +2271,7 @@ void process_log_messages(LLMessageSystem* msg, void**) llinfos << "Stopping logging via message" << llendl; msg->stopLogging(); } -} +}*/ // Make circuit trusted if the MD5 Digest matches, otherwise // notify remote end that they are not trusted. @@ -3329,15 +2504,14 @@ BOOL start_messaging_system( //gMessageSystem->setHandlerFuncFast(_PREHASH_AckAddCircuitCode, ack_add_circuit_code, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_UseCircuitCode, LLMessageSystem::processUseCircuitCode, (void**)responder); gMessageSystem->setHandlerFuncFast(_PREHASH_PacketAck, process_packet_ack, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumRequest, process_template_checksum_request, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_SecuredTemplateChecksumRequest, process_secured_template_checksum_request, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_LogMessages, process_log_messages, NULL); + //gMessageSystem->setHandlerFuncFast(_PREHASH_LogMessages, process_log_messages, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_CreateTrustedCircuit, process_create_trusted_circuit, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_DenyTrustedCircuit, process_deny_trusted_circuit, NULL); + gMessageSystem->setHandlerFunc("Error", LLMessageSystem::processError); // We can hand this to the null_message_callback since it is a // trusted message, so it will automatically be denied if it isn't @@ -3451,11 +2625,11 @@ void LLMessageSystem::summarizeLogs(std::ostream& str) snprintf(buffer, MAX_STRING, "%35s%10s%10s%10s%10s", "Message", "Count", "Time", "Max", "Avg"); /* Flawfinder: ignore */ str << buffer << std:: endl; F32 avg; - for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), + for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(), end = mMessageTemplates.end(); iter != end; iter++) { - LLMessageTemplate* mt = iter->second; + const LLMessageTemplate* mt = iter->second; if(mt->mTotalDecoded > 0) { avg = mt->mTotalDecodeTime / (F32)mt->mTotalDecoded; @@ -3529,11 +2703,11 @@ void LLMessageSystem::dumpReceiveCounts() if(mNumMessageCounts > 0) { llinfos << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl; - for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), + for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(), end = mMessageTemplates.end(); iter != end; iter++) { - LLMessageTemplate* mt = iter->second; + const LLMessageTemplate* mt = iter->second; if (mt->mReceiveCount > 0) { llinfos << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes @@ -3581,8 +2755,10 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal() if (! mMessageBuilder->isBuilt()) { - mSendSize = mMessageBuilder->buildMessage(mSendBuffer, - MAX_BUFFER_SIZE); + mSendSize = mMessageBuilder->buildMessage( + mSendBuffer, + MAX_BUFFER_SIZE, + 0); } // TODO: babbage: remove this horror mMessageBuilder->setBuilt(FALSE); @@ -3596,7 +2772,7 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal() // skip the packet id field - for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) + for (U32 ii = 0; ii < LL_PACKET_ID_SIZE; ++ii) { count--; inptr++; @@ -3647,19 +2823,20 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal() -S32 LLMessageSystem::zeroCodeExpand(U8 **data, S32 *data_size) +S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size) { - - if ((*data_size ) < LL_PACKET_ID_SIZE) + if ((*data_size ) < LL_MINIMUM_VALID_PACKET_SIZE) { - llwarns << "zeroCodeExpand() called with data_size of " << *data_size << llendl; + llwarns << "zeroCodeExpand() called with data_size of " << *data_size + << llendl; } - + mTotalBytesIn += *data_size; - if (!(*data[0] & LL_ZERO_CODE_FLAG)) // if we're not zero-coded, just go 'way + // if we're not zero-coded, simply return. + if (!(*data[0] & LL_ZERO_CODE_FLAG)) { - return(0); + return 0; } S32 in_size = *data_size; @@ -3675,7 +2852,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8 **data, S32 *data_size) // skip the packet id field - for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) + for (U32 ii = 0; ii < LL_PACKET_ID_SIZE; ++ii) { count--; *outptr++ = *inptr++; @@ -3769,14 +2946,16 @@ bool LLMessageSystem::callHandler(const char *name, bool trustedSource, LLMessageSystem* msg) { name = gMessageStringTable.getString(name); - LLMessageTemplate* msg_template = mMessageTemplates[(char*)name]; - if (!msg_template) + message_template_name_map_t::const_iterator iter; + iter = mMessageTemplates.find(name); + if(iter == mMessageTemplates.end()) { llwarns << "LLMessageSystem::callHandler: unknown message " << name << llendl; return false; } - + + const LLMessageTemplate* msg_template = iter->second; if (msg_template->isBanned(trustedSource)) { llwarns << "LLMessageSystem::callHandler: banned message " @@ -3832,14 +3011,13 @@ BOOL LLMessageSystem::isCircuitCodeKnown(U32 code) const BOOL LLMessageSystem::isMessageFast(const char *msg) { - return(msg == mMessageReader->getMessageName()); + return msg == mMessageReader->getMessageName(); } char* LLMessageSystem::getMessageName() { - const char* name = mMessageReader->getMessageName(); - return name[0] == '\0'? NULL : const_cast<char*>(name); + return const_cast<char*>(mMessageReader->getMessageName()); } const LLUUID& LLMessageSystem::getSenderID() const @@ -4168,120 +3346,6 @@ void LLMessageSystem::dumpPacketToLog() } } -//static -BOOL LLMessageSystem::isTemplateConfirmed() -{ - return gMessageSystem->mTemplateConfirmed; -} - -//static -BOOL LLMessageSystem::doesTemplateMatch() -{ - if (!isTemplateConfirmed()) - { - return FALSE; - } - return gMessageSystem->mTemplateMatches; -} - -//static -void LLMessageSystem::sendMessageTemplateChecksum(const LLHost ¤tHost) -{ - gMessageSystem->mTemplateConfirmed = FALSE; - gMessageSystem->mTemplateMatches = FALSE; - gMessageSystem->newMessageFast(_PREHASH_TemplateChecksumRequest); - // Don't use ping-based retry - gMessageSystem->sendReliable(currentHost, 40, FALSE, 3, NULL, NULL); -} - -//static -void LLMessageSystem::processMessageTemplateChecksumReply(LLMessageSystem *msg, - void** user_data) -{ - U32 remote_template_checksum = 0; - msg->getU32Fast(_PREHASH_DataBlock, _PREHASH_Checksum, remote_template_checksum); - msg->mTemplateConfirmed = TRUE; - if ((remote_template_checksum) != msg->mMessageFileChecksum) - { - llwarns << "out of sync message template!" << llendl; - - msg->mTemplateMatches = FALSE; - msg->newMessageFast(_PREHASH_CloseCircuit); - msg->sendMessage(msg->getSender()); - return; - } - - msg->mTemplateMatches = TRUE; - llinfos << "According to " << msg->getSender() - << " the message template is current!" - << llendl; -} - -//static -void LLMessageSystem::sendSecureMessageTemplateChecksum(const LLHost& host) -{ - // generate an token for use during template checksum requests to - // prevent DOS attacks from injected bad template checksum replies. - LLUUID *template_tokenp = new LLUUID; - template_tokenp->generate(); - lldebugs << "random token: " << *template_tokenp << llendl; - - // register the handler for the reply while saving off template_token - gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumReply, - LLMessageSystem::processSecureTemplateChecksumReply, - (void**)template_tokenp); - - // send checksum request - gMessageSystem->mTemplateConfirmed = FALSE; - gMessageSystem->newMessageFast(_PREHASH_SecuredTemplateChecksumRequest); - gMessageSystem->nextBlockFast(_PREHASH_TokenBlock); - gMessageSystem->addUUIDFast(_PREHASH_Token, *template_tokenp); - gMessageSystem->sendReliable(host); -} - -//static -void LLMessageSystem::processSecureTemplateChecksumReply(LLMessageSystem *msg, - void** user_data) -{ - // copy the token out into the stack and delete allocated memory - LLUUID template_token = *((LLUUID*)user_data); - delete user_data; - - LLUUID received_token; - msg->getUUID("TokenBlock", "Token", received_token); - - if(received_token != template_token) - { - llwarns << "Incorrect token in template checksum reply: " - << received_token << llendl; - //return do_normal_idle; - return; - } - - U32 remote_template_checksum = 0; - U8 major_version = 0; - U8 minor_version = 0; - U8 patch_version = 0; - U8 server_version = 0; - U32 flags = 0x0; - msg->getU32("DataBlock", "Checksum", remote_template_checksum); - msg->getU8 ("DataBlock", "MajorVersion", major_version); - msg->getU8 ("DataBlock", "MinorVersion", minor_version); - msg->getU8 ("DataBlock", "PatchVersion", patch_version); - msg->getU8 ("DataBlock", "ServerVersion", server_version); - msg->getU32("DataBlock", "Flags", flags); - - msg->mTemplateConfirmed = TRUE; - if (remote_template_checksum != gMessageSystem->mMessageFileChecksum) - { - llinfos << "Message template out of sync" << llendl; - msg->mTemplateMatches = FALSE; - } - else - { - msg->mTemplateMatches = TRUE; - } -} //static U64 LLMessageSystem::getMessageTimeUsecs(const BOOL update) @@ -4332,14 +3396,32 @@ typedef std::map<const char*, LLMessageBuilder*> BuilderMap; void LLMessageSystem::newMessageFast(const char *name) { - if(LLMessageConfig::isMessageBuiltTemplate(name)) + LLMessageConfig::Flavor message_flavor = + LLMessageConfig::getMessageFlavor(name); + LLMessageConfig::Flavor server_flavor = + LLMessageConfig::getServerDefaultFlavor(); + + if(message_flavor == LLMessageConfig::TEMPLATE_FLAVOR) { mMessageBuilder = mTemplateMessageBuilder; } - else + else if (message_flavor == LLMessageConfig::LLSD_FLAVOR) { mMessageBuilder = mLLSDMessageBuilder; } + // NO_FLAVOR + else + { + if (server_flavor == LLMessageConfig::LLSD_FLAVOR) + { + mMessageBuilder = mLLSDMessageBuilder; + } + // TEMPLATE_FLAVOR or NO_FLAVOR + else + { + mMessageBuilder = mTemplateMessageBuilder; + } + } mSendReliable = FALSE; mMessageBuilder->newMessage(name); } @@ -4802,6 +3884,10 @@ void LLMessageSystem::getIPPort(const char *block, const char *var, U16 &u, void LLMessageSystem::getStringFast(const char *block, const char *var, S32 buffer_size, char *s, S32 blocknum) { + if(buffer_size <= 0) + { + llwarns << "buffer_size <= 0" << llendl; + } mMessageReader->getString(block, var, buffer_size, s, blocknum); } diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h index a4a8022631..9c07227a67 100644 --- a/indra/llmessage/message.h +++ b/indra/llmessage/message.h @@ -1,5 +1,5 @@ /** - * @FILE message.h + * @file message.h * @brief LLMessageSystem class header file * * Copyright (c) 2001-$CurrentYear$, Linden Research, Inc. @@ -30,11 +30,13 @@ #include "lltimer.h" #include "llpacketring.h" #include "llhost.h" +#include "llhttpclient.h" #include "llhttpnode.h" #include "llpacketack.h" #include "message_prehash.h" #include "llstl.h" #include "llmsgvariabletype.h" +#include "llmsgvariabletype.h" const U32 MESSAGE_MAX_STRINGS_LENGTH = 64; const U32 MESSAGE_NUMBER_OF_HASH_BUCKETS = 8192; @@ -106,7 +108,16 @@ const U8 LL_RELIABLE_FLAG = 0x40; const U8 LL_RESENT_FLAG = 0x20; const U8 LL_ACK_FLAG = 0x10; -const S32 LL_MINIMUM_VALID_PACKET_SIZE = LL_PACKET_ID_SIZE + 1; // 4 bytes id + 1 byte message name (high) +// 1 byte flags, 4 bytes sequence, 1 byte offset + 1 byte message name (high) +const S32 LL_MINIMUM_VALID_PACKET_SIZE = LL_PACKET_ID_SIZE + 1; +enum EPacketHeaderLayout +{ + PHL_FLAGS = 0, + PHL_PACKET_ID = 1, + PHL_OFFSET = 5, + PHL_NAME = 6 +}; + const S32 LL_DEFAULT_RELIABLE_RETRIES = 3; const F32 LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS = 1.f; @@ -135,8 +146,6 @@ class LLUUID; class LLMessageSystem; class LLPumpIO; -// message data pieces are used to collect the data called for by the message template - // message system exceptional condition handlers. enum EMessageException { @@ -148,6 +157,7 @@ enum EMessageException typedef void (*msg_exception_callback)(LLMessageSystem*,void*,EMessageException); +// message data pieces are used to collect the data called for by the message template class LLMsgData; class LLMsgBlkData; class LLMessageTemplate; @@ -160,6 +170,8 @@ class LLMessageReader; class LLTemplateMessageReader; class LLSDMessageReader; + + class LLUseCircuitCodeResponder { LOG_CLASS(LLMessageSystem); @@ -184,7 +196,6 @@ class LLMessageSystem // Set this flag to TRUE when you want *very* verbose logs. BOOL mVerboseLog; - U32 mMessageFileChecksum; F32 mMessageFileVersionNumber; typedef std::map<const char *, LLMessageTemplate*> message_template_name_map_t; @@ -430,8 +441,11 @@ public: void forwardReliable(const LLHost &host); void forwardReliable(const U32 circuit_code); + LLHTTPClient::ResponderPtr createResponder(const std::string& name); S32 sendMessage(const LLHost &host); S32 sendMessage(const U32 circuit); + S32 sendMessage(const LLHost &host, const char* name, + const LLSD& message); // BOOL decodeData(const U8 *buffer, const LLHost &host); @@ -508,6 +522,15 @@ public: // The actual sending is done by reallySendDenyTrustedCircuit() void sendDenyTrustedCircuit(const LLHost &host); + /** Return false if host is unknown or untrusted */ + bool isTrustedSender(const LLHost& host) const; + + /** Return false true if name is unknown or untrusted */ + bool isTrustedMessage(const std::string& name) const; + + /** Return false true if name is unknown or trusted */ + bool isUntrustedMessage(const std::string& name) const; + private: // A list of the circuits that need to be sent DenyTrustedCircuit messages. typedef std::set<LLHost> host_set_t; @@ -517,7 +540,6 @@ private: // related to sendDenyTrustedCircuit() void reallySendDenyTrustedCircuit(const LLHost &host); - public: // Use this to establish trust to and from a host. This blocks // until trust has been established, and probably should only be @@ -574,15 +596,6 @@ public: void setMaxMessageTime(const F32 seconds); // Max time to process messages before warning and dumping (neg to disable) void setMaxMessageCounts(const S32 num); // Max number of messages before dumping (neg to disable) - // statics - static BOOL isTemplateConfirmed(); - static BOOL doesTemplateMatch(); - static void sendMessageTemplateChecksum(const LLHost&); - static void processMessageTemplateChecksumReply(LLMessageSystem *msg, - void** user_data); - static void sendSecureMessageTemplateChecksum(const LLHost&); - static void processSecureTemplateChecksumReply(LLMessageSystem *msg, - void** user_data); static U64 getMessageTimeUsecs(const BOOL update = FALSE); // Get the current message system time in microseconds static F64 getMessageTimeSeconds(const BOOL update = FALSE); // Get the current message system time in seconds @@ -593,6 +606,7 @@ public: //static void processAssignCircuitCode(LLMessageSystem* msg, void**); static void processAddCircuitCode(LLMessageSystem* msg, void**); static void processUseCircuitCode(LLMessageSystem* msg, void**); + static void processError(LLMessageSystem* msg, void**); // dispatch llsd message to http node tree static void dispatch(const std::string& msg_name, @@ -603,13 +617,33 @@ public: void setMessageBans(const LLSD& trusted, const LLSD& untrusted); + /** + * @brief send an error message to the host. This is a helper method. + * + * @param host Destination host. + * @param agent_id Destination agent id (may be null) + * @param code An HTTP status compatible error code. + * @param token A specific short string based message + * @param id The transactionid/uniqueid/sessionid whatever. + * @param system The hierarchical path to the system (255 bytes) + * @param message Human readable message (1200 bytes) + * @param data Extra info. + * @return Returns value returned from sendReliable(). + */ + S32 sendError( + const LLHost& host, + const LLUUID& agent_id, + S32 code, + const std::string& token, + const LLUUID& id, + const std::string& system, + const std::string& message, + const LLSD& data); + // Check UDP messages and pump http_pump to receive HTTP messages. bool checkAllMessages(S64 frame_count, LLPumpIO* http_pump); private: - // data used in those internal handlers - BOOL mTemplateConfirmed; - BOOL mTemplateMatches; // The mCircuitCodes is a map from circuit codes to session // ids. This allows us to verify sessions on connect. @@ -619,7 +653,7 @@ private: // Viewers need to track a process session in order to make sure // that no one gives them a bad circuit code. LLUUID mSessionID; - + void addTemplate(LLMessageTemplate *templatep); void clearReceiveState(); BOOL decodeTemplate( const U8* buffer, S32 buffer_size, LLMessageTemplate** msg_template ); @@ -690,6 +724,10 @@ private: bool callHandler(const char *name, bool trustedSource, LLMessageSystem* msg); + + + /** Find, create or revive circuit for host as needed */ + LLCircuitData* findCircuit(const LLHost& host, bool resetPacketId); }; diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index e153114d1d..67ee5d5675 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -7,14 +7,14 @@ */ /** - * Generated from message template version number 1.053 + * Generated from message template version number 2.000 */ #include "linden_common.h" #include "message.h" -F32 gPrehashVersionNumber = 1.053f; +F32 gPrehashVersionNumber = 2.000f; char * _PREHASH_X; char * _PREHASH_Y; @@ -39,7 +39,6 @@ char * _PREHASH_ScriptAnswerYes; char * _PREHASH_PartnerID; char * _PREHASH_DirLandQuery; char * _PREHASH_TeleportStart; -char * _PREHASH_LogMessages; char * _PREHASH_AboutText; char * _PREHASH_VisualParam; char * _PREHASH_GroupPrims; @@ -47,10 +46,8 @@ char * _PREHASH_SelectedPrims; char * _PREHASH_ID; char * _PREHASH_UUIDNameRequest; char * _PREHASH_UUIDGroupNameRequest; -char * _PREHASH_MoneyTransactionsRequest; char * _PREHASH_GroupAccountTransactionsRequest; char * _PREHASH_MapNameRequest; -char * _PREHASH_MailTaskSimRequest; char * _PREHASH_UpdateSimulator; char * _PREHASH_BillableFactor; char * _PREHASH_ObjectBonusFactor; @@ -60,7 +57,6 @@ char * _PREHASH_ConfirmEnableSimulator; char * _PREHASH_LayerType; char * _PREHASH_OwnerRole; char * _PREHASH_ParcelOverlay; -char * _PREHASH_AdjustBalance; char * _PREHASH_GroupOwned; char * _PREHASH_IP; char * _PREHASH_ChatFromViewer; @@ -95,8 +91,8 @@ char * _PREHASH_SensedData; char * _PREHASH_UpdateBlock; char * _PREHASH_ClassifiedGodDelete; char * _PREHASH_ObjectGrabUpdate; -char * _PREHASH_TaxDate; char * _PREHASH_LocationPos; +char * _PREHASH_TaxDate; char * _PREHASH_StartDateTime; char * _PREHASH_ObjectUpdateCached; char * _PREHASH_Packets; @@ -128,14 +124,11 @@ char * _PREHASH_AABBMin; char * _PREHASH_ClassifiedFlags; char * _PREHASH_ControlFlags; char * _PREHASH_TeleportRequest; -char * _PREHASH_SpaceLocationTeleportRequest; -char * _PREHASH_LeaderBoardRequest; char * _PREHASH_ScriptTeleportRequest; +char * _PREHASH_EstateCovenantRequest; char * _PREHASH_DateUTC; char * _PREHASH_TaskIDs; -char * _PREHASH_EstateCovenantRequest; char * _PREHASH_RequestResult; -char * _PREHASH_ReputationAgentAssign; char * _PREHASH_CanAcceptAgents; char * _PREHASH_ObjectSaleInfo; char * _PREHASH_KillChildAgents; @@ -147,7 +140,6 @@ char * _PREHASH_InfoBlock; char * _PREHASH_OwnershipCost; char * _PREHASH_AvatarNotesUpdate; char * _PREHASH_PID; -char * _PREHASH_TimeString; char * _PREHASH_DirPopularReply; char * _PREHASH_TerrainHeightRange00; char * _PREHASH_SimData; @@ -173,7 +165,6 @@ char * _PREHASH_Objects; char * _PREHASH_URL; char * _PREHASH_CreationDate; char * _PREHASH_JointPivot; -char * _PREHASH_RateeID; char * _PREHASH_FPS; char * _PREHASH_HasTelehub; char * _PREHASH_PathEnd; @@ -198,7 +189,6 @@ char * _PREHASH_GroupNoticesListReply; char * _PREHASH_ParcelAccessListReply; char * _PREHASH_RpcChannelReply; char * _PREHASH_RegionPresenceResponse; -char * _PREHASH_AgentPresenceResponse; char * _PREHASH_CharterMember; char * _PREHASH_EdgeData; char * _PREHASH_NameData; @@ -212,14 +202,12 @@ char * _PREHASH_Mag; char * _PREHASH_ParcelPropertiesRequestByID; char * _PREHASH_ObjectLink; char * _PREHASH_RpcScriptReplyInbound; -char * _PREHASH_BoardData; char * _PREHASH_RezData; char * _PREHASH_RemoveInventoryObjects; char * _PREHASH_GroupProposalBallot; char * _PREHASH_RPCServerIP; char * _PREHASH_Far; char * _PREHASH_GodSessionID; -char * _PREHASH_ViewerDigest; char * _PREHASH_FLAboutText; char * _PREHASH_RegionHandshakeReply; char * _PREHASH_GroupActiveProposalItemReply; @@ -231,7 +219,6 @@ char * _PREHASH_Set; char * _PREHASH_NewName; char * _PREHASH_Key; char * _PREHASH_AgentID; -char * _PREHASH_OnlineStatusRequest; char * _PREHASH_EventNotificationRemoveRequest; char * _PREHASH_NewFolderID; char * _PREHASH_Arc; @@ -243,7 +230,6 @@ char * _PREHASH_Top; char * _PREHASH_MiscStats; char * _PREHASH_ImageID; char * _PREHASH_DataPacket; -char * _PREHASH_ObjectDehinge; char * _PREHASH_You; char * _PREHASH_ScriptControlChange; char * _PREHASH_LoadURL; @@ -260,9 +246,9 @@ char * _PREHASH_Contribution; char * _PREHASH_SetGroupContribution; char * _PREHASH_Offline; char * _PREHASH_AgentIsNowWearing; -char * _PREHASH_SecPerDay; char * _PREHASH_Members; char * _PREHASH_FailedResends; +char * _PREHASH_SecPerDay; char * _PREHASH_CameraCenter; char * _PREHASH_CameraLeftAxis; char * _PREHASH_ExBlock; @@ -270,7 +256,6 @@ char * _PREHASH_Channel; char * _PREHASH_NetTest; char * _PREHASH_DiscardLevel; char * _PREHASH_LayerID; -char * _PREHASH_RatorID; char * _PREHASH_GrabOffset; char * _PREHASH_SimPort; char * _PREHASH_PricePerMeter; @@ -290,21 +275,16 @@ char * _PREHASH_SitName; char * _PREHASH_RegionsVisited; char * _PREHASH_DirClassifiedReply; char * _PREHASH_AvatarClassifiedReply; -char * _PREHASH_ReputationIndividualReply; char * _PREHASH_MediaURL; char * _PREHASH_CompleteAgentMovement; -char * _PREHASH_SpaceIP; char * _PREHASH_ClassifiedID; char * _PREHASH_LocalID; +char * _PREHASH_SpaceIP; char * _PREHASH_RemoveItem; char * _PREHASH_LogFailedMoneyTransaction; char * _PREHASH_ViewerStartAuction; char * _PREHASH_StartAuction; -char * _PREHASH_NameValueName; -char * _PREHASH_AngVelX; char * _PREHASH_DuplicateFlags; -char * _PREHASH_AngVelY; -char * _PREHASH_AngVelZ; char * _PREHASH_TextColor; char * _PREHASH_SlaveID; char * _PREHASH_Charter; @@ -315,21 +295,16 @@ char * _PREHASH_ParcelAuctions; char * _PREHASH_OwnerIsGroup; char * _PREHASH_NameValuePair; char * _PREHASH_RemoveNameValuePair; -char * _PREHASH_GetNameValuePair; char * _PREHASH_BulkUpdateInventory; char * _PREHASH_UpdateTaskInventory; char * _PREHASH_RemoveTaskInventory; char * _PREHASH_MoveTaskInventory; char * _PREHASH_RequestTaskInventory; char * _PREHASH_ReplyTaskInventory; -char * _PREHASH_DeclineInventory; char * _PREHASH_AggregatePermInventory; -char * _PREHASH_SimulatorInfo; -char * _PREHASH_MoneyTransactionsReply; char * _PREHASH_GroupAccountTransactionsReply; -char * _PREHASH_MailTaskSimReply; +char * _PREHASH_SimulatorInfo; char * _PREHASH_WearableData; -char * _PREHASH_StatisticsData; char * _PREHASH_Enabled; char * _PREHASH_Savings; char * _PREHASH_SimulatorLoad; @@ -341,15 +316,12 @@ char * _PREHASH_JoinGroupRequest; char * _PREHASH_LeaveGroupRequest; char * _PREHASH_InviteGroupRequest; char * _PREHASH_LiveHelpGroupRequest; -char * _PREHASH_ServerVersion; char * _PREHASH_PriceParcelClaimFactor; char * _PREHASH_BillableArea; char * _PREHASH_ObjectID; char * _PREHASH_ObjectFlagUpdate; char * _PREHASH_GroupRoleUpdate; char * _PREHASH_RequestInventoryAsset; -char * _PREHASH_RedoLand; -char * _PREHASH_TravelAccess; char * _PREHASH_ChangedGrid; char * _PREHASH_AgentDropGroup; char * _PREHASH_Details; @@ -382,7 +354,6 @@ char * _PREHASH_Timestamp; char * _PREHASH_GlobalPos; char * _PREHASH_GrabOffsetInitial; char * _PREHASH_IsTrial; -char * _PREHASH_FinalizeLogout; char * _PREHASH_ObjectDuplicateOnRay; char * _PREHASH_GroupMembershipCount; char * _PREHASH_MethodData; @@ -418,32 +389,26 @@ char * _PREHASH_TaskData; char * _PREHASH_SimWideMaxPrims; char * _PREHASH_TotalPrims; char * _PREHASH_ProfileBegin; -char * _PREHASH_MoneyDetailsRequest; char * _PREHASH_Request; char * _PREHASH_GroupAccountDetailsRequest; char * _PREHASH_GroupActiveProposalsRequest; char * _PREHASH_StringValue; -char * _PREHASH_ClosestSimulator; char * _PREHASH_Version; char * _PREHASH_OtherCount; char * _PREHASH_MemberCount; char * _PREHASH_ChatData; char * _PREHASH_IsGroupOwned; char * _PREHASH_EnergyEfficiency; -char * _PREHASH_MaxPlace; char * _PREHASH_PickInfoUpdate; char * _PREHASH_PickDelete; char * _PREHASH_ScriptReset; char * _PREHASH_Requester; char * _PREHASH_ForSale; char * _PREHASH_NearestLandingRegionReply; -char * _PREHASH_RecordAgentPresence; -char * _PREHASH_EraseAgentPresence; char * _PREHASH_ParcelID; char * _PREHASH_Godlike; char * _PREHASH_TotalDebits; char * _PREHASH_Direction; -char * _PREHASH_Appearance; char * _PREHASH_HealthData; char * _PREHASH_LeftAxis; char * _PREHASH_LocationBlock; @@ -451,41 +416,31 @@ char * _PREHASH_ObjectImage; char * _PREHASH_TerrainStartHeight00; char * _PREHASH_TerrainStartHeight01; char * _PREHASH_TerrainStartHeight10; -char * _PREHASH_ObjectHinge; char * _PREHASH_TerrainStartHeight11; -char * _PREHASH_MetersPerGrid; char * _PREHASH_WaterHeight; char * _PREHASH_FetchInventoryReply; -char * _PREHASH_MoneySummaryReply; char * _PREHASH_GroupAccountSummaryReply; char * _PREHASH_AttachedSound; char * _PREHASH_ParamInUse; char * _PREHASH_GodKickUser; char * _PREHASH_PickName; char * _PREHASH_TaskName; -char * _PREHASH_SubType; char * _PREHASH_ObjectCount; char * _PREHASH_RegionPresenceRequestByHandle; char * _PREHASH_RezSingleAttachmentFromInv; char * _PREHASH_ChildAgentUpdate; -char * _PREHASH_ToID; -char * _PREHASH_ViewerPort; char * _PREHASH_IsOwnerGroup; char * _PREHASH_AgentHeightWidth; char * _PREHASH_VerticalAngle; char * _PREHASH_WearableType; char * _PREHASH_AggregatePermNextOwner; char * _PREHASH_ShowInList; -char * _PREHASH_PositionSuggestion; char * _PREHASH_UpdateParcel; -char * _PREHASH_ClearAgentSessions; char * _PREHASH_SetAlwaysRun; char * _PREHASH_NVPair; char * _PREHASH_SearchType; char * _PREHASH_ObjectSpinStart; char * _PREHASH_UseEstateSun; -char * _PREHASH_LogoutBlock; -char * _PREHASH_RelayLogControl; char * _PREHASH_RegionID; char * _PREHASH_AbuseRegionID; char * _PREHASH_Creator; @@ -494,14 +449,12 @@ char * _PREHASH_DirEventsReply; char * _PREHASH_EventInfoReply; char * _PREHASH_UserInfoReply; char * _PREHASH_PathRadiusOffset; -char * _PREHASH_SessionInfo; char * _PREHASH_TextureData; char * _PREHASH_ChatPass; char * _PREHASH_TargetID; char * _PREHASH_DefaultPayPrice; char * _PREHASH_UserLocation; char * _PREHASH_MaxPrims; -char * _PREHASH_RegionIP; char * _PREHASH_LandmarkID; char * _PREHASH_InitiateDownload; char * _PREHASH_Name; @@ -509,18 +462,13 @@ char * _PREHASH_OtherCleanTime; char * _PREHASH_ParcelSetOtherCleanTime; char * _PREHASH_TeleportPriceExponent; char * _PREHASH_Gain; -char * _PREHASH_VelX; char * _PREHASH_PacketAck; char * _PREHASH_PathSkew; -char * _PREHASH_Negative; -char * _PREHASH_VelY; char * _PREHASH_SimulatorShutdownRequest; char * _PREHASH_NearestLandingRegionRequest; -char * _PREHASH_VelZ; char * _PREHASH_OtherID; char * _PREHASH_MemberID; char * _PREHASH_MapLayerRequest; -char * _PREHASH_PatchVersion; char * _PREHASH_ObjectScale; char * _PREHASH_TargetIP; char * _PREHASH_Redo; @@ -563,27 +511,20 @@ char * _PREHASH_Perp; char * _PREHASH_Code; char * _PREHASH_InvType; char * _PREHASH_AgentFOV; -char * _PREHASH_BulkMoneyTransfer; char * _PREHASH_Audible; char * _PREHASH_AuctionData; char * _PREHASH_IDBlock; -char * _PREHASH_ReputationData; char * _PREHASH_West; char * _PREHASH_Undo; char * _PREHASH_TotalNumItems; char * _PREHASH_Info; char * _PREHASH_Area; -char * _PREHASH_Behavior; char * _PREHASH_SimCrashed; char * _PREHASH_Text; -char * _PREHASH_AgentToNewRegion; char * _PREHASH_PriceGroupCreate; char * _PREHASH_ObjectShape; char * _PREHASH_GroupRoleDataReply; -char * _PREHASH_PosX; -char * _PREHASH_PosY; char * _PREHASH_MuteCRC; -char * _PREHASH_PosZ; char * _PREHASH_Size; char * _PREHASH_FromAddress; char * _PREHASH_Body; @@ -601,16 +542,14 @@ char * _PREHASH_Stat; char * _PREHASH_SoundID; char * _PREHASH_Item; char * _PREHASH_User; -char * _PREHASH_RemoteInfos; char * _PREHASH_Prey; -char * _PREHASH_UsecSinceStart; char * _PREHASH_RayStart; +char * _PREHASH_UsecSinceStart; char * _PREHASH_ParcelData; char * _PREHASH_CameraUpAxis; char * _PREHASH_ScriptDialog; char * _PREHASH_MasterParcelData; char * _PREHASH_Invalid; -char * _PREHASH_MinPlace; char * _PREHASH_ProfileCurve; char * _PREHASH_ParcelAccessListUpdate; char * _PREHASH_MuteListUpdate; @@ -629,14 +568,12 @@ char * _PREHASH_DeRezObject; char * _PREHASH_IsTemporary; char * _PREHASH_InsigniaID; char * _PREHASH_CheckFlags; -char * _PREHASH_TransferPriority; char * _PREHASH_EventID; char * _PREHASH_Selected; char * _PREHASH_FromAgentId; char * _PREHASH_Type; char * _PREHASH_ChatType; char * _PREHASH_ReportData; -char * _PREHASH_LeaderBoardData; char * _PREHASH_RequestBlock; char * _PREHASH_GrantData; char * _PREHASH_DetachAttachmentIntoInv; @@ -652,12 +589,9 @@ char * _PREHASH_OnlineNotification; char * _PREHASH_OfflineNotification; char * _PREHASH_SendPostcard; char * _PREHASH_RequestFlags; -char * _PREHASH_MoneyHistoryRequest; -char * _PREHASH_MoneySummaryRequest; char * _PREHASH_GroupAccountSummaryRequest; char * _PREHASH_GroupVoteHistoryRequest; char * _PREHASH_ParamValue; -char * _PREHASH_Checksum; char * _PREHASH_MaxAgents; char * _PREHASH_CreateNewOutfitAttachments; char * _PREHASH_RegionHandle; @@ -667,12 +601,10 @@ char * _PREHASH_AvatarInterestsUpdate; char * _PREHASH_GroupNoticeID; char * _PREHASH_ParcelName; char * _PREHASH_PriceObjectRent; -char * _PREHASH_ConnectAgentToUserserver; -char * _PREHASH_ConnectToUserserver; char * _PREHASH_OfferCallingCard; -char * _PREHASH_AgentAccess; char * _PREHASH_AcceptCallingCard; char * _PREHASH_DeclineCallingCard; +char * _PREHASH_AgentAccess; char * _PREHASH_DataHomeLocationReply; char * _PREHASH_EventLocationReply; char * _PREHASH_TerseDateID; @@ -690,8 +622,8 @@ char * _PREHASH_Invoice; char * _PREHASH_IntervalDays; char * _PREHASH_PathScaleX; char * _PREHASH_FromTaskID; -char * _PREHASH_TimeInfo; char * _PREHASH_PathScaleY; +char * _PREHASH_TimeInfo; char * _PREHASH_PublicCount; char * _PREHASH_ParcelJoin; char * _PREHASH_GroupRolesCount; @@ -716,7 +648,6 @@ char * _PREHASH_NearestLandingRegionUpdated; char * _PREHASH_PassToAgent; char * _PREHASH_PreyAgent; char * _PREHASH_SimStats; -char * _PREHASH_Options; char * _PREHASH_LogoutReply; char * _PREHASH_FeatureDisabled; char * _PREHASH_ObjectLocalID; @@ -727,10 +658,8 @@ char * _PREHASH_Destination; char * _PREHASH_MasterID; char * _PREHASH_TransferData; char * _PREHASH_WantToMask; -char * _PREHASH_AvatarData; char * _PREHASH_ParcelSelectObjects; char * _PREHASH_ExtraParams; -char * _PREHASH_LogLogin; char * _PREHASH_CreatorID; char * _PREHASH_Summary; char * _PREHASH_BuyObjectInventory; @@ -771,8 +700,8 @@ char * _PREHASH_ButtonLabel; char * _PREHASH_GranterID; char * _PREHASH_WantToText; char * _PREHASH_ReportType; -char * _PREHASH_DataBlock; char * _PREHASH_SimulatorReady; +char * _PREHASH_DataBlock; char * _PREHASH_AnimationSourceList; char * _PREHASH_SubscribeLoad; char * _PREHASH_UnsubscribeLoad; @@ -799,9 +728,8 @@ char * _PREHASH_Header; char * _PREHASH_GestureFlags; char * _PREHASH_XferID; char * _PREHASH_StatValue; -char * _PREHASH_PickID; char * _PREHASH_TaskID; -char * _PREHASH_GridsPerEdge; +char * _PREHASH_PickID; char * _PREHASH_RayEnd; char * _PREHASH_Throttles; char * _PREHASH_RebakeAvatarTextures; @@ -814,30 +742,24 @@ char * _PREHASH_Access; char * _PREHASH_TitleRoleID; char * _PREHASH_SquareMetersCredit; char * _PREHASH_Filename; -char * _PREHASH_SecuredTemplateChecksumRequest; -char * _PREHASH_TemplateChecksumRequest; -char * _PREHASH_AgentPresenceRequest; char * _PREHASH_ClassifiedInfoRequest; char * _PREHASH_ParcelInfoRequest; char * _PREHASH_ParcelObjectOwnersRequest; char * _PREHASH_TeleportLandmarkRequest; char * _PREHASH_EventInfoRequest; -char * _PREHASH_ChatFromSimulator; -char * _PREHASH_PickInfoRequest; char * _PREHASH_MoneyBalanceRequest; char * _PREHASH_GroupMembersRequest; char * _PREHASH_GroupRoleMembersRequest; +char * _PREHASH_ChatFromSimulator; char * _PREHASH_OldFolderID; char * _PREHASH_UserInfoRequest; char * _PREHASH_TextureID; char * _PREHASH_ProfileURL; char * _PREHASH_Handle; -char * _PREHASH_StartParcelRenameAck; char * _PREHASH_ButtonIndex; char * _PREHASH_GetScriptRunning; char * _PREHASH_SetScriptRunning; char * _PREHASH_Health; -char * _PREHASH_FileID; char * _PREHASH_CircuitInfo; char * _PREHASH_ObjectBuy; char * _PREHASH_ProfileEnd; @@ -862,7 +784,6 @@ char * _PREHASH_PingID; char * _PREHASH_Change; char * _PREHASH_Height; char * _PREHASH_Region; -char * _PREHASH_MoneyHistoryReply; char * _PREHASH_TelehubInfo; char * _PREHASH_StateSave; char * _PREHASH_RoleData; @@ -873,11 +794,10 @@ char * _PREHASH_ParcelGodMarkAsContent; char * _PREHASH_UsePhysics; char * _PREHASH_RegionDenyTransacted; char * _PREHASH_JointType; -char * _PREHASH_TaxEstimate; char * _PREHASH_ObjectTaxEstimate; char * _PREHASH_LightTaxEstimate; -char * _PREHASH_TeleportLandingStatusChanged; char * _PREHASH_LandTaxEstimate; +char * _PREHASH_TeleportLandingStatusChanged; char * _PREHASH_GroupTaxEstimate; char * _PREHASH_AvgViewerFPS; char * _PREHASH_Buttons; @@ -909,8 +829,6 @@ char * _PREHASH_WinnerID; char * _PREHASH_ChannelType; char * _PREHASH_NonExemptMembers; char * _PREHASH_Agents; -char * _PREHASH_SimulatorStart; -char * _PREHASH_Enable; char * _PREHASH_MemberData; char * _PREHASH_ToGroupID; char * _PREHASH_ImageNotInDatabase; @@ -918,27 +836,21 @@ char * _PREHASH_StartDate; char * _PREHASH_AnimID; char * _PREHASH_Serial; char * _PREHASH_AbuseRegionName; -char * _PREHASH_ControlPort; char * _PREHASH_ModifyLand; char * _PREHASH_Digest; char * _PREHASH_Victim; char * _PREHASH_Script; -char * _PREHASH_TemplateChecksumReply; char * _PREHASH_PickInfoReply; char * _PREHASH_MoneyBalanceReply; char * _PREHASH_RoutedMoneyBalanceReply; char * _PREHASH_RoleID; char * _PREHASH_RegionInfo; -char * _PREHASH_Sequence; char * _PREHASH_GodUpdateRegionInfo; -char * _PREHASH_LocalX; -char * _PREHASH_LocalY; char * _PREHASH_StartAnim; -char * _PREHASH_Location; char * _PREHASH_Action; +char * _PREHASH_Location; char * _PREHASH_Rights; char * _PREHASH_SearchDir; -char * _PREHASH_Active; char * _PREHASH_TransferRequest; char * _PREHASH_ScriptSensorRequest; char * _PREHASH_MoneyTransferRequest; @@ -949,8 +861,6 @@ char * _PREHASH_Center; char * _PREHASH_SharedData; char * _PREHASH_PSBlock; char * _PREHASH_UUIDNameBlock; -char * _PREHASH_Viewer; -char * _PREHASH_GroupNoticeDelete; char * _PREHASH_GroupTitleUpdate; char * _PREHASH_Method; char * _PREHASH_TouchName; @@ -962,11 +872,9 @@ char * _PREHASH_GodlikeMessage; char * _PREHASH_SystemMessage; char * _PREHASH_BodyRotation; char * _PREHASH_SearchRegions; -char * _PREHASH_Ignore; char * _PREHASH_AnimationData; char * _PREHASH_StatID; char * _PREHASH_ItemID; -char * _PREHASH_AvatarStatisticsReply; char * _PREHASH_ScriptDialogReply; char * _PREHASH_RegionIDAndHandleReply; char * _PREHASH_CameraAtOffset; @@ -991,7 +899,6 @@ char * _PREHASH_OldItemID; char * _PREHASH_RegionPort; char * _PREHASH_PriceEnergyUnit; char * _PREHASH_Bitmap; -char * _PREHASH_TrackAgentSession; char * _PREHASH_CacheMissType; char * _PREHASH_VFileID; char * _PREHASH_GroupInsigniaID; @@ -1039,7 +946,6 @@ char * _PREHASH_MeanCollisionAlert; char * _PREHASH_CanAcceptTasks; char * _PREHASH_ItemData; char * _PREHASH_AnimationList; -char * _PREHASH_PassObject; char * _PREHASH_Reputation; char * _PREHASH_IntValue; char * _PREHASH_TargetType; @@ -1062,10 +968,8 @@ char * _PREHASH_ParcelBuy; char * _PREHASH_DirFindQueryBackend; char * _PREHASH_DirPlacesQueryBackend; char * _PREHASH_DirClassifiedQueryBackend; -char * _PREHASH_DirPicksQueryBackend; char * _PREHASH_DirLandQueryBackend; char * _PREHASH_DirPopularQueryBackend; -char * _PREHASH_LogoutDemand; char * _PREHASH_HistoryData; char * _PREHASH_SnapshotID; char * _PREHASH_Aspect; @@ -1073,7 +977,6 @@ char * _PREHASH_ParamSize; char * _PREHASH_VoteCast; char * _PREHASH_CastsShadows; char * _PREHASH_EveryoneMask; -char * _PREHASH_SetSunPhase; char * _PREHASH_ObjectSpinUpdate; char * _PREHASH_MaturePublish; char * _PREHASH_UseExistingAsset; @@ -1082,7 +985,6 @@ char * _PREHASH_ParcelLocalID; char * _PREHASH_TeleportCancel; char * _PREHASH_UnixTime; char * _PREHASH_QueryFlags; -char * _PREHASH_LastExecFroze; char * _PREHASH_AlwaysRun; char * _PREHASH_Bottom; char * _PREHASH_ButtonData; @@ -1101,7 +1003,6 @@ char * _PREHASH_NVPairs; char * _PREHASH_GroupNoticesListRequest; char * _PREHASH_ParcelAccessListRequest; char * _PREHASH_MuteListRequest; -char * _PREHASH_StartPeriod; char * _PREHASH_RpcChannelRequest; char * _PREHASH_LandStatRequest; char * _PREHASH_PlacesQuery; @@ -1129,34 +1030,27 @@ char * _PREHASH_SnapSelection; char * _PREHASH_SoundTrigger; char * _PREHASH_TerrainRaiseLimit; char * _PREHASH_Quorum; -char * _PREHASH_TokenBlock; char * _PREHASH_AgentBlock; char * _PREHASH_CommandBlock; char * _PREHASH_PricePublicObjectDecay; char * _PREHASH_SpawnPointPos; -char * _PREHASH_AttachedSoundCutoffRadius; char * _PREHASH_VolumeDetail; char * _PREHASH_FromAgentName; char * _PREHASH_Range; char * _PREHASH_DirectoryVisibility; char * _PREHASH_PublicIP; char * _PREHASH_TeleportFailed; -char * _PREHASH_OnlineStatusReply; -char * _PREHASH_RequestAvatarInfo; char * _PREHASH_PreloadSound; char * _PREHASH_ScreenshotID; char * _PREHASH_CovenantTimestamp; char * _PREHASH_OldestUnacked; char * _PREHASH_SimulatorIP; -char * _PREHASH_ObjectImport; char * _PREHASH_Value; char * _PREHASH_JointAxisOrAnchor; char * _PREHASH_Test0; char * _PREHASH_Test1; char * _PREHASH_Test2; char * _PREHASH_SunPhase; -char * _PREHASH_Place; -char * _PREHASH_Phase; char * _PREHASH_ParcelDivide; char * _PREHASH_PriceObjectClaim; char * _PREHASH_Field; @@ -1166,7 +1060,6 @@ char * _PREHASH_LiveHelpGroupReply; char * _PREHASH_Score; char * _PREHASH_Image; char * _PREHASH_ObjectClickAction; -char * _PREHASH_Delta; char * _PREHASH_Parameter; char * _PREHASH_Flags; char * _PREHASH_Plane; @@ -1176,26 +1069,24 @@ char * _PREHASH_DirFindQuery; char * _PREHASH_Textures; char * _PREHASH_EventData; char * _PREHASH_Final; +char * _PREHASH_System; char * _PREHASH_TelehubPos; char * _PREHASH_ReportAutosaveCrash; char * _PREHASH_CreateTrustedCircuit; char * _PREHASH_DenyTrustedCircuit; char * _PREHASH_RequestTrustedCircuit; char * _PREHASH_Codec; -char * _PREHASH_Level; char * _PREHASH_Modal; char * _PREHASH_ChildAgentUnknown; char * _PREHASH_LandingType; char * _PREHASH_ScriptRunningReply; -char * _PREHASH_MoneyDetailsReply; char * _PREHASH_Reply; +char * _PREHASH_GroupAccountDetailsReply; char * _PREHASH_TelehubRot; -char * _PREHASH_RequestFriendship; char * _PREHASH_AcceptFriendship; -char * _PREHASH_GroupAccountDetailsReply; +char * _PREHASH_ItemType; char * _PREHASH_DwellInfo; char * _PREHASH_AgentResume; -char * _PREHASH_ItemType; char * _PREHASH_MailFilter; char * _PREHASH_Disconnect; char * _PREHASH_SimPosition; @@ -1222,7 +1113,6 @@ char * _PREHASH_VoteType; char * _PREHASH_CategoryID; char * _PREHASH_Token; char * _PREHASH_AggregatePerms; -char * _PREHASH_StartParcelRemoveAck; char * _PREHASH_ObjectSelect; char * _PREHASH_ForceObjectSelect; char * _PREHASH_Price; @@ -1251,7 +1141,6 @@ char * _PREHASH_Notes; char * _PREHASH_AvatarID; char * _PREHASH_FounderID; char * _PREHASH_EndPointID; -char * _PREHASH_StipendEstimate; char * _PREHASH_LocationLookAt; char * _PREHASH_Sound; char * _PREHASH_Cover; @@ -1271,12 +1160,12 @@ char * _PREHASH_ProfileHollow; char * _PREHASH_GroupRoleChanges; char * _PREHASH_Count; char * _PREHASH_South; -char * _PREHASH_Entry; char * _PREHASH_ObjectUpdateCompressed; char * _PREHASH_MuteFlags; char * _PREHASH_Group; char * _PREHASH_AgentPause; char * _PREHASH_LanguagesText; +char * _PREHASH_Error; char * _PREHASH_InternalScriptMail; char * _PREHASH_FindAgent; char * _PREHASH_AgentData; @@ -1285,7 +1174,6 @@ char * _PREHASH_AssetBlock; char * _PREHASH_AcceptNotices; char * _PREHASH_SetGroupAcceptNotices; char * _PREHASH_CloseCircuit; -char * _PREHASH_LogControl; char * _PREHASH_TeleportFinish; char * _PREHASH_PathRevolutions; char * _PREHASH_ClassifiedInfoReply; @@ -1302,7 +1190,6 @@ char * _PREHASH_DataHomeLocationRequest; char * _PREHASH_EventNotificationAddRequest; char * _PREHASH_ParcelDwellRequest; char * _PREHASH_EventLocationRequest; -char * _PREHASH_EndPeriod; char * _PREHASH_SetStartLocationRequest; char * _PREHASH_QueryStart; char * _PREHASH_EjectData; @@ -1315,7 +1202,6 @@ char * _PREHASH_ParcelRelease; char * _PREHASH_VFileType; char * _PREHASH_EjectGroupMemberReply; char * _PREHASH_ImageData; -char * _PREHASH_SpaceServerSimulatorTimeMessage; char * _PREHASH_SimulatorViewerTimeMessage; char * _PREHASH_Rotation; char * _PREHASH_Selection; @@ -1323,7 +1209,6 @@ char * _PREHASH_TransactionData; char * _PREHASH_OperationData; char * _PREHASH_ExpirationDate; char * _PREHASH_ParcelDeedToGroup; -char * _PREHASH_DirPicksReply; char * _PREHASH_AvatarPicksReply; char * _PREHASH_GroupTitlesReply; char * _PREHASH_AgentInfo; @@ -1334,8 +1219,8 @@ char * _PREHASH_PassPrice; char * _PREHASH_SourceID; char * _PREHASH_ChangeUserRights; char * _PREHASH_TeleportFlags; -char * _PREHASH_AssetData; char * _PREHASH_SlaveParcelData; +char * _PREHASH_AssetData; char * _PREHASH_MultipleObjectUpdate; char * _PREHASH_ObjectUpdate; char * _PREHASH_ImprovedTerseObjectUpdate; @@ -1351,7 +1236,6 @@ char * _PREHASH_TaskLocalID; char * _PREHASH_ClaimDate; char * _PREHASH_MergeParcel; char * _PREHASH_Priority; -char * _PREHASH_Building; char * _PREHASH_QueryText; char * _PREHASH_GroupNoticeAdd; char * _PREHASH_ReturnType; @@ -1361,7 +1245,6 @@ char * _PREHASH_HeaderData; char * _PREHASH_RequestMultipleObjects; char * _PREHASH_RetrieveInstantMessages; char * _PREHASH_OpenCircuit; -char * _PREHASH_SecureSessionID; char * _PREHASH_CrossedRegion; char * _PREHASH_DirGroupsReply; char * _PREHASH_AvatarGroupsReply; @@ -1372,18 +1255,14 @@ char * _PREHASH_Position; char * _PREHASH_ParentEstate; char * _PREHASH_EstateName; char * _PREHASH_MuteName; -char * _PREHASH_StartParcelRename; -char * _PREHASH_BulkParcelRename; char * _PREHASH_ParcelRename; char * _PREHASH_ViewerFilename; -char * _PREHASH_Positive; char * _PREHASH_UserReportInternal; char * _PREHASH_AvatarPropertiesRequest; char * _PREHASH_ParcelPropertiesRequest; char * _PREHASH_GroupProfileRequest; char * _PREHASH_AgentDataUpdateRequest; char * _PREHASH_PriceObjectScaleFactor; -char * _PREHASH_DirPicksQuery; char * _PREHASH_OpenEnrollment; char * _PREHASH_GroupData; char * _PREHASH_RequestGodlikePowers; @@ -1394,7 +1273,6 @@ char * _PREHASH_Controls; char * _PREHASH_FirstDetachAll; char * _PREHASH_EstateID; char * _PREHASH_ImprovedInstantMessage; -char * _PREHASH_AgentQuit; char * _PREHASH_CheckParcelSales; char * _PREHASH_ParcelSales; char * _PREHASH_CurrentInterval; @@ -1411,12 +1289,8 @@ char * _PREHASH_OwnerIDs; char * _PREHASH_SystemKickUser; char * _PREHASH_TransactionTime; char * _PREHASH_TimeToLive; -char * _PREHASH_StartParcelRemove; -char * _PREHASH_BulkParcelRemove; char * _PREHASH_OldAgentID; -char * _PREHASH_BonusEstimate; char * _PREHASH_MusicURL; -char * _PREHASH_CompleteLure; char * _PREHASH_ParcelPrimBonus; char * _PREHASH_EjectUser; char * _PREHASH_CoarseLocationUpdate; @@ -1449,10 +1323,6 @@ char * _PREHASH_ParcelProperties; char * _PREHASH_EstateOwnerID; char * _PREHASH_LogoutRequest; char * _PREHASH_AssetUploadRequest; -char * _PREHASH_ReputationIndividualRequest; -char * _PREHASH_MajorVersion; -char * _PREHASH_MinorVersion; -char * _PREHASH_SimulatorAssign; char * _PREHASH_TransactionType; char * _PREHASH_AvatarPropertiesUpdate; char * _PREHASH_ParcelPropertiesUpdate; @@ -1461,7 +1331,6 @@ char * _PREHASH_AbortXfer; char * _PREHASH_DeRezAck; char * _PREHASH_TakeControls; char * _PREHASH_DirLandReply; -char * _PREHASH_SpaceLocationTeleportReply; char * _PREHASH_MuteType; char * _PREHASH_IMViaEMail; char * _PREHASH_RentPrice; @@ -1502,7 +1371,6 @@ void init_prehash_data() _PREHASH_PartnerID = gMessageStringTable.getString("PartnerID"); _PREHASH_DirLandQuery = gMessageStringTable.getString("DirLandQuery"); _PREHASH_TeleportStart = gMessageStringTable.getString("TeleportStart"); - _PREHASH_LogMessages = gMessageStringTable.getString("LogMessages"); _PREHASH_AboutText = gMessageStringTable.getString("AboutText"); _PREHASH_VisualParam = gMessageStringTable.getString("VisualParam"); _PREHASH_GroupPrims = gMessageStringTable.getString("GroupPrims"); @@ -1510,10 +1378,8 @@ void init_prehash_data() _PREHASH_ID = gMessageStringTable.getString("ID"); _PREHASH_UUIDNameRequest = gMessageStringTable.getString("UUIDNameRequest"); _PREHASH_UUIDGroupNameRequest = gMessageStringTable.getString("UUIDGroupNameRequest"); - _PREHASH_MoneyTransactionsRequest = gMessageStringTable.getString("MoneyTransactionsRequest"); _PREHASH_GroupAccountTransactionsRequest = gMessageStringTable.getString("GroupAccountTransactionsRequest"); _PREHASH_MapNameRequest = gMessageStringTable.getString("MapNameRequest"); - _PREHASH_MailTaskSimRequest = gMessageStringTable.getString("MailTaskSimRequest"); _PREHASH_UpdateSimulator = gMessageStringTable.getString("UpdateSimulator"); _PREHASH_BillableFactor = gMessageStringTable.getString("BillableFactor"); _PREHASH_ObjectBonusFactor = gMessageStringTable.getString("ObjectBonusFactor"); @@ -1523,7 +1389,6 @@ void init_prehash_data() _PREHASH_LayerType = gMessageStringTable.getString("LayerType"); _PREHASH_OwnerRole = gMessageStringTable.getString("OwnerRole"); _PREHASH_ParcelOverlay = gMessageStringTable.getString("ParcelOverlay"); - _PREHASH_AdjustBalance = gMessageStringTable.getString("AdjustBalance"); _PREHASH_GroupOwned = gMessageStringTable.getString("GroupOwned"); _PREHASH_IP = gMessageStringTable.getString("IP"); _PREHASH_ChatFromViewer = gMessageStringTable.getString("ChatFromViewer"); @@ -1558,8 +1423,8 @@ void init_prehash_data() _PREHASH_UpdateBlock = gMessageStringTable.getString("UpdateBlock"); _PREHASH_ClassifiedGodDelete = gMessageStringTable.getString("ClassifiedGodDelete"); _PREHASH_ObjectGrabUpdate = gMessageStringTable.getString("ObjectGrabUpdate"); - _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate"); _PREHASH_LocationPos = gMessageStringTable.getString("LocationPos"); + _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate"); _PREHASH_StartDateTime = gMessageStringTable.getString("StartDateTime"); _PREHASH_ObjectUpdateCached = gMessageStringTable.getString("ObjectUpdateCached"); _PREHASH_Packets = gMessageStringTable.getString("Packets"); @@ -1591,14 +1456,11 @@ void init_prehash_data() _PREHASH_ClassifiedFlags = gMessageStringTable.getString("ClassifiedFlags"); _PREHASH_ControlFlags = gMessageStringTable.getString("ControlFlags"); _PREHASH_TeleportRequest = gMessageStringTable.getString("TeleportRequest"); - _PREHASH_SpaceLocationTeleportRequest = gMessageStringTable.getString("SpaceLocationTeleportRequest"); - _PREHASH_LeaderBoardRequest = gMessageStringTable.getString("LeaderBoardRequest"); _PREHASH_ScriptTeleportRequest = gMessageStringTable.getString("ScriptTeleportRequest"); + _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest"); _PREHASH_DateUTC = gMessageStringTable.getString("DateUTC"); _PREHASH_TaskIDs = gMessageStringTable.getString("TaskIDs"); - _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest"); _PREHASH_RequestResult = gMessageStringTable.getString("RequestResult"); - _PREHASH_ReputationAgentAssign = gMessageStringTable.getString("ReputationAgentAssign"); _PREHASH_CanAcceptAgents = gMessageStringTable.getString("CanAcceptAgents"); _PREHASH_ObjectSaleInfo = gMessageStringTable.getString("ObjectSaleInfo"); _PREHASH_KillChildAgents = gMessageStringTable.getString("KillChildAgents"); @@ -1610,7 +1472,6 @@ void init_prehash_data() _PREHASH_OwnershipCost = gMessageStringTable.getString("OwnershipCost"); _PREHASH_AvatarNotesUpdate = gMessageStringTable.getString("AvatarNotesUpdate"); _PREHASH_PID = gMessageStringTable.getString("PID"); - _PREHASH_TimeString = gMessageStringTable.getString("TimeString"); _PREHASH_DirPopularReply = gMessageStringTable.getString("DirPopularReply"); _PREHASH_TerrainHeightRange00 = gMessageStringTable.getString("TerrainHeightRange00"); _PREHASH_SimData = gMessageStringTable.getString("SimData"); @@ -1636,7 +1497,6 @@ void init_prehash_data() _PREHASH_URL = gMessageStringTable.getString("URL"); _PREHASH_CreationDate = gMessageStringTable.getString("CreationDate"); _PREHASH_JointPivot = gMessageStringTable.getString("JointPivot"); - _PREHASH_RateeID = gMessageStringTable.getString("RateeID"); _PREHASH_FPS = gMessageStringTable.getString("FPS"); _PREHASH_HasTelehub = gMessageStringTable.getString("HasTelehub"); _PREHASH_PathEnd = gMessageStringTable.getString("PathEnd"); @@ -1661,7 +1521,6 @@ void init_prehash_data() _PREHASH_ParcelAccessListReply = gMessageStringTable.getString("ParcelAccessListReply"); _PREHASH_RpcChannelReply = gMessageStringTable.getString("RpcChannelReply"); _PREHASH_RegionPresenceResponse = gMessageStringTable.getString("RegionPresenceResponse"); - _PREHASH_AgentPresenceResponse = gMessageStringTable.getString("AgentPresenceResponse"); _PREHASH_CharterMember = gMessageStringTable.getString("CharterMember"); _PREHASH_EdgeData = gMessageStringTable.getString("EdgeData"); _PREHASH_NameData = gMessageStringTable.getString("NameData"); @@ -1675,14 +1534,12 @@ void init_prehash_data() _PREHASH_ParcelPropertiesRequestByID = gMessageStringTable.getString("ParcelPropertiesRequestByID"); _PREHASH_ObjectLink = gMessageStringTable.getString("ObjectLink"); _PREHASH_RpcScriptReplyInbound = gMessageStringTable.getString("RpcScriptReplyInbound"); - _PREHASH_BoardData = gMessageStringTable.getString("BoardData"); _PREHASH_RezData = gMessageStringTable.getString("RezData"); _PREHASH_RemoveInventoryObjects = gMessageStringTable.getString("RemoveInventoryObjects"); _PREHASH_GroupProposalBallot = gMessageStringTable.getString("GroupProposalBallot"); _PREHASH_RPCServerIP = gMessageStringTable.getString("RPCServerIP"); _PREHASH_Far = gMessageStringTable.getString("Far"); _PREHASH_GodSessionID = gMessageStringTable.getString("GodSessionID"); - _PREHASH_ViewerDigest = gMessageStringTable.getString("ViewerDigest"); _PREHASH_FLAboutText = gMessageStringTable.getString("FLAboutText"); _PREHASH_RegionHandshakeReply = gMessageStringTable.getString("RegionHandshakeReply"); _PREHASH_GroupActiveProposalItemReply = gMessageStringTable.getString("GroupActiveProposalItemReply"); @@ -1694,7 +1551,6 @@ void init_prehash_data() _PREHASH_NewName = gMessageStringTable.getString("NewName"); _PREHASH_Key = gMessageStringTable.getString("Key"); _PREHASH_AgentID = gMessageStringTable.getString("AgentID"); - _PREHASH_OnlineStatusRequest = gMessageStringTable.getString("OnlineStatusRequest"); _PREHASH_EventNotificationRemoveRequest = gMessageStringTable.getString("EventNotificationRemoveRequest"); _PREHASH_NewFolderID = gMessageStringTable.getString("NewFolderID"); _PREHASH_Arc = gMessageStringTable.getString("Arc"); @@ -1706,7 +1562,6 @@ void init_prehash_data() _PREHASH_MiscStats = gMessageStringTable.getString("MiscStats"); _PREHASH_ImageID = gMessageStringTable.getString("ImageID"); _PREHASH_DataPacket = gMessageStringTable.getString("DataPacket"); - _PREHASH_ObjectDehinge = gMessageStringTable.getString("ObjectDehinge"); _PREHASH_You = gMessageStringTable.getString("You"); _PREHASH_ScriptControlChange = gMessageStringTable.getString("ScriptControlChange"); _PREHASH_LoadURL = gMessageStringTable.getString("LoadURL"); @@ -1723,9 +1578,9 @@ void init_prehash_data() _PREHASH_SetGroupContribution = gMessageStringTable.getString("SetGroupContribution"); _PREHASH_Offline = gMessageStringTable.getString("Offline"); _PREHASH_AgentIsNowWearing = gMessageStringTable.getString("AgentIsNowWearing"); - _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay"); _PREHASH_Members = gMessageStringTable.getString("Members"); _PREHASH_FailedResends = gMessageStringTable.getString("FailedResends"); + _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay"); _PREHASH_CameraCenter = gMessageStringTable.getString("CameraCenter"); _PREHASH_CameraLeftAxis = gMessageStringTable.getString("CameraLeftAxis"); _PREHASH_ExBlock = gMessageStringTable.getString("ExBlock"); @@ -1733,7 +1588,6 @@ void init_prehash_data() _PREHASH_NetTest = gMessageStringTable.getString("NetTest"); _PREHASH_DiscardLevel = gMessageStringTable.getString("DiscardLevel"); _PREHASH_LayerID = gMessageStringTable.getString("LayerID"); - _PREHASH_RatorID = gMessageStringTable.getString("RatorID"); _PREHASH_GrabOffset = gMessageStringTable.getString("GrabOffset"); _PREHASH_SimPort = gMessageStringTable.getString("SimPort"); _PREHASH_PricePerMeter = gMessageStringTable.getString("PricePerMeter"); @@ -1753,21 +1607,16 @@ void init_prehash_data() _PREHASH_RegionsVisited = gMessageStringTable.getString("RegionsVisited"); _PREHASH_DirClassifiedReply = gMessageStringTable.getString("DirClassifiedReply"); _PREHASH_AvatarClassifiedReply = gMessageStringTable.getString("AvatarClassifiedReply"); - _PREHASH_ReputationIndividualReply = gMessageStringTable.getString("ReputationIndividualReply"); _PREHASH_MediaURL = gMessageStringTable.getString("MediaURL"); _PREHASH_CompleteAgentMovement = gMessageStringTable.getString("CompleteAgentMovement"); - _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP"); _PREHASH_ClassifiedID = gMessageStringTable.getString("ClassifiedID"); _PREHASH_LocalID = gMessageStringTable.getString("LocalID"); + _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP"); _PREHASH_RemoveItem = gMessageStringTable.getString("RemoveItem"); _PREHASH_LogFailedMoneyTransaction = gMessageStringTable.getString("LogFailedMoneyTransaction"); _PREHASH_ViewerStartAuction = gMessageStringTable.getString("ViewerStartAuction"); _PREHASH_StartAuction = gMessageStringTable.getString("StartAuction"); - _PREHASH_NameValueName = gMessageStringTable.getString("NameValueName"); - _PREHASH_AngVelX = gMessageStringTable.getString("AngVelX"); _PREHASH_DuplicateFlags = gMessageStringTable.getString("DuplicateFlags"); - _PREHASH_AngVelY = gMessageStringTable.getString("AngVelY"); - _PREHASH_AngVelZ = gMessageStringTable.getString("AngVelZ"); _PREHASH_TextColor = gMessageStringTable.getString("TextColor"); _PREHASH_SlaveID = gMessageStringTable.getString("SlaveID"); _PREHASH_Charter = gMessageStringTable.getString("Charter"); @@ -1778,21 +1627,16 @@ void init_prehash_data() _PREHASH_OwnerIsGroup = gMessageStringTable.getString("OwnerIsGroup"); _PREHASH_NameValuePair = gMessageStringTable.getString("NameValuePair"); _PREHASH_RemoveNameValuePair = gMessageStringTable.getString("RemoveNameValuePair"); - _PREHASH_GetNameValuePair = gMessageStringTable.getString("GetNameValuePair"); _PREHASH_BulkUpdateInventory = gMessageStringTable.getString("BulkUpdateInventory"); _PREHASH_UpdateTaskInventory = gMessageStringTable.getString("UpdateTaskInventory"); _PREHASH_RemoveTaskInventory = gMessageStringTable.getString("RemoveTaskInventory"); _PREHASH_MoveTaskInventory = gMessageStringTable.getString("MoveTaskInventory"); _PREHASH_RequestTaskInventory = gMessageStringTable.getString("RequestTaskInventory"); _PREHASH_ReplyTaskInventory = gMessageStringTable.getString("ReplyTaskInventory"); - _PREHASH_DeclineInventory = gMessageStringTable.getString("DeclineInventory"); _PREHASH_AggregatePermInventory = gMessageStringTable.getString("AggregatePermInventory"); - _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo"); - _PREHASH_MoneyTransactionsReply = gMessageStringTable.getString("MoneyTransactionsReply"); _PREHASH_GroupAccountTransactionsReply = gMessageStringTable.getString("GroupAccountTransactionsReply"); - _PREHASH_MailTaskSimReply = gMessageStringTable.getString("MailTaskSimReply"); + _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo"); _PREHASH_WearableData = gMessageStringTable.getString("WearableData"); - _PREHASH_StatisticsData = gMessageStringTable.getString("StatisticsData"); _PREHASH_Enabled = gMessageStringTable.getString("Enabled"); _PREHASH_Savings = gMessageStringTable.getString("Savings"); _PREHASH_SimulatorLoad = gMessageStringTable.getString("SimulatorLoad"); @@ -1804,15 +1648,12 @@ void init_prehash_data() _PREHASH_LeaveGroupRequest = gMessageStringTable.getString("LeaveGroupRequest"); _PREHASH_InviteGroupRequest = gMessageStringTable.getString("InviteGroupRequest"); _PREHASH_LiveHelpGroupRequest = gMessageStringTable.getString("LiveHelpGroupRequest"); - _PREHASH_ServerVersion = gMessageStringTable.getString("ServerVersion"); _PREHASH_PriceParcelClaimFactor = gMessageStringTable.getString("PriceParcelClaimFactor"); _PREHASH_BillableArea = gMessageStringTable.getString("BillableArea"); _PREHASH_ObjectID = gMessageStringTable.getString("ObjectID"); _PREHASH_ObjectFlagUpdate = gMessageStringTable.getString("ObjectFlagUpdate"); _PREHASH_GroupRoleUpdate = gMessageStringTable.getString("GroupRoleUpdate"); _PREHASH_RequestInventoryAsset = gMessageStringTable.getString("RequestInventoryAsset"); - _PREHASH_RedoLand = gMessageStringTable.getString("RedoLand"); - _PREHASH_TravelAccess = gMessageStringTable.getString("TravelAccess"); _PREHASH_ChangedGrid = gMessageStringTable.getString("ChangedGrid"); _PREHASH_AgentDropGroup = gMessageStringTable.getString("AgentDropGroup"); _PREHASH_Details = gMessageStringTable.getString("Details"); @@ -1845,7 +1686,6 @@ void init_prehash_data() _PREHASH_GlobalPos = gMessageStringTable.getString("GlobalPos"); _PREHASH_GrabOffsetInitial = gMessageStringTable.getString("GrabOffsetInitial"); _PREHASH_IsTrial = gMessageStringTable.getString("IsTrial"); - _PREHASH_FinalizeLogout = gMessageStringTable.getString("FinalizeLogout"); _PREHASH_ObjectDuplicateOnRay = gMessageStringTable.getString("ObjectDuplicateOnRay"); _PREHASH_GroupMembershipCount = gMessageStringTable.getString("GroupMembershipCount"); _PREHASH_MethodData = gMessageStringTable.getString("MethodData"); @@ -1881,32 +1721,26 @@ void init_prehash_data() _PREHASH_SimWideMaxPrims = gMessageStringTable.getString("SimWideMaxPrims"); _PREHASH_TotalPrims = gMessageStringTable.getString("TotalPrims"); _PREHASH_ProfileBegin = gMessageStringTable.getString("ProfileBegin"); - _PREHASH_MoneyDetailsRequest = gMessageStringTable.getString("MoneyDetailsRequest"); _PREHASH_Request = gMessageStringTable.getString("Request"); _PREHASH_GroupAccountDetailsRequest = gMessageStringTable.getString("GroupAccountDetailsRequest"); _PREHASH_GroupActiveProposalsRequest = gMessageStringTable.getString("GroupActiveProposalsRequest"); _PREHASH_StringValue = gMessageStringTable.getString("StringValue"); - _PREHASH_ClosestSimulator = gMessageStringTable.getString("ClosestSimulator"); _PREHASH_Version = gMessageStringTable.getString("Version"); _PREHASH_OtherCount = gMessageStringTable.getString("OtherCount"); _PREHASH_MemberCount = gMessageStringTable.getString("MemberCount"); _PREHASH_ChatData = gMessageStringTable.getString("ChatData"); _PREHASH_IsGroupOwned = gMessageStringTable.getString("IsGroupOwned"); _PREHASH_EnergyEfficiency = gMessageStringTable.getString("EnergyEfficiency"); - _PREHASH_MaxPlace = gMessageStringTable.getString("MaxPlace"); _PREHASH_PickInfoUpdate = gMessageStringTable.getString("PickInfoUpdate"); _PREHASH_PickDelete = gMessageStringTable.getString("PickDelete"); _PREHASH_ScriptReset = gMessageStringTable.getString("ScriptReset"); _PREHASH_Requester = gMessageStringTable.getString("Requester"); _PREHASH_ForSale = gMessageStringTable.getString("ForSale"); _PREHASH_NearestLandingRegionReply = gMessageStringTable.getString("NearestLandingRegionReply"); - _PREHASH_RecordAgentPresence = gMessageStringTable.getString("RecordAgentPresence"); - _PREHASH_EraseAgentPresence = gMessageStringTable.getString("EraseAgentPresence"); _PREHASH_ParcelID = gMessageStringTable.getString("ParcelID"); _PREHASH_Godlike = gMessageStringTable.getString("Godlike"); _PREHASH_TotalDebits = gMessageStringTable.getString("TotalDebits"); _PREHASH_Direction = gMessageStringTable.getString("Direction"); - _PREHASH_Appearance = gMessageStringTable.getString("Appearance"); _PREHASH_HealthData = gMessageStringTable.getString("HealthData"); _PREHASH_LeftAxis = gMessageStringTable.getString("LeftAxis"); _PREHASH_LocationBlock = gMessageStringTable.getString("LocationBlock"); @@ -1914,41 +1748,31 @@ void init_prehash_data() _PREHASH_TerrainStartHeight00 = gMessageStringTable.getString("TerrainStartHeight00"); _PREHASH_TerrainStartHeight01 = gMessageStringTable.getString("TerrainStartHeight01"); _PREHASH_TerrainStartHeight10 = gMessageStringTable.getString("TerrainStartHeight10"); - _PREHASH_ObjectHinge = gMessageStringTable.getString("ObjectHinge"); _PREHASH_TerrainStartHeight11 = gMessageStringTable.getString("TerrainStartHeight11"); - _PREHASH_MetersPerGrid = gMessageStringTable.getString("MetersPerGrid"); _PREHASH_WaterHeight = gMessageStringTable.getString("WaterHeight"); _PREHASH_FetchInventoryReply = gMessageStringTable.getString("FetchInventoryReply"); - _PREHASH_MoneySummaryReply = gMessageStringTable.getString("MoneySummaryReply"); _PREHASH_GroupAccountSummaryReply = gMessageStringTable.getString("GroupAccountSummaryReply"); _PREHASH_AttachedSound = gMessageStringTable.getString("AttachedSound"); _PREHASH_ParamInUse = gMessageStringTable.getString("ParamInUse"); _PREHASH_GodKickUser = gMessageStringTable.getString("GodKickUser"); _PREHASH_PickName = gMessageStringTable.getString("PickName"); _PREHASH_TaskName = gMessageStringTable.getString("TaskName"); - _PREHASH_SubType = gMessageStringTable.getString("SubType"); _PREHASH_ObjectCount = gMessageStringTable.getString("ObjectCount"); _PREHASH_RegionPresenceRequestByHandle = gMessageStringTable.getString("RegionPresenceRequestByHandle"); _PREHASH_RezSingleAttachmentFromInv = gMessageStringTable.getString("RezSingleAttachmentFromInv"); _PREHASH_ChildAgentUpdate = gMessageStringTable.getString("ChildAgentUpdate"); - _PREHASH_ToID = gMessageStringTable.getString("ToID"); - _PREHASH_ViewerPort = gMessageStringTable.getString("ViewerPort"); _PREHASH_IsOwnerGroup = gMessageStringTable.getString("IsOwnerGroup"); _PREHASH_AgentHeightWidth = gMessageStringTable.getString("AgentHeightWidth"); _PREHASH_VerticalAngle = gMessageStringTable.getString("VerticalAngle"); _PREHASH_WearableType = gMessageStringTable.getString("WearableType"); _PREHASH_AggregatePermNextOwner = gMessageStringTable.getString("AggregatePermNextOwner"); _PREHASH_ShowInList = gMessageStringTable.getString("ShowInList"); - _PREHASH_PositionSuggestion = gMessageStringTable.getString("PositionSuggestion"); _PREHASH_UpdateParcel = gMessageStringTable.getString("UpdateParcel"); - _PREHASH_ClearAgentSessions = gMessageStringTable.getString("ClearAgentSessions"); _PREHASH_SetAlwaysRun = gMessageStringTable.getString("SetAlwaysRun"); _PREHASH_NVPair = gMessageStringTable.getString("NVPair"); _PREHASH_SearchType = gMessageStringTable.getString("SearchType"); _PREHASH_ObjectSpinStart = gMessageStringTable.getString("ObjectSpinStart"); _PREHASH_UseEstateSun = gMessageStringTable.getString("UseEstateSun"); - _PREHASH_LogoutBlock = gMessageStringTable.getString("LogoutBlock"); - _PREHASH_RelayLogControl = gMessageStringTable.getString("RelayLogControl"); _PREHASH_RegionID = gMessageStringTable.getString("RegionID"); _PREHASH_AbuseRegionID = gMessageStringTable.getString("AbuseRegionID"); _PREHASH_Creator = gMessageStringTable.getString("Creator"); @@ -1957,14 +1781,12 @@ void init_prehash_data() _PREHASH_EventInfoReply = gMessageStringTable.getString("EventInfoReply"); _PREHASH_UserInfoReply = gMessageStringTable.getString("UserInfoReply"); _PREHASH_PathRadiusOffset = gMessageStringTable.getString("PathRadiusOffset"); - _PREHASH_SessionInfo = gMessageStringTable.getString("SessionInfo"); _PREHASH_TextureData = gMessageStringTable.getString("TextureData"); _PREHASH_ChatPass = gMessageStringTable.getString("ChatPass"); _PREHASH_TargetID = gMessageStringTable.getString("TargetID"); _PREHASH_DefaultPayPrice = gMessageStringTable.getString("DefaultPayPrice"); _PREHASH_UserLocation = gMessageStringTable.getString("UserLocation"); _PREHASH_MaxPrims = gMessageStringTable.getString("MaxPrims"); - _PREHASH_RegionIP = gMessageStringTable.getString("RegionIP"); _PREHASH_LandmarkID = gMessageStringTable.getString("LandmarkID"); _PREHASH_InitiateDownload = gMessageStringTable.getString("InitiateDownload"); _PREHASH_Name = gMessageStringTable.getString("Name"); @@ -1972,18 +1794,13 @@ void init_prehash_data() _PREHASH_ParcelSetOtherCleanTime = gMessageStringTable.getString("ParcelSetOtherCleanTime"); _PREHASH_TeleportPriceExponent = gMessageStringTable.getString("TeleportPriceExponent"); _PREHASH_Gain = gMessageStringTable.getString("Gain"); - _PREHASH_VelX = gMessageStringTable.getString("VelX"); _PREHASH_PacketAck = gMessageStringTable.getString("PacketAck"); _PREHASH_PathSkew = gMessageStringTable.getString("PathSkew"); - _PREHASH_Negative = gMessageStringTable.getString("Negative"); - _PREHASH_VelY = gMessageStringTable.getString("VelY"); _PREHASH_SimulatorShutdownRequest = gMessageStringTable.getString("SimulatorShutdownRequest"); _PREHASH_NearestLandingRegionRequest = gMessageStringTable.getString("NearestLandingRegionRequest"); - _PREHASH_VelZ = gMessageStringTable.getString("VelZ"); _PREHASH_OtherID = gMessageStringTable.getString("OtherID"); _PREHASH_MemberID = gMessageStringTable.getString("MemberID"); _PREHASH_MapLayerRequest = gMessageStringTable.getString("MapLayerRequest"); - _PREHASH_PatchVersion = gMessageStringTable.getString("PatchVersion"); _PREHASH_ObjectScale = gMessageStringTable.getString("ObjectScale"); _PREHASH_TargetIP = gMessageStringTable.getString("TargetIP"); _PREHASH_Redo = gMessageStringTable.getString("Redo"); @@ -2026,27 +1843,20 @@ void init_prehash_data() _PREHASH_Code = gMessageStringTable.getString("Code"); _PREHASH_InvType = gMessageStringTable.getString("InvType"); _PREHASH_AgentFOV = gMessageStringTable.getString("AgentFOV"); - _PREHASH_BulkMoneyTransfer = gMessageStringTable.getString("BulkMoneyTransfer"); _PREHASH_Audible = gMessageStringTable.getString("Audible"); _PREHASH_AuctionData = gMessageStringTable.getString("AuctionData"); _PREHASH_IDBlock = gMessageStringTable.getString("IDBlock"); - _PREHASH_ReputationData = gMessageStringTable.getString("ReputationData"); _PREHASH_West = gMessageStringTable.getString("West"); _PREHASH_Undo = gMessageStringTable.getString("Undo"); _PREHASH_TotalNumItems = gMessageStringTable.getString("TotalNumItems"); _PREHASH_Info = gMessageStringTable.getString("Info"); _PREHASH_Area = gMessageStringTable.getString("Area"); - _PREHASH_Behavior = gMessageStringTable.getString("Behavior"); _PREHASH_SimCrashed = gMessageStringTable.getString("SimCrashed"); _PREHASH_Text = gMessageStringTable.getString("Text"); - _PREHASH_AgentToNewRegion = gMessageStringTable.getString("AgentToNewRegion"); _PREHASH_PriceGroupCreate = gMessageStringTable.getString("PriceGroupCreate"); _PREHASH_ObjectShape = gMessageStringTable.getString("ObjectShape"); _PREHASH_GroupRoleDataReply = gMessageStringTable.getString("GroupRoleDataReply"); - _PREHASH_PosX = gMessageStringTable.getString("PosX"); - _PREHASH_PosY = gMessageStringTable.getString("PosY"); _PREHASH_MuteCRC = gMessageStringTable.getString("MuteCRC"); - _PREHASH_PosZ = gMessageStringTable.getString("PosZ"); _PREHASH_Size = gMessageStringTable.getString("Size"); _PREHASH_FromAddress = gMessageStringTable.getString("FromAddress"); _PREHASH_Body = gMessageStringTable.getString("Body"); @@ -2064,16 +1874,14 @@ void init_prehash_data() _PREHASH_SoundID = gMessageStringTable.getString("SoundID"); _PREHASH_Item = gMessageStringTable.getString("Item"); _PREHASH_User = gMessageStringTable.getString("User"); - _PREHASH_RemoteInfos = gMessageStringTable.getString("RemoteInfos"); _PREHASH_Prey = gMessageStringTable.getString("Prey"); - _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart"); _PREHASH_RayStart = gMessageStringTable.getString("RayStart"); + _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart"); _PREHASH_ParcelData = gMessageStringTable.getString("ParcelData"); _PREHASH_CameraUpAxis = gMessageStringTable.getString("CameraUpAxis"); _PREHASH_ScriptDialog = gMessageStringTable.getString("ScriptDialog"); _PREHASH_MasterParcelData = gMessageStringTable.getString("MasterParcelData"); _PREHASH_Invalid = gMessageStringTable.getString("Invalid"); - _PREHASH_MinPlace = gMessageStringTable.getString("MinPlace"); _PREHASH_ProfileCurve = gMessageStringTable.getString("ProfileCurve"); _PREHASH_ParcelAccessListUpdate = gMessageStringTable.getString("ParcelAccessListUpdate"); _PREHASH_MuteListUpdate = gMessageStringTable.getString("MuteListUpdate"); @@ -2092,14 +1900,12 @@ void init_prehash_data() _PREHASH_IsTemporary = gMessageStringTable.getString("IsTemporary"); _PREHASH_InsigniaID = gMessageStringTable.getString("InsigniaID"); _PREHASH_CheckFlags = gMessageStringTable.getString("CheckFlags"); - _PREHASH_TransferPriority = gMessageStringTable.getString("TransferPriority"); _PREHASH_EventID = gMessageStringTable.getString("EventID"); _PREHASH_Selected = gMessageStringTable.getString("Selected"); _PREHASH_FromAgentId = gMessageStringTable.getString("FromAgentId"); _PREHASH_Type = gMessageStringTable.getString("Type"); _PREHASH_ChatType = gMessageStringTable.getString("ChatType"); _PREHASH_ReportData = gMessageStringTable.getString("ReportData"); - _PREHASH_LeaderBoardData = gMessageStringTable.getString("LeaderBoardData"); _PREHASH_RequestBlock = gMessageStringTable.getString("RequestBlock"); _PREHASH_GrantData = gMessageStringTable.getString("GrantData"); _PREHASH_DetachAttachmentIntoInv = gMessageStringTable.getString("DetachAttachmentIntoInv"); @@ -2115,12 +1921,9 @@ void init_prehash_data() _PREHASH_OfflineNotification = gMessageStringTable.getString("OfflineNotification"); _PREHASH_SendPostcard = gMessageStringTable.getString("SendPostcard"); _PREHASH_RequestFlags = gMessageStringTable.getString("RequestFlags"); - _PREHASH_MoneyHistoryRequest = gMessageStringTable.getString("MoneyHistoryRequest"); - _PREHASH_MoneySummaryRequest = gMessageStringTable.getString("MoneySummaryRequest"); _PREHASH_GroupAccountSummaryRequest = gMessageStringTable.getString("GroupAccountSummaryRequest"); _PREHASH_GroupVoteHistoryRequest = gMessageStringTable.getString("GroupVoteHistoryRequest"); _PREHASH_ParamValue = gMessageStringTable.getString("ParamValue"); - _PREHASH_Checksum = gMessageStringTable.getString("Checksum"); _PREHASH_MaxAgents = gMessageStringTable.getString("MaxAgents"); _PREHASH_CreateNewOutfitAttachments = gMessageStringTable.getString("CreateNewOutfitAttachments"); _PREHASH_RegionHandle = gMessageStringTable.getString("RegionHandle"); @@ -2130,12 +1933,10 @@ void init_prehash_data() _PREHASH_GroupNoticeID = gMessageStringTable.getString("GroupNoticeID"); _PREHASH_ParcelName = gMessageStringTable.getString("ParcelName"); _PREHASH_PriceObjectRent = gMessageStringTable.getString("PriceObjectRent"); - _PREHASH_ConnectAgentToUserserver = gMessageStringTable.getString("ConnectAgentToUserserver"); - _PREHASH_ConnectToUserserver = gMessageStringTable.getString("ConnectToUserserver"); _PREHASH_OfferCallingCard = gMessageStringTable.getString("OfferCallingCard"); - _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess"); _PREHASH_AcceptCallingCard = gMessageStringTable.getString("AcceptCallingCard"); _PREHASH_DeclineCallingCard = gMessageStringTable.getString("DeclineCallingCard"); + _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess"); _PREHASH_DataHomeLocationReply = gMessageStringTable.getString("DataHomeLocationReply"); _PREHASH_EventLocationReply = gMessageStringTable.getString("EventLocationReply"); _PREHASH_TerseDateID = gMessageStringTable.getString("TerseDateID"); @@ -2153,8 +1954,8 @@ void init_prehash_data() _PREHASH_IntervalDays = gMessageStringTable.getString("IntervalDays"); _PREHASH_PathScaleX = gMessageStringTable.getString("PathScaleX"); _PREHASH_FromTaskID = gMessageStringTable.getString("FromTaskID"); - _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo"); _PREHASH_PathScaleY = gMessageStringTable.getString("PathScaleY"); + _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo"); _PREHASH_PublicCount = gMessageStringTable.getString("PublicCount"); _PREHASH_ParcelJoin = gMessageStringTable.getString("ParcelJoin"); _PREHASH_GroupRolesCount = gMessageStringTable.getString("GroupRolesCount"); @@ -2179,7 +1980,6 @@ void init_prehash_data() _PREHASH_PassToAgent = gMessageStringTable.getString("PassToAgent"); _PREHASH_PreyAgent = gMessageStringTable.getString("PreyAgent"); _PREHASH_SimStats = gMessageStringTable.getString("SimStats"); - _PREHASH_Options = gMessageStringTable.getString("Options"); _PREHASH_LogoutReply = gMessageStringTable.getString("LogoutReply"); _PREHASH_FeatureDisabled = gMessageStringTable.getString("FeatureDisabled"); _PREHASH_ObjectLocalID = gMessageStringTable.getString("ObjectLocalID"); @@ -2190,10 +1990,8 @@ void init_prehash_data() _PREHASH_MasterID = gMessageStringTable.getString("MasterID"); _PREHASH_TransferData = gMessageStringTable.getString("TransferData"); _PREHASH_WantToMask = gMessageStringTable.getString("WantToMask"); - _PREHASH_AvatarData = gMessageStringTable.getString("AvatarData"); _PREHASH_ParcelSelectObjects = gMessageStringTable.getString("ParcelSelectObjects"); _PREHASH_ExtraParams = gMessageStringTable.getString("ExtraParams"); - _PREHASH_LogLogin = gMessageStringTable.getString("LogLogin"); _PREHASH_CreatorID = gMessageStringTable.getString("CreatorID"); _PREHASH_Summary = gMessageStringTable.getString("Summary"); _PREHASH_BuyObjectInventory = gMessageStringTable.getString("BuyObjectInventory"); @@ -2234,8 +2032,8 @@ void init_prehash_data() _PREHASH_GranterID = gMessageStringTable.getString("GranterID"); _PREHASH_WantToText = gMessageStringTable.getString("WantToText"); _PREHASH_ReportType = gMessageStringTable.getString("ReportType"); - _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock"); _PREHASH_SimulatorReady = gMessageStringTable.getString("SimulatorReady"); + _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock"); _PREHASH_AnimationSourceList = gMessageStringTable.getString("AnimationSourceList"); _PREHASH_SubscribeLoad = gMessageStringTable.getString("SubscribeLoad"); _PREHASH_UnsubscribeLoad = gMessageStringTable.getString("UnsubscribeLoad"); @@ -2262,9 +2060,8 @@ void init_prehash_data() _PREHASH_GestureFlags = gMessageStringTable.getString("GestureFlags"); _PREHASH_XferID = gMessageStringTable.getString("XferID"); _PREHASH_StatValue = gMessageStringTable.getString("StatValue"); - _PREHASH_PickID = gMessageStringTable.getString("PickID"); _PREHASH_TaskID = gMessageStringTable.getString("TaskID"); - _PREHASH_GridsPerEdge = gMessageStringTable.getString("GridsPerEdge"); + _PREHASH_PickID = gMessageStringTable.getString("PickID"); _PREHASH_RayEnd = gMessageStringTable.getString("RayEnd"); _PREHASH_Throttles = gMessageStringTable.getString("Throttles"); _PREHASH_RebakeAvatarTextures = gMessageStringTable.getString("RebakeAvatarTextures"); @@ -2277,30 +2074,24 @@ void init_prehash_data() _PREHASH_TitleRoleID = gMessageStringTable.getString("TitleRoleID"); _PREHASH_SquareMetersCredit = gMessageStringTable.getString("SquareMetersCredit"); _PREHASH_Filename = gMessageStringTable.getString("Filename"); - _PREHASH_SecuredTemplateChecksumRequest = gMessageStringTable.getString("SecuredTemplateChecksumRequest"); - _PREHASH_TemplateChecksumRequest = gMessageStringTable.getString("TemplateChecksumRequest"); - _PREHASH_AgentPresenceRequest = gMessageStringTable.getString("AgentPresenceRequest"); _PREHASH_ClassifiedInfoRequest = gMessageStringTable.getString("ClassifiedInfoRequest"); _PREHASH_ParcelInfoRequest = gMessageStringTable.getString("ParcelInfoRequest"); _PREHASH_ParcelObjectOwnersRequest = gMessageStringTable.getString("ParcelObjectOwnersRequest"); _PREHASH_TeleportLandmarkRequest = gMessageStringTable.getString("TeleportLandmarkRequest"); _PREHASH_EventInfoRequest = gMessageStringTable.getString("EventInfoRequest"); - _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator"); - _PREHASH_PickInfoRequest = gMessageStringTable.getString("PickInfoRequest"); _PREHASH_MoneyBalanceRequest = gMessageStringTable.getString("MoneyBalanceRequest"); _PREHASH_GroupMembersRequest = gMessageStringTable.getString("GroupMembersRequest"); _PREHASH_GroupRoleMembersRequest = gMessageStringTable.getString("GroupRoleMembersRequest"); + _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator"); _PREHASH_OldFolderID = gMessageStringTable.getString("OldFolderID"); _PREHASH_UserInfoRequest = gMessageStringTable.getString("UserInfoRequest"); _PREHASH_TextureID = gMessageStringTable.getString("TextureID"); _PREHASH_ProfileURL = gMessageStringTable.getString("ProfileURL"); _PREHASH_Handle = gMessageStringTable.getString("Handle"); - _PREHASH_StartParcelRenameAck = gMessageStringTable.getString("StartParcelRenameAck"); _PREHASH_ButtonIndex = gMessageStringTable.getString("ButtonIndex"); _PREHASH_GetScriptRunning = gMessageStringTable.getString("GetScriptRunning"); _PREHASH_SetScriptRunning = gMessageStringTable.getString("SetScriptRunning"); _PREHASH_Health = gMessageStringTable.getString("Health"); - _PREHASH_FileID = gMessageStringTable.getString("FileID"); _PREHASH_CircuitInfo = gMessageStringTable.getString("CircuitInfo"); _PREHASH_ObjectBuy = gMessageStringTable.getString("ObjectBuy"); _PREHASH_ProfileEnd = gMessageStringTable.getString("ProfileEnd"); @@ -2325,7 +2116,6 @@ void init_prehash_data() _PREHASH_Change = gMessageStringTable.getString("Change"); _PREHASH_Height = gMessageStringTable.getString("Height"); _PREHASH_Region = gMessageStringTable.getString("Region"); - _PREHASH_MoneyHistoryReply = gMessageStringTable.getString("MoneyHistoryReply"); _PREHASH_TelehubInfo = gMessageStringTable.getString("TelehubInfo"); _PREHASH_StateSave = gMessageStringTable.getString("StateSave"); _PREHASH_RoleData = gMessageStringTable.getString("RoleData"); @@ -2336,11 +2126,10 @@ void init_prehash_data() _PREHASH_UsePhysics = gMessageStringTable.getString("UsePhysics"); _PREHASH_RegionDenyTransacted = gMessageStringTable.getString("RegionDenyTransacted"); _PREHASH_JointType = gMessageStringTable.getString("JointType"); - _PREHASH_TaxEstimate = gMessageStringTable.getString("TaxEstimate"); _PREHASH_ObjectTaxEstimate = gMessageStringTable.getString("ObjectTaxEstimate"); _PREHASH_LightTaxEstimate = gMessageStringTable.getString("LightTaxEstimate"); - _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged"); _PREHASH_LandTaxEstimate = gMessageStringTable.getString("LandTaxEstimate"); + _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged"); _PREHASH_GroupTaxEstimate = gMessageStringTable.getString("GroupTaxEstimate"); _PREHASH_AvgViewerFPS = gMessageStringTable.getString("AvgViewerFPS"); _PREHASH_Buttons = gMessageStringTable.getString("Buttons"); @@ -2372,8 +2161,6 @@ void init_prehash_data() _PREHASH_ChannelType = gMessageStringTable.getString("ChannelType"); _PREHASH_NonExemptMembers = gMessageStringTable.getString("NonExemptMembers"); _PREHASH_Agents = gMessageStringTable.getString("Agents"); - _PREHASH_SimulatorStart = gMessageStringTable.getString("SimulatorStart"); - _PREHASH_Enable = gMessageStringTable.getString("Enable"); _PREHASH_MemberData = gMessageStringTable.getString("MemberData"); _PREHASH_ToGroupID = gMessageStringTable.getString("ToGroupID"); _PREHASH_ImageNotInDatabase = gMessageStringTable.getString("ImageNotInDatabase"); @@ -2381,27 +2168,21 @@ void init_prehash_data() _PREHASH_AnimID = gMessageStringTable.getString("AnimID"); _PREHASH_Serial = gMessageStringTable.getString("Serial"); _PREHASH_AbuseRegionName = gMessageStringTable.getString("AbuseRegionName"); - _PREHASH_ControlPort = gMessageStringTable.getString("ControlPort"); _PREHASH_ModifyLand = gMessageStringTable.getString("ModifyLand"); _PREHASH_Digest = gMessageStringTable.getString("Digest"); _PREHASH_Victim = gMessageStringTable.getString("Victim"); _PREHASH_Script = gMessageStringTable.getString("Script"); - _PREHASH_TemplateChecksumReply = gMessageStringTable.getString("TemplateChecksumReply"); _PREHASH_PickInfoReply = gMessageStringTable.getString("PickInfoReply"); _PREHASH_MoneyBalanceReply = gMessageStringTable.getString("MoneyBalanceReply"); _PREHASH_RoutedMoneyBalanceReply = gMessageStringTable.getString("RoutedMoneyBalanceReply"); _PREHASH_RoleID = gMessageStringTable.getString("RoleID"); _PREHASH_RegionInfo = gMessageStringTable.getString("RegionInfo"); - _PREHASH_Sequence = gMessageStringTable.getString("Sequence"); _PREHASH_GodUpdateRegionInfo = gMessageStringTable.getString("GodUpdateRegionInfo"); - _PREHASH_LocalX = gMessageStringTable.getString("LocalX"); - _PREHASH_LocalY = gMessageStringTable.getString("LocalY"); _PREHASH_StartAnim = gMessageStringTable.getString("StartAnim"); - _PREHASH_Location = gMessageStringTable.getString("Location"); _PREHASH_Action = gMessageStringTable.getString("Action"); + _PREHASH_Location = gMessageStringTable.getString("Location"); _PREHASH_Rights = gMessageStringTable.getString("Rights"); _PREHASH_SearchDir = gMessageStringTable.getString("SearchDir"); - _PREHASH_Active = gMessageStringTable.getString("Active"); _PREHASH_TransferRequest = gMessageStringTable.getString("TransferRequest"); _PREHASH_ScriptSensorRequest = gMessageStringTable.getString("ScriptSensorRequest"); _PREHASH_MoneyTransferRequest = gMessageStringTable.getString("MoneyTransferRequest"); @@ -2412,8 +2193,6 @@ void init_prehash_data() _PREHASH_SharedData = gMessageStringTable.getString("SharedData"); _PREHASH_PSBlock = gMessageStringTable.getString("PSBlock"); _PREHASH_UUIDNameBlock = gMessageStringTable.getString("UUIDNameBlock"); - _PREHASH_Viewer = gMessageStringTable.getString("Viewer"); - _PREHASH_GroupNoticeDelete = gMessageStringTable.getString("GroupNoticeDelete"); _PREHASH_GroupTitleUpdate = gMessageStringTable.getString("GroupTitleUpdate"); _PREHASH_Method = gMessageStringTable.getString("Method"); _PREHASH_TouchName = gMessageStringTable.getString("TouchName"); @@ -2425,11 +2204,9 @@ void init_prehash_data() _PREHASH_SystemMessage = gMessageStringTable.getString("SystemMessage"); _PREHASH_BodyRotation = gMessageStringTable.getString("BodyRotation"); _PREHASH_SearchRegions = gMessageStringTable.getString("SearchRegions"); - _PREHASH_Ignore = gMessageStringTable.getString("Ignore"); _PREHASH_AnimationData = gMessageStringTable.getString("AnimationData"); _PREHASH_StatID = gMessageStringTable.getString("StatID"); _PREHASH_ItemID = gMessageStringTable.getString("ItemID"); - _PREHASH_AvatarStatisticsReply = gMessageStringTable.getString("AvatarStatisticsReply"); _PREHASH_ScriptDialogReply = gMessageStringTable.getString("ScriptDialogReply"); _PREHASH_RegionIDAndHandleReply = gMessageStringTable.getString("RegionIDAndHandleReply"); _PREHASH_CameraAtOffset = gMessageStringTable.getString("CameraAtOffset"); @@ -2454,7 +2231,6 @@ void init_prehash_data() _PREHASH_RegionPort = gMessageStringTable.getString("RegionPort"); _PREHASH_PriceEnergyUnit = gMessageStringTable.getString("PriceEnergyUnit"); _PREHASH_Bitmap = gMessageStringTable.getString("Bitmap"); - _PREHASH_TrackAgentSession = gMessageStringTable.getString("TrackAgentSession"); _PREHASH_CacheMissType = gMessageStringTable.getString("CacheMissType"); _PREHASH_VFileID = gMessageStringTable.getString("VFileID"); _PREHASH_GroupInsigniaID = gMessageStringTable.getString("GroupInsigniaID"); @@ -2502,7 +2278,6 @@ void init_prehash_data() _PREHASH_CanAcceptTasks = gMessageStringTable.getString("CanAcceptTasks"); _PREHASH_ItemData = gMessageStringTable.getString("ItemData"); _PREHASH_AnimationList = gMessageStringTable.getString("AnimationList"); - _PREHASH_PassObject = gMessageStringTable.getString("PassObject"); _PREHASH_Reputation = gMessageStringTable.getString("Reputation"); _PREHASH_IntValue = gMessageStringTable.getString("IntValue"); _PREHASH_TargetType = gMessageStringTable.getString("TargetType"); @@ -2525,10 +2300,8 @@ void init_prehash_data() _PREHASH_DirFindQueryBackend = gMessageStringTable.getString("DirFindQueryBackend"); _PREHASH_DirPlacesQueryBackend = gMessageStringTable.getString("DirPlacesQueryBackend"); _PREHASH_DirClassifiedQueryBackend = gMessageStringTable.getString("DirClassifiedQueryBackend"); - _PREHASH_DirPicksQueryBackend = gMessageStringTable.getString("DirPicksQueryBackend"); _PREHASH_DirLandQueryBackend = gMessageStringTable.getString("DirLandQueryBackend"); _PREHASH_DirPopularQueryBackend = gMessageStringTable.getString("DirPopularQueryBackend"); - _PREHASH_LogoutDemand = gMessageStringTable.getString("LogoutDemand"); _PREHASH_HistoryData = gMessageStringTable.getString("HistoryData"); _PREHASH_SnapshotID = gMessageStringTable.getString("SnapshotID"); _PREHASH_Aspect = gMessageStringTable.getString("Aspect"); @@ -2536,7 +2309,6 @@ void init_prehash_data() _PREHASH_VoteCast = gMessageStringTable.getString("VoteCast"); _PREHASH_CastsShadows = gMessageStringTable.getString("CastsShadows"); _PREHASH_EveryoneMask = gMessageStringTable.getString("EveryoneMask"); - _PREHASH_SetSunPhase = gMessageStringTable.getString("SetSunPhase"); _PREHASH_ObjectSpinUpdate = gMessageStringTable.getString("ObjectSpinUpdate"); _PREHASH_MaturePublish = gMessageStringTable.getString("MaturePublish"); _PREHASH_UseExistingAsset = gMessageStringTable.getString("UseExistingAsset"); @@ -2545,7 +2317,6 @@ void init_prehash_data() _PREHASH_TeleportCancel = gMessageStringTable.getString("TeleportCancel"); _PREHASH_UnixTime = gMessageStringTable.getString("UnixTime"); _PREHASH_QueryFlags = gMessageStringTable.getString("QueryFlags"); - _PREHASH_LastExecFroze = gMessageStringTable.getString("LastExecFroze"); _PREHASH_AlwaysRun = gMessageStringTable.getString("AlwaysRun"); _PREHASH_Bottom = gMessageStringTable.getString("Bottom"); _PREHASH_ButtonData = gMessageStringTable.getString("ButtonData"); @@ -2564,7 +2335,6 @@ void init_prehash_data() _PREHASH_GroupNoticesListRequest = gMessageStringTable.getString("GroupNoticesListRequest"); _PREHASH_ParcelAccessListRequest = gMessageStringTable.getString("ParcelAccessListRequest"); _PREHASH_MuteListRequest = gMessageStringTable.getString("MuteListRequest"); - _PREHASH_StartPeriod = gMessageStringTable.getString("StartPeriod"); _PREHASH_RpcChannelRequest = gMessageStringTable.getString("RpcChannelRequest"); _PREHASH_LandStatRequest = gMessageStringTable.getString("LandStatRequest"); _PREHASH_PlacesQuery = gMessageStringTable.getString("PlacesQuery"); @@ -2592,34 +2362,27 @@ void init_prehash_data() _PREHASH_SoundTrigger = gMessageStringTable.getString("SoundTrigger"); _PREHASH_TerrainRaiseLimit = gMessageStringTable.getString("TerrainRaiseLimit"); _PREHASH_Quorum = gMessageStringTable.getString("Quorum"); - _PREHASH_TokenBlock = gMessageStringTable.getString("TokenBlock"); _PREHASH_AgentBlock = gMessageStringTable.getString("AgentBlock"); _PREHASH_CommandBlock = gMessageStringTable.getString("CommandBlock"); _PREHASH_PricePublicObjectDecay = gMessageStringTable.getString("PricePublicObjectDecay"); _PREHASH_SpawnPointPos = gMessageStringTable.getString("SpawnPointPos"); - _PREHASH_AttachedSoundCutoffRadius = gMessageStringTable.getString("AttachedSoundCutoffRadius"); _PREHASH_VolumeDetail = gMessageStringTable.getString("VolumeDetail"); _PREHASH_FromAgentName = gMessageStringTable.getString("FromAgentName"); _PREHASH_Range = gMessageStringTable.getString("Range"); _PREHASH_DirectoryVisibility = gMessageStringTable.getString("DirectoryVisibility"); _PREHASH_PublicIP = gMessageStringTable.getString("PublicIP"); _PREHASH_TeleportFailed = gMessageStringTable.getString("TeleportFailed"); - _PREHASH_OnlineStatusReply = gMessageStringTable.getString("OnlineStatusReply"); - _PREHASH_RequestAvatarInfo = gMessageStringTable.getString("RequestAvatarInfo"); _PREHASH_PreloadSound = gMessageStringTable.getString("PreloadSound"); _PREHASH_ScreenshotID = gMessageStringTable.getString("ScreenshotID"); _PREHASH_CovenantTimestamp = gMessageStringTable.getString("CovenantTimestamp"); _PREHASH_OldestUnacked = gMessageStringTable.getString("OldestUnacked"); _PREHASH_SimulatorIP = gMessageStringTable.getString("SimulatorIP"); - _PREHASH_ObjectImport = gMessageStringTable.getString("ObjectImport"); _PREHASH_Value = gMessageStringTable.getString("Value"); _PREHASH_JointAxisOrAnchor = gMessageStringTable.getString("JointAxisOrAnchor"); _PREHASH_Test0 = gMessageStringTable.getString("Test0"); _PREHASH_Test1 = gMessageStringTable.getString("Test1"); _PREHASH_Test2 = gMessageStringTable.getString("Test2"); _PREHASH_SunPhase = gMessageStringTable.getString("SunPhase"); - _PREHASH_Place = gMessageStringTable.getString("Place"); - _PREHASH_Phase = gMessageStringTable.getString("Phase"); _PREHASH_ParcelDivide = gMessageStringTable.getString("ParcelDivide"); _PREHASH_PriceObjectClaim = gMessageStringTable.getString("PriceObjectClaim"); _PREHASH_Field = gMessageStringTable.getString("Field"); @@ -2629,7 +2392,6 @@ void init_prehash_data() _PREHASH_Score = gMessageStringTable.getString("Score"); _PREHASH_Image = gMessageStringTable.getString("Image"); _PREHASH_ObjectClickAction = gMessageStringTable.getString("ObjectClickAction"); - _PREHASH_Delta = gMessageStringTable.getString("Delta"); _PREHASH_Parameter = gMessageStringTable.getString("Parameter"); _PREHASH_Flags = gMessageStringTable.getString("Flags"); _PREHASH_Plane = gMessageStringTable.getString("Plane"); @@ -2639,26 +2401,24 @@ void init_prehash_data() _PREHASH_Textures = gMessageStringTable.getString("Textures"); _PREHASH_EventData = gMessageStringTable.getString("EventData"); _PREHASH_Final = gMessageStringTable.getString("Final"); + _PREHASH_System = gMessageStringTable.getString("System"); _PREHASH_TelehubPos = gMessageStringTable.getString("TelehubPos"); _PREHASH_ReportAutosaveCrash = gMessageStringTable.getString("ReportAutosaveCrash"); _PREHASH_CreateTrustedCircuit = gMessageStringTable.getString("CreateTrustedCircuit"); _PREHASH_DenyTrustedCircuit = gMessageStringTable.getString("DenyTrustedCircuit"); _PREHASH_RequestTrustedCircuit = gMessageStringTable.getString("RequestTrustedCircuit"); _PREHASH_Codec = gMessageStringTable.getString("Codec"); - _PREHASH_Level = gMessageStringTable.getString("Level"); _PREHASH_Modal = gMessageStringTable.getString("Modal"); _PREHASH_ChildAgentUnknown = gMessageStringTable.getString("ChildAgentUnknown"); _PREHASH_LandingType = gMessageStringTable.getString("LandingType"); _PREHASH_ScriptRunningReply = gMessageStringTable.getString("ScriptRunningReply"); - _PREHASH_MoneyDetailsReply = gMessageStringTable.getString("MoneyDetailsReply"); _PREHASH_Reply = gMessageStringTable.getString("Reply"); + _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply"); _PREHASH_TelehubRot = gMessageStringTable.getString("TelehubRot"); - _PREHASH_RequestFriendship = gMessageStringTable.getString("RequestFriendship"); _PREHASH_AcceptFriendship = gMessageStringTable.getString("AcceptFriendship"); - _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply"); + _PREHASH_ItemType = gMessageStringTable.getString("ItemType"); _PREHASH_DwellInfo = gMessageStringTable.getString("DwellInfo"); _PREHASH_AgentResume = gMessageStringTable.getString("AgentResume"); - _PREHASH_ItemType = gMessageStringTable.getString("ItemType"); _PREHASH_MailFilter = gMessageStringTable.getString("MailFilter"); _PREHASH_Disconnect = gMessageStringTable.getString("Disconnect"); _PREHASH_SimPosition = gMessageStringTable.getString("SimPosition"); @@ -2685,7 +2445,6 @@ void init_prehash_data() _PREHASH_CategoryID = gMessageStringTable.getString("CategoryID"); _PREHASH_Token = gMessageStringTable.getString("Token"); _PREHASH_AggregatePerms = gMessageStringTable.getString("AggregatePerms"); - _PREHASH_StartParcelRemoveAck = gMessageStringTable.getString("StartParcelRemoveAck"); _PREHASH_ObjectSelect = gMessageStringTable.getString("ObjectSelect"); _PREHASH_ForceObjectSelect = gMessageStringTable.getString("ForceObjectSelect"); _PREHASH_Price = gMessageStringTable.getString("Price"); @@ -2714,7 +2473,6 @@ void init_prehash_data() _PREHASH_AvatarID = gMessageStringTable.getString("AvatarID"); _PREHASH_FounderID = gMessageStringTable.getString("FounderID"); _PREHASH_EndPointID = gMessageStringTable.getString("EndPointID"); - _PREHASH_StipendEstimate = gMessageStringTable.getString("StipendEstimate"); _PREHASH_LocationLookAt = gMessageStringTable.getString("LocationLookAt"); _PREHASH_Sound = gMessageStringTable.getString("Sound"); _PREHASH_Cover = gMessageStringTable.getString("Cover"); @@ -2734,12 +2492,12 @@ void init_prehash_data() _PREHASH_GroupRoleChanges = gMessageStringTable.getString("GroupRoleChanges"); _PREHASH_Count = gMessageStringTable.getString("Count"); _PREHASH_South = gMessageStringTable.getString("South"); - _PREHASH_Entry = gMessageStringTable.getString("Entry"); _PREHASH_ObjectUpdateCompressed = gMessageStringTable.getString("ObjectUpdateCompressed"); _PREHASH_MuteFlags = gMessageStringTable.getString("MuteFlags"); _PREHASH_Group = gMessageStringTable.getString("Group"); _PREHASH_AgentPause = gMessageStringTable.getString("AgentPause"); _PREHASH_LanguagesText = gMessageStringTable.getString("LanguagesText"); + _PREHASH_Error = gMessageStringTable.getString("Error"); _PREHASH_InternalScriptMail = gMessageStringTable.getString("InternalScriptMail"); _PREHASH_FindAgent = gMessageStringTable.getString("FindAgent"); _PREHASH_AgentData = gMessageStringTable.getString("AgentData"); @@ -2748,7 +2506,6 @@ void init_prehash_data() _PREHASH_AcceptNotices = gMessageStringTable.getString("AcceptNotices"); _PREHASH_SetGroupAcceptNotices = gMessageStringTable.getString("SetGroupAcceptNotices"); _PREHASH_CloseCircuit = gMessageStringTable.getString("CloseCircuit"); - _PREHASH_LogControl = gMessageStringTable.getString("LogControl"); _PREHASH_TeleportFinish = gMessageStringTable.getString("TeleportFinish"); _PREHASH_PathRevolutions = gMessageStringTable.getString("PathRevolutions"); _PREHASH_ClassifiedInfoReply = gMessageStringTable.getString("ClassifiedInfoReply"); @@ -2765,7 +2522,6 @@ void init_prehash_data() _PREHASH_EventNotificationAddRequest = gMessageStringTable.getString("EventNotificationAddRequest"); _PREHASH_ParcelDwellRequest = gMessageStringTable.getString("ParcelDwellRequest"); _PREHASH_EventLocationRequest = gMessageStringTable.getString("EventLocationRequest"); - _PREHASH_EndPeriod = gMessageStringTable.getString("EndPeriod"); _PREHASH_SetStartLocationRequest = gMessageStringTable.getString("SetStartLocationRequest"); _PREHASH_QueryStart = gMessageStringTable.getString("QueryStart"); _PREHASH_EjectData = gMessageStringTable.getString("EjectData"); @@ -2778,7 +2534,6 @@ void init_prehash_data() _PREHASH_VFileType = gMessageStringTable.getString("VFileType"); _PREHASH_EjectGroupMemberReply = gMessageStringTable.getString("EjectGroupMemberReply"); _PREHASH_ImageData = gMessageStringTable.getString("ImageData"); - _PREHASH_SpaceServerSimulatorTimeMessage = gMessageStringTable.getString("SpaceServerSimulatorTimeMessage"); _PREHASH_SimulatorViewerTimeMessage = gMessageStringTable.getString("SimulatorViewerTimeMessage"); _PREHASH_Rotation = gMessageStringTable.getString("Rotation"); _PREHASH_Selection = gMessageStringTable.getString("Selection"); @@ -2786,7 +2541,6 @@ void init_prehash_data() _PREHASH_OperationData = gMessageStringTable.getString("OperationData"); _PREHASH_ExpirationDate = gMessageStringTable.getString("ExpirationDate"); _PREHASH_ParcelDeedToGroup = gMessageStringTable.getString("ParcelDeedToGroup"); - _PREHASH_DirPicksReply = gMessageStringTable.getString("DirPicksReply"); _PREHASH_AvatarPicksReply = gMessageStringTable.getString("AvatarPicksReply"); _PREHASH_GroupTitlesReply = gMessageStringTable.getString("GroupTitlesReply"); _PREHASH_AgentInfo = gMessageStringTable.getString("AgentInfo"); @@ -2797,8 +2551,8 @@ void init_prehash_data() _PREHASH_SourceID = gMessageStringTable.getString("SourceID"); _PREHASH_ChangeUserRights = gMessageStringTable.getString("ChangeUserRights"); _PREHASH_TeleportFlags = gMessageStringTable.getString("TeleportFlags"); - _PREHASH_AssetData = gMessageStringTable.getString("AssetData"); _PREHASH_SlaveParcelData = gMessageStringTable.getString("SlaveParcelData"); + _PREHASH_AssetData = gMessageStringTable.getString("AssetData"); _PREHASH_MultipleObjectUpdate = gMessageStringTable.getString("MultipleObjectUpdate"); _PREHASH_ObjectUpdate = gMessageStringTable.getString("ObjectUpdate"); _PREHASH_ImprovedTerseObjectUpdate = gMessageStringTable.getString("ImprovedTerseObjectUpdate"); @@ -2814,7 +2568,6 @@ void init_prehash_data() _PREHASH_ClaimDate = gMessageStringTable.getString("ClaimDate"); _PREHASH_MergeParcel = gMessageStringTable.getString("MergeParcel"); _PREHASH_Priority = gMessageStringTable.getString("Priority"); - _PREHASH_Building = gMessageStringTable.getString("Building"); _PREHASH_QueryText = gMessageStringTable.getString("QueryText"); _PREHASH_GroupNoticeAdd = gMessageStringTable.getString("GroupNoticeAdd"); _PREHASH_ReturnType = gMessageStringTable.getString("ReturnType"); @@ -2824,7 +2577,6 @@ void init_prehash_data() _PREHASH_RequestMultipleObjects = gMessageStringTable.getString("RequestMultipleObjects"); _PREHASH_RetrieveInstantMessages = gMessageStringTable.getString("RetrieveInstantMessages"); _PREHASH_OpenCircuit = gMessageStringTable.getString("OpenCircuit"); - _PREHASH_SecureSessionID = gMessageStringTable.getString("SecureSessionID"); _PREHASH_CrossedRegion = gMessageStringTable.getString("CrossedRegion"); _PREHASH_DirGroupsReply = gMessageStringTable.getString("DirGroupsReply"); _PREHASH_AvatarGroupsReply = gMessageStringTable.getString("AvatarGroupsReply"); @@ -2835,18 +2587,14 @@ void init_prehash_data() _PREHASH_ParentEstate = gMessageStringTable.getString("ParentEstate"); _PREHASH_EstateName = gMessageStringTable.getString("EstateName"); _PREHASH_MuteName = gMessageStringTable.getString("MuteName"); - _PREHASH_StartParcelRename = gMessageStringTable.getString("StartParcelRename"); - _PREHASH_BulkParcelRename = gMessageStringTable.getString("BulkParcelRename"); _PREHASH_ParcelRename = gMessageStringTable.getString("ParcelRename"); _PREHASH_ViewerFilename = gMessageStringTable.getString("ViewerFilename"); - _PREHASH_Positive = gMessageStringTable.getString("Positive"); _PREHASH_UserReportInternal = gMessageStringTable.getString("UserReportInternal"); _PREHASH_AvatarPropertiesRequest = gMessageStringTable.getString("AvatarPropertiesRequest"); _PREHASH_ParcelPropertiesRequest = gMessageStringTable.getString("ParcelPropertiesRequest"); _PREHASH_GroupProfileRequest = gMessageStringTable.getString("GroupProfileRequest"); _PREHASH_AgentDataUpdateRequest = gMessageStringTable.getString("AgentDataUpdateRequest"); _PREHASH_PriceObjectScaleFactor = gMessageStringTable.getString("PriceObjectScaleFactor"); - _PREHASH_DirPicksQuery = gMessageStringTable.getString("DirPicksQuery"); _PREHASH_OpenEnrollment = gMessageStringTable.getString("OpenEnrollment"); _PREHASH_GroupData = gMessageStringTable.getString("GroupData"); _PREHASH_RequestGodlikePowers = gMessageStringTable.getString("RequestGodlikePowers"); @@ -2857,7 +2605,6 @@ void init_prehash_data() _PREHASH_FirstDetachAll = gMessageStringTable.getString("FirstDetachAll"); _PREHASH_EstateID = gMessageStringTable.getString("EstateID"); _PREHASH_ImprovedInstantMessage = gMessageStringTable.getString("ImprovedInstantMessage"); - _PREHASH_AgentQuit = gMessageStringTable.getString("AgentQuit"); _PREHASH_CheckParcelSales = gMessageStringTable.getString("CheckParcelSales"); _PREHASH_ParcelSales = gMessageStringTable.getString("ParcelSales"); _PREHASH_CurrentInterval = gMessageStringTable.getString("CurrentInterval"); @@ -2874,12 +2621,8 @@ void init_prehash_data() _PREHASH_SystemKickUser = gMessageStringTable.getString("SystemKickUser"); _PREHASH_TransactionTime = gMessageStringTable.getString("TransactionTime"); _PREHASH_TimeToLive = gMessageStringTable.getString("TimeToLive"); - _PREHASH_StartParcelRemove = gMessageStringTable.getString("StartParcelRemove"); - _PREHASH_BulkParcelRemove = gMessageStringTable.getString("BulkParcelRemove"); _PREHASH_OldAgentID = gMessageStringTable.getString("OldAgentID"); - _PREHASH_BonusEstimate = gMessageStringTable.getString("BonusEstimate"); _PREHASH_MusicURL = gMessageStringTable.getString("MusicURL"); - _PREHASH_CompleteLure = gMessageStringTable.getString("CompleteLure"); _PREHASH_ParcelPrimBonus = gMessageStringTable.getString("ParcelPrimBonus"); _PREHASH_EjectUser = gMessageStringTable.getString("EjectUser"); _PREHASH_CoarseLocationUpdate = gMessageStringTable.getString("CoarseLocationUpdate"); @@ -2912,10 +2655,6 @@ void init_prehash_data() _PREHASH_EstateOwnerID = gMessageStringTable.getString("EstateOwnerID"); _PREHASH_LogoutRequest = gMessageStringTable.getString("LogoutRequest"); _PREHASH_AssetUploadRequest = gMessageStringTable.getString("AssetUploadRequest"); - _PREHASH_ReputationIndividualRequest = gMessageStringTable.getString("ReputationIndividualRequest"); - _PREHASH_MajorVersion = gMessageStringTable.getString("MajorVersion"); - _PREHASH_MinorVersion = gMessageStringTable.getString("MinorVersion"); - _PREHASH_SimulatorAssign = gMessageStringTable.getString("SimulatorAssign"); _PREHASH_TransactionType = gMessageStringTable.getString("TransactionType"); _PREHASH_AvatarPropertiesUpdate = gMessageStringTable.getString("AvatarPropertiesUpdate"); _PREHASH_ParcelPropertiesUpdate = gMessageStringTable.getString("ParcelPropertiesUpdate"); @@ -2924,7 +2663,6 @@ void init_prehash_data() _PREHASH_DeRezAck = gMessageStringTable.getString("DeRezAck"); _PREHASH_TakeControls = gMessageStringTable.getString("TakeControls"); _PREHASH_DirLandReply = gMessageStringTable.getString("DirLandReply"); - _PREHASH_SpaceLocationTeleportReply = gMessageStringTable.getString("SpaceLocationTeleportReply"); _PREHASH_MuteType = gMessageStringTable.getString("MuteType"); _PREHASH_IMViaEMail = gMessageStringTable.getString("IMViaEMail"); _PREHASH_RentPrice = gMessageStringTable.getString("RentPrice"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index 209b399ce8..71661ef83d 100644 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -10,7 +10,7 @@ #define LL_MESSAGE_PREHASH_H /** - * Generated from message template version number 1.053 + * Generated from message template version number 2.000 */ @@ -39,7 +39,6 @@ extern char * _PREHASH_ScriptAnswerYes; extern char * _PREHASH_PartnerID; extern char * _PREHASH_DirLandQuery; extern char * _PREHASH_TeleportStart; -extern char * _PREHASH_LogMessages; extern char * _PREHASH_AboutText; extern char * _PREHASH_VisualParam; extern char * _PREHASH_GroupPrims; @@ -47,10 +46,8 @@ extern char * _PREHASH_SelectedPrims; extern char * _PREHASH_ID; extern char * _PREHASH_UUIDNameRequest; extern char * _PREHASH_UUIDGroupNameRequest; -extern char * _PREHASH_MoneyTransactionsRequest; extern char * _PREHASH_GroupAccountTransactionsRequest; extern char * _PREHASH_MapNameRequest; -extern char * _PREHASH_MailTaskSimRequest; extern char * _PREHASH_UpdateSimulator; extern char * _PREHASH_BillableFactor; extern char * _PREHASH_ObjectBonusFactor; @@ -60,7 +57,6 @@ extern char * _PREHASH_ConfirmEnableSimulator; extern char * _PREHASH_LayerType; extern char * _PREHASH_OwnerRole; extern char * _PREHASH_ParcelOverlay; -extern char * _PREHASH_AdjustBalance; extern char * _PREHASH_GroupOwned; extern char * _PREHASH_IP; extern char * _PREHASH_ChatFromViewer; @@ -95,8 +91,8 @@ extern char * _PREHASH_SensedData; extern char * _PREHASH_UpdateBlock; extern char * _PREHASH_ClassifiedGodDelete; extern char * _PREHASH_ObjectGrabUpdate; -extern char * _PREHASH_TaxDate; extern char * _PREHASH_LocationPos; +extern char * _PREHASH_TaxDate; extern char * _PREHASH_StartDateTime; extern char * _PREHASH_ObjectUpdateCached; extern char * _PREHASH_Packets; @@ -128,14 +124,11 @@ extern char * _PREHASH_AABBMin; extern char * _PREHASH_ClassifiedFlags; extern char * _PREHASH_ControlFlags; extern char * _PREHASH_TeleportRequest; -extern char * _PREHASH_SpaceLocationTeleportRequest; -extern char * _PREHASH_LeaderBoardRequest; extern char * _PREHASH_ScriptTeleportRequest; +extern char * _PREHASH_EstateCovenantRequest; extern char * _PREHASH_DateUTC; extern char * _PREHASH_TaskIDs; -extern char * _PREHASH_EstateCovenantRequest; extern char * _PREHASH_RequestResult; -extern char * _PREHASH_ReputationAgentAssign; extern char * _PREHASH_CanAcceptAgents; extern char * _PREHASH_ObjectSaleInfo; extern char * _PREHASH_KillChildAgents; @@ -147,7 +140,6 @@ extern char * _PREHASH_InfoBlock; extern char * _PREHASH_OwnershipCost; extern char * _PREHASH_AvatarNotesUpdate; extern char * _PREHASH_PID; -extern char * _PREHASH_TimeString; extern char * _PREHASH_DirPopularReply; extern char * _PREHASH_TerrainHeightRange00; extern char * _PREHASH_SimData; @@ -173,7 +165,6 @@ extern char * _PREHASH_Objects; extern char * _PREHASH_URL; extern char * _PREHASH_CreationDate; extern char * _PREHASH_JointPivot; -extern char * _PREHASH_RateeID; extern char * _PREHASH_FPS; extern char * _PREHASH_HasTelehub; extern char * _PREHASH_PathEnd; @@ -198,7 +189,6 @@ extern char * _PREHASH_GroupNoticesListReply; extern char * _PREHASH_ParcelAccessListReply; extern char * _PREHASH_RpcChannelReply; extern char * _PREHASH_RegionPresenceResponse; -extern char * _PREHASH_AgentPresenceResponse; extern char * _PREHASH_CharterMember; extern char * _PREHASH_EdgeData; extern char * _PREHASH_NameData; @@ -212,14 +202,12 @@ extern char * _PREHASH_Mag; extern char * _PREHASH_ParcelPropertiesRequestByID; extern char * _PREHASH_ObjectLink; extern char * _PREHASH_RpcScriptReplyInbound; -extern char * _PREHASH_BoardData; extern char * _PREHASH_RezData; extern char * _PREHASH_RemoveInventoryObjects; extern char * _PREHASH_GroupProposalBallot; extern char * _PREHASH_RPCServerIP; extern char * _PREHASH_Far; extern char * _PREHASH_GodSessionID; -extern char * _PREHASH_ViewerDigest; extern char * _PREHASH_FLAboutText; extern char * _PREHASH_RegionHandshakeReply; extern char * _PREHASH_GroupActiveProposalItemReply; @@ -231,7 +219,6 @@ extern char * _PREHASH_Set; extern char * _PREHASH_NewName; extern char * _PREHASH_Key; extern char * _PREHASH_AgentID; -extern char * _PREHASH_OnlineStatusRequest; extern char * _PREHASH_EventNotificationRemoveRequest; extern char * _PREHASH_NewFolderID; extern char * _PREHASH_Arc; @@ -243,7 +230,6 @@ extern char * _PREHASH_Top; extern char * _PREHASH_MiscStats; extern char * _PREHASH_ImageID; extern char * _PREHASH_DataPacket; -extern char * _PREHASH_ObjectDehinge; extern char * _PREHASH_You; extern char * _PREHASH_ScriptControlChange; extern char * _PREHASH_LoadURL; @@ -260,9 +246,9 @@ extern char * _PREHASH_Contribution; extern char * _PREHASH_SetGroupContribution; extern char * _PREHASH_Offline; extern char * _PREHASH_AgentIsNowWearing; -extern char * _PREHASH_SecPerDay; extern char * _PREHASH_Members; extern char * _PREHASH_FailedResends; +extern char * _PREHASH_SecPerDay; extern char * _PREHASH_CameraCenter; extern char * _PREHASH_CameraLeftAxis; extern char * _PREHASH_ExBlock; @@ -270,7 +256,6 @@ extern char * _PREHASH_Channel; extern char * _PREHASH_NetTest; extern char * _PREHASH_DiscardLevel; extern char * _PREHASH_LayerID; -extern char * _PREHASH_RatorID; extern char * _PREHASH_GrabOffset; extern char * _PREHASH_SimPort; extern char * _PREHASH_PricePerMeter; @@ -290,21 +275,16 @@ extern char * _PREHASH_SitName; extern char * _PREHASH_RegionsVisited; extern char * _PREHASH_DirClassifiedReply; extern char * _PREHASH_AvatarClassifiedReply; -extern char * _PREHASH_ReputationIndividualReply; extern char * _PREHASH_MediaURL; extern char * _PREHASH_CompleteAgentMovement; -extern char * _PREHASH_SpaceIP; extern char * _PREHASH_ClassifiedID; extern char * _PREHASH_LocalID; +extern char * _PREHASH_SpaceIP; extern char * _PREHASH_RemoveItem; extern char * _PREHASH_LogFailedMoneyTransaction; extern char * _PREHASH_ViewerStartAuction; extern char * _PREHASH_StartAuction; -extern char * _PREHASH_NameValueName; -extern char * _PREHASH_AngVelX; extern char * _PREHASH_DuplicateFlags; -extern char * _PREHASH_AngVelY; -extern char * _PREHASH_AngVelZ; extern char * _PREHASH_TextColor; extern char * _PREHASH_SlaveID; extern char * _PREHASH_Charter; @@ -315,21 +295,16 @@ extern char * _PREHASH_ParcelAuctions; extern char * _PREHASH_OwnerIsGroup; extern char * _PREHASH_NameValuePair; extern char * _PREHASH_RemoveNameValuePair; -extern char * _PREHASH_GetNameValuePair; extern char * _PREHASH_BulkUpdateInventory; extern char * _PREHASH_UpdateTaskInventory; extern char * _PREHASH_RemoveTaskInventory; extern char * _PREHASH_MoveTaskInventory; extern char * _PREHASH_RequestTaskInventory; extern char * _PREHASH_ReplyTaskInventory; -extern char * _PREHASH_DeclineInventory; extern char * _PREHASH_AggregatePermInventory; -extern char * _PREHASH_SimulatorInfo; -extern char * _PREHASH_MoneyTransactionsReply; extern char * _PREHASH_GroupAccountTransactionsReply; -extern char * _PREHASH_MailTaskSimReply; +extern char * _PREHASH_SimulatorInfo; extern char * _PREHASH_WearableData; -extern char * _PREHASH_StatisticsData; extern char * _PREHASH_Enabled; extern char * _PREHASH_Savings; extern char * _PREHASH_SimulatorLoad; @@ -341,15 +316,12 @@ extern char * _PREHASH_JoinGroupRequest; extern char * _PREHASH_LeaveGroupRequest; extern char * _PREHASH_InviteGroupRequest; extern char * _PREHASH_LiveHelpGroupRequest; -extern char * _PREHASH_ServerVersion; extern char * _PREHASH_PriceParcelClaimFactor; extern char * _PREHASH_BillableArea; extern char * _PREHASH_ObjectID; extern char * _PREHASH_ObjectFlagUpdate; extern char * _PREHASH_GroupRoleUpdate; extern char * _PREHASH_RequestInventoryAsset; -extern char * _PREHASH_RedoLand; -extern char * _PREHASH_TravelAccess; extern char * _PREHASH_ChangedGrid; extern char * _PREHASH_AgentDropGroup; extern char * _PREHASH_Details; @@ -382,7 +354,6 @@ extern char * _PREHASH_Timestamp; extern char * _PREHASH_GlobalPos; extern char * _PREHASH_GrabOffsetInitial; extern char * _PREHASH_IsTrial; -extern char * _PREHASH_FinalizeLogout; extern char * _PREHASH_ObjectDuplicateOnRay; extern char * _PREHASH_GroupMembershipCount; extern char * _PREHASH_MethodData; @@ -418,32 +389,26 @@ extern char * _PREHASH_TaskData; extern char * _PREHASH_SimWideMaxPrims; extern char * _PREHASH_TotalPrims; extern char * _PREHASH_ProfileBegin; -extern char * _PREHASH_MoneyDetailsRequest; extern char * _PREHASH_Request; extern char * _PREHASH_GroupAccountDetailsRequest; extern char * _PREHASH_GroupActiveProposalsRequest; extern char * _PREHASH_StringValue; -extern char * _PREHASH_ClosestSimulator; extern char * _PREHASH_Version; extern char * _PREHASH_OtherCount; extern char * _PREHASH_MemberCount; extern char * _PREHASH_ChatData; extern char * _PREHASH_IsGroupOwned; extern char * _PREHASH_EnergyEfficiency; -extern char * _PREHASH_MaxPlace; extern char * _PREHASH_PickInfoUpdate; extern char * _PREHASH_PickDelete; extern char * _PREHASH_ScriptReset; extern char * _PREHASH_Requester; extern char * _PREHASH_ForSale; extern char * _PREHASH_NearestLandingRegionReply; -extern char * _PREHASH_RecordAgentPresence; -extern char * _PREHASH_EraseAgentPresence; extern char * _PREHASH_ParcelID; extern char * _PREHASH_Godlike; extern char * _PREHASH_TotalDebits; extern char * _PREHASH_Direction; -extern char * _PREHASH_Appearance; extern char * _PREHASH_HealthData; extern char * _PREHASH_LeftAxis; extern char * _PREHASH_LocationBlock; @@ -451,41 +416,31 @@ extern char * _PREHASH_ObjectImage; extern char * _PREHASH_TerrainStartHeight00; extern char * _PREHASH_TerrainStartHeight01; extern char * _PREHASH_TerrainStartHeight10; -extern char * _PREHASH_ObjectHinge; extern char * _PREHASH_TerrainStartHeight11; -extern char * _PREHASH_MetersPerGrid; extern char * _PREHASH_WaterHeight; extern char * _PREHASH_FetchInventoryReply; -extern char * _PREHASH_MoneySummaryReply; extern char * _PREHASH_GroupAccountSummaryReply; extern char * _PREHASH_AttachedSound; extern char * _PREHASH_ParamInUse; extern char * _PREHASH_GodKickUser; extern char * _PREHASH_PickName; extern char * _PREHASH_TaskName; -extern char * _PREHASH_SubType; extern char * _PREHASH_ObjectCount; extern char * _PREHASH_RegionPresenceRequestByHandle; extern char * _PREHASH_RezSingleAttachmentFromInv; extern char * _PREHASH_ChildAgentUpdate; -extern char * _PREHASH_ToID; -extern char * _PREHASH_ViewerPort; extern char * _PREHASH_IsOwnerGroup; extern char * _PREHASH_AgentHeightWidth; extern char * _PREHASH_VerticalAngle; extern char * _PREHASH_WearableType; extern char * _PREHASH_AggregatePermNextOwner; extern char * _PREHASH_ShowInList; -extern char * _PREHASH_PositionSuggestion; extern char * _PREHASH_UpdateParcel; -extern char * _PREHASH_ClearAgentSessions; extern char * _PREHASH_SetAlwaysRun; extern char * _PREHASH_NVPair; extern char * _PREHASH_SearchType; extern char * _PREHASH_ObjectSpinStart; extern char * _PREHASH_UseEstateSun; -extern char * _PREHASH_LogoutBlock; -extern char * _PREHASH_RelayLogControl; extern char * _PREHASH_RegionID; extern char * _PREHASH_AbuseRegionID; extern char * _PREHASH_Creator; @@ -494,14 +449,12 @@ extern char * _PREHASH_DirEventsReply; extern char * _PREHASH_EventInfoReply; extern char * _PREHASH_UserInfoReply; extern char * _PREHASH_PathRadiusOffset; -extern char * _PREHASH_SessionInfo; extern char * _PREHASH_TextureData; extern char * _PREHASH_ChatPass; extern char * _PREHASH_TargetID; extern char * _PREHASH_DefaultPayPrice; extern char * _PREHASH_UserLocation; extern char * _PREHASH_MaxPrims; -extern char * _PREHASH_RegionIP; extern char * _PREHASH_LandmarkID; extern char * _PREHASH_InitiateDownload; extern char * _PREHASH_Name; @@ -509,18 +462,13 @@ extern char * _PREHASH_OtherCleanTime; extern char * _PREHASH_ParcelSetOtherCleanTime; extern char * _PREHASH_TeleportPriceExponent; extern char * _PREHASH_Gain; -extern char * _PREHASH_VelX; extern char * _PREHASH_PacketAck; extern char * _PREHASH_PathSkew; -extern char * _PREHASH_Negative; -extern char * _PREHASH_VelY; extern char * _PREHASH_SimulatorShutdownRequest; extern char * _PREHASH_NearestLandingRegionRequest; -extern char * _PREHASH_VelZ; extern char * _PREHASH_OtherID; extern char * _PREHASH_MemberID; extern char * _PREHASH_MapLayerRequest; -extern char * _PREHASH_PatchVersion; extern char * _PREHASH_ObjectScale; extern char * _PREHASH_TargetIP; extern char * _PREHASH_Redo; @@ -563,27 +511,20 @@ extern char * _PREHASH_Perp; extern char * _PREHASH_Code; extern char * _PREHASH_InvType; extern char * _PREHASH_AgentFOV; -extern char * _PREHASH_BulkMoneyTransfer; extern char * _PREHASH_Audible; extern char * _PREHASH_AuctionData; extern char * _PREHASH_IDBlock; -extern char * _PREHASH_ReputationData; extern char * _PREHASH_West; extern char * _PREHASH_Undo; extern char * _PREHASH_TotalNumItems; extern char * _PREHASH_Info; extern char * _PREHASH_Area; -extern char * _PREHASH_Behavior; extern char * _PREHASH_SimCrashed; extern char * _PREHASH_Text; -extern char * _PREHASH_AgentToNewRegion; extern char * _PREHASH_PriceGroupCreate; extern char * _PREHASH_ObjectShape; extern char * _PREHASH_GroupRoleDataReply; -extern char * _PREHASH_PosX; -extern char * _PREHASH_PosY; extern char * _PREHASH_MuteCRC; -extern char * _PREHASH_PosZ; extern char * _PREHASH_Size; extern char * _PREHASH_FromAddress; extern char * _PREHASH_Body; @@ -601,16 +542,14 @@ extern char * _PREHASH_Stat; extern char * _PREHASH_SoundID; extern char * _PREHASH_Item; extern char * _PREHASH_User; -extern char * _PREHASH_RemoteInfos; extern char * _PREHASH_Prey; -extern char * _PREHASH_UsecSinceStart; extern char * _PREHASH_RayStart; +extern char * _PREHASH_UsecSinceStart; extern char * _PREHASH_ParcelData; extern char * _PREHASH_CameraUpAxis; extern char * _PREHASH_ScriptDialog; extern char * _PREHASH_MasterParcelData; extern char * _PREHASH_Invalid; -extern char * _PREHASH_MinPlace; extern char * _PREHASH_ProfileCurve; extern char * _PREHASH_ParcelAccessListUpdate; extern char * _PREHASH_MuteListUpdate; @@ -629,14 +568,12 @@ extern char * _PREHASH_DeRezObject; extern char * _PREHASH_IsTemporary; extern char * _PREHASH_InsigniaID; extern char * _PREHASH_CheckFlags; -extern char * _PREHASH_TransferPriority; extern char * _PREHASH_EventID; extern char * _PREHASH_Selected; extern char * _PREHASH_FromAgentId; extern char * _PREHASH_Type; extern char * _PREHASH_ChatType; extern char * _PREHASH_ReportData; -extern char * _PREHASH_LeaderBoardData; extern char * _PREHASH_RequestBlock; extern char * _PREHASH_GrantData; extern char * _PREHASH_DetachAttachmentIntoInv; @@ -652,12 +589,9 @@ extern char * _PREHASH_OnlineNotification; extern char * _PREHASH_OfflineNotification; extern char * _PREHASH_SendPostcard; extern char * _PREHASH_RequestFlags; -extern char * _PREHASH_MoneyHistoryRequest; -extern char * _PREHASH_MoneySummaryRequest; extern char * _PREHASH_GroupAccountSummaryRequest; extern char * _PREHASH_GroupVoteHistoryRequest; extern char * _PREHASH_ParamValue; -extern char * _PREHASH_Checksum; extern char * _PREHASH_MaxAgents; extern char * _PREHASH_CreateNewOutfitAttachments; extern char * _PREHASH_RegionHandle; @@ -667,12 +601,10 @@ extern char * _PREHASH_AvatarInterestsUpdate; extern char * _PREHASH_GroupNoticeID; extern char * _PREHASH_ParcelName; extern char * _PREHASH_PriceObjectRent; -extern char * _PREHASH_ConnectAgentToUserserver; -extern char * _PREHASH_ConnectToUserserver; extern char * _PREHASH_OfferCallingCard; -extern char * _PREHASH_AgentAccess; extern char * _PREHASH_AcceptCallingCard; extern char * _PREHASH_DeclineCallingCard; +extern char * _PREHASH_AgentAccess; extern char * _PREHASH_DataHomeLocationReply; extern char * _PREHASH_EventLocationReply; extern char * _PREHASH_TerseDateID; @@ -690,8 +622,8 @@ extern char * _PREHASH_Invoice; extern char * _PREHASH_IntervalDays; extern char * _PREHASH_PathScaleX; extern char * _PREHASH_FromTaskID; -extern char * _PREHASH_TimeInfo; extern char * _PREHASH_PathScaleY; +extern char * _PREHASH_TimeInfo; extern char * _PREHASH_PublicCount; extern char * _PREHASH_ParcelJoin; extern char * _PREHASH_GroupRolesCount; @@ -716,7 +648,6 @@ extern char * _PREHASH_NearestLandingRegionUpdated; extern char * _PREHASH_PassToAgent; extern char * _PREHASH_PreyAgent; extern char * _PREHASH_SimStats; -extern char * _PREHASH_Options; extern char * _PREHASH_LogoutReply; extern char * _PREHASH_FeatureDisabled; extern char * _PREHASH_ObjectLocalID; @@ -727,10 +658,8 @@ extern char * _PREHASH_Destination; extern char * _PREHASH_MasterID; extern char * _PREHASH_TransferData; extern char * _PREHASH_WantToMask; -extern char * _PREHASH_AvatarData; extern char * _PREHASH_ParcelSelectObjects; extern char * _PREHASH_ExtraParams; -extern char * _PREHASH_LogLogin; extern char * _PREHASH_CreatorID; extern char * _PREHASH_Summary; extern char * _PREHASH_BuyObjectInventory; @@ -771,8 +700,8 @@ extern char * _PREHASH_ButtonLabel; extern char * _PREHASH_GranterID; extern char * _PREHASH_WantToText; extern char * _PREHASH_ReportType; -extern char * _PREHASH_DataBlock; extern char * _PREHASH_SimulatorReady; +extern char * _PREHASH_DataBlock; extern char * _PREHASH_AnimationSourceList; extern char * _PREHASH_SubscribeLoad; extern char * _PREHASH_UnsubscribeLoad; @@ -799,9 +728,8 @@ extern char * _PREHASH_Header; extern char * _PREHASH_GestureFlags; extern char * _PREHASH_XferID; extern char * _PREHASH_StatValue; -extern char * _PREHASH_PickID; extern char * _PREHASH_TaskID; -extern char * _PREHASH_GridsPerEdge; +extern char * _PREHASH_PickID; extern char * _PREHASH_RayEnd; extern char * _PREHASH_Throttles; extern char * _PREHASH_RebakeAvatarTextures; @@ -814,30 +742,24 @@ extern char * _PREHASH_Access; extern char * _PREHASH_TitleRoleID; extern char * _PREHASH_SquareMetersCredit; extern char * _PREHASH_Filename; -extern char * _PREHASH_SecuredTemplateChecksumRequest; -extern char * _PREHASH_TemplateChecksumRequest; -extern char * _PREHASH_AgentPresenceRequest; extern char * _PREHASH_ClassifiedInfoRequest; extern char * _PREHASH_ParcelInfoRequest; extern char * _PREHASH_ParcelObjectOwnersRequest; extern char * _PREHASH_TeleportLandmarkRequest; extern char * _PREHASH_EventInfoRequest; -extern char * _PREHASH_ChatFromSimulator; -extern char * _PREHASH_PickInfoRequest; extern char * _PREHASH_MoneyBalanceRequest; extern char * _PREHASH_GroupMembersRequest; extern char * _PREHASH_GroupRoleMembersRequest; +extern char * _PREHASH_ChatFromSimulator; extern char * _PREHASH_OldFolderID; extern char * _PREHASH_UserInfoRequest; extern char * _PREHASH_TextureID; extern char * _PREHASH_ProfileURL; extern char * _PREHASH_Handle; -extern char * _PREHASH_StartParcelRenameAck; extern char * _PREHASH_ButtonIndex; extern char * _PREHASH_GetScriptRunning; extern char * _PREHASH_SetScriptRunning; extern char * _PREHASH_Health; -extern char * _PREHASH_FileID; extern char * _PREHASH_CircuitInfo; extern char * _PREHASH_ObjectBuy; extern char * _PREHASH_ProfileEnd; @@ -862,7 +784,6 @@ extern char * _PREHASH_PingID; extern char * _PREHASH_Change; extern char * _PREHASH_Height; extern char * _PREHASH_Region; -extern char * _PREHASH_MoneyHistoryReply; extern char * _PREHASH_TelehubInfo; extern char * _PREHASH_StateSave; extern char * _PREHASH_RoleData; @@ -873,11 +794,10 @@ extern char * _PREHASH_ParcelGodMarkAsContent; extern char * _PREHASH_UsePhysics; extern char * _PREHASH_RegionDenyTransacted; extern char * _PREHASH_JointType; -extern char * _PREHASH_TaxEstimate; extern char * _PREHASH_ObjectTaxEstimate; extern char * _PREHASH_LightTaxEstimate; -extern char * _PREHASH_TeleportLandingStatusChanged; extern char * _PREHASH_LandTaxEstimate; +extern char * _PREHASH_TeleportLandingStatusChanged; extern char * _PREHASH_GroupTaxEstimate; extern char * _PREHASH_AvgViewerFPS; extern char * _PREHASH_Buttons; @@ -909,8 +829,6 @@ extern char * _PREHASH_WinnerID; extern char * _PREHASH_ChannelType; extern char * _PREHASH_NonExemptMembers; extern char * _PREHASH_Agents; -extern char * _PREHASH_SimulatorStart; -extern char * _PREHASH_Enable; extern char * _PREHASH_MemberData; extern char * _PREHASH_ToGroupID; extern char * _PREHASH_ImageNotInDatabase; @@ -918,27 +836,21 @@ extern char * _PREHASH_StartDate; extern char * _PREHASH_AnimID; extern char * _PREHASH_Serial; extern char * _PREHASH_AbuseRegionName; -extern char * _PREHASH_ControlPort; extern char * _PREHASH_ModifyLand; extern char * _PREHASH_Digest; extern char * _PREHASH_Victim; extern char * _PREHASH_Script; -extern char * _PREHASH_TemplateChecksumReply; extern char * _PREHASH_PickInfoReply; extern char * _PREHASH_MoneyBalanceReply; extern char * _PREHASH_RoutedMoneyBalanceReply; extern char * _PREHASH_RoleID; extern char * _PREHASH_RegionInfo; -extern char * _PREHASH_Sequence; extern char * _PREHASH_GodUpdateRegionInfo; -extern char * _PREHASH_LocalX; -extern char * _PREHASH_LocalY; extern char * _PREHASH_StartAnim; -extern char * _PREHASH_Location; extern char * _PREHASH_Action; +extern char * _PREHASH_Location; extern char * _PREHASH_Rights; extern char * _PREHASH_SearchDir; -extern char * _PREHASH_Active; extern char * _PREHASH_TransferRequest; extern char * _PREHASH_ScriptSensorRequest; extern char * _PREHASH_MoneyTransferRequest; @@ -949,8 +861,6 @@ extern char * _PREHASH_Center; extern char * _PREHASH_SharedData; extern char * _PREHASH_PSBlock; extern char * _PREHASH_UUIDNameBlock; -extern char * _PREHASH_Viewer; -extern char * _PREHASH_GroupNoticeDelete; extern char * _PREHASH_GroupTitleUpdate; extern char * _PREHASH_Method; extern char * _PREHASH_TouchName; @@ -962,11 +872,9 @@ extern char * _PREHASH_GodlikeMessage; extern char * _PREHASH_SystemMessage; extern char * _PREHASH_BodyRotation; extern char * _PREHASH_SearchRegions; -extern char * _PREHASH_Ignore; extern char * _PREHASH_AnimationData; extern char * _PREHASH_StatID; extern char * _PREHASH_ItemID; -extern char * _PREHASH_AvatarStatisticsReply; extern char * _PREHASH_ScriptDialogReply; extern char * _PREHASH_RegionIDAndHandleReply; extern char * _PREHASH_CameraAtOffset; @@ -991,7 +899,6 @@ extern char * _PREHASH_OldItemID; extern char * _PREHASH_RegionPort; extern char * _PREHASH_PriceEnergyUnit; extern char * _PREHASH_Bitmap; -extern char * _PREHASH_TrackAgentSession; extern char * _PREHASH_CacheMissType; extern char * _PREHASH_VFileID; extern char * _PREHASH_GroupInsigniaID; @@ -1039,7 +946,6 @@ extern char * _PREHASH_MeanCollisionAlert; extern char * _PREHASH_CanAcceptTasks; extern char * _PREHASH_ItemData; extern char * _PREHASH_AnimationList; -extern char * _PREHASH_PassObject; extern char * _PREHASH_Reputation; extern char * _PREHASH_IntValue; extern char * _PREHASH_TargetType; @@ -1062,10 +968,8 @@ extern char * _PREHASH_ParcelBuy; extern char * _PREHASH_DirFindQueryBackend; extern char * _PREHASH_DirPlacesQueryBackend; extern char * _PREHASH_DirClassifiedQueryBackend; -extern char * _PREHASH_DirPicksQueryBackend; extern char * _PREHASH_DirLandQueryBackend; extern char * _PREHASH_DirPopularQueryBackend; -extern char * _PREHASH_LogoutDemand; extern char * _PREHASH_HistoryData; extern char * _PREHASH_SnapshotID; extern char * _PREHASH_Aspect; @@ -1073,7 +977,6 @@ extern char * _PREHASH_ParamSize; extern char * _PREHASH_VoteCast; extern char * _PREHASH_CastsShadows; extern char * _PREHASH_EveryoneMask; -extern char * _PREHASH_SetSunPhase; extern char * _PREHASH_ObjectSpinUpdate; extern char * _PREHASH_MaturePublish; extern char * _PREHASH_UseExistingAsset; @@ -1082,7 +985,6 @@ extern char * _PREHASH_ParcelLocalID; extern char * _PREHASH_TeleportCancel; extern char * _PREHASH_UnixTime; extern char * _PREHASH_QueryFlags; -extern char * _PREHASH_LastExecFroze; extern char * _PREHASH_AlwaysRun; extern char * _PREHASH_Bottom; extern char * _PREHASH_ButtonData; @@ -1101,7 +1003,6 @@ extern char * _PREHASH_NVPairs; extern char * _PREHASH_GroupNoticesListRequest; extern char * _PREHASH_ParcelAccessListRequest; extern char * _PREHASH_MuteListRequest; -extern char * _PREHASH_StartPeriod; extern char * _PREHASH_RpcChannelRequest; extern char * _PREHASH_LandStatRequest; extern char * _PREHASH_PlacesQuery; @@ -1129,34 +1030,27 @@ extern char * _PREHASH_SnapSelection; extern char * _PREHASH_SoundTrigger; extern char * _PREHASH_TerrainRaiseLimit; extern char * _PREHASH_Quorum; -extern char * _PREHASH_TokenBlock; extern char * _PREHASH_AgentBlock; extern char * _PREHASH_CommandBlock; extern char * _PREHASH_PricePublicObjectDecay; extern char * _PREHASH_SpawnPointPos; -extern char * _PREHASH_AttachedSoundCutoffRadius; extern char * _PREHASH_VolumeDetail; extern char * _PREHASH_FromAgentName; extern char * _PREHASH_Range; extern char * _PREHASH_DirectoryVisibility; extern char * _PREHASH_PublicIP; extern char * _PREHASH_TeleportFailed; -extern char * _PREHASH_OnlineStatusReply; -extern char * _PREHASH_RequestAvatarInfo; extern char * _PREHASH_PreloadSound; extern char * _PREHASH_ScreenshotID; extern char * _PREHASH_CovenantTimestamp; extern char * _PREHASH_OldestUnacked; extern char * _PREHASH_SimulatorIP; -extern char * _PREHASH_ObjectImport; extern char * _PREHASH_Value; extern char * _PREHASH_JointAxisOrAnchor; extern char * _PREHASH_Test0; extern char * _PREHASH_Test1; extern char * _PREHASH_Test2; extern char * _PREHASH_SunPhase; -extern char * _PREHASH_Place; -extern char * _PREHASH_Phase; extern char * _PREHASH_ParcelDivide; extern char * _PREHASH_PriceObjectClaim; extern char * _PREHASH_Field; @@ -1166,7 +1060,6 @@ extern char * _PREHASH_LiveHelpGroupReply; extern char * _PREHASH_Score; extern char * _PREHASH_Image; extern char * _PREHASH_ObjectClickAction; -extern char * _PREHASH_Delta; extern char * _PREHASH_Parameter; extern char * _PREHASH_Flags; extern char * _PREHASH_Plane; @@ -1176,26 +1069,24 @@ extern char * _PREHASH_DirFindQuery; extern char * _PREHASH_Textures; extern char * _PREHASH_EventData; extern char * _PREHASH_Final; +extern char * _PREHASH_System; extern char * _PREHASH_TelehubPos; extern char * _PREHASH_ReportAutosaveCrash; extern char * _PREHASH_CreateTrustedCircuit; extern char * _PREHASH_DenyTrustedCircuit; extern char * _PREHASH_RequestTrustedCircuit; extern char * _PREHASH_Codec; -extern char * _PREHASH_Level; extern char * _PREHASH_Modal; extern char * _PREHASH_ChildAgentUnknown; extern char * _PREHASH_LandingType; extern char * _PREHASH_ScriptRunningReply; -extern char * _PREHASH_MoneyDetailsReply; extern char * _PREHASH_Reply; +extern char * _PREHASH_GroupAccountDetailsReply; extern char * _PREHASH_TelehubRot; -extern char * _PREHASH_RequestFriendship; extern char * _PREHASH_AcceptFriendship; -extern char * _PREHASH_GroupAccountDetailsReply; +extern char * _PREHASH_ItemType; extern char * _PREHASH_DwellInfo; extern char * _PREHASH_AgentResume; -extern char * _PREHASH_ItemType; extern char * _PREHASH_MailFilter; extern char * _PREHASH_Disconnect; extern char * _PREHASH_SimPosition; @@ -1222,7 +1113,6 @@ extern char * _PREHASH_VoteType; extern char * _PREHASH_CategoryID; extern char * _PREHASH_Token; extern char * _PREHASH_AggregatePerms; -extern char * _PREHASH_StartParcelRemoveAck; extern char * _PREHASH_ObjectSelect; extern char * _PREHASH_ForceObjectSelect; extern char * _PREHASH_Price; @@ -1251,7 +1141,6 @@ extern char * _PREHASH_Notes; extern char * _PREHASH_AvatarID; extern char * _PREHASH_FounderID; extern char * _PREHASH_EndPointID; -extern char * _PREHASH_StipendEstimate; extern char * _PREHASH_LocationLookAt; extern char * _PREHASH_Sound; extern char * _PREHASH_Cover; @@ -1271,12 +1160,12 @@ extern char * _PREHASH_ProfileHollow; extern char * _PREHASH_GroupRoleChanges; extern char * _PREHASH_Count; extern char * _PREHASH_South; -extern char * _PREHASH_Entry; extern char * _PREHASH_ObjectUpdateCompressed; extern char * _PREHASH_MuteFlags; extern char * _PREHASH_Group; extern char * _PREHASH_AgentPause; extern char * _PREHASH_LanguagesText; +extern char * _PREHASH_Error; extern char * _PREHASH_InternalScriptMail; extern char * _PREHASH_FindAgent; extern char * _PREHASH_AgentData; @@ -1285,7 +1174,6 @@ extern char * _PREHASH_AssetBlock; extern char * _PREHASH_AcceptNotices; extern char * _PREHASH_SetGroupAcceptNotices; extern char * _PREHASH_CloseCircuit; -extern char * _PREHASH_LogControl; extern char * _PREHASH_TeleportFinish; extern char * _PREHASH_PathRevolutions; extern char * _PREHASH_ClassifiedInfoReply; @@ -1302,7 +1190,6 @@ extern char * _PREHASH_DataHomeLocationRequest; extern char * _PREHASH_EventNotificationAddRequest; extern char * _PREHASH_ParcelDwellRequest; extern char * _PREHASH_EventLocationRequest; -extern char * _PREHASH_EndPeriod; extern char * _PREHASH_SetStartLocationRequest; extern char * _PREHASH_QueryStart; extern char * _PREHASH_EjectData; @@ -1315,7 +1202,6 @@ extern char * _PREHASH_ParcelRelease; extern char * _PREHASH_VFileType; extern char * _PREHASH_EjectGroupMemberReply; extern char * _PREHASH_ImageData; -extern char * _PREHASH_SpaceServerSimulatorTimeMessage; extern char * _PREHASH_SimulatorViewerTimeMessage; extern char * _PREHASH_Rotation; extern char * _PREHASH_Selection; @@ -1323,7 +1209,6 @@ extern char * _PREHASH_TransactionData; extern char * _PREHASH_OperationData; extern char * _PREHASH_ExpirationDate; extern char * _PREHASH_ParcelDeedToGroup; -extern char * _PREHASH_DirPicksReply; extern char * _PREHASH_AvatarPicksReply; extern char * _PREHASH_GroupTitlesReply; extern char * _PREHASH_AgentInfo; @@ -1334,8 +1219,8 @@ extern char * _PREHASH_PassPrice; extern char * _PREHASH_SourceID; extern char * _PREHASH_ChangeUserRights; extern char * _PREHASH_TeleportFlags; -extern char * _PREHASH_AssetData; extern char * _PREHASH_SlaveParcelData; +extern char * _PREHASH_AssetData; extern char * _PREHASH_MultipleObjectUpdate; extern char * _PREHASH_ObjectUpdate; extern char * _PREHASH_ImprovedTerseObjectUpdate; @@ -1351,7 +1236,6 @@ extern char * _PREHASH_TaskLocalID; extern char * _PREHASH_ClaimDate; extern char * _PREHASH_MergeParcel; extern char * _PREHASH_Priority; -extern char * _PREHASH_Building; extern char * _PREHASH_QueryText; extern char * _PREHASH_GroupNoticeAdd; extern char * _PREHASH_ReturnType; @@ -1361,7 +1245,6 @@ extern char * _PREHASH_HeaderData; extern char * _PREHASH_RequestMultipleObjects; extern char * _PREHASH_RetrieveInstantMessages; extern char * _PREHASH_OpenCircuit; -extern char * _PREHASH_SecureSessionID; extern char * _PREHASH_CrossedRegion; extern char * _PREHASH_DirGroupsReply; extern char * _PREHASH_AvatarGroupsReply; @@ -1372,18 +1255,14 @@ extern char * _PREHASH_Position; extern char * _PREHASH_ParentEstate; extern char * _PREHASH_EstateName; extern char * _PREHASH_MuteName; -extern char * _PREHASH_StartParcelRename; -extern char * _PREHASH_BulkParcelRename; extern char * _PREHASH_ParcelRename; extern char * _PREHASH_ViewerFilename; -extern char * _PREHASH_Positive; extern char * _PREHASH_UserReportInternal; extern char * _PREHASH_AvatarPropertiesRequest; extern char * _PREHASH_ParcelPropertiesRequest; extern char * _PREHASH_GroupProfileRequest; extern char * _PREHASH_AgentDataUpdateRequest; extern char * _PREHASH_PriceObjectScaleFactor; -extern char * _PREHASH_DirPicksQuery; extern char * _PREHASH_OpenEnrollment; extern char * _PREHASH_GroupData; extern char * _PREHASH_RequestGodlikePowers; @@ -1394,7 +1273,6 @@ extern char * _PREHASH_Controls; extern char * _PREHASH_FirstDetachAll; extern char * _PREHASH_EstateID; extern char * _PREHASH_ImprovedInstantMessage; -extern char * _PREHASH_AgentQuit; extern char * _PREHASH_CheckParcelSales; extern char * _PREHASH_ParcelSales; extern char * _PREHASH_CurrentInterval; @@ -1411,12 +1289,8 @@ extern char * _PREHASH_OwnerIDs; extern char * _PREHASH_SystemKickUser; extern char * _PREHASH_TransactionTime; extern char * _PREHASH_TimeToLive; -extern char * _PREHASH_StartParcelRemove; -extern char * _PREHASH_BulkParcelRemove; extern char * _PREHASH_OldAgentID; -extern char * _PREHASH_BonusEstimate; extern char * _PREHASH_MusicURL; -extern char * _PREHASH_CompleteLure; extern char * _PREHASH_ParcelPrimBonus; extern char * _PREHASH_EjectUser; extern char * _PREHASH_CoarseLocationUpdate; @@ -1449,10 +1323,6 @@ extern char * _PREHASH_ParcelProperties; extern char * _PREHASH_EstateOwnerID; extern char * _PREHASH_LogoutRequest; extern char * _PREHASH_AssetUploadRequest; -extern char * _PREHASH_ReputationIndividualRequest; -extern char * _PREHASH_MajorVersion; -extern char * _PREHASH_MinorVersion; -extern char * _PREHASH_SimulatorAssign; extern char * _PREHASH_TransactionType; extern char * _PREHASH_AvatarPropertiesUpdate; extern char * _PREHASH_ParcelPropertiesUpdate; @@ -1461,7 +1331,6 @@ extern char * _PREHASH_AbortXfer; extern char * _PREHASH_DeRezAck; extern char * _PREHASH_TakeControls; extern char * _PREHASH_DirLandReply; -extern char * _PREHASH_SpaceLocationTeleportReply; extern char * _PREHASH_MuteType; extern char * _PREHASH_IMViaEMail; extern char * _PREHASH_RentPrice; |