aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llmessage
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/llmessage')
-rw-r--r--linden/indra/llmessage/files.lst2
-rw-r--r--linden/indra/llmessage/llcircuit.h6
-rw-r--r--linden/indra/llmessage/llhost.cpp12
-rw-r--r--linden/indra/llmessage/llhost.h6
-rw-r--r--linden/indra/llmessage/llhttpclient.cpp3
-rw-r--r--linden/indra/llmessage/llhttpsender.cpp11
-rw-r--r--linden/indra/llmessage/llhttpsender.h3
-rw-r--r--linden/indra/llmessage/lliosocket.cpp14
-rw-r--r--linden/indra/llmessage/llmessage.vcproj13
-rw-r--r--linden/indra/llmessage/llmessage_vc8.vcproj12
-rw-r--r--linden/indra/llmessage/llmessagebuilder.h73
-rw-r--r--linden/indra/llmessage/llmessageconfig.cpp165
-rw-r--r--linden/indra/llmessage/llmessageconfig.h19
-rw-r--r--linden/indra/llmessage/llmessagereader.cpp28
-rw-r--r--linden/indra/llmessage/llmessagereader.h29
-rw-r--r--linden/indra/llmessage/llmessagetemplate.cpp32
-rw-r--r--linden/indra/llmessage/llmessagetemplate.h83
-rw-r--r--linden/indra/llmessage/llmessagetemplateparser.cpp754
-rw-r--r--linden/indra/llmessage/llmessagetemplateparser.h82
-rw-r--r--linden/indra/llmessage/llmsgvariabletype.h28
-rw-r--r--linden/indra/llmessage/llpacketack.cpp84
-rw-r--r--linden/indra/llmessage/llpacketack.h122
-rwxr-xr-xlinden/indra/llmessage/llsdmessagebuilder.cpp80
-rwxr-xr-xlinden/indra/llmessage/llsdmessagebuilder.h72
-rwxr-xr-xlinden/indra/llmessage/llsdmessagereader.cpp68
-rwxr-xr-xlinden/indra/llmessage/llsdmessagereader.h5
-rw-r--r--linden/indra/llmessage/lltemplatemessagebuilder.cpp329
-rw-r--r--linden/indra/llmessage/lltemplatemessagebuilder.h72
-rw-r--r--linden/indra/llmessage/lltemplatemessagereader.cpp151
-rw-r--r--linden/indra/llmessage/lltemplatemessagereader.h28
-rw-r--r--linden/indra/llmessage/lltransfermanager.cpp28
-rw-r--r--linden/indra/llmessage/lltransfermanager.h1
-rw-r--r--linden/indra/llmessage/message.cpp1612
-rw-r--r--linden/indra/llmessage/message.h76
-rw-r--r--linden/indra/llmessage/message_prehash.cpp338
-rw-r--r--linden/indra/llmessage/message_prehash.h169
36 files changed, 2346 insertions, 2264 deletions
diff --git a/linden/indra/llmessage/files.lst b/linden/indra/llmessage/files.lst
index 456dffe..00a22b0 100644
--- a/linden/indra/llmessage/files.lst
+++ b/linden/indra/llmessage/files.lst
@@ -27,10 +27,12 @@ llmessage/llmessagebuilder.cpp
27llmessage/llmessageconfig.cpp 27llmessage/llmessageconfig.cpp
28llmessage/llmessagereader.cpp 28llmessage/llmessagereader.cpp
29llmessage/llmessagetemplate.cpp 29llmessage/llmessagetemplate.cpp
30llmessage/llmessagetemplateparser.cpp
30llmessage/llmessagethrottle.cpp 31llmessage/llmessagethrottle.cpp
31llmessage/llmime.cpp 32llmessage/llmime.cpp
32llmessage/llnamevalue.cpp 33llmessage/llnamevalue.cpp
33llmessage/llnullcipher.cpp 34llmessage/llnullcipher.cpp
35llmessage/llpacketack.cpp
34llmessage/llpacketbuffer.cpp 36llmessage/llpacketbuffer.cpp
35llmessage/llpacketring.cpp 37llmessage/llpacketring.cpp
36llmessage/llpartdata.cpp 38llmessage/llpartdata.cpp
diff --git a/linden/indra/llmessage/llcircuit.h b/linden/indra/llmessage/llcircuit.h
index 1eea203..33c0e10 100644
--- a/linden/indra/llmessage/llcircuit.h
+++ b/linden/indra/llmessage/llcircuit.h
@@ -58,7 +58,11 @@ const F32 LL_AVERAGED_PING_MIN = 100; // msec // IW: increased to avoid ret
58const U32 INITIAL_PING_VALUE_MSEC = 1000; // initial value for the ping delay, or for ping delay for an unknown circuit 58const U32 INITIAL_PING_VALUE_MSEC = 1000; // initial value for the ping delay, or for ping delay for an unknown circuit
59 59
60const TPACKETID LL_MAX_OUT_PACKET_ID = 0x01000000; 60const TPACKETID LL_MAX_OUT_PACKET_ID = 0x01000000;
61const U8 LL_PACKET_ID_SIZE = 4; 61
62// 0 - flags
63// [1,4] - packetid
64// 5 - data offset (after message name)
65const U8 LL_PACKET_ID_SIZE = 6;
62 66
63const S32 LL_MAX_RESENT_PACKETS_PER_FRAME = 100; 67const S32 LL_MAX_RESENT_PACKETS_PER_FRAME = 100;
64const S32 LL_MAX_ACKED_PACKETS_PER_FRAME = 200; 68const S32 LL_MAX_ACKED_PACKETS_PER_FRAME = 200;
diff --git a/linden/indra/llmessage/llhost.cpp b/linden/indra/llmessage/llhost.cpp
index 50ef301..d57d52d 100644
--- a/linden/indra/llmessage/llhost.cpp
+++ b/linden/indra/llmessage/llhost.cpp
@@ -230,9 +230,9 @@ std::ostream& operator<< (std::ostream& os, const LLHost &hh)
230} 230}
231 231
232 232
233std::istream& operator>> (std::istream& is, LLHost &rh) 233//std::istream& operator>> (std::istream& is, LLHost &rh)
234{ 234//{
235 is >> rh.mIP; 235// is >> rh.mIP;
236 is >> rh.mPort; 236// is >> rh.mPort;
237 return is; 237// return is;
238} 238//}
diff --git a/linden/indra/llmessage/llhost.h b/linden/indra/llmessage/llhost.h
index 5b477e0..1d37639 100644
--- a/linden/indra/llmessage/llhost.h
+++ b/linden/indra/llmessage/llhost.h
@@ -103,7 +103,11 @@ public:
103 std::string getIPandPort() const; 103 std::string getIPandPort() const;
104 104
105 friend std::ostream& operator<< (std::ostream& os, const LLHost &hh); 105 friend std::ostream& operator<< (std::ostream& os, const LLHost &hh);
106 friend std::istream& operator>> (std::istream& is, LLHost &hh); 106
107 // This operator is not well defined. does it expect a
108 // "192.168.1.1:80" notation or "int int" format? Phoenix 2007-05-18
109 //friend std::istream& operator>> (std::istream& is, LLHost &hh);
110
107 friend bool operator==( const LLHost &lhs, const LLHost &rhs ); 111 friend bool operator==( const LLHost &lhs, const LLHost &rhs );
108 friend bool operator!=( const LLHost &lhs, const LLHost &rhs ); 112 friend bool operator!=( const LLHost &lhs, const LLHost &rhs );
109 friend bool operator<(const LLHost &lhs, const LLHost &rhs); 113 friend bool operator<(const LLHost &lhs, const LLHost &rhs);
diff --git a/linden/indra/llmessage/llhttpclient.cpp b/linden/indra/llmessage/llhttpclient.cpp
index a1f8e29..392dfd0 100644
--- a/linden/indra/llmessage/llhttpclient.cpp
+++ b/linden/indra/llmessage/llhttpclient.cpp
@@ -43,12 +43,9 @@
43#include <curl/curl.h> 43#include <curl/curl.h>
44 44
45const F32 HTTP_REQUEST_EXPIRY_SECS = 60.0f; 45const F32 HTTP_REQUEST_EXPIRY_SECS = 60.0f;
46
47static std::string gCABundle; 46static std::string gCABundle;
48 47
49 48
50
51
52LLHTTPClient::Responder::Responder() 49LLHTTPClient::Responder::Responder()
53 : mReferenceCount(0) 50 : mReferenceCount(0)
54{ 51{
diff --git a/linden/indra/llmessage/llhttpsender.cpp b/linden/indra/llmessage/llhttpsender.cpp
index f96e6d2..3796a52 100644
--- a/linden/indra/llmessage/llhttpsender.cpp
+++ b/linden/indra/llmessage/llhttpsender.cpp
@@ -40,6 +40,7 @@ namespace
40{ 40{
41 typedef std::map<LLHost, LLHTTPSender*> SenderMap; 41 typedef std::map<LLHost, LLHTTPSender*> SenderMap;
42 static SenderMap senderMap; 42 static SenderMap senderMap;
43 static LLHTTPSender* defaultSender = new LLHTTPSender();
43} 44}
44 45
45//virtual 46//virtual
@@ -69,11 +70,10 @@ void LLHTTPSender::setSender(const LLHost& host, LLHTTPSender* sender)
69//static 70//static
70const LLHTTPSender& LLHTTPSender::getSender(const LLHost& host) 71const LLHTTPSender& LLHTTPSender::getSender(const LLHost& host)
71{ 72{
72 static LLHTTPSender defaultSender;
73 SenderMap::const_iterator iter = senderMap.find(host); 73 SenderMap::const_iterator iter = senderMap.find(host);
74 if(iter == senderMap.end()) 74 if(iter == senderMap.end())
75 { 75 {
76 return defaultSender; 76 return *defaultSender;
77 } 77 }
78 return *(iter->second); 78 return *(iter->second);
79} 79}
@@ -88,3 +88,10 @@ void LLHTTPSender::clearSender(const LLHost& host)
88 senderMap.erase(iter); 88 senderMap.erase(iter);
89 } 89 }
90} 90}
91
92//static
93void LLHTTPSender::setDefaultSender(LLHTTPSender* sender)
94{
95 delete defaultSender;
96 defaultSender = sender;
97}
diff --git a/linden/indra/llmessage/llhttpsender.h b/linden/indra/llmessage/llhttpsender.h
index 650a0e9..5d8b028 100644
--- a/linden/indra/llmessage/llhttpsender.h
+++ b/linden/indra/llmessage/llhttpsender.h
@@ -53,6 +53,9 @@ class LLHTTPSender
53 53
54 /** @brief Clear sender for host. */ 54 /** @brief Clear sender for host. */
55 static void clearSender(const LLHost& host); 55 static void clearSender(const LLHost& host);
56
57 /** @brief Set default sender, takes ownership of sender. */
58 static void setDefaultSender(LLHTTPSender* sender);
56}; 59};
57 60
58#endif // LL_HTTP_SENDER_H 61#endif // LL_HTTP_SENDER_H
diff --git a/linden/indra/llmessage/lliosocket.cpp b/linden/indra/llmessage/lliosocket.cpp
index 8bc347c..fdb4a89 100644
--- a/linden/indra/llmessage/lliosocket.cpp
+++ b/linden/indra/llmessage/lliosocket.cpp
@@ -421,6 +421,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
421 PUMP_DEBUG; 421 PUMP_DEBUG;
422 apr_size_t len; 422 apr_size_t len;
423 bool done = false; 423 bool done = false;
424 apr_status_t status = APR_SUCCESS;
424 while(it != end) 425 while(it != end)
425 { 426 {
426 427
@@ -428,9 +429,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
428 if((*it).isOnChannel(channels.in())) 429 if((*it).isOnChannel(channels.in()))
429 { 430 {
430 PUMP_DEBUG; 431 PUMP_DEBUG;
431 // *FIX: check return code - sockets will fail (broken, etc.)
432 len = (apr_size_t)segment.size(); 432 len = (apr_size_t)segment.size();
433 apr_status_t status = apr_socket_send( 433 status = apr_socket_send(
434 mDestination->getSocket(), 434 mDestination->getSocket(),
435 (const char*)segment.data(), 435 (const char*)segment.data(),
436 &len); 436 &len);
@@ -438,12 +438,12 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
438 // completed immediately' error from apr_socket_send. In this 438 // completed immediately' error from apr_socket_send. In this
439 // case we break and the data will be sent the next time the chain 439 // case we break and the data will be sent the next time the chain
440 // is pumped. 440 // is pumped.
441#if LL_WINDOWS 441 if(APR_STATUS_IS_EAGAIN(status))
442 if (status == 730035) 442 {
443 ll_apr_warn_status(status);
443 break; 444 break;
444#else 445 }
445 (void) status; 446
446#endif
447 mLastWritten = segment.data() + len - 1; 447 mLastWritten = segment.data() + len - 1;
448 448
449 PUMP_DEBUG; 449 PUMP_DEBUG;
diff --git a/linden/indra/llmessage/llmessage.vcproj b/linden/indra/llmessage/llmessage.vcproj
index d3e0d89..bb404f0 100644
--- a/linden/indra/llmessage/llmessage.vcproj
+++ b/linden/indra/llmessage/llmessage.vcproj
@@ -240,6 +240,9 @@
240 RelativePath=".\llmessagetemplate.cpp"> 240 RelativePath=".\llmessagetemplate.cpp">
241 </File> 241 </File>
242 <File 242 <File
243 RelativePath=".\llmessagetemplateparser.cpp">
244 </File>
245 <File
243 RelativePath=".\llmessagethrottle.cpp"> 246 RelativePath=".\llmessagethrottle.cpp">
244 </File> 247 </File>
245 <File 248 <File
@@ -252,6 +255,9 @@
252 RelativePath=".\llnullcipher.cpp"> 255 RelativePath=".\llnullcipher.cpp">
253 </File> 256 </File>
254 <File 257 <File
258 RelativePath=".\llpacketack.cpp">
259 </File>
260 <File
255 RelativePath=".\llpacketbuffer.cpp"> 261 RelativePath=".\llpacketbuffer.cpp">
256 </File> 262 </File>
257 <File 263 <File
@@ -437,10 +443,10 @@
437 RelativePath=".\llhttpclient.h"> 443 RelativePath=".\llhttpclient.h">
438 </File> 444 </File>
439 <File 445 <File
440 RelativePath=".\llhttpsender.h"> 446 RelativePath=".\llhttpnode.h">
441 </File> 447 </File>
442 <File 448 <File
443 RelativePath=".\llhttpnode.h"> 449 RelativePath=".\llhttpsender.h">
444 </File> 450 </File>
445 <File 451 <File
446 RelativePath=".\llinstantmessage.h"> 452 RelativePath=".\llinstantmessage.h">
@@ -482,6 +488,9 @@
482 RelativePath=".\llmessagetemplate.h"> 488 RelativePath=".\llmessagetemplate.h">
483 </File> 489 </File>
484 <File 490 <File
491 RelativePath=".\llmessagetemplateparser.h">
492 </File>
493 <File
485 RelativePath=".\llmessagethrottle.h"> 494 RelativePath=".\llmessagethrottle.h">
486 </File> 495 </File>
487 <File 496 <File
diff --git a/linden/indra/llmessage/llmessage_vc8.vcproj b/linden/indra/llmessage/llmessage_vc8.vcproj
index 9692930..eec76e5 100644
--- a/linden/indra/llmessage/llmessage_vc8.vcproj
+++ b/linden/indra/llmessage/llmessage_vc8.vcproj
@@ -347,6 +347,10 @@
347 > 347 >
348 </File> 348 </File>
349 <File 349 <File
350 RelativePath=".\llmessagetemplateparser.cpp"
351 >
352 </File>
353 <File
350 RelativePath=".\llmessagethrottle.cpp" 354 RelativePath=".\llmessagethrottle.cpp"
351 > 355 >
352 </File> 356 </File>
@@ -363,6 +367,10 @@
363 > 367 >
364 </File> 368 </File>
365 <File 369 <File
370 RelativePath=".\llpacketack.cpp"
371 >
372 </File>
373 <File
366 RelativePath=".\llpacketbuffer.cpp" 374 RelativePath=".\llpacketbuffer.cpp"
367 > 375 >
368 </File> 376 </File>
@@ -677,6 +685,10 @@
677 > 685 >
678 </File> 686 </File>
679 <File 687 <File
688 RelativePath=".\llmessagetemplateparser.h"
689 >
690 </File>
691 <File
680 RelativePath=".\llmessagethrottle.h" 692 RelativePath=".\llmessagethrottle.h"
681 > 693 >
682 </File> 694 </File>
diff --git a/linden/indra/llmessage/llmessagebuilder.h b/linden/indra/llmessage/llmessagebuilder.h
index 7ae09c5..5c231bd 100644
--- a/linden/indra/llmessage/llmessagebuilder.h
+++ b/linden/indra/llmessage/llmessagebuilder.h
@@ -1,3 +1,31 @@
1/**
2 * @file llmessagebuilder.h
3 * @brief Declaration of LLMessageBuilder class.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#ifndef LL_LLMESSAGEBUILDER_H 29#ifndef LL_LLMESSAGEBUILDER_H
2#define LL_LLMESSAGEBUILDER_H 30#define LL_LLMESSAGEBUILDER_H
3 31
@@ -20,31 +48,33 @@ public:
20 //CLASS_LOG_TYPE(LLMessageBuilder); 48 //CLASS_LOG_TYPE(LLMessageBuilder);
21 49
22 virtual ~LLMessageBuilder(); 50 virtual ~LLMessageBuilder();
23 virtual void newMessage(const char *name) = 0; 51 virtual void newMessage(const char* name) = 0;
24 52
25 virtual void nextBlock(const char* blockname) = 0; 53 virtual void nextBlock(const char* blockname) = 0;
26 virtual BOOL removeLastBlock() = 0; // TODO: babbage: remove this horror 54 virtual BOOL removeLastBlock() = 0; // TODO: babbage: remove this horror
27 55
28 /** All add* methods expect pointers to canonical strings. */ 56 /** All add* methods expect pointers to canonical strings. */
29 virtual void addBinaryData(const char *varname, const void *data, 57 virtual void addBinaryData(
30 S32 size) = 0; 58 const char* varname,
59 const void* data,
60 S32 size) = 0;
31 virtual void addBOOL(const char* varname, BOOL b) = 0; 61 virtual void addBOOL(const char* varname, BOOL b) = 0;
32 virtual void addS8(const char *varname, S8 s) = 0; 62 virtual void addS8(const char* varname, S8 s) = 0;
33 virtual void addU8(const char *varname, U8 u) = 0; 63 virtual void addU8(const char* varname, U8 u) = 0;
34 virtual void addS16(const char *varname, S16 i) = 0; 64 virtual void addS16(const char* varname, S16 i) = 0;
35 virtual void addU16(const char *varname, U16 i) = 0; 65 virtual void addU16(const char* varname, U16 i) = 0;
36 virtual void addF32(const char *varname, F32 f) = 0; 66 virtual void addF32(const char* varname, F32 f) = 0;
37 virtual void addS32(const char *varname, S32 s) = 0; 67 virtual void addS32(const char* varname, S32 s) = 0;
38 virtual void addU32(const char *varname, U32 u) = 0; 68 virtual void addU32(const char* varname, U32 u) = 0;
39 virtual void addU64(const char *varname, U64 lu) = 0; 69 virtual void addU64(const char* varname, U64 lu) = 0;
40 virtual void addF64(const char *varname, F64 d) = 0; 70 virtual void addF64(const char* varname, F64 d) = 0;
41 virtual void addVector3(const char *varname, const LLVector3& vec) = 0; 71 virtual void addVector3(const char* varname, const LLVector3& vec) = 0;
42 virtual void addVector4(const char *varname, const LLVector4& vec) = 0; 72 virtual void addVector4(const char* varname, const LLVector4& vec) = 0;
43 virtual void addVector3d(const char *varname, const LLVector3d& vec) = 0; 73 virtual void addVector3d(const char* varname, const LLVector3d& vec) = 0;
44 virtual void addQuat(const char *varname, const LLQuaternion& quat) = 0; 74 virtual void addQuat(const char* varname, const LLQuaternion& quat) = 0;
45 virtual void addUUID(const char *varname, const LLUUID& uuid) = 0; 75 virtual void addUUID(const char* varname, const LLUUID& uuid) = 0;
46 virtual void addIPAddr(const char *varname, const U32 ip) = 0; 76 virtual void addIPAddr(const char* varname, const U32 ip) = 0;
47 virtual void addIPPort(const char *varname, const U16 port) = 0; 77 virtual void addIPPort(const char* varname, const U16 port) = 0;
48 virtual void addString(const char* varname, const char* s) = 0; 78 virtual void addString(const char* varname, const char* s) = 0;
49 virtual void addString(const char* varname, const std::string& s) = 0; 79 virtual void addString(const char* varname, const std::string& s) = 0;
50 80
@@ -54,7 +84,10 @@ public:
54 84
55 virtual BOOL isBuilt() const = 0; 85 virtual BOOL isBuilt() const = 0;
56 virtual BOOL isClear() const = 0; 86 virtual BOOL isClear() const = 0;
57 virtual U32 buildMessage(U8* buffer, U32 buffer_size) = 0; 87 virtual U32 buildMessage(
88 U8* buffer,
89 U32 buffer_size,
90 U8 offset_to_data) = 0;
58 /**< Return built message size */ 91 /**< Return built message size */
59 virtual void clearMessage() = 0; 92 virtual void clearMessage() = 0;
60 93
diff --git a/linden/indra/llmessage/llmessageconfig.cpp b/linden/indra/llmessage/llmessageconfig.cpp
index 687896b..8d114a9 100644
--- a/linden/indra/llmessage/llmessageconfig.cpp
+++ b/linden/indra/llmessage/llmessageconfig.cpp
@@ -32,37 +32,44 @@
32#include "llfile.h" 32#include "llfile.h"
33#include "lllivefile.h" 33#include "lllivefile.h"
34#include "llsd.h" 34#include "llsd.h"
35#include "llsdutil.h"
35#include "llsdserialize.h" 36#include "llsdserialize.h"
37#include "message.h"
36 38
37static const char messageConfigFileName[] = "message.xml"; 39static const char messageConfigFileName[] = "message.xml";
38static const F32 messageConfigRefreshRate = 5.0; // seconds 40static const F32 messageConfigRefreshRate = 5.0; // seconds
41
39static std::string sServerName = ""; 42static std::string sServerName = "";
40static std::string sConfigDir = ""; 43static std::string sConfigDir = "";
41 44
45static std::string sServerDefault;
46static LLSD sMessages;
47
48
42class LLMessageConfigFile : public LLLiveFile 49class LLMessageConfigFile : public LLLiveFile
43{ 50{
44private: 51public:
45 LLMessageConfigFile() 52 LLMessageConfigFile()
46 : LLLiveFile(fileName(), messageConfigRefreshRate), 53 : LLLiveFile(fileName(), messageConfigRefreshRate)
47 mChanged(false)
48 { } 54 { }
49 55
50 static std::string fileName(); 56 static std::string fileName();
51 57
52public: 58 LLSD mMessages;
59 std::string mServerDefault;
60
53 static LLMessageConfigFile& instance(); 61 static LLMessageConfigFile& instance();
54 // return the singleton configuration file 62 // return the singleton configuration file
55 63
56protected:
57 /* virtual */ void loadFile(); 64 /* virtual */ void loadFile();
58 void loadServerDefaults(const LLSD& data); 65 void loadServerDefaults(const LLSD& data);
59 void loadMessages(const LLSD& data); 66 void loadMessages(const LLSD& data);
67 void loadCapBans(const LLSD& blacklist);
68 void loadMessageBans(const LLSD& blacklist);
69 bool isCapBanned(const std::string& cap_name) const;
60 70
61public: 71public:
62 bool mChanged; 72 LLSD mCapBans;
63
64 std::string mServerDefault;
65 LLSD mMessages;
66}; 73};
67 74
68std::string LLMessageConfigFile::fileName() 75std::string LLMessageConfigFile::fileName()
@@ -102,26 +109,63 @@ void LLMessageConfigFile::loadFile()
102 } 109 }
103 loadServerDefaults(data); 110 loadServerDefaults(data);
104 loadMessages(data); 111 loadMessages(data);
112 loadCapBans(data);
113 loadMessageBans(data);
105} 114}
106 115
107void LLMessageConfigFile::loadServerDefaults(const LLSD& data) 116void LLMessageConfigFile::loadServerDefaults(const LLSD& data)
108{ 117{
109 mServerDefault = data["serverDefaults"][sServerName].asString(); 118 mServerDefault = data["serverDefaults"][sServerName].asString();
110 lldebugs << "loading default " << mServerDefault << llendl;
111} 119}
112 120
113void LLMessageConfigFile::loadMessages(const LLSD& data) 121void LLMessageConfigFile::loadMessages(const LLSD& data)
114{ 122{
115 LLPointer<LLSDXMLFormatter> formatter = new LLSDXMLFormatter;
116 std::ostringstream out;
117
118 mMessages = data["messages"]; 123 mMessages = data["messages"];
124
125#ifdef DEBUG
126 std::ostringstream out;
127 LLSDXMLFormatter *formatter = new LLSDXMLFormatter;
119 formatter->format(mMessages, out); 128 formatter->format(mMessages, out);
120 lldebugs << "loading ... " << out.str() 129 llinfos << "loading ... " << out.str()
121 << " LLMessageConfigFile::loadMessages loaded " 130 << " LLMessageConfigFile::loadMessages loaded "
122 << mMessages.size() << " messages" << llendl; 131 << mMessages.size() << " messages" << llendl;
132#endif
123} 133}
124 134
135void LLMessageConfigFile::loadCapBans(const LLSD& data)
136{
137 LLSD bans = data["capBans"];
138 if (!bans.isMap())
139 {
140 llinfos << "LLMessageConfigFile::loadCapBans: missing capBans section"
141 << llendl;
142 return;
143 }
144
145 mCapBans = bans;
146
147 llinfos << "LLMessageConfigFile::loadCapBans: "
148 << bans.size() << " ban tests" << llendl;
149}
150
151void LLMessageConfigFile::loadMessageBans(const LLSD& data)
152{
153 LLSD bans = data["messageBans"];
154 if (!bans.isMap())
155 {
156 llinfos << "LLMessageConfigFile::loadMessageBans: missing messageBans section"
157 << llendl;
158 return;
159 }
160
161 gMessageSystem->setMessageBans(bans["trusted"], bans["untrusted"]);
162}
163
164bool LLMessageConfigFile::isCapBanned(const std::string& cap_name) const
165{
166 llinfos << "mCapBans is " << LLSDXMLStreamer(mCapBans) << llendl;
167 return mCapBans[cap_name];
168}
125 169
126//--------------------------------------------------------------- 170//---------------------------------------------------------------
127// LLMessageConfig 171// LLMessageConfig
@@ -134,98 +178,77 @@ void LLMessageConfig::initClass(const std::string& server_name,
134 sServerName = server_name; 178 sServerName = server_name;
135 sConfigDir = config_dir; 179 sConfigDir = config_dir;
136 (void) LLMessageConfigFile::instance(); 180 (void) LLMessageConfigFile::instance();
137 llinfos << "LLMessageConfig::intiClass config file " 181 llinfos << "LLMessageConfig::initClass config file "
138 << config_dir << "/" << messageConfigFileName << llendl; 182 << config_dir << "/" << messageConfigFileName << llendl;
139} 183}
140 184
141//static 185//static
142bool LLMessageConfig::isServerDefaultBuilderLLSD() 186void LLMessageConfig::useConfig(const LLSD& config)
143{ 187{
144 if (sServerName.empty()) 188 LLMessageConfigFile &the_file = LLMessageConfigFile::instance();
145 { 189 the_file.loadServerDefaults(config);
146 llerrs << "LLMessageConfig::isServerDefaultBuilderLLSD() before" 190 the_file.loadMessages(config);
147 << " LLMessageConfig::initClass()" << llendl; 191 the_file.loadCapBans(config);
148 } 192 the_file.loadMessageBans(config);
149 LLMessageConfigFile& file = LLMessageConfigFile::instance();
150 return (file.mServerDefault == "llsd");
151}
152 193
153//static
154bool LLMessageConfig::isServerDefaultBuilderTemplate()
155{
156 if (sServerName.empty())
157 {
158 llerrs << "LLMessageConfig::isServerDefaultBuilderTemplate() before"
159 << " LLMessageConfig::initClass()" << llendl;
160 }
161 LLMessageConfigFile& file = LLMessageConfigFile::instance();
162 return (file.mServerDefault == "template");
163} 194}
164 195
165//static 196//static
166bool LLMessageConfig::isMessageBuiltLLSD(const std::string& msg_name) 197LLMessageConfig::Flavor LLMessageConfig::getServerDefaultFlavor()
167{ 198{
168 if (sServerName.empty()) 199 LLMessageConfigFile& file = LLMessageConfigFile::instance();
200 if (file.mServerDefault == "llsd")
169 { 201 {
170 llerrs << "LLMessageConfig::isMessageBuiltLLSD(name) before" 202 return LLSD_FLAVOR;
171 << " LLMessageConfig::initClass()" << llendl;
172 } 203 }
173 LLMessageConfigFile& file = LLMessageConfigFile::instance(); 204 if (file.mServerDefault == "template")
174 LLSD config = file.mMessages[msg_name];
175 if (!config.has("builder"))
176 { 205 {
177 return isServerDefaultBuilderLLSD(); 206 return TEMPLATE_FLAVOR;
178 } 207 }
179 return (config["builder"].asString() == "llsd"); 208 return NO_FLAVOR;
180} 209}
181 210
182//static 211//static
183bool LLMessageConfig::isMessageBuiltTemplate(const std::string& msg_name) 212LLMessageConfig::Flavor LLMessageConfig::getMessageFlavor(const std::string& msg_name)
184{ 213{
185 if (sServerName.empty())
186 {
187 llerrs << "LLMessageConfig::isMessageBuiltTemplate(name) before"
188 << " LLMessageConfig::initClass()" << llendl;
189 }
190 LLMessageConfigFile& file = LLMessageConfigFile::instance(); 214 LLMessageConfigFile& file = LLMessageConfigFile::instance();
191 LLSD config = file.mMessages[msg_name]; 215 LLSD config = file.mMessages[msg_name];
192 if (!config.has("builder")) 216 if (config["flavor"].asString() == "llsd")
193 { 217 {
194 return isServerDefaultBuilderTemplate(); 218 return LLSD_FLAVOR;
195 } 219 }
196 return (config["builder"].asString() == "template"); 220 if (config["flavor"].asString() == "template")
221 {
222 return TEMPLATE_FLAVOR;
223 }
224 return NO_FLAVOR;
197} 225}
198 226
199//static 227//static
200bool LLMessageConfig::isMessageTrusted(const std::string& msg_name) 228LLMessageConfig::SenderTrust LLMessageConfig::getSenderTrustedness(
229 const std::string& msg_name)
201{ 230{
202 if (sServerName.empty())
203 {
204 llerrs << "LLMessageConfig::isMessageTrusted(name) before"
205 << " LLMessageConfig::initClass()" << llendl;
206 }
207 LLMessageConfigFile& file = LLMessageConfigFile::instance(); 231 LLMessageConfigFile& file = LLMessageConfigFile::instance();
208 LLSD config = file.mMessages[msg_name]; 232 LLSD config = file.mMessages[msg_name];
209 if (!config.has("trusted-sender")) 233 if (config.has("trusted-sender"))
210 { 234 {
211 return false; 235 return config["trusted-sender"].asBoolean() ? TRUSTED : UNTRUSTED;
212 } 236 }
213 return config["trusted-sender"].asBoolean(); 237 return NOT_SET;
214} 238}
215 239
216//static 240//static
217bool LLMessageConfig::isValidUntrustedMessage(const std::string& msg_name) 241bool LLMessageConfig::isValidMessage(const std::string& msg_name)
218{ 242{
219 if (sServerName.empty()) 243 if (sServerName.empty())
220 { 244 {
221 llerrs << "LLMessageConfig::isMessageTrusted(name) before" 245 llerrs << "LLMessageConfig::initClass() not called" << llendl;
222 << " LLMessageConfig::initClass()" << llendl;
223 } 246 }
224 LLMessageConfigFile& file = LLMessageConfigFile::instance(); 247 LLMessageConfigFile& file = LLMessageConfigFile::instance();
225 LLSD config = file.mMessages[msg_name]; 248 return file.mMessages.has(msg_name);
226 if (!config.has("trusted-sender")) 249}
227 { 250
228 return false; 251bool LLMessageConfig::isCapBanned(const std::string& cap_name)
229 } 252{
230 return !(config["trusted-sender"].asBoolean()); 253 return LLMessageConfigFile::instance().isCapBanned(cap_name);
231} 254}
diff --git a/linden/indra/llmessage/llmessageconfig.h b/linden/indra/llmessage/llmessageconfig.h
index 1664ce6..ca09c27 100644
--- a/linden/indra/llmessage/llmessageconfig.h
+++ b/linden/indra/llmessage/llmessageconfig.h
@@ -31,21 +31,24 @@
31 31
32#include <string> 32#include <string>
33 33
34class LLSD;
35
34class LLMessageConfig 36class LLMessageConfig
35{ 37{
36public: 38public:
39 enum Flavor { NO_FLAVOR=0, LLSD_FLAVOR=1, TEMPLATE_FLAVOR=2 };
40 enum SenderTrust { NOT_SET=0, UNTRUSTED=1, TRUSTED=2 };
41
37 static void initClass(const std::string& server_name, 42 static void initClass(const std::string& server_name,
38 const std::string& config_dir); 43 const std::string& config_dir);
39 // force loading of config file during startup process 44 static void useConfig(const LLSD& config);
40 // so it can be used for startup features
41 45
42 static bool isServerDefaultBuilderLLSD(); 46 static Flavor getServerDefaultFlavor();
43 static bool isServerDefaultBuilderTemplate();
44 47
45 // For individual messages 48 // For individual messages
46 static bool isMessageBuiltLLSD(const std::string& msg_name); 49 static Flavor getMessageFlavor(const std::string& msg_name);
47 static bool isMessageBuiltTemplate(const std::string& msg_name); 50 static SenderTrust getSenderTrustedness(const std::string& msg_name);
48 static bool isMessageTrusted(const std::string& msg_name); 51 static bool isValidMessage(const std::string& msg_name);
49 static bool isValidUntrustedMessage(const std::string& msg_name); 52 static bool isCapBanned(const std::string& cap_name);
50}; 53};
51#endif // LL_MESSAGECONFIG_H 54#endif // LL_MESSAGECONFIG_H
diff --git a/linden/indra/llmessage/llmessagereader.cpp b/linden/indra/llmessage/llmessagereader.cpp
index 4824480..db4cbdf 100644
--- a/linden/indra/llmessage/llmessagereader.cpp
+++ b/linden/indra/llmessage/llmessagereader.cpp
@@ -1,3 +1,31 @@
1/**
2 * @file llsdmessagereader.cpp
3 * @brief LLMessageReader class implementation
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#include "llmessagereader.h" 29#include "llmessagereader.h"
2 30
3static BOOL sTimeDecodes = FALSE; 31static BOOL sTimeDecodes = FALSE;
diff --git a/linden/indra/llmessage/llmessagereader.h b/linden/indra/llmessage/llmessagereader.h
index 33ce928..9c1923a 100644
--- a/linden/indra/llmessage/llmessagereader.h
+++ b/linden/indra/llmessage/llmessagereader.h
@@ -1,3 +1,31 @@
1/**
2 * @file llmessagereader.h
3 * @brief Declaration of LLMessageReader class.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#ifndef LL_LLMESSAGEREADER_H 29#ifndef LL_LLMESSAGEREADER_H
2#define LL_LLMESSAGEREADER_H 30#define LL_LLMESSAGEREADER_H
3 31
@@ -45,6 +73,7 @@ class LLMessageReader
45 73
46 virtual void clearMessage() = 0; 74 virtual void clearMessage() = 0;
47 75
76 /** Returns pointer to canonical (prehashed) string. */
48 virtual const char* getMessageName() const = 0; 77 virtual const char* getMessageName() const = 0;
49 virtual S32 getMessageSize() const = 0; 78 virtual S32 getMessageSize() const = 0;
50 79
diff --git a/linden/indra/llmessage/llmessagetemplate.cpp b/linden/indra/llmessage/llmessagetemplate.cpp
index 026843d..daf7f7a 100644
--- a/linden/indra/llmessage/llmessagetemplate.cpp
+++ b/linden/indra/llmessage/llmessagetemplate.cpp
@@ -1,3 +1,31 @@
1/**
2 * @file llmessagetemplate.cpp
3 * @brief Implementation of message template classes.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#include "linden_common.h" 29#include "linden_common.h"
2 30
3#include "llmessagetemplate.h" 31#include "llmessagetemplate.h"
@@ -94,7 +122,7 @@ std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg)
94 for (LLMessageBlock::message_variable_map_t::iterator iter = msg.mMemberVariables.begin(); 122 for (LLMessageBlock::message_variable_map_t::iterator iter = msg.mMemberVariables.begin();
95 iter != msg.mMemberVariables.end(); iter++) 123 iter != msg.mMemberVariables.end(); iter++)
96 { 124 {
97 LLMessageVariable& ci = *(iter->second); 125 LLMessageVariable& ci = *(*iter);
98 s << ci; 126 s << ci;
99 } 127 }
100 128
@@ -138,7 +166,7 @@ std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg)
138 for (LLMessageTemplate::message_block_map_t::iterator iter = msg.mMemberBlocks.begin(); 166 for (LLMessageTemplate::message_block_map_t::iterator iter = msg.mMemberBlocks.begin();
139 iter != msg.mMemberBlocks.end(); iter++) 167 iter != msg.mMemberBlocks.end(); iter++)
140 { 168 {
141 LLMessageBlock* ci = iter->second; 169 LLMessageBlock* ci = *iter;
142 s << *ci; 170 s << *ci;
143 } 171 }
144 172
diff --git a/linden/indra/llmessage/llmessagetemplate.h b/linden/indra/llmessage/llmessagetemplate.h
index 8847ddc..804c343 100644
--- a/linden/indra/llmessage/llmessagetemplate.h
+++ b/linden/indra/llmessage/llmessagetemplate.h
@@ -1,3 +1,31 @@
1/**
2 * @file llmessagetemplate.h
3 * @brief Declaration of the message template classes.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#ifndef LL_LLMESSAGETEMPLATE_H 29#ifndef LL_LLMESSAGETEMPLATE_H
2#define LL_LLMESSAGETEMPLATE_H 30#define LL_LLMESSAGETEMPLATE_H
3 31
@@ -123,7 +151,7 @@ public:
123 mName = name; 151 mName = name;
124 } 152 }
125 153
126 LLMessageVariable(char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size) 154 LLMessageVariable(const char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size)
127 { 155 {
128 mName = gMessageStringTable.getString(name); 156 mName = gMessageStringTable.getString(name);
129 } 157 }
@@ -154,14 +182,14 @@ typedef enum e_message_block_type
154class LLMessageBlock 182class LLMessageBlock
155{ 183{
156public: 184public:
157 LLMessageBlock(char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0) 185 LLMessageBlock(const char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0)
158 { 186 {
159 mName = gMessageStringTable.getString(name); 187 mName = gMessageStringTable.getString(name);
160 } 188 }
161 189
162 ~LLMessageBlock() 190 ~LLMessageBlock()
163 { 191 {
164 for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePairedPointer()); 192 for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePointer());
165 } 193 }
166 194
167 void addVariable(char *name, const EMsgVariableType type, const S32 size) 195 void addVariable(char *name, const EMsgVariableType type, const S32 size)
@@ -193,9 +221,15 @@ public:
193 return (mMemberVariables[name])->getSize(); 221 return (mMemberVariables[name])->getSize();
194 } 222 }
195 223
224 const LLMessageVariable* getVariable(char* name) const
225 {
226 message_variable_map_t::const_iterator iter = mMemberVariables.find(name);
227 return iter != mMemberVariables.end()? *iter : NULL;
228 }
229
196 friend std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg); 230 friend std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg);
197 231
198 typedef std::map<const char *, LLMessageVariable*> message_variable_map_t; 232 typedef LLDynamicArrayIndexed<LLMessageVariable*, const char *, 8> message_variable_map_t;
199 message_variable_map_t mMemberVariables; 233 message_variable_map_t mMemberVariables;
200 char *mName; 234 char *mName;
201 EMsgBlockType mType; 235 EMsgBlockType mType;
@@ -224,6 +258,13 @@ enum EMsgEncoding
224 ME_ZEROCODED 258 ME_ZEROCODED
225}; 259};
226 260
261enum EMsgDeprecation
262{
263 MD_NOTDEPRECATED,
264 MD_UDPDEPRECATED,
265 MD_DEPRECATED
266};
267
227class LLMessageTemplate 268class LLMessageTemplate
228{ 269{
229public: 270public:
@@ -234,7 +275,8 @@ public:
234 mFrequency(freq), 275 mFrequency(freq),
235 mTrust(MT_NOTRUST), 276 mTrust(MT_NOTRUST),
236 mEncoding(ME_ZEROCODED), 277 mEncoding(ME_ZEROCODED),
237 mMessageNumber(message_number), 278 mDeprecation(MD_NOTDEPRECATED),
279 mMessageNumber(message_number),
238 mTotalSize(0), 280 mTotalSize(0),
239 mReceiveCount(0), 281 mReceiveCount(0),
240 mReceiveBytes(0), 282 mReceiveBytes(0),
@@ -253,8 +295,8 @@ public:
253 295
254 ~LLMessageTemplate() 296 ~LLMessageTemplate()
255 { 297 {
256 for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePairedPointer()); 298 for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePointer());
257 } 299}
258 300
259 void addBlock(LLMessageBlock *blockp) 301 void addBlock(LLMessageBlock *blockp)
260 { 302 {
@@ -289,7 +331,7 @@ public:
289 mTrust = t; 331 mTrust = t;
290 } 332 }
291 333
292 EMsgTrust getTrust(void) 334 EMsgTrust getTrust(void) const
293 { 335 {
294 return mTrust; 336 return mTrust;
295 } 337 }
@@ -299,18 +341,28 @@ public:
299 { 341 {
300 mEncoding = e; 342 mEncoding = e;
301 } 343 }
302 EMsgEncoding getEncoding() 344 EMsgEncoding getEncoding() const
303 { 345 {
304 return mEncoding; 346 return mEncoding;
305 } 347 }
306 348
349 void setDeprecation(EMsgDeprecation d)
350 {
351 mDeprecation = d;
352 }
353
354 EMsgDeprecation getDeprecation() const
355 {
356 return mDeprecation;
357 }
358
307 void setHandlerFunc(void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data) 359 void setHandlerFunc(void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data)
308 { 360 {
309 mHandlerFunc = handler_func; 361 mHandlerFunc = handler_func;
310 mUserData = user_data; 362 mUserData = user_data;
311 } 363 }
312 364
313 BOOL callHandlerFunc(LLMessageSystem *msgsystem) 365 BOOL callHandlerFunc(LLMessageSystem *msgsystem) const
314 { 366 {
315 if (mHandlerFunc) 367 if (mHandlerFunc)
316 { 368 {
@@ -320,20 +372,27 @@ public:
320 return FALSE; 372 return FALSE;
321 } 373 }
322 374
323 bool isBanned(bool trustedSource) 375 bool isBanned(bool trustedSource) const
324 { 376 {
325 return trustedSource ? mBanFromTrusted : mBanFromUntrusted; 377 return trustedSource ? mBanFromTrusted : mBanFromUntrusted;
326 } 378 }
327 379
328 friend std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg); 380 friend std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg);
329 381
382 const LLMessageBlock* getBlock(char* name) const
383 {
384 message_block_map_t::const_iterator iter = mMemberBlocks.find(name);
385 return iter != mMemberBlocks.end()? *iter : NULL;
386 }
387
330public: 388public:
331 typedef std::map<char*, LLMessageBlock*> message_block_map_t; 389 typedef LLDynamicArrayIndexed<LLMessageBlock*, char*, 8> message_block_map_t;
332 message_block_map_t mMemberBlocks; 390 message_block_map_t mMemberBlocks;
333 char *mName; 391 char *mName;
334 EMsgFrequency mFrequency; 392 EMsgFrequency mFrequency;
335 EMsgTrust mTrust; 393 EMsgTrust mTrust;
336 EMsgEncoding mEncoding; 394 EMsgEncoding mEncoding;
395 EMsgDeprecation mDeprecation;
337 U32 mMessageNumber; 396 U32 mMessageNumber;
338 S32 mTotalSize; 397 S32 mTotalSize;
339 U32 mReceiveCount; // how many of this template have been received since last reset 398 U32 mReceiveCount; // how many of this template have been received since last reset
diff --git a/linden/indra/llmessage/llmessagetemplateparser.cpp b/linden/indra/llmessage/llmessagetemplateparser.cpp
new file mode 100644
index 0000000..eb5e87e
--- /dev/null
+++ b/linden/indra/llmessage/llmessagetemplateparser.cpp
@@ -0,0 +1,754 @@
1/**
2 * @file llmessagetemplateparser.cpp
3 * @brief LLMessageTemplateParser implementation
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#include "llmessagetemplateparser.h"
30#include <boost/tokenizer.hpp>
31
32
33// What follows is a bunch of C functions to do validation.
34
35// Lets support a small subset of regular expressions here
36// Syntax is a string made up of:
37// a - checks against alphanumeric ([A-Za-z0-9])
38// c - checks against character ([A-Za-z])
39// f - checks against first variable character ([A-Za-z_])
40// v - checks against variable ([A-Za-z0-9_])
41// s - checks against sign of integer ([-0-9])
42// d - checks against integer digit ([0-9])
43// * - repeat last check
44
45// checks 'a'
46BOOL b_return_alphanumeric_ok(char c)
47{
48 if ( ( (c < 'A')
49 ||(c > 'Z'))
50 &&( (c < 'a')
51 ||(c > 'z'))
52 &&( (c < '0')
53 ||(c > '9')))
54 {
55 return FALSE;
56 }
57 return TRUE;
58}
59
60// checks 'c'
61BOOL b_return_character_ok(char c)
62{
63 if ( ( (c < 'A')
64 ||(c > 'Z'))
65 &&( (c < 'a')
66 ||(c > 'z')))
67 {
68 return FALSE;
69 }
70 return TRUE;
71}
72
73// checks 'f'
74BOOL b_return_first_variable_ok(char c)
75{
76 if ( ( (c < 'A')
77 ||(c > 'Z'))
78 &&( (c < 'a')
79 ||(c > 'z'))
80 &&(c != '_'))
81 {
82 return FALSE;
83 }
84 return TRUE;
85}
86
87// checks 'v'
88BOOL b_return_variable_ok(char c)
89{
90 if ( ( (c < 'A')
91 ||(c > 'Z'))
92 &&( (c < 'a')
93 ||(c > 'z'))
94 &&( (c < '0')
95 ||(c > '9'))
96 &&(c != '_'))
97 {
98 return FALSE;
99 }
100 return TRUE;
101}
102
103// checks 's'
104BOOL b_return_signed_integer_ok(char c)
105{
106 if ( ( (c < '0')
107 ||(c > '9'))
108 &&(c != '-'))
109 {
110 return FALSE;
111 }
112 return TRUE;
113}
114
115// checks 'd'
116BOOL b_return_integer_ok(char c)
117{
118 if ( (c < '0')
119 ||(c > '9'))
120 {
121 return FALSE;
122 }
123 return TRUE;
124}
125
126BOOL (*gParseCheckCharacters[])(char c) =
127{
128 b_return_alphanumeric_ok,
129 b_return_character_ok,
130 b_return_first_variable_ok,
131 b_return_variable_ok,
132 b_return_signed_integer_ok,
133 b_return_integer_ok
134};
135
136S32 get_checker_number(char checker)
137{
138 switch(checker)
139 {
140 case 'a':
141 return 0;
142 case 'c':
143 return 1;
144 case 'f':
145 return 2;
146 case 'v':
147 return 3;
148 case 's':
149 return 4;
150 case 'd':
151 return 5;
152 case '*':
153 return 9999;
154 default:
155 return -1;
156 }
157}
158
159// check token based on passed simplified regular expression
160BOOL b_check_token(const char *token, char *regexp)
161{
162 S32 tptr, rptr = 0;
163 S32 current_checker, next_checker = 0;
164
165 current_checker = get_checker_number(regexp[rptr++]);
166
167 if (current_checker == -1)
168 {
169 llerrs << "Invalid regular expression value!" << llendl;
170 return FALSE;
171 }
172
173 if (current_checker == 9999)
174 {
175 llerrs << "Regular expression can't start with *!" << llendl;
176 return FALSE;
177 }
178
179 for (tptr = 0; token[tptr]; tptr++)
180 {
181 if (current_checker == -1)
182 {
183 llerrs << "Input exceeds regular expression!\nDid you forget a *?" << llendl;
184 return FALSE;
185 }
186
187 if (!gParseCheckCharacters[current_checker](token[tptr]))
188 {
189 return FALSE;
190 }
191 if (next_checker != 9999)
192 {
193 next_checker = get_checker_number(regexp[rptr++]);
194 if (next_checker != 9999)
195 {
196 current_checker = next_checker;
197 }
198 }
199 }
200 return TRUE;
201}
202
203// C variable can be made up of upper or lower case letters, underscores, or numbers, but can't start with a number
204BOOL b_variable_ok(const char *token)
205{
206 if (!b_check_token(token, "fv*"))
207 {
208 llwarns << "Token '" << token << "' isn't a variable!" << llendl;
209 return FALSE;
210 }
211 return TRUE;
212}
213
214// An integer is made up of the digits 0-9 and may be preceded by a '-'
215BOOL b_integer_ok(const char *token)
216{
217 if (!b_check_token(token, "sd*"))
218 {
219 llwarns << "Token isn't an integer!" << llendl;
220 return FALSE;
221 }
222 return TRUE;
223}
224
225// An integer is made up of the digits 0-9
226BOOL b_positive_integer_ok(const char *token)
227{
228 if (!b_check_token(token, "d*"))
229 {
230 llwarns << "Token isn't an integer!" << llendl;
231 return FALSE;
232 }
233 return TRUE;
234}
235
236
237// Done with C functions, here's the tokenizer.
238
239typedef boost::tokenizer< boost::char_separator<char> > tokenizer;
240
241LLTemplateTokenizer::LLTemplateTokenizer(const std::string & contents) : mStarted(false), mTokens()
242{
243 boost::char_separator<char> newline("\r\n", "", boost::keep_empty_tokens);
244 boost::char_separator<char> spaces(" \t");
245 U32 line_counter = 1;
246
247 tokenizer line_tokens(contents, newline);
248 for(tokenizer::iterator line_iter = line_tokens.begin();
249 line_iter != line_tokens.end();
250 ++line_iter, ++line_counter)
251 {
252 tokenizer word_tokens(*line_iter, spaces);
253 for(tokenizer::iterator word_iter = word_tokens.begin();
254 word_iter != word_tokens.end();
255 ++word_iter)
256 {
257 if((*word_iter)[0] == '/')
258 {
259 break; // skip to end of line on comments
260 }
261 positioned_token pt;// = new positioned_token();
262 pt.str = std::string(*word_iter);
263 pt.line = line_counter;
264 mTokens.push_back(pt);
265 }
266 }
267 mCurrent = mTokens.begin();
268}
269void LLTemplateTokenizer::inc()
270{
271 if(atEOF())
272 {
273 error("trying to increment token of EOF");
274 }
275 else if(mStarted)
276 {
277 ++mCurrent;
278 }
279 else
280 {
281 mStarted = true;
282 mCurrent = mTokens.begin();
283 }
284}
285void LLTemplateTokenizer::dec()
286{
287 if(mCurrent == mTokens.begin())
288 {
289 if(mStarted)
290 {
291 mStarted = false;
292 }
293 else
294 {
295 error("trying to decrement past beginning of file");
296 }
297 }
298 else
299 {
300 mCurrent--;
301 }
302}
303
304std::string LLTemplateTokenizer::get() const
305{
306 if(atEOF())
307 {
308 error("trying to get EOF");
309 }
310 return mCurrent->str;
311}
312
313U32 LLTemplateTokenizer::line() const
314{
315 if(atEOF())
316 {
317 return 0;
318 }
319 return mCurrent->line;
320}
321
322bool LLTemplateTokenizer::atEOF() const
323{
324 return mCurrent == mTokens.end();
325}
326
327std::string LLTemplateTokenizer::next()
328{
329 inc();
330 return get();
331}
332
333bool LLTemplateTokenizer::want(const std::string & token)
334{
335 if(atEOF()) return false;
336 inc();
337 if(atEOF()) return false;
338 if(get() != token)
339 {
340 dec(); // back up a step
341 return false;
342 }
343 return true;
344}
345
346bool LLTemplateTokenizer::wantEOF()
347{
348 // see if the next token is EOF
349 if(atEOF()) return true;
350 inc();
351 if(!atEOF())
352 {
353 dec(); // back up a step
354 return false;
355 }
356 return true;
357}
358
359void LLTemplateTokenizer::error(std::string message) const
360{
361 if(atEOF())
362 {
363 llerrs << "Unexpected end of file: " << message << llendl;
364 }
365 else
366 {
367 llerrs << "Problem parsing message template at line "
368 << line() << ", with token '" << get() << "' : "
369 << message << llendl;
370 }
371}
372
373
374// Done with tokenizer, next is the parser.
375
376LLTemplateParser::LLTemplateParser(LLTemplateTokenizer & tokens):
377 mVersion(0.f),
378 mMessages()
379{
380 // the version number should be the first thing in the file
381 if (tokens.want("version"))
382 {
383 // version number
384 std::string vers_string = tokens.next();
385 mVersion = (F32)atof(vers_string.c_str());
386
387 llinfos << "### Message template version " << mVersion << " ###" << llendl;
388 }
389 else
390 {
391 llerrs << "Version must be first in the message template, found "
392 << tokens.next() << llendl;
393 }
394
395 while(LLMessageTemplate * templatep = parseMessage(tokens))
396 {
397 if (templatep->getDeprecation() != MD_DEPRECATED)
398 {
399 mMessages.push_back(templatep);
400 }
401 }
402
403 if(!tokens.wantEOF())
404 {
405 llerrs << "Expected end of template or a message, instead found: "
406 << tokens.next() << " at " << tokens.line() << llendl;
407 }
408}
409
410F32 LLTemplateParser::getVersion() const
411{
412 return mVersion;
413}
414
415LLTemplateParser::message_iterator LLTemplateParser::getMessagesBegin() const
416{
417 return mMessages.begin();
418}
419
420LLTemplateParser::message_iterator LLTemplateParser::getMessagesEnd() const
421{
422 return mMessages.end();
423}
424
425
426// static
427LLMessageTemplate * LLTemplateParser::parseMessage(LLTemplateTokenizer & tokens)
428{
429 LLMessageTemplate *templatep = NULL;
430 if(!tokens.want("{"))
431 {
432 return NULL;
433 }
434
435 // name first
436 std::string template_name = tokens.next();
437
438 // is name a legit C variable name
439 if (!b_variable_ok(template_name.c_str()))
440 {
441 llerrs << "Not legit variable name: " << template_name << " at " << tokens.line() << llendl;
442 }
443
444 // ok, now get Frequency ("High", "Medium", or "Low")
445 EMsgFrequency frequency = MFT_LOW;
446 std::string freq_string = tokens.next();
447 if (freq_string == "High")
448 {
449 frequency = MFT_HIGH;
450 }
451 else if (freq_string == "Medium")
452 {
453 frequency = MFT_MEDIUM;
454 }
455 else if (freq_string == "Low" || freq_string == "Fixed")
456 {
457 frequency = MFT_LOW;
458 }
459 else
460 {
461 llerrs << "Expected frequency, got " << freq_string << " at " << tokens.line() << llendl;
462 }
463
464 // TODO more explicit checking here pls
465 U32 message_number = strtoul(tokens.next().c_str(),NULL,0);
466
467 switch (frequency) {
468 case MFT_HIGH:
469 break;
470 case MFT_MEDIUM:
471 message_number = (255 << 8) | message_number;
472 break;
473 case MFT_LOW:
474 message_number = (255 << 24) | (255 << 16) | message_number;
475 break;
476 default:
477 llerrs << "Unknown frequency enum: " << frequency << llendl;
478 }
479
480 templatep = new LLMessageTemplate(
481 template_name.c_str(),
482 message_number,
483 frequency);
484
485 // Now get trust ("Trusted", "NotTrusted")
486 std::string trust = tokens.next();
487 if (trust == "Trusted")
488 {
489 templatep->setTrust(MT_TRUST);
490 }
491 else if (trust == "NotTrusted")
492 {
493 templatep->setTrust(MT_NOTRUST);
494 }
495 else
496 {
497 llerrs << "Bad trust " << trust << " at " << tokens.line() << llendl;
498 }
499
500 // get encoding
501 std::string encoding = tokens.next();
502 if(encoding == "Unencoded")
503 {
504 templatep->setEncoding(ME_UNENCODED);
505 }
506 else if(encoding == "Zerocoded")
507 {
508 templatep->setEncoding(ME_ZEROCODED);
509 }
510 else
511 {
512 llerrs << "Bad encoding " << encoding << " at " << tokens.line() << llendl;
513 }
514
515 // get deprecation
516 if(tokens.want("Deprecated"))
517 {
518 templatep->setDeprecation(MD_DEPRECATED);
519 }
520 else if (tokens.want("UDPDeprecated"))
521 {
522 templatep->setDeprecation(MD_UDPDEPRECATED);
523 }
524 else if (tokens.want("NotDeprecated"))
525 {
526 // this is the default value, but it can't hurt to set it twice
527 templatep->setDeprecation(MD_NOTDEPRECATED);
528 }
529 else {
530 // It's probably a brace, let's just start block processing
531 }
532
533 while(LLMessageBlock * blockp = parseBlock(tokens))
534 {
535 templatep->addBlock(blockp);
536 }
537
538 if(!tokens.want("}"))
539 {
540 llerrs << "Expecting closing } for message " << template_name
541 << " at " << tokens.line() << llendl;
542 }
543 return templatep;
544}
545
546// static
547LLMessageBlock * LLTemplateParser::parseBlock(LLTemplateTokenizer & tokens)
548{
549 LLMessageBlock * blockp = NULL;
550
551 if(!tokens.want("{"))
552 {
553 return NULL;
554 }
555
556 // name first
557 std::string block_name = tokens.next();
558
559 // is name a legit C variable name
560 if (!b_variable_ok(block_name.c_str()))
561 {
562 llerrs << "not a legal block name: " << block_name
563 << " at " << tokens.line() << llendl;
564 }
565
566 // now, block type ("Single", "Multiple", or "Variable")
567 std::string block_type = tokens.next();
568 // which one is it?
569 if (block_type == "Single")
570 {
571 // ok, we can create a block
572 blockp = new LLMessageBlock(block_name.c_str(), MBT_SINGLE);
573 }
574 else if (block_type == "Multiple")
575 {
576 // need to get the number of repeats
577 std::string repeats = tokens.next();
578
579 // is it a legal integer
580 if (!b_positive_integer_ok(repeats.c_str()))
581 {
582 llerrs << "not a legal integer for block multiple count: "
583 << repeats << " at " << tokens.line() << llendl;
584 }
585
586 // ok, we can create a block
587 blockp = new LLMessageBlock(block_name.c_str(),
588 MBT_MULTIPLE,
589 atoi(repeats.c_str()));
590 }
591 else if (block_type == "Variable")
592 {
593 // ok, we can create a block
594 blockp = new LLMessageBlock(block_name.c_str(), MBT_VARIABLE);
595 }
596 else
597 {
598 llerrs << "bad block type: " << block_type
599 << " at " << tokens.line() << llendl;
600 }
601
602
603 while(LLMessageVariable * varp = parseVariable(tokens))
604 {
605 blockp->addVariable(varp->getName(),
606 varp->getType(),
607 varp->getSize());
608 delete varp;
609 }
610
611 if(!tokens.want("}"))
612 {
613 llerrs << "Expecting closing } for block " << block_name
614 << " at " << tokens.line() << llendl;
615 }
616 return blockp;
617
618}
619
620// static
621LLMessageVariable * LLTemplateParser::parseVariable(LLTemplateTokenizer & tokens)
622{
623 LLMessageVariable * varp = NULL;
624 if(!tokens.want("{"))
625 {
626 return NULL;
627 }
628
629 std::string var_name = tokens.next();
630
631 if (!b_variable_ok(var_name.c_str()))
632 {
633 llerrs << "Not a legit variable name: " << var_name
634 << " at " << tokens.line() << llendl;
635 }
636
637 std::string var_type = tokens.next();
638
639 if (var_type == "U8")
640 {
641 varp = new LLMessageVariable(var_name.c_str(), MVT_U8, 1);
642 }
643 else if (var_type == "U16")
644 {
645 varp = new LLMessageVariable(var_name.c_str(), MVT_U16, 2);
646 }
647 else if (var_type == "U32")
648 {
649 varp = new LLMessageVariable(var_name.c_str(), MVT_U32, 4);
650 }
651 else if (var_type == "U64")
652 {
653 varp = new LLMessageVariable(var_name.c_str(), MVT_U64, 8);
654 }
655 else if (var_type == "S8")
656 {
657 varp = new LLMessageVariable(var_name.c_str(), MVT_S8, 1);
658 }
659 else if (var_type == "S16")
660 {
661 varp = new LLMessageVariable(var_name.c_str(), MVT_S16, 2);
662 }
663 else if (var_type == "S32")
664 {
665 varp = new LLMessageVariable(var_name.c_str(), MVT_S32, 4);
666 }
667 else if (var_type == "S64")
668 {
669 varp = new LLMessageVariable(var_name.c_str(), MVT_S64, 8);
670 }
671 else if (var_type == "F32")
672 {
673 varp = new LLMessageVariable(var_name.c_str(), MVT_F32, 4);
674 }
675 else if (var_type == "F64")
676 {
677 varp = new LLMessageVariable(var_name.c_str(), MVT_F64, 8);
678 }
679 else if (var_type == "LLVector3")
680 {
681 varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector3, 12);
682 }
683 else if (var_type == "LLVector3d")
684 {
685 varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector3d, 24);
686 }
687 else if (var_type == "LLVector4")
688 {
689 varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector4, 16);
690 }
691 else if (var_type == "LLQuaternion")
692 {
693 varp = new LLMessageVariable(var_name.c_str(), MVT_LLQuaternion, 12);
694 }
695 else if (var_type == "LLUUID")
696 {
697 varp = new LLMessageVariable(var_name.c_str(), MVT_LLUUID, 16);
698 }
699 else if (var_type == "BOOL")
700 {
701 varp = new LLMessageVariable(var_name.c_str(), MVT_BOOL, 1);
702 }
703 else if (var_type == "IPADDR")
704 {
705 varp = new LLMessageVariable(var_name.c_str(), MVT_IP_ADDR, 4);
706 }
707 else if (var_type == "IPPORT")
708 {
709 varp = new LLMessageVariable(var_name.c_str(), MVT_IP_PORT, 2);
710 }
711 else if (var_type == "Fixed" || var_type == "Variable")
712 {
713 std::string variable_size = tokens.next();
714
715 if (!b_positive_integer_ok(variable_size.c_str()))
716 {
717 llerrs << "not a legal integer variable size: " << variable_size
718 << " at " << tokens.line() << llendl;
719 }
720
721 EMsgVariableType type_enum;
722 if(var_type == "Variable")
723 {
724 type_enum = MVT_VARIABLE;
725 }
726 else if(var_type == "Fixed")
727 {
728 type_enum = MVT_FIXED;
729 }
730 else
731 {
732 type_enum = MVT_FIXED; // removes a warning
733 llerrs << "bad variable type: " << var_type
734 << " at " << tokens.line() << llendl;
735 }
736
737 varp = new LLMessageVariable(
738 var_name.c_str(),
739 type_enum,
740 atoi(variable_size.c_str()));
741 }
742 else
743 {
744 llerrs << "bad variable type:" << var_type
745 << " at " << tokens.line() << llendl;
746 }
747
748 if(!tokens.want("}"))
749 {
750 llerrs << "Expecting closing } for variable " << var_name
751 << " at " << tokens.line() << llendl;
752 }
753 return varp;
754}
diff --git a/linden/indra/llmessage/llmessagetemplateparser.h b/linden/indra/llmessage/llmessagetemplateparser.h
new file mode 100644
index 0000000..f56dfec
--- /dev/null
+++ b/linden/indra/llmessage/llmessagetemplateparser.h
@@ -0,0 +1,82 @@
1/**
2 * @file llmessagetemplateparser.h
3 * @brief Classes to parse message template.
4 *
5 * Copyright (c) 2000-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_MESSAGETEMPLATEPARSER_H
30#define LL_MESSAGETEMPLATEPARSER_H
31
32#include <string>
33#include "llmessagetemplate.h"
34
35class LLTemplateTokenizer
36{
37public:
38 LLTemplateTokenizer(const std::string & contents);
39
40 U32 line() const;
41 bool atEOF() const;
42 std::string next();
43
44 bool want(const std::string & token);
45 bool wantEOF();
46private:
47 void inc();
48 void dec();
49 std::string get() const;
50 void error(std::string message = "generic") const;
51
52 struct positioned_token
53 {
54 std::string str;
55 U32 line;
56 };
57
58 bool mStarted;
59 std::list<positioned_token> mTokens;
60 std::list<positioned_token>::const_iterator mCurrent;
61};
62
63class LLTemplateParser
64{
65public:
66 typedef std::list<LLMessageTemplate *>::const_iterator message_iterator;
67
68 static LLMessageTemplate * parseMessage(LLTemplateTokenizer & tokens);
69 static LLMessageBlock * parseBlock(LLTemplateTokenizer & tokens);
70 static LLMessageVariable * parseVariable(LLTemplateTokenizer & tokens);
71
72 LLTemplateParser(LLTemplateTokenizer & tokens);
73 message_iterator getMessagesBegin() const;
74 message_iterator getMessagesEnd() const;
75 F32 getVersion() const;
76
77private:
78 F32 mVersion;
79 std::list<LLMessageTemplate *> mMessages;
80};
81
82#endif
diff --git a/linden/indra/llmessage/llmsgvariabletype.h b/linden/indra/llmessage/llmsgvariabletype.h
index 360d949..59fba7c 100644
--- a/linden/indra/llmessage/llmsgvariabletype.h
+++ b/linden/indra/llmessage/llmsgvariabletype.h
@@ -1,3 +1,31 @@
1/**
2 * @file llmsgvariabletype.h
3 * @brief Declaration of the EMsgVariableType enumeration.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#ifndef LL_LLMSGVARIABLETYPE_H 29#ifndef LL_LLMSGVARIABLETYPE_H
2#define LL_LLMSGVARIABLETYPE_H 30#define LL_LLMSGVARIABLETYPE_H
3 31
diff --git a/linden/indra/llmessage/llpacketack.cpp b/linden/indra/llmessage/llpacketack.cpp
new file mode 100644
index 0000000..27d9916
--- /dev/null
+++ b/linden/indra/llmessage/llpacketack.cpp
@@ -0,0 +1,84 @@
1/**
2 * @file llpacketack.cpp
3 * @author Phoenix
4 * @date 2007-05-09
5 * @brief Implementation of the LLReliablePacket.
6 *
7 * Copyright (c) 2007-2007, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlife.com/developers/opensource/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlife.com/developers/opensource/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 */
30
31#include "linden_common.h"
32#include "llpacketack.h"
33
34#if !LL_WINDOWS
35#include <netinet/in.h>
36#else
37#include "winsock2.h"
38#endif
39
40#include "message.h"
41
42LLReliablePacket::LLReliablePacket(
43 S32 socket,
44 U8* buf_ptr,
45 S32 buf_len,
46 LLReliablePacketParams* params) :
47 mBuffer(NULL),
48 mBufferLength(0)
49{
50 if (params)
51 {
52 mHost = params->mHost;
53 mRetries = params->mRetries;
54 mPingBasedRetry = params->mPingBasedRetry;
55 mTimeout = params->mTimeout;
56 mCallback = params->mCallback;
57 mCallbackData = params->mCallbackData;
58 mMessageName = params->mMessageName;
59 }
60 else
61 {
62 mRetries = 0;
63 mPingBasedRetry = TRUE;
64 mTimeout = 0.f;
65 mCallback = NULL;
66 mCallbackData = NULL;
67 mMessageName = NULL;
68 }
69
70 mExpirationTime = (F64)((S64)totalTime())/1000000.0 + mTimeout;
71 mPacketID = ntohl(*((U32*)(&buf_ptr[PHL_PACKET_ID])));
72
73 mSocket = socket;
74 if (mRetries)
75 {
76 mBuffer = new U8[buf_len];
77 if (mBuffer != NULL)
78 {
79 memcpy(mBuffer,buf_ptr,buf_len); /*Flawfinder: ignore*/
80 mBufferLength = buf_len;
81 }
82
83 }
84}
diff --git a/linden/indra/llmessage/llpacketack.h b/linden/indra/llmessage/llpacketack.h
index c86fb0f..33fb5a0 100644
--- a/linden/indra/llmessage/llpacketack.h
+++ b/linden/indra/llmessage/llpacketack.h
@@ -29,37 +29,18 @@
29#ifndef LL_LLPACKETACK_H 29#ifndef LL_LLPACKETACK_H
30#define LL_LLPACKETACK_H 30#define LL_LLPACKETACK_H
31 31
32#include <cstring>
33#include <stdio.h>
34
35#include "llerror.h"
36#include "lltimer.h"
37#include "llhost.h" 32#include "llhost.h"
38 33
39//class LLPacketAck
40//{
41//public:
42// LLHost mHost;
43// TPACKETID mPacketID;
44//public:
45// LLPacketAck(const LLHost &host, TPACKETID packet_id)
46// {
47// mHost = host;
48// mPacketID = packet_id;
49// };
50// ~LLPacketAck(){};
51//};
52
53class LLReliablePacketParams 34class LLReliablePacketParams
54{ 35{
55public: 36public:
56 LLHost mHost; 37 LLHost mHost;
57 S32 mRetries; 38 S32 mRetries;
58 BOOL mPingBasedRetry; 39 BOOL mPingBasedRetry;
59 F32 mTimeout; 40 F32 mTimeout;
60 void (*mCallback)(void **,S32); 41 void (*mCallback)(void **,S32);
61 void **mCallbackData; 42 void** mCallbackData;
62 char *mMessageName; 43 char* mMessageName;
63 44
64public: 45public:
65 LLReliablePacketParams() 46 LLReliablePacketParams()
@@ -80,9 +61,13 @@ public:
80 mMessageName = NULL; 61 mMessageName = NULL;
81 }; 62 };
82 63
83 void set ( const LLHost &host, S32 retries, BOOL ping_based_retry, 64 void set(
84 F32 timeout, 65 const LLHost& host,
85 void (*callback)(void **,S32), void **callback_data, char *name ) 66 S32 retries,
67 BOOL ping_based_retry,
68 F32 timeout,
69 void (*callback)(void**,S32),
70 void** callback_data, char* name)
86 { 71 {
87 mHost = host; 72 mHost = host;
88 mRetries = retries; 73 mRetries = retries;
@@ -97,53 +82,11 @@ public:
97class LLReliablePacket 82class LLReliablePacket
98{ 83{
99public: 84public:
100 LLReliablePacket(S32 socket, U8 *buf_ptr, S32 buf_len, LLReliablePacketParams *params) : 85 LLReliablePacket(
101 mBuffer(NULL), 86 S32 socket,
102 mBufferLength(0) 87 U8* buf_ptr,
103 { 88 S32 buf_len,
104 if (params) 89 LLReliablePacketParams* params);
105 {
106 mHost = params->mHost;
107 mRetries = params->mRetries;
108 mPingBasedRetry = params->mPingBasedRetry;
109 mTimeout = params->mTimeout;
110 mCallback = params->mCallback;
111 mCallbackData = params->mCallbackData;
112 mMessageName = params->mMessageName;
113 }
114 else
115 {
116 mRetries = 0;
117 mPingBasedRetry = TRUE;
118 mTimeout = 0.f;
119 mCallback = NULL;
120 mCallbackData = NULL;
121 mMessageName = NULL;
122 }
123
124 mExpirationTime = (F64)((S64)totalTime())/1000000.0 + mTimeout;
125 mPacketID = buf_ptr[1] + ((buf_ptr[0] & 0x0f ) * 256);
126 if (sizeof(TPACKETID) == 4)
127 {
128 mPacketID *= 256;
129 mPacketID += buf_ptr[2];
130 mPacketID *= 256;
131 mPacketID += buf_ptr[3];
132 }
133
134 mSocket = socket;
135 if (mRetries)
136 {
137 mBuffer = new U8[buf_len];
138 if (mBuffer != NULL)
139 {
140 memcpy(mBuffer,buf_ptr,buf_len); /*Flawfinder: ignore*/
141 mBufferLength = buf_len;
142 }
143
144 }
145 };
146
147 ~LLReliablePacket() 90 ~LLReliablePacket()
148 { 91 {
149 mCallback = NULL; 92 mCallback = NULL;
@@ -153,22 +96,21 @@ public:
153 96
154 friend class LLCircuitData; 97 friend class LLCircuitData;
155protected: 98protected:
156 S32 mSocket; 99 S32 mSocket;
157 LLHost mHost; 100 LLHost mHost;
158 S32 mRetries; 101 S32 mRetries;
159 BOOL mPingBasedRetry; 102 BOOL mPingBasedRetry;
160 F32 mTimeout; 103 F32 mTimeout;
161 void (*mCallback)(void **,S32); 104 void (*mCallback)(void**,S32);
162 void **mCallbackData; 105 void** mCallbackData;
163 char *mMessageName; 106 char* mMessageName;
164 107
165 U8 *mBuffer; 108 U8* mBuffer;
166 S32 mBufferLength; 109 S32 mBufferLength;
167 110
168 TPACKETID mPacketID; 111 TPACKETID mPacketID;
169 112
170 F64 mExpirationTime; 113 F64 mExpirationTime;
171
172}; 114};
173 115
174#endif 116#endif
diff --git a/linden/indra/llmessage/llsdmessagebuilder.cpp b/linden/indra/llmessage/llsdmessagebuilder.cpp
index b7deb48..d3dcd5b 100755
--- a/linden/indra/llmessage/llsdmessagebuilder.cpp
+++ b/linden/indra/llmessage/llsdmessagebuilder.cpp
@@ -1,3 +1,31 @@
1/**
2 * @file llsdmessagebuilder.cpp
3 * @brief LLSDMessageBuilder class implementation.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#include "linden_common.h" 29#include "linden_common.h"
2 30
3#include "llsdmessagebuilder.h" 31#include "llsdmessagebuilder.h"
@@ -28,13 +56,13 @@ LLSDMessageBuilder::~LLSDMessageBuilder()
28 56
29 57
30// virtual 58// virtual
31void LLSDMessageBuilder::newMessage(const char *name) 59void LLSDMessageBuilder::newMessage(const char* name)
32{ 60{
33 mbSBuilt = FALSE; 61 mbSBuilt = FALSE;
34 mbSClear = FALSE; 62 mbSClear = FALSE;
35 63
36 mCurrentMessage = LLSD::emptyMap(); 64 mCurrentMessage = LLSD::emptyMap();
37 mCurrentMessageName = (char *)name; 65 mCurrentMessageName = (char*)name;
38} 66}
39 67
40// virtual 68// virtual
@@ -74,8 +102,10 @@ BOOL LLSDMessageBuilder::removeLastBlock()
74 return FALSE; 102 return FALSE;
75} 103}
76 104
77void LLSDMessageBuilder::addBinaryData(const char *varname, 105void LLSDMessageBuilder::addBinaryData(
78 const void *data, S32 size) 106 const char* varname,
107 const void* data,
108 S32 size)
79{ 109{
80 std::vector<U8> v; 110 std::vector<U8> v;
81 v.resize(size); 111 v.resize(size);
@@ -83,57 +113,57 @@ void LLSDMessageBuilder::addBinaryData(const char *varname,
83 (*mCurrentBlock)[varname] = v; 113 (*mCurrentBlock)[varname] = v;
84} 114}
85 115
86void LLSDMessageBuilder::addS8(const char *varname, S8 v) 116void LLSDMessageBuilder::addS8(const char* varname, S8 v)
87{ 117{
88 (*mCurrentBlock)[varname] = v; 118 (*mCurrentBlock)[varname] = v;
89} 119}
90 120
91void LLSDMessageBuilder::addU8(const char *varname, U8 v) 121void LLSDMessageBuilder::addU8(const char* varname, U8 v)
92{ 122{
93 (*mCurrentBlock)[varname] = v; 123 (*mCurrentBlock)[varname] = v;
94} 124}
95 125
96void LLSDMessageBuilder::addS16(const char *varname, S16 v) 126void LLSDMessageBuilder::addS16(const char* varname, S16 v)
97{ 127{
98 (*mCurrentBlock)[varname] = v; 128 (*mCurrentBlock)[varname] = v;
99} 129}
100 130
101void LLSDMessageBuilder::addU16(const char *varname, U16 v) 131void LLSDMessageBuilder::addU16(const char* varname, U16 v)
102{ 132{
103 (*mCurrentBlock)[varname] = v; 133 (*mCurrentBlock)[varname] = v;
104} 134}
105 135
106void LLSDMessageBuilder::addF32(const char *varname, F32 v) 136void LLSDMessageBuilder::addF32(const char* varname, F32 v)
107{ 137{
108 (*mCurrentBlock)[varname] = v; 138 (*mCurrentBlock)[varname] = v;
109} 139}
110 140
111void LLSDMessageBuilder::addS32(const char *varname, S32 v) 141void LLSDMessageBuilder::addS32(const char* varname, S32 v)
112{ 142{
113 (*mCurrentBlock)[varname] = v; 143 (*mCurrentBlock)[varname] = v;
114} 144}
115 145
116void LLSDMessageBuilder::addU32(const char *varname, U32 v) 146void LLSDMessageBuilder::addU32(const char* varname, U32 v)
117{ 147{
118 (*mCurrentBlock)[varname] = ll_sd_from_U32(v); 148 (*mCurrentBlock)[varname] = ll_sd_from_U32(v);
119} 149}
120 150
121void LLSDMessageBuilder::addU64(const char *varname, U64 v) 151void LLSDMessageBuilder::addU64(const char* varname, U64 v)
122{ 152{
123 (*mCurrentBlock)[varname] = ll_sd_from_U64(v); 153 (*mCurrentBlock)[varname] = ll_sd_from_U64(v);
124} 154}
125 155
126void LLSDMessageBuilder::addF64(const char *varname, F64 v) 156void LLSDMessageBuilder::addF64(const char* varname, F64 v)
127{ 157{
128 (*mCurrentBlock)[varname] = v; 158 (*mCurrentBlock)[varname] = v;
129} 159}
130 160
131void LLSDMessageBuilder::addIPAddr(const char *varname, U32 v) 161void LLSDMessageBuilder::addIPAddr(const char* varname, U32 v)
132{ 162{
133 (*mCurrentBlock)[varname] = ll_sd_from_ipaddr(v); 163 (*mCurrentBlock)[varname] = ll_sd_from_ipaddr(v);
134} 164}
135 165
136void LLSDMessageBuilder::addIPPort(const char *varname, U16 v) 166void LLSDMessageBuilder::addIPPort(const char* varname, U16 v)
137{ 167{
138 (*mCurrentBlock)[varname] = v; 168 (*mCurrentBlock)[varname] = v;
139} 169}
@@ -159,27 +189,27 @@ void LLSDMessageBuilder::addString(const char* varname, const std::string& v)
159 (*mCurrentBlock)[varname] = ""; 189 (*mCurrentBlock)[varname] = "";
160} 190}
161 191
162void LLSDMessageBuilder::addVector3(const char *varname, const LLVector3& v) 192void LLSDMessageBuilder::addVector3(const char* varname, const LLVector3& v)
163{ 193{
164 (*mCurrentBlock)[varname] = ll_sd_from_vector3(v); 194 (*mCurrentBlock)[varname] = ll_sd_from_vector3(v);
165} 195}
166 196
167void LLSDMessageBuilder::addVector4(const char *varname, const LLVector4& v) 197void LLSDMessageBuilder::addVector4(const char* varname, const LLVector4& v)
168{ 198{
169 (*mCurrentBlock)[varname] = ll_sd_from_vector4(v); 199 (*mCurrentBlock)[varname] = ll_sd_from_vector4(v);
170} 200}
171 201
172void LLSDMessageBuilder::addVector3d(const char *varname, const LLVector3d& v) 202void LLSDMessageBuilder::addVector3d(const char* varname, const LLVector3d& v)
173{ 203{
174 (*mCurrentBlock)[varname] = ll_sd_from_vector3d(v); 204 (*mCurrentBlock)[varname] = ll_sd_from_vector3d(v);
175} 205}
176 206
177void LLSDMessageBuilder::addQuat(const char *varname, const LLQuaternion& v) 207void LLSDMessageBuilder::addQuat(const char* varname, const LLQuaternion& v)
178{ 208{
179 (*mCurrentBlock)[varname] = ll_sd_from_quaternion(v); 209 (*mCurrentBlock)[varname] = ll_sd_from_quaternion(v);
180} 210}
181 211
182void LLSDMessageBuilder::addUUID(const char *varname, const LLUUID& v) 212void LLSDMessageBuilder::addUUID(const char* varname, const LLUUID& v)
183{ 213{
184 (*mCurrentBlock)[varname] = v; 214 (*mCurrentBlock)[varname] = v;
185} 215}
@@ -193,9 +223,7 @@ BOOL LLSDMessageBuilder::isMessageFull(const char* blockname) const
193 return FALSE; 223 return FALSE;
194} 224}
195 225
196// make sure that all the desired data is in place and then copy the data 226U32 LLSDMessageBuilder::buildMessage(U8*, U32, U8)
197// into MAX_BUFFER_SIZEd buffer
198U32 LLSDMessageBuilder::buildMessage(U8* buffer, U32 buffer_size)
199{ 227{
200 return 0; 228 return 0;
201} 229}
@@ -205,7 +233,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data)
205 // copy the blocks 233 // copy the blocks
206 // counting variables used to encode multiple block info 234 // counting variables used to encode multiple block info
207 S32 block_count = 0; 235 S32 block_count = 0;
208 char *block_name = NULL; 236 char* block_name = NULL;
209 237
210 // loop through msg blocks to loop through variables, totalling up size 238 // loop through msg blocks to loop through variables, totalling up size
211 // data and filling the new (send) message 239 // data and filling the new (send) message
@@ -222,7 +250,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data)
222 if (block_count == 0) 250 if (block_count == 0)
223 { 251 {
224 block_count = mbci->mBlockNumber; 252 block_count = mbci->mBlockNumber;
225 block_name = (char *)mbci->mName; 253 block_name = (char*)mbci->mName;
226 } 254 }
227 255
228 // counting down mutliple blocks 256 // counting down mutliple blocks
@@ -248,7 +276,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data)
248void LLSDMessageBuilder::copyFromLLSD(const LLSD& msg) 276void LLSDMessageBuilder::copyFromLLSD(const LLSD& msg)
249{ 277{
250 mCurrentMessage = msg; 278 mCurrentMessage = msg;
251 llinfos << LLSDXMLStreamer(mCurrentMessage) << llendl; 279 lldebugs << LLSDXMLStreamer(mCurrentMessage) << llendl;
252} 280}
253 281
254const LLSD& LLSDMessageBuilder::getMessage() const 282const LLSD& LLSDMessageBuilder::getMessage() const
diff --git a/linden/indra/llmessage/llsdmessagebuilder.h b/linden/indra/llmessage/llsdmessagebuilder.h
index f04194d..8ea7763 100755
--- a/linden/indra/llmessage/llsdmessagebuilder.h
+++ b/linden/indra/llmessage/llsdmessagebuilder.h
@@ -1,3 +1,31 @@
1/**
2 * @file llsdmessagebuilder.h
3 * @brief Declaration of LLSDMessageBuilder class.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#ifndef LL_LLSDMESSAGEBUILDER_H 29#ifndef LL_LLSDMESSAGEBUILDER_H
2#define LL_LLSDMESSAGEBUILDER_H 30#define LL_LLSDMESSAGEBUILDER_H
3 31
@@ -19,31 +47,33 @@ public:
19 LLSDMessageBuilder(); 47 LLSDMessageBuilder();
20 virtual ~LLSDMessageBuilder(); 48 virtual ~LLSDMessageBuilder();
21 49
22 virtual void newMessage(const char *name); 50 virtual void newMessage(const char* name);
23 51
24 virtual void nextBlock(const char* blockname); 52 virtual void nextBlock(const char* blockname);
25 virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror... 53 virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror...
26 54
27 /** All add* methods expect pointers to canonical varname strings. */ 55 /** All add* methods expect pointers to canonical varname strings. */
28 virtual void addBinaryData(const char *varname, const void *data, 56 virtual void addBinaryData(
29 S32 size); 57 const char* varname,
58 const void* data,
59 S32 size);
30 virtual void addBOOL(const char* varname, BOOL b); 60 virtual void addBOOL(const char* varname, BOOL b);
31 virtual void addS8(const char *varname, S8 s); 61 virtual void addS8(const char* varname, S8 s);
32 virtual void addU8(const char *varname, U8 u); 62 virtual void addU8(const char* varname, U8 u);
33 virtual void addS16(const char *varname, S16 i); 63 virtual void addS16(const char* varname, S16 i);
34 virtual void addU16(const char *varname, U16 i); 64 virtual void addU16(const char* varname, U16 i);
35 virtual void addF32(const char *varname, F32 f); 65 virtual void addF32(const char* varname, F32 f);
36 virtual void addS32(const char *varname, S32 s); 66 virtual void addS32(const char* varname, S32 s);
37 virtual void addU32(const char *varname, U32 u); 67 virtual void addU32(const char* varname, U32 u);
38 virtual void addU64(const char *varname, U64 lu); 68 virtual void addU64(const char* varname, U64 lu);
39 virtual void addF64(const char *varname, F64 d); 69 virtual void addF64(const char* varname, F64 d);
40 virtual void addVector3(const char *varname, const LLVector3& vec); 70 virtual void addVector3(const char* varname, const LLVector3& vec);
41 virtual void addVector4(const char *varname, const LLVector4& vec); 71 virtual void addVector4(const char* varname, const LLVector4& vec);
42 virtual void addVector3d(const char *varname, const LLVector3d& vec); 72 virtual void addVector3d(const char* varname, const LLVector3d& vec);
43 virtual void addQuat(const char *varname, const LLQuaternion& quat); 73 virtual void addQuat(const char* varname, const LLQuaternion& quat);
44 virtual void addUUID(const char *varname, const LLUUID& uuid); 74 virtual void addUUID(const char* varname, const LLUUID& uuid);
45 virtual void addIPAddr(const char *varname, const U32 ip); 75 virtual void addIPAddr(const char* varname, const U32 ip);
46 virtual void addIPPort(const char *varname, const U16 port); 76 virtual void addIPPort(const char* varname, const U16 port);
47 virtual void addString(const char* varname, const char* s); 77 virtual void addString(const char* varname, const char* s);
48 virtual void addString(const char* varname, const std::string& s); 78 virtual void addString(const char* varname, const std::string& s);
49 79
@@ -52,8 +82,8 @@ public:
52 82
53 virtual BOOL isBuilt() const; 83 virtual BOOL isBuilt() const;
54 virtual BOOL isClear() const; 84 virtual BOOL isClear() const;
55 virtual U32 buildMessage(U8* buffer, U32 buffer_size); 85 virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data);
56 /**< Return built message size */ 86 /**< Null implementation which returns 0. */
57 87
58 virtual void clearMessage(); 88 virtual void clearMessage();
59 89
diff --git a/linden/indra/llmessage/llsdmessagereader.cpp b/linden/indra/llmessage/llsdmessagereader.cpp
index 6312bee..6742edb 100755
--- a/linden/indra/llmessage/llsdmessagereader.cpp
+++ b/linden/indra/llmessage/llsdmessagereader.cpp
@@ -1,7 +1,38 @@
1/**
2 * @file llsdmessagereader.cpp
3 * @brief LLSDMessageReader class implementation.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#include "linden_common.h"
30
1#include "llsdmessagereader.h" 31#include "llsdmessagereader.h"
2#include "llsdutil.h" 32
3#include "llmessagebuilder.h" 33#include "llmessagebuilder.h"
4#include "llsdmessagebuilder.h" 34#include "llsdmessagebuilder.h"
35#include "llsdutil.h"
5 36
6LLSDMessageReader::LLSDMessageReader() 37LLSDMessageReader::LLSDMessageReader()
7{ 38{
@@ -15,11 +46,30 @@ LLSDMessageReader::~LLSDMessageReader()
15 46
16LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum) 47LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum)
17{ 48{
18 if(input[block].isArray()) 49 // babbage: log error to llerrs if variable not found to mimic
50 // LLTemplateMessageReader::getData behaviour
51 if(NULL == block)
52 {
53 llerrs << "NULL block name" << llendl;
54 return LLSD();
55 }
56 if(NULL == var)
57 {
58 llerrs << "NULL var name" << llendl;
59 return LLSD();
60 }
61 if(! input[block].isArray())
19 { 62 {
20 return input[block][blocknum][var]; 63 llerrs << "block " << block << " not found" << llendl;
64 return LLSD();
21 } 65 }
22 return LLSD(); 66
67 LLSD result = input[block][blocknum][var];
68 if(result.isUndefined())
69 {
70 llerrs << "var " << var << " not found" << llendl;
71 }
72 return result;
23} 73}
24 74
25//virtual 75//virtual
@@ -167,8 +217,12 @@ void LLSDMessageReader::getIPPort(const char *block, const char *var,
167void LLSDMessageReader::getString(const char *block, const char *var, 217void LLSDMessageReader::getString(const char *block, const char *var,
168 S32 buffer_size, char *buffer, S32 blocknum) 218 S32 buffer_size, char *buffer, S32 blocknum)
169{ 219{
220 if(buffer_size <= 0)
221 {
222 llwarns << "buffer_size <= 0" << llendl;
223 return;
224 }
170 std::string data = getLLSD(mMessage, block, var, blocknum); 225 std::string data = getLLSD(mMessage, block, var, blocknum);
171
172 S32 data_size = data.size(); 226 S32 data_size = data.size();
173 if (data_size >= buffer_size) 227 if (data_size >= buffer_size)
174 { 228 {
@@ -241,7 +295,7 @@ void LLSDMessageReader::clearMessage()
241//virtual 295//virtual
242const char* LLSDMessageReader::getMessageName() const 296const char* LLSDMessageReader::getMessageName() const
243{ 297{
244 return mMessageName.c_str(); 298 return mMessageName;
245} 299}
246 300
247// virtual 301// virtual
@@ -256,7 +310,7 @@ void LLSDMessageReader::copyToBuilder(LLMessageBuilder& builder) const
256 builder.copyFromLLSD(mMessage); 310 builder.copyFromLLSD(mMessage);
257} 311}
258 312
259void LLSDMessageReader::setMessage(const std::string& name, const LLSD& message) 313void LLSDMessageReader::setMessage(const char* name, const LLSD& message)
260{ 314{
261 mMessageName = name; 315 mMessageName = name;
262 // TODO: Validate 316 // TODO: Validate
diff --git a/linden/indra/llmessage/llsdmessagereader.h b/linden/indra/llmessage/llsdmessagereader.h
index 5785194..d6d9f3d 100755
--- a/linden/indra/llmessage/llsdmessagereader.h
+++ b/linden/indra/llmessage/llsdmessagereader.h
@@ -69,10 +69,11 @@ public:
69 69
70 virtual void copyToBuilder(LLMessageBuilder&) const; 70 virtual void copyToBuilder(LLMessageBuilder&) const;
71 71
72 void setMessage(const std::string& name, const LLSD& msg); 72 /** Expects a pointer to a canonical name string */
73 void setMessage(const char* name, const LLSD& msg);
73 74
74private: 75private:
75 std::string mMessageName; 76 const char* mMessageName; // Canonical (prehashed) string.
76 LLSD mMessage; 77 LLSD mMessage;
77}; 78};
78 79
diff --git a/linden/indra/llmessage/lltemplatemessagebuilder.cpp b/linden/indra/llmessage/lltemplatemessagebuilder.cpp
index 806f034..9473343 100644
--- a/linden/indra/llmessage/lltemplatemessagebuilder.cpp
+++ b/linden/indra/llmessage/lltemplatemessagebuilder.cpp
@@ -1,3 +1,31 @@
1/**
2 * @file lltemplatemessagebuilder.cpp
3 * @brief LLTemplateMessageBuilder class implementation.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#include "linden_common.h" 29#include "linden_common.h"
2 30
3#include "lltemplatemessagebuilder.h" 31#include "lltemplatemessagebuilder.h"
@@ -41,28 +69,30 @@ void LLTemplateMessageBuilder::newMessage(const char *name)
41 delete mCurrentSMessageData; 69 delete mCurrentSMessageData;
42 mCurrentSMessageData = NULL; 70 mCurrentSMessageData = NULL;
43 71
44 char *namep = (char *)name; 72 char* namep = (char*)name;
45
46 if (mMessageTemplates.count(namep) > 0) 73 if (mMessageTemplates.count(namep) > 0)
47 { 74 {
48 mCurrentSMessageTemplate = mMessageTemplates[namep]; 75 mCurrentSMessageTemplate = mMessageTemplates[namep];
49 if (mCurrentSMessageData)
50 {
51 delete mCurrentSMessageData;
52 }
53 mCurrentSMessageData = new LLMsgData(namep); 76 mCurrentSMessageData = new LLMsgData(namep);
54 mCurrentSMessageName = namep; 77 mCurrentSMessageName = namep;
55 mCurrentSDataBlock = NULL; 78 mCurrentSDataBlock = NULL;
56 mCurrentSBlockName = NULL; 79 mCurrentSBlockName = NULL;
57 80
58 // add at one of each block 81 // add at one of each block
59 LLMessageTemplate* msg_template = mMessageTemplates[namep]; 82 const LLMessageTemplate* msg_template = mMessageTemplates[namep];
60 for (LLMessageTemplate::message_block_map_t::iterator iter = msg_template->mMemberBlocks.begin(); 83
61 iter != msg_template->mMemberBlocks.end(); iter++) 84 if (msg_template->getDeprecation() != MD_NOTDEPRECATED)
62 { 85 {
63 LLMessageBlock* ci = iter->second; 86 llwarns << "Sending deprecated message " << namep << llendl;
64 LLMsgBlkData *tblockp; 87 }
65 tblockp = new LLMsgBlkData(ci->mName, 0); 88
89 LLMessageTemplate::message_block_map_t::const_iterator iter;
90 for(iter = msg_template->mMemberBlocks.begin();
91 iter != msg_template->mMemberBlocks.end();
92 ++iter)
93 {
94 LLMessageBlock* ci = *iter;
95 LLMsgBlkData* tblockp = new LLMsgBlkData(ci->mName, 0);
66 mCurrentSMessageData->addBlock(tblockp); 96 mCurrentSMessageData->addBlock(tblockp);
67 } 97 }
68 } 98 }
@@ -102,16 +132,14 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname)
102 } 132 }
103 133
104 // now, does this block exist? 134 // now, does this block exist?
105 LLMessageTemplate::message_block_map_t::iterator temp_iter = mCurrentSMessageTemplate->mMemberBlocks.find(bnamep); 135 const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(bnamep);
106 if (temp_iter == mCurrentSMessageTemplate->mMemberBlocks.end()) 136 if (!template_data)
107 { 137 {
108 llerrs << "LLTemplateMessageBuilder::nextBlock " << bnamep 138 llerrs << "LLTemplateMessageBuilder::nextBlock " << bnamep
109 << " not a block in " << mCurrentSMessageTemplate->mName << llendl; 139 << " not a block in " << mCurrentSMessageTemplate->mName << llendl;
110 return; 140 return;
111 } 141 }
112 142
113 LLMessageBlock* template_data = temp_iter->second;
114
115 // ok, have we already set this block? 143 // ok, have we already set this block?
116 LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[bnamep]; 144 LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[bnamep];
117 if (block_data->mBlockNumber == 0) 145 if (block_data->mBlockNumber == 0)
@@ -122,10 +150,10 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname)
122 mCurrentSBlockName = bnamep; 150 mCurrentSBlockName = bnamep;
123 151
124 // add placeholders for each of the variables 152 // add placeholders for each of the variables
125 for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin(); 153 for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin();
126 iter != template_data->mMemberVariables.end(); iter++) 154 iter != template_data->mMemberVariables.end(); iter++)
127 { 155 {
128 LLMessageVariable& ci = *(iter->second); 156 LLMessageVariable& ci = **iter;
129 mCurrentSDataBlock->addVariable(ci.getName(), ci.getType()); 157 mCurrentSDataBlock->addVariable(ci.getName(), ci.getType());
130 } 158 }
131 return; 159 return;
@@ -181,12 +209,12 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname)
181 mCurrentSMessageData->mMemberBlocks[nbnamep] = mCurrentSDataBlock; 209 mCurrentSMessageData->mMemberBlocks[nbnamep] = mCurrentSDataBlock;
182 210
183 // add placeholders for each of the variables 211 // add placeholders for each of the variables
184 for (LLMessageBlock::message_variable_map_t::iterator 212 for (LLMessageBlock::message_variable_map_t::const_iterator
185 iter = template_data->mMemberVariables.begin(), 213 iter = template_data->mMemberVariables.begin(),
186 end = template_data->mMemberVariables.end(); 214 end = template_data->mMemberVariables.end();
187 iter != end; iter++) 215 iter != end; iter++)
188 { 216 {
189 LLMessageVariable& ci = *(iter->second); 217 LLMessageVariable& ci = **iter;
190 mCurrentSDataBlock->addVariable(ci.getName(), ci.getType()); 218 mCurrentSDataBlock->addVariable(ci.getName(), ci.getType());
191 } 219 }
192 return; 220 return;
@@ -211,12 +239,12 @@ BOOL LLTemplateMessageBuilder::removeLastBlock()
211 // Decrement the sent total by the size of the 239 // Decrement the sent total by the size of the
212 // data in the message block that we're currently building. 240 // data in the message block that we're currently building.
213 241
214 LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]; 242 const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName);
215 243
216 for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin(); 244 for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin();
217 iter != template_data->mMemberVariables.end(); iter++) 245 iter != template_data->mMemberVariables.end(); iter++)
218 { 246 {
219 LLMessageVariable& ci = *(iter->second); 247 LLMessageVariable& ci = **iter;
220 mCurrentSendTotal -= ci.getSize(); 248 mCurrentSendTotal -= ci.getSize();
221 } 249 }
222 250
@@ -276,7 +304,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM
276 } 304 }
277 305
278 // kewl, add the data if it exists 306 // kewl, add the data if it exists
279 LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep]; 307 const LLMessageVariable* var_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName)->getVariable(vnamep);
280 if (!var_data || !var_data->getName()) 308 if (!var_data || !var_data->getName())
281 { 309 {
282 llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl; 310 llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl;
@@ -336,7 +364,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM
336 } 364 }
337 365
338 // kewl, add the data if it exists 366 // kewl, add the data if it exists
339 LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep]; 367 const LLMessageVariable* var_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName)->getVariable(vnamep);
340 if (!var_data->getName()) 368 if (!var_data->getName())
341 { 369 {
342 llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl; 370 llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl;
@@ -484,7 +512,7 @@ static S32 zero_code(U8 **data, U32 *data_size)
484 512
485// skip the packet id field 513// skip the packet id field
486 514
487 for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) 515 for (U32 ii = 0; ii < LL_PACKET_ID_SIZE ; ++ii)
488 { 516 {
489 count--; 517 count--;
490 *outptr++ = *inptr++; 518 *outptr++ = *inptr++;
@@ -571,7 +599,7 @@ BOOL LLTemplateMessageBuilder::isMessageFull(const char* blockname) const
571 char* bnamep = (char*)blockname; 599 char* bnamep = (char*)blockname;
572 S32 max; 600 S32 max;
573 601
574 LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[bnamep]; 602 const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(bnamep);
575 603
576 switch(template_data->mType) 604 switch(template_data->mType)
577 { 605 {
@@ -593,138 +621,59 @@ BOOL LLTemplateMessageBuilder::isMessageFull(const char* blockname) const
593 return FALSE; 621 return FALSE;
594} 622}
595 623
596 624static S32 buildBlock(U8* buffer, S32 buffer_size, const LLMessageBlock* template_data, LLMsgData* message_data)
597// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer
598U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size)
599{ 625{
600 // basic algorithm is to loop through the various pieces, building 626 S32 result = 0;
601 // size and offset info if we encounter a -1 for mSize at any 627 LLMsgData::msg_blk_data_map_t::const_iterator block_iter = message_data->mMemberBlocks.find(template_data->mName);
602 // point that variable wasn't given data 628 const LLMsgBlkData* mbci = block_iter->second;
603 629
604 // do we have a current message? 630 // ok, if this is the first block of a repeating pack, set
605 if (!mCurrentSMessageTemplate) 631 // block_count and, if it's type MBT_VARIABLE encode a byte
606 { 632 // for how many there are
607 llerrs << "newMessage not called prior to buildMessage" << llendl; 633 S32 block_count = mbci->mBlockNumber;
608 return 0; 634 if (template_data->mType == MBT_VARIABLE)
609 } 635 {
610 636 // remember that mBlockNumber is a S32
611 // zero out some useful values 637 U8 temp_block_number = (U8)mbci->mBlockNumber;
612 638 if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE)
613 // leave room for circuit counter 639 {
614 U32 result = LL_PACKET_ID_SIZE; 640 memcpy(&buffer[result], &temp_block_number, sizeof(U8));
615 641 result += sizeof(U8);
616 // encode message number and adjust total_offset 642 }
617 if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH) 643 else
618 { 644 {
619// old, endian-dependant way 645 // Just reporting error is likely not enough. Need
620// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8)); 646 // to check how to abort or error out gracefully
621 647 // from this function. XXXTBD
622// new, independant way 648 llerrs << "buildBlock failed. Message excedding "
623 buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber; 649 << "sendBuffersize." << llendl;
624 result += sizeof(U8); 650 }
625 }
626 else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM)
627 {
628 U8 temp = 255;
629 memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
630 result += sizeof(U8);
631
632 // mask off unsightly bits
633 temp = mCurrentSMessageTemplate->mMessageNumber & 255;
634 memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
635 result += sizeof(U8);
636 }
637 else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW)
638 {
639 U8 temp = 255;
640 U16 message_num;
641 memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
642 result += sizeof(U8);
643 memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
644 result += sizeof(U8);
645
646 // mask off unsightly bits
647 message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF;
648
649 // convert to network byte order
650 message_num = htons(message_num);
651 memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/
652 result += sizeof(U16);
653 }
654 else
655 {
656 llerrs << "unexpected message frequency in buildMessage" << llendl;
657 return 0;
658 } 651 }
659 652 else if (template_data->mType == MBT_MULTIPLE)
660 // counting variables used to encode multiple block info
661 S32 block_count = 0;
662 U8 temp_block_number;
663
664 // loop through msg blocks to loop through variables,
665 // totalling up size data and copying into buffer
666 for (LLMsgData::msg_blk_data_map_t::iterator
667 iter = mCurrentSMessageData->mMemberBlocks.begin(),
668 end = mCurrentSMessageData->mMemberBlocks.end();
669 iter != end; iter++)
670 { 653 {
671 LLMsgBlkData* mbci = iter->second; 654 if (block_count != template_data->mNumber)
672 // do we need to encode a block code?
673 if (block_count == 0)
674 { 655 {
675 block_count = mbci->mBlockNumber; 656 // nope! need to fill it in all the way!
676 657 llerrs << "Block " << mbci->mName
677 LLMessageBlock* template_data = 658 << " is type MBT_MULTIPLE but only has data for "
678 mCurrentSMessageTemplate->mMemberBlocks[mbci->mName]; 659 << block_count << " out of its "
679 660 << template_data->mNumber << " blocks" << llendl;
680 // ok, if this is the first block of a repeating pack, set
681 // block_count and, if it's type MBT_VARIABLE encode a byte
682 // for how many there are
683 if (template_data->mType == MBT_VARIABLE)
684 {
685 // remember that mBlockNumber is a S32
686 temp_block_number = (U8)mbci->mBlockNumber;
687 if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE)
688 {
689 memcpy(&buffer[result], &temp_block_number, sizeof(U8));
690 result += sizeof(U8);
691 }
692 else
693 {
694 // Just reporting error is likely not enough. Need
695 // to check how to abort or error out gracefully
696 // from this function. XXXTBD
697 llerrs << "buildMessage failed. Message excedding "
698 << "sendBuffersize." << llendl;
699 }
700 }
701 else if (template_data->mType == MBT_MULTIPLE)
702 {
703 if (block_count != template_data->mNumber)
704 {
705 // nope! need to fill it in all the way!
706 llerrs << "Block " << mbci->mName
707 << " is type MBT_MULTIPLE but only has data for "
708 << block_count << " out of its "
709 << template_data->mNumber << " blocks" << llendl;
710 }
711 }
712 } 661 }
662 }
713 663
714 // counting down multiple blocks 664 while(block_count > 0)
715 block_count--; 665 {
716
717 // now loop through the variables 666 // now loop through the variables
718 for (LLMsgBlkData::msg_var_data_map_t::iterator iter = mbci->mMemberVarData.begin(); 667 for (LLMsgBlkData::msg_var_data_map_t::const_iterator iter = mbci->mMemberVarData.begin();
719 iter != mbci->mMemberVarData.end(); iter++) 668 iter != mbci->mMemberVarData.end(); iter++)
720 { 669 {
721 LLMsgVarData& mvci = *iter; 670 const LLMsgVarData& mvci = *iter;
722 if (mvci.getSize() == -1) 671 if (mvci.getSize() == -1)
723 { 672 {
724 // oops, this variable wasn't ever set! 673 // oops, this variable wasn't ever set!
725 llerrs << "The variable " << mvci.getName() << " in block " 674 llerrs << "The variable " << mvci.getName() << " in block "
726 << mbci->mName << " of message " 675 << mbci->mName << " of message "
727 << mCurrentSMessageData->mName 676 << template_data->mName
728 << " wasn't set prior to buildMessage call" << llendl; 677 << " wasn't set prior to buildMessage call" << llendl;
729 } 678 }
730 else 679 else
@@ -774,7 +723,7 @@ U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size)
774 // Just reporting error is likely not 723 // Just reporting error is likely not
775 // enough. Need to check how to abort or error 724 // enough. Need to check how to abort or error
776 // out gracefully from this function. XXXTBD 725 // out gracefully from this function. XXXTBD
777 llerrs << "LLMessageSystem::buildMessage failed. " 726 llerrs << "buildBlock failed. "
778 << "Attempted to pack " 727 << "Attempted to pack "
779 << result + mvci.getSize() 728 << result + mvci.getSize()
780 << " bytes into a buffer with size " 729 << " bytes into a buffer with size "
@@ -783,6 +732,94 @@ U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size)
783 } 732 }
784 } 733 }
785 } 734 }
735
736 --block_count;
737 ++block_iter;
738 if (block_iter != message_data->mMemberBlocks.end())
739 {
740 mbci = block_iter->second;
741 }
742 }
743
744 return result;
745}
746
747
748// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer
749U32 LLTemplateMessageBuilder::buildMessage(
750 U8* buffer,
751 U32 buffer_size,
752 U8 offset_to_data)
753{
754 // basic algorithm is to loop through the various pieces, building
755 // size and offset info if we encounter a -1 for mSize at any
756 // point that variable wasn't given data
757
758 // do we have a current message?
759 if (!mCurrentSMessageTemplate)
760 {
761 llerrs << "newMessage not called prior to buildMessage" << llendl;
762 return 0;
763 }
764
765 // leave room for flags, packet sequence #, and data offset
766 // information.
767 buffer[PHL_OFFSET] = offset_to_data;
768 U32 result = LL_PACKET_ID_SIZE;
769
770 // encode message number and adjust total_offset
771 if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH)
772 {
773// old, endian-dependant way
774// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8));
775
776// new, independant way
777 buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber;
778 result += sizeof(U8);
779 }
780 else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM)
781 {
782 U8 temp = 255;
783 memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
784 result += sizeof(U8);
785
786 // mask off unsightly bits
787 temp = mCurrentSMessageTemplate->mMessageNumber & 255;
788 memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
789 result += sizeof(U8);
790 }
791 else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW)
792 {
793 U8 temp = 255;
794 U16 message_num;
795 memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
796 result += sizeof(U8);
797 memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/
798 result += sizeof(U8);
799
800 // mask off unsightly bits
801 message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF;
802
803 // convert to network byte order
804 message_num = htons(message_num);
805 memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/
806 result += sizeof(U16);
807 }
808 else
809 {
810 llerrs << "unexpected message frequency in buildMessage" << llendl;
811 return 0;
812 }
813
814 // fast forward through the offset and build the message
815 result += offset_to_data;
816 for(LLMessageTemplate::message_block_map_t::const_iterator
817 iter = mCurrentSMessageTemplate->mMemberBlocks.begin(),
818 end = mCurrentSMessageTemplate->mMemberBlocks.end();
819 iter != end;
820 ++iter)
821 {
822 result += buildBlock(buffer + result, buffer_size - result, *iter, mCurrentSMessageData);
786 } 823 }
787 mbSBuilt = TRUE; 824 mbSBuilt = TRUE;
788 825
diff --git a/linden/indra/llmessage/lltemplatemessagebuilder.h b/linden/indra/llmessage/lltemplatemessagebuilder.h
index ae53328..40a2f0d 100644
--- a/linden/indra/llmessage/lltemplatemessagebuilder.h
+++ b/linden/indra/llmessage/lltemplatemessagebuilder.h
@@ -1,3 +1,31 @@
1/**
2 * @file lltemplatemessagebuilder.h
3 * @brief Declaration of LLTemplateMessageBuilder class.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#ifndef LL_LLTEMPLATEMESSAGEBUILDER_H 29#ifndef LL_LLTEMPLATEMESSAGEBUILDER_H
2#define LL_LLTEMPLATEMESSAGEBUILDER_H 30#define LL_LLTEMPLATEMESSAGEBUILDER_H
3 31
@@ -15,12 +43,12 @@ class LLTemplateMessageBuilder : public LLMessageBuilder
15{ 43{
16public: 44public:
17 45
18 typedef std::map<const char *, LLMessageTemplate*> message_template_name_map_t; 46 typedef std::map<const char* , LLMessageTemplate*> message_template_name_map_t;
19 47
20 LLTemplateMessageBuilder(message_template_name_map_t&); 48 LLTemplateMessageBuilder(message_template_name_map_t&);
21 virtual ~LLTemplateMessageBuilder(); 49 virtual ~LLTemplateMessageBuilder();
22 50
23 virtual void newMessage(const char *name); 51 virtual void newMessage(const char* name);
24 52
25 virtual void nextBlock(const char* blockname); 53 virtual void nextBlock(const char* blockname);
26 virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror... 54 virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror...
@@ -29,22 +57,22 @@ public:
29 virtual void addBinaryData(const char *varname, const void *data, 57 virtual void addBinaryData(const char *varname, const void *data,
30 S32 size); 58 S32 size);
31 virtual void addBOOL(const char* varname, BOOL b); 59 virtual void addBOOL(const char* varname, BOOL b);
32 virtual void addS8(const char *varname, S8 s); 60 virtual void addS8(const char* varname, S8 s);
33 virtual void addU8(const char *varname, U8 u); 61 virtual void addU8(const char* varname, U8 u);
34 virtual void addS16(const char *varname, S16 i); 62 virtual void addS16(const char* varname, S16 i);
35 virtual void addU16(const char *varname, U16 i); 63 virtual void addU16(const char* varname, U16 i);
36 virtual void addF32(const char *varname, F32 f); 64 virtual void addF32(const char* varname, F32 f);
37 virtual void addS32(const char *varname, S32 s); 65 virtual void addS32(const char* varname, S32 s);
38 virtual void addU32(const char *varname, U32 u); 66 virtual void addU32(const char* varname, U32 u);
39 virtual void addU64(const char *varname, U64 lu); 67 virtual void addU64(const char* varname, U64 lu);
40 virtual void addF64(const char *varname, F64 d); 68 virtual void addF64(const char* varname, F64 d);
41 virtual void addVector3(const char *varname, const LLVector3& vec); 69 virtual void addVector3(const char* varname, const LLVector3& vec);
42 virtual void addVector4(const char *varname, const LLVector4& vec); 70 virtual void addVector4(const char* varname, const LLVector4& vec);
43 virtual void addVector3d(const char *varname, const LLVector3d& vec); 71 virtual void addVector3d(const char* varname, const LLVector3d& vec);
44 virtual void addQuat(const char *varname, const LLQuaternion& quat); 72 virtual void addQuat(const char* varname, const LLQuaternion& quat);
45 virtual void addUUID(const char *varname, const LLUUID& uuid); 73 virtual void addUUID(const char* varname, const LLUUID& uuid);
46 virtual void addIPAddr(const char *varname, const U32 ip); 74 virtual void addIPAddr(const char* varname, const U32 ip);
47 virtual void addIPPort(const char *varname, const U16 port); 75 virtual void addIPPort(const char* varname, const U16 port);
48 virtual void addString(const char* varname, const char* s); 76 virtual void addString(const char* varname, const char* s);
49 virtual void addString(const char* varname, const std::string& s); 77 virtual void addString(const char* varname, const std::string& s);
50 78
@@ -53,7 +81,7 @@ public:
53 81
54 virtual BOOL isBuilt() const; 82 virtual BOOL isBuilt() const;
55 virtual BOOL isClear() const; 83 virtual BOOL isClear() const;
56 virtual U32 buildMessage(U8* buffer, U32 buffer_size); 84 virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data);
57 /**< Return built message size */ 85 /**< Return built message size */
58 86
59 virtual void clearMessage(); 87 virtual void clearMessage();
@@ -68,14 +96,14 @@ public:
68 virtual void copyFromLLSD(const LLSD&); 96 virtual void copyFromLLSD(const LLSD&);
69 97
70private: 98private:
71 void addData(const char *varname, const void *data, 99 void addData(const char* varname, const void* data,
72 EMsgVariableType type, S32 size); 100 EMsgVariableType type, S32 size);
73 101
74 void addData(const char *varname, const void *data, 102 void addData(const char* varname, const void* data,
75 EMsgVariableType type); 103 EMsgVariableType type);
76 104
77 LLMsgData* mCurrentSMessageData; 105 LLMsgData* mCurrentSMessageData;
78 LLMessageTemplate* mCurrentSMessageTemplate; 106 const LLMessageTemplate* mCurrentSMessageTemplate;
79 LLMsgBlkData* mCurrentSDataBlock; 107 LLMsgBlkData* mCurrentSDataBlock;
80 char* mCurrentSMessageName; 108 char* mCurrentSMessageName;
81 char* mCurrentSBlockName; 109 char* mCurrentSBlockName;
diff --git a/linden/indra/llmessage/lltemplatemessagereader.cpp b/linden/indra/llmessage/lltemplatemessagereader.cpp
index bb3f4f4..a1f5213 100644
--- a/linden/indra/llmessage/lltemplatemessagereader.cpp
+++ b/linden/indra/llmessage/lltemplatemessagereader.cpp
@@ -1,3 +1,31 @@
1/**
2 * @file lltemplatemessagereader.cpp
3 * @brief LLTemplateMessageReader class implementation.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#include "lltemplatemessagereader.h" 29#include "lltemplatemessagereader.h"
2 30
3#include "llfasttimer.h" 31#include "llfasttimer.h"
@@ -53,7 +81,7 @@ void LLTemplateMessageReader::getData(const char *blockname, const char *varname
53 char *bnamep = (char *)blockname + blocknum; // this works because it's just a hash. The bnamep is never derefference 81 char *bnamep = (char *)blockname + blocknum; // this works because it's just a hash. The bnamep is never derefference
54 char *vnamep = (char *)varname; 82 char *vnamep = (char *)varname;
55 83
56 LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); 84 LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
57 85
58 if (iter == mCurrentRMessageData->mMemberBlocks.end()) 86 if (iter == mCurrentRMessageData->mMemberBlocks.end())
59 { 87 {
@@ -135,7 +163,7 @@ S32 LLTemplateMessageReader::getNumberOfBlocks(const char *blockname)
135 163
136 char *bnamep = (char *)blockname; 164 char *bnamep = (char *)blockname;
137 165
138 LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); 166 LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
139 167
140 if (iter == mCurrentRMessageData->mMemberBlocks.end()) 168 if (iter == mCurrentRMessageData->mMemberBlocks.end())
141 { 169 {
@@ -165,7 +193,7 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, const char *varname)
165 193
166 char *bnamep = (char *)blockname; 194 char *bnamep = (char *)blockname;
167 195
168 LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); 196 LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
169 197
170 if (iter == mCurrentRMessageData->mMemberBlocks.end()) 198 if (iter == mCurrentRMessageData->mMemberBlocks.end())
171 { 199 {
@@ -214,7 +242,7 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, S32 blocknum, const
214 char *bnamep = (char *)blockname + blocknum; 242 char *bnamep = (char *)blockname + blocknum;
215 char *vnamep = (char *)varname; 243 char *vnamep = (char *)varname;
216 244
217 LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); 245 LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep);
218 246
219 if (iter == mCurrentRMessageData->mMemberBlocks.end()) 247 if (iter == mCurrentRMessageData->mMemberBlocks.end())
220 { 248 {
@@ -497,16 +525,21 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
497 llassert( !mCurrentRMessageData ); 525 llassert( !mCurrentRMessageData );
498 delete mCurrentRMessageData; // just to make sure 526 delete mCurrentRMessageData; // just to make sure
499 527
500 S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency); 528 // The offset tells us how may bytes to skip after the end of the
529 // message name.
530 U8 offset = buffer[PHL_OFFSET];
531 S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency) + offset;
501 532
502 // create base working data set 533 // create base working data set
503 mCurrentRMessageData = new LLMsgData(mCurrentRMessageTemplate->mName); 534 mCurrentRMessageData = new LLMsgData(mCurrentRMessageTemplate->mName);
504 535
505 // loop through the template building the data structure as we go 536 // loop through the template building the data structure as we go
506 for (LLMessageTemplate::message_block_map_t::iterator iter = mCurrentRMessageTemplate->mMemberBlocks.begin(); 537 LLMessageTemplate::message_block_map_t::const_iterator iter;
507 iter != mCurrentRMessageTemplate->mMemberBlocks.end(); iter++) 538 for(iter = mCurrentRMessageTemplate->mMemberBlocks.begin();
539 iter != mCurrentRMessageTemplate->mMemberBlocks.end();
540 ++iter)
508 { 541 {
509 LLMessageBlock* mbci = iter->second; 542 LLMessageBlock* mbci = *iter;
510 U8 repeat_number; 543 U8 repeat_number;
511 S32 i; 544 S32 i;
512 545
@@ -528,11 +561,16 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
528 // repeat number is a single byte 561 // repeat number is a single byte
529 if (decode_pos >= mReceiveSize) 562 if (decode_pos >= mReceiveSize)
530 { 563 {
531 logRanOffEndOfPacket( sender ); 564 logRanOffEndOfPacket(sender);
532 return FALSE; 565
566 // default to 0 repeats
567 repeat_number = 0;
568 }
569 else
570 {
571 repeat_number = buffer[decode_pos];
572 decode_pos++;
533 } 573 }
534 repeat_number = buffer[decode_pos];
535 decode_pos++;
536 } 574 }
537 else 575 else
538 { 576 {
@@ -561,10 +599,12 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
561 mCurrentRMessageData->addBlock(cur_data_block); 599 mCurrentRMessageData->addBlock(cur_data_block);
562 600
563 // now read the variables 601 // now read the variables
564 for (LLMessageBlock::message_variable_map_t::iterator iter = mbci->mMemberVariables.begin(); 602 for (LLMessageBlock::message_variable_map_t::const_iterator iter =
603 mbci->mMemberVariables.begin();
565 iter != mbci->mMemberVariables.end(); iter++) 604 iter != mbci->mMemberVariables.end(); iter++)
566 { 605 {
567 LLMessageVariable& mvci = *(iter->second); 606 const LLMessageVariable& mvci = **iter;
607
568 // ok, build out the variables 608 // ok, build out the variables
569 // add variable block 609 // add variable block
570 cur_data_block->addVariable(mvci.getName(), mvci.getType()); 610 cur_data_block->addVariable(mvci.getName(), mvci.getType());
@@ -580,34 +620,33 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
580 620
581 if ((decode_pos + data_size) > mReceiveSize) 621 if ((decode_pos + data_size) > mReceiveSize)
582 { 622 {
583 logRanOffEndOfPacket( sender ); 623 logRanOffEndOfPacket(sender);
584 return FALSE; 624
625 // default to 0 length variable blocks
626 tsize = 0;
585 } 627 }
586 switch(data_size) 628 else
587 { 629 {
588 case 1: 630 switch(data_size)
589 htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1); 631 {
590 tsize = tsizeb; 632 case 1:
591 break; 633 htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1);
592 case 2: 634 tsize = tsizeb;
593 htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2); 635 break;
594 tsize = tsizeh; 636 case 2:
595 break; 637 htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2);
596 case 4: 638 tsize = tsizeh;
597 htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4); 639 break;
598 break; 640 case 4:
599 default: 641 htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4);
600 llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl; 642 break;
601 break; 643 default:
602 644 llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl;
645 break;
646 }
603 } 647 }
604 decode_pos += data_size; 648 decode_pos += data_size;
605 649
606 if ((decode_pos + (S32)tsize) > mReceiveSize)
607 {
608 logRanOffEndOfPacket( sender );
609 return FALSE;
610 }
611 cur_data_block->addData(mvci.getName(), &buffer[decode_pos], tsize, mvci.getType()); 650 cur_data_block->addData(mvci.getName(), &buffer[decode_pos], tsize, mvci.getType());
612 decode_pos += tsize; 651 decode_pos += tsize;
613 } 652 }
@@ -615,14 +654,24 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
615 { 654 {
616 // fixed! 655 // fixed!
617 // so, copy data pointer and set data size to fixed size 656 // so, copy data pointer and set data size to fixed size
618
619 if ((decode_pos + mvci.getSize()) > mReceiveSize) 657 if ((decode_pos + mvci.getSize()) > mReceiveSize)
620 { 658 {
621 logRanOffEndOfPacket( sender ); 659 logRanOffEndOfPacket(sender);
622 return FALSE; 660
661 // default to 0s.
662 U32 size = mvci.getSize();
663 std::vector<U8> data(size);
664 memset(&(data[0]), 0, size);
665 cur_data_block->addData(mvci.getName(), &(data[0]),
666 size, mvci.getType());
667 }
668 else
669 {
670 cur_data_block->addData(mvci.getName(),
671 &buffer[decode_pos],
672 mvci.getSize(),
673 mvci.getType());
623 } 674 }
624
625 cur_data_block->addData(mvci.getName(), &buffer[decode_pos], mvci.getSize(), mvci.getType());
626 decode_pos += mvci.getSize(); 675 decode_pos += mvci.getSize();
627 } 676 }
628 } 677 }
@@ -644,11 +693,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
644 decode_timer.reset(); 693 decode_timer.reset();
645 } 694 }
646 695
647 // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion )
648 // {
649 // VTResume(); // VTune
650 // }
651
652 { 696 {
653 LLFastTimer t(LLFastTimer::FTM_PROCESS_MESSAGES); 697 LLFastTimer t(LLFastTimer::FTM_PROCESS_MESSAGES);
654 if( !mCurrentRMessageTemplate->callHandlerFunc(gMessageSystem) ) 698 if( !mCurrentRMessageTemplate->callHandlerFunc(gMessageSystem) )
@@ -657,11 +701,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
657 } 701 }
658 } 702 }
659 703
660 // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion )
661 // {
662 // VTPause(); // VTune
663 // }
664
665 if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback()) 704 if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback())
666 { 705 {
667 F32 decode_time = decode_timer.getElapsedTimeF32(); 706 F32 decode_time = decode_timer.getElapsedTimeF32();
@@ -723,8 +762,12 @@ BOOL LLTemplateMessageReader::readMessage(const U8* buffer,
723//virtual 762//virtual
724const char* LLTemplateMessageReader::getMessageName() const 763const char* LLTemplateMessageReader::getMessageName() const
725{ 764{
726 static char empty_string[] = ""; 765 if (!mCurrentRMessageTemplate)
727 return mCurrentRMessageTemplate ? mCurrentRMessageTemplate->mName : empty_string; 766 {
767 llwarns << "no mCurrentRMessageTemplate" << llendl;
768 return "";
769 }
770 return mCurrentRMessageTemplate->mName;
728} 771}
729 772
730//virtual 773//virtual
diff --git a/linden/indra/llmessage/lltemplatemessagereader.h b/linden/indra/llmessage/lltemplatemessagereader.h
index dd5ee39..86d4ab6 100644
--- a/linden/indra/llmessage/lltemplatemessagereader.h
+++ b/linden/indra/llmessage/lltemplatemessagereader.h
@@ -1,3 +1,31 @@
1/**
2 * @file lltemplatemessagereader.h
3 * @brief Declaration of LLTemplateMessageReader class.
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
1#ifndef LL_LLTEMPLATEMESSAGEREADER_H 29#ifndef LL_LLTEMPLATEMESSAGEREADER_H
2#define LL_LLTEMPLATEMESSAGEREADER_H 30#define LL_LLTEMPLATEMESSAGEREADER_H
3 31
diff --git a/linden/indra/llmessage/lltransfermanager.cpp b/linden/indra/llmessage/lltransfermanager.cpp
index f42ce45..3de08c6 100644
--- a/linden/indra/llmessage/lltransfermanager.cpp
+++ b/linden/indra/llmessage/lltransfermanager.cpp
@@ -601,34 +601,6 @@ void LLTransferManager::processTransferAbort(LLMessageSystem *msgp, void **)
601 601
602 602
603//static 603//static
604void LLTransferManager::processTransferPriority(LLMessageSystem *msgp, void **)
605{
606 //llinfos << "LLTransferManager::processTransferPacket" << llendl;
607
608 LLUUID transfer_id;
609 LLTransferChannelType channel_type;
610 F32 priority = 0.f;
611 msgp->getUUID("TransferInfo", "TransferID", transfer_id);
612 msgp->getS32("TransferInfo", "ChannelType", (S32 &)channel_type);
613 msgp->getF32("TransferInfo", "Priority", priority);
614
615 // Hmm, not a target. Maybe it's a source.
616 LLTransferSourceChannel *tscp = gTransferManager.getSourceChannel(msgp->getSender(), channel_type);
617 if (tscp)
618 {
619 LLTransferSource *tsp = tscp->findTransferSource(transfer_id);
620 if (tsp)
621 {
622 tscp->updatePriority(tsp, priority);
623 return;
624 }
625 }
626
627 llwarns << "Couldn't find transfer " << transfer_id << " to set priority!" << llendl;
628}
629
630
631//static
632void LLTransferManager::reliablePacketCallback(void **user_data, S32 result) 604void LLTransferManager::reliablePacketCallback(void **user_data, S32 result)
633{ 605{
634 LLUUID *transfer_idp = (LLUUID *)user_data; 606 LLUUID *transfer_idp = (LLUUID *)user_data;
diff --git a/linden/indra/llmessage/lltransfermanager.h b/linden/indra/llmessage/lltransfermanager.h
index 81a0221..d063156 100644
--- a/linden/indra/llmessage/lltransfermanager.h
+++ b/linden/indra/llmessage/lltransfermanager.h
@@ -129,7 +129,6 @@ public:
129 static void processTransferInfo(LLMessageSystem *mesgsys, void **); 129 static void processTransferInfo(LLMessageSystem *mesgsys, void **);
130 static void processTransferPacket(LLMessageSystem *mesgsys, void **); 130 static void processTransferPacket(LLMessageSystem *mesgsys, void **);
131 static void processTransferAbort(LLMessageSystem *mesgsys, void **); 131 static void processTransferAbort(LLMessageSystem *mesgsys, void **);
132 static void processTransferPriority(LLMessageSystem *mesgsys, void **);
133 132
134 static void reliablePacketCallback(void **, S32 result); 133 static void reliablePacketCallback(void **, S32 result);
135 134
diff --git a/linden/indra/llmessage/message.cpp b/linden/indra/llmessage/message.cpp
index d1c2875..01dce40 100644
--- a/linden/indra/llmessage/message.cpp
+++ b/linden/indra/llmessage/message.cpp
@@ -67,9 +67,12 @@
67#include "lltemplatemessagebuilder.h" 67#include "lltemplatemessagebuilder.h"
68#include "lltemplatemessagereader.h" 68#include "lltemplatemessagereader.h"
69#include "llmessagetemplate.h" 69#include "llmessagetemplate.h"
70#include "llmessagetemplateparser.h"
70#include "llsd.h" 71#include "llsd.h"
71#include "llsdmessagebuilder.h" 72#include "llsdmessagebuilder.h"
72#include "llsdmessagereader.h" 73#include "llsdmessagereader.h"
74#include "llsdserialize.h"
75#include "llstring.h"
73#include "lltransfermanager.h" 76#include "lltransfermanager.h"
74#include "lluuid.h" 77#include "lluuid.h"
75#include "llxfermanager.h" 78#include "llxfermanager.h"
@@ -100,220 +103,28 @@ public:
100 apr_pollfd_t mPollFD; 103 apr_pollfd_t mPollFD;
101}; 104};
102 105
103// Lets support a small subset of regular expressions here
104// Syntax is a string made up of:
105// a - checks against alphanumeric ([A-Za-z0-9])
106// c - checks against character ([A-Za-z])
107// f - checks against first variable character ([A-Za-z_])
108// v - checks against variable ([A-Za-z0-9_])
109// s - checks against sign of integer ([-0-9])
110// d - checks against integer digit ([0-9])
111// * - repeat last check
112
113// checks 'a'
114BOOL b_return_alphanumeric_ok(char c)
115{
116 if ( ( (c < 'A')
117 ||(c > 'Z'))
118 &&( (c < 'a')
119 ||(c > 'z'))
120 &&( (c < '0')
121 ||(c > '9')))
122 {
123 return FALSE;
124 }
125 return TRUE;
126}
127
128// checks 'c'
129BOOL b_return_character_ok(char c)
130{
131 if ( ( (c < 'A')
132 ||(c > 'Z'))
133 &&( (c < 'a')
134 ||(c > 'z')))
135 {
136 return FALSE;
137 }
138 return TRUE;
139}
140
141// checks 'f'
142BOOL b_return_first_variable_ok(char c)
143{
144 if ( ( (c < 'A')
145 ||(c > 'Z'))
146 &&( (c < 'a')
147 ||(c > 'z'))
148 &&(c != '_'))
149 {
150 return FALSE;
151 }
152 return TRUE;
153}
154
155// checks 'v'
156BOOL b_return_variable_ok(char c)
157{
158 if ( ( (c < 'A')
159 ||(c > 'Z'))
160 &&( (c < 'a')
161 ||(c > 'z'))
162 &&( (c < '0')
163 ||(c > '9'))
164 &&(c != '_'))
165 {
166 return FALSE;
167 }
168 return TRUE;
169}
170
171// checks 's'
172BOOL b_return_signed_integer_ok(char c)
173{
174 if ( ( (c < '0')
175 ||(c > '9'))
176 &&(c != '-'))
177 {
178 return FALSE;
179 }
180 return TRUE;
181}
182
183// checks 'd'
184BOOL b_return_integer_ok(char c)
185{
186 if ( (c < '0')
187 ||(c > '9'))
188 {
189 return FALSE;
190 }
191 return TRUE;
192}
193
194BOOL (*gParseCheckCharacters[])(char c) =
195{
196 b_return_alphanumeric_ok,
197 b_return_character_ok,
198 b_return_first_variable_ok,
199 b_return_variable_ok,
200 b_return_signed_integer_ok,
201 b_return_integer_ok
202};
203
204S32 get_checker_number(char checker)
205{
206 switch(checker)
207 {
208 case 'a':
209 return 0;
210 case 'c':
211 return 1;
212 case 'f':
213 return 2;
214 case 'v':
215 return 3;
216 case 's':
217 return 4;
218 case 'd':
219 return 5;
220 case '*':
221 return 9999;
222 default:
223 return -1;
224 }
225}
226
227// check token based on passed simplified regular expression
228BOOL b_check_token(char *token, char *regexp)
229{
230 S32 tptr, rptr = 0;
231 S32 current_checker, next_checker = 0;
232
233 current_checker = get_checker_number(regexp[rptr++]);
234
235 if (current_checker == -1)
236 {
237 llerrs << "Invalid regular expression value!" << llendl;
238 return FALSE;
239 }
240
241 if (current_checker == 9999)
242 {
243 llerrs << "Regular expression can't start with *!" << llendl;
244 return FALSE;
245 }
246
247 for (tptr = 0; token[tptr]; tptr++)
248 {
249 if (current_checker == -1)
250 {
251 llerrs << "Input exceeds regular expression!\nDid you forget a *?" << llendl;
252 return FALSE;
253 }
254
255 if (!gParseCheckCharacters[current_checker](token[tptr]))
256 {
257 return FALSE;
258 }
259 if (next_checker != 9999)
260 {
261 next_checker = get_checker_number(regexp[rptr++]);
262 if (next_checker != 9999)
263 {
264 current_checker = next_checker;
265 }
266 }
267 }
268 return TRUE;
269}
270
271// C variable can be made up of upper or lower case letters, underscores, or numbers, but can't start with a number
272BOOL b_variable_ok(char *token)
273{
274 if (!b_check_token(token, "fv*"))
275 {
276 llerrs << "Token '" << token << "' isn't a variable!" << llendl;
277 return FALSE;
278 }
279 return TRUE;
280}
281
282// An integer is made up of the digits 0-9 and may be preceded by a '-'
283BOOL b_integer_ok(char *token)
284{
285 if (!b_check_token(token, "sd*"))
286 {
287 llerrs << "Token isn't an integer!" << llendl;
288 return FALSE;
289 }
290 return TRUE;
291}
292
293// An integer is made up of the digits 0-9
294BOOL b_positive_integer_ok(char *token)
295{
296 if (!b_check_token(token, "d*"))
297 {
298 llerrs << "Token isn't an integer!" << llendl;
299 return FALSE;
300 }
301 return TRUE;
302}
303
304namespace 106namespace
305{ 107{
306 class LLFnPtrResponder : public LLHTTPClient::Responder 108 class LLFnPtrResponder : public LLHTTPClient::Responder
307 { 109 {
110 LOG_CLASS(LLFnPtrResponder);
308 public: 111 public:
309 LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData) : 112 LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData, const std::string& name) :
310 mCallback(callback), 113 mCallback(callback),
311 mCallbackData(callbackData) 114 mCallbackData(callbackData),
115 mMessageName(name)
312 { 116 {
313 } 117 }
314 118
315 virtual void error(U32 status, const std::string& reason) 119 virtual void error(U32 status, const std::string& reason)
316 { 120 {
121 // don't spam when agent communication disconnected already
122 if (status != 410)
123 {
124 llwarns << "error status " << status
125 << " for message " << mMessageName
126 << " reason " << reason << llendl;
127 }
317 // TODO: Map status in to useful error code. 128 // TODO: Map status in to useful error code.
318 if(NULL != mCallback) mCallback(mCallbackData, LL_ERR_TCP_TIMEOUT); 129 if(NULL != mCallback) mCallback(mCallbackData, LL_ERR_TCP_TIMEOUT);
319 } 130 }
@@ -327,6 +138,7 @@ namespace
327 138
328 void (*mCallback)(void **,S32); 139 void (*mCallback)(void **,S32);
329 void **mCallbackData; 140 void **mCallbackData;
141 std::string mMessageName;
330 }; 142 };
331} 143}
332 144
@@ -352,10 +164,28 @@ void LLTrustedMessageService::post(LLHTTPNode::ResponsePtr response,
352 ["x-secondlife-udp-listen-port"]; 164 ["x-secondlife-udp-listen-port"];
353 165
354 LLSD message_data; 166 LLSD message_data;
355 message_data["sender"] = senderIP + ":" + senderPort; 167 std::string sender = senderIP + ":" + senderPort;
168 message_data["sender"] = sender;
356 message_data["body"] = input; 169 message_data["body"] = input;
357 170
358 LLMessageSystem::dispatch(name, message_data, response); 171 // untrusted senders should not have access to the trusted message
172 // service, but this can happen in development, so check and warn
173 LLMessageConfig::SenderTrust trust =
174 LLMessageConfig::getSenderTrustedness(name);
175 if ((trust == LLMessageConfig::TRUSTED ||
176 (trust == LLMessageConfig::NOT_SET &&
177 gMessageSystem->isTrustedMessage(name)))
178 && !gMessageSystem->isTrustedSender(LLHost(sender)))
179 {
180 llwarns << "trusted message POST to /trusted-message/"
181 << name << " from unknown or untrusted sender "
182 << sender << llendl;
183 response->status(403, "Unknown or untrusted sender");
184 }
185 else
186 {
187 LLMessageSystem::dispatch(name, message_data, response);
188 }
359} 189}
360 190
361class LLMessageHandlerBridge : public LLHTTPNode 191class LLMessageHandlerBridge : public LLHTTPNode
@@ -372,14 +202,15 @@ void LLMessageHandlerBridge::post(LLHTTPNode::ResponsePtr response,
372 const LLSD& context, const LLSD& input) const 202 const LLSD& context, const LLSD& input) const
373{ 203{
374 std::string name = context["request"]["wildcard"]["message-name"]; 204 std::string name = context["request"]["wildcard"]["message-name"];
375 205 char* namePtr = gMessageStringTable.getString(name.c_str());
206
376 lldebugs << "Setting mLastSender " << input["sender"].asString() << llendl; 207 lldebugs << "Setting mLastSender " << input["sender"].asString() << llendl;
377 gMessageSystem->mLastSender = LLHost(input["sender"].asString()); 208 gMessageSystem->mLastSender = LLHost(input["sender"].asString());
378 gMessageSystem->mPacketsIn += 1; 209 gMessageSystem->mPacketsIn += 1;
379 gMessageSystem->mLLSDMessageReader->setMessage(name, input["body"]); 210 gMessageSystem->mLLSDMessageReader->setMessage(namePtr, input["body"]);
380 gMessageSystem->mMessageReader = gMessageSystem->mLLSDMessageReader; 211 gMessageSystem->mMessageReader = gMessageSystem->mLLSDMessageReader;
381 212
382 if(gMessageSystem->callHandler(name.c_str(), false, gMessageSystem)) 213 if(gMessageSystem->callHandler(namePtr, false, gMessageSystem))
383 { 214 {
384 response->result(LLSD()); 215 response->result(LLSD());
385 } 216 }
@@ -401,6 +232,12 @@ LLUseCircuitCodeResponder::~LLUseCircuitCodeResponder()
401 // even abstract base classes need a concrete destructor 232 // even abstract base classes need a concrete destructor
402} 233}
403 234
235static const char* nullToEmpty(const char* s)
236{
237 static char emptyString[] = "";
238 return s? s : emptyString;
239}
240
404void LLMessageSystem::init() 241void LLMessageSystem::init()
405{ 242{
406 // initialize member variables 243 // initialize member variables
@@ -440,7 +277,6 @@ void LLMessageSystem::init()
440 mIncomingCompressedSize = 0; 277 mIncomingCompressedSize = 0;
441 mCurrentRecvPacketID = 0; 278 mCurrentRecvPacketID = 0;
442 279
443 mMessageFileChecksum = 0;
444 mMessageFileVersionNumber = 0.f; 280 mMessageFileVersionNumber = 0.f;
445 281
446 mTimingCallback = NULL; 282 mTimingCallback = NULL;
@@ -454,9 +290,7 @@ void LLMessageSystem::init()
454LLMessageSystem::LLMessageSystem(const char *filename, U32 port, 290LLMessageSystem::LLMessageSystem(const char *filename, U32 port,
455 S32 version_major, 291 S32 version_major,
456 S32 version_minor, 292 S32 version_minor,
457 S32 version_patch) : 293 S32 version_patch)
458 mTemplateConfirmed(FALSE),
459 mTemplateMatches(FALSE)
460{ 294{
461 init(); 295 init();
462 296
@@ -529,6 +363,8 @@ LLMessageSystem::LLMessageSystem(const char *filename, U32 port,
529 mTrueReceiveSize = 0; 363 mTrueReceiveSize = 0;
530} 364}
531 365
366
367
532// Read file and build message templates 368// Read file and build message templates
533void LLMessageSystem::loadTemplateFile(const char* filename) 369void LLMessageSystem::loadTemplateFile(const char* filename)
534{ 370{
@@ -539,797 +375,23 @@ void LLMessageSystem::loadTemplateFile(const char* filename)
539 return; 375 return;
540 } 376 }
541 377
542 char token[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ 378 LLString template_body;
543 379 if(!LLString::read(template_body, filename))
544 // state variables
545 BOOL b_template_start = TRUE;
546 BOOL b_template_end = FALSE;
547 BOOL b_template = FALSE;
548 BOOL b_block_start = FALSE;
549 BOOL b_block_end = FALSE;
550 BOOL b_block = FALSE;
551 BOOL b_variable_start = FALSE;
552 BOOL b_variable_end = FALSE;
553 BOOL b_variable = FALSE;
554 //BOOL b_in_comment_block = FALSE; // not yet used
555
556 // working temp variables
557 LLMessageTemplate *templatep = NULL;
558 char template_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */
559
560 LLMessageBlock *blockp = NULL;
561 char block_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */
562
563 LLMessageVariable var;
564 char var_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */
565 char formatString[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */
566
567 FILE* messagefilep = NULL;
568 mMessageFileChecksum = 0;
569 mMessageFileVersionNumber = 0.f;
570 S32 checksum_offset = 0;
571 char* checkp = NULL;
572
573 // scanf needs 1 byte more than width, thus the MAX_... -1.
574 snprintf( /* Flawfinder: ignore */
575 formatString,
576 sizeof(formatString),
577 "%%%ds",
578 MAX_MESSAGE_INTERNAL_NAME_SIZE - 1);
579 messagefilep = LLFile::fopen(filename, "r"); /* Flawfinder: ignore */
580 if (messagefilep)
581 {
582// mName = gMessageStringTable.getString(filename);
583
584 fseek(messagefilep, 0L, SEEK_SET );
585 while(fscanf(messagefilep, formatString, token) != EOF) /* Flawfinder: ignore */
586 {
587 // skip comments
588 if (token[0] == '/')
589 {
590 // skip to end of line
591 while (token[0] != 10)
592 fscanf(messagefilep, "%c", token);
593 continue;
594 }
595
596 checkp = token;
597
598 while (*checkp)
599 {
600 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
601 checksum_offset = (checksum_offset + 8) % 32;
602 }
603
604 // what are we looking for
605 if (!strcmp(token, "{"))
606 {
607 // is that a legit option?
608 if (b_template_start)
609 {
610 // yup!
611 b_template_start = FALSE;
612
613 // remember that it could be only a signal message, so name is all that it contains
614 b_template_end = TRUE;
615
616 // start working on it!
617 b_template = TRUE;
618 }
619 else if (b_block_start)
620 {
621 // yup!
622 b_block_start = FALSE;
623 b_template_end = FALSE;
624
625 // start working on it!
626 b_block = TRUE;
627 }
628 else if (b_variable_start)
629 {
630 // yup!
631 b_variable_start = FALSE;
632 b_block_end = FALSE;
633
634 // start working on it!
635 b_variable = TRUE;
636 }
637 else
638 {
639 llerrs << "Detcted unexpected token '" << token
640 << "' while parsing template." << llendl;
641 mbError = TRUE;
642 fclose(messagefilep);
643 return;
644 }
645 }
646
647 if (!strcmp(token, "}"))
648 {
649 // is that a legit option?
650 if (b_template_end)
651 {
652 // yup!
653 b_template_end = FALSE;
654 b_template = FALSE;
655 b_block_start = FALSE;
656
657 // add data!
658 // we've gotten a complete variable! hooray!
659 // add it!
660 if (NULL == templatep)
661 {
662 llerrs << "Trying to addTemplate a NULL templatep during load." << llendl;
663 mbError = TRUE;
664 fclose(messagefilep);
665 return;
666 }
667 addTemplate(templatep);
668
669 //llinfos << "Read template: "templatep->mNametemp_str
670 // << llendl;
671
672 // look for next one!
673 b_template_start = TRUE;
674 }
675 else if (b_block_end)
676 {
677 // yup!
678 b_block_end = FALSE;
679 b_variable_start = FALSE;
680
681 // add data!
682 // we've gotten a complete variable! hooray!
683 // add it to template
684 if (NULL == templatep)
685 {
686 llerrs << "Trying to addBlock to NULL templatep during load." << llendl;
687 mbError = TRUE;
688 fclose(messagefilep);
689 return;
690 }
691 templatep->addBlock(blockp);
692
693 // start working on it!
694 b_template_end = TRUE;
695 b_block_start = TRUE;
696 }
697 else if (b_variable_end)
698 {
699 // yup!
700 b_variable_end = FALSE;
701
702 // add data!
703 // we've gotten a complete variable! hooray!
704 // add it to block
705 blockp->addVariable(var.getName(), var.getType(), var.getSize());
706
707 // start working on it!
708 b_variable_start = TRUE;
709 b_block_end = TRUE;
710 }
711 else
712 {
713 llerrs << "Detcted unexpected token '" << token
714 << "' while parsing template." << llendl;
715 mbError = TRUE;
716 fclose(messagefilep);
717 return;
718 }
719 }
720
721 // now, are we looking to start a template?
722 if (b_template)
723 {
724
725 b_template = FALSE;
726
727 // name first
728 if (fscanf(messagefilep, formatString, template_name) == EOF) /* Flawfinder: ignore */
729 {
730 // oops, file ended
731 llerrs << "Expected message template name, but file ended"
732 << llendl;
733 mbError = TRUE;
734 fclose(messagefilep);
735 return;
736 }
737
738 // debugging to help figure out busted templates
739 //llinfos << template_name << llendl;
740
741 // is name a legit C variable name
742 if (!b_variable_ok(template_name))
743 {
744 // nope!
745 llerrs << "Not legal message template name: "
746 << template_name << llendl;
747 mbError = TRUE;
748 fclose(messagefilep);
749 return;
750 }
751
752 checkp = template_name;
753 while (*checkp)
754 {
755 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
756 checksum_offset = (checksum_offset + 8) % 32;
757 }
758
759 // ok, now get Frequency ("High", "Medium", or "Low")
760 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
761 {
762 // oops, file ended
763 llerrs << "Expected message template frequency, found EOF."
764 << llendl;
765 mbError = TRUE;
766 fclose(messagefilep);
767 return;
768 }
769
770 checkp = token;
771 while (*checkp)
772 {
773 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
774 checksum_offset = (checksum_offset + 8) % 32;
775 }
776
777 // which one is it?
778 if (!strcmp(token, "High"))
779 {
780 if (++mNumberHighFreqMessages == 255)
781 {
782 // oops, too many High Frequency messages!!
783 llerrs << "Message " << template_name
784 << " exceeded 254 High frequency messages!"
785 << llendl;
786 mbError = TRUE;
787 fclose(messagefilep);
788 return;
789 }
790 // ok, we can create a template!
791 // message number is just mNumberHighFreqMessages
792 templatep = new LLMessageTemplate(template_name, mNumberHighFreqMessages, MFT_HIGH);
793 //lldebugs << "Template " << template_name << " # "
794 // << std::hex << mNumberHighFreqMessages
795 // << std::dec << " high"
796 // << llendl;
797 }
798 else if (!strcmp(token, "Medium"))
799 {
800 if (++mNumberMediumFreqMessages == 255)
801 {
802 // oops, too many Medium Frequency messages!!
803 llerrs << "Message " << template_name
804 << " exceeded 254 Medium frequency messages!"
805 << llendl;
806 mbError = TRUE;
807 fclose(messagefilep);
808 return;
809 }
810 // ok, we can create a template!
811 // message number is ((255 << 8) | mNumberMediumFreqMessages)
812 templatep = new LLMessageTemplate(template_name, (255 << 8) | mNumberMediumFreqMessages, MFT_MEDIUM);
813 //lldebugs << "Template " << template_name << " # "
814 // << std::hex << mNumberMediumFreqMessages
815 // << std::dec << " medium"
816 // << llendl;
817 }
818 else if (!strcmp(token, "Low"))
819 {
820 if (++mNumberLowFreqMessages == 65535)
821 {
822 // oops, too many High Frequency messages!!
823 llerrs << "Message " << template_name
824 << " exceeded 65534 Low frequency messages!"
825 << llendl;
826 mbError = TRUE;
827 fclose(messagefilep);
828 return;
829 }
830 // ok, we can create a template!
831 // message number is ((255 << 24) | (255 << 16) | mNumberLowFreqMessages)
832 templatep = new LLMessageTemplate(template_name, (255 << 24) | (255 << 16) | mNumberLowFreqMessages, MFT_LOW);
833 //lldebugs << "Template " << template_name << " # "
834 // << std::hex << mNumberLowFreqMessages
835 // << std::dec << " low"
836 // << llendl;
837 }
838 else if (!strcmp(token, "Fixed"))
839 {
840 U32 message_num = 0;
841 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
842 {
843 // oops, file ended
844 llerrs << "Expected message template number (fixed),"
845 << " found EOF." << llendl;
846 mbError = TRUE;
847 fclose(messagefilep);
848 return;
849 }
850
851 checkp = token;
852 while (*checkp)
853 {
854 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
855 checksum_offset = (checksum_offset + 8) % 32;
856 }
857
858 message_num = strtoul(token,NULL,0);
859
860 // ok, we can create a template!
861 // message number is ((255 << 24) | (255 << 16) | mNumberLowFreqMessages)
862 templatep = new LLMessageTemplate(template_name, message_num, MFT_LOW);
863 }
864 else
865 {
866 // oops, bad frequency line
867 llerrs << "Bad frequency! " << token
868 << " isn't High, Medium, or Low" << llendl
869 mbError = TRUE;
870 fclose(messagefilep);
871 return;
872 }
873
874 // Now get trust ("Trusted", "NotTrusted")
875 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
876 {
877 // File ended
878 llerrs << "Expected message template "
879 "trust, but file ended."
880 << llendl;
881 mbError = TRUE;
882 fclose(messagefilep);
883 return;
884 }
885 checkp = token;
886 while (*checkp)
887 {
888 mMessageFileChecksum += ((U32) *checkp++) << checksum_offset;
889 checksum_offset = (checksum_offset + 8) % 32;
890 }
891
892 if (strcmp(token, "Trusted") == 0)
893 {
894 if (NULL == templatep)
895 {
896 llerrs << "Trying to setTrust for NULL templatep during load." << llendl;
897 mbError = TRUE;
898 fclose(messagefilep);
899 return;
900 }
901 templatep->setTrust(MT_TRUST);
902 }
903 else if (strcmp(token, "NotTrusted") == 0)
904 {
905 if (NULL == templatep)
906 {
907 llerrs << "Trying to setTrust for NULL templatep during load." << llendl;
908 mbError = TRUE;
909 fclose(messagefilep);
910 return;
911 }
912 templatep->setTrust(MT_NOTRUST);
913 }
914 else
915 {
916 // bad trust token
917 llerrs << "bad trust: " << token
918 << " isn't Trusted or NotTrusted"
919 << llendl;
920 mbError = TRUE;
921 fclose(messagefilep);
922 return;
923 }
924
925 // get encoding
926 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
927 {
928 // File ended
929 llerrs << "Expected message encoding, but file ended."
930 << llendl;
931 mbError = TRUE;
932 fclose(messagefilep);
933 return;
934 }
935 checkp = token;
936 while(*checkp)
937 {
938 mMessageFileChecksum += ((U32) *checkp++) << checksum_offset;
939 checksum_offset = (checksum_offset + 8) % 32;
940 }
941
942 if(0 == strcmp(token, "Unencoded"))
943 {
944 if (NULL == templatep)
945 {
946 llerrs << "Trying to setEncoding for NULL templatep during load." << llendl;
947 mbError = TRUE;
948 fclose(messagefilep);
949 return;
950 }
951 templatep->setEncoding(ME_UNENCODED);
952 }
953 else if(0 == strcmp(token, "Zerocoded"))
954 {
955 if (NULL == templatep)
956 {
957 llerrs << "Trying to setEncoding for NULL templatep during load." << llendl;
958 mbError = TRUE;
959 fclose(messagefilep);
960 return;
961 }
962 templatep->setEncoding(ME_ZEROCODED);
963 }
964 else
965 {
966 // bad trust token
967 llerrs << "bad encoding: " << token
968 << " isn't Unencoded or Zerocoded" << llendl;
969 mbError = TRUE;
970 fclose(messagefilep);
971 return;
972 }
973
974 // ok, now we need to look for a block
975 b_block_start = TRUE;
976 continue;
977 }
978
979 // now, are we looking to start a template?
980 if (b_block)
981 {
982 b_block = FALSE;
983 // ok, need to pull header info
984
985 // name first
986 if (fscanf(messagefilep, formatString, block_name) == EOF) /* Flawfinder: ignore */
987 {
988 // oops, file ended
989 llerrs << "Expected block name, but file ended" << llendl;
990 mbError = TRUE;
991 fclose(messagefilep);
992 return;
993 }
994
995 checkp = block_name;
996 while (*checkp)
997 {
998 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
999 checksum_offset = (checksum_offset + 8) % 32;
1000 }
1001
1002 // is name a legit C variable name
1003 if (!b_variable_ok(block_name))
1004 {
1005 // nope!
1006 llerrs << block_name << "is not a legal block name"
1007 << llendl;
1008 mbError = TRUE;
1009 fclose(messagefilep);
1010 return;
1011 }
1012
1013 // now, block type ("Single", "Multiple", or "Variable")
1014 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
1015 {
1016 // oops, file ended
1017 llerrs << "Expected block type, but file ended." << llendl;
1018 mbError = TRUE;
1019 fclose(messagefilep);
1020 return;
1021 }
1022
1023 checkp = token;
1024 while (*checkp)
1025 {
1026 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
1027 checksum_offset = (checksum_offset + 8) % 32;
1028 }
1029
1030 // which one is it?
1031 if (!strcmp(token, "Single"))
1032 {
1033 // ok, we can create a block
1034 blockp = new LLMessageBlock(block_name, MBT_SINGLE);
1035 }
1036 else if (!strcmp(token, "Multiple"))
1037 {
1038 // need to get the number of repeats
1039 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
1040 {
1041 // oops, file ended
1042 llerrs << "Expected block multiple count,"
1043 " but file ended." << llendl;
1044 mbError = TRUE;
1045 fclose(messagefilep);
1046 return;
1047 }
1048
1049 checkp = token;
1050 while (*checkp)
1051 {
1052 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
1053 checksum_offset = (checksum_offset + 8) % 32;
1054 }
1055
1056 // is it a legal integer
1057 if (!b_positive_integer_ok(token))
1058 {
1059 // nope!
1060 llerrs << token << "is not a legal integer for"
1061 " block multiple count" << llendl;
1062 mbError = TRUE;
1063 fclose(messagefilep);
1064 return;
1065 }
1066 // ok, we can create a block
1067 blockp = new LLMessageBlock(block_name, MBT_MULTIPLE, atoi(token));
1068 }
1069 else if (!strcmp(token, "Variable"))
1070 {
1071 // ok, we can create a block
1072 blockp = new LLMessageBlock(block_name, MBT_VARIABLE);
1073 }
1074 else
1075 {
1076 // oops, bad block type
1077 llerrs << "Bad block type! " << token
1078 << " isn't Single, Multiple, or Variable" << llendl;
1079 mbError = TRUE;
1080 fclose(messagefilep);
1081 return;
1082 }
1083 // ok, now we need to look for a variable
1084 b_variable_start = TRUE;
1085 continue;
1086 }
1087
1088 // now, are we looking to start a template?
1089 if (b_variable)
1090 {
1091 b_variable = FALSE;
1092 // ok, need to pull header info
1093
1094 // name first
1095 if (fscanf(messagefilep, formatString, var_name) == EOF) /* Flawfinder: ignore */
1096 {
1097 // oops, file ended
1098 llerrs << "Expected variable name, but file ended."
1099 << llendl;
1100 mbError = TRUE;
1101 fclose(messagefilep);
1102 return;
1103 }
1104
1105 checkp = var_name;
1106 while (*checkp)
1107 {
1108 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
1109 checksum_offset = (checksum_offset + 8) % 32;
1110 }
1111
1112 // is name a legit C variable name
1113 if (!b_variable_ok(var_name))
1114 {
1115 // nope!
1116 llerrs << var_name << " is not a legal variable name"
1117 << llendl;
1118 mbError = TRUE;
1119 fclose(messagefilep);
1120 return;
1121 }
1122
1123 // now, variable type ("Fixed" or "Variable")
1124 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
1125 {
1126 // oops, file ended
1127 llerrs << "Expected variable type, but file ended"
1128 << llendl;
1129 mbError = TRUE;
1130 fclose(messagefilep);
1131 return;
1132 }
1133
1134 checkp = token;
1135 while (*checkp)
1136 {
1137 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
1138 checksum_offset = (checksum_offset + 8) % 32;
1139 }
1140
1141
1142 // which one is it?
1143 if (!strcmp(token, "U8"))
1144 {
1145 var = LLMessageVariable(var_name, MVT_U8, 1);
1146 }
1147 else if (!strcmp(token, "U16"))
1148 {
1149 var = LLMessageVariable(var_name, MVT_U16, 2);
1150 }
1151 else if (!strcmp(token, "U32"))
1152 {
1153 var = LLMessageVariable(var_name, MVT_U32, 4);
1154 }
1155 else if (!strcmp(token, "U64"))
1156 {
1157 var = LLMessageVariable(var_name, MVT_U64, 8);
1158 }
1159 else if (!strcmp(token, "S8"))
1160 {
1161 var = LLMessageVariable(var_name, MVT_S8, 1);
1162 }
1163 else if (!strcmp(token, "S16"))
1164 {
1165 var = LLMessageVariable(var_name, MVT_S16, 2);
1166 }
1167 else if (!strcmp(token, "S32"))
1168 {
1169 var = LLMessageVariable(var_name, MVT_S32, 4);
1170 }
1171 else if (!strcmp(token, "S64"))
1172 {
1173 var = LLMessageVariable(var_name, MVT_S64, 8);
1174 }
1175 else if (!strcmp(token, "F32"))
1176 {
1177 var = LLMessageVariable(var_name, MVT_F32, 4);
1178 }
1179 else if (!strcmp(token, "F64"))
1180 {
1181 var = LLMessageVariable(var_name, MVT_F64, 8);
1182 }
1183 else if (!strcmp(token, "LLVector3"))
1184 {
1185 var = LLMessageVariable(var_name, MVT_LLVector3, 12);
1186 }
1187 else if (!strcmp(token, "LLVector3d"))
1188 {
1189 var = LLMessageVariable(var_name, MVT_LLVector3d, 24);
1190 }
1191 else if (!strcmp(token, "LLVector4"))
1192 {
1193 var = LLMessageVariable(var_name, MVT_LLVector4, 16);
1194 }
1195 else if (!strcmp(token, "LLQuaternion"))
1196 {
1197 var = LLMessageVariable(var_name, MVT_LLQuaternion, 12);
1198 }
1199 else if (!strcmp(token, "LLUUID"))
1200 {
1201 var = LLMessageVariable(var_name, MVT_LLUUID, 16);
1202 }
1203 else if (!strcmp(token, "BOOL"))
1204 {
1205 var = LLMessageVariable(var_name, MVT_BOOL, 1);
1206 }
1207 else if (!strcmp(token, "IPADDR"))
1208 {
1209 var = LLMessageVariable(var_name, MVT_IP_ADDR, 4);
1210 }
1211 else if (!strcmp(token, "IPPORT"))
1212 {
1213 var = LLMessageVariable(var_name, MVT_IP_PORT, 2);
1214 }
1215 else if (!strcmp(token, "Fixed"))
1216 {
1217 // need to get the variable size
1218 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
1219 {
1220 // oops, file ended
1221 llerrs << "Expected variable size, but file ended"
1222 << llendl;
1223 mbError = TRUE;
1224 fclose(messagefilep);
1225 return;
1226 }
1227
1228 checkp = token;
1229 while (*checkp)
1230 {
1231 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
1232 checksum_offset = (checksum_offset + 8) % 32;
1233 }
1234
1235 // is it a legal integer
1236 if (!b_positive_integer_ok(token))
1237 {
1238 // nope!
1239 llerrs << token << " is not a legal integer for"
1240 " variable size" << llendl;
1241 mbError = TRUE;
1242 fclose(messagefilep);
1243 return;
1244 }
1245 // ok, we can create a block
1246 var = LLMessageVariable(var_name, MVT_FIXED, atoi(token));
1247 }
1248 else if (!strcmp(token, "Variable"))
1249 {
1250 // need to get the variable size
1251 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
1252 {
1253 // oops, file ended
1254 llerrs << "Expected variable size, but file ended"
1255 << llendl;
1256 mbError = TRUE;
1257 fclose(messagefilep);
1258 return;
1259 }
1260
1261 checkp = token;
1262 while (*checkp)
1263 {
1264 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
1265 checksum_offset = (checksum_offset + 8) % 32;
1266 }
1267
1268 // is it a legal integer
1269 if (!b_positive_integer_ok(token))
1270 {
1271 // nope!
1272 llerrs << token << "is not a legal integer"
1273 " for variable size" << llendl;
1274 mbError = TRUE;
1275 fclose(messagefilep);
1276 return;
1277 }
1278 // ok, we can create a block
1279 var = LLMessageVariable(var_name, MVT_VARIABLE, atoi(token));
1280 }
1281 else
1282 {
1283 // oops, bad variable type
1284 llerrs << "Bad variable type! " << token
1285 << " isn't Fixed or Variable" << llendl;
1286 mbError = TRUE;
1287 fclose(messagefilep);
1288 return;
1289 }
1290
1291 // we got us a variable!
1292 b_variable_end = TRUE;
1293 continue;
1294 }
1295
1296 // do we have a version number stuck in the file?
1297 if (!strcmp(token, "version"))
1298 {
1299 // version number
1300 if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */
1301 {
1302 // oops, file ended
1303 llerrs << "Expected version number, but file ended"
1304 << llendl;
1305 mbError = TRUE;
1306 fclose(messagefilep);
1307 return;
1308 }
1309
1310 checkp = token;
1311 while (*checkp)
1312 {
1313 mMessageFileChecksum += ((U32)*checkp++) << checksum_offset;
1314 checksum_offset = (checksum_offset + 8) % 32;
1315 }
1316
1317 mMessageFileVersionNumber = (F32)atof(token);
1318
1319// llinfos << "### Message template version " << mMessageFileVersionNumber << " ###" << llendl;
1320 continue;
1321 }
1322 }
1323
1324 llinfos << "Message template checksum = " << std::hex << mMessageFileChecksum << std::dec << llendl;
1325 }
1326 else
1327 { 380 {
1328 llwarns << "Failed to open template: " << filename << llendl; 381 llwarns << "Failed to open template: " << filename << llendl;
1329 mbError = TRUE; 382 mbError = TRUE;
1330 return; 383 return;
1331 } 384 }
1332 fclose(messagefilep); 385
386 LLTemplateTokenizer tokens(template_body);
387 LLTemplateParser parsed(tokens);
388 mMessageFileVersionNumber = parsed.getVersion();
389 for(LLTemplateParser::message_iterator iter = parsed.getMessagesBegin();
390 iter != parsed.getMessagesEnd();
391 iter++)
392 {
393 addTemplate(*iter);
394 }
1333} 395}
1334 396
1335 397
@@ -1393,6 +455,94 @@ BOOL LLMessageSystem::poll(F32 seconds)
1393 } 455 }
1394} 456}
1395 457
458bool LLMessageSystem::isTrustedSender(const LLHost& host) const
459{
460 LLCircuitData* cdp = mCircuitInfo.findCircuit(host);
461 if(NULL == cdp)
462 {
463 return false;
464 }
465 return cdp->getTrusted();
466}
467
468static LLMessageSystem::message_template_name_map_t::const_iterator
469findTemplate(const LLMessageSystem::message_template_name_map_t& templates,
470 std::string name)
471{
472 const char* namePrehash = gMessageStringTable.getString(name.c_str());
473 if(NULL == namePrehash) {return templates.end();}
474 return templates.find(namePrehash);
475}
476
477bool LLMessageSystem::isTrustedMessage(const std::string& name) const
478{
479 message_template_name_map_t::const_iterator iter =
480 findTemplate(mMessageTemplates, name);
481 if(iter == mMessageTemplates.end()) {return false;}
482 return iter->second->getTrust() == MT_TRUST;
483}
484
485bool LLMessageSystem::isUntrustedMessage(const std::string& name) const
486{
487 message_template_name_map_t::const_iterator iter =
488 findTemplate(mMessageTemplates, name);
489 if(iter == mMessageTemplates.end()) {return false;}
490 return iter->second->getTrust() == MT_NOTRUST;
491}
492
493LLCircuitData* LLMessageSystem::findCircuit(const LLHost& host,
494 bool resetPacketId)
495{
496 LLCircuitData* cdp = mCircuitInfo.findCircuit(host);
497 if (!cdp)
498 {
499 // This packet comes from a circuit we don't know about.
500
501 // Are we rejecting off-circuit packets?
502 if (mbProtected)
503 {
504 // cdp is already NULL, so we don't need to unset it.
505 }
506 else
507 {
508 // nope, open the new circuit
509 cdp = mCircuitInfo.addCircuitData(host, mCurrentRecvPacketID);
510
511 if(resetPacketId)
512 {
513 // I added this - I think it's correct - DJS
514 // reset packet in ID
515 cdp->setPacketInID(mCurrentRecvPacketID);
516 }
517 // And claim the packet is on the circuit we just added.
518 }
519 }
520 else
521 {
522 // this is an old circuit. . . is it still alive?
523 if (!cdp->isAlive())
524 {
525 // nope. don't accept if we're protected
526 if (mbProtected)
527 {
528 // don't accept packets from unexpected sources
529 cdp = NULL;
530 }
531 else
532 {
533 // wake up the circuit
534 cdp->setAlive(TRUE);
535
536 if(resetPacketId)
537 {
538 // reset packet in ID
539 cdp->setPacketInID(mCurrentRecvPacketID);
540 }
541 }
542 }
543 }
544 return cdp;
545}
1396 546
1397// Returns TRUE if a valid, on-circuit message has been received. 547// Returns TRUE if a valid, on-circuit message has been received.
1398BOOL LLMessageSystem::checkMessages( S64 frame_count ) 548BOOL LLMessageSystem::checkMessages( S64 frame_count )
@@ -1471,71 +621,12 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
1471 } 621 }
1472 622
1473 // process the message as normal 623 // process the message as normal
1474 624 mIncomingCompressedSize = zeroCodeExpand(&buffer, &receive_size);
1475 mIncomingCompressedSize = zeroCodeExpand(&buffer,&receive_size); 625 mCurrentRecvPacketID = ntohl(*((U32*)(&buffer[1])));
1476 mCurrentRecvPacketID = buffer[1] + ((buffer[0] & 0x0f ) * 256);
1477 if (sizeof(TPACKETID) == 4)
1478 {
1479 mCurrentRecvPacketID *= 256;
1480 mCurrentRecvPacketID += buffer[2];
1481 mCurrentRecvPacketID *= 256;
1482 mCurrentRecvPacketID += buffer[3];
1483 }
1484
1485 host = getSender(); 626 host = getSender();
1486 //llinfos << host << ":" << mCurrentRecvPacketID << llendl;
1487 627
1488 // For testing the weird case we're having in the office where the first few packets 628 const bool resetPacketId = true;
1489 // on a connection get dropped 629 cdp = findCircuit(host, resetPacketId);
1490 //if ((mCurrentRecvPacketID < 8) && !(buffer[0] & LL_RESENT_FLAG))
1491 //{
1492 // llinfos << "Evil! Dropping " << mCurrentRecvPacketID << " from " << host << " for fun!" << llendl;
1493 // continue;
1494 //}
1495
1496 cdp = mCircuitInfo.findCircuit(host);
1497 if (!cdp)
1498 {
1499 // This packet comes from a circuit we don't know about.
1500
1501 // Are we rejecting off-circuit packets?
1502 if (mbProtected)
1503 {
1504 // cdp is already NULL, so we don't need to unset it.
1505 }
1506 else
1507 {
1508 // nope, open the new circuit
1509 cdp = mCircuitInfo.addCircuitData(host, mCurrentRecvPacketID);
1510
1511 // I added this - I think it's correct - DJS
1512 // reset packet in ID
1513 cdp->setPacketInID(mCurrentRecvPacketID);
1514
1515 // And claim the packet is on the circuit we just added.
1516 }
1517 }
1518 else
1519 {
1520 // this is an old circuit. . . is it still alive?
1521 if (!cdp->isAlive())
1522 {
1523 // nope. don't accept if we're protected
1524 if (mbProtected)
1525 {
1526 // don't accept packets from unexpected sources
1527 cdp = NULL;
1528 }
1529 else
1530 {
1531 // wake up the circuit
1532 cdp->setAlive(TRUE);
1533
1534 // reset packet in ID
1535 cdp->setPacketInID(mCurrentRecvPacketID);
1536 }
1537 }
1538 }
1539 630
1540 // At this point, cdp is now a pointer to the circuit that 631 // At this point, cdp is now a pointer to the circuit that
1541 // this message came in on if it's valid, and NULL if the 632 // this message came in on if it's valid, and NULL if the
@@ -1664,6 +755,10 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
1664 755
1665 if (valid_packet) 756 if (valid_packet)
1666 { 757 {
758 // enable this for output of message names
759 //llinfos << "< \"" << mTemplateMessageReader->getMessageName()
760 //<< "\"" << llendl;
761
1667 /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages. 762 /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages.
1668 if( 1 ) 763 if( 1 )
1669 { 764 {
@@ -1768,9 +863,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count )
1768 { 863 {
1769 if (mbProtected && (!cdp)) 864 if (mbProtected && (!cdp))
1770 { 865 {
1771 llwarns << "Packet " 866 llwarns << "Invalid Packet from invalid circuit " << host << llendl;
1772 << mTemplateMessageReader->getMessageName()
1773 << " from invalid circuit " << host << llendl;
1774 mOffCircuitPackets++; 867 mOffCircuitPackets++;
1775 } 868 }
1776 else 869 else
@@ -2051,15 +1144,34 @@ S32 LLMessageSystem::flushReliable(const LLHost &host)
2051 return send_bytes; 1144 return send_bytes;
2052} 1145}
2053 1146
2054 1147LLHTTPClient::ResponderPtr LLMessageSystem::createResponder(const std::string& name)
1148{
1149 if(mSendReliable)
1150 {
1151 return new LLFnPtrResponder(mReliablePacketParams.mCallback,
1152 mReliablePacketParams.mCallbackData,
1153 name);
1154 }
1155 else
1156 {
1157 llwarns << "LLMessageSystem::sendMessage: Sending unreliable "
1158 << mMessageBuilder->getMessageName() << " message via HTTP"
1159 << llendl;
1160 return new LLFnPtrResponder(NULL, NULL,
1161 mMessageBuilder->getMessageName());
1162 }
1163}
1164
2055// This can be called from signal handlers, 1165// This can be called from signal handlers,
2056// so should should not use llinfos. 1166// so should should not use llinfos.
2057S32 LLMessageSystem::sendMessage(const LLHost &host) 1167S32 LLMessageSystem::sendMessage(const LLHost &host)
2058{ 1168{
2059 if (! mMessageBuilder->isBuilt()) 1169 if (! mMessageBuilder->isBuilt())
2060 { 1170 {
2061 mSendSize = mMessageBuilder->buildMessage(mSendBuffer, 1171 mSendSize = mMessageBuilder->buildMessage(
2062 MAX_BUFFER_SIZE); 1172 mSendBuffer,
1173 MAX_BUFFER_SIZE,
1174 0);
2063 } 1175 }
2064 1176
2065 if (!(host.isOk())) // if port and ip are zero, don't bother trying to send the message 1177 if (!(host.isOk())) // if port and ip are zero, don't bother trying to send the message
@@ -2088,6 +1200,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
2088 else 1200 else
2089 { 1201 {
2090 // nope, open the new circuit 1202 // nope, open the new circuit
1203
2091 cdp = mCircuitInfo.addCircuitData(host, 0); 1204 cdp = mCircuitInfo.addCircuitData(host, 0);
2092 } 1205 }
2093 } 1206 }
@@ -2115,33 +1228,23 @@ S32 LLMessageSystem::sendMessage(const LLHost &host)
2115 LLSD message = mLLSDMessageBuilder->getMessage(); 1228 LLSD message = mLLSDMessageBuilder->getMessage();
2116 1229
2117 const LLHTTPSender& sender = LLHTTPSender::getSender(host); 1230 const LLHTTPSender& sender = LLHTTPSender::getSender(host);
2118 LLHTTPClient::ResponderPtr responder = NULL;
2119 if(mSendReliable)
2120 {
2121 responder =
2122 new LLFnPtrResponder(mReliablePacketParams.mCallback,
2123 mReliablePacketParams.mCallbackData);
2124 }
2125 else
2126 {
2127 llwarns << "LLMessageSystem::sendMessage: Sending unreliable " << mMessageBuilder->getMessageName() << " message via HTTP" << llendl;
2128 responder = new LLFnPtrResponder(NULL, NULL);
2129 }
2130 sender.send(host, mLLSDMessageBuilder->getMessageName(), 1231 sender.send(host, mLLSDMessageBuilder->getMessageName(),
2131 message, responder); 1232 message, createResponder(mLLSDMessageBuilder->getMessageName()));
2132 1233
2133 mSendReliable = FALSE; 1234 mSendReliable = FALSE;
2134 mReliablePacketParams.clear(); 1235 mReliablePacketParams.clear();
2135 return 1; 1236 return 1;
2136 } 1237 }
2137 1238
2138 memset(mSendBuffer,0,LL_PACKET_ID_SIZE); // zero out the packet ID field 1239 // zero out the flags and packetid. Subtract 1 here so that we do
1240 // not overwrite the offset if it was set set in buildMessage().
1241 memset(mSendBuffer, 0, LL_PACKET_ID_SIZE - 1);
2139 1242
2140 // add the send id to the front of the message 1243 // add the send id to the front of the message
2141 cdp->nextPacketOutID(); 1244 cdp->nextPacketOutID();
2142 1245
2143 // Packet ID size is always 4 1246 // Packet ID size is always 4
2144 *((S32*)&mSendBuffer[0]) = htonl(cdp->getPacketOutID()); 1247 *((S32*)&mSendBuffer[PHL_PACKET_ID]) = htonl(cdp->getPacketOutID());
2145 1248
2146 // Compress the message, which will usually reduce its size. 1249 // Compress the message, which will usually reduce its size.
2147 U8 * buf_ptr = (U8 *)mSendBuffer; 1250 U8 * buf_ptr = (U8 *)mSendBuffer;
@@ -2284,7 +1387,7 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re
2284 char buffer[MAX_STRING]; /* Flawfinder: ignore */ 1387 char buffer[MAX_STRING]; /* Flawfinder: ignore */
2285 snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize: mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */ 1388 snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize: mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */
2286 str << buffer 1389 str << buffer
2287 << mMessageReader->getMessageName() 1390 << nullToEmpty(mMessageReader->getMessageName())
2288 << (recv_reliable ? " reliable" : "") 1391 << (recv_reliable ? " reliable" : "")
2289 << " REJECTED"; 1392 << " REJECTED";
2290 llinfos << str.str() << llendl; 1393 llinfos << str.str() << llendl;
@@ -2307,6 +1410,27 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re
2307 } 1410 }
2308} 1411}
2309 1412
1413S32 LLMessageSystem::sendMessage(const LLHost &host, const char* name,
1414 const LLSD& message)
1415{
1416 if (!(host.isOk()))
1417 {
1418 llwarns << "trying to send message to invalid host" << llendl;
1419 return 0;
1420 }
1421 newMessage(name);
1422 if (mMessageBuilder != mLLSDMessageBuilder)
1423 {
1424 llwarns << "trying to send llsd message when builder is not LLSD!"
1425 << llendl;
1426 return 0;
1427 }
1428
1429 const LLHTTPSender& sender = LLHTTPSender::getSender(host);
1430 sender.send(host, name, message, createResponder(name));
1431 return 1;
1432}
1433
2310void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) 1434void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host )
2311{ 1435{
2312 // RequestTrustedCircuit is how we establish trust, so don't spam 1436 // RequestTrustedCircuit is how we establish trust, so don't spam
@@ -2314,9 +1438,9 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host )
2314 if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit")) 1438 if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit"))
2315 { 1439 {
2316 llwarns << "Received trusted message on untrusted circuit. " 1440 llwarns << "Received trusted message on untrusted circuit. "
2317 << "Will reply with deny. " 1441 << "Will reply with deny. "
2318 << "Message: " << mMessageReader->getMessageName() 1442 << "Message: " << nullToEmpty(mMessageReader->getMessageName())
2319 << " Host: " << host << llendl; 1443 << " Host: " << host << llendl;
2320 } 1444 }
2321 1445
2322 if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) 1446 if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM)
@@ -2366,7 +1490,7 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r
2366 char buffer[MAX_STRING]; /* Flawfinder: ignore */ 1490 char buffer[MAX_STRING]; /* Flawfinder: ignore */
2367 snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize : mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */ 1491 snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize : mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */
2368 str << buffer 1492 str << buffer
2369 << mMessageReader->getMessageName() 1493 << nullToEmpty(mMessageReader->getMessageName())
2370 << (recv_reliable ? " reliable" : "") 1494 << (recv_reliable ? " reliable" : "")
2371 << (recv_resent ? " resent" : "") 1495 << (recv_resent ? " resent" : "")
2372 << (recv_acks ? " acks" : ""); 1496 << (recv_acks ? " acks" : "");
@@ -2506,16 +1630,16 @@ void LLMessageSystem::disableCircuit(const LLHost &host)
2506 llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl; 1630 llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl;
2507 gMessageSystem->mIPPortToCircuitCode.erase(ip_port); 1631 gMessageSystem->mIPPortToCircuitCode.erase(ip_port);
2508 } 1632 }
1633 mCircuitInfo.removeCircuitData(host);
2509 } 1634 }
2510 else 1635 else
2511 { 1636 {
2512 // Sigh, since we can open circuits which don't have circuit 1637 // Sigh, since we can open circuits which don't have circuit
2513 // codes, it's possible for this to happen... 1638 // codes, it's possible for this to happen...
2514 1639
2515 //llwarns << "Couldn't find circuit code for " << host << llendl; 1640 llwarns << "Couldn't find circuit code for " << host << llendl;
2516 } 1641 }
2517 1642
2518 mCircuitInfo.removeCircuitData(host);
2519} 1643}
2520 1644
2521 1645
@@ -2937,6 +2061,30 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg,
2937 } 2061 }
2938} 2062}
2939 2063
2064// static
2065void LLMessageSystem::processError(LLMessageSystem* msg, void**)
2066{
2067 char buffer[MTUBYTES];
2068 S32 error_code = 0;
2069 msg->getS32("Data", "Code", error_code);
2070 std::string error_token;
2071 msg->getString("Data", "Token", MTUBYTES, buffer);
2072 error_token.assign(buffer);
2073 LLUUID error_id;
2074 msg->getUUID("Data", "ID", error_id);
2075 std::string error_system;
2076 msg->getString("Data", "System", MTUBYTES, buffer);
2077 error_system.assign(buffer);
2078 std::string error_message;
2079 msg->getString("Data", "Message", MTUBYTES, buffer);
2080 error_message.assign(buffer);
2081
2082 llwarns << "Message error from " << msg->getSender() << " - "
2083 << error_code << " " << error_token << " " << error_id << " \""
2084 << error_system << "\" \"" << error_message << "\"" << llendl;
2085}
2086
2087
2940static LLHTTPNode& messageRootNode() 2088static LLHTTPNode& messageRootNode()
2941{ 2089{
2942 static LLHTTPNode root_node; 2090 static LLHTTPNode root_node;
@@ -2964,10 +2112,13 @@ void LLMessageSystem::dispatch(
2964 const LLSD& message, 2112 const LLSD& message,
2965 LLHTTPNode::ResponsePtr responsep) 2113 LLHTTPNode::ResponsePtr responsep)
2966{ 2114{
2967 if (msg_name.empty()) 2115 if ((gMessageSystem->mMessageTemplates.find
2116 (gMessageStringTable.getString(msg_name.c_str())) ==
2117 gMessageSystem->mMessageTemplates.end()) &&
2118 !LLMessageConfig::isValidMessage(msg_name))
2968 { 2119 {
2969 llwarns << "LLMessageService::dispatch called with no message name" 2120 llwarns << "Ignoring unknown message " << msg_name << llendl;
2970 << llendl; 2121 responsep->notFound("Invalid message name");
2971 return; 2122 return;
2972 } 2123 }
2973 2124
@@ -2980,6 +2131,9 @@ void LLMessageSystem::dispatch(
2980 << path << llendl; 2131 << path << llendl;
2981 return; 2132 return;
2982 } 2133 }
2134 // enable this for output of message names
2135 //llinfos << "< \"" << msg_name << "\"" << llendl;
2136 //lldebugs << "data: " << LLSDXMLStreamer(message) << llendl;
2983 2137
2984 handler->post(responsep, context, message); 2138 handler->post(responsep, context, message);
2985} 2139}
@@ -3044,6 +2198,56 @@ void LLMessageSystem::setMessageBans(
3044 check_for_unrecognized_messages("untrusted", untrusted, mMessageTemplates); 2198 check_for_unrecognized_messages("untrusted", untrusted, mMessageTemplates);
3045} 2199}
3046 2200
2201S32 LLMessageSystem::sendError(
2202 const LLHost& host,
2203 const LLUUID& agent_id,
2204 S32 code,
2205 const std::string& token,
2206 const LLUUID& id,
2207 const std::string& system,
2208 const std::string& message,
2209 const LLSD& data)
2210{
2211 newMessage("Error");
2212 nextBlockFast(_PREHASH_AgentData);
2213 addUUIDFast(_PREHASH_AgentID, agent_id);
2214 nextBlockFast(_PREHASH_Data);
2215 addS32("Code", code);
2216 addString("Token", token);
2217 addUUID("ID", id);
2218 addString("System", system);
2219 std::string temp;
2220 temp = message;
2221 if(temp.size() > (size_t)MTUBYTES) temp.resize((size_t)MTUBYTES);
2222 addString("Message", message);
2223 LLPointer<LLSDBinaryFormatter> formatter = new LLSDBinaryFormatter;
2224 std::ostringstream ostr;
2225 formatter->format(data, ostr);
2226 temp = ostr.str();
2227 bool pack_data = true;
2228 static const std::string ERROR_MESSAGE_NAME("Error");
2229 if (LLMessageConfig::getMessageFlavor(ERROR_MESSAGE_NAME) ==
2230 LLMessageConfig::TEMPLATE_FLAVOR)
2231 {
2232 S32 msg_size = temp.size() + mMessageBuilder->getMessageSize();
2233 if(msg_size >= ETHERNET_MTU_BYTES)
2234 {
2235 pack_data = false;
2236 }
2237 }
2238 if(pack_data)
2239 {
2240 addBinaryData("Data", (void*)temp.c_str(), temp.size());
2241 }
2242 else
2243 {
2244 llwarns << "Data and message were too large -- data removed."
2245 << llendl;
2246 addBinaryData("Data", NULL, 0);
2247 }
2248 return sendReliable(host);
2249}
2250
3047void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/) 2251void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/)
3048{ 2252{
3049 TPACKETID packet_id; 2253 TPACKETID packet_id;
@@ -3069,37 +2273,8 @@ void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/)
3069 } 2273 }
3070} 2274}
3071 2275
3072void send_template_reply(LLMessageSystem* msg, const LLUUID& token)
3073{
3074 msg->newMessageFast(_PREHASH_TemplateChecksumReply);
3075 msg->nextBlockFast(_PREHASH_DataBlock);
3076 msg->addU32Fast(_PREHASH_Checksum, msg->mMessageFileChecksum);
3077 msg->addU8Fast(_PREHASH_MajorVersion, U8(msg->mSystemVersionMajor) );
3078 msg->addU8Fast(_PREHASH_MinorVersion, U8(msg->mSystemVersionMinor) );
3079 msg->addU8Fast(_PREHASH_PatchVersion, U8(msg->mSystemVersionPatch) );
3080 msg->addU8Fast(_PREHASH_ServerVersion, U8(msg->mSystemVersionServer) );
3081 msg->addU32Fast(_PREHASH_Flags, msg->mVersionFlags);
3082 msg->nextBlockFast(_PREHASH_TokenBlock);
3083 msg->addUUIDFast(_PREHASH_Token, token);
3084 msg->sendMessage(msg->getSender());
3085}
3086
3087void process_template_checksum_request(LLMessageSystem* msg, void**)
3088{
3089 llinfos << "Message template checksum request received from "
3090 << msg->getSender() << llendl;
3091 send_template_reply(msg, LLUUID::null);
3092}
3093
3094void process_secured_template_checksum_request(LLMessageSystem* msg, void**)
3095{
3096 llinfos << "Secured message template checksum request received from "
3097 << msg->getSender() << llendl;
3098 LLUUID token;
3099 msg->getUUIDFast(_PREHASH_TokenBlock, _PREHASH_Token, token);
3100 send_template_reply(msg, token);
3101}
3102 2276
2277/*
3103void process_log_messages(LLMessageSystem* msg, void**) 2278void process_log_messages(LLMessageSystem* msg, void**)
3104{ 2279{
3105 U8 log_message; 2280 U8 log_message;
@@ -3116,7 +2291,7 @@ void process_log_messages(LLMessageSystem* msg, void**)
3116 llinfos << "Stopping logging via message" << llendl; 2291 llinfos << "Stopping logging via message" << llendl;
3117 msg->stopLogging(); 2292 msg->stopLogging();
3118 } 2293 }
3119} 2294}*/
3120 2295
3121// Make circuit trusted if the MD5 Digest matches, otherwise 2296// Make circuit trusted if the MD5 Digest matches, otherwise
3122// notify remote end that they are not trusted. 2297// notify remote end that they are not trusted.
@@ -3349,15 +2524,14 @@ BOOL start_messaging_system(
3349 //gMessageSystem->setHandlerFuncFast(_PREHASH_AckAddCircuitCode, ack_add_circuit_code, NULL); 2524 //gMessageSystem->setHandlerFuncFast(_PREHASH_AckAddCircuitCode, ack_add_circuit_code, NULL);
3350 gMessageSystem->setHandlerFuncFast(_PREHASH_UseCircuitCode, LLMessageSystem::processUseCircuitCode, (void**)responder); 2525 gMessageSystem->setHandlerFuncFast(_PREHASH_UseCircuitCode, LLMessageSystem::processUseCircuitCode, (void**)responder);
3351 gMessageSystem->setHandlerFuncFast(_PREHASH_PacketAck, process_packet_ack, NULL); 2526 gMessageSystem->setHandlerFuncFast(_PREHASH_PacketAck, process_packet_ack, NULL);
3352 gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumRequest, process_template_checksum_request, NULL); 2527 //gMessageSystem->setHandlerFuncFast(_PREHASH_LogMessages, process_log_messages, NULL);
3353 gMessageSystem->setHandlerFuncFast(_PREHASH_SecuredTemplateChecksumRequest, process_secured_template_checksum_request, NULL);
3354 gMessageSystem->setHandlerFuncFast(_PREHASH_LogMessages, process_log_messages, NULL);
3355 gMessageSystem->setHandlerFuncFast(_PREHASH_CreateTrustedCircuit, 2528 gMessageSystem->setHandlerFuncFast(_PREHASH_CreateTrustedCircuit,
3356 process_create_trusted_circuit, 2529 process_create_trusted_circuit,
3357 NULL); 2530 NULL);
3358 gMessageSystem->setHandlerFuncFast(_PREHASH_DenyTrustedCircuit, 2531 gMessageSystem->setHandlerFuncFast(_PREHASH_DenyTrustedCircuit,
3359 process_deny_trusted_circuit, 2532 process_deny_trusted_circuit,
3360 NULL); 2533 NULL);
2534 gMessageSystem->setHandlerFunc("Error", LLMessageSystem::processError);
3361 2535
3362 // We can hand this to the null_message_callback since it is a 2536 // We can hand this to the null_message_callback since it is a
3363 // trusted message, so it will automatically be denied if it isn't 2537 // trusted message, so it will automatically be denied if it isn't
@@ -3471,11 +2645,11 @@ void LLMessageSystem::summarizeLogs(std::ostream& str)
3471 snprintf(buffer, MAX_STRING, "%35s%10s%10s%10s%10s", "Message", "Count", "Time", "Max", "Avg"); /* Flawfinder: ignore */ 2645 snprintf(buffer, MAX_STRING, "%35s%10s%10s%10s%10s", "Message", "Count", "Time", "Max", "Avg"); /* Flawfinder: ignore */
3472 str << buffer << std:: endl; 2646 str << buffer << std:: endl;
3473 F32 avg; 2647 F32 avg;
3474 for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), 2648 for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(),
3475 end = mMessageTemplates.end(); 2649 end = mMessageTemplates.end();
3476 iter != end; iter++) 2650 iter != end; iter++)
3477 { 2651 {
3478 LLMessageTemplate* mt = iter->second; 2652 const LLMessageTemplate* mt = iter->second;
3479 if(mt->mTotalDecoded > 0) 2653 if(mt->mTotalDecoded > 0)
3480 { 2654 {
3481 avg = mt->mTotalDecodeTime / (F32)mt->mTotalDecoded; 2655 avg = mt->mTotalDecodeTime / (F32)mt->mTotalDecoded;
@@ -3549,11 +2723,11 @@ void LLMessageSystem::dumpReceiveCounts()
3549 if(mNumMessageCounts > 0) 2723 if(mNumMessageCounts > 0)
3550 { 2724 {
3551 llinfos << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl; 2725 llinfos << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl;
3552 for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), 2726 for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(),
3553 end = mMessageTemplates.end(); 2727 end = mMessageTemplates.end();
3554 iter != end; iter++) 2728 iter != end; iter++)
3555 { 2729 {
3556 LLMessageTemplate* mt = iter->second; 2730 const LLMessageTemplate* mt = iter->second;
3557 if (mt->mReceiveCount > 0) 2731 if (mt->mReceiveCount > 0)
3558 { 2732 {
3559 llinfos << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes 2733 llinfos << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes
@@ -3601,8 +2775,10 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal()
3601 2775
3602 if (! mMessageBuilder->isBuilt()) 2776 if (! mMessageBuilder->isBuilt())
3603 { 2777 {
3604 mSendSize = mMessageBuilder->buildMessage(mSendBuffer, 2778 mSendSize = mMessageBuilder->buildMessage(
3605 MAX_BUFFER_SIZE); 2779 mSendBuffer,
2780 MAX_BUFFER_SIZE,
2781 0);
3606 } 2782 }
3607 // TODO: babbage: remove this horror 2783 // TODO: babbage: remove this horror
3608 mMessageBuilder->setBuilt(FALSE); 2784 mMessageBuilder->setBuilt(FALSE);
@@ -3616,7 +2792,7 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal()
3616 2792
3617// skip the packet id field 2793// skip the packet id field
3618 2794
3619 for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) 2795 for (U32 ii = 0; ii < LL_PACKET_ID_SIZE; ++ii)
3620 { 2796 {
3621 count--; 2797 count--;
3622 inptr++; 2798 inptr++;
@@ -3667,19 +2843,20 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal()
3667 2843
3668 2844
3669 2845
3670S32 LLMessageSystem::zeroCodeExpand(U8 **data, S32 *data_size) 2846S32 LLMessageSystem::zeroCodeExpand(U8** data, S32* data_size)
3671{ 2847{
3672 2848 if ((*data_size ) < LL_MINIMUM_VALID_PACKET_SIZE)
3673 if ((*data_size ) < LL_PACKET_ID_SIZE)
3674 { 2849 {
3675 llwarns << "zeroCodeExpand() called with data_size of " << *data_size << llendl; 2850 llwarns << "zeroCodeExpand() called with data_size of " << *data_size
2851 << llendl;
3676 } 2852 }
3677 2853
3678 mTotalBytesIn += *data_size; 2854 mTotalBytesIn += *data_size;
3679 2855
3680 if (!(*data[0] & LL_ZERO_CODE_FLAG)) // if we're not zero-coded, just go 'way 2856 // if we're not zero-coded, simply return.
2857 if (!(*data[0] & LL_ZERO_CODE_FLAG))
3681 { 2858 {
3682 return(0); 2859 return 0;
3683 } 2860 }
3684 2861
3685 S32 in_size = *data_size; 2862 S32 in_size = *data_size;
@@ -3695,7 +2872,7 @@ S32 LLMessageSystem::zeroCodeExpand(U8 **data, S32 *data_size)
3695 2872
3696// skip the packet id field 2873// skip the packet id field
3697 2874
3698 for (U32 i=0;i<LL_PACKET_ID_SIZE;i++) 2875 for (U32 ii = 0; ii < LL_PACKET_ID_SIZE; ++ii)
3699 { 2876 {
3700 count--; 2877 count--;
3701 *outptr++ = *inptr++; 2878 *outptr++ = *inptr++;
@@ -3789,14 +2966,16 @@ bool LLMessageSystem::callHandler(const char *name,
3789 bool trustedSource, LLMessageSystem* msg) 2966 bool trustedSource, LLMessageSystem* msg)
3790{ 2967{
3791 name = gMessageStringTable.getString(name); 2968 name = gMessageStringTable.getString(name);
3792 LLMessageTemplate* msg_template = mMessageTemplates[(char*)name]; 2969 message_template_name_map_t::const_iterator iter;
3793 if (!msg_template) 2970 iter = mMessageTemplates.find(name);
2971 if(iter == mMessageTemplates.end())
3794 { 2972 {
3795 llwarns << "LLMessageSystem::callHandler: unknown message " 2973 llwarns << "LLMessageSystem::callHandler: unknown message "
3796 << name << llendl; 2974 << name << llendl;
3797 return false; 2975 return false;
3798 } 2976 }
3799 2977
2978 const LLMessageTemplate* msg_template = iter->second;
3800 if (msg_template->isBanned(trustedSource)) 2979 if (msg_template->isBanned(trustedSource))
3801 { 2980 {
3802 llwarns << "LLMessageSystem::callHandler: banned message " 2981 llwarns << "LLMessageSystem::callHandler: banned message "
@@ -3852,14 +3031,13 @@ BOOL LLMessageSystem::isCircuitCodeKnown(U32 code) const
3852 3031
3853BOOL LLMessageSystem::isMessageFast(const char *msg) 3032BOOL LLMessageSystem::isMessageFast(const char *msg)
3854{ 3033{
3855 return(msg == mMessageReader->getMessageName()); 3034 return msg == mMessageReader->getMessageName();
3856} 3035}
3857 3036
3858 3037
3859char* LLMessageSystem::getMessageName() 3038char* LLMessageSystem::getMessageName()
3860{ 3039{
3861 const char* name = mMessageReader->getMessageName(); 3040 return const_cast<char*>(mMessageReader->getMessageName());
3862 return name[0] == '\0'? NULL : const_cast<char*>(name);
3863} 3041}
3864 3042
3865const LLUUID& LLMessageSystem::getSenderID() const 3043const LLUUID& LLMessageSystem::getSenderID() const
@@ -4188,120 +3366,6 @@ void LLMessageSystem::dumpPacketToLog()
4188 } 3366 }
4189} 3367}
4190 3368
4191//static
4192BOOL LLMessageSystem::isTemplateConfirmed()
4193{
4194 return gMessageSystem->mTemplateConfirmed;
4195}
4196
4197//static
4198BOOL LLMessageSystem::doesTemplateMatch()
4199{
4200 if (!isTemplateConfirmed())
4201 {
4202 return FALSE;
4203 }
4204 return gMessageSystem->mTemplateMatches;
4205}
4206
4207//static
4208void LLMessageSystem::sendMessageTemplateChecksum(const LLHost &currentHost)
4209{
4210 gMessageSystem->mTemplateConfirmed = FALSE;
4211 gMessageSystem->mTemplateMatches = FALSE;
4212 gMessageSystem->newMessageFast(_PREHASH_TemplateChecksumRequest);
4213 // Don't use ping-based retry
4214 gMessageSystem->sendReliable(currentHost, 40, FALSE, 3, NULL, NULL);
4215}
4216
4217//static
4218void LLMessageSystem::processMessageTemplateChecksumReply(LLMessageSystem *msg,
4219 void** user_data)
4220{
4221 U32 remote_template_checksum = 0;
4222 msg->getU32Fast(_PREHASH_DataBlock, _PREHASH_Checksum, remote_template_checksum);
4223 msg->mTemplateConfirmed = TRUE;
4224 if ((remote_template_checksum) != msg->mMessageFileChecksum)
4225 {
4226 llwarns << "out of sync message template!" << llendl;
4227
4228 msg->mTemplateMatches = FALSE;
4229 msg->newMessageFast(_PREHASH_CloseCircuit);
4230 msg->sendMessage(msg->getSender());
4231 return;
4232 }
4233
4234 msg->mTemplateMatches = TRUE;
4235 llinfos << "According to " << msg->getSender()
4236 << " the message template is current!"
4237 << llendl;
4238}
4239
4240//static
4241void LLMessageSystem::sendSecureMessageTemplateChecksum(const LLHost& host)
4242{
4243 // generate an token for use during template checksum requests to
4244 // prevent DOS attacks from injected bad template checksum replies.
4245 LLUUID *template_tokenp = new LLUUID;
4246 template_tokenp->generate();
4247 lldebugs << "random token: " << *template_tokenp << llendl;
4248
4249 // register the handler for the reply while saving off template_token
4250 gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumReply,
4251 LLMessageSystem::processSecureTemplateChecksumReply,
4252 (void**)template_tokenp);
4253
4254 // send checksum request
4255 gMessageSystem->mTemplateConfirmed = FALSE;
4256 gMessageSystem->newMessageFast(_PREHASH_SecuredTemplateChecksumRequest);
4257 gMessageSystem->nextBlockFast(_PREHASH_TokenBlock);
4258 gMessageSystem->addUUIDFast(_PREHASH_Token, *template_tokenp);
4259 gMessageSystem->sendReliable(host);
4260}
4261
4262//static
4263void LLMessageSystem::processSecureTemplateChecksumReply(LLMessageSystem *msg,
4264 void** user_data)
4265{
4266 // copy the token out into the stack and delete allocated memory
4267 LLUUID template_token = *((LLUUID*)user_data);
4268 delete user_data;
4269
4270 LLUUID received_token;
4271 msg->getUUID("TokenBlock", "Token", received_token);
4272
4273 if(received_token != template_token)
4274 {
4275 llwarns << "Incorrect token in template checksum reply: "
4276 << received_token << llendl;
4277 //return do_normal_idle;
4278 return;
4279 }
4280
4281 U32 remote_template_checksum = 0;
4282 U8 major_version = 0;
4283 U8 minor_version = 0;
4284 U8 patch_version = 0;
4285 U8 server_version = 0;
4286 U32 flags = 0x0;
4287 msg->getU32("DataBlock", "Checksum", remote_template_checksum);
4288 msg->getU8 ("DataBlock", "MajorVersion", major_version);
4289 msg->getU8 ("DataBlock", "MinorVersion", minor_version);
4290 msg->getU8 ("DataBlock", "PatchVersion", patch_version);
4291 msg->getU8 ("DataBlock", "ServerVersion", server_version);
4292 msg->getU32("DataBlock", "Flags", flags);
4293
4294 msg->mTemplateConfirmed = TRUE;
4295 if (remote_template_checksum != gMessageSystem->mMessageFileChecksum)
4296 {
4297 llinfos << "Message template out of sync" << llendl;
4298 msg->mTemplateMatches = FALSE;
4299 }
4300 else
4301 {
4302 msg->mTemplateMatches = TRUE;
4303 }
4304}
4305 3369
4306//static 3370//static
4307U64 LLMessageSystem::getMessageTimeUsecs(const BOOL update) 3371U64 LLMessageSystem::getMessageTimeUsecs(const BOOL update)
@@ -4352,14 +3416,32 @@ typedef std::map<const char*, LLMessageBuilder*> BuilderMap;
4352 3416
4353void LLMessageSystem::newMessageFast(const char *name) 3417void LLMessageSystem::newMessageFast(const char *name)
4354{ 3418{
4355 if(LLMessageConfig::isMessageBuiltTemplate(name)) 3419 LLMessageConfig::Flavor message_flavor =
3420 LLMessageConfig::getMessageFlavor(name);
3421 LLMessageConfig::Flavor server_flavor =
3422 LLMessageConfig::getServerDefaultFlavor();
3423
3424 if(message_flavor == LLMessageConfig::TEMPLATE_FLAVOR)
4356 { 3425 {
4357 mMessageBuilder = mTemplateMessageBuilder; 3426 mMessageBuilder = mTemplateMessageBuilder;
4358 } 3427 }
4359 else 3428 else if (message_flavor == LLMessageConfig::LLSD_FLAVOR)
4360 { 3429 {
4361 mMessageBuilder = mLLSDMessageBuilder; 3430 mMessageBuilder = mLLSDMessageBuilder;
4362 } 3431 }
3432 // NO_FLAVOR
3433 else
3434 {
3435 if (server_flavor == LLMessageConfig::LLSD_FLAVOR)
3436 {
3437 mMessageBuilder = mLLSDMessageBuilder;
3438 }
3439 // TEMPLATE_FLAVOR or NO_FLAVOR
3440 else
3441 {
3442 mMessageBuilder = mTemplateMessageBuilder;
3443 }
3444 }
4363 mSendReliable = FALSE; 3445 mSendReliable = FALSE;
4364 mMessageBuilder->newMessage(name); 3446 mMessageBuilder->newMessage(name);
4365} 3447}
@@ -4822,6 +3904,10 @@ void LLMessageSystem::getIPPort(const char *block, const char *var, U16 &u,
4822void LLMessageSystem::getStringFast(const char *block, const char *var, 3904void LLMessageSystem::getStringFast(const char *block, const char *var,
4823 S32 buffer_size, char *s, S32 blocknum) 3905 S32 buffer_size, char *s, S32 blocknum)
4824{ 3906{
3907 if(buffer_size <= 0)
3908 {
3909 llwarns << "buffer_size <= 0" << llendl;
3910 }
4825 mMessageReader->getString(block, var, buffer_size, s, blocknum); 3911 mMessageReader->getString(block, var, buffer_size, s, blocknum);
4826} 3912}
4827 3913
diff --git a/linden/indra/llmessage/message.h b/linden/indra/llmessage/message.h
index 0a55485..6c834f7 100644
--- a/linden/indra/llmessage/message.h
+++ b/linden/indra/llmessage/message.h
@@ -1,5 +1,5 @@
1/** 1/**
2 * @FILE message.h 2 * @file message.h
3 * @brief LLMessageSystem class header file 3 * @brief LLMessageSystem class header file
4 * 4 *
5 * Copyright (c) 2001-2007, Linden Research, Inc. 5 * Copyright (c) 2001-2007, Linden Research, Inc.
@@ -50,11 +50,13 @@
50#include "lltimer.h" 50#include "lltimer.h"
51#include "llpacketring.h" 51#include "llpacketring.h"
52#include "llhost.h" 52#include "llhost.h"
53#include "llhttpclient.h"
53#include "llhttpnode.h" 54#include "llhttpnode.h"
54#include "llpacketack.h" 55#include "llpacketack.h"
55#include "message_prehash.h" 56#include "message_prehash.h"
56#include "llstl.h" 57#include "llstl.h"
57#include "llmsgvariabletype.h" 58#include "llmsgvariabletype.h"
59#include "llmsgvariabletype.h"
58 60
59const U32 MESSAGE_MAX_STRINGS_LENGTH = 64; 61const U32 MESSAGE_MAX_STRINGS_LENGTH = 64;
60const U32 MESSAGE_NUMBER_OF_HASH_BUCKETS = 8192; 62const U32 MESSAGE_NUMBER_OF_HASH_BUCKETS = 8192;
@@ -126,7 +128,16 @@ const U8 LL_RELIABLE_FLAG = 0x40;
126const U8 LL_RESENT_FLAG = 0x20; 128const U8 LL_RESENT_FLAG = 0x20;
127const U8 LL_ACK_FLAG = 0x10; 129const U8 LL_ACK_FLAG = 0x10;
128 130
129const S32 LL_MINIMUM_VALID_PACKET_SIZE = LL_PACKET_ID_SIZE + 1; // 4 bytes id + 1 byte message name (high) 131// 1 byte flags, 4 bytes sequence, 1 byte offset + 1 byte message name (high)
132const S32 LL_MINIMUM_VALID_PACKET_SIZE = LL_PACKET_ID_SIZE + 1;
133enum EPacketHeaderLayout
134{
135 PHL_FLAGS = 0,
136 PHL_PACKET_ID = 1,
137 PHL_OFFSET = 5,
138 PHL_NAME = 6
139};
140
130 141
131const S32 LL_DEFAULT_RELIABLE_RETRIES = 3; 142const S32 LL_DEFAULT_RELIABLE_RETRIES = 3;
132const F32 LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS = 1.f; 143const F32 LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS = 1.f;
@@ -155,8 +166,6 @@ class LLUUID;
155class LLMessageSystem; 166class LLMessageSystem;
156class LLPumpIO; 167class LLPumpIO;
157 168
158// message data pieces are used to collect the data called for by the message template
159
160// message system exceptional condition handlers. 169// message system exceptional condition handlers.
161enum EMessageException 170enum EMessageException
162{ 171{
@@ -168,6 +177,7 @@ enum EMessageException
168typedef void (*msg_exception_callback)(LLMessageSystem*,void*,EMessageException); 177typedef void (*msg_exception_callback)(LLMessageSystem*,void*,EMessageException);
169 178
170 179
180// message data pieces are used to collect the data called for by the message template
171class LLMsgData; 181class LLMsgData;
172class LLMsgBlkData; 182class LLMsgBlkData;
173class LLMessageTemplate; 183class LLMessageTemplate;
@@ -180,6 +190,8 @@ class LLMessageReader;
180class LLTemplateMessageReader; 190class LLTemplateMessageReader;
181class LLSDMessageReader; 191class LLSDMessageReader;
182 192
193
194
183class LLUseCircuitCodeResponder 195class LLUseCircuitCodeResponder
184{ 196{
185 LOG_CLASS(LLMessageSystem); 197 LOG_CLASS(LLMessageSystem);
@@ -204,7 +216,6 @@ class LLMessageSystem
204 // Set this flag to TRUE when you want *very* verbose logs. 216 // Set this flag to TRUE when you want *very* verbose logs.
205 BOOL mVerboseLog; 217 BOOL mVerboseLog;
206 218
207 U32 mMessageFileChecksum;
208 F32 mMessageFileVersionNumber; 219 F32 mMessageFileVersionNumber;
209 220
210 typedef std::map<const char *, LLMessageTemplate*> message_template_name_map_t; 221 typedef std::map<const char *, LLMessageTemplate*> message_template_name_map_t;
@@ -450,8 +461,11 @@ public:
450 void forwardReliable(const LLHost &host); 461 void forwardReliable(const LLHost &host);
451 void forwardReliable(const U32 circuit_code); 462 void forwardReliable(const U32 circuit_code);
452 463
464 LLHTTPClient::ResponderPtr createResponder(const std::string& name);
453 S32 sendMessage(const LLHost &host); 465 S32 sendMessage(const LLHost &host);
454 S32 sendMessage(const U32 circuit); 466 S32 sendMessage(const U32 circuit);
467 S32 sendMessage(const LLHost &host, const char* name,
468 const LLSD& message);
455 469
456 // BOOL decodeData(const U8 *buffer, const LLHost &host); 470 // BOOL decodeData(const U8 *buffer, const LLHost &host);
457 471
@@ -528,6 +542,15 @@ public:
528 // The actual sending is done by reallySendDenyTrustedCircuit() 542 // The actual sending is done by reallySendDenyTrustedCircuit()
529 void sendDenyTrustedCircuit(const LLHost &host); 543 void sendDenyTrustedCircuit(const LLHost &host);
530 544
545 /** Return false if host is unknown or untrusted */
546 bool isTrustedSender(const LLHost& host) const;
547
548 /** Return false true if name is unknown or untrusted */
549 bool isTrustedMessage(const std::string& name) const;
550
551 /** Return false true if name is unknown or trusted */
552 bool isUntrustedMessage(const std::string& name) const;
553
531private: 554private:
532 // A list of the circuits that need to be sent DenyTrustedCircuit messages. 555 // A list of the circuits that need to be sent DenyTrustedCircuit messages.
533 typedef std::set<LLHost> host_set_t; 556 typedef std::set<LLHost> host_set_t;
@@ -537,7 +560,6 @@ private:
537 // related to sendDenyTrustedCircuit() 560 // related to sendDenyTrustedCircuit()
538 void reallySendDenyTrustedCircuit(const LLHost &host); 561 void reallySendDenyTrustedCircuit(const LLHost &host);
539 562
540
541public: 563public:
542 // Use this to establish trust to and from a host. This blocks 564 // Use this to establish trust to and from a host. This blocks
543 // until trust has been established, and probably should only be 565 // until trust has been established, and probably should only be
@@ -594,15 +616,6 @@ public:
594 void setMaxMessageTime(const F32 seconds); // Max time to process messages before warning and dumping (neg to disable) 616 void setMaxMessageTime(const F32 seconds); // Max time to process messages before warning and dumping (neg to disable)
595 void setMaxMessageCounts(const S32 num); // Max number of messages before dumping (neg to disable) 617 void setMaxMessageCounts(const S32 num); // Max number of messages before dumping (neg to disable)
596 618
597 // statics
598 static BOOL isTemplateConfirmed();
599 static BOOL doesTemplateMatch();
600 static void sendMessageTemplateChecksum(const LLHost&);
601 static void processMessageTemplateChecksumReply(LLMessageSystem *msg,
602 void** user_data);
603 static void sendSecureMessageTemplateChecksum(const LLHost&);
604 static void processSecureTemplateChecksumReply(LLMessageSystem *msg,
605 void** user_data);
606 static U64 getMessageTimeUsecs(const BOOL update = FALSE); // Get the current message system time in microseconds 619 static U64 getMessageTimeUsecs(const BOOL update = FALSE); // Get the current message system time in microseconds
607 static F64 getMessageTimeSeconds(const BOOL update = FALSE); // Get the current message system time in seconds 620 static F64 getMessageTimeSeconds(const BOOL update = FALSE); // Get the current message system time in seconds
608 621
@@ -613,6 +626,7 @@ public:
613 //static void processAssignCircuitCode(LLMessageSystem* msg, void**); 626 //static void processAssignCircuitCode(LLMessageSystem* msg, void**);
614 static void processAddCircuitCode(LLMessageSystem* msg, void**); 627 static void processAddCircuitCode(LLMessageSystem* msg, void**);
615 static void processUseCircuitCode(LLMessageSystem* msg, void**); 628 static void processUseCircuitCode(LLMessageSystem* msg, void**);
629 static void processError(LLMessageSystem* msg, void**);
616 630
617 // dispatch llsd message to http node tree 631 // dispatch llsd message to http node tree
618 static void dispatch(const std::string& msg_name, 632 static void dispatch(const std::string& msg_name,
@@ -623,13 +637,33 @@ public:
623 637
624 void setMessageBans(const LLSD& trusted, const LLSD& untrusted); 638 void setMessageBans(const LLSD& trusted, const LLSD& untrusted);
625 639
640 /**
641 * @brief send an error message to the host. This is a helper method.
642 *
643 * @param host Destination host.
644 * @param agent_id Destination agent id (may be null)
645 * @param code An HTTP status compatible error code.
646 * @param token A specific short string based message
647 * @param id The transactionid/uniqueid/sessionid whatever.
648 * @param system The hierarchical path to the system (255 bytes)
649 * @param message Human readable message (1200 bytes)
650 * @param data Extra info.
651 * @return Returns value returned from sendReliable().
652 */
653 S32 sendError(
654 const LLHost& host,
655 const LLUUID& agent_id,
656 S32 code,
657 const std::string& token,
658 const LLUUID& id,
659 const std::string& system,
660 const std::string& message,
661 const LLSD& data);
662
626 // Check UDP messages and pump http_pump to receive HTTP messages. 663 // Check UDP messages and pump http_pump to receive HTTP messages.
627 bool checkAllMessages(S64 frame_count, LLPumpIO* http_pump); 664 bool checkAllMessages(S64 frame_count, LLPumpIO* http_pump);
628 665
629private: 666private:
630 // data used in those internal handlers
631 BOOL mTemplateConfirmed;
632 BOOL mTemplateMatches;
633 667
634 // The mCircuitCodes is a map from circuit codes to session 668 // The mCircuitCodes is a map from circuit codes to session
635 // ids. This allows us to verify sessions on connect. 669 // ids. This allows us to verify sessions on connect.
@@ -639,7 +673,7 @@ private:
639 // Viewers need to track a process session in order to make sure 673 // Viewers need to track a process session in order to make sure
640 // that no one gives them a bad circuit code. 674 // that no one gives them a bad circuit code.
641 LLUUID mSessionID; 675 LLUUID mSessionID;
642 676
643 void addTemplate(LLMessageTemplate *templatep); 677 void addTemplate(LLMessageTemplate *templatep);
644 void clearReceiveState(); 678 void clearReceiveState();
645 BOOL decodeTemplate( const U8* buffer, S32 buffer_size, LLMessageTemplate** msg_template ); 679 BOOL decodeTemplate( const U8* buffer, S32 buffer_size, LLMessageTemplate** msg_template );
@@ -710,6 +744,10 @@ private:
710 744
711 bool callHandler(const char *name, bool trustedSource, 745 bool callHandler(const char *name, bool trustedSource,
712 LLMessageSystem* msg); 746 LLMessageSystem* msg);
747
748
749 /** Find, create or revive circuit for host as needed */
750 LLCircuitData* findCircuit(const LLHost& host, bool resetPacketId);
713}; 751};
714 752
715 753
diff --git a/linden/indra/llmessage/message_prehash.cpp b/linden/indra/llmessage/message_prehash.cpp
index 3e26726..fbe5c33 100644
--- a/linden/indra/llmessage/message_prehash.cpp
+++ b/linden/indra/llmessage/message_prehash.cpp
@@ -27,14 +27,14 @@
27 */ 27 */
28 28
29/** 29/**
30 * Generated from message template version number 1.053 30 * Generated from message template version number 2.000
31 */ 31 */
32#include "linden_common.h" 32#include "linden_common.h"
33#include "message.h" 33#include "message.h"
34 34
35 35
36 36
37F32 gPrehashVersionNumber = 1.053f; 37F32 gPrehashVersionNumber = 2.000f;
38 38
39char * _PREHASH_X; 39char * _PREHASH_X;
40char * _PREHASH_Y; 40char * _PREHASH_Y;
@@ -59,7 +59,6 @@ char * _PREHASH_ScriptAnswerYes;
59char * _PREHASH_PartnerID; 59char * _PREHASH_PartnerID;
60char * _PREHASH_DirLandQuery; 60char * _PREHASH_DirLandQuery;
61char * _PREHASH_TeleportStart; 61char * _PREHASH_TeleportStart;
62char * _PREHASH_LogMessages;
63char * _PREHASH_AboutText; 62char * _PREHASH_AboutText;
64char * _PREHASH_VisualParam; 63char * _PREHASH_VisualParam;
65char * _PREHASH_GroupPrims; 64char * _PREHASH_GroupPrims;
@@ -67,10 +66,8 @@ char * _PREHASH_SelectedPrims;
67char * _PREHASH_ID; 66char * _PREHASH_ID;
68char * _PREHASH_UUIDNameRequest; 67char * _PREHASH_UUIDNameRequest;
69char * _PREHASH_UUIDGroupNameRequest; 68char * _PREHASH_UUIDGroupNameRequest;
70char * _PREHASH_MoneyTransactionsRequest;
71char * _PREHASH_GroupAccountTransactionsRequest; 69char * _PREHASH_GroupAccountTransactionsRequest;
72char * _PREHASH_MapNameRequest; 70char * _PREHASH_MapNameRequest;
73char * _PREHASH_MailTaskSimRequest;
74char * _PREHASH_UpdateSimulator; 71char * _PREHASH_UpdateSimulator;
75char * _PREHASH_BillableFactor; 72char * _PREHASH_BillableFactor;
76char * _PREHASH_ObjectBonusFactor; 73char * _PREHASH_ObjectBonusFactor;
@@ -80,7 +77,6 @@ char * _PREHASH_ConfirmEnableSimulator;
80char * _PREHASH_LayerType; 77char * _PREHASH_LayerType;
81char * _PREHASH_OwnerRole; 78char * _PREHASH_OwnerRole;
82char * _PREHASH_ParcelOverlay; 79char * _PREHASH_ParcelOverlay;
83char * _PREHASH_AdjustBalance;
84char * _PREHASH_GroupOwned; 80char * _PREHASH_GroupOwned;
85char * _PREHASH_IP; 81char * _PREHASH_IP;
86char * _PREHASH_ChatFromViewer; 82char * _PREHASH_ChatFromViewer;
@@ -115,8 +111,8 @@ char * _PREHASH_SensedData;
115char * _PREHASH_UpdateBlock; 111char * _PREHASH_UpdateBlock;
116char * _PREHASH_ClassifiedGodDelete; 112char * _PREHASH_ClassifiedGodDelete;
117char * _PREHASH_ObjectGrabUpdate; 113char * _PREHASH_ObjectGrabUpdate;
118char * _PREHASH_TaxDate;
119char * _PREHASH_LocationPos; 114char * _PREHASH_LocationPos;
115char * _PREHASH_TaxDate;
120char * _PREHASH_StartDateTime; 116char * _PREHASH_StartDateTime;
121char * _PREHASH_ObjectUpdateCached; 117char * _PREHASH_ObjectUpdateCached;
122char * _PREHASH_Packets; 118char * _PREHASH_Packets;
@@ -148,14 +144,11 @@ char * _PREHASH_AABBMin;
148char * _PREHASH_ClassifiedFlags; 144char * _PREHASH_ClassifiedFlags;
149char * _PREHASH_ControlFlags; 145char * _PREHASH_ControlFlags;
150char * _PREHASH_TeleportRequest; 146char * _PREHASH_TeleportRequest;
151char * _PREHASH_SpaceLocationTeleportRequest;
152char * _PREHASH_LeaderBoardRequest;
153char * _PREHASH_ScriptTeleportRequest; 147char * _PREHASH_ScriptTeleportRequest;
148char * _PREHASH_EstateCovenantRequest;
154char * _PREHASH_DateUTC; 149char * _PREHASH_DateUTC;
155char * _PREHASH_TaskIDs; 150char * _PREHASH_TaskIDs;
156char * _PREHASH_EstateCovenantRequest;
157char * _PREHASH_RequestResult; 151char * _PREHASH_RequestResult;
158char * _PREHASH_ReputationAgentAssign;
159char * _PREHASH_CanAcceptAgents; 152char * _PREHASH_CanAcceptAgents;
160char * _PREHASH_ObjectSaleInfo; 153char * _PREHASH_ObjectSaleInfo;
161char * _PREHASH_KillChildAgents; 154char * _PREHASH_KillChildAgents;
@@ -167,7 +160,6 @@ char * _PREHASH_InfoBlock;
167char * _PREHASH_OwnershipCost; 160char * _PREHASH_OwnershipCost;
168char * _PREHASH_AvatarNotesUpdate; 161char * _PREHASH_AvatarNotesUpdate;
169char * _PREHASH_PID; 162char * _PREHASH_PID;
170char * _PREHASH_TimeString;
171char * _PREHASH_DirPopularReply; 163char * _PREHASH_DirPopularReply;
172char * _PREHASH_TerrainHeightRange00; 164char * _PREHASH_TerrainHeightRange00;
173char * _PREHASH_SimData; 165char * _PREHASH_SimData;
@@ -193,7 +185,6 @@ char * _PREHASH_Objects;
193char * _PREHASH_URL; 185char * _PREHASH_URL;
194char * _PREHASH_CreationDate; 186char * _PREHASH_CreationDate;
195char * _PREHASH_JointPivot; 187char * _PREHASH_JointPivot;
196char * _PREHASH_RateeID;
197char * _PREHASH_FPS; 188char * _PREHASH_FPS;
198char * _PREHASH_HasTelehub; 189char * _PREHASH_HasTelehub;
199char * _PREHASH_PathEnd; 190char * _PREHASH_PathEnd;
@@ -218,7 +209,6 @@ char * _PREHASH_GroupNoticesListReply;
218char * _PREHASH_ParcelAccessListReply; 209char * _PREHASH_ParcelAccessListReply;
219char * _PREHASH_RpcChannelReply; 210char * _PREHASH_RpcChannelReply;
220char * _PREHASH_RegionPresenceResponse; 211char * _PREHASH_RegionPresenceResponse;
221char * _PREHASH_AgentPresenceResponse;
222char * _PREHASH_CharterMember; 212char * _PREHASH_CharterMember;
223char * _PREHASH_EdgeData; 213char * _PREHASH_EdgeData;
224char * _PREHASH_NameData; 214char * _PREHASH_NameData;
@@ -232,14 +222,12 @@ char * _PREHASH_Mag;
232char * _PREHASH_ParcelPropertiesRequestByID; 222char * _PREHASH_ParcelPropertiesRequestByID;
233char * _PREHASH_ObjectLink; 223char * _PREHASH_ObjectLink;
234char * _PREHASH_RpcScriptReplyInbound; 224char * _PREHASH_RpcScriptReplyInbound;
235char * _PREHASH_BoardData;
236char * _PREHASH_RezData; 225char * _PREHASH_RezData;
237char * _PREHASH_RemoveInventoryObjects; 226char * _PREHASH_RemoveInventoryObjects;
238char * _PREHASH_GroupProposalBallot; 227char * _PREHASH_GroupProposalBallot;
239char * _PREHASH_RPCServerIP; 228char * _PREHASH_RPCServerIP;
240char * _PREHASH_Far; 229char * _PREHASH_Far;
241char * _PREHASH_GodSessionID; 230char * _PREHASH_GodSessionID;
242char * _PREHASH_ViewerDigest;
243char * _PREHASH_FLAboutText; 231char * _PREHASH_FLAboutText;
244char * _PREHASH_RegionHandshakeReply; 232char * _PREHASH_RegionHandshakeReply;
245char * _PREHASH_GroupActiveProposalItemReply; 233char * _PREHASH_GroupActiveProposalItemReply;
@@ -251,7 +239,6 @@ char * _PREHASH_Set;
251char * _PREHASH_NewName; 239char * _PREHASH_NewName;
252char * _PREHASH_Key; 240char * _PREHASH_Key;
253char * _PREHASH_AgentID; 241char * _PREHASH_AgentID;
254char * _PREHASH_OnlineStatusRequest;
255char * _PREHASH_EventNotificationRemoveRequest; 242char * _PREHASH_EventNotificationRemoveRequest;
256char * _PREHASH_NewFolderID; 243char * _PREHASH_NewFolderID;
257char * _PREHASH_Arc; 244char * _PREHASH_Arc;
@@ -263,7 +250,6 @@ char * _PREHASH_Top;
263char * _PREHASH_MiscStats; 250char * _PREHASH_MiscStats;
264char * _PREHASH_ImageID; 251char * _PREHASH_ImageID;
265char * _PREHASH_DataPacket; 252char * _PREHASH_DataPacket;
266char * _PREHASH_ObjectDehinge;
267char * _PREHASH_You; 253char * _PREHASH_You;
268char * _PREHASH_ScriptControlChange; 254char * _PREHASH_ScriptControlChange;
269char * _PREHASH_LoadURL; 255char * _PREHASH_LoadURL;
@@ -280,9 +266,9 @@ char * _PREHASH_Contribution;
280char * _PREHASH_SetGroupContribution; 266char * _PREHASH_SetGroupContribution;
281char * _PREHASH_Offline; 267char * _PREHASH_Offline;
282char * _PREHASH_AgentIsNowWearing; 268char * _PREHASH_AgentIsNowWearing;
283char * _PREHASH_SecPerDay;
284char * _PREHASH_Members; 269char * _PREHASH_Members;
285char * _PREHASH_FailedResends; 270char * _PREHASH_FailedResends;
271char * _PREHASH_SecPerDay;
286char * _PREHASH_CameraCenter; 272char * _PREHASH_CameraCenter;
287char * _PREHASH_CameraLeftAxis; 273char * _PREHASH_CameraLeftAxis;
288char * _PREHASH_ExBlock; 274char * _PREHASH_ExBlock;
@@ -290,7 +276,6 @@ char * _PREHASH_Channel;
290char * _PREHASH_NetTest; 276char * _PREHASH_NetTest;
291char * _PREHASH_DiscardLevel; 277char * _PREHASH_DiscardLevel;
292char * _PREHASH_LayerID; 278char * _PREHASH_LayerID;
293char * _PREHASH_RatorID;
294char * _PREHASH_GrabOffset; 279char * _PREHASH_GrabOffset;
295char * _PREHASH_SimPort; 280char * _PREHASH_SimPort;
296char * _PREHASH_PricePerMeter; 281char * _PREHASH_PricePerMeter;
@@ -310,21 +295,16 @@ char * _PREHASH_SitName;
310char * _PREHASH_RegionsVisited; 295char * _PREHASH_RegionsVisited;
311char * _PREHASH_DirClassifiedReply; 296char * _PREHASH_DirClassifiedReply;
312char * _PREHASH_AvatarClassifiedReply; 297char * _PREHASH_AvatarClassifiedReply;
313char * _PREHASH_ReputationIndividualReply;
314char * _PREHASH_MediaURL; 298char * _PREHASH_MediaURL;
315char * _PREHASH_CompleteAgentMovement; 299char * _PREHASH_CompleteAgentMovement;
316char * _PREHASH_SpaceIP;
317char * _PREHASH_ClassifiedID; 300char * _PREHASH_ClassifiedID;
318char * _PREHASH_LocalID; 301char * _PREHASH_LocalID;
302char * _PREHASH_SpaceIP;
319char * _PREHASH_RemoveItem; 303char * _PREHASH_RemoveItem;
320char * _PREHASH_LogFailedMoneyTransaction; 304char * _PREHASH_LogFailedMoneyTransaction;
321char * _PREHASH_ViewerStartAuction; 305char * _PREHASH_ViewerStartAuction;
322char * _PREHASH_StartAuction; 306char * _PREHASH_StartAuction;
323char * _PREHASH_NameValueName;
324char * _PREHASH_AngVelX;
325char * _PREHASH_DuplicateFlags; 307char * _PREHASH_DuplicateFlags;
326char * _PREHASH_AngVelY;
327char * _PREHASH_AngVelZ;
328char * _PREHASH_TextColor; 308char * _PREHASH_TextColor;
329char * _PREHASH_SlaveID; 309char * _PREHASH_SlaveID;
330char * _PREHASH_Charter; 310char * _PREHASH_Charter;
@@ -335,21 +315,16 @@ char * _PREHASH_ParcelAuctions;
335char * _PREHASH_OwnerIsGroup; 315char * _PREHASH_OwnerIsGroup;
336char * _PREHASH_NameValuePair; 316char * _PREHASH_NameValuePair;
337char * _PREHASH_RemoveNameValuePair; 317char * _PREHASH_RemoveNameValuePair;
338char * _PREHASH_GetNameValuePair;
339char * _PREHASH_BulkUpdateInventory; 318char * _PREHASH_BulkUpdateInventory;
340char * _PREHASH_UpdateTaskInventory; 319char * _PREHASH_UpdateTaskInventory;
341char * _PREHASH_RemoveTaskInventory; 320char * _PREHASH_RemoveTaskInventory;
342char * _PREHASH_MoveTaskInventory; 321char * _PREHASH_MoveTaskInventory;
343char * _PREHASH_RequestTaskInventory; 322char * _PREHASH_RequestTaskInventory;
344char * _PREHASH_ReplyTaskInventory; 323char * _PREHASH_ReplyTaskInventory;
345char * _PREHASH_DeclineInventory;
346char * _PREHASH_AggregatePermInventory; 324char * _PREHASH_AggregatePermInventory;
347char * _PREHASH_SimulatorInfo;
348char * _PREHASH_MoneyTransactionsReply;
349char * _PREHASH_GroupAccountTransactionsReply; 325char * _PREHASH_GroupAccountTransactionsReply;
350char * _PREHASH_MailTaskSimReply; 326char * _PREHASH_SimulatorInfo;
351char * _PREHASH_WearableData; 327char * _PREHASH_WearableData;
352char * _PREHASH_StatisticsData;
353char * _PREHASH_Enabled; 328char * _PREHASH_Enabled;
354char * _PREHASH_Savings; 329char * _PREHASH_Savings;
355char * _PREHASH_SimulatorLoad; 330char * _PREHASH_SimulatorLoad;
@@ -361,15 +336,12 @@ char * _PREHASH_JoinGroupRequest;
361char * _PREHASH_LeaveGroupRequest; 336char * _PREHASH_LeaveGroupRequest;
362char * _PREHASH_InviteGroupRequest; 337char * _PREHASH_InviteGroupRequest;
363char * _PREHASH_LiveHelpGroupRequest; 338char * _PREHASH_LiveHelpGroupRequest;
364char * _PREHASH_ServerVersion;
365char * _PREHASH_PriceParcelClaimFactor; 339char * _PREHASH_PriceParcelClaimFactor;
366char * _PREHASH_BillableArea; 340char * _PREHASH_BillableArea;
367char * _PREHASH_ObjectID; 341char * _PREHASH_ObjectID;
368char * _PREHASH_ObjectFlagUpdate; 342char * _PREHASH_ObjectFlagUpdate;
369char * _PREHASH_GroupRoleUpdate; 343char * _PREHASH_GroupRoleUpdate;
370char * _PREHASH_RequestInventoryAsset; 344char * _PREHASH_RequestInventoryAsset;
371char * _PREHASH_RedoLand;
372char * _PREHASH_TravelAccess;
373char * _PREHASH_ChangedGrid; 345char * _PREHASH_ChangedGrid;
374char * _PREHASH_AgentDropGroup; 346char * _PREHASH_AgentDropGroup;
375char * _PREHASH_Details; 347char * _PREHASH_Details;
@@ -402,7 +374,6 @@ char * _PREHASH_Timestamp;
402char * _PREHASH_GlobalPos; 374char * _PREHASH_GlobalPos;
403char * _PREHASH_GrabOffsetInitial; 375char * _PREHASH_GrabOffsetInitial;
404char * _PREHASH_IsTrial; 376char * _PREHASH_IsTrial;
405char * _PREHASH_FinalizeLogout;
406char * _PREHASH_ObjectDuplicateOnRay; 377char * _PREHASH_ObjectDuplicateOnRay;
407char * _PREHASH_GroupMembershipCount; 378char * _PREHASH_GroupMembershipCount;
408char * _PREHASH_MethodData; 379char * _PREHASH_MethodData;
@@ -438,32 +409,26 @@ char * _PREHASH_TaskData;
438char * _PREHASH_SimWideMaxPrims; 409char * _PREHASH_SimWideMaxPrims;
439char * _PREHASH_TotalPrims; 410char * _PREHASH_TotalPrims;
440char * _PREHASH_ProfileBegin; 411char * _PREHASH_ProfileBegin;
441char * _PREHASH_MoneyDetailsRequest;
442char * _PREHASH_Request; 412char * _PREHASH_Request;
443char * _PREHASH_GroupAccountDetailsRequest; 413char * _PREHASH_GroupAccountDetailsRequest;
444char * _PREHASH_GroupActiveProposalsRequest; 414char * _PREHASH_GroupActiveProposalsRequest;
445char * _PREHASH_StringValue; 415char * _PREHASH_StringValue;
446char * _PREHASH_ClosestSimulator;
447char * _PREHASH_Version; 416char * _PREHASH_Version;
448char * _PREHASH_OtherCount; 417char * _PREHASH_OtherCount;
449char * _PREHASH_MemberCount; 418char * _PREHASH_MemberCount;
450char * _PREHASH_ChatData; 419char * _PREHASH_ChatData;
451char * _PREHASH_IsGroupOwned; 420char * _PREHASH_IsGroupOwned;
452char * _PREHASH_EnergyEfficiency; 421char * _PREHASH_EnergyEfficiency;
453char * _PREHASH_MaxPlace;
454char * _PREHASH_PickInfoUpdate; 422char * _PREHASH_PickInfoUpdate;
455char * _PREHASH_PickDelete; 423char * _PREHASH_PickDelete;
456char * _PREHASH_ScriptReset; 424char * _PREHASH_ScriptReset;
457char * _PREHASH_Requester; 425char * _PREHASH_Requester;
458char * _PREHASH_ForSale; 426char * _PREHASH_ForSale;
459char * _PREHASH_NearestLandingRegionReply; 427char * _PREHASH_NearestLandingRegionReply;
460char * _PREHASH_RecordAgentPresence;
461char * _PREHASH_EraseAgentPresence;
462char * _PREHASH_ParcelID; 428char * _PREHASH_ParcelID;
463char * _PREHASH_Godlike; 429char * _PREHASH_Godlike;
464char * _PREHASH_TotalDebits; 430char * _PREHASH_TotalDebits;
465char * _PREHASH_Direction; 431char * _PREHASH_Direction;
466char * _PREHASH_Appearance;
467char * _PREHASH_HealthData; 432char * _PREHASH_HealthData;
468char * _PREHASH_LeftAxis; 433char * _PREHASH_LeftAxis;
469char * _PREHASH_LocationBlock; 434char * _PREHASH_LocationBlock;
@@ -471,41 +436,31 @@ char * _PREHASH_ObjectImage;
471char * _PREHASH_TerrainStartHeight00; 436char * _PREHASH_TerrainStartHeight00;
472char * _PREHASH_TerrainStartHeight01; 437char * _PREHASH_TerrainStartHeight01;
473char * _PREHASH_TerrainStartHeight10; 438char * _PREHASH_TerrainStartHeight10;
474char * _PREHASH_ObjectHinge;
475char * _PREHASH_TerrainStartHeight11; 439char * _PREHASH_TerrainStartHeight11;
476char * _PREHASH_MetersPerGrid;
477char * _PREHASH_WaterHeight; 440char * _PREHASH_WaterHeight;
478char * _PREHASH_FetchInventoryReply; 441char * _PREHASH_FetchInventoryReply;
479char * _PREHASH_MoneySummaryReply;
480char * _PREHASH_GroupAccountSummaryReply; 442char * _PREHASH_GroupAccountSummaryReply;
481char * _PREHASH_AttachedSound; 443char * _PREHASH_AttachedSound;
482char * _PREHASH_ParamInUse; 444char * _PREHASH_ParamInUse;
483char * _PREHASH_GodKickUser; 445char * _PREHASH_GodKickUser;
484char * _PREHASH_PickName; 446char * _PREHASH_PickName;
485char * _PREHASH_TaskName; 447char * _PREHASH_TaskName;
486char * _PREHASH_SubType;
487char * _PREHASH_ObjectCount; 448char * _PREHASH_ObjectCount;
488char * _PREHASH_RegionPresenceRequestByHandle; 449char * _PREHASH_RegionPresenceRequestByHandle;
489char * _PREHASH_RezSingleAttachmentFromInv; 450char * _PREHASH_RezSingleAttachmentFromInv;
490char * _PREHASH_ChildAgentUpdate; 451char * _PREHASH_ChildAgentUpdate;
491char * _PREHASH_ToID;
492char * _PREHASH_ViewerPort;
493char * _PREHASH_IsOwnerGroup; 452char * _PREHASH_IsOwnerGroup;
494char * _PREHASH_AgentHeightWidth; 453char * _PREHASH_AgentHeightWidth;
495char * _PREHASH_VerticalAngle; 454char * _PREHASH_VerticalAngle;
496char * _PREHASH_WearableType; 455char * _PREHASH_WearableType;
497char * _PREHASH_AggregatePermNextOwner; 456char * _PREHASH_AggregatePermNextOwner;
498char * _PREHASH_ShowInList; 457char * _PREHASH_ShowInList;
499char * _PREHASH_PositionSuggestion;
500char * _PREHASH_UpdateParcel; 458char * _PREHASH_UpdateParcel;
501char * _PREHASH_ClearAgentSessions;
502char * _PREHASH_SetAlwaysRun; 459char * _PREHASH_SetAlwaysRun;
503char * _PREHASH_NVPair; 460char * _PREHASH_NVPair;
504char * _PREHASH_SearchType; 461char * _PREHASH_SearchType;
505char * _PREHASH_ObjectSpinStart; 462char * _PREHASH_ObjectSpinStart;
506char * _PREHASH_UseEstateSun; 463char * _PREHASH_UseEstateSun;
507char * _PREHASH_LogoutBlock;
508char * _PREHASH_RelayLogControl;
509char * _PREHASH_RegionID; 464char * _PREHASH_RegionID;
510char * _PREHASH_AbuseRegionID; 465char * _PREHASH_AbuseRegionID;
511char * _PREHASH_Creator; 466char * _PREHASH_Creator;
@@ -514,14 +469,12 @@ char * _PREHASH_DirEventsReply;
514char * _PREHASH_EventInfoReply; 469char * _PREHASH_EventInfoReply;
515char * _PREHASH_UserInfoReply; 470char * _PREHASH_UserInfoReply;
516char * _PREHASH_PathRadiusOffset; 471char * _PREHASH_PathRadiusOffset;
517char * _PREHASH_SessionInfo;
518char * _PREHASH_TextureData; 472char * _PREHASH_TextureData;
519char * _PREHASH_ChatPass; 473char * _PREHASH_ChatPass;
520char * _PREHASH_TargetID; 474char * _PREHASH_TargetID;
521char * _PREHASH_DefaultPayPrice; 475char * _PREHASH_DefaultPayPrice;
522char * _PREHASH_UserLocation; 476char * _PREHASH_UserLocation;
523char * _PREHASH_MaxPrims; 477char * _PREHASH_MaxPrims;
524char * _PREHASH_RegionIP;
525char * _PREHASH_LandmarkID; 478char * _PREHASH_LandmarkID;
526char * _PREHASH_InitiateDownload; 479char * _PREHASH_InitiateDownload;
527char * _PREHASH_Name; 480char * _PREHASH_Name;
@@ -529,18 +482,13 @@ char * _PREHASH_OtherCleanTime;
529char * _PREHASH_ParcelSetOtherCleanTime; 482char * _PREHASH_ParcelSetOtherCleanTime;
530char * _PREHASH_TeleportPriceExponent; 483char * _PREHASH_TeleportPriceExponent;
531char * _PREHASH_Gain; 484char * _PREHASH_Gain;
532char * _PREHASH_VelX;
533char * _PREHASH_PacketAck; 485char * _PREHASH_PacketAck;
534char * _PREHASH_PathSkew; 486char * _PREHASH_PathSkew;
535char * _PREHASH_Negative;
536char * _PREHASH_VelY;
537char * _PREHASH_SimulatorShutdownRequest; 487char * _PREHASH_SimulatorShutdownRequest;
538char * _PREHASH_NearestLandingRegionRequest; 488char * _PREHASH_NearestLandingRegionRequest;
539char * _PREHASH_VelZ;
540char * _PREHASH_OtherID; 489char * _PREHASH_OtherID;
541char * _PREHASH_MemberID; 490char * _PREHASH_MemberID;
542char * _PREHASH_MapLayerRequest; 491char * _PREHASH_MapLayerRequest;
543char * _PREHASH_PatchVersion;
544char * _PREHASH_ObjectScale; 492char * _PREHASH_ObjectScale;
545char * _PREHASH_TargetIP; 493char * _PREHASH_TargetIP;
546char * _PREHASH_Redo; 494char * _PREHASH_Redo;
@@ -583,27 +531,20 @@ char * _PREHASH_Perp;
583char * _PREHASH_Code; 531char * _PREHASH_Code;
584char * _PREHASH_InvType; 532char * _PREHASH_InvType;
585char * _PREHASH_AgentFOV; 533char * _PREHASH_AgentFOV;
586char * _PREHASH_BulkMoneyTransfer;
587char * _PREHASH_Audible; 534char * _PREHASH_Audible;
588char * _PREHASH_AuctionData; 535char * _PREHASH_AuctionData;
589char * _PREHASH_IDBlock; 536char * _PREHASH_IDBlock;
590char * _PREHASH_ReputationData;
591char * _PREHASH_West; 537char * _PREHASH_West;
592char * _PREHASH_Undo; 538char * _PREHASH_Undo;
593char * _PREHASH_TotalNumItems; 539char * _PREHASH_TotalNumItems;
594char * _PREHASH_Info; 540char * _PREHASH_Info;
595char * _PREHASH_Area; 541char * _PREHASH_Area;
596char * _PREHASH_Behavior;
597char * _PREHASH_SimCrashed; 542char * _PREHASH_SimCrashed;
598char * _PREHASH_Text; 543char * _PREHASH_Text;
599char * _PREHASH_AgentToNewRegion;
600char * _PREHASH_PriceGroupCreate; 544char * _PREHASH_PriceGroupCreate;
601char * _PREHASH_ObjectShape; 545char * _PREHASH_ObjectShape;
602char * _PREHASH_GroupRoleDataReply; 546char * _PREHASH_GroupRoleDataReply;
603char * _PREHASH_PosX;
604char * _PREHASH_PosY;
605char * _PREHASH_MuteCRC; 547char * _PREHASH_MuteCRC;
606char * _PREHASH_PosZ;
607char * _PREHASH_Size; 548char * _PREHASH_Size;
608char * _PREHASH_FromAddress; 549char * _PREHASH_FromAddress;
609char * _PREHASH_Body; 550char * _PREHASH_Body;
@@ -621,16 +562,14 @@ char * _PREHASH_Stat;
621char * _PREHASH_SoundID; 562char * _PREHASH_SoundID;
622char * _PREHASH_Item; 563char * _PREHASH_Item;
623char * _PREHASH_User; 564char * _PREHASH_User;
624char * _PREHASH_RemoteInfos;
625char * _PREHASH_Prey; 565char * _PREHASH_Prey;
626char * _PREHASH_UsecSinceStart;
627char * _PREHASH_RayStart; 566char * _PREHASH_RayStart;
567char * _PREHASH_UsecSinceStart;
628char * _PREHASH_ParcelData; 568char * _PREHASH_ParcelData;
629char * _PREHASH_CameraUpAxis; 569char * _PREHASH_CameraUpAxis;
630char * _PREHASH_ScriptDialog; 570char * _PREHASH_ScriptDialog;
631char * _PREHASH_MasterParcelData; 571char * _PREHASH_MasterParcelData;
632char * _PREHASH_Invalid; 572char * _PREHASH_Invalid;
633char * _PREHASH_MinPlace;
634char * _PREHASH_ProfileCurve; 573char * _PREHASH_ProfileCurve;
635char * _PREHASH_ParcelAccessListUpdate; 574char * _PREHASH_ParcelAccessListUpdate;
636char * _PREHASH_MuteListUpdate; 575char * _PREHASH_MuteListUpdate;
@@ -649,14 +588,12 @@ char * _PREHASH_DeRezObject;
649char * _PREHASH_IsTemporary; 588char * _PREHASH_IsTemporary;
650char * _PREHASH_InsigniaID; 589char * _PREHASH_InsigniaID;
651char * _PREHASH_CheckFlags; 590char * _PREHASH_CheckFlags;
652char * _PREHASH_TransferPriority;
653char * _PREHASH_EventID; 591char * _PREHASH_EventID;
654char * _PREHASH_Selected; 592char * _PREHASH_Selected;
655char * _PREHASH_FromAgentId; 593char * _PREHASH_FromAgentId;
656char * _PREHASH_Type; 594char * _PREHASH_Type;
657char * _PREHASH_ChatType; 595char * _PREHASH_ChatType;
658char * _PREHASH_ReportData; 596char * _PREHASH_ReportData;
659char * _PREHASH_LeaderBoardData;
660char * _PREHASH_RequestBlock; 597char * _PREHASH_RequestBlock;
661char * _PREHASH_GrantData; 598char * _PREHASH_GrantData;
662char * _PREHASH_DetachAttachmentIntoInv; 599char * _PREHASH_DetachAttachmentIntoInv;
@@ -672,12 +609,9 @@ char * _PREHASH_OnlineNotification;
672char * _PREHASH_OfflineNotification; 609char * _PREHASH_OfflineNotification;
673char * _PREHASH_SendPostcard; 610char * _PREHASH_SendPostcard;
674char * _PREHASH_RequestFlags; 611char * _PREHASH_RequestFlags;
675char * _PREHASH_MoneyHistoryRequest;
676char * _PREHASH_MoneySummaryRequest;
677char * _PREHASH_GroupAccountSummaryRequest; 612char * _PREHASH_GroupAccountSummaryRequest;
678char * _PREHASH_GroupVoteHistoryRequest; 613char * _PREHASH_GroupVoteHistoryRequest;
679char * _PREHASH_ParamValue; 614char * _PREHASH_ParamValue;
680char * _PREHASH_Checksum;
681char * _PREHASH_MaxAgents; 615char * _PREHASH_MaxAgents;
682char * _PREHASH_CreateNewOutfitAttachments; 616char * _PREHASH_CreateNewOutfitAttachments;
683char * _PREHASH_RegionHandle; 617char * _PREHASH_RegionHandle;
@@ -687,12 +621,10 @@ char * _PREHASH_AvatarInterestsUpdate;
687char * _PREHASH_GroupNoticeID; 621char * _PREHASH_GroupNoticeID;
688char * _PREHASH_ParcelName; 622char * _PREHASH_ParcelName;
689char * _PREHASH_PriceObjectRent; 623char * _PREHASH_PriceObjectRent;
690char * _PREHASH_ConnectAgentToUserserver;
691char * _PREHASH_ConnectToUserserver;
692char * _PREHASH_OfferCallingCard; 624char * _PREHASH_OfferCallingCard;
693char * _PREHASH_AgentAccess;
694char * _PREHASH_AcceptCallingCard; 625char * _PREHASH_AcceptCallingCard;
695char * _PREHASH_DeclineCallingCard; 626char * _PREHASH_DeclineCallingCard;
627char * _PREHASH_AgentAccess;
696char * _PREHASH_DataHomeLocationReply; 628char * _PREHASH_DataHomeLocationReply;
697char * _PREHASH_EventLocationReply; 629char * _PREHASH_EventLocationReply;
698char * _PREHASH_TerseDateID; 630char * _PREHASH_TerseDateID;
@@ -710,8 +642,8 @@ char * _PREHASH_Invoice;
710char * _PREHASH_IntervalDays; 642char * _PREHASH_IntervalDays;
711char * _PREHASH_PathScaleX; 643char * _PREHASH_PathScaleX;
712char * _PREHASH_FromTaskID; 644char * _PREHASH_FromTaskID;
713char * _PREHASH_TimeInfo;
714char * _PREHASH_PathScaleY; 645char * _PREHASH_PathScaleY;
646char * _PREHASH_TimeInfo;
715char * _PREHASH_PublicCount; 647char * _PREHASH_PublicCount;
716char * _PREHASH_ParcelJoin; 648char * _PREHASH_ParcelJoin;
717char * _PREHASH_GroupRolesCount; 649char * _PREHASH_GroupRolesCount;
@@ -736,7 +668,6 @@ char * _PREHASH_NearestLandingRegionUpdated;
736char * _PREHASH_PassToAgent; 668char * _PREHASH_PassToAgent;
737char * _PREHASH_PreyAgent; 669char * _PREHASH_PreyAgent;
738char * _PREHASH_SimStats; 670char * _PREHASH_SimStats;
739char * _PREHASH_Options;
740char * _PREHASH_LogoutReply; 671char * _PREHASH_LogoutReply;
741char * _PREHASH_FeatureDisabled; 672char * _PREHASH_FeatureDisabled;
742char * _PREHASH_ObjectLocalID; 673char * _PREHASH_ObjectLocalID;
@@ -747,10 +678,8 @@ char * _PREHASH_Destination;
747char * _PREHASH_MasterID; 678char * _PREHASH_MasterID;
748char * _PREHASH_TransferData; 679char * _PREHASH_TransferData;
749char * _PREHASH_WantToMask; 680char * _PREHASH_WantToMask;
750char * _PREHASH_AvatarData;
751char * _PREHASH_ParcelSelectObjects; 681char * _PREHASH_ParcelSelectObjects;
752char * _PREHASH_ExtraParams; 682char * _PREHASH_ExtraParams;
753char * _PREHASH_LogLogin;
754char * _PREHASH_CreatorID; 683char * _PREHASH_CreatorID;
755char * _PREHASH_Summary; 684char * _PREHASH_Summary;
756char * _PREHASH_BuyObjectInventory; 685char * _PREHASH_BuyObjectInventory;
@@ -791,8 +720,8 @@ char * _PREHASH_ButtonLabel;
791char * _PREHASH_GranterID; 720char * _PREHASH_GranterID;
792char * _PREHASH_WantToText; 721char * _PREHASH_WantToText;
793char * _PREHASH_ReportType; 722char * _PREHASH_ReportType;
794char * _PREHASH_DataBlock;
795char * _PREHASH_SimulatorReady; 723char * _PREHASH_SimulatorReady;
724char * _PREHASH_DataBlock;
796char * _PREHASH_AnimationSourceList; 725char * _PREHASH_AnimationSourceList;
797char * _PREHASH_SubscribeLoad; 726char * _PREHASH_SubscribeLoad;
798char * _PREHASH_UnsubscribeLoad; 727char * _PREHASH_UnsubscribeLoad;
@@ -819,9 +748,8 @@ char * _PREHASH_Header;
819char * _PREHASH_GestureFlags; 748char * _PREHASH_GestureFlags;
820char * _PREHASH_XferID; 749char * _PREHASH_XferID;
821char * _PREHASH_StatValue; 750char * _PREHASH_StatValue;
822char * _PREHASH_PickID;
823char * _PREHASH_TaskID; 751char * _PREHASH_TaskID;
824char * _PREHASH_GridsPerEdge; 752char * _PREHASH_PickID;
825char * _PREHASH_RayEnd; 753char * _PREHASH_RayEnd;
826char * _PREHASH_Throttles; 754char * _PREHASH_Throttles;
827char * _PREHASH_RebakeAvatarTextures; 755char * _PREHASH_RebakeAvatarTextures;
@@ -834,30 +762,24 @@ char * _PREHASH_Access;
834char * _PREHASH_TitleRoleID; 762char * _PREHASH_TitleRoleID;
835char * _PREHASH_SquareMetersCredit; 763char * _PREHASH_SquareMetersCredit;
836char * _PREHASH_Filename; 764char * _PREHASH_Filename;
837char * _PREHASH_SecuredTemplateChecksumRequest;
838char * _PREHASH_TemplateChecksumRequest;
839char * _PREHASH_AgentPresenceRequest;
840char * _PREHASH_ClassifiedInfoRequest; 765char * _PREHASH_ClassifiedInfoRequest;
841char * _PREHASH_ParcelInfoRequest; 766char * _PREHASH_ParcelInfoRequest;
842char * _PREHASH_ParcelObjectOwnersRequest; 767char * _PREHASH_ParcelObjectOwnersRequest;
843char * _PREHASH_TeleportLandmarkRequest; 768char * _PREHASH_TeleportLandmarkRequest;
844char * _PREHASH_EventInfoRequest; 769char * _PREHASH_EventInfoRequest;
845char * _PREHASH_ChatFromSimulator;
846char * _PREHASH_PickInfoRequest;
847char * _PREHASH_MoneyBalanceRequest; 770char * _PREHASH_MoneyBalanceRequest;
848char * _PREHASH_GroupMembersRequest; 771char * _PREHASH_GroupMembersRequest;
849char * _PREHASH_GroupRoleMembersRequest; 772char * _PREHASH_GroupRoleMembersRequest;
773char * _PREHASH_ChatFromSimulator;
850char * _PREHASH_OldFolderID; 774char * _PREHASH_OldFolderID;
851char * _PREHASH_UserInfoRequest; 775char * _PREHASH_UserInfoRequest;
852char * _PREHASH_TextureID; 776char * _PREHASH_TextureID;
853char * _PREHASH_ProfileURL; 777char * _PREHASH_ProfileURL;
854char * _PREHASH_Handle; 778char * _PREHASH_Handle;
855char * _PREHASH_StartParcelRenameAck;
856char * _PREHASH_ButtonIndex; 779char * _PREHASH_ButtonIndex;
857char * _PREHASH_GetScriptRunning; 780char * _PREHASH_GetScriptRunning;
858char * _PREHASH_SetScriptRunning; 781char * _PREHASH_SetScriptRunning;
859char * _PREHASH_Health; 782char * _PREHASH_Health;
860char * _PREHASH_FileID;
861char * _PREHASH_CircuitInfo; 783char * _PREHASH_CircuitInfo;
862char * _PREHASH_ObjectBuy; 784char * _PREHASH_ObjectBuy;
863char * _PREHASH_ProfileEnd; 785char * _PREHASH_ProfileEnd;
@@ -882,7 +804,6 @@ char * _PREHASH_PingID;
882char * _PREHASH_Change; 804char * _PREHASH_Change;
883char * _PREHASH_Height; 805char * _PREHASH_Height;
884char * _PREHASH_Region; 806char * _PREHASH_Region;
885char * _PREHASH_MoneyHistoryReply;
886char * _PREHASH_TelehubInfo; 807char * _PREHASH_TelehubInfo;
887char * _PREHASH_StateSave; 808char * _PREHASH_StateSave;
888char * _PREHASH_RoleData; 809char * _PREHASH_RoleData;
@@ -893,11 +814,10 @@ char * _PREHASH_ParcelGodMarkAsContent;
893char * _PREHASH_UsePhysics; 814char * _PREHASH_UsePhysics;
894char * _PREHASH_RegionDenyTransacted; 815char * _PREHASH_RegionDenyTransacted;
895char * _PREHASH_JointType; 816char * _PREHASH_JointType;
896char * _PREHASH_TaxEstimate;
897char * _PREHASH_ObjectTaxEstimate; 817char * _PREHASH_ObjectTaxEstimate;
898char * _PREHASH_LightTaxEstimate; 818char * _PREHASH_LightTaxEstimate;
899char * _PREHASH_TeleportLandingStatusChanged;
900char * _PREHASH_LandTaxEstimate; 819char * _PREHASH_LandTaxEstimate;
820char * _PREHASH_TeleportLandingStatusChanged;
901char * _PREHASH_GroupTaxEstimate; 821char * _PREHASH_GroupTaxEstimate;
902char * _PREHASH_AvgViewerFPS; 822char * _PREHASH_AvgViewerFPS;
903char * _PREHASH_Buttons; 823char * _PREHASH_Buttons;
@@ -929,8 +849,6 @@ char * _PREHASH_WinnerID;
929char * _PREHASH_ChannelType; 849char * _PREHASH_ChannelType;
930char * _PREHASH_NonExemptMembers; 850char * _PREHASH_NonExemptMembers;
931char * _PREHASH_Agents; 851char * _PREHASH_Agents;
932char * _PREHASH_SimulatorStart;
933char * _PREHASH_Enable;
934char * _PREHASH_MemberData; 852char * _PREHASH_MemberData;
935char * _PREHASH_ToGroupID; 853char * _PREHASH_ToGroupID;
936char * _PREHASH_ImageNotInDatabase; 854char * _PREHASH_ImageNotInDatabase;
@@ -938,27 +856,21 @@ char * _PREHASH_StartDate;
938char * _PREHASH_AnimID; 856char * _PREHASH_AnimID;
939char * _PREHASH_Serial; 857char * _PREHASH_Serial;
940char * _PREHASH_AbuseRegionName; 858char * _PREHASH_AbuseRegionName;
941char * _PREHASH_ControlPort;
942char * _PREHASH_ModifyLand; 859char * _PREHASH_ModifyLand;
943char * _PREHASH_Digest; 860char * _PREHASH_Digest;
944char * _PREHASH_Victim; 861char * _PREHASH_Victim;
945char * _PREHASH_Script; 862char * _PREHASH_Script;
946char * _PREHASH_TemplateChecksumReply;
947char * _PREHASH_PickInfoReply; 863char * _PREHASH_PickInfoReply;
948char * _PREHASH_MoneyBalanceReply; 864char * _PREHASH_MoneyBalanceReply;
949char * _PREHASH_RoutedMoneyBalanceReply; 865char * _PREHASH_RoutedMoneyBalanceReply;
950char * _PREHASH_RoleID; 866char * _PREHASH_RoleID;
951char * _PREHASH_RegionInfo; 867char * _PREHASH_RegionInfo;
952char * _PREHASH_Sequence;
953char * _PREHASH_GodUpdateRegionInfo; 868char * _PREHASH_GodUpdateRegionInfo;
954char * _PREHASH_LocalX;
955char * _PREHASH_LocalY;
956char * _PREHASH_StartAnim; 869char * _PREHASH_StartAnim;
957char * _PREHASH_Location;
958char * _PREHASH_Action; 870char * _PREHASH_Action;
871char * _PREHASH_Location;
959char * _PREHASH_Rights; 872char * _PREHASH_Rights;
960char * _PREHASH_SearchDir; 873char * _PREHASH_SearchDir;
961char * _PREHASH_Active;
962char * _PREHASH_TransferRequest; 874char * _PREHASH_TransferRequest;
963char * _PREHASH_ScriptSensorRequest; 875char * _PREHASH_ScriptSensorRequest;
964char * _PREHASH_MoneyTransferRequest; 876char * _PREHASH_MoneyTransferRequest;
@@ -969,8 +881,6 @@ char * _PREHASH_Center;
969char * _PREHASH_SharedData; 881char * _PREHASH_SharedData;
970char * _PREHASH_PSBlock; 882char * _PREHASH_PSBlock;
971char * _PREHASH_UUIDNameBlock; 883char * _PREHASH_UUIDNameBlock;
972char * _PREHASH_Viewer;
973char * _PREHASH_GroupNoticeDelete;
974char * _PREHASH_GroupTitleUpdate; 884char * _PREHASH_GroupTitleUpdate;
975char * _PREHASH_Method; 885char * _PREHASH_Method;
976char * _PREHASH_TouchName; 886char * _PREHASH_TouchName;
@@ -982,11 +892,9 @@ char * _PREHASH_GodlikeMessage;
982char * _PREHASH_SystemMessage; 892char * _PREHASH_SystemMessage;
983char * _PREHASH_BodyRotation; 893char * _PREHASH_BodyRotation;
984char * _PREHASH_SearchRegions; 894char * _PREHASH_SearchRegions;
985char * _PREHASH_Ignore;
986char * _PREHASH_AnimationData; 895char * _PREHASH_AnimationData;
987char * _PREHASH_StatID; 896char * _PREHASH_StatID;
988char * _PREHASH_ItemID; 897char * _PREHASH_ItemID;
989char * _PREHASH_AvatarStatisticsReply;
990char * _PREHASH_ScriptDialogReply; 898char * _PREHASH_ScriptDialogReply;
991char * _PREHASH_RegionIDAndHandleReply; 899char * _PREHASH_RegionIDAndHandleReply;
992char * _PREHASH_CameraAtOffset; 900char * _PREHASH_CameraAtOffset;
@@ -1011,7 +919,6 @@ char * _PREHASH_OldItemID;
1011char * _PREHASH_RegionPort; 919char * _PREHASH_RegionPort;
1012char * _PREHASH_PriceEnergyUnit; 920char * _PREHASH_PriceEnergyUnit;
1013char * _PREHASH_Bitmap; 921char * _PREHASH_Bitmap;
1014char * _PREHASH_TrackAgentSession;
1015char * _PREHASH_CacheMissType; 922char * _PREHASH_CacheMissType;
1016char * _PREHASH_VFileID; 923char * _PREHASH_VFileID;
1017char * _PREHASH_GroupInsigniaID; 924char * _PREHASH_GroupInsigniaID;
@@ -1059,7 +966,6 @@ char * _PREHASH_MeanCollisionAlert;
1059char * _PREHASH_CanAcceptTasks; 966char * _PREHASH_CanAcceptTasks;
1060char * _PREHASH_ItemData; 967char * _PREHASH_ItemData;
1061char * _PREHASH_AnimationList; 968char * _PREHASH_AnimationList;
1062char * _PREHASH_PassObject;
1063char * _PREHASH_Reputation; 969char * _PREHASH_Reputation;
1064char * _PREHASH_IntValue; 970char * _PREHASH_IntValue;
1065char * _PREHASH_TargetType; 971char * _PREHASH_TargetType;
@@ -1082,10 +988,8 @@ char * _PREHASH_ParcelBuy;
1082char * _PREHASH_DirFindQueryBackend; 988char * _PREHASH_DirFindQueryBackend;
1083char * _PREHASH_DirPlacesQueryBackend; 989char * _PREHASH_DirPlacesQueryBackend;
1084char * _PREHASH_DirClassifiedQueryBackend; 990char * _PREHASH_DirClassifiedQueryBackend;
1085char * _PREHASH_DirPicksQueryBackend;
1086char * _PREHASH_DirLandQueryBackend; 991char * _PREHASH_DirLandQueryBackend;
1087char * _PREHASH_DirPopularQueryBackend; 992char * _PREHASH_DirPopularQueryBackend;
1088char * _PREHASH_LogoutDemand;
1089char * _PREHASH_HistoryData; 993char * _PREHASH_HistoryData;
1090char * _PREHASH_SnapshotID; 994char * _PREHASH_SnapshotID;
1091char * _PREHASH_Aspect; 995char * _PREHASH_Aspect;
@@ -1093,7 +997,6 @@ char * _PREHASH_ParamSize;
1093char * _PREHASH_VoteCast; 997char * _PREHASH_VoteCast;
1094char * _PREHASH_CastsShadows; 998char * _PREHASH_CastsShadows;
1095char * _PREHASH_EveryoneMask; 999char * _PREHASH_EveryoneMask;
1096char * _PREHASH_SetSunPhase;
1097char * _PREHASH_ObjectSpinUpdate; 1000char * _PREHASH_ObjectSpinUpdate;
1098char * _PREHASH_MaturePublish; 1001char * _PREHASH_MaturePublish;
1099char * _PREHASH_UseExistingAsset; 1002char * _PREHASH_UseExistingAsset;
@@ -1102,7 +1005,6 @@ char * _PREHASH_ParcelLocalID;
1102char * _PREHASH_TeleportCancel; 1005char * _PREHASH_TeleportCancel;
1103char * _PREHASH_UnixTime; 1006char * _PREHASH_UnixTime;
1104char * _PREHASH_QueryFlags; 1007char * _PREHASH_QueryFlags;
1105char * _PREHASH_LastExecFroze;
1106char * _PREHASH_AlwaysRun; 1008char * _PREHASH_AlwaysRun;
1107char * _PREHASH_Bottom; 1009char * _PREHASH_Bottom;
1108char * _PREHASH_ButtonData; 1010char * _PREHASH_ButtonData;
@@ -1121,7 +1023,6 @@ char * _PREHASH_NVPairs;
1121char * _PREHASH_GroupNoticesListRequest; 1023char * _PREHASH_GroupNoticesListRequest;
1122char * _PREHASH_ParcelAccessListRequest; 1024char * _PREHASH_ParcelAccessListRequest;
1123char * _PREHASH_MuteListRequest; 1025char * _PREHASH_MuteListRequest;
1124char * _PREHASH_StartPeriod;
1125char * _PREHASH_RpcChannelRequest; 1026char * _PREHASH_RpcChannelRequest;
1126char * _PREHASH_LandStatRequest; 1027char * _PREHASH_LandStatRequest;
1127char * _PREHASH_PlacesQuery; 1028char * _PREHASH_PlacesQuery;
@@ -1149,34 +1050,27 @@ char * _PREHASH_SnapSelection;
1149char * _PREHASH_SoundTrigger; 1050char * _PREHASH_SoundTrigger;
1150char * _PREHASH_TerrainRaiseLimit; 1051char * _PREHASH_TerrainRaiseLimit;
1151char * _PREHASH_Quorum; 1052char * _PREHASH_Quorum;
1152char * _PREHASH_TokenBlock;
1153char * _PREHASH_AgentBlock; 1053char * _PREHASH_AgentBlock;
1154char * _PREHASH_CommandBlock; 1054char * _PREHASH_CommandBlock;
1155char * _PREHASH_PricePublicObjectDecay; 1055char * _PREHASH_PricePublicObjectDecay;
1156char * _PREHASH_SpawnPointPos; 1056char * _PREHASH_SpawnPointPos;
1157char * _PREHASH_AttachedSoundCutoffRadius;
1158char * _PREHASH_VolumeDetail; 1057char * _PREHASH_VolumeDetail;
1159char * _PREHASH_FromAgentName; 1058char * _PREHASH_FromAgentName;
1160char * _PREHASH_Range; 1059char * _PREHASH_Range;
1161char * _PREHASH_DirectoryVisibility; 1060char * _PREHASH_DirectoryVisibility;
1162char * _PREHASH_PublicIP; 1061char * _PREHASH_PublicIP;
1163char * _PREHASH_TeleportFailed; 1062char * _PREHASH_TeleportFailed;
1164char * _PREHASH_OnlineStatusReply;
1165char * _PREHASH_RequestAvatarInfo;
1166char * _PREHASH_PreloadSound; 1063char * _PREHASH_PreloadSound;
1167char * _PREHASH_ScreenshotID; 1064char * _PREHASH_ScreenshotID;
1168char * _PREHASH_CovenantTimestamp; 1065char * _PREHASH_CovenantTimestamp;
1169char * _PREHASH_OldestUnacked; 1066char * _PREHASH_OldestUnacked;
1170char * _PREHASH_SimulatorIP; 1067char * _PREHASH_SimulatorIP;
1171char * _PREHASH_ObjectImport;
1172char * _PREHASH_Value; 1068char * _PREHASH_Value;
1173char * _PREHASH_JointAxisOrAnchor; 1069char * _PREHASH_JointAxisOrAnchor;
1174char * _PREHASH_Test0; 1070char * _PREHASH_Test0;
1175char * _PREHASH_Test1; 1071char * _PREHASH_Test1;
1176char * _PREHASH_Test2; 1072char * _PREHASH_Test2;
1177char * _PREHASH_SunPhase; 1073char * _PREHASH_SunPhase;
1178char * _PREHASH_Place;
1179char * _PREHASH_Phase;
1180char * _PREHASH_ParcelDivide; 1074char * _PREHASH_ParcelDivide;
1181char * _PREHASH_PriceObjectClaim; 1075char * _PREHASH_PriceObjectClaim;
1182char * _PREHASH_Field; 1076char * _PREHASH_Field;
@@ -1186,7 +1080,6 @@ char * _PREHASH_LiveHelpGroupReply;
1186char * _PREHASH_Score; 1080char * _PREHASH_Score;
1187char * _PREHASH_Image; 1081char * _PREHASH_Image;
1188char * _PREHASH_ObjectClickAction; 1082char * _PREHASH_ObjectClickAction;
1189char * _PREHASH_Delta;
1190char * _PREHASH_Parameter; 1083char * _PREHASH_Parameter;
1191char * _PREHASH_Flags; 1084char * _PREHASH_Flags;
1192char * _PREHASH_Plane; 1085char * _PREHASH_Plane;
@@ -1196,26 +1089,24 @@ char * _PREHASH_DirFindQuery;
1196char * _PREHASH_Textures; 1089char * _PREHASH_Textures;
1197char * _PREHASH_EventData; 1090char * _PREHASH_EventData;
1198char * _PREHASH_Final; 1091char * _PREHASH_Final;
1092char * _PREHASH_System;
1199char * _PREHASH_TelehubPos; 1093char * _PREHASH_TelehubPos;
1200char * _PREHASH_ReportAutosaveCrash; 1094char * _PREHASH_ReportAutosaveCrash;
1201char * _PREHASH_CreateTrustedCircuit; 1095char * _PREHASH_CreateTrustedCircuit;
1202char * _PREHASH_DenyTrustedCircuit; 1096char * _PREHASH_DenyTrustedCircuit;
1203char * _PREHASH_RequestTrustedCircuit; 1097char * _PREHASH_RequestTrustedCircuit;
1204char * _PREHASH_Codec; 1098char * _PREHASH_Codec;
1205char * _PREHASH_Level;
1206char * _PREHASH_Modal; 1099char * _PREHASH_Modal;
1207char * _PREHASH_ChildAgentUnknown; 1100char * _PREHASH_ChildAgentUnknown;
1208char * _PREHASH_LandingType; 1101char * _PREHASH_LandingType;
1209char * _PREHASH_ScriptRunningReply; 1102char * _PREHASH_ScriptRunningReply;
1210char * _PREHASH_MoneyDetailsReply;
1211char * _PREHASH_Reply; 1103char * _PREHASH_Reply;
1104char * _PREHASH_GroupAccountDetailsReply;
1212char * _PREHASH_TelehubRot; 1105char * _PREHASH_TelehubRot;
1213char * _PREHASH_RequestFriendship;
1214char * _PREHASH_AcceptFriendship; 1106char * _PREHASH_AcceptFriendship;
1215char * _PREHASH_GroupAccountDetailsReply; 1107char * _PREHASH_ItemType;
1216char * _PREHASH_DwellInfo; 1108char * _PREHASH_DwellInfo;
1217char * _PREHASH_AgentResume; 1109char * _PREHASH_AgentResume;
1218char * _PREHASH_ItemType;
1219char * _PREHASH_MailFilter; 1110char * _PREHASH_MailFilter;
1220char * _PREHASH_Disconnect; 1111char * _PREHASH_Disconnect;
1221char * _PREHASH_SimPosition; 1112char * _PREHASH_SimPosition;
@@ -1242,7 +1133,6 @@ char * _PREHASH_VoteType;
1242char * _PREHASH_CategoryID; 1133char * _PREHASH_CategoryID;
1243char * _PREHASH_Token; 1134char * _PREHASH_Token;
1244char * _PREHASH_AggregatePerms; 1135char * _PREHASH_AggregatePerms;
1245char * _PREHASH_StartParcelRemoveAck;
1246char * _PREHASH_ObjectSelect; 1136char * _PREHASH_ObjectSelect;
1247char * _PREHASH_ForceObjectSelect; 1137char * _PREHASH_ForceObjectSelect;
1248char * _PREHASH_Price; 1138char * _PREHASH_Price;
@@ -1271,7 +1161,6 @@ char * _PREHASH_Notes;
1271char * _PREHASH_AvatarID; 1161char * _PREHASH_AvatarID;
1272char * _PREHASH_FounderID; 1162char * _PREHASH_FounderID;
1273char * _PREHASH_EndPointID; 1163char * _PREHASH_EndPointID;
1274char * _PREHASH_StipendEstimate;
1275char * _PREHASH_LocationLookAt; 1164char * _PREHASH_LocationLookAt;
1276char * _PREHASH_Sound; 1165char * _PREHASH_Sound;
1277char * _PREHASH_Cover; 1166char * _PREHASH_Cover;
@@ -1291,12 +1180,12 @@ char * _PREHASH_ProfileHollow;
1291char * _PREHASH_GroupRoleChanges; 1180char * _PREHASH_GroupRoleChanges;
1292char * _PREHASH_Count; 1181char * _PREHASH_Count;
1293char * _PREHASH_South; 1182char * _PREHASH_South;
1294char * _PREHASH_Entry;
1295char * _PREHASH_ObjectUpdateCompressed; 1183char * _PREHASH_ObjectUpdateCompressed;
1296char * _PREHASH_MuteFlags; 1184char * _PREHASH_MuteFlags;
1297char * _PREHASH_Group; 1185char * _PREHASH_Group;
1298char * _PREHASH_AgentPause; 1186char * _PREHASH_AgentPause;
1299char * _PREHASH_LanguagesText; 1187char * _PREHASH_LanguagesText;
1188char * _PREHASH_Error;
1300char * _PREHASH_InternalScriptMail; 1189char * _PREHASH_InternalScriptMail;
1301char * _PREHASH_FindAgent; 1190char * _PREHASH_FindAgent;
1302char * _PREHASH_AgentData; 1191char * _PREHASH_AgentData;
@@ -1305,7 +1194,6 @@ char * _PREHASH_AssetBlock;
1305char * _PREHASH_AcceptNotices; 1194char * _PREHASH_AcceptNotices;
1306char * _PREHASH_SetGroupAcceptNotices; 1195char * _PREHASH_SetGroupAcceptNotices;
1307char * _PREHASH_CloseCircuit; 1196char * _PREHASH_CloseCircuit;
1308char * _PREHASH_LogControl;
1309char * _PREHASH_TeleportFinish; 1197char * _PREHASH_TeleportFinish;
1310char * _PREHASH_PathRevolutions; 1198char * _PREHASH_PathRevolutions;
1311char * _PREHASH_ClassifiedInfoReply; 1199char * _PREHASH_ClassifiedInfoReply;
@@ -1322,7 +1210,6 @@ char * _PREHASH_DataHomeLocationRequest;
1322char * _PREHASH_EventNotificationAddRequest; 1210char * _PREHASH_EventNotificationAddRequest;
1323char * _PREHASH_ParcelDwellRequest; 1211char * _PREHASH_ParcelDwellRequest;
1324char * _PREHASH_EventLocationRequest; 1212char * _PREHASH_EventLocationRequest;
1325char * _PREHASH_EndPeriod;
1326char * _PREHASH_SetStartLocationRequest; 1213char * _PREHASH_SetStartLocationRequest;
1327char * _PREHASH_QueryStart; 1214char * _PREHASH_QueryStart;
1328char * _PREHASH_EjectData; 1215char * _PREHASH_EjectData;
@@ -1335,7 +1222,6 @@ char * _PREHASH_ParcelRelease;
1335char * _PREHASH_VFileType; 1222char * _PREHASH_VFileType;
1336char * _PREHASH_EjectGroupMemberReply; 1223char * _PREHASH_EjectGroupMemberReply;
1337char * _PREHASH_ImageData; 1224char * _PREHASH_ImageData;
1338char * _PREHASH_SpaceServerSimulatorTimeMessage;
1339char * _PREHASH_SimulatorViewerTimeMessage; 1225char * _PREHASH_SimulatorViewerTimeMessage;
1340char * _PREHASH_Rotation; 1226char * _PREHASH_Rotation;
1341char * _PREHASH_Selection; 1227char * _PREHASH_Selection;
@@ -1343,7 +1229,6 @@ char * _PREHASH_TransactionData;
1343char * _PREHASH_OperationData; 1229char * _PREHASH_OperationData;
1344char * _PREHASH_ExpirationDate; 1230char * _PREHASH_ExpirationDate;
1345char * _PREHASH_ParcelDeedToGroup; 1231char * _PREHASH_ParcelDeedToGroup;
1346char * _PREHASH_DirPicksReply;
1347char * _PREHASH_AvatarPicksReply; 1232char * _PREHASH_AvatarPicksReply;
1348char * _PREHASH_GroupTitlesReply; 1233char * _PREHASH_GroupTitlesReply;
1349char * _PREHASH_AgentInfo; 1234char * _PREHASH_AgentInfo;
@@ -1354,8 +1239,8 @@ char * _PREHASH_PassPrice;
1354char * _PREHASH_SourceID; 1239char * _PREHASH_SourceID;
1355char * _PREHASH_ChangeUserRights; 1240char * _PREHASH_ChangeUserRights;
1356char * _PREHASH_TeleportFlags; 1241char * _PREHASH_TeleportFlags;
1357char * _PREHASH_AssetData;
1358char * _PREHASH_SlaveParcelData; 1242char * _PREHASH_SlaveParcelData;
1243char * _PREHASH_AssetData;
1359char * _PREHASH_MultipleObjectUpdate; 1244char * _PREHASH_MultipleObjectUpdate;
1360char * _PREHASH_ObjectUpdate; 1245char * _PREHASH_ObjectUpdate;
1361char * _PREHASH_ImprovedTerseObjectUpdate; 1246char * _PREHASH_ImprovedTerseObjectUpdate;
@@ -1371,7 +1256,6 @@ char * _PREHASH_TaskLocalID;
1371char * _PREHASH_ClaimDate; 1256char * _PREHASH_ClaimDate;
1372char * _PREHASH_MergeParcel; 1257char * _PREHASH_MergeParcel;
1373char * _PREHASH_Priority; 1258char * _PREHASH_Priority;
1374char * _PREHASH_Building;
1375char * _PREHASH_QueryText; 1259char * _PREHASH_QueryText;
1376char * _PREHASH_GroupNoticeAdd; 1260char * _PREHASH_GroupNoticeAdd;
1377char * _PREHASH_ReturnType; 1261char * _PREHASH_ReturnType;
@@ -1381,7 +1265,6 @@ char * _PREHASH_HeaderData;
1381char * _PREHASH_RequestMultipleObjects; 1265char * _PREHASH_RequestMultipleObjects;
1382char * _PREHASH_RetrieveInstantMessages; 1266char * _PREHASH_RetrieveInstantMessages;
1383char * _PREHASH_OpenCircuit; 1267char * _PREHASH_OpenCircuit;
1384char * _PREHASH_SecureSessionID;
1385char * _PREHASH_CrossedRegion; 1268char * _PREHASH_CrossedRegion;
1386char * _PREHASH_DirGroupsReply; 1269char * _PREHASH_DirGroupsReply;
1387char * _PREHASH_AvatarGroupsReply; 1270char * _PREHASH_AvatarGroupsReply;
@@ -1392,18 +1275,14 @@ char * _PREHASH_Position;
1392char * _PREHASH_ParentEstate; 1275char * _PREHASH_ParentEstate;
1393char * _PREHASH_EstateName; 1276char * _PREHASH_EstateName;
1394char * _PREHASH_MuteName; 1277char * _PREHASH_MuteName;
1395char * _PREHASH_StartParcelRename;
1396char * _PREHASH_BulkParcelRename;
1397char * _PREHASH_ParcelRename; 1278char * _PREHASH_ParcelRename;
1398char * _PREHASH_ViewerFilename; 1279char * _PREHASH_ViewerFilename;
1399char * _PREHASH_Positive;
1400char * _PREHASH_UserReportInternal; 1280char * _PREHASH_UserReportInternal;
1401char * _PREHASH_AvatarPropertiesRequest; 1281char * _PREHASH_AvatarPropertiesRequest;
1402char * _PREHASH_ParcelPropertiesRequest; 1282char * _PREHASH_ParcelPropertiesRequest;
1403char * _PREHASH_GroupProfileRequest; 1283char * _PREHASH_GroupProfileRequest;
1404char * _PREHASH_AgentDataUpdateRequest; 1284char * _PREHASH_AgentDataUpdateRequest;
1405char * _PREHASH_PriceObjectScaleFactor; 1285char * _PREHASH_PriceObjectScaleFactor;
1406char * _PREHASH_DirPicksQuery;
1407char * _PREHASH_OpenEnrollment; 1286char * _PREHASH_OpenEnrollment;
1408char * _PREHASH_GroupData; 1287char * _PREHASH_GroupData;
1409char * _PREHASH_RequestGodlikePowers; 1288char * _PREHASH_RequestGodlikePowers;
@@ -1414,7 +1293,6 @@ char * _PREHASH_Controls;
1414char * _PREHASH_FirstDetachAll; 1293char * _PREHASH_FirstDetachAll;
1415char * _PREHASH_EstateID; 1294char * _PREHASH_EstateID;
1416char * _PREHASH_ImprovedInstantMessage; 1295char * _PREHASH_ImprovedInstantMessage;
1417char * _PREHASH_AgentQuit;
1418char * _PREHASH_CheckParcelSales; 1296char * _PREHASH_CheckParcelSales;
1419char * _PREHASH_ParcelSales; 1297char * _PREHASH_ParcelSales;
1420char * _PREHASH_CurrentInterval; 1298char * _PREHASH_CurrentInterval;
@@ -1431,12 +1309,8 @@ char * _PREHASH_OwnerIDs;
1431char * _PREHASH_SystemKickUser; 1309char * _PREHASH_SystemKickUser;
1432char * _PREHASH_TransactionTime; 1310char * _PREHASH_TransactionTime;
1433char * _PREHASH_TimeToLive; 1311char * _PREHASH_TimeToLive;
1434char * _PREHASH_StartParcelRemove;
1435char * _PREHASH_BulkParcelRemove;
1436char * _PREHASH_OldAgentID; 1312char * _PREHASH_OldAgentID;
1437char * _PREHASH_BonusEstimate;
1438char * _PREHASH_MusicURL; 1313char * _PREHASH_MusicURL;
1439char * _PREHASH_CompleteLure;
1440char * _PREHASH_ParcelPrimBonus; 1314char * _PREHASH_ParcelPrimBonus;
1441char * _PREHASH_EjectUser; 1315char * _PREHASH_EjectUser;
1442char * _PREHASH_CoarseLocationUpdate; 1316char * _PREHASH_CoarseLocationUpdate;
@@ -1469,10 +1343,6 @@ char * _PREHASH_ParcelProperties;
1469char * _PREHASH_EstateOwnerID; 1343char * _PREHASH_EstateOwnerID;
1470char * _PREHASH_LogoutRequest; 1344char * _PREHASH_LogoutRequest;
1471char * _PREHASH_AssetUploadRequest; 1345char * _PREHASH_AssetUploadRequest;
1472char * _PREHASH_ReputationIndividualRequest;
1473char * _PREHASH_MajorVersion;
1474char * _PREHASH_MinorVersion;
1475char * _PREHASH_SimulatorAssign;
1476char * _PREHASH_TransactionType; 1346char * _PREHASH_TransactionType;
1477char * _PREHASH_AvatarPropertiesUpdate; 1347char * _PREHASH_AvatarPropertiesUpdate;
1478char * _PREHASH_ParcelPropertiesUpdate; 1348char * _PREHASH_ParcelPropertiesUpdate;
@@ -1481,7 +1351,6 @@ char * _PREHASH_AbortXfer;
1481char * _PREHASH_DeRezAck; 1351char * _PREHASH_DeRezAck;
1482char * _PREHASH_TakeControls; 1352char * _PREHASH_TakeControls;
1483char * _PREHASH_DirLandReply; 1353char * _PREHASH_DirLandReply;
1484char * _PREHASH_SpaceLocationTeleportReply;
1485char * _PREHASH_MuteType; 1354char * _PREHASH_MuteType;
1486char * _PREHASH_IMViaEMail; 1355char * _PREHASH_IMViaEMail;
1487char * _PREHASH_RentPrice; 1356char * _PREHASH_RentPrice;
@@ -1522,7 +1391,6 @@ void init_prehash_data()
1522 _PREHASH_PartnerID = gMessageStringTable.getString("PartnerID"); 1391 _PREHASH_PartnerID = gMessageStringTable.getString("PartnerID");
1523 _PREHASH_DirLandQuery = gMessageStringTable.getString("DirLandQuery"); 1392 _PREHASH_DirLandQuery = gMessageStringTable.getString("DirLandQuery");
1524 _PREHASH_TeleportStart = gMessageStringTable.getString("TeleportStart"); 1393 _PREHASH_TeleportStart = gMessageStringTable.getString("TeleportStart");
1525 _PREHASH_LogMessages = gMessageStringTable.getString("LogMessages");
1526 _PREHASH_AboutText = gMessageStringTable.getString("AboutText"); 1394 _PREHASH_AboutText = gMessageStringTable.getString("AboutText");
1527 _PREHASH_VisualParam = gMessageStringTable.getString("VisualParam"); 1395 _PREHASH_VisualParam = gMessageStringTable.getString("VisualParam");
1528 _PREHASH_GroupPrims = gMessageStringTable.getString("GroupPrims"); 1396 _PREHASH_GroupPrims = gMessageStringTable.getString("GroupPrims");
@@ -1530,10 +1398,8 @@ void init_prehash_data()
1530 _PREHASH_ID = gMessageStringTable.getString("ID"); 1398 _PREHASH_ID = gMessageStringTable.getString("ID");
1531 _PREHASH_UUIDNameRequest = gMessageStringTable.getString("UUIDNameRequest"); 1399 _PREHASH_UUIDNameRequest = gMessageStringTable.getString("UUIDNameRequest");
1532 _PREHASH_UUIDGroupNameRequest = gMessageStringTable.getString("UUIDGroupNameRequest"); 1400 _PREHASH_UUIDGroupNameRequest = gMessageStringTable.getString("UUIDGroupNameRequest");
1533 _PREHASH_MoneyTransactionsRequest = gMessageStringTable.getString("MoneyTransactionsRequest");
1534 _PREHASH_GroupAccountTransactionsRequest = gMessageStringTable.getString("GroupAccountTransactionsRequest"); 1401 _PREHASH_GroupAccountTransactionsRequest = gMessageStringTable.getString("GroupAccountTransactionsRequest");
1535 _PREHASH_MapNameRequest = gMessageStringTable.getString("MapNameRequest"); 1402 _PREHASH_MapNameRequest = gMessageStringTable.getString("MapNameRequest");
1536 _PREHASH_MailTaskSimRequest = gMessageStringTable.getString("MailTaskSimRequest");
1537 _PREHASH_UpdateSimulator = gMessageStringTable.getString("UpdateSimulator"); 1403 _PREHASH_UpdateSimulator = gMessageStringTable.getString("UpdateSimulator");
1538 _PREHASH_BillableFactor = gMessageStringTable.getString("BillableFactor"); 1404 _PREHASH_BillableFactor = gMessageStringTable.getString("BillableFactor");
1539 _PREHASH_ObjectBonusFactor = gMessageStringTable.getString("ObjectBonusFactor"); 1405 _PREHASH_ObjectBonusFactor = gMessageStringTable.getString("ObjectBonusFactor");
@@ -1543,7 +1409,6 @@ void init_prehash_data()
1543 _PREHASH_LayerType = gMessageStringTable.getString("LayerType"); 1409 _PREHASH_LayerType = gMessageStringTable.getString("LayerType");
1544 _PREHASH_OwnerRole = gMessageStringTable.getString("OwnerRole"); 1410 _PREHASH_OwnerRole = gMessageStringTable.getString("OwnerRole");
1545 _PREHASH_ParcelOverlay = gMessageStringTable.getString("ParcelOverlay"); 1411 _PREHASH_ParcelOverlay = gMessageStringTable.getString("ParcelOverlay");
1546 _PREHASH_AdjustBalance = gMessageStringTable.getString("AdjustBalance");
1547 _PREHASH_GroupOwned = gMessageStringTable.getString("GroupOwned"); 1412 _PREHASH_GroupOwned = gMessageStringTable.getString("GroupOwned");
1548 _PREHASH_IP = gMessageStringTable.getString("IP"); 1413 _PREHASH_IP = gMessageStringTable.getString("IP");
1549 _PREHASH_ChatFromViewer = gMessageStringTable.getString("ChatFromViewer"); 1414 _PREHASH_ChatFromViewer = gMessageStringTable.getString("ChatFromViewer");
@@ -1578,8 +1443,8 @@ void init_prehash_data()
1578 _PREHASH_UpdateBlock = gMessageStringTable.getString("UpdateBlock"); 1443 _PREHASH_UpdateBlock = gMessageStringTable.getString("UpdateBlock");
1579 _PREHASH_ClassifiedGodDelete = gMessageStringTable.getString("ClassifiedGodDelete"); 1444 _PREHASH_ClassifiedGodDelete = gMessageStringTable.getString("ClassifiedGodDelete");
1580 _PREHASH_ObjectGrabUpdate = gMessageStringTable.getString("ObjectGrabUpdate"); 1445 _PREHASH_ObjectGrabUpdate = gMessageStringTable.getString("ObjectGrabUpdate");
1581 _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate");
1582 _PREHASH_LocationPos = gMessageStringTable.getString("LocationPos"); 1446 _PREHASH_LocationPos = gMessageStringTable.getString("LocationPos");
1447 _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate");
1583 _PREHASH_StartDateTime = gMessageStringTable.getString("StartDateTime"); 1448 _PREHASH_StartDateTime = gMessageStringTable.getString("StartDateTime");
1584 _PREHASH_ObjectUpdateCached = gMessageStringTable.getString("ObjectUpdateCached"); 1449 _PREHASH_ObjectUpdateCached = gMessageStringTable.getString("ObjectUpdateCached");
1585 _PREHASH_Packets = gMessageStringTable.getString("Packets"); 1450 _PREHASH_Packets = gMessageStringTable.getString("Packets");
@@ -1611,14 +1476,11 @@ void init_prehash_data()
1611 _PREHASH_ClassifiedFlags = gMessageStringTable.getString("ClassifiedFlags"); 1476 _PREHASH_ClassifiedFlags = gMessageStringTable.getString("ClassifiedFlags");
1612 _PREHASH_ControlFlags = gMessageStringTable.getString("ControlFlags"); 1477 _PREHASH_ControlFlags = gMessageStringTable.getString("ControlFlags");
1613 _PREHASH_TeleportRequest = gMessageStringTable.getString("TeleportRequest"); 1478 _PREHASH_TeleportRequest = gMessageStringTable.getString("TeleportRequest");
1614 _PREHASH_SpaceLocationTeleportRequest = gMessageStringTable.getString("SpaceLocationTeleportRequest");
1615 _PREHASH_LeaderBoardRequest = gMessageStringTable.getString("LeaderBoardRequest");
1616 _PREHASH_ScriptTeleportRequest = gMessageStringTable.getString("ScriptTeleportRequest"); 1479 _PREHASH_ScriptTeleportRequest = gMessageStringTable.getString("ScriptTeleportRequest");
1480 _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest");
1617 _PREHASH_DateUTC = gMessageStringTable.getString("DateUTC"); 1481 _PREHASH_DateUTC = gMessageStringTable.getString("DateUTC");
1618 _PREHASH_TaskIDs = gMessageStringTable.getString("TaskIDs"); 1482 _PREHASH_TaskIDs = gMessageStringTable.getString("TaskIDs");
1619 _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest");
1620 _PREHASH_RequestResult = gMessageStringTable.getString("RequestResult"); 1483 _PREHASH_RequestResult = gMessageStringTable.getString("RequestResult");
1621 _PREHASH_ReputationAgentAssign = gMessageStringTable.getString("ReputationAgentAssign");
1622 _PREHASH_CanAcceptAgents = gMessageStringTable.getString("CanAcceptAgents"); 1484 _PREHASH_CanAcceptAgents = gMessageStringTable.getString("CanAcceptAgents");
1623 _PREHASH_ObjectSaleInfo = gMessageStringTable.getString("ObjectSaleInfo"); 1485 _PREHASH_ObjectSaleInfo = gMessageStringTable.getString("ObjectSaleInfo");
1624 _PREHASH_KillChildAgents = gMessageStringTable.getString("KillChildAgents"); 1486 _PREHASH_KillChildAgents = gMessageStringTable.getString("KillChildAgents");
@@ -1630,7 +1492,6 @@ void init_prehash_data()
1630 _PREHASH_OwnershipCost = gMessageStringTable.getString("OwnershipCost"); 1492 _PREHASH_OwnershipCost = gMessageStringTable.getString("OwnershipCost");
1631 _PREHASH_AvatarNotesUpdate = gMessageStringTable.getString("AvatarNotesUpdate"); 1493 _PREHASH_AvatarNotesUpdate = gMessageStringTable.getString("AvatarNotesUpdate");
1632 _PREHASH_PID = gMessageStringTable.getString("PID"); 1494 _PREHASH_PID = gMessageStringTable.getString("PID");
1633 _PREHASH_TimeString = gMessageStringTable.getString("TimeString");
1634 _PREHASH_DirPopularReply = gMessageStringTable.getString("DirPopularReply"); 1495 _PREHASH_DirPopularReply = gMessageStringTable.getString("DirPopularReply");
1635 _PREHASH_TerrainHeightRange00 = gMessageStringTable.getString("TerrainHeightRange00"); 1496 _PREHASH_TerrainHeightRange00 = gMessageStringTable.getString("TerrainHeightRange00");
1636 _PREHASH_SimData = gMessageStringTable.getString("SimData"); 1497 _PREHASH_SimData = gMessageStringTable.getString("SimData");
@@ -1656,7 +1517,6 @@ void init_prehash_data()
1656 _PREHASH_URL = gMessageStringTable.getString("URL"); 1517 _PREHASH_URL = gMessageStringTable.getString("URL");
1657 _PREHASH_CreationDate = gMessageStringTable.getString("CreationDate"); 1518 _PREHASH_CreationDate = gMessageStringTable.getString("CreationDate");
1658 _PREHASH_JointPivot = gMessageStringTable.getString("JointPivot"); 1519 _PREHASH_JointPivot = gMessageStringTable.getString("JointPivot");
1659 _PREHASH_RateeID = gMessageStringTable.getString("RateeID");
1660 _PREHASH_FPS = gMessageStringTable.getString("FPS"); 1520 _PREHASH_FPS = gMessageStringTable.getString("FPS");
1661 _PREHASH_HasTelehub = gMessageStringTable.getString("HasTelehub"); 1521 _PREHASH_HasTelehub = gMessageStringTable.getString("HasTelehub");
1662 _PREHASH_PathEnd = gMessageStringTable.getString("PathEnd"); 1522 _PREHASH_PathEnd = gMessageStringTable.getString("PathEnd");
@@ -1681,7 +1541,6 @@ void init_prehash_data()
1681 _PREHASH_ParcelAccessListReply = gMessageStringTable.getString("ParcelAccessListReply"); 1541 _PREHASH_ParcelAccessListReply = gMessageStringTable.getString("ParcelAccessListReply");
1682 _PREHASH_RpcChannelReply = gMessageStringTable.getString("RpcChannelReply"); 1542 _PREHASH_RpcChannelReply = gMessageStringTable.getString("RpcChannelReply");
1683 _PREHASH_RegionPresenceResponse = gMessageStringTable.getString("RegionPresenceResponse"); 1543 _PREHASH_RegionPresenceResponse = gMessageStringTable.getString("RegionPresenceResponse");
1684 _PREHASH_AgentPresenceResponse = gMessageStringTable.getString("AgentPresenceResponse");
1685 _PREHASH_CharterMember = gMessageStringTable.getString("CharterMember"); 1544 _PREHASH_CharterMember = gMessageStringTable.getString("CharterMember");
1686 _PREHASH_EdgeData = gMessageStringTable.getString("EdgeData"); 1545 _PREHASH_EdgeData = gMessageStringTable.getString("EdgeData");
1687 _PREHASH_NameData = gMessageStringTable.getString("NameData"); 1546 _PREHASH_NameData = gMessageStringTable.getString("NameData");
@@ -1695,14 +1554,12 @@ void init_prehash_data()
1695 _PREHASH_ParcelPropertiesRequestByID = gMessageStringTable.getString("ParcelPropertiesRequestByID"); 1554 _PREHASH_ParcelPropertiesRequestByID = gMessageStringTable.getString("ParcelPropertiesRequestByID");
1696 _PREHASH_ObjectLink = gMessageStringTable.getString("ObjectLink"); 1555 _PREHASH_ObjectLink = gMessageStringTable.getString("ObjectLink");
1697 _PREHASH_RpcScriptReplyInbound = gMessageStringTable.getString("RpcScriptReplyInbound"); 1556 _PREHASH_RpcScriptReplyInbound = gMessageStringTable.getString("RpcScriptReplyInbound");
1698 _PREHASH_BoardData = gMessageStringTable.getString("BoardData");
1699 _PREHASH_RezData = gMessageStringTable.getString("RezData"); 1557 _PREHASH_RezData = gMessageStringTable.getString("RezData");
1700 _PREHASH_RemoveInventoryObjects = gMessageStringTable.getString("RemoveInventoryObjects"); 1558 _PREHASH_RemoveInventoryObjects = gMessageStringTable.getString("RemoveInventoryObjects");
1701 _PREHASH_GroupProposalBallot = gMessageStringTable.getString("GroupProposalBallot"); 1559 _PREHASH_GroupProposalBallot = gMessageStringTable.getString("GroupProposalBallot");
1702 _PREHASH_RPCServerIP = gMessageStringTable.getString("RPCServerIP"); 1560 _PREHASH_RPCServerIP = gMessageStringTable.getString("RPCServerIP");
1703 _PREHASH_Far = gMessageStringTable.getString("Far"); 1561 _PREHASH_Far = gMessageStringTable.getString("Far");
1704 _PREHASH_GodSessionID = gMessageStringTable.getString("GodSessionID"); 1562 _PREHASH_GodSessionID = gMessageStringTable.getString("GodSessionID");
1705 _PREHASH_ViewerDigest = gMessageStringTable.getString("ViewerDigest");
1706 _PREHASH_FLAboutText = gMessageStringTable.getString("FLAboutText"); 1563 _PREHASH_FLAboutText = gMessageStringTable.getString("FLAboutText");
1707 _PREHASH_RegionHandshakeReply = gMessageStringTable.getString("RegionHandshakeReply"); 1564 _PREHASH_RegionHandshakeReply = gMessageStringTable.getString("RegionHandshakeReply");
1708 _PREHASH_GroupActiveProposalItemReply = gMessageStringTable.getString("GroupActiveProposalItemReply"); 1565 _PREHASH_GroupActiveProposalItemReply = gMessageStringTable.getString("GroupActiveProposalItemReply");
@@ -1714,7 +1571,6 @@ void init_prehash_data()
1714 _PREHASH_NewName = gMessageStringTable.getString("NewName"); 1571 _PREHASH_NewName = gMessageStringTable.getString("NewName");
1715 _PREHASH_Key = gMessageStringTable.getString("Key"); 1572 _PREHASH_Key = gMessageStringTable.getString("Key");
1716 _PREHASH_AgentID = gMessageStringTable.getString("AgentID"); 1573 _PREHASH_AgentID = gMessageStringTable.getString("AgentID");
1717 _PREHASH_OnlineStatusRequest = gMessageStringTable.getString("OnlineStatusRequest");
1718 _PREHASH_EventNotificationRemoveRequest = gMessageStringTable.getString("EventNotificationRemoveRequest"); 1574 _PREHASH_EventNotificationRemoveRequest = gMessageStringTable.getString("EventNotificationRemoveRequest");
1719 _PREHASH_NewFolderID = gMessageStringTable.getString("NewFolderID"); 1575 _PREHASH_NewFolderID = gMessageStringTable.getString("NewFolderID");
1720 _PREHASH_Arc = gMessageStringTable.getString("Arc"); 1576 _PREHASH_Arc = gMessageStringTable.getString("Arc");
@@ -1726,7 +1582,6 @@ void init_prehash_data()
1726 _PREHASH_MiscStats = gMessageStringTable.getString("MiscStats"); 1582 _PREHASH_MiscStats = gMessageStringTable.getString("MiscStats");
1727 _PREHASH_ImageID = gMessageStringTable.getString("ImageID"); 1583 _PREHASH_ImageID = gMessageStringTable.getString("ImageID");
1728 _PREHASH_DataPacket = gMessageStringTable.getString("DataPacket"); 1584 _PREHASH_DataPacket = gMessageStringTable.getString("DataPacket");
1729 _PREHASH_ObjectDehinge = gMessageStringTable.getString("ObjectDehinge");
1730 _PREHASH_You = gMessageStringTable.getString("You"); 1585 _PREHASH_You = gMessageStringTable.getString("You");
1731 _PREHASH_ScriptControlChange = gMessageStringTable.getString("ScriptControlChange"); 1586 _PREHASH_ScriptControlChange = gMessageStringTable.getString("ScriptControlChange");
1732 _PREHASH_LoadURL = gMessageStringTable.getString("LoadURL"); 1587 _PREHASH_LoadURL = gMessageStringTable.getString("LoadURL");
@@ -1743,9 +1598,9 @@ void init_prehash_data()
1743 _PREHASH_SetGroupContribution = gMessageStringTable.getString("SetGroupContribution"); 1598 _PREHASH_SetGroupContribution = gMessageStringTable.getString("SetGroupContribution");
1744 _PREHASH_Offline = gMessageStringTable.getString("Offline"); 1599 _PREHASH_Offline = gMessageStringTable.getString("Offline");
1745 _PREHASH_AgentIsNowWearing = gMessageStringTable.getString("AgentIsNowWearing"); 1600 _PREHASH_AgentIsNowWearing = gMessageStringTable.getString("AgentIsNowWearing");
1746 _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay");
1747 _PREHASH_Members = gMessageStringTable.getString("Members"); 1601 _PREHASH_Members = gMessageStringTable.getString("Members");
1748 _PREHASH_FailedResends = gMessageStringTable.getString("FailedResends"); 1602 _PREHASH_FailedResends = gMessageStringTable.getString("FailedResends");
1603 _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay");
1749 _PREHASH_CameraCenter = gMessageStringTable.getString("CameraCenter"); 1604 _PREHASH_CameraCenter = gMessageStringTable.getString("CameraCenter");
1750 _PREHASH_CameraLeftAxis = gMessageStringTable.getString("CameraLeftAxis"); 1605 _PREHASH_CameraLeftAxis = gMessageStringTable.getString("CameraLeftAxis");
1751 _PREHASH_ExBlock = gMessageStringTable.getString("ExBlock"); 1606 _PREHASH_ExBlock = gMessageStringTable.getString("ExBlock");
@@ -1753,7 +1608,6 @@ void init_prehash_data()
1753 _PREHASH_NetTest = gMessageStringTable.getString("NetTest"); 1608 _PREHASH_NetTest = gMessageStringTable.getString("NetTest");
1754 _PREHASH_DiscardLevel = gMessageStringTable.getString("DiscardLevel"); 1609 _PREHASH_DiscardLevel = gMessageStringTable.getString("DiscardLevel");
1755 _PREHASH_LayerID = gMessageStringTable.getString("LayerID"); 1610 _PREHASH_LayerID = gMessageStringTable.getString("LayerID");
1756 _PREHASH_RatorID = gMessageStringTable.getString("RatorID");
1757 _PREHASH_GrabOffset = gMessageStringTable.getString("GrabOffset"); 1611 _PREHASH_GrabOffset = gMessageStringTable.getString("GrabOffset");
1758 _PREHASH_SimPort = gMessageStringTable.getString("SimPort"); 1612 _PREHASH_SimPort = gMessageStringTable.getString("SimPort");
1759 _PREHASH_PricePerMeter = gMessageStringTable.getString("PricePerMeter"); 1613 _PREHASH_PricePerMeter = gMessageStringTable.getString("PricePerMeter");
@@ -1773,21 +1627,16 @@ void init_prehash_data()
1773 _PREHASH_RegionsVisited = gMessageStringTable.getString("RegionsVisited"); 1627 _PREHASH_RegionsVisited = gMessageStringTable.getString("RegionsVisited");
1774 _PREHASH_DirClassifiedReply = gMessageStringTable.getString("DirClassifiedReply"); 1628 _PREHASH_DirClassifiedReply = gMessageStringTable.getString("DirClassifiedReply");
1775 _PREHASH_AvatarClassifiedReply = gMessageStringTable.getString("AvatarClassifiedReply"); 1629 _PREHASH_AvatarClassifiedReply = gMessageStringTable.getString("AvatarClassifiedReply");
1776 _PREHASH_ReputationIndividualReply = gMessageStringTable.getString("ReputationIndividualReply");
1777 _PREHASH_MediaURL = gMessageStringTable.getString("MediaURL"); 1630 _PREHASH_MediaURL = gMessageStringTable.getString("MediaURL");
1778 _PREHASH_CompleteAgentMovement = gMessageStringTable.getString("CompleteAgentMovement"); 1631 _PREHASH_CompleteAgentMovement = gMessageStringTable.getString("CompleteAgentMovement");
1779 _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP");
1780 _PREHASH_ClassifiedID = gMessageStringTable.getString("ClassifiedID"); 1632 _PREHASH_ClassifiedID = gMessageStringTable.getString("ClassifiedID");
1781 _PREHASH_LocalID = gMessageStringTable.getString("LocalID"); 1633 _PREHASH_LocalID = gMessageStringTable.getString("LocalID");
1634 _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP");
1782 _PREHASH_RemoveItem = gMessageStringTable.getString("RemoveItem"); 1635 _PREHASH_RemoveItem = gMessageStringTable.getString("RemoveItem");
1783 _PREHASH_LogFailedMoneyTransaction = gMessageStringTable.getString("LogFailedMoneyTransaction"); 1636 _PREHASH_LogFailedMoneyTransaction = gMessageStringTable.getString("LogFailedMoneyTransaction");
1784 _PREHASH_ViewerStartAuction = gMessageStringTable.getString("ViewerStartAuction"); 1637 _PREHASH_ViewerStartAuction = gMessageStringTable.getString("ViewerStartAuction");
1785 _PREHASH_StartAuction = gMessageStringTable.getString("StartAuction"); 1638 _PREHASH_StartAuction = gMessageStringTable.getString("StartAuction");
1786 _PREHASH_NameValueName = gMessageStringTable.getString("NameValueName");
1787 _PREHASH_AngVelX = gMessageStringTable.getString("AngVelX");
1788 _PREHASH_DuplicateFlags = gMessageStringTable.getString("DuplicateFlags"); 1639 _PREHASH_DuplicateFlags = gMessageStringTable.getString("DuplicateFlags");
1789 _PREHASH_AngVelY = gMessageStringTable.getString("AngVelY");
1790 _PREHASH_AngVelZ = gMessageStringTable.getString("AngVelZ");
1791 _PREHASH_TextColor = gMessageStringTable.getString("TextColor"); 1640 _PREHASH_TextColor = gMessageStringTable.getString("TextColor");
1792 _PREHASH_SlaveID = gMessageStringTable.getString("SlaveID"); 1641 _PREHASH_SlaveID = gMessageStringTable.getString("SlaveID");
1793 _PREHASH_Charter = gMessageStringTable.getString("Charter"); 1642 _PREHASH_Charter = gMessageStringTable.getString("Charter");
@@ -1798,21 +1647,16 @@ void init_prehash_data()
1798 _PREHASH_OwnerIsGroup = gMessageStringTable.getString("OwnerIsGroup"); 1647 _PREHASH_OwnerIsGroup = gMessageStringTable.getString("OwnerIsGroup");
1799 _PREHASH_NameValuePair = gMessageStringTable.getString("NameValuePair"); 1648 _PREHASH_NameValuePair = gMessageStringTable.getString("NameValuePair");
1800 _PREHASH_RemoveNameValuePair = gMessageStringTable.getString("RemoveNameValuePair"); 1649 _PREHASH_RemoveNameValuePair = gMessageStringTable.getString("RemoveNameValuePair");
1801 _PREHASH_GetNameValuePair = gMessageStringTable.getString("GetNameValuePair");
1802 _PREHASH_BulkUpdateInventory = gMessageStringTable.getString("BulkUpdateInventory"); 1650 _PREHASH_BulkUpdateInventory = gMessageStringTable.getString("BulkUpdateInventory");
1803 _PREHASH_UpdateTaskInventory = gMessageStringTable.getString("UpdateTaskInventory"); 1651 _PREHASH_UpdateTaskInventory = gMessageStringTable.getString("UpdateTaskInventory");
1804 _PREHASH_RemoveTaskInventory = gMessageStringTable.getString("RemoveTaskInventory"); 1652 _PREHASH_RemoveTaskInventory = gMessageStringTable.getString("RemoveTaskInventory");
1805 _PREHASH_MoveTaskInventory = gMessageStringTable.getString("MoveTaskInventory"); 1653 _PREHASH_MoveTaskInventory = gMessageStringTable.getString("MoveTaskInventory");
1806 _PREHASH_RequestTaskInventory = gMessageStringTable.getString("RequestTaskInventory"); 1654 _PREHASH_RequestTaskInventory = gMessageStringTable.getString("RequestTaskInventory");
1807 _PREHASH_ReplyTaskInventory = gMessageStringTable.getString("ReplyTaskInventory"); 1655 _PREHASH_ReplyTaskInventory = gMessageStringTable.getString("ReplyTaskInventory");
1808 _PREHASH_DeclineInventory = gMessageStringTable.getString("DeclineInventory");
1809 _PREHASH_AggregatePermInventory = gMessageStringTable.getString("AggregatePermInventory"); 1656 _PREHASH_AggregatePermInventory = gMessageStringTable.getString("AggregatePermInventory");
1810 _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo");
1811 _PREHASH_MoneyTransactionsReply = gMessageStringTable.getString("MoneyTransactionsReply");
1812 _PREHASH_GroupAccountTransactionsReply = gMessageStringTable.getString("GroupAccountTransactionsReply"); 1657 _PREHASH_GroupAccountTransactionsReply = gMessageStringTable.getString("GroupAccountTransactionsReply");
1813 _PREHASH_MailTaskSimReply = gMessageStringTable.getString("MailTaskSimReply"); 1658 _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo");
1814 _PREHASH_WearableData = gMessageStringTable.getString("WearableData"); 1659 _PREHASH_WearableData = gMessageStringTable.getString("WearableData");
1815 _PREHASH_StatisticsData = gMessageStringTable.getString("StatisticsData");
1816 _PREHASH_Enabled = gMessageStringTable.getString("Enabled"); 1660 _PREHASH_Enabled = gMessageStringTable.getString("Enabled");
1817 _PREHASH_Savings = gMessageStringTable.getString("Savings"); 1661 _PREHASH_Savings = gMessageStringTable.getString("Savings");
1818 _PREHASH_SimulatorLoad = gMessageStringTable.getString("SimulatorLoad"); 1662 _PREHASH_SimulatorLoad = gMessageStringTable.getString("SimulatorLoad");
@@ -1824,15 +1668,12 @@ void init_prehash_data()
1824 _PREHASH_LeaveGroupRequest = gMessageStringTable.getString("LeaveGroupRequest"); 1668 _PREHASH_LeaveGroupRequest = gMessageStringTable.getString("LeaveGroupRequest");
1825 _PREHASH_InviteGroupRequest = gMessageStringTable.getString("InviteGroupRequest"); 1669 _PREHASH_InviteGroupRequest = gMessageStringTable.getString("InviteGroupRequest");
1826 _PREHASH_LiveHelpGroupRequest = gMessageStringTable.getString("LiveHelpGroupRequest"); 1670 _PREHASH_LiveHelpGroupRequest = gMessageStringTable.getString("LiveHelpGroupRequest");
1827 _PREHASH_ServerVersion = gMessageStringTable.getString("ServerVersion");
1828 _PREHASH_PriceParcelClaimFactor = gMessageStringTable.getString("PriceParcelClaimFactor"); 1671 _PREHASH_PriceParcelClaimFactor = gMessageStringTable.getString("PriceParcelClaimFactor");
1829 _PREHASH_BillableArea = gMessageStringTable.getString("BillableArea"); 1672 _PREHASH_BillableArea = gMessageStringTable.getString("BillableArea");
1830 _PREHASH_ObjectID = gMessageStringTable.getString("ObjectID"); 1673 _PREHASH_ObjectID = gMessageStringTable.getString("ObjectID");
1831 _PREHASH_ObjectFlagUpdate = gMessageStringTable.getString("ObjectFlagUpdate"); 1674 _PREHASH_ObjectFlagUpdate = gMessageStringTable.getString("ObjectFlagUpdate");
1832 _PREHASH_GroupRoleUpdate = gMessageStringTable.getString("GroupRoleUpdate"); 1675 _PREHASH_GroupRoleUpdate = gMessageStringTable.getString("GroupRoleUpdate");
1833 _PREHASH_RequestInventoryAsset = gMessageStringTable.getString("RequestInventoryAsset"); 1676 _PREHASH_RequestInventoryAsset = gMessageStringTable.getString("RequestInventoryAsset");
1834 _PREHASH_RedoLand = gMessageStringTable.getString("RedoLand");
1835 _PREHASH_TravelAccess = gMessageStringTable.getString("TravelAccess");
1836 _PREHASH_ChangedGrid = gMessageStringTable.getString("ChangedGrid"); 1677 _PREHASH_ChangedGrid = gMessageStringTable.getString("ChangedGrid");
1837 _PREHASH_AgentDropGroup = gMessageStringTable.getString("AgentDropGroup"); 1678 _PREHASH_AgentDropGroup = gMessageStringTable.getString("AgentDropGroup");
1838 _PREHASH_Details = gMessageStringTable.getString("Details"); 1679 _PREHASH_Details = gMessageStringTable.getString("Details");
@@ -1865,7 +1706,6 @@ void init_prehash_data()
1865 _PREHASH_GlobalPos = gMessageStringTable.getString("GlobalPos"); 1706 _PREHASH_GlobalPos = gMessageStringTable.getString("GlobalPos");
1866 _PREHASH_GrabOffsetInitial = gMessageStringTable.getString("GrabOffsetInitial"); 1707 _PREHASH_GrabOffsetInitial = gMessageStringTable.getString("GrabOffsetInitial");
1867 _PREHASH_IsTrial = gMessageStringTable.getString("IsTrial"); 1708 _PREHASH_IsTrial = gMessageStringTable.getString("IsTrial");
1868 _PREHASH_FinalizeLogout = gMessageStringTable.getString("FinalizeLogout");
1869 _PREHASH_ObjectDuplicateOnRay = gMessageStringTable.getString("ObjectDuplicateOnRay"); 1709 _PREHASH_ObjectDuplicateOnRay = gMessageStringTable.getString("ObjectDuplicateOnRay");
1870 _PREHASH_GroupMembershipCount = gMessageStringTable.getString("GroupMembershipCount"); 1710 _PREHASH_GroupMembershipCount = gMessageStringTable.getString("GroupMembershipCount");
1871 _PREHASH_MethodData = gMessageStringTable.getString("MethodData"); 1711 _PREHASH_MethodData = gMessageStringTable.getString("MethodData");
@@ -1901,32 +1741,26 @@ void init_prehash_data()
1901 _PREHASH_SimWideMaxPrims = gMessageStringTable.getString("SimWideMaxPrims"); 1741 _PREHASH_SimWideMaxPrims = gMessageStringTable.getString("SimWideMaxPrims");
1902 _PREHASH_TotalPrims = gMessageStringTable.getString("TotalPrims"); 1742 _PREHASH_TotalPrims = gMessageStringTable.getString("TotalPrims");
1903 _PREHASH_ProfileBegin = gMessageStringTable.getString("ProfileBegin"); 1743 _PREHASH_ProfileBegin = gMessageStringTable.getString("ProfileBegin");
1904 _PREHASH_MoneyDetailsRequest = gMessageStringTable.getString("MoneyDetailsRequest");
1905 _PREHASH_Request = gMessageStringTable.getString("Request"); 1744 _PREHASH_Request = gMessageStringTable.getString("Request");
1906 _PREHASH_GroupAccountDetailsRequest = gMessageStringTable.getString("GroupAccountDetailsRequest"); 1745 _PREHASH_GroupAccountDetailsRequest = gMessageStringTable.getString("GroupAccountDetailsRequest");
1907 _PREHASH_GroupActiveProposalsRequest = gMessageStringTable.getString("GroupActiveProposalsRequest"); 1746 _PREHASH_GroupActiveProposalsRequest = gMessageStringTable.getString("GroupActiveProposalsRequest");
1908 _PREHASH_StringValue = gMessageStringTable.getString("StringValue"); 1747 _PREHASH_StringValue = gMessageStringTable.getString("StringValue");
1909 _PREHASH_ClosestSimulator = gMessageStringTable.getString("ClosestSimulator");
1910 _PREHASH_Version = gMessageStringTable.getString("Version"); 1748 _PREHASH_Version = gMessageStringTable.getString("Version");
1911 _PREHASH_OtherCount = gMessageStringTable.getString("OtherCount"); 1749 _PREHASH_OtherCount = gMessageStringTable.getString("OtherCount");
1912 _PREHASH_MemberCount = gMessageStringTable.getString("MemberCount"); 1750 _PREHASH_MemberCount = gMessageStringTable.getString("MemberCount");
1913 _PREHASH_ChatData = gMessageStringTable.getString("ChatData"); 1751 _PREHASH_ChatData = gMessageStringTable.getString("ChatData");
1914 _PREHASH_IsGroupOwned = gMessageStringTable.getString("IsGroupOwned"); 1752 _PREHASH_IsGroupOwned = gMessageStringTable.getString("IsGroupOwned");
1915 _PREHASH_EnergyEfficiency = gMessageStringTable.getString("EnergyEfficiency"); 1753 _PREHASH_EnergyEfficiency = gMessageStringTable.getString("EnergyEfficiency");
1916 _PREHASH_MaxPlace = gMessageStringTable.getString("MaxPlace");
1917 _PREHASH_PickInfoUpdate = gMessageStringTable.getString("PickInfoUpdate"); 1754 _PREHASH_PickInfoUpdate = gMessageStringTable.getString("PickInfoUpdate");
1918 _PREHASH_PickDelete = gMessageStringTable.getString("PickDelete"); 1755 _PREHASH_PickDelete = gMessageStringTable.getString("PickDelete");
1919 _PREHASH_ScriptReset = gMessageStringTable.getString("ScriptReset"); 1756 _PREHASH_ScriptReset = gMessageStringTable.getString("ScriptReset");
1920 _PREHASH_Requester = gMessageStringTable.getString("Requester"); 1757 _PREHASH_Requester = gMessageStringTable.getString("Requester");
1921 _PREHASH_ForSale = gMessageStringTable.getString("ForSale"); 1758 _PREHASH_ForSale = gMessageStringTable.getString("ForSale");
1922 _PREHASH_NearestLandingRegionReply = gMessageStringTable.getString("NearestLandingRegionReply"); 1759 _PREHASH_NearestLandingRegionReply = gMessageStringTable.getString("NearestLandingRegionReply");
1923 _PREHASH_RecordAgentPresence = gMessageStringTable.getString("RecordAgentPresence");
1924 _PREHASH_EraseAgentPresence = gMessageStringTable.getString("EraseAgentPresence");
1925 _PREHASH_ParcelID = gMessageStringTable.getString("ParcelID"); 1760 _PREHASH_ParcelID = gMessageStringTable.getString("ParcelID");
1926 _PREHASH_Godlike = gMessageStringTable.getString("Godlike"); 1761 _PREHASH_Godlike = gMessageStringTable.getString("Godlike");
1927 _PREHASH_TotalDebits = gMessageStringTable.getString("TotalDebits"); 1762 _PREHASH_TotalDebits = gMessageStringTable.getString("TotalDebits");
1928 _PREHASH_Direction = gMessageStringTable.getString("Direction"); 1763 _PREHASH_Direction = gMessageStringTable.getString("Direction");
1929 _PREHASH_Appearance = gMessageStringTable.getString("Appearance");
1930 _PREHASH_HealthData = gMessageStringTable.getString("HealthData"); 1764 _PREHASH_HealthData = gMessageStringTable.getString("HealthData");
1931 _PREHASH_LeftAxis = gMessageStringTable.getString("LeftAxis"); 1765 _PREHASH_LeftAxis = gMessageStringTable.getString("LeftAxis");
1932 _PREHASH_LocationBlock = gMessageStringTable.getString("LocationBlock"); 1766 _PREHASH_LocationBlock = gMessageStringTable.getString("LocationBlock");
@@ -1934,41 +1768,31 @@ void init_prehash_data()
1934 _PREHASH_TerrainStartHeight00 = gMessageStringTable.getString("TerrainStartHeight00"); 1768 _PREHASH_TerrainStartHeight00 = gMessageStringTable.getString("TerrainStartHeight00");
1935 _PREHASH_TerrainStartHeight01 = gMessageStringTable.getString("TerrainStartHeight01"); 1769 _PREHASH_TerrainStartHeight01 = gMessageStringTable.getString("TerrainStartHeight01");
1936 _PREHASH_TerrainStartHeight10 = gMessageStringTable.getString("TerrainStartHeight10"); 1770 _PREHASH_TerrainStartHeight10 = gMessageStringTable.getString("TerrainStartHeight10");
1937 _PREHASH_ObjectHinge = gMessageStringTable.getString("ObjectHinge");
1938 _PREHASH_TerrainStartHeight11 = gMessageStringTable.getString("TerrainStartHeight11"); 1771 _PREHASH_TerrainStartHeight11 = gMessageStringTable.getString("TerrainStartHeight11");
1939 _PREHASH_MetersPerGrid = gMessageStringTable.getString("MetersPerGrid");
1940 _PREHASH_WaterHeight = gMessageStringTable.getString("WaterHeight"); 1772 _PREHASH_WaterHeight = gMessageStringTable.getString("WaterHeight");
1941 _PREHASH_FetchInventoryReply = gMessageStringTable.getString("FetchInventoryReply"); 1773 _PREHASH_FetchInventoryReply = gMessageStringTable.getString("FetchInventoryReply");
1942 _PREHASH_MoneySummaryReply = gMessageStringTable.getString("MoneySummaryReply");
1943 _PREHASH_GroupAccountSummaryReply = gMessageStringTable.getString("GroupAccountSummaryReply"); 1774 _PREHASH_GroupAccountSummaryReply = gMessageStringTable.getString("GroupAccountSummaryReply");
1944 _PREHASH_AttachedSound = gMessageStringTable.getString("AttachedSound"); 1775 _PREHASH_AttachedSound = gMessageStringTable.getString("AttachedSound");
1945 _PREHASH_ParamInUse = gMessageStringTable.getString("ParamInUse"); 1776 _PREHASH_ParamInUse = gMessageStringTable.getString("ParamInUse");
1946 _PREHASH_GodKickUser = gMessageStringTable.getString("GodKickUser"); 1777 _PREHASH_GodKickUser = gMessageStringTable.getString("GodKickUser");
1947 _PREHASH_PickName = gMessageStringTable.getString("PickName"); 1778 _PREHASH_PickName = gMessageStringTable.getString("PickName");
1948 _PREHASH_TaskName = gMessageStringTable.getString("TaskName"); 1779 _PREHASH_TaskName = gMessageStringTable.getString("TaskName");
1949 _PREHASH_SubType = gMessageStringTable.getString("SubType");
1950 _PREHASH_ObjectCount = gMessageStringTable.getString("ObjectCount"); 1780 _PREHASH_ObjectCount = gMessageStringTable.getString("ObjectCount");
1951 _PREHASH_RegionPresenceRequestByHandle = gMessageStringTable.getString("RegionPresenceRequestByHandle"); 1781 _PREHASH_RegionPresenceRequestByHandle = gMessageStringTable.getString("RegionPresenceRequestByHandle");
1952 _PREHASH_RezSingleAttachmentFromInv = gMessageStringTable.getString("RezSingleAttachmentFromInv"); 1782 _PREHASH_RezSingleAttachmentFromInv = gMessageStringTable.getString("RezSingleAttachmentFromInv");
1953 _PREHASH_ChildAgentUpdate = gMessageStringTable.getString("ChildAgentUpdate"); 1783 _PREHASH_ChildAgentUpdate = gMessageStringTable.getString("ChildAgentUpdate");
1954 _PREHASH_ToID = gMessageStringTable.getString("ToID");
1955 _PREHASH_ViewerPort = gMessageStringTable.getString("ViewerPort");
1956 _PREHASH_IsOwnerGroup = gMessageStringTable.getString("IsOwnerGroup"); 1784 _PREHASH_IsOwnerGroup = gMessageStringTable.getString("IsOwnerGroup");
1957 _PREHASH_AgentHeightWidth = gMessageStringTable.getString("AgentHeightWidth"); 1785 _PREHASH_AgentHeightWidth = gMessageStringTable.getString("AgentHeightWidth");
1958 _PREHASH_VerticalAngle = gMessageStringTable.getString("VerticalAngle"); 1786 _PREHASH_VerticalAngle = gMessageStringTable.getString("VerticalAngle");
1959 _PREHASH_WearableType = gMessageStringTable.getString("WearableType"); 1787 _PREHASH_WearableType = gMessageStringTable.getString("WearableType");
1960 _PREHASH_AggregatePermNextOwner = gMessageStringTable.getString("AggregatePermNextOwner"); 1788 _PREHASH_AggregatePermNextOwner = gMessageStringTable.getString("AggregatePermNextOwner");
1961 _PREHASH_ShowInList = gMessageStringTable.getString("ShowInList"); 1789 _PREHASH_ShowInList = gMessageStringTable.getString("ShowInList");
1962 _PREHASH_PositionSuggestion = gMessageStringTable.getString("PositionSuggestion");
1963 _PREHASH_UpdateParcel = gMessageStringTable.getString("UpdateParcel"); 1790 _PREHASH_UpdateParcel = gMessageStringTable.getString("UpdateParcel");
1964 _PREHASH_ClearAgentSessions = gMessageStringTable.getString("ClearAgentSessions");
1965 _PREHASH_SetAlwaysRun = gMessageStringTable.getString("SetAlwaysRun"); 1791 _PREHASH_SetAlwaysRun = gMessageStringTable.getString("SetAlwaysRun");
1966 _PREHASH_NVPair = gMessageStringTable.getString("NVPair"); 1792 _PREHASH_NVPair = gMessageStringTable.getString("NVPair");
1967 _PREHASH_SearchType = gMessageStringTable.getString("SearchType"); 1793 _PREHASH_SearchType = gMessageStringTable.getString("SearchType");
1968 _PREHASH_ObjectSpinStart = gMessageStringTable.getString("ObjectSpinStart"); 1794 _PREHASH_ObjectSpinStart = gMessageStringTable.getString("ObjectSpinStart");
1969 _PREHASH_UseEstateSun = gMessageStringTable.getString("UseEstateSun"); 1795 _PREHASH_UseEstateSun = gMessageStringTable.getString("UseEstateSun");
1970 _PREHASH_LogoutBlock = gMessageStringTable.getString("LogoutBlock");
1971 _PREHASH_RelayLogControl = gMessageStringTable.getString("RelayLogControl");
1972 _PREHASH_RegionID = gMessageStringTable.getString("RegionID"); 1796 _PREHASH_RegionID = gMessageStringTable.getString("RegionID");
1973 _PREHASH_AbuseRegionID = gMessageStringTable.getString("AbuseRegionID"); 1797 _PREHASH_AbuseRegionID = gMessageStringTable.getString("AbuseRegionID");
1974 _PREHASH_Creator = gMessageStringTable.getString("Creator"); 1798 _PREHASH_Creator = gMessageStringTable.getString("Creator");
@@ -1977,14 +1801,12 @@ void init_prehash_data()
1977 _PREHASH_EventInfoReply = gMessageStringTable.getString("EventInfoReply"); 1801 _PREHASH_EventInfoReply = gMessageStringTable.getString("EventInfoReply");
1978 _PREHASH_UserInfoReply = gMessageStringTable.getString("UserInfoReply"); 1802 _PREHASH_UserInfoReply = gMessageStringTable.getString("UserInfoReply");
1979 _PREHASH_PathRadiusOffset = gMessageStringTable.getString("PathRadiusOffset"); 1803 _PREHASH_PathRadiusOffset = gMessageStringTable.getString("PathRadiusOffset");
1980 _PREHASH_SessionInfo = gMessageStringTable.getString("SessionInfo");
1981 _PREHASH_TextureData = gMessageStringTable.getString("TextureData"); 1804 _PREHASH_TextureData = gMessageStringTable.getString("TextureData");
1982 _PREHASH_ChatPass = gMessageStringTable.getString("ChatPass"); 1805 _PREHASH_ChatPass = gMessageStringTable.getString("ChatPass");
1983 _PREHASH_TargetID = gMessageStringTable.getString("TargetID"); 1806 _PREHASH_TargetID = gMessageStringTable.getString("TargetID");
1984 _PREHASH_DefaultPayPrice = gMessageStringTable.getString("DefaultPayPrice"); 1807 _PREHASH_DefaultPayPrice = gMessageStringTable.getString("DefaultPayPrice");
1985 _PREHASH_UserLocation = gMessageStringTable.getString("UserLocation"); 1808 _PREHASH_UserLocation = gMessageStringTable.getString("UserLocation");
1986 _PREHASH_MaxPrims = gMessageStringTable.getString("MaxPrims"); 1809 _PREHASH_MaxPrims = gMessageStringTable.getString("MaxPrims");
1987 _PREHASH_RegionIP = gMessageStringTable.getString("RegionIP");
1988 _PREHASH_LandmarkID = gMessageStringTable.getString("LandmarkID"); 1810 _PREHASH_LandmarkID = gMessageStringTable.getString("LandmarkID");
1989 _PREHASH_InitiateDownload = gMessageStringTable.getString("InitiateDownload"); 1811 _PREHASH_InitiateDownload = gMessageStringTable.getString("InitiateDownload");
1990 _PREHASH_Name = gMessageStringTable.getString("Name"); 1812 _PREHASH_Name = gMessageStringTable.getString("Name");
@@ -1992,18 +1814,13 @@ void init_prehash_data()
1992 _PREHASH_ParcelSetOtherCleanTime = gMessageStringTable.getString("ParcelSetOtherCleanTime"); 1814 _PREHASH_ParcelSetOtherCleanTime = gMessageStringTable.getString("ParcelSetOtherCleanTime");
1993 _PREHASH_TeleportPriceExponent = gMessageStringTable.getString("TeleportPriceExponent"); 1815 _PREHASH_TeleportPriceExponent = gMessageStringTable.getString("TeleportPriceExponent");
1994 _PREHASH_Gain = gMessageStringTable.getString("Gain"); 1816 _PREHASH_Gain = gMessageStringTable.getString("Gain");
1995 _PREHASH_VelX = gMessageStringTable.getString("VelX");
1996 _PREHASH_PacketAck = gMessageStringTable.getString("PacketAck"); 1817 _PREHASH_PacketAck = gMessageStringTable.getString("PacketAck");
1997 _PREHASH_PathSkew = gMessageStringTable.getString("PathSkew"); 1818 _PREHASH_PathSkew = gMessageStringTable.getString("PathSkew");
1998 _PREHASH_Negative = gMessageStringTable.getString("Negative");
1999 _PREHASH_VelY = gMessageStringTable.getString("VelY");
2000 _PREHASH_SimulatorShutdownRequest = gMessageStringTable.getString("SimulatorShutdownRequest"); 1819 _PREHASH_SimulatorShutdownRequest = gMessageStringTable.getString("SimulatorShutdownRequest");
2001 _PREHASH_NearestLandingRegionRequest = gMessageStringTable.getString("NearestLandingRegionRequest"); 1820 _PREHASH_NearestLandingRegionRequest = gMessageStringTable.getString("NearestLandingRegionRequest");
2002 _PREHASH_VelZ = gMessageStringTable.getString("VelZ");
2003 _PREHASH_OtherID = gMessageStringTable.getString("OtherID"); 1821 _PREHASH_OtherID = gMessageStringTable.getString("OtherID");
2004 _PREHASH_MemberID = gMessageStringTable.getString("MemberID"); 1822 _PREHASH_MemberID = gMessageStringTable.getString("MemberID");
2005 _PREHASH_MapLayerRequest = gMessageStringTable.getString("MapLayerRequest"); 1823 _PREHASH_MapLayerRequest = gMessageStringTable.getString("MapLayerRequest");
2006 _PREHASH_PatchVersion = gMessageStringTable.getString("PatchVersion");
2007 _PREHASH_ObjectScale = gMessageStringTable.getString("ObjectScale"); 1824 _PREHASH_ObjectScale = gMessageStringTable.getString("ObjectScale");
2008 _PREHASH_TargetIP = gMessageStringTable.getString("TargetIP"); 1825 _PREHASH_TargetIP = gMessageStringTable.getString("TargetIP");
2009 _PREHASH_Redo = gMessageStringTable.getString("Redo"); 1826 _PREHASH_Redo = gMessageStringTable.getString("Redo");
@@ -2046,27 +1863,20 @@ void init_prehash_data()
2046 _PREHASH_Code = gMessageStringTable.getString("Code"); 1863 _PREHASH_Code = gMessageStringTable.getString("Code");
2047 _PREHASH_InvType = gMessageStringTable.getString("InvType"); 1864 _PREHASH_InvType = gMessageStringTable.getString("InvType");
2048 _PREHASH_AgentFOV = gMessageStringTable.getString("AgentFOV"); 1865 _PREHASH_AgentFOV = gMessageStringTable.getString("AgentFOV");
2049 _PREHASH_BulkMoneyTransfer = gMessageStringTable.getString("BulkMoneyTransfer");
2050 _PREHASH_Audible = gMessageStringTable.getString("Audible"); 1866 _PREHASH_Audible = gMessageStringTable.getString("Audible");
2051 _PREHASH_AuctionData = gMessageStringTable.getString("AuctionData"); 1867 _PREHASH_AuctionData = gMessageStringTable.getString("AuctionData");
2052 _PREHASH_IDBlock = gMessageStringTable.getString("IDBlock"); 1868 _PREHASH_IDBlock = gMessageStringTable.getString("IDBlock");
2053 _PREHASH_ReputationData = gMessageStringTable.getString("ReputationData");
2054 _PREHASH_West = gMessageStringTable.getString("West"); 1869 _PREHASH_West = gMessageStringTable.getString("West");
2055 _PREHASH_Undo = gMessageStringTable.getString("Undo"); 1870 _PREHASH_Undo = gMessageStringTable.getString("Undo");
2056 _PREHASH_TotalNumItems = gMessageStringTable.getString("TotalNumItems"); 1871 _PREHASH_TotalNumItems = gMessageStringTable.getString("TotalNumItems");
2057 _PREHASH_Info = gMessageStringTable.getString("Info"); 1872 _PREHASH_Info = gMessageStringTable.getString("Info");
2058 _PREHASH_Area = gMessageStringTable.getString("Area"); 1873 _PREHASH_Area = gMessageStringTable.getString("Area");
2059 _PREHASH_Behavior = gMessageStringTable.getString("Behavior");
2060 _PREHASH_SimCrashed = gMessageStringTable.getString("SimCrashed"); 1874 _PREHASH_SimCrashed = gMessageStringTable.getString("SimCrashed");
2061 _PREHASH_Text = gMessageStringTable.getString("Text"); 1875 _PREHASH_Text = gMessageStringTable.getString("Text");
2062 _PREHASH_AgentToNewRegion = gMessageStringTable.getString("AgentToNewRegion");
2063 _PREHASH_PriceGroupCreate = gMessageStringTable.getString("PriceGroupCreate"); 1876 _PREHASH_PriceGroupCreate = gMessageStringTable.getString("PriceGroupCreate");
2064 _PREHASH_ObjectShape = gMessageStringTable.getString("ObjectShape"); 1877 _PREHASH_ObjectShape = gMessageStringTable.getString("ObjectShape");
2065 _PREHASH_GroupRoleDataReply = gMessageStringTable.getString("GroupRoleDataReply"); 1878 _PREHASH_GroupRoleDataReply = gMessageStringTable.getString("GroupRoleDataReply");
2066 _PREHASH_PosX = gMessageStringTable.getString("PosX");
2067 _PREHASH_PosY = gMessageStringTable.getString("PosY");
2068 _PREHASH_MuteCRC = gMessageStringTable.getString("MuteCRC"); 1879 _PREHASH_MuteCRC = gMessageStringTable.getString("MuteCRC");
2069 _PREHASH_PosZ = gMessageStringTable.getString("PosZ");
2070 _PREHASH_Size = gMessageStringTable.getString("Size"); 1880 _PREHASH_Size = gMessageStringTable.getString("Size");
2071 _PREHASH_FromAddress = gMessageStringTable.getString("FromAddress"); 1881 _PREHASH_FromAddress = gMessageStringTable.getString("FromAddress");
2072 _PREHASH_Body = gMessageStringTable.getString("Body"); 1882 _PREHASH_Body = gMessageStringTable.getString("Body");
@@ -2084,16 +1894,14 @@ void init_prehash_data()
2084 _PREHASH_SoundID = gMessageStringTable.getString("SoundID"); 1894 _PREHASH_SoundID = gMessageStringTable.getString("SoundID");
2085 _PREHASH_Item = gMessageStringTable.getString("Item"); 1895 _PREHASH_Item = gMessageStringTable.getString("Item");
2086 _PREHASH_User = gMessageStringTable.getString("User"); 1896 _PREHASH_User = gMessageStringTable.getString("User");
2087 _PREHASH_RemoteInfos = gMessageStringTable.getString("RemoteInfos");
2088 _PREHASH_Prey = gMessageStringTable.getString("Prey"); 1897 _PREHASH_Prey = gMessageStringTable.getString("Prey");
2089 _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart");
2090 _PREHASH_RayStart = gMessageStringTable.getString("RayStart"); 1898 _PREHASH_RayStart = gMessageStringTable.getString("RayStart");
1899 _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart");
2091 _PREHASH_ParcelData = gMessageStringTable.getString("ParcelData"); 1900 _PREHASH_ParcelData = gMessageStringTable.getString("ParcelData");
2092 _PREHASH_CameraUpAxis = gMessageStringTable.getString("CameraUpAxis"); 1901 _PREHASH_CameraUpAxis = gMessageStringTable.getString("CameraUpAxis");
2093 _PREHASH_ScriptDialog = gMessageStringTable.getString("ScriptDialog"); 1902 _PREHASH_ScriptDialog = gMessageStringTable.getString("ScriptDialog");
2094 _PREHASH_MasterParcelData = gMessageStringTable.getString("MasterParcelData"); 1903 _PREHASH_MasterParcelData = gMessageStringTable.getString("MasterParcelData");
2095 _PREHASH_Invalid = gMessageStringTable.getString("Invalid"); 1904 _PREHASH_Invalid = gMessageStringTable.getString("Invalid");
2096 _PREHASH_MinPlace = gMessageStringTable.getString("MinPlace");
2097 _PREHASH_ProfileCurve = gMessageStringTable.getString("ProfileCurve"); 1905 _PREHASH_ProfileCurve = gMessageStringTable.getString("ProfileCurve");
2098 _PREHASH_ParcelAccessListUpdate = gMessageStringTable.getString("ParcelAccessListUpdate"); 1906 _PREHASH_ParcelAccessListUpdate = gMessageStringTable.getString("ParcelAccessListUpdate");
2099 _PREHASH_MuteListUpdate = gMessageStringTable.getString("MuteListUpdate"); 1907 _PREHASH_MuteListUpdate = gMessageStringTable.getString("MuteListUpdate");
@@ -2112,14 +1920,12 @@ void init_prehash_data()
2112 _PREHASH_IsTemporary = gMessageStringTable.getString("IsTemporary"); 1920 _PREHASH_IsTemporary = gMessageStringTable.getString("IsTemporary");
2113 _PREHASH_InsigniaID = gMessageStringTable.getString("InsigniaID"); 1921 _PREHASH_InsigniaID = gMessageStringTable.getString("InsigniaID");
2114 _PREHASH_CheckFlags = gMessageStringTable.getString("CheckFlags"); 1922 _PREHASH_CheckFlags = gMessageStringTable.getString("CheckFlags");
2115 _PREHASH_TransferPriority = gMessageStringTable.getString("TransferPriority");
2116 _PREHASH_EventID = gMessageStringTable.getString("EventID"); 1923 _PREHASH_EventID = gMessageStringTable.getString("EventID");
2117 _PREHASH_Selected = gMessageStringTable.getString("Selected"); 1924 _PREHASH_Selected = gMessageStringTable.getString("Selected");
2118 _PREHASH_FromAgentId = gMessageStringTable.getString("FromAgentId"); 1925 _PREHASH_FromAgentId = gMessageStringTable.getString("FromAgentId");
2119 _PREHASH_Type = gMessageStringTable.getString("Type"); 1926 _PREHASH_Type = gMessageStringTable.getString("Type");
2120 _PREHASH_ChatType = gMessageStringTable.getString("ChatType"); 1927 _PREHASH_ChatType = gMessageStringTable.getString("ChatType");
2121 _PREHASH_ReportData = gMessageStringTable.getString("ReportData"); 1928 _PREHASH_ReportData = gMessageStringTable.getString("ReportData");
2122 _PREHASH_LeaderBoardData = gMessageStringTable.getString("LeaderBoardData");
2123 _PREHASH_RequestBlock = gMessageStringTable.getString("RequestBlock"); 1929 _PREHASH_RequestBlock = gMessageStringTable.getString("RequestBlock");
2124 _PREHASH_GrantData = gMessageStringTable.getString("GrantData"); 1930 _PREHASH_GrantData = gMessageStringTable.getString("GrantData");
2125 _PREHASH_DetachAttachmentIntoInv = gMessageStringTable.getString("DetachAttachmentIntoInv"); 1931 _PREHASH_DetachAttachmentIntoInv = gMessageStringTable.getString("DetachAttachmentIntoInv");
@@ -2135,12 +1941,9 @@ void init_prehash_data()
2135 _PREHASH_OfflineNotification = gMessageStringTable.getString("OfflineNotification"); 1941 _PREHASH_OfflineNotification = gMessageStringTable.getString("OfflineNotification");
2136 _PREHASH_SendPostcard = gMessageStringTable.getString("SendPostcard"); 1942 _PREHASH_SendPostcard = gMessageStringTable.getString("SendPostcard");
2137 _PREHASH_RequestFlags = gMessageStringTable.getString("RequestFlags"); 1943 _PREHASH_RequestFlags = gMessageStringTable.getString("RequestFlags");
2138 _PREHASH_MoneyHistoryRequest = gMessageStringTable.getString("MoneyHistoryRequest");
2139 _PREHASH_MoneySummaryRequest = gMessageStringTable.getString("MoneySummaryRequest");
2140 _PREHASH_GroupAccountSummaryRequest = gMessageStringTable.getString("GroupAccountSummaryRequest"); 1944 _PREHASH_GroupAccountSummaryRequest = gMessageStringTable.getString("GroupAccountSummaryRequest");
2141 _PREHASH_GroupVoteHistoryRequest = gMessageStringTable.getString("GroupVoteHistoryRequest"); 1945 _PREHASH_GroupVoteHistoryRequest = gMessageStringTable.getString("GroupVoteHistoryRequest");
2142 _PREHASH_ParamValue = gMessageStringTable.getString("ParamValue"); 1946 _PREHASH_ParamValue = gMessageStringTable.getString("ParamValue");
2143 _PREHASH_Checksum = gMessageStringTable.getString("Checksum");
2144 _PREHASH_MaxAgents = gMessageStringTable.getString("MaxAgents"); 1947 _PREHASH_MaxAgents = gMessageStringTable.getString("MaxAgents");
2145 _PREHASH_CreateNewOutfitAttachments = gMessageStringTable.getString("CreateNewOutfitAttachments"); 1948 _PREHASH_CreateNewOutfitAttachments = gMessageStringTable.getString("CreateNewOutfitAttachments");
2146 _PREHASH_RegionHandle = gMessageStringTable.getString("RegionHandle"); 1949 _PREHASH_RegionHandle = gMessageStringTable.getString("RegionHandle");
@@ -2150,12 +1953,10 @@ void init_prehash_data()
2150 _PREHASH_GroupNoticeID = gMessageStringTable.getString("GroupNoticeID"); 1953 _PREHASH_GroupNoticeID = gMessageStringTable.getString("GroupNoticeID");
2151 _PREHASH_ParcelName = gMessageStringTable.getString("ParcelName"); 1954 _PREHASH_ParcelName = gMessageStringTable.getString("ParcelName");
2152 _PREHASH_PriceObjectRent = gMessageStringTable.getString("PriceObjectRent"); 1955 _PREHASH_PriceObjectRent = gMessageStringTable.getString("PriceObjectRent");
2153 _PREHASH_ConnectAgentToUserserver = gMessageStringTable.getString("ConnectAgentToUserserver");
2154 _PREHASH_ConnectToUserserver = gMessageStringTable.getString("ConnectToUserserver");
2155 _PREHASH_OfferCallingCard = gMessageStringTable.getString("OfferCallingCard"); 1956 _PREHASH_OfferCallingCard = gMessageStringTable.getString("OfferCallingCard");
2156 _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess");
2157 _PREHASH_AcceptCallingCard = gMessageStringTable.getString("AcceptCallingCard"); 1957 _PREHASH_AcceptCallingCard = gMessageStringTable.getString("AcceptCallingCard");
2158 _PREHASH_DeclineCallingCard = gMessageStringTable.getString("DeclineCallingCard"); 1958 _PREHASH_DeclineCallingCard = gMessageStringTable.getString("DeclineCallingCard");
1959 _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess");
2159 _PREHASH_DataHomeLocationReply = gMessageStringTable.getString("DataHomeLocationReply"); 1960 _PREHASH_DataHomeLocationReply = gMessageStringTable.getString("DataHomeLocationReply");
2160 _PREHASH_EventLocationReply = gMessageStringTable.getString("EventLocationReply"); 1961 _PREHASH_EventLocationReply = gMessageStringTable.getString("EventLocationReply");
2161 _PREHASH_TerseDateID = gMessageStringTable.getString("TerseDateID"); 1962 _PREHASH_TerseDateID = gMessageStringTable.getString("TerseDateID");
@@ -2173,8 +1974,8 @@ void init_prehash_data()
2173 _PREHASH_IntervalDays = gMessageStringTable.getString("IntervalDays"); 1974 _PREHASH_IntervalDays = gMessageStringTable.getString("IntervalDays");
2174 _PREHASH_PathScaleX = gMessageStringTable.getString("PathScaleX"); 1975 _PREHASH_PathScaleX = gMessageStringTable.getString("PathScaleX");
2175 _PREHASH_FromTaskID = gMessageStringTable.getString("FromTaskID"); 1976 _PREHASH_FromTaskID = gMessageStringTable.getString("FromTaskID");
2176 _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo");
2177 _PREHASH_PathScaleY = gMessageStringTable.getString("PathScaleY"); 1977 _PREHASH_PathScaleY = gMessageStringTable.getString("PathScaleY");
1978 _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo");
2178 _PREHASH_PublicCount = gMessageStringTable.getString("PublicCount"); 1979 _PREHASH_PublicCount = gMessageStringTable.getString("PublicCount");
2179 _PREHASH_ParcelJoin = gMessageStringTable.getString("ParcelJoin"); 1980 _PREHASH_ParcelJoin = gMessageStringTable.getString("ParcelJoin");
2180 _PREHASH_GroupRolesCount = gMessageStringTable.getString("GroupRolesCount"); 1981 _PREHASH_GroupRolesCount = gMessageStringTable.getString("GroupRolesCount");
@@ -2199,7 +2000,6 @@ void init_prehash_data()
2199 _PREHASH_PassToAgent = gMessageStringTable.getString("PassToAgent"); 2000 _PREHASH_PassToAgent = gMessageStringTable.getString("PassToAgent");
2200 _PREHASH_PreyAgent = gMessageStringTable.getString("PreyAgent"); 2001 _PREHASH_PreyAgent = gMessageStringTable.getString("PreyAgent");
2201 _PREHASH_SimStats = gMessageStringTable.getString("SimStats"); 2002 _PREHASH_SimStats = gMessageStringTable.getString("SimStats");
2202 _PREHASH_Options = gMessageStringTable.getString("Options");
2203 _PREHASH_LogoutReply = gMessageStringTable.getString("LogoutReply"); 2003 _PREHASH_LogoutReply = gMessageStringTable.getString("LogoutReply");
2204 _PREHASH_FeatureDisabled = gMessageStringTable.getString("FeatureDisabled"); 2004 _PREHASH_FeatureDisabled = gMessageStringTable.getString("FeatureDisabled");
2205 _PREHASH_ObjectLocalID = gMessageStringTable.getString("ObjectLocalID"); 2005 _PREHASH_ObjectLocalID = gMessageStringTable.getString("ObjectLocalID");
@@ -2210,10 +2010,8 @@ void init_prehash_data()
2210 _PREHASH_MasterID = gMessageStringTable.getString("MasterID"); 2010 _PREHASH_MasterID = gMessageStringTable.getString("MasterID");
2211 _PREHASH_TransferData = gMessageStringTable.getString("TransferData"); 2011 _PREHASH_TransferData = gMessageStringTable.getString("TransferData");
2212 _PREHASH_WantToMask = gMessageStringTable.getString("WantToMask"); 2012 _PREHASH_WantToMask = gMessageStringTable.getString("WantToMask");
2213 _PREHASH_AvatarData = gMessageStringTable.getString("AvatarData");
2214 _PREHASH_ParcelSelectObjects = gMessageStringTable.getString("ParcelSelectObjects"); 2013 _PREHASH_ParcelSelectObjects = gMessageStringTable.getString("ParcelSelectObjects");
2215 _PREHASH_ExtraParams = gMessageStringTable.getString("ExtraParams"); 2014 _PREHASH_ExtraParams = gMessageStringTable.getString("ExtraParams");
2216 _PREHASH_LogLogin = gMessageStringTable.getString("LogLogin");
2217 _PREHASH_CreatorID = gMessageStringTable.getString("CreatorID"); 2015 _PREHASH_CreatorID = gMessageStringTable.getString("CreatorID");
2218 _PREHASH_Summary = gMessageStringTable.getString("Summary"); 2016 _PREHASH_Summary = gMessageStringTable.getString("Summary");
2219 _PREHASH_BuyObjectInventory = gMessageStringTable.getString("BuyObjectInventory"); 2017 _PREHASH_BuyObjectInventory = gMessageStringTable.getString("BuyObjectInventory");
@@ -2254,8 +2052,8 @@ void init_prehash_data()
2254 _PREHASH_GranterID = gMessageStringTable.getString("GranterID"); 2052 _PREHASH_GranterID = gMessageStringTable.getString("GranterID");
2255 _PREHASH_WantToText = gMessageStringTable.getString("WantToText"); 2053 _PREHASH_WantToText = gMessageStringTable.getString("WantToText");
2256 _PREHASH_ReportType = gMessageStringTable.getString("ReportType"); 2054 _PREHASH_ReportType = gMessageStringTable.getString("ReportType");
2257 _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock");
2258 _PREHASH_SimulatorReady = gMessageStringTable.getString("SimulatorReady"); 2055 _PREHASH_SimulatorReady = gMessageStringTable.getString("SimulatorReady");
2056 _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock");
2259 _PREHASH_AnimationSourceList = gMessageStringTable.getString("AnimationSourceList"); 2057 _PREHASH_AnimationSourceList = gMessageStringTable.getString("AnimationSourceList");
2260 _PREHASH_SubscribeLoad = gMessageStringTable.getString("SubscribeLoad"); 2058 _PREHASH_SubscribeLoad = gMessageStringTable.getString("SubscribeLoad");
2261 _PREHASH_UnsubscribeLoad = gMessageStringTable.getString("UnsubscribeLoad"); 2059 _PREHASH_UnsubscribeLoad = gMessageStringTable.getString("UnsubscribeLoad");
@@ -2282,9 +2080,8 @@ void init_prehash_data()
2282 _PREHASH_GestureFlags = gMessageStringTable.getString("GestureFlags"); 2080 _PREHASH_GestureFlags = gMessageStringTable.getString("GestureFlags");
2283 _PREHASH_XferID = gMessageStringTable.getString("XferID"); 2081 _PREHASH_XferID = gMessageStringTable.getString("XferID");
2284 _PREHASH_StatValue = gMessageStringTable.getString("StatValue"); 2082 _PREHASH_StatValue = gMessageStringTable.getString("StatValue");
2285 _PREHASH_PickID = gMessageStringTable.getString("PickID");
2286 _PREHASH_TaskID = gMessageStringTable.getString("TaskID"); 2083 _PREHASH_TaskID = gMessageStringTable.getString("TaskID");
2287 _PREHASH_GridsPerEdge = gMessageStringTable.getString("GridsPerEdge"); 2084 _PREHASH_PickID = gMessageStringTable.getString("PickID");
2288 _PREHASH_RayEnd = gMessageStringTable.getString("RayEnd"); 2085 _PREHASH_RayEnd = gMessageStringTable.getString("RayEnd");
2289 _PREHASH_Throttles = gMessageStringTable.getString("Throttles"); 2086 _PREHASH_Throttles = gMessageStringTable.getString("Throttles");
2290 _PREHASH_RebakeAvatarTextures = gMessageStringTable.getString("RebakeAvatarTextures"); 2087 _PREHASH_RebakeAvatarTextures = gMessageStringTable.getString("RebakeAvatarTextures");
@@ -2297,30 +2094,24 @@ void init_prehash_data()
2297 _PREHASH_TitleRoleID = gMessageStringTable.getString("TitleRoleID"); 2094 _PREHASH_TitleRoleID = gMessageStringTable.getString("TitleRoleID");
2298 _PREHASH_SquareMetersCredit = gMessageStringTable.getString("SquareMetersCredit"); 2095 _PREHASH_SquareMetersCredit = gMessageStringTable.getString("SquareMetersCredit");
2299 _PREHASH_Filename = gMessageStringTable.getString("Filename"); 2096 _PREHASH_Filename = gMessageStringTable.getString("Filename");
2300 _PREHASH_SecuredTemplateChecksumRequest = gMessageStringTable.getString("SecuredTemplateChecksumRequest");
2301 _PREHASH_TemplateChecksumRequest = gMessageStringTable.getString("TemplateChecksumRequest");
2302 _PREHASH_AgentPresenceRequest = gMessageStringTable.getString("AgentPresenceRequest");
2303 _PREHASH_ClassifiedInfoRequest = gMessageStringTable.getString("ClassifiedInfoRequest"); 2097 _PREHASH_ClassifiedInfoRequest = gMessageStringTable.getString("ClassifiedInfoRequest");
2304 _PREHASH_ParcelInfoRequest = gMessageStringTable.getString("ParcelInfoRequest"); 2098 _PREHASH_ParcelInfoRequest = gMessageStringTable.getString("ParcelInfoRequest");
2305 _PREHASH_ParcelObjectOwnersRequest = gMessageStringTable.getString("ParcelObjectOwnersRequest"); 2099 _PREHASH_ParcelObjectOwnersRequest = gMessageStringTable.getString("ParcelObjectOwnersRequest");
2306 _PREHASH_TeleportLandmarkRequest = gMessageStringTable.getString("TeleportLandmarkRequest"); 2100 _PREHASH_TeleportLandmarkRequest = gMessageStringTable.getString("TeleportLandmarkRequest");
2307 _PREHASH_EventInfoRequest = gMessageStringTable.getString("EventInfoRequest"); 2101 _PREHASH_EventInfoRequest = gMessageStringTable.getString("EventInfoRequest");
2308 _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator");
2309 _PREHASH_PickInfoRequest = gMessageStringTable.getString("PickInfoRequest");
2310 _PREHASH_MoneyBalanceRequest = gMessageStringTable.getString("MoneyBalanceRequest"); 2102 _PREHASH_MoneyBalanceRequest = gMessageStringTable.getString("MoneyBalanceRequest");
2311 _PREHASH_GroupMembersRequest = gMessageStringTable.getString("GroupMembersRequest"); 2103 _PREHASH_GroupMembersRequest = gMessageStringTable.getString("GroupMembersRequest");
2312 _PREHASH_GroupRoleMembersRequest = gMessageStringTable.getString("GroupRoleMembersRequest"); 2104 _PREHASH_GroupRoleMembersRequest = gMessageStringTable.getString("GroupRoleMembersRequest");
2105 _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator");
2313 _PREHASH_OldFolderID = gMessageStringTable.getString("OldFolderID"); 2106 _PREHASH_OldFolderID = gMessageStringTable.getString("OldFolderID");
2314 _PREHASH_UserInfoRequest = gMessageStringTable.getString("UserInfoRequest"); 2107 _PREHASH_UserInfoRequest = gMessageStringTable.getString("UserInfoRequest");
2315 _PREHASH_TextureID = gMessageStringTable.getString("TextureID"); 2108 _PREHASH_TextureID = gMessageStringTable.getString("TextureID");
2316 _PREHASH_ProfileURL = gMessageStringTable.getString("ProfileURL"); 2109 _PREHASH_ProfileURL = gMessageStringTable.getString("ProfileURL");
2317 _PREHASH_Handle = gMessageStringTable.getString("Handle"); 2110 _PREHASH_Handle = gMessageStringTable.getString("Handle");
2318 _PREHASH_StartParcelRenameAck = gMessageStringTable.getString("StartParcelRenameAck");
2319 _PREHASH_ButtonIndex = gMessageStringTable.getString("ButtonIndex"); 2111 _PREHASH_ButtonIndex = gMessageStringTable.getString("ButtonIndex");
2320 _PREHASH_GetScriptRunning = gMessageStringTable.getString("GetScriptRunning"); 2112 _PREHASH_GetScriptRunning = gMessageStringTable.getString("GetScriptRunning");
2321 _PREHASH_SetScriptRunning = gMessageStringTable.getString("SetScriptRunning"); 2113 _PREHASH_SetScriptRunning = gMessageStringTable.getString("SetScriptRunning");
2322 _PREHASH_Health = gMessageStringTable.getString("Health"); 2114 _PREHASH_Health = gMessageStringTable.getString("Health");
2323 _PREHASH_FileID = gMessageStringTable.getString("FileID");
2324 _PREHASH_CircuitInfo = gMessageStringTable.getString("CircuitInfo"); 2115 _PREHASH_CircuitInfo = gMessageStringTable.getString("CircuitInfo");
2325 _PREHASH_ObjectBuy = gMessageStringTable.getString("ObjectBuy"); 2116 _PREHASH_ObjectBuy = gMessageStringTable.getString("ObjectBuy");
2326 _PREHASH_ProfileEnd = gMessageStringTable.getString("ProfileEnd"); 2117 _PREHASH_ProfileEnd = gMessageStringTable.getString("ProfileEnd");
@@ -2345,7 +2136,6 @@ void init_prehash_data()
2345 _PREHASH_Change = gMessageStringTable.getString("Change"); 2136 _PREHASH_Change = gMessageStringTable.getString("Change");
2346 _PREHASH_Height = gMessageStringTable.getString("Height"); 2137 _PREHASH_Height = gMessageStringTable.getString("Height");
2347 _PREHASH_Region = gMessageStringTable.getString("Region"); 2138 _PREHASH_Region = gMessageStringTable.getString("Region");
2348 _PREHASH_MoneyHistoryReply = gMessageStringTable.getString("MoneyHistoryReply");
2349 _PREHASH_TelehubInfo = gMessageStringTable.getString("TelehubInfo"); 2139 _PREHASH_TelehubInfo = gMessageStringTable.getString("TelehubInfo");
2350 _PREHASH_StateSave = gMessageStringTable.getString("StateSave"); 2140 _PREHASH_StateSave = gMessageStringTable.getString("StateSave");
2351 _PREHASH_RoleData = gMessageStringTable.getString("RoleData"); 2141 _PREHASH_RoleData = gMessageStringTable.getString("RoleData");
@@ -2356,11 +2146,10 @@ void init_prehash_data()
2356 _PREHASH_UsePhysics = gMessageStringTable.getString("UsePhysics"); 2146 _PREHASH_UsePhysics = gMessageStringTable.getString("UsePhysics");
2357 _PREHASH_RegionDenyTransacted = gMessageStringTable.getString("RegionDenyTransacted"); 2147 _PREHASH_RegionDenyTransacted = gMessageStringTable.getString("RegionDenyTransacted");
2358 _PREHASH_JointType = gMessageStringTable.getString("JointType"); 2148 _PREHASH_JointType = gMessageStringTable.getString("JointType");
2359 _PREHASH_TaxEstimate = gMessageStringTable.getString("TaxEstimate");
2360 _PREHASH_ObjectTaxEstimate = gMessageStringTable.getString("ObjectTaxEstimate"); 2149 _PREHASH_ObjectTaxEstimate = gMessageStringTable.getString("ObjectTaxEstimate");
2361 _PREHASH_LightTaxEstimate = gMessageStringTable.getString("LightTaxEstimate"); 2150 _PREHASH_LightTaxEstimate = gMessageStringTable.getString("LightTaxEstimate");
2362 _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged");
2363 _PREHASH_LandTaxEstimate = gMessageStringTable.getString("LandTaxEstimate"); 2151 _PREHASH_LandTaxEstimate = gMessageStringTable.getString("LandTaxEstimate");
2152 _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged");
2364 _PREHASH_GroupTaxEstimate = gMessageStringTable.getString("GroupTaxEstimate"); 2153 _PREHASH_GroupTaxEstimate = gMessageStringTable.getString("GroupTaxEstimate");
2365 _PREHASH_AvgViewerFPS = gMessageStringTable.getString("AvgViewerFPS"); 2154 _PREHASH_AvgViewerFPS = gMessageStringTable.getString("AvgViewerFPS");
2366 _PREHASH_Buttons = gMessageStringTable.getString("Buttons"); 2155 _PREHASH_Buttons = gMessageStringTable.getString("Buttons");
@@ -2392,8 +2181,6 @@ void init_prehash_data()
2392 _PREHASH_ChannelType = gMessageStringTable.getString("ChannelType"); 2181 _PREHASH_ChannelType = gMessageStringTable.getString("ChannelType");
2393 _PREHASH_NonExemptMembers = gMessageStringTable.getString("NonExemptMembers"); 2182 _PREHASH_NonExemptMembers = gMessageStringTable.getString("NonExemptMembers");
2394 _PREHASH_Agents = gMessageStringTable.getString("Agents"); 2183 _PREHASH_Agents = gMessageStringTable.getString("Agents");
2395 _PREHASH_SimulatorStart = gMessageStringTable.getString("SimulatorStart");
2396 _PREHASH_Enable = gMessageStringTable.getString("Enable");
2397 _PREHASH_MemberData = gMessageStringTable.getString("MemberData"); 2184 _PREHASH_MemberData = gMessageStringTable.getString("MemberData");
2398 _PREHASH_ToGroupID = gMessageStringTable.getString("ToGroupID"); 2185 _PREHASH_ToGroupID = gMessageStringTable.getString("ToGroupID");
2399 _PREHASH_ImageNotInDatabase = gMessageStringTable.getString("ImageNotInDatabase"); 2186 _PREHASH_ImageNotInDatabase = gMessageStringTable.getString("ImageNotInDatabase");
@@ -2401,27 +2188,21 @@ void init_prehash_data()
2401 _PREHASH_AnimID = gMessageStringTable.getString("AnimID"); 2188 _PREHASH_AnimID = gMessageStringTable.getString("AnimID");
2402 _PREHASH_Serial = gMessageStringTable.getString("Serial"); 2189 _PREHASH_Serial = gMessageStringTable.getString("Serial");
2403 _PREHASH_AbuseRegionName = gMessageStringTable.getString("AbuseRegionName"); 2190 _PREHASH_AbuseRegionName = gMessageStringTable.getString("AbuseRegionName");
2404 _PREHASH_ControlPort = gMessageStringTable.getString("ControlPort");
2405 _PREHASH_ModifyLand = gMessageStringTable.getString("ModifyLand"); 2191 _PREHASH_ModifyLand = gMessageStringTable.getString("ModifyLand");
2406 _PREHASH_Digest = gMessageStringTable.getString("Digest"); 2192 _PREHASH_Digest = gMessageStringTable.getString("Digest");
2407 _PREHASH_Victim = gMessageStringTable.getString("Victim"); 2193 _PREHASH_Victim = gMessageStringTable.getString("Victim");
2408 _PREHASH_Script = gMessageStringTable.getString("Script"); 2194 _PREHASH_Script = gMessageStringTable.getString("Script");
2409 _PREHASH_TemplateChecksumReply = gMessageStringTable.getString("TemplateChecksumReply");
2410 _PREHASH_PickInfoReply = gMessageStringTable.getString("PickInfoReply"); 2195 _PREHASH_PickInfoReply = gMessageStringTable.getString("PickInfoReply");
2411 _PREHASH_MoneyBalanceReply = gMessageStringTable.getString("MoneyBalanceReply"); 2196 _PREHASH_MoneyBalanceReply = gMessageStringTable.getString("MoneyBalanceReply");
2412 _PREHASH_RoutedMoneyBalanceReply = gMessageStringTable.getString("RoutedMoneyBalanceReply"); 2197 _PREHASH_RoutedMoneyBalanceReply = gMessageStringTable.getString("RoutedMoneyBalanceReply");
2413 _PREHASH_RoleID = gMessageStringTable.getString("RoleID"); 2198 _PREHASH_RoleID = gMessageStringTable.getString("RoleID");
2414 _PREHASH_RegionInfo = gMessageStringTable.getString("RegionInfo"); 2199 _PREHASH_RegionInfo = gMessageStringTable.getString("RegionInfo");
2415 _PREHASH_Sequence = gMessageStringTable.getString("Sequence");
2416 _PREHASH_GodUpdateRegionInfo = gMessageStringTable.getString("GodUpdateRegionInfo"); 2200 _PREHASH_GodUpdateRegionInfo = gMessageStringTable.getString("GodUpdateRegionInfo");
2417 _PREHASH_LocalX = gMessageStringTable.getString("LocalX");
2418 _PREHASH_LocalY = gMessageStringTable.getString("LocalY");
2419 _PREHASH_StartAnim = gMessageStringTable.getString("StartAnim"); 2201 _PREHASH_StartAnim = gMessageStringTable.getString("StartAnim");
2420 _PREHASH_Location = gMessageStringTable.getString("Location");
2421 _PREHASH_Action = gMessageStringTable.getString("Action"); 2202 _PREHASH_Action = gMessageStringTable.getString("Action");
2203 _PREHASH_Location = gMessageStringTable.getString("Location");
2422 _PREHASH_Rights = gMessageStringTable.getString("Rights"); 2204 _PREHASH_Rights = gMessageStringTable.getString("Rights");
2423 _PREHASH_SearchDir = gMessageStringTable.getString("SearchDir"); 2205 _PREHASH_SearchDir = gMessageStringTable.getString("SearchDir");
2424 _PREHASH_Active = gMessageStringTable.getString("Active");
2425 _PREHASH_TransferRequest = gMessageStringTable.getString("TransferRequest"); 2206 _PREHASH_TransferRequest = gMessageStringTable.getString("TransferRequest");
2426 _PREHASH_ScriptSensorRequest = gMessageStringTable.getString("ScriptSensorRequest"); 2207 _PREHASH_ScriptSensorRequest = gMessageStringTable.getString("ScriptSensorRequest");
2427 _PREHASH_MoneyTransferRequest = gMessageStringTable.getString("MoneyTransferRequest"); 2208 _PREHASH_MoneyTransferRequest = gMessageStringTable.getString("MoneyTransferRequest");
@@ -2432,8 +2213,6 @@ void init_prehash_data()
2432 _PREHASH_SharedData = gMessageStringTable.getString("SharedData"); 2213 _PREHASH_SharedData = gMessageStringTable.getString("SharedData");
2433 _PREHASH_PSBlock = gMessageStringTable.getString("PSBlock"); 2214 _PREHASH_PSBlock = gMessageStringTable.getString("PSBlock");
2434 _PREHASH_UUIDNameBlock = gMessageStringTable.getString("UUIDNameBlock"); 2215 _PREHASH_UUIDNameBlock = gMessageStringTable.getString("UUIDNameBlock");
2435 _PREHASH_Viewer = gMessageStringTable.getString("Viewer");
2436 _PREHASH_GroupNoticeDelete = gMessageStringTable.getString("GroupNoticeDelete");
2437 _PREHASH_GroupTitleUpdate = gMessageStringTable.getString("GroupTitleUpdate"); 2216 _PREHASH_GroupTitleUpdate = gMessageStringTable.getString("GroupTitleUpdate");
2438 _PREHASH_Method = gMessageStringTable.getString("Method"); 2217 _PREHASH_Method = gMessageStringTable.getString("Method");
2439 _PREHASH_TouchName = gMessageStringTable.getString("TouchName"); 2218 _PREHASH_TouchName = gMessageStringTable.getString("TouchName");
@@ -2445,11 +2224,9 @@ void init_prehash_data()
2445 _PREHASH_SystemMessage = gMessageStringTable.getString("SystemMessage"); 2224 _PREHASH_SystemMessage = gMessageStringTable.getString("SystemMessage");
2446 _PREHASH_BodyRotation = gMessageStringTable.getString("BodyRotation"); 2225 _PREHASH_BodyRotation = gMessageStringTable.getString("BodyRotation");
2447 _PREHASH_SearchRegions = gMessageStringTable.getString("SearchRegions"); 2226 _PREHASH_SearchRegions = gMessageStringTable.getString("SearchRegions");
2448 _PREHASH_Ignore = gMessageStringTable.getString("Ignore");
2449 _PREHASH_AnimationData = gMessageStringTable.getString("AnimationData"); 2227 _PREHASH_AnimationData = gMessageStringTable.getString("AnimationData");
2450 _PREHASH_StatID = gMessageStringTable.getString("StatID"); 2228 _PREHASH_StatID = gMessageStringTable.getString("StatID");
2451 _PREHASH_ItemID = gMessageStringTable.getString("ItemID"); 2229 _PREHASH_ItemID = gMessageStringTable.getString("ItemID");
2452 _PREHASH_AvatarStatisticsReply = gMessageStringTable.getString("AvatarStatisticsReply");
2453 _PREHASH_ScriptDialogReply = gMessageStringTable.getString("ScriptDialogReply"); 2230 _PREHASH_ScriptDialogReply = gMessageStringTable.getString("ScriptDialogReply");
2454 _PREHASH_RegionIDAndHandleReply = gMessageStringTable.getString("RegionIDAndHandleReply"); 2231 _PREHASH_RegionIDAndHandleReply = gMessageStringTable.getString("RegionIDAndHandleReply");
2455 _PREHASH_CameraAtOffset = gMessageStringTable.getString("CameraAtOffset"); 2232 _PREHASH_CameraAtOffset = gMessageStringTable.getString("CameraAtOffset");
@@ -2474,7 +2251,6 @@ void init_prehash_data()
2474 _PREHASH_RegionPort = gMessageStringTable.getString("RegionPort"); 2251 _PREHASH_RegionPort = gMessageStringTable.getString("RegionPort");
2475 _PREHASH_PriceEnergyUnit = gMessageStringTable.getString("PriceEnergyUnit"); 2252 _PREHASH_PriceEnergyUnit = gMessageStringTable.getString("PriceEnergyUnit");
2476 _PREHASH_Bitmap = gMessageStringTable.getString("Bitmap"); 2253 _PREHASH_Bitmap = gMessageStringTable.getString("Bitmap");
2477 _PREHASH_TrackAgentSession = gMessageStringTable.getString("TrackAgentSession");
2478 _PREHASH_CacheMissType = gMessageStringTable.getString("CacheMissType"); 2254 _PREHASH_CacheMissType = gMessageStringTable.getString("CacheMissType");
2479 _PREHASH_VFileID = gMessageStringTable.getString("VFileID"); 2255 _PREHASH_VFileID = gMessageStringTable.getString("VFileID");
2480 _PREHASH_GroupInsigniaID = gMessageStringTable.getString("GroupInsigniaID"); 2256 _PREHASH_GroupInsigniaID = gMessageStringTable.getString("GroupInsigniaID");
@@ -2522,7 +2298,6 @@ void init_prehash_data()
2522 _PREHASH_CanAcceptTasks = gMessageStringTable.getString("CanAcceptTasks"); 2298 _PREHASH_CanAcceptTasks = gMessageStringTable.getString("CanAcceptTasks");
2523 _PREHASH_ItemData = gMessageStringTable.getString("ItemData"); 2299 _PREHASH_ItemData = gMessageStringTable.getString("ItemData");
2524 _PREHASH_AnimationList = gMessageStringTable.getString("AnimationList"); 2300 _PREHASH_AnimationList = gMessageStringTable.getString("AnimationList");
2525 _PREHASH_PassObject = gMessageStringTable.getString("PassObject");
2526 _PREHASH_Reputation = gMessageStringTable.getString("Reputation"); 2301 _PREHASH_Reputation = gMessageStringTable.getString("Reputation");
2527 _PREHASH_IntValue = gMessageStringTable.getString("IntValue"); 2302 _PREHASH_IntValue = gMessageStringTable.getString("IntValue");
2528 _PREHASH_TargetType = gMessageStringTable.getString("TargetType"); 2303 _PREHASH_TargetType = gMessageStringTable.getString("TargetType");
@@ -2545,10 +2320,8 @@ void init_prehash_data()
2545 _PREHASH_DirFindQueryBackend = gMessageStringTable.getString("DirFindQueryBackend"); 2320 _PREHASH_DirFindQueryBackend = gMessageStringTable.getString("DirFindQueryBackend");
2546 _PREHASH_DirPlacesQueryBackend = gMessageStringTable.getString("DirPlacesQueryBackend"); 2321 _PREHASH_DirPlacesQueryBackend = gMessageStringTable.getString("DirPlacesQueryBackend");
2547 _PREHASH_DirClassifiedQueryBackend = gMessageStringTable.getString("DirClassifiedQueryBackend"); 2322 _PREHASH_DirClassifiedQueryBackend = gMessageStringTable.getString("DirClassifiedQueryBackend");
2548 _PREHASH_DirPicksQueryBackend = gMessageStringTable.getString("DirPicksQueryBackend");
2549 _PREHASH_DirLandQueryBackend = gMessageStringTable.getString("DirLandQueryBackend"); 2323 _PREHASH_DirLandQueryBackend = gMessageStringTable.getString("DirLandQueryBackend");
2550 _PREHASH_DirPopularQueryBackend = gMessageStringTable.getString("DirPopularQueryBackend"); 2324 _PREHASH_DirPopularQueryBackend = gMessageStringTable.getString("DirPopularQueryBackend");
2551 _PREHASH_LogoutDemand = gMessageStringTable.getString("LogoutDemand");
2552 _PREHASH_HistoryData = gMessageStringTable.getString("HistoryData"); 2325 _PREHASH_HistoryData = gMessageStringTable.getString("HistoryData");
2553 _PREHASH_SnapshotID = gMessageStringTable.getString("SnapshotID"); 2326 _PREHASH_SnapshotID = gMessageStringTable.getString("SnapshotID");
2554 _PREHASH_Aspect = gMessageStringTable.getString("Aspect"); 2327 _PREHASH_Aspect = gMessageStringTable.getString("Aspect");
@@ -2556,7 +2329,6 @@ void init_prehash_data()
2556 _PREHASH_VoteCast = gMessageStringTable.getString("VoteCast"); 2329 _PREHASH_VoteCast = gMessageStringTable.getString("VoteCast");
2557 _PREHASH_CastsShadows = gMessageStringTable.getString("CastsShadows"); 2330 _PREHASH_CastsShadows = gMessageStringTable.getString("CastsShadows");
2558 _PREHASH_EveryoneMask = gMessageStringTable.getString("EveryoneMask"); 2331 _PREHASH_EveryoneMask = gMessageStringTable.getString("EveryoneMask");
2559 _PREHASH_SetSunPhase = gMessageStringTable.getString("SetSunPhase");
2560 _PREHASH_ObjectSpinUpdate = gMessageStringTable.getString("ObjectSpinUpdate"); 2332 _PREHASH_ObjectSpinUpdate = gMessageStringTable.getString("ObjectSpinUpdate");
2561 _PREHASH_MaturePublish = gMessageStringTable.getString("MaturePublish"); 2333 _PREHASH_MaturePublish = gMessageStringTable.getString("MaturePublish");
2562 _PREHASH_UseExistingAsset = gMessageStringTable.getString("UseExistingAsset"); 2334 _PREHASH_UseExistingAsset = gMessageStringTable.getString("UseExistingAsset");
@@ -2565,7 +2337,6 @@ void init_prehash_data()
2565 _PREHASH_TeleportCancel = gMessageStringTable.getString("TeleportCancel"); 2337 _PREHASH_TeleportCancel = gMessageStringTable.getString("TeleportCancel");
2566 _PREHASH_UnixTime = gMessageStringTable.getString("UnixTime"); 2338 _PREHASH_UnixTime = gMessageStringTable.getString("UnixTime");
2567 _PREHASH_QueryFlags = gMessageStringTable.getString("QueryFlags"); 2339 _PREHASH_QueryFlags = gMessageStringTable.getString("QueryFlags");
2568 _PREHASH_LastExecFroze = gMessageStringTable.getString("LastExecFroze");
2569 _PREHASH_AlwaysRun = gMessageStringTable.getString("AlwaysRun"); 2340 _PREHASH_AlwaysRun = gMessageStringTable.getString("AlwaysRun");
2570 _PREHASH_Bottom = gMessageStringTable.getString("Bottom"); 2341 _PREHASH_Bottom = gMessageStringTable.getString("Bottom");
2571 _PREHASH_ButtonData = gMessageStringTable.getString("ButtonData"); 2342 _PREHASH_ButtonData = gMessageStringTable.getString("ButtonData");
@@ -2584,7 +2355,6 @@ void init_prehash_data()
2584 _PREHASH_GroupNoticesListRequest = gMessageStringTable.getString("GroupNoticesListRequest"); 2355 _PREHASH_GroupNoticesListRequest = gMessageStringTable.getString("GroupNoticesListRequest");
2585 _PREHASH_ParcelAccessListRequest = gMessageStringTable.getString("ParcelAccessListRequest"); 2356 _PREHASH_ParcelAccessListRequest = gMessageStringTable.getString("ParcelAccessListRequest");
2586 _PREHASH_MuteListRequest = gMessageStringTable.getString("MuteListRequest"); 2357 _PREHASH_MuteListRequest = gMessageStringTable.getString("MuteListRequest");
2587 _PREHASH_StartPeriod = gMessageStringTable.getString("StartPeriod");
2588 _PREHASH_RpcChannelRequest = gMessageStringTable.getString("RpcChannelRequest"); 2358 _PREHASH_RpcChannelRequest = gMessageStringTable.getString("RpcChannelRequest");
2589 _PREHASH_LandStatRequest = gMessageStringTable.getString("LandStatRequest"); 2359 _PREHASH_LandStatRequest = gMessageStringTable.getString("LandStatRequest");
2590 _PREHASH_PlacesQuery = gMessageStringTable.getString("PlacesQuery"); 2360 _PREHASH_PlacesQuery = gMessageStringTable.getString("PlacesQuery");
@@ -2612,34 +2382,27 @@ void init_prehash_data()
2612 _PREHASH_SoundTrigger = gMessageStringTable.getString("SoundTrigger"); 2382 _PREHASH_SoundTrigger = gMessageStringTable.getString("SoundTrigger");
2613 _PREHASH_TerrainRaiseLimit = gMessageStringTable.getString("TerrainRaiseLimit"); 2383 _PREHASH_TerrainRaiseLimit = gMessageStringTable.getString("TerrainRaiseLimit");
2614 _PREHASH_Quorum = gMessageStringTable.getString("Quorum"); 2384 _PREHASH_Quorum = gMessageStringTable.getString("Quorum");
2615 _PREHASH_TokenBlock = gMessageStringTable.getString("TokenBlock");
2616 _PREHASH_AgentBlock = gMessageStringTable.getString("AgentBlock"); 2385 _PREHASH_AgentBlock = gMessageStringTable.getString("AgentBlock");
2617 _PREHASH_CommandBlock = gMessageStringTable.getString("CommandBlock"); 2386 _PREHASH_CommandBlock = gMessageStringTable.getString("CommandBlock");
2618 _PREHASH_PricePublicObjectDecay = gMessageStringTable.getString("PricePublicObjectDecay"); 2387 _PREHASH_PricePublicObjectDecay = gMessageStringTable.getString("PricePublicObjectDecay");
2619 _PREHASH_SpawnPointPos = gMessageStringTable.getString("SpawnPointPos"); 2388 _PREHASH_SpawnPointPos = gMessageStringTable.getString("SpawnPointPos");
2620 _PREHASH_AttachedSoundCutoffRadius = gMessageStringTable.getString("AttachedSoundCutoffRadius");
2621 _PREHASH_VolumeDetail = gMessageStringTable.getString("VolumeDetail"); 2389 _PREHASH_VolumeDetail = gMessageStringTable.getString("VolumeDetail");
2622 _PREHASH_FromAgentName = gMessageStringTable.getString("FromAgentName"); 2390 _PREHASH_FromAgentName = gMessageStringTable.getString("FromAgentName");
2623 _PREHASH_Range = gMessageStringTable.getString("Range"); 2391 _PREHASH_Range = gMessageStringTable.getString("Range");
2624 _PREHASH_DirectoryVisibility = gMessageStringTable.getString("DirectoryVisibility"); 2392 _PREHASH_DirectoryVisibility = gMessageStringTable.getString("DirectoryVisibility");
2625 _PREHASH_PublicIP = gMessageStringTable.getString("PublicIP"); 2393 _PREHASH_PublicIP = gMessageStringTable.getString("PublicIP");
2626 _PREHASH_TeleportFailed = gMessageStringTable.getString("TeleportFailed"); 2394 _PREHASH_TeleportFailed = gMessageStringTable.getString("TeleportFailed");
2627 _PREHASH_OnlineStatusReply = gMessageStringTable.getString("OnlineStatusReply");
2628 _PREHASH_RequestAvatarInfo = gMessageStringTable.getString("RequestAvatarInfo");
2629 _PREHASH_PreloadSound = gMessageStringTable.getString("PreloadSound"); 2395 _PREHASH_PreloadSound = gMessageStringTable.getString("PreloadSound");
2630 _PREHASH_ScreenshotID = gMessageStringTable.getString("ScreenshotID"); 2396 _PREHASH_ScreenshotID = gMessageStringTable.getString("ScreenshotID");
2631 _PREHASH_CovenantTimestamp = gMessageStringTable.getString("CovenantTimestamp"); 2397 _PREHASH_CovenantTimestamp = gMessageStringTable.getString("CovenantTimestamp");
2632 _PREHASH_OldestUnacked = gMessageStringTable.getString("OldestUnacked"); 2398 _PREHASH_OldestUnacked = gMessageStringTable.getString("OldestUnacked");
2633 _PREHASH_SimulatorIP = gMessageStringTable.getString("SimulatorIP"); 2399 _PREHASH_SimulatorIP = gMessageStringTable.getString("SimulatorIP");
2634 _PREHASH_ObjectImport = gMessageStringTable.getString("ObjectImport");
2635 _PREHASH_Value = gMessageStringTable.getString("Value"); 2400 _PREHASH_Value = gMessageStringTable.getString("Value");
2636 _PREHASH_JointAxisOrAnchor = gMessageStringTable.getString("JointAxisOrAnchor"); 2401 _PREHASH_JointAxisOrAnchor = gMessageStringTable.getString("JointAxisOrAnchor");
2637 _PREHASH_Test0 = gMessageStringTable.getString("Test0"); 2402 _PREHASH_Test0 = gMessageStringTable.getString("Test0");
2638 _PREHASH_Test1 = gMessageStringTable.getString("Test1"); 2403 _PREHASH_Test1 = gMessageStringTable.getString("Test1");
2639 _PREHASH_Test2 = gMessageStringTable.getString("Test2"); 2404 _PREHASH_Test2 = gMessageStringTable.getString("Test2");
2640 _PREHASH_SunPhase = gMessageStringTable.getString("SunPhase"); 2405 _PREHASH_SunPhase = gMessageStringTable.getString("SunPhase");
2641 _PREHASH_Place = gMessageStringTable.getString("Place");
2642 _PREHASH_Phase = gMessageStringTable.getString("Phase");
2643 _PREHASH_ParcelDivide = gMessageStringTable.getString("ParcelDivide"); 2406 _PREHASH_ParcelDivide = gMessageStringTable.getString("ParcelDivide");
2644 _PREHASH_PriceObjectClaim = gMessageStringTable.getString("PriceObjectClaim"); 2407 _PREHASH_PriceObjectClaim = gMessageStringTable.getString("PriceObjectClaim");
2645 _PREHASH_Field = gMessageStringTable.getString("Field"); 2408 _PREHASH_Field = gMessageStringTable.getString("Field");
@@ -2649,7 +2412,6 @@ void init_prehash_data()
2649 _PREHASH_Score = gMessageStringTable.getString("Score"); 2412 _PREHASH_Score = gMessageStringTable.getString("Score");
2650 _PREHASH_Image = gMessageStringTable.getString("Image"); 2413 _PREHASH_Image = gMessageStringTable.getString("Image");
2651 _PREHASH_ObjectClickAction = gMessageStringTable.getString("ObjectClickAction"); 2414 _PREHASH_ObjectClickAction = gMessageStringTable.getString("ObjectClickAction");
2652 _PREHASH_Delta = gMessageStringTable.getString("Delta");
2653 _PREHASH_Parameter = gMessageStringTable.getString("Parameter"); 2415 _PREHASH_Parameter = gMessageStringTable.getString("Parameter");
2654 _PREHASH_Flags = gMessageStringTable.getString("Flags"); 2416 _PREHASH_Flags = gMessageStringTable.getString("Flags");
2655 _PREHASH_Plane = gMessageStringTable.getString("Plane"); 2417 _PREHASH_Plane = gMessageStringTable.getString("Plane");
@@ -2659,26 +2421,24 @@ void init_prehash_data()
2659 _PREHASH_Textures = gMessageStringTable.getString("Textures"); 2421 _PREHASH_Textures = gMessageStringTable.getString("Textures");
2660 _PREHASH_EventData = gMessageStringTable.getString("EventData"); 2422 _PREHASH_EventData = gMessageStringTable.getString("EventData");
2661 _PREHASH_Final = gMessageStringTable.getString("Final"); 2423 _PREHASH_Final = gMessageStringTable.getString("Final");
2424 _PREHASH_System = gMessageStringTable.getString("System");
2662 _PREHASH_TelehubPos = gMessageStringTable.getString("TelehubPos"); 2425 _PREHASH_TelehubPos = gMessageStringTable.getString("TelehubPos");
2663 _PREHASH_ReportAutosaveCrash = gMessageStringTable.getString("ReportAutosaveCrash"); 2426 _PREHASH_ReportAutosaveCrash = gMessageStringTable.getString("ReportAutosaveCrash");
2664 _PREHASH_CreateTrustedCircuit = gMessageStringTable.getString("CreateTrustedCircuit"); 2427 _PREHASH_CreateTrustedCircuit = gMessageStringTable.getString("CreateTrustedCircuit");
2665 _PREHASH_DenyTrustedCircuit = gMessageStringTable.getString("DenyTrustedCircuit"); 2428 _PREHASH_DenyTrustedCircuit = gMessageStringTable.getString("DenyTrustedCircuit");
2666 _PREHASH_RequestTrustedCircuit = gMessageStringTable.getString("RequestTrustedCircuit"); 2429 _PREHASH_RequestTrustedCircuit = gMessageStringTable.getString("RequestTrustedCircuit");
2667 _PREHASH_Codec = gMessageStringTable.getString("Codec"); 2430 _PREHASH_Codec = gMessageStringTable.getString("Codec");
2668 _PREHASH_Level = gMessageStringTable.getString("Level");
2669 _PREHASH_Modal = gMessageStringTable.getString("Modal"); 2431 _PREHASH_Modal = gMessageStringTable.getString("Modal");
2670 _PREHASH_ChildAgentUnknown = gMessageStringTable.getString("ChildAgentUnknown"); 2432 _PREHASH_ChildAgentUnknown = gMessageStringTable.getString("ChildAgentUnknown");
2671 _PREHASH_LandingType = gMessageStringTable.getString("LandingType"); 2433 _PREHASH_LandingType = gMessageStringTable.getString("LandingType");
2672 _PREHASH_ScriptRunningReply = gMessageStringTable.getString("ScriptRunningReply"); 2434 _PREHASH_ScriptRunningReply = gMessageStringTable.getString("ScriptRunningReply");
2673 _PREHASH_MoneyDetailsReply = gMessageStringTable.getString("MoneyDetailsReply");
2674 _PREHASH_Reply = gMessageStringTable.getString("Reply"); 2435 _PREHASH_Reply = gMessageStringTable.getString("Reply");
2436 _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply");
2675 _PREHASH_TelehubRot = gMessageStringTable.getString("TelehubRot"); 2437 _PREHASH_TelehubRot = gMessageStringTable.getString("TelehubRot");
2676 _PREHASH_RequestFriendship = gMessageStringTable.getString("RequestFriendship");
2677 _PREHASH_AcceptFriendship = gMessageStringTable.getString("AcceptFriendship"); 2438 _PREHASH_AcceptFriendship = gMessageStringTable.getString("AcceptFriendship");
2678 _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply"); 2439 _PREHASH_ItemType = gMessageStringTable.getString("ItemType");
2679 _PREHASH_DwellInfo = gMessageStringTable.getString("DwellInfo"); 2440 _PREHASH_DwellInfo = gMessageStringTable.getString("DwellInfo");
2680 _PREHASH_AgentResume = gMessageStringTable.getString("AgentResume"); 2441 _PREHASH_AgentResume = gMessageStringTable.getString("AgentResume");
2681 _PREHASH_ItemType = gMessageStringTable.getString("ItemType");
2682 _PREHASH_MailFilter = gMessageStringTable.getString("MailFilter"); 2442 _PREHASH_MailFilter = gMessageStringTable.getString("MailFilter");
2683 _PREHASH_Disconnect = gMessageStringTable.getString("Disconnect"); 2443 _PREHASH_Disconnect = gMessageStringTable.getString("Disconnect");
2684 _PREHASH_SimPosition = gMessageStringTable.getString("SimPosition"); 2444 _PREHASH_SimPosition = gMessageStringTable.getString("SimPosition");
@@ -2705,7 +2465,6 @@ void init_prehash_data()
2705 _PREHASH_CategoryID = gMessageStringTable.getString("CategoryID"); 2465 _PREHASH_CategoryID = gMessageStringTable.getString("CategoryID");
2706 _PREHASH_Token = gMessageStringTable.getString("Token"); 2466 _PREHASH_Token = gMessageStringTable.getString("Token");
2707 _PREHASH_AggregatePerms = gMessageStringTable.getString("AggregatePerms"); 2467 _PREHASH_AggregatePerms = gMessageStringTable.getString("AggregatePerms");
2708 _PREHASH_StartParcelRemoveAck = gMessageStringTable.getString("StartParcelRemoveAck");
2709 _PREHASH_ObjectSelect = gMessageStringTable.getString("ObjectSelect"); 2468 _PREHASH_ObjectSelect = gMessageStringTable.getString("ObjectSelect");
2710 _PREHASH_ForceObjectSelect = gMessageStringTable.getString("ForceObjectSelect"); 2469 _PREHASH_ForceObjectSelect = gMessageStringTable.getString("ForceObjectSelect");
2711 _PREHASH_Price = gMessageStringTable.getString("Price"); 2470 _PREHASH_Price = gMessageStringTable.getString("Price");
@@ -2734,7 +2493,6 @@ void init_prehash_data()
2734 _PREHASH_AvatarID = gMessageStringTable.getString("AvatarID"); 2493 _PREHASH_AvatarID = gMessageStringTable.getString("AvatarID");
2735 _PREHASH_FounderID = gMessageStringTable.getString("FounderID"); 2494 _PREHASH_FounderID = gMessageStringTable.getString("FounderID");
2736 _PREHASH_EndPointID = gMessageStringTable.getString("EndPointID"); 2495 _PREHASH_EndPointID = gMessageStringTable.getString("EndPointID");
2737 _PREHASH_StipendEstimate = gMessageStringTable.getString("StipendEstimate");
2738 _PREHASH_LocationLookAt = gMessageStringTable.getString("LocationLookAt"); 2496 _PREHASH_LocationLookAt = gMessageStringTable.getString("LocationLookAt");
2739 _PREHASH_Sound = gMessageStringTable.getString("Sound"); 2497 _PREHASH_Sound = gMessageStringTable.getString("Sound");
2740 _PREHASH_Cover = gMessageStringTable.getString("Cover"); 2498 _PREHASH_Cover = gMessageStringTable.getString("Cover");
@@ -2754,12 +2512,12 @@ void init_prehash_data()
2754 _PREHASH_GroupRoleChanges = gMessageStringTable.getString("GroupRoleChanges"); 2512 _PREHASH_GroupRoleChanges = gMessageStringTable.getString("GroupRoleChanges");
2755 _PREHASH_Count = gMessageStringTable.getString("Count"); 2513 _PREHASH_Count = gMessageStringTable.getString("Count");
2756 _PREHASH_South = gMessageStringTable.getString("South"); 2514 _PREHASH_South = gMessageStringTable.getString("South");
2757 _PREHASH_Entry = gMessageStringTable.getString("Entry");
2758 _PREHASH_ObjectUpdateCompressed = gMessageStringTable.getString("ObjectUpdateCompressed"); 2515 _PREHASH_ObjectUpdateCompressed = gMessageStringTable.getString("ObjectUpdateCompressed");
2759 _PREHASH_MuteFlags = gMessageStringTable.getString("MuteFlags"); 2516 _PREHASH_MuteFlags = gMessageStringTable.getString("MuteFlags");
2760 _PREHASH_Group = gMessageStringTable.getString("Group"); 2517 _PREHASH_Group = gMessageStringTable.getString("Group");
2761 _PREHASH_AgentPause = gMessageStringTable.getString("AgentPause"); 2518 _PREHASH_AgentPause = gMessageStringTable.getString("AgentPause");
2762 _PREHASH_LanguagesText = gMessageStringTable.getString("LanguagesText"); 2519 _PREHASH_LanguagesText = gMessageStringTable.getString("LanguagesText");
2520 _PREHASH_Error = gMessageStringTable.getString("Error");
2763 _PREHASH_InternalScriptMail = gMessageStringTable.getString("InternalScriptMail"); 2521 _PREHASH_InternalScriptMail = gMessageStringTable.getString("InternalScriptMail");
2764 _PREHASH_FindAgent = gMessageStringTable.getString("FindAgent"); 2522 _PREHASH_FindAgent = gMessageStringTable.getString("FindAgent");
2765 _PREHASH_AgentData = gMessageStringTable.getString("AgentData"); 2523 _PREHASH_AgentData = gMessageStringTable.getString("AgentData");
@@ -2768,7 +2526,6 @@ void init_prehash_data()
2768 _PREHASH_AcceptNotices = gMessageStringTable.getString("AcceptNotices"); 2526 _PREHASH_AcceptNotices = gMessageStringTable.getString("AcceptNotices");
2769 _PREHASH_SetGroupAcceptNotices = gMessageStringTable.getString("SetGroupAcceptNotices"); 2527 _PREHASH_SetGroupAcceptNotices = gMessageStringTable.getString("SetGroupAcceptNotices");
2770 _PREHASH_CloseCircuit = gMessageStringTable.getString("CloseCircuit"); 2528 _PREHASH_CloseCircuit = gMessageStringTable.getString("CloseCircuit");
2771 _PREHASH_LogControl = gMessageStringTable.getString("LogControl");
2772 _PREHASH_TeleportFinish = gMessageStringTable.getString("TeleportFinish"); 2529 _PREHASH_TeleportFinish = gMessageStringTable.getString("TeleportFinish");
2773 _PREHASH_PathRevolutions = gMessageStringTable.getString("PathRevolutions"); 2530 _PREHASH_PathRevolutions = gMessageStringTable.getString("PathRevolutions");
2774 _PREHASH_ClassifiedInfoReply = gMessageStringTable.getString("ClassifiedInfoReply"); 2531 _PREHASH_ClassifiedInfoReply = gMessageStringTable.getString("ClassifiedInfoReply");
@@ -2785,7 +2542,6 @@ void init_prehash_data()
2785 _PREHASH_EventNotificationAddRequest = gMessageStringTable.getString("EventNotificationAddRequest"); 2542 _PREHASH_EventNotificationAddRequest = gMessageStringTable.getString("EventNotificationAddRequest");
2786 _PREHASH_ParcelDwellRequest = gMessageStringTable.getString("ParcelDwellRequest"); 2543 _PREHASH_ParcelDwellRequest = gMessageStringTable.getString("ParcelDwellRequest");
2787 _PREHASH_EventLocationRequest = gMessageStringTable.getString("EventLocationRequest"); 2544 _PREHASH_EventLocationRequest = gMessageStringTable.getString("EventLocationRequest");
2788 _PREHASH_EndPeriod = gMessageStringTable.getString("EndPeriod");
2789 _PREHASH_SetStartLocationRequest = gMessageStringTable.getString("SetStartLocationRequest"); 2545 _PREHASH_SetStartLocationRequest = gMessageStringTable.getString("SetStartLocationRequest");
2790 _PREHASH_QueryStart = gMessageStringTable.getString("QueryStart"); 2546 _PREHASH_QueryStart = gMessageStringTable.getString("QueryStart");
2791 _PREHASH_EjectData = gMessageStringTable.getString("EjectData"); 2547 _PREHASH_EjectData = gMessageStringTable.getString("EjectData");
@@ -2798,7 +2554,6 @@ void init_prehash_data()
2798 _PREHASH_VFileType = gMessageStringTable.getString("VFileType"); 2554 _PREHASH_VFileType = gMessageStringTable.getString("VFileType");
2799 _PREHASH_EjectGroupMemberReply = gMessageStringTable.getString("EjectGroupMemberReply"); 2555 _PREHASH_EjectGroupMemberReply = gMessageStringTable.getString("EjectGroupMemberReply");
2800 _PREHASH_ImageData = gMessageStringTable.getString("ImageData"); 2556 _PREHASH_ImageData = gMessageStringTable.getString("ImageData");
2801 _PREHASH_SpaceServerSimulatorTimeMessage = gMessageStringTable.getString("SpaceServerSimulatorTimeMessage");
2802 _PREHASH_SimulatorViewerTimeMessage = gMessageStringTable.getString("SimulatorViewerTimeMessage"); 2557 _PREHASH_SimulatorViewerTimeMessage = gMessageStringTable.getString("SimulatorViewerTimeMessage");
2803 _PREHASH_Rotation = gMessageStringTable.getString("Rotation"); 2558 _PREHASH_Rotation = gMessageStringTable.getString("Rotation");
2804 _PREHASH_Selection = gMessageStringTable.getString("Selection"); 2559 _PREHASH_Selection = gMessageStringTable.getString("Selection");
@@ -2806,7 +2561,6 @@ void init_prehash_data()
2806 _PREHASH_OperationData = gMessageStringTable.getString("OperationData"); 2561 _PREHASH_OperationData = gMessageStringTable.getString("OperationData");
2807 _PREHASH_ExpirationDate = gMessageStringTable.getString("ExpirationDate"); 2562 _PREHASH_ExpirationDate = gMessageStringTable.getString("ExpirationDate");
2808 _PREHASH_ParcelDeedToGroup = gMessageStringTable.getString("ParcelDeedToGroup"); 2563 _PREHASH_ParcelDeedToGroup = gMessageStringTable.getString("ParcelDeedToGroup");
2809 _PREHASH_DirPicksReply = gMessageStringTable.getString("DirPicksReply");
2810 _PREHASH_AvatarPicksReply = gMessageStringTable.getString("AvatarPicksReply"); 2564 _PREHASH_AvatarPicksReply = gMessageStringTable.getString("AvatarPicksReply");
2811 _PREHASH_GroupTitlesReply = gMessageStringTable.getString("GroupTitlesReply"); 2565 _PREHASH_GroupTitlesReply = gMessageStringTable.getString("GroupTitlesReply");
2812 _PREHASH_AgentInfo = gMessageStringTable.getString("AgentInfo"); 2566 _PREHASH_AgentInfo = gMessageStringTable.getString("AgentInfo");
@@ -2817,8 +2571,8 @@ void init_prehash_data()
2817 _PREHASH_SourceID = gMessageStringTable.getString("SourceID"); 2571 _PREHASH_SourceID = gMessageStringTable.getString("SourceID");
2818 _PREHASH_ChangeUserRights = gMessageStringTable.getString("ChangeUserRights"); 2572 _PREHASH_ChangeUserRights = gMessageStringTable.getString("ChangeUserRights");
2819 _PREHASH_TeleportFlags = gMessageStringTable.getString("TeleportFlags"); 2573 _PREHASH_TeleportFlags = gMessageStringTable.getString("TeleportFlags");
2820 _PREHASH_AssetData = gMessageStringTable.getString("AssetData");
2821 _PREHASH_SlaveParcelData = gMessageStringTable.getString("SlaveParcelData"); 2574 _PREHASH_SlaveParcelData = gMessageStringTable.getString("SlaveParcelData");
2575 _PREHASH_AssetData = gMessageStringTable.getString("AssetData");
2822 _PREHASH_MultipleObjectUpdate = gMessageStringTable.getString("MultipleObjectUpdate"); 2576 _PREHASH_MultipleObjectUpdate = gMessageStringTable.getString("MultipleObjectUpdate");
2823 _PREHASH_ObjectUpdate = gMessageStringTable.getString("ObjectUpdate"); 2577 _PREHASH_ObjectUpdate = gMessageStringTable.getString("ObjectUpdate");
2824 _PREHASH_ImprovedTerseObjectUpdate = gMessageStringTable.getString("ImprovedTerseObjectUpdate"); 2578 _PREHASH_ImprovedTerseObjectUpdate = gMessageStringTable.getString("ImprovedTerseObjectUpdate");
@@ -2834,7 +2588,6 @@ void init_prehash_data()
2834 _PREHASH_ClaimDate = gMessageStringTable.getString("ClaimDate"); 2588 _PREHASH_ClaimDate = gMessageStringTable.getString("ClaimDate");
2835 _PREHASH_MergeParcel = gMessageStringTable.getString("MergeParcel"); 2589 _PREHASH_MergeParcel = gMessageStringTable.getString("MergeParcel");
2836 _PREHASH_Priority = gMessageStringTable.getString("Priority"); 2590 _PREHASH_Priority = gMessageStringTable.getString("Priority");
2837 _PREHASH_Building = gMessageStringTable.getString("Building");
2838 _PREHASH_QueryText = gMessageStringTable.getString("QueryText"); 2591 _PREHASH_QueryText = gMessageStringTable.getString("QueryText");
2839 _PREHASH_GroupNoticeAdd = gMessageStringTable.getString("GroupNoticeAdd"); 2592 _PREHASH_GroupNoticeAdd = gMessageStringTable.getString("GroupNoticeAdd");
2840 _PREHASH_ReturnType = gMessageStringTable.getString("ReturnType"); 2593 _PREHASH_ReturnType = gMessageStringTable.getString("ReturnType");
@@ -2844,7 +2597,6 @@ void init_prehash_data()
2844 _PREHASH_RequestMultipleObjects = gMessageStringTable.getString("RequestMultipleObjects"); 2597 _PREHASH_RequestMultipleObjects = gMessageStringTable.getString("RequestMultipleObjects");
2845 _PREHASH_RetrieveInstantMessages = gMessageStringTable.getString("RetrieveInstantMessages"); 2598 _PREHASH_RetrieveInstantMessages = gMessageStringTable.getString("RetrieveInstantMessages");
2846 _PREHASH_OpenCircuit = gMessageStringTable.getString("OpenCircuit"); 2599 _PREHASH_OpenCircuit = gMessageStringTable.getString("OpenCircuit");
2847 _PREHASH_SecureSessionID = gMessageStringTable.getString("SecureSessionID");
2848 _PREHASH_CrossedRegion = gMessageStringTable.getString("CrossedRegion"); 2600 _PREHASH_CrossedRegion = gMessageStringTable.getString("CrossedRegion");
2849 _PREHASH_DirGroupsReply = gMessageStringTable.getString("DirGroupsReply"); 2601 _PREHASH_DirGroupsReply = gMessageStringTable.getString("DirGroupsReply");
2850 _PREHASH_AvatarGroupsReply = gMessageStringTable.getString("AvatarGroupsReply"); 2602 _PREHASH_AvatarGroupsReply = gMessageStringTable.getString("AvatarGroupsReply");
@@ -2855,18 +2607,14 @@ void init_prehash_data()
2855 _PREHASH_ParentEstate = gMessageStringTable.getString("ParentEstate"); 2607 _PREHASH_ParentEstate = gMessageStringTable.getString("ParentEstate");
2856 _PREHASH_EstateName = gMessageStringTable.getString("EstateName"); 2608 _PREHASH_EstateName = gMessageStringTable.getString("EstateName");
2857 _PREHASH_MuteName = gMessageStringTable.getString("MuteName"); 2609 _PREHASH_MuteName = gMessageStringTable.getString("MuteName");
2858 _PREHASH_StartParcelRename = gMessageStringTable.getString("StartParcelRename");
2859 _PREHASH_BulkParcelRename = gMessageStringTable.getString("BulkParcelRename");
2860 _PREHASH_ParcelRename = gMessageStringTable.getString("ParcelRename"); 2610 _PREHASH_ParcelRename = gMessageStringTable.getString("ParcelRename");
2861 _PREHASH_ViewerFilename = gMessageStringTable.getString("ViewerFilename"); 2611 _PREHASH_ViewerFilename = gMessageStringTable.getString("ViewerFilename");
2862 _PREHASH_Positive = gMessageStringTable.getString("Positive");
2863 _PREHASH_UserReportInternal = gMessageStringTable.getString("UserReportInternal"); 2612 _PREHASH_UserReportInternal = gMessageStringTable.getString("UserReportInternal");
2864 _PREHASH_AvatarPropertiesRequest = gMessageStringTable.getString("AvatarPropertiesRequest"); 2613 _PREHASH_AvatarPropertiesRequest = gMessageStringTable.getString("AvatarPropertiesRequest");
2865 _PREHASH_ParcelPropertiesRequest = gMessageStringTable.getString("ParcelPropertiesRequest"); 2614 _PREHASH_ParcelPropertiesRequest = gMessageStringTable.getString("ParcelPropertiesRequest");
2866 _PREHASH_GroupProfileRequest = gMessageStringTable.getString("GroupProfileRequest"); 2615 _PREHASH_GroupProfileRequest = gMessageStringTable.getString("GroupProfileRequest");
2867 _PREHASH_AgentDataUpdateRequest = gMessageStringTable.getString("AgentDataUpdateRequest"); 2616 _PREHASH_AgentDataUpdateRequest = gMessageStringTable.getString("AgentDataUpdateRequest");
2868 _PREHASH_PriceObjectScaleFactor = gMessageStringTable.getString("PriceObjectScaleFactor"); 2617 _PREHASH_PriceObjectScaleFactor = gMessageStringTable.getString("PriceObjectScaleFactor");
2869 _PREHASH_DirPicksQuery = gMessageStringTable.getString("DirPicksQuery");
2870 _PREHASH_OpenEnrollment = gMessageStringTable.getString("OpenEnrollment"); 2618 _PREHASH_OpenEnrollment = gMessageStringTable.getString("OpenEnrollment");
2871 _PREHASH_GroupData = gMessageStringTable.getString("GroupData"); 2619 _PREHASH_GroupData = gMessageStringTable.getString("GroupData");
2872 _PREHASH_RequestGodlikePowers = gMessageStringTable.getString("RequestGodlikePowers"); 2620 _PREHASH_RequestGodlikePowers = gMessageStringTable.getString("RequestGodlikePowers");
@@ -2877,7 +2625,6 @@ void init_prehash_data()
2877 _PREHASH_FirstDetachAll = gMessageStringTable.getString("FirstDetachAll"); 2625 _PREHASH_FirstDetachAll = gMessageStringTable.getString("FirstDetachAll");
2878 _PREHASH_EstateID = gMessageStringTable.getString("EstateID"); 2626 _PREHASH_EstateID = gMessageStringTable.getString("EstateID");
2879 _PREHASH_ImprovedInstantMessage = gMessageStringTable.getString("ImprovedInstantMessage"); 2627 _PREHASH_ImprovedInstantMessage = gMessageStringTable.getString("ImprovedInstantMessage");
2880 _PREHASH_AgentQuit = gMessageStringTable.getString("AgentQuit");
2881 _PREHASH_CheckParcelSales = gMessageStringTable.getString("CheckParcelSales"); 2628 _PREHASH_CheckParcelSales = gMessageStringTable.getString("CheckParcelSales");
2882 _PREHASH_ParcelSales = gMessageStringTable.getString("ParcelSales"); 2629 _PREHASH_ParcelSales = gMessageStringTable.getString("ParcelSales");
2883 _PREHASH_CurrentInterval = gMessageStringTable.getString("CurrentInterval"); 2630 _PREHASH_CurrentInterval = gMessageStringTable.getString("CurrentInterval");
@@ -2894,12 +2641,8 @@ void init_prehash_data()
2894 _PREHASH_SystemKickUser = gMessageStringTable.getString("SystemKickUser"); 2641 _PREHASH_SystemKickUser = gMessageStringTable.getString("SystemKickUser");
2895 _PREHASH_TransactionTime = gMessageStringTable.getString("TransactionTime"); 2642 _PREHASH_TransactionTime = gMessageStringTable.getString("TransactionTime");
2896 _PREHASH_TimeToLive = gMessageStringTable.getString("TimeToLive"); 2643 _PREHASH_TimeToLive = gMessageStringTable.getString("TimeToLive");
2897 _PREHASH_StartParcelRemove = gMessageStringTable.getString("StartParcelRemove");
2898 _PREHASH_BulkParcelRemove = gMessageStringTable.getString("BulkParcelRemove");
2899 _PREHASH_OldAgentID = gMessageStringTable.getString("OldAgentID"); 2644 _PREHASH_OldAgentID = gMessageStringTable.getString("OldAgentID");
2900 _PREHASH_BonusEstimate = gMessageStringTable.getString("BonusEstimate");
2901 _PREHASH_MusicURL = gMessageStringTable.getString("MusicURL"); 2645 _PREHASH_MusicURL = gMessageStringTable.getString("MusicURL");
2902 _PREHASH_CompleteLure = gMessageStringTable.getString("CompleteLure");
2903 _PREHASH_ParcelPrimBonus = gMessageStringTable.getString("ParcelPrimBonus"); 2646 _PREHASH_ParcelPrimBonus = gMessageStringTable.getString("ParcelPrimBonus");
2904 _PREHASH_EjectUser = gMessageStringTable.getString("EjectUser"); 2647 _PREHASH_EjectUser = gMessageStringTable.getString("EjectUser");
2905 _PREHASH_CoarseLocationUpdate = gMessageStringTable.getString("CoarseLocationUpdate"); 2648 _PREHASH_CoarseLocationUpdate = gMessageStringTable.getString("CoarseLocationUpdate");
@@ -2932,10 +2675,6 @@ void init_prehash_data()
2932 _PREHASH_EstateOwnerID = gMessageStringTable.getString("EstateOwnerID"); 2675 _PREHASH_EstateOwnerID = gMessageStringTable.getString("EstateOwnerID");
2933 _PREHASH_LogoutRequest = gMessageStringTable.getString("LogoutRequest"); 2676 _PREHASH_LogoutRequest = gMessageStringTable.getString("LogoutRequest");
2934 _PREHASH_AssetUploadRequest = gMessageStringTable.getString("AssetUploadRequest"); 2677 _PREHASH_AssetUploadRequest = gMessageStringTable.getString("AssetUploadRequest");
2935 _PREHASH_ReputationIndividualRequest = gMessageStringTable.getString("ReputationIndividualRequest");
2936 _PREHASH_MajorVersion = gMessageStringTable.getString("MajorVersion");
2937 _PREHASH_MinorVersion = gMessageStringTable.getString("MinorVersion");
2938 _PREHASH_SimulatorAssign = gMessageStringTable.getString("SimulatorAssign");
2939 _PREHASH_TransactionType = gMessageStringTable.getString("TransactionType"); 2678 _PREHASH_TransactionType = gMessageStringTable.getString("TransactionType");
2940 _PREHASH_AvatarPropertiesUpdate = gMessageStringTable.getString("AvatarPropertiesUpdate"); 2679 _PREHASH_AvatarPropertiesUpdate = gMessageStringTable.getString("AvatarPropertiesUpdate");
2941 _PREHASH_ParcelPropertiesUpdate = gMessageStringTable.getString("ParcelPropertiesUpdate"); 2680 _PREHASH_ParcelPropertiesUpdate = gMessageStringTable.getString("ParcelPropertiesUpdate");
@@ -2944,7 +2683,6 @@ void init_prehash_data()
2944 _PREHASH_DeRezAck = gMessageStringTable.getString("DeRezAck"); 2683 _PREHASH_DeRezAck = gMessageStringTable.getString("DeRezAck");
2945 _PREHASH_TakeControls = gMessageStringTable.getString("TakeControls"); 2684 _PREHASH_TakeControls = gMessageStringTable.getString("TakeControls");
2946 _PREHASH_DirLandReply = gMessageStringTable.getString("DirLandReply"); 2685 _PREHASH_DirLandReply = gMessageStringTable.getString("DirLandReply");
2947 _PREHASH_SpaceLocationTeleportReply = gMessageStringTable.getString("SpaceLocationTeleportReply");
2948 _PREHASH_MuteType = gMessageStringTable.getString("MuteType"); 2686 _PREHASH_MuteType = gMessageStringTable.getString("MuteType");
2949 _PREHASH_IMViaEMail = gMessageStringTable.getString("IMViaEMail"); 2687 _PREHASH_IMViaEMail = gMessageStringTable.getString("IMViaEMail");
2950 _PREHASH_RentPrice = gMessageStringTable.getString("RentPrice"); 2688 _PREHASH_RentPrice = gMessageStringTable.getString("RentPrice");
diff --git a/linden/indra/llmessage/message_prehash.h b/linden/indra/llmessage/message_prehash.h
index 06a8a9c..b75edca 100644
--- a/linden/indra/llmessage/message_prehash.h
+++ b/linden/indra/llmessage/message_prehash.h
@@ -30,7 +30,7 @@
30#define LL_MESSAGE_PREHASH_H 30#define LL_MESSAGE_PREHASH_H
31 31
32/** 32/**
33 * Generated from message template version number 1.053 33 * Generated from message template version number 2.000
34 */ 34 */
35 35
36 36
@@ -59,7 +59,6 @@ extern char * _PREHASH_ScriptAnswerYes;
59extern char * _PREHASH_PartnerID; 59extern char * _PREHASH_PartnerID;
60extern char * _PREHASH_DirLandQuery; 60extern char * _PREHASH_DirLandQuery;
61extern char * _PREHASH_TeleportStart; 61extern char * _PREHASH_TeleportStart;
62extern char * _PREHASH_LogMessages;
63extern char * _PREHASH_AboutText; 62extern char * _PREHASH_AboutText;
64extern char * _PREHASH_VisualParam; 63extern char * _PREHASH_VisualParam;
65extern char * _PREHASH_GroupPrims; 64extern char * _PREHASH_GroupPrims;
@@ -67,10 +66,8 @@ extern char * _PREHASH_SelectedPrims;
67extern char * _PREHASH_ID; 66extern char * _PREHASH_ID;
68extern char * _PREHASH_UUIDNameRequest; 67extern char * _PREHASH_UUIDNameRequest;
69extern char * _PREHASH_UUIDGroupNameRequest; 68extern char * _PREHASH_UUIDGroupNameRequest;
70extern char * _PREHASH_MoneyTransactionsRequest;
71extern char * _PREHASH_GroupAccountTransactionsRequest; 69extern char * _PREHASH_GroupAccountTransactionsRequest;
72extern char * _PREHASH_MapNameRequest; 70extern char * _PREHASH_MapNameRequest;
73extern char * _PREHASH_MailTaskSimRequest;
74extern char * _PREHASH_UpdateSimulator; 71extern char * _PREHASH_UpdateSimulator;
75extern char * _PREHASH_BillableFactor; 72extern char * _PREHASH_BillableFactor;
76extern char * _PREHASH_ObjectBonusFactor; 73extern char * _PREHASH_ObjectBonusFactor;
@@ -80,7 +77,6 @@ extern char * _PREHASH_ConfirmEnableSimulator;
80extern char * _PREHASH_LayerType; 77extern char * _PREHASH_LayerType;
81extern char * _PREHASH_OwnerRole; 78extern char * _PREHASH_OwnerRole;
82extern char * _PREHASH_ParcelOverlay; 79extern char * _PREHASH_ParcelOverlay;
83extern char * _PREHASH_AdjustBalance;
84extern char * _PREHASH_GroupOwned; 80extern char * _PREHASH_GroupOwned;
85extern char * _PREHASH_IP; 81extern char * _PREHASH_IP;
86extern char * _PREHASH_ChatFromViewer; 82extern char * _PREHASH_ChatFromViewer;
@@ -115,8 +111,8 @@ extern char * _PREHASH_SensedData;
115extern char * _PREHASH_UpdateBlock; 111extern char * _PREHASH_UpdateBlock;
116extern char * _PREHASH_ClassifiedGodDelete; 112extern char * _PREHASH_ClassifiedGodDelete;
117extern char * _PREHASH_ObjectGrabUpdate; 113extern char * _PREHASH_ObjectGrabUpdate;
118extern char * _PREHASH_TaxDate;
119extern char * _PREHASH_LocationPos; 114extern char * _PREHASH_LocationPos;
115extern char * _PREHASH_TaxDate;
120extern char * _PREHASH_StartDateTime; 116extern char * _PREHASH_StartDateTime;
121extern char * _PREHASH_ObjectUpdateCached; 117extern char * _PREHASH_ObjectUpdateCached;
122extern char * _PREHASH_Packets; 118extern char * _PREHASH_Packets;
@@ -148,14 +144,11 @@ extern char * _PREHASH_AABBMin;
148extern char * _PREHASH_ClassifiedFlags; 144extern char * _PREHASH_ClassifiedFlags;
149extern char * _PREHASH_ControlFlags; 145extern char * _PREHASH_ControlFlags;
150extern char * _PREHASH_TeleportRequest; 146extern char * _PREHASH_TeleportRequest;
151extern char * _PREHASH_SpaceLocationTeleportRequest;
152extern char * _PREHASH_LeaderBoardRequest;
153extern char * _PREHASH_ScriptTeleportRequest; 147extern char * _PREHASH_ScriptTeleportRequest;
148extern char * _PREHASH_EstateCovenantRequest;
154extern char * _PREHASH_DateUTC; 149extern char * _PREHASH_DateUTC;
155extern char * _PREHASH_TaskIDs; 150extern char * _PREHASH_TaskIDs;
156extern char * _PREHASH_EstateCovenantRequest;
157extern char * _PREHASH_RequestResult; 151extern char * _PREHASH_RequestResult;
158extern char * _PREHASH_ReputationAgentAssign;
159extern char * _PREHASH_CanAcceptAgents; 152extern char * _PREHASH_CanAcceptAgents;
160extern char * _PREHASH_ObjectSaleInfo; 153extern char * _PREHASH_ObjectSaleInfo;
161extern char * _PREHASH_KillChildAgents; 154extern char * _PREHASH_KillChildAgents;
@@ -167,7 +160,6 @@ extern char * _PREHASH_InfoBlock;
167extern char * _PREHASH_OwnershipCost; 160extern char * _PREHASH_OwnershipCost;
168extern char * _PREHASH_AvatarNotesUpdate; 161extern char * _PREHASH_AvatarNotesUpdate;
169extern char * _PREHASH_PID; 162extern char * _PREHASH_PID;
170extern char * _PREHASH_TimeString;
171extern char * _PREHASH_DirPopularReply; 163extern char * _PREHASH_DirPopularReply;
172extern char * _PREHASH_TerrainHeightRange00; 164extern char * _PREHASH_TerrainHeightRange00;
173extern char * _PREHASH_SimData; 165extern char * _PREHASH_SimData;
@@ -193,7 +185,6 @@ extern char * _PREHASH_Objects;
193extern char * _PREHASH_URL; 185extern char * _PREHASH_URL;
194extern char * _PREHASH_CreationDate; 186extern char * _PREHASH_CreationDate;
195extern char * _PREHASH_JointPivot; 187extern char * _PREHASH_JointPivot;
196extern char * _PREHASH_RateeID;
197extern char * _PREHASH_FPS; 188extern char * _PREHASH_FPS;
198extern char * _PREHASH_HasTelehub; 189extern char * _PREHASH_HasTelehub;
199extern char * _PREHASH_PathEnd; 190extern char * _PREHASH_PathEnd;
@@ -218,7 +209,6 @@ extern char * _PREHASH_GroupNoticesListReply;
218extern char * _PREHASH_ParcelAccessListReply; 209extern char * _PREHASH_ParcelAccessListReply;
219extern char * _PREHASH_RpcChannelReply; 210extern char * _PREHASH_RpcChannelReply;
220extern char * _PREHASH_RegionPresenceResponse; 211extern char * _PREHASH_RegionPresenceResponse;
221extern char * _PREHASH_AgentPresenceResponse;
222extern char * _PREHASH_CharterMember; 212extern char * _PREHASH_CharterMember;
223extern char * _PREHASH_EdgeData; 213extern char * _PREHASH_EdgeData;
224extern char * _PREHASH_NameData; 214extern char * _PREHASH_NameData;
@@ -232,14 +222,12 @@ extern char * _PREHASH_Mag;
232extern char * _PREHASH_ParcelPropertiesRequestByID; 222extern char * _PREHASH_ParcelPropertiesRequestByID;
233extern char * _PREHASH_ObjectLink; 223extern char * _PREHASH_ObjectLink;
234extern char * _PREHASH_RpcScriptReplyInbound; 224extern char * _PREHASH_RpcScriptReplyInbound;
235extern char * _PREHASH_BoardData;
236extern char * _PREHASH_RezData; 225extern char * _PREHASH_RezData;
237extern char * _PREHASH_RemoveInventoryObjects; 226extern char * _PREHASH_RemoveInventoryObjects;
238extern char * _PREHASH_GroupProposalBallot; 227extern char * _PREHASH_GroupProposalBallot;
239extern char * _PREHASH_RPCServerIP; 228extern char * _PREHASH_RPCServerIP;
240extern char * _PREHASH_Far; 229extern char * _PREHASH_Far;
241extern char * _PREHASH_GodSessionID; 230extern char * _PREHASH_GodSessionID;
242extern char * _PREHASH_ViewerDigest;
243extern char * _PREHASH_FLAboutText; 231extern char * _PREHASH_FLAboutText;
244extern char * _PREHASH_RegionHandshakeReply; 232extern char * _PREHASH_RegionHandshakeReply;
245extern char * _PREHASH_GroupActiveProposalItemReply; 233extern char * _PREHASH_GroupActiveProposalItemReply;
@@ -251,7 +239,6 @@ extern char * _PREHASH_Set;
251extern char * _PREHASH_NewName; 239extern char * _PREHASH_NewName;
252extern char * _PREHASH_Key; 240extern char * _PREHASH_Key;
253extern char * _PREHASH_AgentID; 241extern char * _PREHASH_AgentID;
254extern char * _PREHASH_OnlineStatusRequest;
255extern char * _PREHASH_EventNotificationRemoveRequest; 242extern char * _PREHASH_EventNotificationRemoveRequest;
256extern char * _PREHASH_NewFolderID; 243extern char * _PREHASH_NewFolderID;
257extern char * _PREHASH_Arc; 244extern char * _PREHASH_Arc;
@@ -263,7 +250,6 @@ extern char * _PREHASH_Top;
263extern char * _PREHASH_MiscStats; 250extern char * _PREHASH_MiscStats;
264extern char * _PREHASH_ImageID; 251extern char * _PREHASH_ImageID;
265extern char * _PREHASH_DataPacket; 252extern char * _PREHASH_DataPacket;
266extern char * _PREHASH_ObjectDehinge;
267extern char * _PREHASH_You; 253extern char * _PREHASH_You;
268extern char * _PREHASH_ScriptControlChange; 254extern char * _PREHASH_ScriptControlChange;
269extern char * _PREHASH_LoadURL; 255extern char * _PREHASH_LoadURL;
@@ -280,9 +266,9 @@ extern char * _PREHASH_Contribution;
280extern char * _PREHASH_SetGroupContribution; 266extern char * _PREHASH_SetGroupContribution;
281extern char * _PREHASH_Offline; 267extern char * _PREHASH_Offline;
282extern char * _PREHASH_AgentIsNowWearing; 268extern char * _PREHASH_AgentIsNowWearing;
283extern char * _PREHASH_SecPerDay;
284extern char * _PREHASH_Members; 269extern char * _PREHASH_Members;
285extern char * _PREHASH_FailedResends; 270extern char * _PREHASH_FailedResends;
271extern char * _PREHASH_SecPerDay;
286extern char * _PREHASH_CameraCenter; 272extern char * _PREHASH_CameraCenter;
287extern char * _PREHASH_CameraLeftAxis; 273extern char * _PREHASH_CameraLeftAxis;
288extern char * _PREHASH_ExBlock; 274extern char * _PREHASH_ExBlock;
@@ -290,7 +276,6 @@ extern char * _PREHASH_Channel;
290extern char * _PREHASH_NetTest; 276extern char * _PREHASH_NetTest;
291extern char * _PREHASH_DiscardLevel; 277extern char * _PREHASH_DiscardLevel;
292extern char * _PREHASH_LayerID; 278extern char * _PREHASH_LayerID;
293extern char * _PREHASH_RatorID;
294extern char * _PREHASH_GrabOffset; 279extern char * _PREHASH_GrabOffset;
295extern char * _PREHASH_SimPort; 280extern char * _PREHASH_SimPort;
296extern char * _PREHASH_PricePerMeter; 281extern char * _PREHASH_PricePerMeter;
@@ -310,21 +295,16 @@ extern char * _PREHASH_SitName;
310extern char * _PREHASH_RegionsVisited; 295extern char * _PREHASH_RegionsVisited;
311extern char * _PREHASH_DirClassifiedReply; 296extern char * _PREHASH_DirClassifiedReply;
312extern char * _PREHASH_AvatarClassifiedReply; 297extern char * _PREHASH_AvatarClassifiedReply;
313extern char * _PREHASH_ReputationIndividualReply;
314extern char * _PREHASH_MediaURL; 298extern char * _PREHASH_MediaURL;
315extern char * _PREHASH_CompleteAgentMovement; 299extern char * _PREHASH_CompleteAgentMovement;
316extern char * _PREHASH_SpaceIP;
317extern char * _PREHASH_ClassifiedID; 300extern char * _PREHASH_ClassifiedID;
318extern char * _PREHASH_LocalID; 301extern char * _PREHASH_LocalID;
302extern char * _PREHASH_SpaceIP;
319extern char * _PREHASH_RemoveItem; 303extern char * _PREHASH_RemoveItem;
320extern char * _PREHASH_LogFailedMoneyTransaction; 304extern char * _PREHASH_LogFailedMoneyTransaction;
321extern char * _PREHASH_ViewerStartAuction; 305extern char * _PREHASH_ViewerStartAuction;
322extern char * _PREHASH_StartAuction; 306extern char * _PREHASH_StartAuction;
323extern char * _PREHASH_NameValueName;
324extern char * _PREHASH_AngVelX;
325extern char * _PREHASH_DuplicateFlags; 307extern char * _PREHASH_DuplicateFlags;
326extern char * _PREHASH_AngVelY;
327extern char * _PREHASH_AngVelZ;
328extern char * _PREHASH_TextColor; 308extern char * _PREHASH_TextColor;
329extern char * _PREHASH_SlaveID; 309extern char * _PREHASH_SlaveID;
330extern char * _PREHASH_Charter; 310extern char * _PREHASH_Charter;
@@ -335,21 +315,16 @@ extern char * _PREHASH_ParcelAuctions;
335extern char * _PREHASH_OwnerIsGroup; 315extern char * _PREHASH_OwnerIsGroup;
336extern char * _PREHASH_NameValuePair; 316extern char * _PREHASH_NameValuePair;
337extern char * _PREHASH_RemoveNameValuePair; 317extern char * _PREHASH_RemoveNameValuePair;
338extern char * _PREHASH_GetNameValuePair;
339extern char * _PREHASH_BulkUpdateInventory; 318extern char * _PREHASH_BulkUpdateInventory;
340extern char * _PREHASH_UpdateTaskInventory; 319extern char * _PREHASH_UpdateTaskInventory;
341extern char * _PREHASH_RemoveTaskInventory; 320extern char * _PREHASH_RemoveTaskInventory;
342extern char * _PREHASH_MoveTaskInventory; 321extern char * _PREHASH_MoveTaskInventory;
343extern char * _PREHASH_RequestTaskInventory; 322extern char * _PREHASH_RequestTaskInventory;
344extern char * _PREHASH_ReplyTaskInventory; 323extern char * _PREHASH_ReplyTaskInventory;
345extern char * _PREHASH_DeclineInventory;
346extern char * _PREHASH_AggregatePermInventory; 324extern char * _PREHASH_AggregatePermInventory;
347extern char * _PREHASH_SimulatorInfo;
348extern char * _PREHASH_MoneyTransactionsReply;
349extern char * _PREHASH_GroupAccountTransactionsReply; 325extern char * _PREHASH_GroupAccountTransactionsReply;
350extern char * _PREHASH_MailTaskSimReply; 326extern char * _PREHASH_SimulatorInfo;
351extern char * _PREHASH_WearableData; 327extern char * _PREHASH_WearableData;
352extern char * _PREHASH_StatisticsData;
353extern char * _PREHASH_Enabled; 328extern char * _PREHASH_Enabled;
354extern char * _PREHASH_Savings; 329extern char * _PREHASH_Savings;
355extern char * _PREHASH_SimulatorLoad; 330extern char * _PREHASH_SimulatorLoad;
@@ -361,15 +336,12 @@ extern char * _PREHASH_JoinGroupRequest;
361extern char * _PREHASH_LeaveGroupRequest; 336extern char * _PREHASH_LeaveGroupRequest;
362extern char * _PREHASH_InviteGroupRequest; 337extern char * _PREHASH_InviteGroupRequest;
363extern char * _PREHASH_LiveHelpGroupRequest; 338extern char * _PREHASH_LiveHelpGroupRequest;
364extern char * _PREHASH_ServerVersion;
365extern char * _PREHASH_PriceParcelClaimFactor; 339extern char * _PREHASH_PriceParcelClaimFactor;
366extern char * _PREHASH_BillableArea; 340extern char * _PREHASH_BillableArea;
367extern char * _PREHASH_ObjectID; 341extern char * _PREHASH_ObjectID;
368extern char * _PREHASH_ObjectFlagUpdate; 342extern char * _PREHASH_ObjectFlagUpdate;
369extern char * _PREHASH_GroupRoleUpdate; 343extern char * _PREHASH_GroupRoleUpdate;
370extern char * _PREHASH_RequestInventoryAsset; 344extern char * _PREHASH_RequestInventoryAsset;
371extern char * _PREHASH_RedoLand;
372extern char * _PREHASH_TravelAccess;
373extern char * _PREHASH_ChangedGrid; 345extern char * _PREHASH_ChangedGrid;
374extern char * _PREHASH_AgentDropGroup; 346extern char * _PREHASH_AgentDropGroup;
375extern char * _PREHASH_Details; 347extern char * _PREHASH_Details;
@@ -402,7 +374,6 @@ extern char * _PREHASH_Timestamp;
402extern char * _PREHASH_GlobalPos; 374extern char * _PREHASH_GlobalPos;
403extern char * _PREHASH_GrabOffsetInitial; 375extern char * _PREHASH_GrabOffsetInitial;
404extern char * _PREHASH_IsTrial; 376extern char * _PREHASH_IsTrial;
405extern char * _PREHASH_FinalizeLogout;
406extern char * _PREHASH_ObjectDuplicateOnRay; 377extern char * _PREHASH_ObjectDuplicateOnRay;
407extern char * _PREHASH_GroupMembershipCount; 378extern char * _PREHASH_GroupMembershipCount;
408extern char * _PREHASH_MethodData; 379extern char * _PREHASH_MethodData;
@@ -438,32 +409,26 @@ extern char * _PREHASH_TaskData;
438extern char * _PREHASH_SimWideMaxPrims; 409extern char * _PREHASH_SimWideMaxPrims;
439extern char * _PREHASH_TotalPrims; 410extern char * _PREHASH_TotalPrims;
440extern char * _PREHASH_ProfileBegin; 411extern char * _PREHASH_ProfileBegin;
441extern char * _PREHASH_MoneyDetailsRequest;
442extern char * _PREHASH_Request; 412extern char * _PREHASH_Request;
443extern char * _PREHASH_GroupAccountDetailsRequest; 413extern char * _PREHASH_GroupAccountDetailsRequest;
444extern char * _PREHASH_GroupActiveProposalsRequest; 414extern char * _PREHASH_GroupActiveProposalsRequest;
445extern char * _PREHASH_StringValue; 415extern char * _PREHASH_StringValue;
446extern char * _PREHASH_ClosestSimulator;
447extern char * _PREHASH_Version; 416extern char * _PREHASH_Version;
448extern char * _PREHASH_OtherCount; 417extern char * _PREHASH_OtherCount;
449extern char * _PREHASH_MemberCount; 418extern char * _PREHASH_MemberCount;
450extern char * _PREHASH_ChatData; 419extern char * _PREHASH_ChatData;
451extern char * _PREHASH_IsGroupOwned; 420extern char * _PREHASH_IsGroupOwned;
452extern char * _PREHASH_EnergyEfficiency; 421extern char * _PREHASH_EnergyEfficiency;
453extern char * _PREHASH_MaxPlace;
454extern char * _PREHASH_PickInfoUpdate; 422extern char * _PREHASH_PickInfoUpdate;
455extern char * _PREHASH_PickDelete; 423extern char * _PREHASH_PickDelete;
456extern char * _PREHASH_ScriptReset; 424extern char * _PREHASH_ScriptReset;
457extern char * _PREHASH_Requester; 425extern char * _PREHASH_Requester;
458extern char * _PREHASH_ForSale; 426extern char * _PREHASH_ForSale;
459extern char * _PREHASH_NearestLandingRegionReply; 427extern char * _PREHASH_NearestLandingRegionReply;
460extern char * _PREHASH_RecordAgentPresence;
461extern char * _PREHASH_EraseAgentPresence;
462extern char * _PREHASH_ParcelID; 428extern char * _PREHASH_ParcelID;
463extern char * _PREHASH_Godlike; 429extern char * _PREHASH_Godlike;
464extern char * _PREHASH_TotalDebits; 430extern char * _PREHASH_TotalDebits;
465extern char * _PREHASH_Direction; 431extern char * _PREHASH_Direction;
466extern char * _PREHASH_Appearance;
467extern char * _PREHASH_HealthData; 432extern char * _PREHASH_HealthData;
468extern char * _PREHASH_LeftAxis; 433extern char * _PREHASH_LeftAxis;
469extern char * _PREHASH_LocationBlock; 434extern char * _PREHASH_LocationBlock;
@@ -471,41 +436,31 @@ extern char * _PREHASH_ObjectImage;
471extern char * _PREHASH_TerrainStartHeight00; 436extern char * _PREHASH_TerrainStartHeight00;
472extern char * _PREHASH_TerrainStartHeight01; 437extern char * _PREHASH_TerrainStartHeight01;
473extern char * _PREHASH_TerrainStartHeight10; 438extern char * _PREHASH_TerrainStartHeight10;
474extern char * _PREHASH_ObjectHinge;
475extern char * _PREHASH_TerrainStartHeight11; 439extern char * _PREHASH_TerrainStartHeight11;
476extern char * _PREHASH_MetersPerGrid;
477extern char * _PREHASH_WaterHeight; 440extern char * _PREHASH_WaterHeight;
478extern char * _PREHASH_FetchInventoryReply; 441extern char * _PREHASH_FetchInventoryReply;
479extern char * _PREHASH_MoneySummaryReply;
480extern char * _PREHASH_GroupAccountSummaryReply; 442extern char * _PREHASH_GroupAccountSummaryReply;
481extern char * _PREHASH_AttachedSound; 443extern char * _PREHASH_AttachedSound;
482extern char * _PREHASH_ParamInUse; 444extern char * _PREHASH_ParamInUse;
483extern char * _PREHASH_GodKickUser; 445extern char * _PREHASH_GodKickUser;
484extern char * _PREHASH_PickName; 446extern char * _PREHASH_PickName;
485extern char * _PREHASH_TaskName; 447extern char * _PREHASH_TaskName;
486extern char * _PREHASH_SubType;
487extern char * _PREHASH_ObjectCount; 448extern char * _PREHASH_ObjectCount;
488extern char * _PREHASH_RegionPresenceRequestByHandle; 449extern char * _PREHASH_RegionPresenceRequestByHandle;
489extern char * _PREHASH_RezSingleAttachmentFromInv; 450extern char * _PREHASH_RezSingleAttachmentFromInv;
490extern char * _PREHASH_ChildAgentUpdate; 451extern char * _PREHASH_ChildAgentUpdate;
491extern char * _PREHASH_ToID;
492extern char * _PREHASH_ViewerPort;
493extern char * _PREHASH_IsOwnerGroup; 452extern char * _PREHASH_IsOwnerGroup;
494extern char * _PREHASH_AgentHeightWidth; 453extern char * _PREHASH_AgentHeightWidth;
495extern char * _PREHASH_VerticalAngle; 454extern char * _PREHASH_VerticalAngle;
496extern char * _PREHASH_WearableType; 455extern char * _PREHASH_WearableType;
497extern char * _PREHASH_AggregatePermNextOwner; 456extern char * _PREHASH_AggregatePermNextOwner;
498extern char * _PREHASH_ShowInList; 457extern char * _PREHASH_ShowInList;
499extern char * _PREHASH_PositionSuggestion;
500extern char * _PREHASH_UpdateParcel; 458extern char * _PREHASH_UpdateParcel;
501extern char * _PREHASH_ClearAgentSessions;
502extern char * _PREHASH_SetAlwaysRun; 459extern char * _PREHASH_SetAlwaysRun;
503extern char * _PREHASH_NVPair; 460extern char * _PREHASH_NVPair;
504extern char * _PREHASH_SearchType; 461extern char * _PREHASH_SearchType;
505extern char * _PREHASH_ObjectSpinStart; 462extern char * _PREHASH_ObjectSpinStart;
506extern char * _PREHASH_UseEstateSun; 463extern char * _PREHASH_UseEstateSun;
507extern char * _PREHASH_LogoutBlock;
508extern char * _PREHASH_RelayLogControl;
509extern char * _PREHASH_RegionID; 464extern char * _PREHASH_RegionID;
510extern char * _PREHASH_AbuseRegionID; 465extern char * _PREHASH_AbuseRegionID;
511extern char * _PREHASH_Creator; 466extern char * _PREHASH_Creator;
@@ -514,14 +469,12 @@ extern char * _PREHASH_DirEventsReply;
514extern char * _PREHASH_EventInfoReply; 469extern char * _PREHASH_EventInfoReply;
515extern char * _PREHASH_UserInfoReply; 470extern char * _PREHASH_UserInfoReply;
516extern char * _PREHASH_PathRadiusOffset; 471extern char * _PREHASH_PathRadiusOffset;
517extern char * _PREHASH_SessionInfo;
518extern char * _PREHASH_TextureData; 472extern char * _PREHASH_TextureData;
519extern char * _PREHASH_ChatPass; 473extern char * _PREHASH_ChatPass;
520extern char * _PREHASH_TargetID; 474extern char * _PREHASH_TargetID;
521extern char * _PREHASH_DefaultPayPrice; 475extern char * _PREHASH_DefaultPayPrice;
522extern char * _PREHASH_UserLocation; 476extern char * _PREHASH_UserLocation;
523extern char * _PREHASH_MaxPrims; 477extern char * _PREHASH_MaxPrims;
524extern char * _PREHASH_RegionIP;
525extern char * _PREHASH_LandmarkID; 478extern char * _PREHASH_LandmarkID;
526extern char * _PREHASH_InitiateDownload; 479extern char * _PREHASH_InitiateDownload;
527extern char * _PREHASH_Name; 480extern char * _PREHASH_Name;
@@ -529,18 +482,13 @@ extern char * _PREHASH_OtherCleanTime;
529extern char * _PREHASH_ParcelSetOtherCleanTime; 482extern char * _PREHASH_ParcelSetOtherCleanTime;
530extern char * _PREHASH_TeleportPriceExponent; 483extern char * _PREHASH_TeleportPriceExponent;
531extern char * _PREHASH_Gain; 484extern char * _PREHASH_Gain;
532extern char * _PREHASH_VelX;
533extern char * _PREHASH_PacketAck; 485extern char * _PREHASH_PacketAck;
534extern char * _PREHASH_PathSkew; 486extern char * _PREHASH_PathSkew;
535extern char * _PREHASH_Negative;
536extern char * _PREHASH_VelY;
537extern char * _PREHASH_SimulatorShutdownRequest; 487extern char * _PREHASH_SimulatorShutdownRequest;
538extern char * _PREHASH_NearestLandingRegionRequest; 488extern char * _PREHASH_NearestLandingRegionRequest;
539extern char * _PREHASH_VelZ;
540extern char * _PREHASH_OtherID; 489extern char * _PREHASH_OtherID;
541extern char * _PREHASH_MemberID; 490extern char * _PREHASH_MemberID;
542extern char * _PREHASH_MapLayerRequest; 491extern char * _PREHASH_MapLayerRequest;
543extern char * _PREHASH_PatchVersion;
544extern char * _PREHASH_ObjectScale; 492extern char * _PREHASH_ObjectScale;
545extern char * _PREHASH_TargetIP; 493extern char * _PREHASH_TargetIP;
546extern char * _PREHASH_Redo; 494extern char * _PREHASH_Redo;
@@ -583,27 +531,20 @@ extern char * _PREHASH_Perp;
583extern char * _PREHASH_Code; 531extern char * _PREHASH_Code;
584extern char * _PREHASH_InvType; 532extern char * _PREHASH_InvType;
585extern char * _PREHASH_AgentFOV; 533extern char * _PREHASH_AgentFOV;
586extern char * _PREHASH_BulkMoneyTransfer;
587extern char * _PREHASH_Audible; 534extern char * _PREHASH_Audible;
588extern char * _PREHASH_AuctionData; 535extern char * _PREHASH_AuctionData;
589extern char * _PREHASH_IDBlock; 536extern char * _PREHASH_IDBlock;
590extern char * _PREHASH_ReputationData;
591extern char * _PREHASH_West; 537extern char * _PREHASH_West;
592extern char * _PREHASH_Undo; 538extern char * _PREHASH_Undo;
593extern char * _PREHASH_TotalNumItems; 539extern char * _PREHASH_TotalNumItems;
594extern char * _PREHASH_Info; 540extern char * _PREHASH_Info;
595extern char * _PREHASH_Area; 541extern char * _PREHASH_Area;
596extern char * _PREHASH_Behavior;
597extern char * _PREHASH_SimCrashed; 542extern char * _PREHASH_SimCrashed;
598extern char * _PREHASH_Text; 543extern char * _PREHASH_Text;
599extern char * _PREHASH_AgentToNewRegion;
600extern char * _PREHASH_PriceGroupCreate; 544extern char * _PREHASH_PriceGroupCreate;
601extern char * _PREHASH_ObjectShape; 545extern char * _PREHASH_ObjectShape;
602extern char * _PREHASH_GroupRoleDataReply; 546extern char * _PREHASH_GroupRoleDataReply;
603extern char * _PREHASH_PosX;
604extern char * _PREHASH_PosY;
605extern char * _PREHASH_MuteCRC; 547extern char * _PREHASH_MuteCRC;
606extern char * _PREHASH_PosZ;
607extern char * _PREHASH_Size; 548extern char * _PREHASH_Size;
608extern char * _PREHASH_FromAddress; 549extern char * _PREHASH_FromAddress;
609extern char * _PREHASH_Body; 550extern char * _PREHASH_Body;
@@ -621,16 +562,14 @@ extern char * _PREHASH_Stat;
621extern char * _PREHASH_SoundID; 562extern char * _PREHASH_SoundID;
622extern char * _PREHASH_Item; 563extern char * _PREHASH_Item;
623extern char * _PREHASH_User; 564extern char * _PREHASH_User;
624extern char * _PREHASH_RemoteInfos;
625extern char * _PREHASH_Prey; 565extern char * _PREHASH_Prey;
626extern char * _PREHASH_UsecSinceStart;
627extern char * _PREHASH_RayStart; 566extern char * _PREHASH_RayStart;
567extern char * _PREHASH_UsecSinceStart;
628extern char * _PREHASH_ParcelData; 568extern char * _PREHASH_ParcelData;
629extern char * _PREHASH_CameraUpAxis; 569extern char * _PREHASH_CameraUpAxis;
630extern char * _PREHASH_ScriptDialog; 570extern char * _PREHASH_ScriptDialog;
631extern char * _PREHASH_MasterParcelData; 571extern char * _PREHASH_MasterParcelData;
632extern char * _PREHASH_Invalid; 572extern char * _PREHASH_Invalid;
633extern char * _PREHASH_MinPlace;
634extern char * _PREHASH_ProfileCurve; 573extern char * _PREHASH_ProfileCurve;
635extern char * _PREHASH_ParcelAccessListUpdate; 574extern char * _PREHASH_ParcelAccessListUpdate;
636extern char * _PREHASH_MuteListUpdate; 575extern char * _PREHASH_MuteListUpdate;
@@ -649,14 +588,12 @@ extern char * _PREHASH_DeRezObject;
649extern char * _PREHASH_IsTemporary; 588extern char * _PREHASH_IsTemporary;
650extern char * _PREHASH_InsigniaID; 589extern char * _PREHASH_InsigniaID;
651extern char * _PREHASH_CheckFlags; 590extern char * _PREHASH_CheckFlags;
652extern char * _PREHASH_TransferPriority;
653extern char * _PREHASH_EventID; 591extern char * _PREHASH_EventID;
654extern char * _PREHASH_Selected; 592extern char * _PREHASH_Selected;
655extern char * _PREHASH_FromAgentId; 593extern char * _PREHASH_FromAgentId;
656extern char * _PREHASH_Type; 594extern char * _PREHASH_Type;
657extern char * _PREHASH_ChatType; 595extern char * _PREHASH_ChatType;
658extern char * _PREHASH_ReportData; 596extern char * _PREHASH_ReportData;
659extern char * _PREHASH_LeaderBoardData;
660extern char * _PREHASH_RequestBlock; 597extern char * _PREHASH_RequestBlock;
661extern char * _PREHASH_GrantData; 598extern char * _PREHASH_GrantData;
662extern char * _PREHASH_DetachAttachmentIntoInv; 599extern char * _PREHASH_DetachAttachmentIntoInv;
@@ -672,12 +609,9 @@ extern char * _PREHASH_OnlineNotification;
672extern char * _PREHASH_OfflineNotification; 609extern char * _PREHASH_OfflineNotification;
673extern char * _PREHASH_SendPostcard; 610extern char * _PREHASH_SendPostcard;
674extern char * _PREHASH_RequestFlags; 611extern char * _PREHASH_RequestFlags;
675extern char * _PREHASH_MoneyHistoryRequest;
676extern char * _PREHASH_MoneySummaryRequest;
677extern char * _PREHASH_GroupAccountSummaryRequest; 612extern char * _PREHASH_GroupAccountSummaryRequest;
678extern char * _PREHASH_GroupVoteHistoryRequest; 613extern char * _PREHASH_GroupVoteHistoryRequest;
679extern char * _PREHASH_ParamValue; 614extern char * _PREHASH_ParamValue;
680extern char * _PREHASH_Checksum;
681extern char * _PREHASH_MaxAgents; 615extern char * _PREHASH_MaxAgents;
682extern char * _PREHASH_CreateNewOutfitAttachments; 616extern char * _PREHASH_CreateNewOutfitAttachments;
683extern char * _PREHASH_RegionHandle; 617extern char * _PREHASH_RegionHandle;
@@ -687,12 +621,10 @@ extern char * _PREHASH_AvatarInterestsUpdate;
687extern char * _PREHASH_GroupNoticeID; 621extern char * _PREHASH_GroupNoticeID;
688extern char * _PREHASH_ParcelName; 622extern char * _PREHASH_ParcelName;
689extern char * _PREHASH_PriceObjectRent; 623extern char * _PREHASH_PriceObjectRent;
690extern char * _PREHASH_ConnectAgentToUserserver;
691extern char * _PREHASH_ConnectToUserserver;
692extern char * _PREHASH_OfferCallingCard; 624extern char * _PREHASH_OfferCallingCard;
693extern char * _PREHASH_AgentAccess;
694extern char * _PREHASH_AcceptCallingCard; 625extern char * _PREHASH_AcceptCallingCard;
695extern char * _PREHASH_DeclineCallingCard; 626extern char * _PREHASH_DeclineCallingCard;
627extern char * _PREHASH_AgentAccess;
696extern char * _PREHASH_DataHomeLocationReply; 628extern char * _PREHASH_DataHomeLocationReply;
697extern char * _PREHASH_EventLocationReply; 629extern char * _PREHASH_EventLocationReply;
698extern char * _PREHASH_TerseDateID; 630extern char * _PREHASH_TerseDateID;
@@ -710,8 +642,8 @@ extern char * _PREHASH_Invoice;
710extern char * _PREHASH_IntervalDays; 642extern char * _PREHASH_IntervalDays;
711extern char * _PREHASH_PathScaleX; 643extern char * _PREHASH_PathScaleX;
712extern char * _PREHASH_FromTaskID; 644extern char * _PREHASH_FromTaskID;
713extern char * _PREHASH_TimeInfo;
714extern char * _PREHASH_PathScaleY; 645extern char * _PREHASH_PathScaleY;
646extern char * _PREHASH_TimeInfo;
715extern char * _PREHASH_PublicCount; 647extern char * _PREHASH_PublicCount;
716extern char * _PREHASH_ParcelJoin; 648extern char * _PREHASH_ParcelJoin;
717extern char * _PREHASH_GroupRolesCount; 649extern char * _PREHASH_GroupRolesCount;
@@ -736,7 +668,6 @@ extern char * _PREHASH_NearestLandingRegionUpdated;
736extern char * _PREHASH_PassToAgent; 668extern char * _PREHASH_PassToAgent;
737extern char * _PREHASH_PreyAgent; 669extern char * _PREHASH_PreyAgent;
738extern char * _PREHASH_SimStats; 670extern char * _PREHASH_SimStats;
739extern char * _PREHASH_Options;
740extern char * _PREHASH_LogoutReply; 671extern char * _PREHASH_LogoutReply;
741extern char * _PREHASH_FeatureDisabled; 672extern char * _PREHASH_FeatureDisabled;
742extern char * _PREHASH_ObjectLocalID; 673extern char * _PREHASH_ObjectLocalID;
@@ -747,10 +678,8 @@ extern char * _PREHASH_Destination;
747extern char * _PREHASH_MasterID; 678extern char * _PREHASH_MasterID;
748extern char * _PREHASH_TransferData; 679extern char * _PREHASH_TransferData;
749extern char * _PREHASH_WantToMask; 680extern char * _PREHASH_WantToMask;
750extern char * _PREHASH_AvatarData;
751extern char * _PREHASH_ParcelSelectObjects; 681extern char * _PREHASH_ParcelSelectObjects;
752extern char * _PREHASH_ExtraParams; 682extern char * _PREHASH_ExtraParams;
753extern char * _PREHASH_LogLogin;
754extern char * _PREHASH_CreatorID; 683extern char * _PREHASH_CreatorID;
755extern char * _PREHASH_Summary; 684extern char * _PREHASH_Summary;
756extern char * _PREHASH_BuyObjectInventory; 685extern char * _PREHASH_BuyObjectInventory;
@@ -791,8 +720,8 @@ extern char * _PREHASH_ButtonLabel;
791extern char * _PREHASH_GranterID; 720extern char * _PREHASH_GranterID;
792extern char * _PREHASH_WantToText; 721extern char * _PREHASH_WantToText;
793extern char * _PREHASH_ReportType; 722extern char * _PREHASH_ReportType;
794extern char * _PREHASH_DataBlock;
795extern char * _PREHASH_SimulatorReady; 723extern char * _PREHASH_SimulatorReady;
724extern char * _PREHASH_DataBlock;
796extern char * _PREHASH_AnimationSourceList; 725extern char * _PREHASH_AnimationSourceList;
797extern char * _PREHASH_SubscribeLoad; 726extern char * _PREHASH_SubscribeLoad;
798extern char * _PREHASH_UnsubscribeLoad; 727extern char * _PREHASH_UnsubscribeLoad;
@@ -819,9 +748,8 @@ extern char * _PREHASH_Header;
819extern char * _PREHASH_GestureFlags; 748extern char * _PREHASH_GestureFlags;
820extern char * _PREHASH_XferID; 749extern char * _PREHASH_XferID;
821extern char * _PREHASH_StatValue; 750extern char * _PREHASH_StatValue;
822extern char * _PREHASH_PickID;
823extern char * _PREHASH_TaskID; 751extern char * _PREHASH_TaskID;
824extern char * _PREHASH_GridsPerEdge; 752extern char * _PREHASH_PickID;
825extern char * _PREHASH_RayEnd; 753extern char * _PREHASH_RayEnd;
826extern char * _PREHASH_Throttles; 754extern char * _PREHASH_Throttles;
827extern char * _PREHASH_RebakeAvatarTextures; 755extern char * _PREHASH_RebakeAvatarTextures;
@@ -834,30 +762,24 @@ extern char * _PREHASH_Access;
834extern char * _PREHASH_TitleRoleID; 762extern char * _PREHASH_TitleRoleID;
835extern char * _PREHASH_SquareMetersCredit; 763extern char * _PREHASH_SquareMetersCredit;
836extern char * _PREHASH_Filename; 764extern char * _PREHASH_Filename;
837extern char * _PREHASH_SecuredTemplateChecksumRequest;
838extern char * _PREHASH_TemplateChecksumRequest;
839extern char * _PREHASH_AgentPresenceRequest;
840extern char * _PREHASH_ClassifiedInfoRequest; 765extern char * _PREHASH_ClassifiedInfoRequest;
841extern char * _PREHASH_ParcelInfoRequest; 766extern char * _PREHASH_ParcelInfoRequest;
842extern char * _PREHASH_ParcelObjectOwnersRequest; 767extern char * _PREHASH_ParcelObjectOwnersRequest;
843extern char * _PREHASH_TeleportLandmarkRequest; 768extern char * _PREHASH_TeleportLandmarkRequest;
844extern char * _PREHASH_EventInfoRequest; 769extern char * _PREHASH_EventInfoRequest;
845extern char * _PREHASH_ChatFromSimulator;
846extern char * _PREHASH_PickInfoRequest;
847extern char * _PREHASH_MoneyBalanceRequest; 770extern char * _PREHASH_MoneyBalanceRequest;
848extern char * _PREHASH_GroupMembersRequest; 771extern char * _PREHASH_GroupMembersRequest;
849extern char * _PREHASH_GroupRoleMembersRequest; 772extern char * _PREHASH_GroupRoleMembersRequest;
773extern char * _PREHASH_ChatFromSimulator;
850extern char * _PREHASH_OldFolderID; 774extern char * _PREHASH_OldFolderID;
851extern char * _PREHASH_UserInfoRequest; 775extern char * _PREHASH_UserInfoRequest;
852extern char * _PREHASH_TextureID; 776extern char * _PREHASH_TextureID;
853extern char * _PREHASH_ProfileURL; 777extern char * _PREHASH_ProfileURL;
854extern char * _PREHASH_Handle; 778extern char * _PREHASH_Handle;
855extern char * _PREHASH_StartParcelRenameAck;
856extern char * _PREHASH_ButtonIndex; 779extern char * _PREHASH_ButtonIndex;
857extern char * _PREHASH_GetScriptRunning; 780extern char * _PREHASH_GetScriptRunning;
858extern char * _PREHASH_SetScriptRunning; 781extern char * _PREHASH_SetScriptRunning;
859extern char * _PREHASH_Health; 782extern char * _PREHASH_Health;
860extern char * _PREHASH_FileID;
861extern char * _PREHASH_CircuitInfo; 783extern char * _PREHASH_CircuitInfo;
862extern char * _PREHASH_ObjectBuy; 784extern char * _PREHASH_ObjectBuy;
863extern char * _PREHASH_ProfileEnd; 785extern char * _PREHASH_ProfileEnd;
@@ -882,7 +804,6 @@ extern char * _PREHASH_PingID;
882extern char * _PREHASH_Change; 804extern char * _PREHASH_Change;
883extern char * _PREHASH_Height; 805extern char * _PREHASH_Height;
884extern char * _PREHASH_Region; 806extern char * _PREHASH_Region;
885extern char * _PREHASH_MoneyHistoryReply;
886extern char * _PREHASH_TelehubInfo; 807extern char * _PREHASH_TelehubInfo;
887extern char * _PREHASH_StateSave; 808extern char * _PREHASH_StateSave;
888extern char * _PREHASH_RoleData; 809extern char * _PREHASH_RoleData;
@@ -893,11 +814,10 @@ extern char * _PREHASH_ParcelGodMarkAsContent;
893extern char * _PREHASH_UsePhysics; 814extern char * _PREHASH_UsePhysics;
894extern char * _PREHASH_RegionDenyTransacted; 815extern char * _PREHASH_RegionDenyTransacted;
895extern char * _PREHASH_JointType; 816extern char * _PREHASH_JointType;
896extern char * _PREHASH_TaxEstimate;
897extern char * _PREHASH_ObjectTaxEstimate; 817extern char * _PREHASH_ObjectTaxEstimate;
898extern char * _PREHASH_LightTaxEstimate; 818extern char * _PREHASH_LightTaxEstimate;
899extern char * _PREHASH_TeleportLandingStatusChanged;
900extern char * _PREHASH_LandTaxEstimate; 819extern char * _PREHASH_LandTaxEstimate;
820extern char * _PREHASH_TeleportLandingStatusChanged;
901extern char * _PREHASH_GroupTaxEstimate; 821extern char * _PREHASH_GroupTaxEstimate;
902extern char * _PREHASH_AvgViewerFPS; 822extern char * _PREHASH_AvgViewerFPS;
903extern char * _PREHASH_Buttons; 823extern char * _PREHASH_Buttons;
@@ -929,8 +849,6 @@ extern char * _PREHASH_WinnerID;
929extern char * _PREHASH_ChannelType; 849extern char * _PREHASH_ChannelType;
930extern char * _PREHASH_NonExemptMembers; 850extern char * _PREHASH_NonExemptMembers;
931extern char * _PREHASH_Agents; 851extern char * _PREHASH_Agents;
932extern char * _PREHASH_SimulatorStart;
933extern char * _PREHASH_Enable;
934extern char * _PREHASH_MemberData; 852extern char * _PREHASH_MemberData;
935extern char * _PREHASH_ToGroupID; 853extern char * _PREHASH_ToGroupID;
936extern char * _PREHASH_ImageNotInDatabase; 854extern char * _PREHASH_ImageNotInDatabase;
@@ -938,27 +856,21 @@ extern char * _PREHASH_StartDate;
938extern char * _PREHASH_AnimID; 856extern char * _PREHASH_AnimID;
939extern char * _PREHASH_Serial; 857extern char * _PREHASH_Serial;
940extern char * _PREHASH_AbuseRegionName; 858extern char * _PREHASH_AbuseRegionName;
941extern char * _PREHASH_ControlPort;
942extern char * _PREHASH_ModifyLand; 859extern char * _PREHASH_ModifyLand;
943extern char * _PREHASH_Digest; 860extern char * _PREHASH_Digest;
944extern char * _PREHASH_Victim; 861extern char * _PREHASH_Victim;
945extern char * _PREHASH_Script; 862extern char * _PREHASH_Script;
946extern char * _PREHASH_TemplateChecksumReply;
947extern char * _PREHASH_PickInfoReply; 863extern char * _PREHASH_PickInfoReply;
948extern char * _PREHASH_MoneyBalanceReply; 864extern char * _PREHASH_MoneyBalanceReply;
949extern char * _PREHASH_RoutedMoneyBalanceReply; 865extern char * _PREHASH_RoutedMoneyBalanceReply;
950extern char * _PREHASH_RoleID; 866extern char * _PREHASH_RoleID;
951extern char * _PREHASH_RegionInfo; 867extern char * _PREHASH_RegionInfo;
952extern char * _PREHASH_Sequence;
953extern char * _PREHASH_GodUpdateRegionInfo; 868extern char * _PREHASH_GodUpdateRegionInfo;
954extern char * _PREHASH_LocalX;
955extern char * _PREHASH_LocalY;
956extern char * _PREHASH_StartAnim; 869extern char * _PREHASH_StartAnim;
957extern char * _PREHASH_Location;
958extern char * _PREHASH_Action; 870extern char * _PREHASH_Action;
871extern char * _PREHASH_Location;
959extern char * _PREHASH_Rights; 872extern char * _PREHASH_Rights;
960extern char * _PREHASH_SearchDir; 873extern char * _PREHASH_SearchDir;
961extern char * _PREHASH_Active;
962extern char * _PREHASH_TransferRequest; 874extern char * _PREHASH_TransferRequest;
963extern char * _PREHASH_ScriptSensorRequest; 875extern char * _PREHASH_ScriptSensorRequest;
964extern char * _PREHASH_MoneyTransferRequest; 876extern char * _PREHASH_MoneyTransferRequest;
@@ -969,8 +881,6 @@ extern char * _PREHASH_Center;
969extern char * _PREHASH_SharedData; 881extern char * _PREHASH_SharedData;
970extern char * _PREHASH_PSBlock; 882extern char * _PREHASH_PSBlock;
971extern char * _PREHASH_UUIDNameBlock; 883extern char * _PREHASH_UUIDNameBlock;
972extern char * _PREHASH_Viewer;
973extern char * _PREHASH_GroupNoticeDelete;
974extern char * _PREHASH_GroupTitleUpdate; 884extern char * _PREHASH_GroupTitleUpdate;
975extern char * _PREHASH_Method; 885extern char * _PREHASH_Method;
976extern char * _PREHASH_TouchName; 886extern char * _PREHASH_TouchName;
@@ -982,11 +892,9 @@ extern char * _PREHASH_GodlikeMessage;
982extern char * _PREHASH_SystemMessage; 892extern char * _PREHASH_SystemMessage;
983extern char * _PREHASH_BodyRotation; 893extern char * _PREHASH_BodyRotation;
984extern char * _PREHASH_SearchRegions; 894extern char * _PREHASH_SearchRegions;
985extern char * _PREHASH_Ignore;
986extern char * _PREHASH_AnimationData; 895extern char * _PREHASH_AnimationData;
987extern char * _PREHASH_StatID; 896extern char * _PREHASH_StatID;
988extern char * _PREHASH_ItemID; 897extern char * _PREHASH_ItemID;
989extern char * _PREHASH_AvatarStatisticsReply;
990extern char * _PREHASH_ScriptDialogReply; 898extern char * _PREHASH_ScriptDialogReply;
991extern char * _PREHASH_RegionIDAndHandleReply; 899extern char * _PREHASH_RegionIDAndHandleReply;
992extern char * _PREHASH_CameraAtOffset; 900extern char * _PREHASH_CameraAtOffset;
@@ -1011,7 +919,6 @@ extern char * _PREHASH_OldItemID;
1011extern char * _PREHASH_RegionPort; 919extern char * _PREHASH_RegionPort;
1012extern char * _PREHASH_PriceEnergyUnit; 920extern char * _PREHASH_PriceEnergyUnit;
1013extern char * _PREHASH_Bitmap; 921extern char * _PREHASH_Bitmap;
1014extern char * _PREHASH_TrackAgentSession;
1015extern char * _PREHASH_CacheMissType; 922extern char * _PREHASH_CacheMissType;
1016extern char * _PREHASH_VFileID; 923extern char * _PREHASH_VFileID;
1017extern char * _PREHASH_GroupInsigniaID; 924extern char * _PREHASH_GroupInsigniaID;
@@ -1059,7 +966,6 @@ extern char * _PREHASH_MeanCollisionAlert;
1059extern char * _PREHASH_CanAcceptTasks; 966extern char * _PREHASH_CanAcceptTasks;
1060extern char * _PREHASH_ItemData; 967extern char * _PREHASH_ItemData;
1061extern char * _PREHASH_AnimationList; 968extern char * _PREHASH_AnimationList;
1062extern char * _PREHASH_PassObject;
1063extern char * _PREHASH_Reputation; 969extern char * _PREHASH_Reputation;
1064extern char * _PREHASH_IntValue; 970extern char * _PREHASH_IntValue;
1065extern char * _PREHASH_TargetType; 971extern char * _PREHASH_TargetType;
@@ -1082,10 +988,8 @@ extern char * _PREHASH_ParcelBuy;
1082extern char * _PREHASH_DirFindQueryBackend; 988extern char * _PREHASH_DirFindQueryBackend;
1083extern char * _PREHASH_DirPlacesQueryBackend; 989extern char * _PREHASH_DirPlacesQueryBackend;
1084extern char * _PREHASH_DirClassifiedQueryBackend; 990extern char * _PREHASH_DirClassifiedQueryBackend;
1085extern char * _PREHASH_DirPicksQueryBackend;
1086extern char * _PREHASH_DirLandQueryBackend; 991extern char * _PREHASH_DirLandQueryBackend;
1087extern char * _PREHASH_DirPopularQueryBackend; 992extern char * _PREHASH_DirPopularQueryBackend;
1088extern char * _PREHASH_LogoutDemand;
1089extern char * _PREHASH_HistoryData; 993extern char * _PREHASH_HistoryData;
1090extern char * _PREHASH_SnapshotID; 994extern char * _PREHASH_SnapshotID;
1091extern char * _PREHASH_Aspect; 995extern char * _PREHASH_Aspect;
@@ -1093,7 +997,6 @@ extern char * _PREHASH_ParamSize;
1093extern char * _PREHASH_VoteCast; 997extern char * _PREHASH_VoteCast;
1094extern char * _PREHASH_CastsShadows; 998extern char * _PREHASH_CastsShadows;
1095extern char * _PREHASH_EveryoneMask; 999extern char * _PREHASH_EveryoneMask;
1096extern char * _PREHASH_SetSunPhase;
1097extern char * _PREHASH_ObjectSpinUpdate; 1000extern char * _PREHASH_ObjectSpinUpdate;
1098extern char * _PREHASH_MaturePublish; 1001extern char * _PREHASH_MaturePublish;
1099extern char * _PREHASH_UseExistingAsset; 1002extern char * _PREHASH_UseExistingAsset;
@@ -1102,7 +1005,6 @@ extern char * _PREHASH_ParcelLocalID;
1102extern char * _PREHASH_TeleportCancel; 1005extern char * _PREHASH_TeleportCancel;
1103extern char * _PREHASH_UnixTime; 1006extern char * _PREHASH_UnixTime;
1104extern char * _PREHASH_QueryFlags; 1007extern char * _PREHASH_QueryFlags;
1105extern char * _PREHASH_LastExecFroze;
1106extern char * _PREHASH_AlwaysRun; 1008extern char * _PREHASH_AlwaysRun;
1107extern char * _PREHASH_Bottom; 1009extern char * _PREHASH_Bottom;
1108extern char * _PREHASH_ButtonData; 1010extern char * _PREHASH_ButtonData;
@@ -1121,7 +1023,6 @@ extern char * _PREHASH_NVPairs;
1121extern char * _PREHASH_GroupNoticesListRequest; 1023extern char * _PREHASH_GroupNoticesListRequest;
1122extern char * _PREHASH_ParcelAccessListRequest; 1024extern char * _PREHASH_ParcelAccessListRequest;
1123extern char * _PREHASH_MuteListRequest; 1025extern char * _PREHASH_MuteListRequest;
1124extern char * _PREHASH_StartPeriod;
1125extern char * _PREHASH_RpcChannelRequest; 1026extern char * _PREHASH_RpcChannelRequest;
1126extern char * _PREHASH_LandStatRequest; 1027extern char * _PREHASH_LandStatRequest;
1127extern char * _PREHASH_PlacesQuery; 1028extern char * _PREHASH_PlacesQuery;
@@ -1149,34 +1050,27 @@ extern char * _PREHASH_SnapSelection;
1149extern char * _PREHASH_SoundTrigger; 1050extern char * _PREHASH_SoundTrigger;
1150extern char * _PREHASH_TerrainRaiseLimit; 1051extern char * _PREHASH_TerrainRaiseLimit;
1151extern char * _PREHASH_Quorum; 1052extern char * _PREHASH_Quorum;
1152extern char * _PREHASH_TokenBlock;
1153extern char * _PREHASH_AgentBlock; 1053extern char * _PREHASH_AgentBlock;
1154extern char * _PREHASH_CommandBlock; 1054extern char * _PREHASH_CommandBlock;
1155extern char * _PREHASH_PricePublicObjectDecay; 1055extern char * _PREHASH_PricePublicObjectDecay;
1156extern char * _PREHASH_SpawnPointPos; 1056extern char * _PREHASH_SpawnPointPos;
1157extern char * _PREHASH_AttachedSoundCutoffRadius;
1158extern char * _PREHASH_VolumeDetail; 1057extern char * _PREHASH_VolumeDetail;
1159extern char * _PREHASH_FromAgentName; 1058extern char * _PREHASH_FromAgentName;
1160extern char * _PREHASH_Range; 1059extern char * _PREHASH_Range;
1161extern char * _PREHASH_DirectoryVisibility; 1060extern char * _PREHASH_DirectoryVisibility;
1162extern char * _PREHASH_PublicIP; 1061extern char * _PREHASH_PublicIP;
1163extern char * _PREHASH_TeleportFailed; 1062extern char * _PREHASH_TeleportFailed;
1164extern char * _PREHASH_OnlineStatusReply;
1165extern char * _PREHASH_RequestAvatarInfo;
1166extern char * _PREHASH_PreloadSound; 1063extern char * _PREHASH_PreloadSound;
1167extern char * _PREHASH_ScreenshotID; 1064extern char * _PREHASH_ScreenshotID;
1168extern char * _PREHASH_CovenantTimestamp; 1065extern char * _PREHASH_CovenantTimestamp;
1169extern char * _PREHASH_OldestUnacked; 1066extern char * _PREHASH_OldestUnacked;
1170extern char * _PREHASH_SimulatorIP; 1067extern char * _PREHASH_SimulatorIP;
1171extern char * _PREHASH_ObjectImport;
1172extern char * _PREHASH_Value; 1068extern char * _PREHASH_Value;
1173extern char * _PREHASH_JointAxisOrAnchor; 1069extern char * _PREHASH_JointAxisOrAnchor;
1174extern char * _PREHASH_Test0; 1070extern char * _PREHASH_Test0;
1175extern char * _PREHASH_Test1; 1071extern char * _PREHASH_Test1;
1176extern char * _PREHASH_Test2; 1072extern char * _PREHASH_Test2;
1177extern char * _PREHASH_SunPhase; 1073extern char * _PREHASH_SunPhase;
1178extern char * _PREHASH_Place;
1179extern char * _PREHASH_Phase;
1180extern char * _PREHASH_ParcelDivide; 1074extern char * _PREHASH_ParcelDivide;
1181extern char * _PREHASH_PriceObjectClaim; 1075extern char * _PREHASH_PriceObjectClaim;
1182extern char * _PREHASH_Field; 1076extern char * _PREHASH_Field;
@@ -1186,7 +1080,6 @@ extern char * _PREHASH_LiveHelpGroupReply;
1186extern char * _PREHASH_Score; 1080extern char * _PREHASH_Score;
1187extern char * _PREHASH_Image; 1081extern char * _PREHASH_Image;
1188extern char * _PREHASH_ObjectClickAction; 1082extern char * _PREHASH_ObjectClickAction;
1189extern char * _PREHASH_Delta;
1190extern char * _PREHASH_Parameter; 1083extern char * _PREHASH_Parameter;
1191extern char * _PREHASH_Flags; 1084extern char * _PREHASH_Flags;
1192extern char * _PREHASH_Plane; 1085extern char * _PREHASH_Plane;
@@ -1196,26 +1089,24 @@ extern char * _PREHASH_DirFindQuery;
1196extern char * _PREHASH_Textures; 1089extern char * _PREHASH_Textures;
1197extern char * _PREHASH_EventData; 1090extern char * _PREHASH_EventData;
1198extern char * _PREHASH_Final; 1091extern char * _PREHASH_Final;
1092extern char * _PREHASH_System;
1199extern char * _PREHASH_TelehubPos; 1093extern char * _PREHASH_TelehubPos;
1200extern char * _PREHASH_ReportAutosaveCrash; 1094extern char * _PREHASH_ReportAutosaveCrash;
1201extern char * _PREHASH_CreateTrustedCircuit; 1095extern char * _PREHASH_CreateTrustedCircuit;
1202extern char * _PREHASH_DenyTrustedCircuit; 1096extern char * _PREHASH_DenyTrustedCircuit;
1203extern char * _PREHASH_RequestTrustedCircuit; 1097extern char * _PREHASH_RequestTrustedCircuit;
1204extern char * _PREHASH_Codec; 1098extern char * _PREHASH_Codec;
1205extern char * _PREHASH_Level;
1206extern char * _PREHASH_Modal; 1099extern char * _PREHASH_Modal;
1207extern char * _PREHASH_ChildAgentUnknown; 1100extern char * _PREHASH_ChildAgentUnknown;
1208extern char * _PREHASH_LandingType; 1101extern char * _PREHASH_LandingType;
1209extern char * _PREHASH_ScriptRunningReply; 1102extern char * _PREHASH_ScriptRunningReply;
1210extern char * _PREHASH_MoneyDetailsReply;
1211extern char * _PREHASH_Reply; 1103extern char * _PREHASH_Reply;
1104extern char * _PREHASH_GroupAccountDetailsReply;
1212extern char * _PREHASH_TelehubRot; 1105extern char * _PREHASH_TelehubRot;
1213extern char * _PREHASH_RequestFriendship;
1214extern char * _PREHASH_AcceptFriendship; 1106extern char * _PREHASH_AcceptFriendship;
1215extern char * _PREHASH_GroupAccountDetailsReply; 1107extern char * _PREHASH_ItemType;
1216extern char * _PREHASH_DwellInfo; 1108extern char * _PREHASH_DwellInfo;
1217extern char * _PREHASH_AgentResume; 1109extern char * _PREHASH_AgentResume;
1218extern char * _PREHASH_ItemType;
1219extern char * _PREHASH_MailFilter; 1110extern char * _PREHASH_MailFilter;
1220extern char * _PREHASH_Disconnect; 1111extern char * _PREHASH_Disconnect;
1221extern char * _PREHASH_SimPosition; 1112extern char * _PREHASH_SimPosition;
@@ -1242,7 +1133,6 @@ extern char * _PREHASH_VoteType;
1242extern char * _PREHASH_CategoryID; 1133extern char * _PREHASH_CategoryID;
1243extern char * _PREHASH_Token; 1134extern char * _PREHASH_Token;
1244extern char * _PREHASH_AggregatePerms; 1135extern char * _PREHASH_AggregatePerms;
1245extern char * _PREHASH_StartParcelRemoveAck;
1246extern char * _PREHASH_ObjectSelect; 1136extern char * _PREHASH_ObjectSelect;
1247extern char * _PREHASH_ForceObjectSelect; 1137extern char * _PREHASH_ForceObjectSelect;
1248extern char * _PREHASH_Price; 1138extern char * _PREHASH_Price;
@@ -1271,7 +1161,6 @@ extern char * _PREHASH_Notes;
1271extern char * _PREHASH_AvatarID; 1161extern char * _PREHASH_AvatarID;
1272extern char * _PREHASH_FounderID; 1162extern char * _PREHASH_FounderID;
1273extern char * _PREHASH_EndPointID; 1163extern char * _PREHASH_EndPointID;
1274extern char * _PREHASH_StipendEstimate;
1275extern char * _PREHASH_LocationLookAt; 1164extern char * _PREHASH_LocationLookAt;
1276extern char * _PREHASH_Sound; 1165extern char * _PREHASH_Sound;
1277extern char * _PREHASH_Cover; 1166extern char * _PREHASH_Cover;
@@ -1291,12 +1180,12 @@ extern char * _PREHASH_ProfileHollow;
1291extern char * _PREHASH_GroupRoleChanges; 1180extern char * _PREHASH_GroupRoleChanges;
1292extern char * _PREHASH_Count; 1181extern char * _PREHASH_Count;
1293extern char * _PREHASH_South; 1182extern char * _PREHASH_South;
1294extern char * _PREHASH_Entry;
1295extern char * _PREHASH_ObjectUpdateCompressed; 1183extern char * _PREHASH_ObjectUpdateCompressed;
1296extern char * _PREHASH_MuteFlags; 1184extern char * _PREHASH_MuteFlags;
1297extern char * _PREHASH_Group; 1185extern char * _PREHASH_Group;
1298extern char * _PREHASH_AgentPause; 1186extern char * _PREHASH_AgentPause;
1299extern char * _PREHASH_LanguagesText; 1187extern char * _PREHASH_LanguagesText;
1188extern char * _PREHASH_Error;
1300extern char * _PREHASH_InternalScriptMail; 1189extern char * _PREHASH_InternalScriptMail;
1301extern char * _PREHASH_FindAgent; 1190extern char * _PREHASH_FindAgent;
1302extern char * _PREHASH_AgentData; 1191extern char * _PREHASH_AgentData;
@@ -1305,7 +1194,6 @@ extern char * _PREHASH_AssetBlock;
1305extern char * _PREHASH_AcceptNotices; 1194extern char * _PREHASH_AcceptNotices;
1306extern char * _PREHASH_SetGroupAcceptNotices; 1195extern char * _PREHASH_SetGroupAcceptNotices;
1307extern char * _PREHASH_CloseCircuit; 1196extern char * _PREHASH_CloseCircuit;
1308extern char * _PREHASH_LogControl;
1309extern char * _PREHASH_TeleportFinish; 1197extern char * _PREHASH_TeleportFinish;
1310extern char * _PREHASH_PathRevolutions; 1198extern char * _PREHASH_PathRevolutions;
1311extern char * _PREHASH_ClassifiedInfoReply; 1199extern char * _PREHASH_ClassifiedInfoReply;
@@ -1322,7 +1210,6 @@ extern char * _PREHASH_DataHomeLocationRequest;
1322extern char * _PREHASH_EventNotificationAddRequest; 1210extern char * _PREHASH_EventNotificationAddRequest;
1323extern char * _PREHASH_ParcelDwellRequest; 1211extern char * _PREHASH_ParcelDwellRequest;
1324extern char * _PREHASH_EventLocationRequest; 1212extern char * _PREHASH_EventLocationRequest;
1325extern char * _PREHASH_EndPeriod;
1326extern char * _PREHASH_SetStartLocationRequest; 1213extern char * _PREHASH_SetStartLocationRequest;
1327extern char * _PREHASH_QueryStart; 1214extern char * _PREHASH_QueryStart;
1328extern char * _PREHASH_EjectData; 1215extern char * _PREHASH_EjectData;
@@ -1335,7 +1222,6 @@ extern char * _PREHASH_ParcelRelease;
1335extern char * _PREHASH_VFileType; 1222extern char * _PREHASH_VFileType;
1336extern char * _PREHASH_EjectGroupMemberReply; 1223extern char * _PREHASH_EjectGroupMemberReply;
1337extern char * _PREHASH_ImageData; 1224extern char * _PREHASH_ImageData;
1338extern char * _PREHASH_SpaceServerSimulatorTimeMessage;
1339extern char * _PREHASH_SimulatorViewerTimeMessage; 1225extern char * _PREHASH_SimulatorViewerTimeMessage;
1340extern char * _PREHASH_Rotation; 1226extern char * _PREHASH_Rotation;
1341extern char * _PREHASH_Selection; 1227extern char * _PREHASH_Selection;
@@ -1343,7 +1229,6 @@ extern char * _PREHASH_TransactionData;
1343extern char * _PREHASH_OperationData; 1229extern char * _PREHASH_OperationData;
1344extern char * _PREHASH_ExpirationDate; 1230extern char * _PREHASH_ExpirationDate;
1345extern char * _PREHASH_ParcelDeedToGroup; 1231extern char * _PREHASH_ParcelDeedToGroup;
1346extern char * _PREHASH_DirPicksReply;
1347extern char * _PREHASH_AvatarPicksReply; 1232extern char * _PREHASH_AvatarPicksReply;
1348extern char * _PREHASH_GroupTitlesReply; 1233extern char * _PREHASH_GroupTitlesReply;
1349extern char * _PREHASH_AgentInfo; 1234extern char * _PREHASH_AgentInfo;
@@ -1354,8 +1239,8 @@ extern char * _PREHASH_PassPrice;
1354extern char * _PREHASH_SourceID; 1239extern char * _PREHASH_SourceID;
1355extern char * _PREHASH_ChangeUserRights; 1240extern char * _PREHASH_ChangeUserRights;
1356extern char * _PREHASH_TeleportFlags; 1241extern char * _PREHASH_TeleportFlags;
1357extern char * _PREHASH_AssetData;
1358extern char * _PREHASH_SlaveParcelData; 1242extern char * _PREHASH_SlaveParcelData;
1243extern char * _PREHASH_AssetData;
1359extern char * _PREHASH_MultipleObjectUpdate; 1244extern char * _PREHASH_MultipleObjectUpdate;
1360extern char * _PREHASH_ObjectUpdate; 1245extern char * _PREHASH_ObjectUpdate;
1361extern char * _PREHASH_ImprovedTerseObjectUpdate; 1246extern char * _PREHASH_ImprovedTerseObjectUpdate;
@@ -1371,7 +1256,6 @@ extern char * _PREHASH_TaskLocalID;
1371extern char * _PREHASH_ClaimDate; 1256extern char * _PREHASH_ClaimDate;
1372extern char * _PREHASH_MergeParcel; 1257extern char * _PREHASH_MergeParcel;
1373extern char * _PREHASH_Priority; 1258extern char * _PREHASH_Priority;
1374extern char * _PREHASH_Building;
1375extern char * _PREHASH_QueryText; 1259extern char * _PREHASH_QueryText;
1376extern char * _PREHASH_GroupNoticeAdd; 1260extern char * _PREHASH_GroupNoticeAdd;
1377extern char * _PREHASH_ReturnType; 1261extern char * _PREHASH_ReturnType;
@@ -1381,7 +1265,6 @@ extern char * _PREHASH_HeaderData;
1381extern char * _PREHASH_RequestMultipleObjects; 1265extern char * _PREHASH_RequestMultipleObjects;
1382extern char * _PREHASH_RetrieveInstantMessages; 1266extern char * _PREHASH_RetrieveInstantMessages;
1383extern char * _PREHASH_OpenCircuit; 1267extern char * _PREHASH_OpenCircuit;
1384extern char * _PREHASH_SecureSessionID;
1385extern char * _PREHASH_CrossedRegion; 1268extern char * _PREHASH_CrossedRegion;
1386extern char * _PREHASH_DirGroupsReply; 1269extern char * _PREHASH_DirGroupsReply;
1387extern char * _PREHASH_AvatarGroupsReply; 1270extern char * _PREHASH_AvatarGroupsReply;
@@ -1392,18 +1275,14 @@ extern char * _PREHASH_Position;
1392extern char * _PREHASH_ParentEstate; 1275extern char * _PREHASH_ParentEstate;
1393extern char * _PREHASH_EstateName; 1276extern char * _PREHASH_EstateName;
1394extern char * _PREHASH_MuteName; 1277extern char * _PREHASH_MuteName;
1395extern char * _PREHASH_StartParcelRename;
1396extern char * _PREHASH_BulkParcelRename;
1397extern char * _PREHASH_ParcelRename; 1278extern char * _PREHASH_ParcelRename;
1398extern char * _PREHASH_ViewerFilename; 1279extern char * _PREHASH_ViewerFilename;
1399extern char * _PREHASH_Positive;
1400extern char * _PREHASH_UserReportInternal; 1280extern char * _PREHASH_UserReportInternal;
1401extern char * _PREHASH_AvatarPropertiesRequest; 1281extern char * _PREHASH_AvatarPropertiesRequest;
1402extern char * _PREHASH_ParcelPropertiesRequest; 1282extern char * _PREHASH_ParcelPropertiesRequest;
1403extern char * _PREHASH_GroupProfileRequest; 1283extern char * _PREHASH_GroupProfileRequest;
1404extern char * _PREHASH_AgentDataUpdateRequest; 1284extern char * _PREHASH_AgentDataUpdateRequest;
1405extern char * _PREHASH_PriceObjectScaleFactor; 1285extern char * _PREHASH_PriceObjectScaleFactor;
1406extern char * _PREHASH_DirPicksQuery;
1407extern char * _PREHASH_OpenEnrollment; 1286extern char * _PREHASH_OpenEnrollment;
1408extern char * _PREHASH_GroupData; 1287extern char * _PREHASH_GroupData;
1409extern char * _PREHASH_RequestGodlikePowers; 1288extern char * _PREHASH_RequestGodlikePowers;
@@ -1414,7 +1293,6 @@ extern char * _PREHASH_Controls;
1414extern char * _PREHASH_FirstDetachAll; 1293extern char * _PREHASH_FirstDetachAll;
1415extern char * _PREHASH_EstateID; 1294extern char * _PREHASH_EstateID;
1416extern char * _PREHASH_ImprovedInstantMessage; 1295extern char * _PREHASH_ImprovedInstantMessage;
1417extern char * _PREHASH_AgentQuit;
1418extern char * _PREHASH_CheckParcelSales; 1296extern char * _PREHASH_CheckParcelSales;
1419extern char * _PREHASH_ParcelSales; 1297extern char * _PREHASH_ParcelSales;
1420extern char * _PREHASH_CurrentInterval; 1298extern char * _PREHASH_CurrentInterval;
@@ -1431,12 +1309,8 @@ extern char * _PREHASH_OwnerIDs;
1431extern char * _PREHASH_SystemKickUser; 1309extern char * _PREHASH_SystemKickUser;
1432extern char * _PREHASH_TransactionTime; 1310extern char * _PREHASH_TransactionTime;
1433extern char * _PREHASH_TimeToLive; 1311extern char * _PREHASH_TimeToLive;
1434extern char * _PREHASH_StartParcelRemove;
1435extern char * _PREHASH_BulkParcelRemove;
1436extern char * _PREHASH_OldAgentID; 1312extern char * _PREHASH_OldAgentID;
1437extern char * _PREHASH_BonusEstimate;
1438extern char * _PREHASH_MusicURL; 1313extern char * _PREHASH_MusicURL;
1439extern char * _PREHASH_CompleteLure;
1440extern char * _PREHASH_ParcelPrimBonus; 1314extern char * _PREHASH_ParcelPrimBonus;
1441extern char * _PREHASH_EjectUser; 1315extern char * _PREHASH_EjectUser;
1442extern char * _PREHASH_CoarseLocationUpdate; 1316extern char * _PREHASH_CoarseLocationUpdate;
@@ -1469,10 +1343,6 @@ extern char * _PREHASH_ParcelProperties;
1469extern char * _PREHASH_EstateOwnerID; 1343extern char * _PREHASH_EstateOwnerID;
1470extern char * _PREHASH_LogoutRequest; 1344extern char * _PREHASH_LogoutRequest;
1471extern char * _PREHASH_AssetUploadRequest; 1345extern char * _PREHASH_AssetUploadRequest;
1472extern char * _PREHASH_ReputationIndividualRequest;
1473extern char * _PREHASH_MajorVersion;
1474extern char * _PREHASH_MinorVersion;
1475extern char * _PREHASH_SimulatorAssign;
1476extern char * _PREHASH_TransactionType; 1346extern char * _PREHASH_TransactionType;
1477extern char * _PREHASH_AvatarPropertiesUpdate; 1347extern char * _PREHASH_AvatarPropertiesUpdate;
1478extern char * _PREHASH_ParcelPropertiesUpdate; 1348extern char * _PREHASH_ParcelPropertiesUpdate;
@@ -1481,7 +1351,6 @@ extern char * _PREHASH_AbortXfer;
1481extern char * _PREHASH_DeRezAck; 1351extern char * _PREHASH_DeRezAck;
1482extern char * _PREHASH_TakeControls; 1352extern char * _PREHASH_TakeControls;
1483extern char * _PREHASH_DirLandReply; 1353extern char * _PREHASH_DirLandReply;
1484extern char * _PREHASH_SpaceLocationTeleportReply;
1485extern char * _PREHASH_MuteType; 1354extern char * _PREHASH_MuteType;
1486extern char * _PREHASH_IMViaEMail; 1355extern char * _PREHASH_IMViaEMail;
1487extern char * _PREHASH_RentPrice; 1356extern char * _PREHASH_RentPrice;