From a4f80b3e7e9c4f29ccd056cdc0b138cb559b9d4e Mon Sep 17 00:00:00 2001 From: axial Date: Mon, 24 Jul 2006 03:03:45 +0000 Subject: [PATCH] Adding SLProxy project. git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@74 52acb1d6-8a22-11de-b505-999d5b087335 --- applications/SLProxy/Analyst.cs | 97 ++ applications/SLProxy/ChatConsole.cs | 107 ++ applications/SLProxy/Makefile | 21 + applications/SLProxy/README | 221 ++++ applications/SLProxy/SLProxy.cs | 1072 +++++++++++++++++ applications/SLProxy/XmlRpcCS.dll | Bin 0 -> 26624 bytes applications/SLProxy/keywords.txt | 1509 ++++++++++++++++++++++++ applications/SLProxy/libsecondlife.dll | Bin 0 -> 72704 bytes applications/SLProxy/protocol.txt | 1 + 9 files changed, 3028 insertions(+) create mode 100644 applications/SLProxy/Analyst.cs create mode 100644 applications/SLProxy/ChatConsole.cs create mode 100644 applications/SLProxy/Makefile create mode 100644 applications/SLProxy/README create mode 100644 applications/SLProxy/SLProxy.cs create mode 100755 applications/SLProxy/XmlRpcCS.dll create mode 100644 applications/SLProxy/keywords.txt create mode 100755 applications/SLProxy/libsecondlife.dll create mode 100644 applications/SLProxy/protocol.txt diff --git a/applications/SLProxy/Analyst.cs b/applications/SLProxy/Analyst.cs new file mode 100644 index 00000000..f713017d --- /dev/null +++ b/applications/SLProxy/Analyst.cs @@ -0,0 +1,97 @@ +/* + * Analyst.cs: proxy that dumps all packets to and from the server + * + * Copyright (c) 2006 Austin Jennings + * All rights reserved. + * + * - Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * - Neither the name of the Second Life Reverse Engineering Team nor the names + * of its contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +using SLProxy; +using libsecondlife; + +using System; +using System.Net; + +public class Analyst { + public static void Main(string[] args) { + ProtocolManager protocolManager = new ProtocolManager("keywords.txt", "protocol.txt"); + ProxyConfig proxyConfig = new ProxyConfig("Analyst", "austin.jennings@gmail.com", protocolManager, args); + Proxy proxy = new Proxy(proxyConfig); + + // register delegates for all packets + RegisterDelegates(proxy, protocolManager.LowMaps); + RegisterDelegates(proxy, protocolManager.MediumMaps); + RegisterDelegates(proxy, protocolManager.HighMaps); + + proxy.Start(); + } + + // register delegates for each packet in an array of packet maps + private static void RegisterDelegates(Proxy proxy, MapPacket[] maps) { + PacketDelegate incomingLogger = new PacketDelegate(LogIncomingPacket); + PacketDelegate outgoingLogger = new PacketDelegate(LogOutgoingPacket); + foreach (MapPacket map in maps) + if (map != null) { + proxy.AddDelegate(map.Name, Direction.Incoming, incomingLogger); + proxy.AddDelegate(map.Name, Direction.Outgoing, outgoingLogger); + } + } + + // delegate for incoming packets: log the packet and return it unharmed + private static Packet LogIncomingPacket(Packet packet, IPEndPoint endPoint) { + LogPacket(packet, endPoint, Direction.Incoming); + return packet; + } + + // delegate for outgoing packets: log the packet and return it unharmed + private static Packet LogOutgoingPacket(Packet packet, IPEndPoint endPoint) { + LogPacket(packet, endPoint, Direction.Outgoing); + return packet; + } + + // helper method: perform the logging of a packet + private static void LogPacket(Packet packet, IPEndPoint endPoint, Direction direction) { + Console.WriteLine("{0} {1,21} {2,5} {3}{4}{5}" + ,direction == Direction.Incoming ? "<--" : "-->" + ,endPoint + ,packet.Sequence + ,InterpretOptions(packet.Data[0]) + ,Environment.NewLine + ,packet + ); + } + + // produce a string representing a packet's header options + private static string InterpretOptions(byte options) { + return "[" + + ((options & Helpers.MSG_APPENDED_ACKS) != 0 ? "Ack" : " ") + + " " + + ((options & Helpers.MSG_RESENT) != 0 ? "Res" : " ") + + " " + + ((options & Helpers.MSG_RELIABLE) != 0 ? "Rel" : " ") + + " " + + ((options & Helpers.MSG_ZEROCODED) != 0 ? "Zer" : " ") + + "]" + ; + } +} diff --git a/applications/SLProxy/ChatConsole.cs b/applications/SLProxy/ChatConsole.cs new file mode 100644 index 00000000..daacd61f --- /dev/null +++ b/applications/SLProxy/ChatConsole.cs @@ -0,0 +1,107 @@ +/* + * ChatConsole.cs: sample SLProxy appliation that writes chat to the console. + * Typing on the console will send chat to Second Life. + * + * Copyright (c) 2006 Austin Jennings + * All rights reserved. + * + * - Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * - Neither the name of the Second Life Reverse Engineering Team nor the names + * of its contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +using SLProxy; +using libsecondlife; + +using System; +using System.Collections; +using System.Net; +using System.Threading; + +public class ChatConsole { + private static ProtocolManager protocolManager; + private static Proxy proxy; + private static SessionInformation sessionInformation; + + public static void Main(string[] args) { + // configure the proxy + protocolManager = new ProtocolManager("keywords.txt", "protocol.txt"); + ProxyConfig proxyConfig = new ProxyConfig("ChatConsole", "austin.jennings@gmail.com", protocolManager, args); + proxy = new Proxy(proxyConfig); + + // set a delegate for when the client logs in + proxy.SetLoginDelegate(new LoginDelegate(Login)); + + // add a delegate for incoming chat + proxy.AddDelegate("ChatFromSimulator", Direction.Incoming, new PacketDelegate(ChatFromSimulator)); + + // start the proxy + proxy.Start(); + } + + private static void Login(SessionInformation session) { + // remember our session information + sessionInformation = session; + + // start a new thread that reads lines from the console + (new Thread(new ThreadStart(ReadFromConsole))).Start(); + } + + private static void ReadFromConsole() { + // send text from the console in an infinite loop + for (;;) { + // read a line from the console + string message = Console.ReadLine(); + + // construct a ChatFromViewer packet + Hashtable blocks = new Hashtable(); + Hashtable fields; + fields = new Hashtable(); + fields["Channel"] = (int)0; + fields["Message"] = PacketUtility.StringToVariable(message); + fields["Type"] = (byte)1; + blocks[fields] = "ChatData"; + fields = new Hashtable(); + fields["AgentID"] = sessionInformation.agentID; + fields["SessionID"] = sessionInformation.sessionID; + blocks[fields] = "AgentData"; + Packet chatPacket = PacketBuilder.BuildPacket("ChatFromViewer", protocolManager, blocks, Helpers.MSG_RELIABLE); + + // inject the packet + proxy.InjectPacket(chatPacket, Direction.Outgoing); + } + } + + private static Packet ChatFromSimulator(Packet packet, IPEndPoint sim) { + // deconstruct the packet + Hashtable blocks = PacketUtility.Unbuild(packet); + string message = PacketUtility.VariableToString((byte[])PacketUtility.GetField(blocks, "ChatData", "Message")); + string name = PacketUtility.VariableToString((byte[])PacketUtility.GetField(blocks, "ChatData", "Name")); + byte audible = (byte)PacketUtility.GetField(blocks, "ChatData", "Audible"); + byte type = (byte)PacketUtility.GetField(blocks, "ChatData", "Type"); + + // if this was a normal, audible message, write it to the console + if (audible != 0 && (type == 0 || type == 1 || type == 2)) + Console.WriteLine(name + ": " + message); + + // return the packet unmodified + return packet; + } +} diff --git a/applications/SLProxy/Makefile b/applications/SLProxy/Makefile new file mode 100644 index 00000000..e1ec3ac8 --- /dev/null +++ b/applications/SLProxy/Makefile @@ -0,0 +1,21 @@ +default: library examples + +library: SLProxy.dll + +examples: ChatConsole.exe Analyst.exe + +clean:: + rm -f SLProxy.dll ChatConsole.exe Analyst.exe + +SLProxy.dll: libsecondlife.dll XmlRpcCS.dll SLProxy.cs + mcs SLProxy.cs -target:library -r:libsecondlife.dll -r:XmlRpcCS.dll + +ChatConsole.exe: SLProxy.dll libsecondlife.dll ChatConsole.cs + mcs ChatConsole.cs -r:SLProxy.dll -r:libsecondlife.dll +Analyst.exe: SLProxy.dll libsecondlife.dll Analyst.cs + mcs Analyst.cs -r:SLProxy.dll -r:libsecondlife.dll + +libsecondlife.dll: + @echo Please place a copy of libsecondlife.dll in this folder.; false +XmlRpcCS.dll: + @echo Please place a copy of XmlRpcCS.dll in this folder.; false diff --git a/applications/SLProxy/README b/applications/SLProxy/README new file mode 100644 index 00000000..52936476 --- /dev/null +++ b/applications/SLProxy/README @@ -0,0 +1,221 @@ +SLProxy is a library that works in conjunction with libsecondlife to +allow applications to wedge themselves between the official Second +Life client and servers. SLProxy applications can inspect and modify +any packet as it passes between the client and the servers; remove +packets from the stream; and inject new packets into the stream. +SLProxy automatically takes care of tracking circuits and modifying +sequence numbers and acknowledgements to account for changes to the +packet stream. + +The continued existence of this software of course rests on the good +will of Linden Lab toward the Second Life reverse engineering effort. +Please use common sense when designing applications and report any +security holes you may find to security@lindenlab.com. + +In addition to the SLProxy library, this package contains two short +example applications. Analyst simply dumps every packet sent between +the client and the server to the console. ChatConsole dumps all +in-world chat to the console, and sends all text typed at the console +to the world as chat. + +To use an SLProxy application, you must first start the proxy, then +start Second Life with the switch `-loginuri http://localhost:8080/'. +In Windows, add this switch (without the quotes) to your Second Life +shortcut. In MacOS X, this can be accomplished by sending the +following commands to the Terminal (assuming Second Life is installed +in /Applications): + + cd "/Applications/Second Life.app" + "Contents/MacOS/Second Life" -loginuri http://localhost:8080/ + +Note that for security reasons, by default, SLProxy applications must +be running on the same computer as Second Life. If you need to run a +proxy on a different machine or port, start the proxy with the +--proxy-help switch and see the options available. + +SLProxy can only handle one client using a proxy at a time. + +PUBLIC INTERFACE +================ + +This section describes the interface that SLProxy applications will +use to interact with the packet stream. Please see ChatConsole.cs for +a simple example of how this interface can be used. + +SLProxy extends the functionality of libsecondlife, so we assume here +that the reader is already familiar with libsecondlife's Packet and +PacketBuilder classes. + +1. ProxyConfig class +-------------------- + +An instance of ProxyConfig represents the configuration of a Proxy +object, and must be provided when constructing a Proxy. ProxyConfig +has two constructors: + + ProxyConfig(string userAgent, string author) + ProxyConfig(string userAgent, string author, string[] args) + +Both constructors require a user agent name and the author's email +address. These are sent to Second Life's login server to identify the +client, and to allow Linden Lab to get in touch with authors whose +applications may inadvertantly be causing problems. The second +constructor is preferred and takes an array of command-line arguments +that allow the user to override certain network settings. For a list +of command line arguments, start your appliation with the --proxy-help +switch. + +2. Proxy class +-------------- + +The Proxy class represents an instance of an SLProxy and provides the +methods necessary to modify the packet stream. Proxy's sole +constructor takes an instance of ProxyConfig. + +2.1 Login delegates +- - - - - - - - - - + +You may specify that SLProxy should call a delegate method in your +application when the user successfully logs into Second Life: + + delegate void LoginDelegate(SessionInformation session) + void SetLoginDelegate(LoginDelegate loginDelegate) + +LoginDelegate methods are passed a SessionInformation object, which +contains the agentID and sessionID for the current session. These +values are required when injecting certain kinds of packets. + +Note that all delegates must terminate (not go into an infinite loop), +and must be thread-safe. + +2.2 Packet delegates +- - - - - - - - - - + +Packet delegates allow you to inspect and modify packets as they pass +between the client and the server: + + delegate Packet PacketDelegate(Packet packet, IPEndPoint endPoint) + void AddDelegate(string packetName, Direction direction, PacketDelegate packetDelegate) + void RemoveDelegate(string packetName, Direction direction) + +AddDelegate adds a callback delegate for packets named packetName +going direction. Directions are either Direction.Incoming, meaning +packets heading from the server to the client, or Direction.Outgoing, +meaning packets heading from the client to the server. Only one +delegate can apply to a packet at a time; if you add a new delegate +with the same packetName and direction, the old one will be removed. + +RemoveDelegate simply removes the delegate for the specified type of +packet. + +PacketDelegate methods are passed a copy of the packet (in the form of +a libsecondlife Packet object) and the IPEndPoint of the server that +sent (or will receive) the packet. PacketDelegate methods may do one +of three things: + +1. Return the same packet, in which case it will be passed on. +2. Return a new packet (built with libsecondlife), in which case the + new packet will substitute for the original. SLProxy will + automatically copy the sequence number and appended ACKs from the + old packet to the new one. +3. Return null, in which case the packet will not be passed on. + +SLProxy automatically takes care of ensuring that sequence numbers and +acknowledgements are adjusted to account for changes made by the +application. When replacing a reliable packet with an unreliable +packet or removing a reliable packet, a fake acknowledgement is +injected. When replacing an unreliable packet with a reliable packet, +SLProxy ensures delivery and intercepts its acknowledgement. Note +that if a reliable packet is passed on but then lost on the network, +Second Life will resend it and the delegate will be called again. You +can tell if a packet is being resent by checking if (packet.Data[0] & +Helpers.MSG_RESENT) is nonzero, although be advised that it's possible +that the original packet never made it to the proxy and the packet +will be marked RESENT the first time the proxy ever sees it. + +Note that all delegates must terminate (not go into an infinite loop), +and must be thread-safe. + +2.3 Packet injection +- - - - - - - - - - + +New packets may be injected into the stream at any point, either +during a delegate callback or by another thread in your application. +Packets are injected with the InjectPacket method: + + void InjectPacket(Packet packet, Direction direction) + +This will inject a packet heading to either the client or to the +active server, when direction is Direction.Incoming or +Direction.Outgoing, respectively. The packet's sequence number will +be set automatically, and if the packet is reliable, SLProxy will +ensure its delivery and intercept its acknowledgement. + +Injecting a packet immediately upon (or prior to) connection is not +recommended, since the client and the server won't have initialized +their session yet. + +2.4 Starting the proxy +- - - - - - - - - - - + +Once you've constructed a Proxy and added your delegates, you must +start it with the Start method: + + void Start() + +Once started, the proxy will begin listening for connections. The +Start method spawns new threads for the proxy and returns immediately. + +3. PacketUtility class +---------------------- + +The PacketUtility class provides a handful of static methods which may +be useful when inspecting and modifying packets. + +3.1 Hashtable Unbuild(Packet packet) +- - - - - - - - - - - - - - - - - - + +The Unbuild method takes a Packet object and returns a table of +blocks, structured in a format suitable for passing to PacketUtility's +GetField and SetField methods or PacketBuilder's BuildPacket method. + +For example, this should make an approximate copy of a packet: + +Hashtable packetBlocks = PacketUtility.Unbuild(packet); +Packet packetCopy = PacketBuilder.BuildPacket(packet.Layout.Name, protocolManager, packetBlocks, packet.Data[0]); + +3.2 object GetField(Hashtable blocks, string block, string field) +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +The GetField method takes a table of blocks (produced by +PacketUtility.Unbuild) and extracts the value of a particular field. +If the field is part of a variable block, an arbitrary instance of the +field will be returned. If the field does not exist, null will be +returned. + +3.3 void SetField(Hashtable blocks, string block, string field, object value) +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +The SetField method takes a table of blocks (produced by +PacketUtility.Unbuild) and sets the value of a particular field. If +the field is part of a variable block, all instances of the field will +be set. If the field does not exist, SetField will have no effect. + +This can be used by a packet delegate method in conjunction with +PacketUtility.Unbuild and PacketBuilder.BuildPacket to substitute a +new packet that is a copy of the original packet with certain fields +modified. + +3.4 string VariableToString(byte[] field) +- - - - - - - - - - - - - - - - - - - - - + +The VariableToString method interprets a variable field in a packet as +a UTF-8 encoded string. If conversion fails, an empty string is +returned. + +3.5 byte[] StringToVariable(string str) +- - - - - - - - - - - - - - - - - - - - + +The StringToVariable method returns a variable field representing the +UTF-8 encoding of a string. If conversion fails, an empty field is +returned. diff --git a/applications/SLProxy/SLProxy.cs b/applications/SLProxy/SLProxy.cs new file mode 100644 index 00000000..0350d474 --- /dev/null +++ b/applications/SLProxy/SLProxy.cs @@ -0,0 +1,1072 @@ +/* + * SLProxy.cs: implementation of Second Life proxy library + * + * Copyright (c) 2006 Austin Jennings + * All rights reserved. + * + * - Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * - Neither the name of the Second Life Reverse Engineering Team nor the names + * of its contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +using Nwc.XmlRpc; +using System; +using System.Collections; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Xml; +using libsecondlife; + +// SLProxy: proxy library for Second Life +namespace SLProxy { + // ProxyConfig: configuration for proxy objects + public class ProxyConfig { + // userAgent: name of the proxy application + public string userAgent; + // author: email address of the proxy application's author + public string author; + // protocol: libsecondlife ProtocolManager + public ProtocolManager protocol; + // loginPort: port that the login proxy will listen on + public ushort loginPort = 8080; + // clientFacingAddress: address from which to communicate with the client + public IPAddress clientFacingAddress = IPAddress.Loopback; + // remoteFacingAddress: address from which to communicate with the server + public IPAddress remoteFacingAddress = IPAddress.Any; + // remoteLoginUri: URI for Second Life's login server + public Uri remoteLoginUri = new Uri("https://login.agni.lindenlab.com/cgi-bin/login.cgi"); + // verbose: whether or not to print informative messages and warnings + public bool verbose = true; + + // ProxyConfig: construct a default proxy configuration with the specified userAgent, author, and protocol + public ProxyConfig(string userAgent, string author, ProtocolManager protocol) { + this.userAgent = userAgent; + this.author = author; + this.protocol = protocol; + } + + // ProxyConfig: construct a default proxy configuration, parsing command line arguments (try --proxy-help) + public ProxyConfig(string userAgent, string author, ProtocolManager protocol, string[] args) : this(userAgent, author, protocol) { + Hashtable argumentParsers = new Hashtable(); + argumentParsers["proxy-help"] = new ArgumentParser(ParseHelp); + argumentParsers["proxy-login-port"] = new ArgumentParser(ParseLoginPort); + argumentParsers["proxy-client-facing-address"] = new ArgumentParser(ParseClientFacingAddress); + argumentParsers["proxy-remote-facing-address"] = new ArgumentParser(ParseRemoteFacingAddress); + argumentParsers["proxy-remote-login-uri"] = new ArgumentParser(ParseRemoteLoginUri); + argumentParsers["proxy-verbose"] = new ArgumentParser(ParseVerbose); + argumentParsers["proxy-quiet"] = new ArgumentParser(ParseQuiet); + + foreach (string arg in args) + foreach (string argument in argumentParsers.Keys) { + Match match = (new Regex("^--" + argument + "(?:=(.*))?$")).Match(arg); + if (match.Success) { + string value; + if (match.Groups[1].Captures.Count == 1) + value = match.Groups[1].Captures[0].ToString(); + else + value = null; + try { + ((ArgumentParser)argumentParsers[argument])(value); + } catch { + Console.WriteLine("invalid value for --" + argument); + ParseHelp(null); + } + } + } + } + + private delegate void ArgumentParser(string value); + + private void ParseHelp(string value) { + Console.WriteLine("Proxy command-line arguments:" ); + Console.WriteLine(" --proxy-help display this help" ); + Console.WriteLine(" --proxy-login-port= listen for logins on " ); + Console.WriteLine(" --proxy-client-facing-address= communicate with client via " ); + Console.WriteLine(" --proxy-remote-facing-address= communicate with server via " ); + Console.WriteLine(" --proxy-remote-login-uri= use SL login server at " ); + Console.WriteLine(" --proxy-verbose display proxy notifications" ); + Console.WriteLine(" --proxy-quiet suppress proxy notifications" ); + + Environment.Exit(1); + } + + private void ParseLoginPort(string value) { + loginPort = Convert.ToUInt16(value); + } + + private void ParseClientFacingAddress(string value) { + clientFacingAddress = IPAddress.Parse(value); + } + + private void ParseRemoteFacingAddress(string value) { + remoteFacingAddress = IPAddress.Parse(value); + } + + private void ParseRemoteLoginUri(string value) { + remoteLoginUri = new Uri(value); + } + + private void ParseVerbose(string value) { + if (value != null) + throw new Exception(); + + verbose = true; + } + + private void ParseQuiet(string value) { + if (value != null) + throw new Exception(); + + verbose = false; + } + } + + // Proxy: Second Life proxy server + // A Proxy instance is only prepared to deal with one client at a time. + public class Proxy { + private ProxyConfig proxyConfig; + + /* + * Proxy Management + */ + + // Proxy: construct a proxy server with the given configuration + public Proxy(ProxyConfig proxyConfig) { + this.proxyConfig = proxyConfig; + + InitializeLoginProxy(); + InitializeSimProxy(); + } + + // Start: begin accepting clients + public void Start() { + RunSimProxy(); + (new Thread(new ThreadStart(RunLoginProxy))).Start(); + + IPEndPoint endPoint = (IPEndPoint)loginServer.LocalEndPoint; + IPAddress displayAddress; + if (endPoint.Address == IPAddress.Any) + displayAddress = IPAddress.Loopback; + else + displayAddress = endPoint.Address; + Log("proxy ready at http://" + displayAddress + ":" + endPoint.Port + "/"); + } + + // SetLoginDelegate: specify a callback loginDelegate that will be called when the client logs in + public void SetLoginDelegate(LoginDelegate loginDelegate) { + this.loginDelegate = loginDelegate; + } + + // AddDelegate: add callback packetDelegate for packets of type packetName going direction + public void AddDelegate(string packetName, Direction direction, PacketDelegate packetDelegate) { + Hashtable table = direction == Direction.Incoming ? incomingDelegates : outgoingDelegates; + lock(table) + table[packetName] = packetDelegate; + } + + // RemoveDelegate: remove callback for packets of type packetName going direction + public void RemoveDelegate(string packetName, Direction direction) { + Hashtable table = direction == Direction.Incoming ? incomingDelegates : outgoingDelegates; + lock(table) + table.Remove(packetName); + } + + // InjectPacket: send packet to the client or server when direction is Incoming or Outgoing, respectively + public void InjectPacket(Packet packet, Direction direction) { + if (activeCircuit == null) { + // no active circuit; queue the packet for injection once we have one + ArrayList queue = direction == Direction.Incoming ? queuedIncomingInjections : queuedOutgoingInjections; + queue.Add(packet); + } else { + // tell the active sim proxy to inject the packet + lock(activeCircuit) { + SimProxy sim; + lock(simProxies) + sim = (SimProxy)simProxies[activeCircuit]; + + sim.Inject(packet, direction); + } + } + } + + // Log: write message to the console if in verbose mode + private void Log(object message) { + if (proxyConfig.verbose) + Console.WriteLine(message); + } + + /* + * Login Proxy + */ + + private Socket loginServer; + + // InitializeLoginProxy: initialize the login proxy + private void InitializeLoginProxy() { + loginServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + loginServer.Bind(new IPEndPoint(proxyConfig.clientFacingAddress, proxyConfig.loginPort)); + loginServer.Listen(1); + } + + // RunLoginProxy: process login requests from clients + private void RunLoginProxy() { + try { + for (;;) { + Socket client = loginServer.Accept(); + IPEndPoint clientEndPoint = (IPEndPoint)client.RemoteEndPoint; + + Log("handling login request from " + clientEndPoint); + + NetworkStream networkStream = new NetworkStream(client); + StreamReader networkReader = new StreamReader(networkStream); + StreamWriter networkWriter = new StreamWriter(networkStream); + + try { + ProxyLogin(networkReader, networkWriter); + } catch (Exception e) { + Log("login failed: " + e.Message); + } + + networkWriter.Close(); + networkReader.Close(); + networkStream.Close(); + + client.Close(); + + // send any packets queued for injection + if (activeCircuit != null) { + SimProxy activeProxy = (SimProxy)simProxies[activeCircuit]; + lock(queuedOutgoingInjections) { + foreach (Packet packet in queuedOutgoingInjections) + activeProxy.Inject(packet, Direction.Outgoing); + queuedOutgoingInjections = new ArrayList(); + } + } + } + } catch (Exception e) { + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); + } + } + + // ProxyLogin: proxy a login request + private void ProxyLogin(StreamReader reader, StreamWriter writer) { + string line; + int contentLength = 0; + + // read HTTP header + do { + // read one line of the header + line = reader.ReadLine(); + + // check for premature EOF + if (line == null) + throw new Exception("EOF in client HTTP header"); + + // look for Content-Length + Match match = (new Regex(@"Content-Length: (\d+)$")).Match(line); + if (match.Success) + contentLength = Convert.ToInt32(match.Groups[1].Captures[0].ToString()); + } while (line != ""); + + // read the HTTP body into a buffer + char[] content = new char[contentLength]; + reader.Read(content, 0, contentLength); + + // convert the body into an XML-RPC request + XmlRpcRequest request = (XmlRpcRequest)XmlRpcRequestDeserializer.Singleton.Deserialize(new String(content)); + + // add our userAgent and author to the request + Hashtable requestParams = new Hashtable(); + if (proxyConfig.userAgent != null) + requestParams["user-agent"] = proxyConfig.userAgent; + if (proxyConfig.author != null) + requestParams["author"] = proxyConfig.author; + request.Params.Add(requestParams); + + // forward the XML-RPC request to the server + XmlRpcResponse response = (XmlRpcResponse)request.Send(proxyConfig.remoteLoginUri.ToString()); + Hashtable responseData = (Hashtable)response.Value; + + // proxy any simulator address given in the XML-RPC response + if (responseData.Contains("sim_ip") && responseData.Contains("sim_port")) { + IPEndPoint realSim = new IPEndPoint(IPAddress.Parse((string)responseData["sim_ip"]), Convert.ToUInt16(responseData["sim_port"])); + IPEndPoint fakeSim = ProxySim(realSim); + responseData["sim_ip"] = fakeSim.Address.ToString(); + responseData["sim_port"] = fakeSim.Port; + activeCircuit = realSim; + } + + // start a new proxy session + Reset(); + + // call the loginDelegate + if (loginDelegate != null) { + SessionInformation session = new SessionInformation(); + if (responseData.Contains("agent_id")) + session.agentID = new LLUUID((string)responseData["agent_id"]); + if (responseData.Contains("session_id")) + session.sessionID = new LLUUID((string)responseData["session_id"]); + try { + loginDelegate(session); + } catch (Exception e) { + Log("exception in login delegate: " + e.Message); + } + } + + // forward the XML-RPC response to the client + XmlTextWriter responseWriter = new XmlTextWriter(writer); + XmlRpcResponseSerializer.Singleton.Serialize(responseWriter, response); + responseWriter.Close(); + } + + /* + * Sim Proxy + */ + + private Socket simFacingSocket; + private IPEndPoint activeCircuit = null; + private Hashtable proxyEndPoints = new Hashtable(); + private Hashtable simProxies = new Hashtable(); + private Hashtable proxyHandlers = new Hashtable(); + private LoginDelegate loginDelegate = null; + private Hashtable incomingDelegates = new Hashtable(); + private Hashtable outgoingDelegates = new Hashtable(); + private ArrayList queuedIncomingInjections = new ArrayList(); + private ArrayList queuedOutgoingInjections = new ArrayList(); + + // initialize the sim proxy + private void InitializeSimProxy() { + InitializeAddressCheckers(); + + simFacingSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + simFacingSocket.Bind(new IPEndPoint(proxyConfig.remoteFacingAddress, 0)); + Reset(); + } + + // Reset: start a new session + private void Reset() { + foreach (SimProxy simProxy in simProxies.Values) + simProxy.Reset(); + } + + private byte[] receiveBuffer = new byte[4096]; + private EndPoint remoteEndPoint = (EndPoint)new IPEndPoint(IPAddress.Any, 0); + + // start listening for packets from remote sims + private void RunSimProxy() { + simFacingSocket.BeginReceiveFrom(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, ref remoteEndPoint, new AsyncCallback(ReceiveFromSim), null); + } + + // packet received from a remote sim + private void ReceiveFromSim(IAsyncResult ar) { + try { + // pause listening and get the length of the packet + int length; + lock(simFacingSocket) + length = simFacingSocket.EndReceiveFrom(ar, ref remoteEndPoint); + + lock(proxyHandlers) + if (proxyHandlers.Contains(remoteEndPoint)) { + // find the proxy responsible for forwarding this packet + SimProxy simProxy = (SimProxy)proxyHandlers[remoteEndPoint]; + + // interpret the packet according to the SL protocol + Packet packet = new Packet(receiveBuffer, length, proxyConfig.protocol); + + // check for ACKs we're waiting for + packet = simProxy.CheckAcks(packet, Direction.Incoming); + + // modify sequence numbers to account for injections + packet = simProxy.ModifySequence(packet, Direction.Incoming); + + // check the packet for addresses that need proxying + if (incomingCheckers.Contains(packet.Layout.Name)) { + Packet newPacket = ((AddressChecker)incomingCheckers[packet.Layout.Name])(packet); + SwapPacket(packet, newPacket); + packet = newPacket; + } + + // pass the packet to any callback delegates + lock(incomingDelegates) + if (incomingDelegates.Contains(packet.Layout.Name)) { + try { + Packet newPacket = ((PacketDelegate)incomingDelegates[packet.Layout.Name])(packet, (IPEndPoint)remoteEndPoint); + if (newPacket == null) { + if ((packet.Data[0] & Helpers.MSG_RELIABLE) != 0) + simProxy.Inject(SpoofAck(packet), Direction.Outgoing); + + if ((packet.Data[0] & Helpers.MSG_APPENDED_ACKS) !=0) + packet = SeparateAck(packet); + else + packet = null; + } else { + bool oldReliable = (packet.Data[0] & Helpers.MSG_RELIABLE) != 0; + bool newReliable = (newPacket.Data[0] & Helpers.MSG_RELIABLE) != 0; + if (oldReliable && !newReliable) + SendPacket(SpoofAck(packet), (IPEndPoint)remoteEndPoint); + else if (!oldReliable && newReliable) + simProxy.WaitForAck(packet, Direction.Incoming); + + SwapPacket(packet, newPacket); + packet = newPacket; + } + } catch (Exception e) { + Log("exception in incoming delegate: " + e.Message); + } + } + + if (packet != null) + // forward the packet to the client via the appropriate fake sim endpoint + simProxy.HandlePacket(packet); + } else + // ignore packets from unknown peers + Log("dropping packet from " + remoteEndPoint); + + // resume listening + lock(simFacingSocket) + simFacingSocket.BeginReceiveFrom(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, ref remoteEndPoint, new AsyncCallback(ReceiveFromSim), null); + } catch (Exception e) { + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); + } + } + + // HandlePacket: forward a packet to a sim from our fake client endpoint + private void HandlePacket(Packet packet, IPEndPoint endPoint, SimProxy proxy) { + // check the packet for addresses that need proxying + if (outgoingCheckers.Contains(packet.Layout.Name)) { + Packet newPacket = ((AddressChecker)outgoingCheckers[packet.Layout.Name])(packet); + SwapPacket(packet, newPacket); + packet = newPacket; + } + + // pass the packet to any callback delegates + lock(outgoingDelegates) + if (outgoingDelegates.Contains(packet.Layout.Name)) { + try { + Packet newPacket = ((PacketDelegate)outgoingDelegates[packet.Layout.Name])(packet, endPoint); + if (newPacket == null) { + if ((packet.Data[0] & Helpers.MSG_RELIABLE) != 0) + proxy.Inject(SpoofAck(packet), Direction.Incoming); + + if ((packet.Data[0] & Helpers.MSG_APPENDED_ACKS) != 0) + packet = SeparateAck(packet); + else + packet = null; + } else { + bool oldReliable = (packet.Data[0] & Helpers.MSG_RELIABLE) != 0; + bool newReliable = (newPacket.Data[0] & Helpers.MSG_RELIABLE) != 0; + if (oldReliable && !newReliable) + proxy.SendPacket(SpoofAck(packet)); + else if (!oldReliable && newReliable) + proxy.WaitForAck(packet, Direction.Outgoing); + + SwapPacket(packet, newPacket); + packet = newPacket; + } + } catch (Exception e) { + Log("exception in outgoing delegate: " + e.Message); + } + } + + if (packet != null) + // send the packet + SendPacket(packet, endPoint); + } + + // SendPacket: send a packet to a sim from our fake client endpoint + public void SendPacket(Packet packet, IPEndPoint endPoint) { + lock(simFacingSocket) + simFacingSocket.SendTo(packet.Data, packet.Data.Length, SocketFlags.None, endPoint); + } + + // SpoofAck: create an ACK for the given packet + private Packet SpoofAck(Packet packet) { + Hashtable blocks = new Hashtable(); + Hashtable fields = new Hashtable(); + fields["ID"] = (uint)packet.Sequence; + blocks[fields] = "Packets"; + return PacketBuilder.BuildPacket("PacketAck", proxyConfig.protocol, blocks, 0); + } + + // SeparateAck: create a standalone PacketAck for packet's appended ACKs + private Packet SeparateAck(Packet packet) { + int ackCount = ((packet.Data[0] & Helpers.MSG_APPENDED_ACKS) == 0 ? 0 : (int)packet.Data[packet.Data.Length - 1]); + Hashtable blocks = new Hashtable(); + for (int i = 0; i < ackCount; ++i) { + Hashtable fields = new Hashtable(); + int offset = packet.Data.Length - (ackCount - i) * 4 - 1; + fields["ID"] = (int) + (packet.Data[offset++] << 0) + + (packet.Data[offset++] << 8) + + (packet.Data[offset++] << 16) + + (packet.Data[offset++] << 24) + ; + blocks[fields] = "Packets"; + } + + Packet ack = PacketBuilder.BuildPacket("PacketAck", proxyConfig.protocol, blocks, 0); + ack.Sequence = packet.Sequence; + return ack; + } + + // SwapPacket: copy the sequence number and appended ACKs from one packet to another + private static void SwapPacket(Packet oldPacket, Packet newPacket) { + newPacket.Sequence = oldPacket.Sequence; + + int oldAcks = (oldPacket.Data[0] & Helpers.MSG_APPENDED_ACKS) == 0 ? 0 : (int)oldPacket.Data[oldPacket.Data.Length - 1]; + int newAcks = (newPacket.Data[0] & Helpers.MSG_APPENDED_ACKS) == 0 ? 0 : (int)newPacket.Data[newPacket.Data.Length - 1]; + + if (oldAcks != 0 || newAcks != 0) { + int oldAckSize = oldAcks == 0 ? 0 : oldAcks * 4 + 1; + int newAckSize = newAcks == 0 ? 0 : newAcks * 4 + 1; + + byte[] newData = new byte[newPacket.Data.Length - newAckSize + oldAckSize]; + Array.Copy(newPacket.Data, 0, newData, 0, newPacket.Data.Length - newAckSize); + + if (newAcks != 0) + newData[0] ^= Helpers.MSG_APPENDED_ACKS; + + if (oldAcks != 0) { + newData[0] |= Helpers.MSG_APPENDED_ACKS; + Array.Copy(oldPacket.Data, oldPacket.Data.Length - oldAckSize, newData, newPacket.Data.Length - newAckSize, oldAckSize); + } + + newPacket.Data = newData; + } + } + + // ProxySim: return the proxy for the specified sim, creating it if it doesn't exist + private IPEndPoint ProxySim(IPEndPoint simEndPoint) { + lock(proxyEndPoints) + if (proxyEndPoints.Contains(simEndPoint)) + // return the existing proxy + return (IPEndPoint)proxyEndPoints[simEndPoint]; + else { + // return a new proxy + SimProxy simProxy = new SimProxy(proxyConfig, simEndPoint, this); + IPEndPoint fakeSim = simProxy.LocalEndPoint(); + Log("creating proxy for " + simEndPoint + " at " + fakeSim); + simProxy.Run(); + proxyEndPoints.Add(simEndPoint, fakeSim); + simProxies.Add(simEndPoint, simProxy); + return fakeSim; + } + } + + // AddHandler: remember which sim proxy corresponds to a given sim + private void AddHandler(EndPoint endPoint, SimProxy proxy) { + lock(proxyHandlers) + proxyHandlers.Add(endPoint, proxy); + } + + // SimProxy: proxy for a single simulator + private class SimProxy { + private ProxyConfig proxyConfig; + private IPEndPoint remoteEndPoint; + private Proxy proxy; + private Socket socket; + private object sequenceLock = new Object(); + private ushort incomingSequence; + private ushort outgoingSequence; + private ArrayList incomingInjections; + private ArrayList outgoingInjections; + private Hashtable incomingAcks; + private Hashtable outgoingAcks; + + // SimProxy: construct a proxy for a single simulator + public SimProxy(ProxyConfig proxyConfig, IPEndPoint simEndPoint, Proxy proxy) { + this.proxyConfig = proxyConfig; + remoteEndPoint = new IPEndPoint(simEndPoint.Address, simEndPoint.Port); + this.proxy = proxy; + socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + socket.Bind(new IPEndPoint(proxyConfig.clientFacingAddress, 0)); + proxy.AddHandler(remoteEndPoint, this); + Reset(); + } + + // Reset: start a new session + public void Reset() { + lock(sequenceLock) { + incomingSequence = 0; + outgoingSequence = 0; + incomingInjections = new ArrayList(); + outgoingInjections = new ArrayList(); + incomingAcks = new Hashtable(); + outgoingAcks = new Hashtable(); + } + } + + // ResendPackets: resend packets that haven't been ACKed + private void ResendPackets() { + try { + for (;;Thread.Sleep(1000)) + lock(sequenceLock) { + foreach (Packet packet in incomingAcks.Values) { + packet.Data[0] |= Helpers.MSG_RESENT; + SendPacket(packet); + } + + foreach (Packet packet in outgoingAcks.Values) { + packet.Data[0] |= Helpers.MSG_RESENT; + proxy.SendPacket(packet, remoteEndPoint); + } + } + } catch (Exception e) { + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); + } + } + + // return the endpoint that the client should communicate with + public IPEndPoint LocalEndPoint() { + lock(socket) + return (IPEndPoint)socket.LocalEndPoint; + } + + private byte[] receiveBuffer = new byte[4096]; + private EndPoint clientEndPoint = new IPEndPoint(IPAddress.Any, 0); + bool firstReceive = true; + + // Run: forward packets from the client to the sim + public void Run() { + (new Thread(new ThreadStart(ResendPackets))).Start(); + socket.BeginReceiveFrom(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, ref clientEndPoint, new AsyncCallback(ReceiveFromClient), null); + } + + // ReceiveFromClient: packet received from the client + private void ReceiveFromClient(IAsyncResult ar) { + try { + // pause listening and fetch the packet + int length; + lock(clientEndPoint) + lock(socket) + length = socket.EndReceiveFrom(ar, ref clientEndPoint); + Packet packet = new Packet(receiveBuffer, length, proxyConfig.protocol); + + // keep track of sequence numbers + lock(sequenceLock) + if (packet.Sequence > incomingSequence) + incomingSequence = packet.Sequence; + + // look for ACKs we're waiting for + packet = CheckAcks(packet, Direction.Outgoing); + + // modify sequence numbers to account for injections + packet = ModifySequence(packet, Direction.Outgoing); + + // forward packet via our fake client endpoint + proxy.HandlePacket(packet, remoteEndPoint, this); + + // send any packets queued for injection + if (firstReceive) { + firstReceive = false; + lock(proxy.queuedIncomingInjections) { + foreach (Packet queuedPacket in proxy.queuedIncomingInjections) + Inject(queuedPacket, Direction.Incoming); + proxy.queuedIncomingInjections = new ArrayList(); + } + } + + // resume listening + lock(clientEndPoint) + lock(socket) + socket.BeginReceiveFrom(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, ref clientEndPoint, new AsyncCallback(ReceiveFromClient), null); + } catch (Exception e) { + Console.WriteLine(e.Message); + Console.WriteLine(e.StackTrace); + } + } + + // HandlePacket: forward a packet from the sim to the client via our fake sim endpoint + public void HandlePacket(Packet packet) { + // keep track of sequence numbers + lock(sequenceLock) + if (packet.Sequence > outgoingSequence) + outgoingSequence = packet.Sequence; + + // send the packet + SendPacket(packet); + } + + // SendPacket: send a packet from the sim to the client via our fake sim endpoint + public void SendPacket(Packet packet) { + lock(clientEndPoint) + lock(socket) + socket.SendTo(packet.Data, packet.Data.Length, SocketFlags.None, clientEndPoint); + } + + // Inject: inject a packet + public void Inject(Packet packet, Direction direction) { + lock(sequenceLock) { + if (direction == Direction.Incoming) { + if (firstReceive) { + lock(proxy.queuedIncomingInjections) + proxy.queuedIncomingInjections.Add(packet); + return; + } + + incomingInjections.Add(++incomingSequence); + packet.Sequence = incomingSequence; + } else { + outgoingInjections.Add(++outgoingSequence); + packet.Sequence = outgoingSequence; + } + } + + if ((packet.Data[0] & Helpers.MSG_RELIABLE) != 0) + WaitForAck(packet, direction); + + if (direction == Direction.Incoming) { + lock (clientEndPoint) + lock (socket) + socket.SendTo(packet.Data, packet.Data.Length, SocketFlags.None, clientEndPoint); + } else + proxy.SendPacket(packet, remoteEndPoint); + } + + // WaitForAck: take care of resending a packet until it's ACKed + public void WaitForAck(Packet packet, Direction direction) { + lock(sequenceLock) { + Hashtable table = direction == Direction.Incoming ? incomingAcks : outgoingAcks; + table.Add(packet.Sequence, packet); + } + } + + // CheckAcks: check for and remove ACKs of packets we've injected + public Packet CheckAcks(Packet packet, Direction direction) { + lock(sequenceLock) { + Hashtable acks = direction == Direction.Incoming ? outgoingAcks : incomingAcks; + + if (acks.Count == 0) + return packet; + + // check for embedded ACKs + if (packet.Layout.Name == "PacketAck") { + bool changed = false; + Hashtable blocks = PacketUtility.Unbuild(packet); + Hashtable newBlocks = new Hashtable(); + foreach (Hashtable fields in blocks.Keys) { + ushort id = (ushort)((uint)fields["ID"]); + if (acks.Contains(id)) { + acks.Remove(id); + changed = true; + } else + newBlocks.Add(fields, blocks[fields]); + } + if (changed) { + Packet newPacket = PacketBuilder.BuildPacket("PacketAck", proxyConfig.protocol, newBlocks, packet.Data[0]); + SwapPacket(packet, newPacket); + packet = newPacket; + } + } + + // check for appended ACKs + if ((packet.Data[0] & Helpers.MSG_APPENDED_ACKS) != 0) { + byte ackCount = packet.Data[packet.Data.Length - 1]; + for (int i = 0; i < ackCount;) { + int offset = packet.Data.Length - (ackCount - i) * 4 - 1; + ushort ackID = (ushort)(packet.Data[offset] + (packet.Data[offset + 1] << 8)); + if (acks.Contains(ackID)) { + byte[] newData = new byte[packet.Data.Length - 4]; + Array.Copy(packet.Data, 0, newData, 0, offset); + Array.Copy(packet.Data, offset + 4, newData, offset, packet.Data.Length - offset - 4); + --newData[newData.Length - 1]; + packet.Data = newData; + --ackCount; + } else + ++i; + } + if (ackCount == 0) { + byte[] newData = new byte[packet.Data.Length - 1]; + Array.Copy(packet.Data, 0, newData, 0, packet.Data.Length - 1); + newData[0] ^= Helpers.MSG_APPENDED_ACKS; + packet.Data = newData; + } + } + } + + return packet; + } + + // ModifySequence: modify a packet's sequence number and ACK IDs to account for injections + public Packet ModifySequence(Packet packet, Direction direction) { + // TODO: after a period of time, roll injections into a base offset to avoid unbounded memory consumption. + + lock(sequenceLock) { + ArrayList ourInjections = direction == Direction.Outgoing ? outgoingInjections : incomingInjections; + ArrayList theirInjections = direction == Direction.Incoming ? outgoingInjections : incomingInjections; + + if (ourInjections.Count != 0) { + ushort newSequence = packet.Sequence; + foreach (ushort injection in ourInjections) + if (newSequence >= injection) + ++newSequence; + packet.Sequence = newSequence; + } + + if (theirInjections.Count != 0) { + if ((packet.Data[0] & Helpers.MSG_APPENDED_ACKS) != 0) { + int ackCount = packet.Data[packet.Data.Length - 1]; + for (int i = 0; i < ackCount; ++i) { + int offset = packet.Data.Length - (ackCount - i) * 4 - 2; + uint ackID = (uint)(packet.Data[offset] + (packet.Data[offset + 1] << 8)); + for (int j = theirInjections.Count - 1; j >= 0; --j) + if (ackID >= (ushort)theirInjections[j]) + --ackID; + packet.Data[offset + 0] = (byte)(ackID % 256); ackID >>= 8; + packet.Data[offset + 1] = (byte)(ackID % 256); ackID >>= 8; + packet.Data[offset + 2] = (byte)(ackID % 256); ackID >>= 8; + packet.Data[offset + 3] = (byte)(ackID % 256); ackID >>= 8; + } + } + + if (packet.Layout.Name == "PacketAck") { + Hashtable blocks = PacketUtility.Unbuild(packet); + foreach (Hashtable fields in blocks.Keys) { + if ((string)blocks[fields] == "Packets") { + uint ackID = (uint)fields["ID"]; + for (int i = theirInjections.Count - 1; i >= 0; --i) + if (ackID >= (ushort)theirInjections[i]) + --ackID; + fields["ID"] = ackID; + } + } + Packet newPacket = PacketBuilder.BuildPacket("PacketAck", proxyConfig.protocol, blocks, packet.Data[0]); + SwapPacket(packet, newPacket); + packet = newPacket; + } + } + } + + return packet; + } + } + + delegate Packet AddressChecker(Packet packet); + + Hashtable incomingCheckers = new Hashtable(); + Hashtable outgoingCheckers = new Hashtable(); + + // InitializeAddressCheckers: initialize delegates that check packets for addresses that need proxying + private void InitializeAddressCheckers() { + // TODO: Packets that I've never seen that appear to + // require checking are considered unhandled; these + // should be checked in a stable release. Packets that + // I've never seen that contain an IP and don't appear + // to require checking are considered mystery; these + // should be ignored in a stable release. Packets that + // are checked are considered unexpected if they come + // in the wrong direction; these should be ignored in a + // stable release. + AddChecker("SimulatorAssign", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddChecker("SimulatorStart", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddChecker("SimulatorPresentAtLocation", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddChecker("RegionPresenceResponse", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddChecker("AgentPresenceResponse", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddMystery("TrackAgentSession"); + AddMystery("ClearAgentSessions"); + AddChecker("LogFailedMoneyTransaction", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddMystery("DirFindQueryBackend"); + AddMystery("DirPeopleQueryBackend"); + AddMystery("OnlineStatusRequest"); + AddChecker("SpaceLocationTeleportReply", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddChecker("TeleportFinish", Direction.Incoming, new AddressChecker(CheckTeleportFinish)); + AddMystery("AddModifyAbility"); + AddMystery("RemoveModifyAbility"); + AddMystery("ViewerStats"); + AddChecker("EnableSimulator", Direction.Incoming, new AddressChecker(CheckEnableSimulator)); + AddMystery("KickUser"); + AddMystery("LogLogin"); + AddMystery("DataServerLogout"); + AddMystery("RequestLocationGetAccess"); + AddMystery("RequestLocationGetAccessReply"); + AddMystery("FindAgent"); + AddMystery("RoutedMoneyBalanceReply"); + AddChecker("UserLoginLocationReply", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddChecker("SpaceLoginLocationReply", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddMystery("RemoveMemeberFromGroup"); + AddMystery("RpcScriptRequestInboundForward"); + AddMystery("MailPingBounce"); + AddMystery("OpenCircuit"); + AddChecker("ClosestSimulator", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddChecker("CrossedRegion", Direction.Incoming, new AddressChecker(CheckCrossedRegion)); + AddChecker("NeighborList", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + AddChecker("AgentToNewRegion", Direction.Incoming, new AddressChecker(LogUnhandledPacket)); + } + + // AddChecker: add a checker delegate + private void AddChecker(String name, Direction direction, AddressChecker checker) { + (direction == Direction.Incoming ? incomingCheckers : outgoingCheckers).Add(name, checker); + (direction == Direction.Incoming ? outgoingCheckers : incomingCheckers).Add(name, new AddressChecker(LogUnexpectedPacket)); + } + + // AddMystery: add a checker delegate that logs packets we're watching for development purposes + private void AddMystery(String name) { + incomingCheckers.Add(name, new AddressChecker(LogIncomingMysteryPacket)); + outgoingCheckers.Add(name, new AddressChecker(LogOutgoingMysteryPacket)); + } + + // GenericCheck: replace the sim address in a packet with our proxy address + private Packet GenericCheck(Packet packet, string block, string fieldIP, string fieldPort, bool active) { + Hashtable blocks = PacketUtility.Unbuild(packet); + + IPEndPoint realSim = new IPEndPoint((IPAddress)PacketUtility.GetField(blocks, block, fieldIP), Convert.ToInt32(PacketUtility.GetField(blocks, block, fieldPort))); + IPEndPoint fakeSim = ProxySim(realSim); + PacketUtility.SetField(blocks, block, fieldIP, fakeSim.Address); + PacketUtility.SetField(blocks, block, fieldPort, (ushort)fakeSim.Port); + + if (active) + activeCircuit = realSim; + + return PacketBuilder.BuildPacket(packet.Layout.Name, proxyConfig.protocol, blocks, packet.Data[0]); + } + + // CheckTeleportFinish: check TeleportFinish packets + private Packet CheckTeleportFinish(Packet packet) { + return GenericCheck(packet, "Info", "SimIP", "SimPort", true); + } + + // CheckEnableSimulator: check EnableSimulator packets + private Packet CheckEnableSimulator(Packet packet) { + return GenericCheck(packet, "SimulatorInfo", "IP", "Port", false); + } + + // CheckCrossedregion: check CrossedRegion packets + private Packet CheckCrossedRegion(Packet packet) { + return GenericCheck(packet, "RegionData", "SimIP", "SimPort", true); + } + + // LogPacket: log a packet dump + private Packet LogPacket(Packet packet, string type) { + Log(type + " packet:"); + Log(packet); + + return packet; + } + + // LogUnhandledPacket: log a packet that probably ought to have been checked + private Packet LogUnhandledPacket(Packet packet) { + return LogPacket(packet, "unhandled"); + } + + // LogUnexpectedPacket: log a packet that we expected to be going the opposite direction + private Packet LogUnexpectedPacket(Packet packet) { + return LogPacket(packet, "unexpected"); + } + + // LogIncomingMysteryPacket: log an incoming packet we're watching for development purposes + private Packet LogIncomingMysteryPacket(Packet packet) { + return LogPacket(packet, "incoming mystery"); + } + + // LogOutgoingMysteryPacket: log an outgoing packet we're watching for development purposes + private Packet LogOutgoingMysteryPacket(Packet packet) { + return LogPacket(packet, "outgoing mystery"); + } + } + + // LoginDelegate: specifies a delegate to be called when the client logs in + public delegate void LoginDelegate(SessionInformation session); + + // PacketDelegate: specifies a delegate to be called when a packet passes through the proxy + public delegate Packet PacketDelegate(Packet packet, IPEndPoint endPoint); + + // SessionInformation: contains information about a Second Life session + public class SessionInformation { + public LLUUID agentID; + public LLUUID sessionID; + } + + // Direction: specifies whether a packet is going to the client (Incoming) or to a sim (Outgoing) + public enum Direction { + Incoming, + Outgoing + } + + // PacketUtility: provides various utility methods for working with libsecondlife Packet objects + public class PacketUtility { + // Unbuild: deconstruct a packet into a Hashtable of blocks suitable for passing to PacketBuilder + public static Hashtable Unbuild(Packet packet) { + Hashtable blockTable = new Hashtable(); + foreach (Block block in packet.Blocks()) { + Hashtable fieldTable = new Hashtable(); + foreach (Field field in block.Fields) + fieldTable[field.Layout.Name] = field.Data; + blockTable[fieldTable] = block.Layout.Name; + } + + return blockTable; + } + + // GetField: given a table of blocks, return the value of the specified block and field + // In the case of packets with variable blocks, an arbitrary block will be used. + public static object GetField(Hashtable blocks, string block, string field) { + foreach (Hashtable fields in blocks.Keys) + if ((string)blocks[fields] == block) + if (fields.Contains(field)) + return fields[field]; + + return null; + } + + // SetField: given a table of blocks, update the value of the specified block and field + // In the case of packets with variable blocks, all blocks will be updated. + public static void SetField(Hashtable blocks, string block, string field, object value) { + foreach (Hashtable fields in blocks.Keys) + if ((string)blocks[fields] == block) + if (fields.Contains(field)) + fields[field] = value; + } + + // VariableToString: convert a variable field to a string + // Returns an empty string if the field can't be decoded as UTF-8 + public static string VariableToString(byte[] field) { + try { + byte[] withoutNull = new byte[field.Length - 1]; + Array.Copy(field, 0, withoutNull, 0, field.Length - 1); + return System.Text.Encoding.UTF8.GetString(withoutNull); + } catch { + return ""; + } + } + + // StringtoVariable: convert a string to a variable field + // Returns an empty field if the string can't be encoded as UTF-8 + public static byte[] StringToVariable(string str) { + try { + byte[] bytes = System.Text.Encoding.UTF8.GetBytes(str); + byte[] withNull = new byte[bytes.Length + 1]; + Array.Copy(bytes, 0, withNull, 0, bytes.Length); + withNull[withNull.Length - 1] = 0; + return withNull; + } catch { + byte[] empty = new byte[1]; + empty[0] = 0; + return empty; + } + } + } +} diff --git a/applications/SLProxy/XmlRpcCS.dll b/applications/SLProxy/XmlRpcCS.dll new file mode 100755 index 0000000000000000000000000000000000000000..cb3f12d988eba52ac8832b16ab178270fbc6ff0a GIT binary patch literal 26624 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 f8MugtM2=3>)>`S&IXVF5Y literal 0 HcmV?d00001 diff --git a/applications/SLProxy/keywords.txt b/applications/SLProxy/keywords.txt new file mode 100644 index 00000000..6f8c8b68 --- /dev/null +++ b/applications/SLProxy/keywords.txt @@ -0,0 +1,1509 @@ +X +Y +Z +VotedForCandidate +AddFlags +Everyone +ReservedNewbie +MapData +AddItem +MeanCollision +RezScript +AvatarSitResponse +InventoryAssetResponse +KillObject +ProposalID +SerialNum +Duration +ScriptQuestion +AddCircuitCode +UseCircuitCode +ViewerCircuitCode +ScriptAnswerYes +PartnerID +DirLandQuery +TeleportStart +EmpoweredBlock +LogMessages +DropGroupIM +AboutText +VisualParam +GroupPrims +SelectedPrims +ID +UUIDNameRequest +UUIDGroupNameRequest +MoneyTransactionsRequest +GroupAccountTransactionsRequest +MapNameRequest +MailTaskSimRequest +LandScriptsRequest +UpdateSimulator +BillableFactor +ObjectBonusFactor +EnableSimulator +DisableSimulator +ConfirmEnableSimulator +LayerType +ParcelOverlay +AdjustBalance +GroupOwned +IP +ChatFromViewer +FirstLogin +GroupTitle +MapLayerReply +CompoundMsgID +CameraConstraint +DownloadTotals +ChatMessage +ErrorValue +GenCounter +FrozenData +URLBlock +ChildAgentDying +To +ParcelDirFeeCurrent +ObjectDuplicate +InventoryData +ReplyData +ResetList +SimulatorPauseState +MediaID +RedirectGridX +RedirectGridY +TransferID +Transacted +TexturesChanged +UserLookAt +TestBlock1 +SensedData +UpdateBlock +EmpoweredID +ClassifiedGodDelete +LocationPos +ObjectGrabUpdate +TaxDate +StartDateTime +ObjectUpdateCached +Packets +FailureType +UpdateGroupInfo +InventoryFile +ObjectPermissions +RevokePermissions +UpdateFlags +ObjectExportSelected +RezSelected +AutoPilot +UpdateMuteListEntry +RemoveMuteListEntry +SetSimStatusInDatabase +SetSimPresenceInDatabase +CameraProperty +GroupRecallBallot +BrushSize +StartExpungeProcess +SimulatorSetMap +RegionPresenceRequestByRegionID +TransferEnergy +ParcelObjectOwnersReply +GroupMembersReply +GroupOfficersAndMembersReply +RequestRegionInfo +AABBMax +RequestPayPrice +SimulatorPresentAtLocation +AgentRequestSit +AABBMin +ClassifiedFlags +ControlFlags +TeleportRequest +SpaceLocationTeleportRequest +LeaderBoardRequest +ScriptTeleportRequest +DateUTC +TaskIDs +RequestResult +ReputationAgentAssign +CanAcceptAgents +ObjectSaleInfo +KillChildAgents +Balance +DerezContainer +ObjectData +CameraAtAxis +InfoBlock +OwnershipCost +AvatarNotesUpdate +PID +TimeString +DirPopularReply +TerrainHeightRange00 +SimData +TerrainHeightRange01 +TerrainHeightRange10 +TerrainHeightRange11 +UpdateInventoryItem +MoveInventoryItem +CopyInventoryItem +RemoveInventoryItem +CreateInventoryItem +PathTwistBegin +CRC +AttachmentPoint +TelehubBlock +FOVBlock +StartLocationData +PositionData +TimeSinceLast +MapImage +Objects +URL +CreationDate +JointPivot +RateeID +FPS +HasTelehub +PathEnd +ScriptDataReply +MapBlockReply +PropertiesData +ViewerEffect +FreezeUser +OwnerPrims +ScriptTime +ObjectGrab +ToAgentID +ProxyBlock +SimulatorMapUpdate +TransferPacket +ObjectName +OriginalName +CompletePingCheck +OnlineStatus +TrackOnlineStatus +IgnoreOnlineStatus +ObjectDrop +UseBigPackets +ParcelAccessListReply +RpcChannelReply +RegionPresenceResponse +AgentPresenceResponse +CharterMember +EdgeData +NameData +SimName +UserReport +DownloadPriority +ToAgentId +Mag +DirPopularQuery +ParcelPropertiesRequestByID +ObjectLink +RpcScriptReplyInbound +BoardData +RezData +RemoveInventoryObjects +Officer +GroupProposalBallot +RPCServerIP +Far +GodSessionID +ViewerDigest +FLAboutText +RegionHandshakeReply +GroupActiveProposalItemReply +MapItemReply +Seconds +UpdateUserInfo +AggregatePermTexturesOwner +Set +Key +NewName +AgentID +OnlineStatusRequest +DataAgentAccessRequest +EventNotificationRemoveRequest +Arc +NewFolderID +RegionX +RegionY +UUIDSoundTriggerFar +RequestData +Msg +Top +MiscStats +Pos +ImageID +DataPacket +ObjectDehinge +You +ScriptControlChange +LoadURL +SetCPURatio +NameValueData +AtomicPassObject +ViewerFrozenMessage +HealthMessage +LogTextMessage +TimeDilation +Contribution +SetGroupContribution +Offline +SecPerDay +Members +FailedResends +CameraCenter +CameraLeftAxis +ExBlock +Channel +NetTest +DiscardLevel +LayerID +RatorID +GrabOffset +SimPort +PricePerMeter +RegionFlags +VoteResult +ParcelDirFeeEstimate +ModifyBlock +InventoryBlock +ReplyBlock +RequireMask +ValidUntil +VelocityInterpolateOn +ClassifiedDelete +FLImageID +AllowPublish +SitName +OfficerTitle +RegionsVisited +RecallID +DirClassifiedReply +AvatarClassifiedReply +ReputationIndividualReply +MediaURL +CompleteAgentMovement +SpaceIP +ClassifiedID +LocalID +RemoveItem +LogFailedMoneyTransaction +ViewerStartAuction +StartAuction +NameValueName +AngVelX +DuplicateFlags +AngVelY +AngVelZ +TextColor +SlaveID +Charter +TargetBlock +AlertData +CheckParcelAuctions +ParcelAuctions +NameValuePair +RemoveNameValuePair +GetNameValuePair +BulkUpdateInventory +UpdateTaskInventory +RemoveTaskInventory +MoveTaskInventory +RequestTaskInventory +ReplyTaskInventory +DeclineInventory +AggregatePermInventory +SimulatorInfo +MoneyTransactionsReply +GroupAccountTransactionsReply +MailTaskSimReply +WearableData +StatisticsData +AccessOK +Enabled +Savings +SimulatorLoad +InternalRegionIP +ExternalRegionIP +CreateGroupRequest +JoinGroupRequest +LeaveGroupRequest +InviteGroupRequest +LiveHelpGroupRequest +ServerVersion +PriceParcelClaimFactor +BillableArea +ScriptCount +ObjectID +ObjectFlagUpdate +ActiveOnly +RequestInventoryAsset +RedoLand +TravelAccess +ChangedGrid +Details +LocationX +SaleType +ObjectExportReply +LocationY +LocationZ +EconomyData +HeadRotation +DeleteOnCompletion +PublicPort +CurrentTaxes +DirClassifiedQuery +RequestParcelTransfer +ObjectCapacity +RequestID +GranterName +RequestXfer +ObjectTaxCurrent +LightTaxCurrent +LandTaxCurrent +GroupTaxCurrent +FetchInventoryDescendents +InventoryDescendents +Descendents +PurgeInventoryDescendents +ShowDir +Timestamp +GlobalPos +LimitedToEstate +GrabOffsetInitial +IsTrial +FinalizeLogout +ObjectDuplicateOnRay +GroupMembershipCount +MethodData +ActivateGestures +DeactivateGestures +ProposalData +PosGlobal +SearchID +RezMultipleAttachmentsFromInv +SearchName +VersionString +CreateGroupReply +ActualArea +RevokedID +Message +ClickAction +AssetUploadComplete +EstimatedTaxes +RequestType +UUID +BaseMask +NetBlock +GlobalX +GlobalY +CopyRotates +KickUserAck +TopPick +SessionID +GlobalZ +CallVote +DeclineFriendship +FormFriendship +TerminateFriendship +TaskData +SimWideMaxPrims +TotalPrims +SourceFilename +ProfileBegin +MoneyDetailsRequest +Request +GroupAccountDetailsRequest +GroupActiveProposalsRequest +VoteQuorum +StringValue +ClosestSimulator +Version +OtherCount +ChatData +IsGroupOwned +EnergyEfficiency +MaxPlace +PickInfoUpdate +PickDelete +ScriptReset +Requester +RevokerID +ElectionID +ForSale +NearestLandingRegionReply +RecordAgentPresence +EraseAgentPresence +ParcelID +Godlike +TotalDebits +Direction +Appearance +HealthData +LeftAxis +PositionBlock +LocationBlock +ObjectImage +TerrainStartHeight00 +TerrainStartHeight01 +TerrainStartHeight10 +ObjectHinge +TerrainStartHeight11 +MetersPerGrid +WaterHeight +FetchInventoryReply +MoneySummaryReply +GroupAccountSummaryReply +AttachedSound +ParamInUse +GodKickUser +PickName +TaskName +SkillFlags +ParcelGodReserveForNewbie +SubType +ObjectCount +RegionPresenceRequestByHandle +RezSingleAttachmentFromInv +ChildAgentUpdate +XPos +YPos +ZPos +ToID +ViewerPort +IsOwnerGroup +AgentHeightWidth +VerticalAngle +WearableType +AggregatePermNextOwner +ShowInList +PositionSuggestion +UpdateParcel +ClearAgentSessions +SetAlwaysRun +NVPair +ObjectSpinStart +UseEstateSun +LogoutBlock +RelayLogControl +RegionID +Creator +ViewerRegion +ProposalText +DirEventsReply +EventInfoReply +GroupElectionInfoReply +UserInfoReply +PathRadiusOffset +SessionInfo +TextureData +ChatPass +TargetID +DefaultPayPrice +UserLocation +MaxPrims +RegionIP +LandmarkID +InitiateDownload +Name +OtherCleanTime +TeleportPriceExponent +Gain +VelX +PacketAck +PathSkew +Negative +VelY +SimulatorShutdownRequest +NearestLandingRegionRequest +VelZ +OtherID +MapLayerRequest +PatchVersion +ObjectScale +TargetIP +Redo +MoneyBalance +TrackAgent +MaxX +Data +MaxY +TextureAnim +ReturnIDs +Date +GestureUpdate +AgentWearablesUpdate +AgentDataUpdate +Hash +Left +Mask +ForceMouselook +RequestLocationGetAccess +Success +ObjectGroup +SunHour +MinX +ScriptSensorReply +MinY +Command +Desc +AttachmentNeedsSave +HistoryItemData +AgentCachedTexture +East +Subject +GodExpungeUser +QueryReplies +ObjectCategory +Time +CreateLandmarkForEvent +ParentID +Ping +Perp +Code +InvType +AgentFOV +BulkMoneyTransfer +Audible +AuctionData +IDBlock +ReputationData +West +ElectionData +Undo +Info +Area +Behavior +SimCrashed +Text +AgentToNewRegion +PriceGroupCreate +ObjectShape +PosX +PosY +MuteCRC +PosZ +Size +FromAddress +Body +FileData +List +KickUser +OtherPrims +RunTime +RpcScriptRequestInboundForward +More +Majority +SenderID +MetersTraveled +Stat +FromAgentID +Item +SoundID +User +RemoteInfos +Vote +Prey +UsecSinceStart +RayStart +ParcelData +CameraUpAxis +ScriptDialog +MasterParcelData +Invalid +MinPlace +ProfileCurve +ParcelAccessListUpdate +MuteListUpdate +SendPacket +SendXferPacket +LastName +From +Port +MemberTitle +LogParcelChanges +DeRezObject +IsTemporary +IsComplete +InsigniaID +CheckFlags +TransferPriority +EventID +FromAgentId +Type +ReportData +LeaderBoardData +RequestBlock +GrantData +DetachAttachmentIntoInv +ParcelDisableObjects +Sections +GodLevel +StartGroupIM +PayPriceReply +QueryID +CameraEyeOffset +AgentPosition +GrabPosition +GrantModification +RevokeModification +OnlineNotification +OfflineNotification +SendPostcard +RequestFlags +MoneyHistoryRequest +MoneySummaryRequest +GroupMoneyHistoryRequest +GroupAccountSummaryRequest +ParamValue +GroupVoteHistoryRequest +Checksum +MaxAgents +CreateNewOutfitAttachments +RegionHandle +TeleportProgress +AgentQuitCopy +LocationValid +ToViewer +ParcelName +InviteOfficers +PriceObjectRent +ConnectAgentToUserserver +ConnectToUserserver +OfferCallingCard +AgentAccess +AcceptCallingCard +DeclineCallingCard +DataHomeLocationReply +EventLocationReply +UserLoginLocationReply +UserSimLocationReply +SpaceLoginLocationReply +TerseDateID +ObjectOwner +AssetID +AlertMessage +AgentAlertMessage +EstateOwnerMessage +ParcelMediaCommandMessage +Auction +Category +FilePath +ItemFlags +Invoice +IntervalDays +PathScaleX +FromTaskID +TimeInfo +PathScaleY +PublicCount +ParcelJoin +SimulatorBlock +UserBlock +GroupID +AgentVel +RequestImage +NetStats +AgentPos +AgentSit +Material +ObjectDeGrab +VelocityInterpolateOff +AuthorizedBuyerID +RemoveMemberFromGroup +GroupIM +AvatarPropertiesReply +GroupPropertiesReply +GroupProfileReply +Participants +SimOwner +SalePrice +Animation +CurrentDividend +OwnerID +NearestLandingRegionUpdated +PassToAgent +PreyAgent +SimStats +Options +LogoutReply +ObjectLocalID +Dropped +Destination +MasterID +TransferData +WantToMask +AvatarData +ParcelSelectObjects +ExtraParams +LogLogin +CreatorID +Summary +BuyObjectInventory +FetchInventory +InventoryID +PacketNumber +SetFollowCamProperties +ClearFollowCamProperties +SimulatorThrottleSettings +SequenceID +DataServerLogout +NameValue +PathShearX +PathShearY +ElectionType +Velocity +SecPerYear +FirstName +AttachedSoundGainChange +LocationID +Running +ObjectImportReply +AgentThrottle +NeighborList +PathTaperX +PathTaperY +GranterBlock +UseCachedMuteList +FailStats +StartGroupRecall +Tempfile +FounderName +BuyerID +DirPeopleReply +TransferInfo +AvatarPickerRequestBackend +AvatarPropertiesRequestBackend +UpdateData +ReporterID +GranterID +ButtonLabel +WantToText +ReportType +DataBlock +SimulatorReady +AnimationSourceList +RefreshViewer +SubscribeLoad +UnsubscribeLoad +Packet +UndoLand +SimAccess +MembershipFee +CreateInventoryFolder +UpdateInventoryFolder +MoveInventoryFolder +RemoveInventoryFolder +MoneyData +ObjectDeselect +NewAssetID +ObjectAdd +RayEndIsIntersection +CompleteAuction +CircuitCode +AgentMovementComplete +ViewerIP +Header +GestureFlags +XferID +StatValue +PickID +TaskID +GridsPerEdge +RayEnd +Throttles +UpAxis +AgentTextures +Radius +OffCircuit +Access +SquareMetersCredit +Filename +SecuredTemplateChecksumRequest +TemplateChecksumRequest +AgentPresenceRequest +ClassifiedInfoRequest +ParcelInfoRequest +ParcelObjectOwnersRequest +TeleportLandmarkRequest +EventInfoRequest +MovedIntoSimulator +ChatFromSimulator +PickInfoRequest +MoneyBalanceRequest +DirPeopleQuery +GroupElectionInfoRequest +GroupMembersRequest +GroupOfficersAndMembersRequest +TextureID +OldFolderID +UserInfoRequest +LandCollidersRequest +Handle +StartParcelRenameAck +StateLoad +ButtonIndex +CurrentElectionID +GetScriptRunning +SetScriptRunning +Health +FileID +CircuitInfo +ObjectBuy +ProfileEnd +Effect +TestMessage +ScriptMailRegistration +AgentSetAppearance +AvatarAppearance +RegionData +RequestingRegionData +LandingRegionData +SitTransform +TerrainBase0 +SkillsMask +AtAxis +TerrainBase1 +Reason +TerrainBase2 +TerrainBase3 +Params +PingID +Height +Region +MoneyHistoryReply +GroupMoneyHistoryReply +TelehubInfo +StateSave +AgentAnimation +AvatarAnimation +LogDwellTime +ParcelGodMarkAsContent +UsePhysics +JointType +TaxEstimate +ObjectTaxEstimate +LightTaxEstimate +TeleportLandingStatusChanged +LandTaxEstimate +GroupTaxEstimate +Buttons +Sender +Dialog +DestID +PricePublicObjectDelete +ObjectDelete +Delete +EventGodDelete +LastTaxDate +MapImageID +EndDateTime +TerrainDetail0 +TerrainDetail1 +TerrainDetail2 +TerrainDetail3 +Offset +ObjectDelink +TargetObject +IsEstateManager +CancelAuction +ObjectDetach +Compressed +PathBegin +BypassRaycast +WinnerID +ChannelType +NumberNonExemptMembers +NonExemptMembers +Agents +SimulatorStart +Enable +RevokedBlock +MemberData +ImageNotInDatabase +StartDate +AnimID +Serial +GroupElectionBallot +ControlPort +ModifyLand +Digest +Victim +Script +TemplateChecksumReply +PickInfoReply +MoneyBalanceReply +RoutedMoneyBalanceReply +RegionInfo +Sequence +GodUpdateRegionInfo +LocalX +LocalY +StartAnim +Location +Action +SearchDir +Active +TransferRequest +ScriptSensorRequest +MoneyTransferRequest +EjectGroupMemberRequest +SkillsText +Resent +Center +SharedData +PSBlock +UUIDNameBlock +Viewer +Method +TouchName +CandidateID +ParamData +GodlikeMessage +SystemMessage +BodyRotation +StartGroupElection +SearchRegions +Ignore +AnimationData +StatID +ItemID +AvatarStatisticsReply +ScriptDialogReply +RegionIDAndHandleReply +CameraAtOffset +VoteID +ParcelGodForceOwner +InviteData +CandidateData +PCode +SearchPos +PreyID +TerrainLowerLimit +EventFlags +TallyVotes +GroupInfoUpdated +Result +LookAt +PayButton +SelfCount +PacketCount +ParcelBuyPass +SimHandle +Identified +OldItemID +RegionPort +PriceEnergyUnit +Bitmap +TrackAgentSession +CacheMissType +VFileID +Response +GroupInsigniaID +FromID +Online +KickFlags +SysCPU +EMail +InviteMembers +IncludeMembers +AggregatePermTextures +ChatChannel +ReturnID +ObjectAttach +TargetPort +ObjectSpinStop +FullID +ActivateGroup +SysGPU +StartLure +SysRAM +ObjectPosition +SitPosition +StartTime +BornOn +CameraCollidePlane +EconomyDataRequest +TeleportLureRequest +FolderID +RegionHandleRequest +GestureRequest +ScriptDataRequest +AgentWearablesRequest +MapBlockRequest +LureID +CopyCenters +RegisterNewAgent +TotalColliderCount +ParamList +InventorySerial +EdgeDataPacket +AvatarPickerReply +ParcelDwellReply +IsForSale +MuteID +MeanCollisionAlert +CanAcceptTasks +ItemData +AnimationList +PassObject +Reputation +IntValue +TargetType +Amount +UpdateAttachment +RemoveAttachment +HeightWidthBlock +RequestObjectPropertiesFamily +ObjectPropertiesFamily +UserData +SessionBlock +IsReadable +ReputationMax +PathCurve +ReputationMin +Status +AlreadyVoted +ElectionInitiator +PlacesReply +DirPlacesReply +ParcelBuy +DirFindQueryBackend +DirPlacesQueryBackend +DirPeopleQueryBackend +DirGroupsQueryBackend +DirClassifiedQueryBackend +DirPicksQueryBackend +DirLandQueryBackend +DirPopularQueryBackend +SnapshotID +Aspect +LogoutDemand +HistoryData +VoteData +EstimatedDividend +ParamSize +VoteCast +EveryoneMask +CastsShadows +SetSunPhase +ObjectSpinUpdate +MaturePublish +UseExistingAsset +ParcelLocalID +TeleportCancel +UnixTime +QueryFlags +LastExecFroze +AlwaysRun +Bottom +ButtonData +SoundData +ViewerStats +RegionHandshake +Description +ObjectDescription +ParamType +UUIDNameReply +UUIDGroupNameReply +SaveAssetIntoInventory +UserInfo +AnimSequenceID +NVPairs +ParcelAccessListRequest +UserListRequest +MuteListRequest +StartPeriod +RpcChannelRequest +PlacesQuery +DirPlacesQuery +Distance +SortOrder +Hunter +TotalScriptCount +SunAngVelocity +InventoryUpdate +ImagePacket +BinaryBucket +StartGroupProposal +EnergyLevel +PriceForListing +Scale +ParentEstateID +Extra2 +Throttle +SimIP +GodID +TeleportMinPrice +VoteItem +ObjectRotation +SitRotation +SnapSelection +TerrainRaiseLimit +Quorum +TokenBlock +AgentBlock +CommandBlock +PricePublicObjectDecay +SpawnPointPos +AttachedSoundCutoffRadius +VolumeDetail +TasksPaused +Range +FromAgentName +AddModifyAbility +RemoveModifyAbility +PublicIP +TeleportFailed +OnlineStatusReply +DataAgentAccessReply +RequestLocationGetAccessReply +RequestAvatarInfo +PreloadSound +ScreenshotID +OldestUnacked +SimulatorIP +ObjectImport +MoneyMax +Value +JointAxisOrAnchor +Test0 +MoneyMin +Test1 +Test2 +SunPhase +Place +Phase +ParcelDivide +PriceObjectClaim +VoteTime +Field +Ratio +JoinGroupReply +LiveHelpGroupReply +Agent +Score +ExpungeData +Image +ObjectClickAction +Delta +InitiateUpload +Parameter +Flags +Plane +Width +VoteText +Right +DirFindQuery +Textures +EventData +Final +TelehubPos +ReportAutosaveCrash +Reset +CreateTrustedCircuit +DenyTrustedCircuit +Codec +Level +Modal +ChildAgentUnknown +LandingType +ScriptRunningReply +MoneyDetailsReply +Reply +TelehubRot +RequestFriendship +AcceptFriendship +GroupAccountDetailsReply +DwellInfo +AgentResume +ItemType +MailFilter +Disconnect +SimPosition +SimWideTotalPrims +Index +BaseFilename +SimFilename +LastOwnerID +EmailMessageRequest +MapItemRequest +AgentCount +InitializeLure +HelloBlock +FuseBlock +MessageBlock +ClassifiedInfoUpdate +RegionPos +ParcelMediaUpdate +GridX +GridY +AuctionID +VoteType +CategoryID +Token +AggregatePerms +StartParcelRemoveAck +ObjectSelect +ForceObjectSelect +Price +SunDirection +ChangeInventoryItemFlags +Force +TransactionBlock +PowersMask +Stamp +RelatedID +TotalCredits +State +TextureIndex +SimPaused +InviteeID +ParcelReclaim +Money +PathTwist +AuthBuyerID +Color +SourceType +World +QueryData +Users +SysOS +Notes +AvatarID +FounderID +StipendEstimate +LocationLookAt +Sound +Cover +TextureEntry +SquareMetersCommitted +ChannelID +Dwell +North +AgentUpdate +PickGodDelete +UpdateInventoryItemAsset +HostName +PriceParcelClaim +ParcelClaim +ProfileHollow +Count +South +Entry +ObjectUpdateCompressed +Group +AgentPause +InternalScriptMail +FindAgent +AgentData +FolderData +AssetBlock +CloseCircuit +LogControl +TeleportFinish +PathRevolutions +ClassifiedInfoReply +ParcelInfoReply +LandCollidersReply +AutosaveData +SetStartLocation +PassHours +AttachmentPt +ParcelFlags +NumVotes +AvatarPickerRequest +TeleportLocationRequest +DataHomeLocationRequest +EventNotificationAddRequest +ParcelDwellRequest +ViewerLoginLocationRequest +ViewerSimLocationRequest +EventLocationRequest +EndPeriod +SetStartLocationRequest +UserLoginLocationRequest +QueryStart +AvatarTextureUpdate +RequestGrantedProxies +GrantedProxies +RPCServerPort +Bytes +Extra +ForceScriptControlRelease +ParcelRelease +VFileType +ImageData +SpaceServerSimulatorTimeMessage +SimulatorViewerTimeMessage +Rotation +Selection +TransactionData +OperationData +ExpirationDate +AgentName +ParcelDeedToGroup +DirPicksReply +AvatarPicksReply +AgentInfo +MoneyTransferBackend +NextOwnerMask +MuteData +PassPrice +SourceID +TotalScriptTime +ShowMembersInGroupDir +TeleportFlags +AssetData +SlaveParcelData +MultipleObjectUpdate +ObjectUpdate +ImprovedTerseObjectUpdate +ConfirmXferPacket +StartPingCheck +SimWideDeletes +UserListReply +IsPhantom +AgentList +RezObject +TaskLocalID +ClaimDate +MergeParcel +Priority +Building +QueryText +ReturnType +FetchFolders +SimulatorPublicHostBlock +HeaderData +GroupBlock +RequestMultipleObjects +RetrieveInstantMessages +DequeueInstantMessages +OpenCircuit +SecureSessionID +CrossedRegion +DirGroupsReply +AvatarGroupsReply +EmailMessageReply +GroupVoteHistoryItemReply +ViewerPosition +Position +ParentEstate +MuteName +StartParcelRename +BulkParcelRename +ParcelRename +ViewerFilename +Positive +UserReportInternal +AvatarPropertiesRequest +ParcelPropertiesRequest +GroupPropertiesRequest +GroupProfileRequest +AgentDataUpdateRequest +PriceObjectScaleFactor +DirPicksQuery +OpenEnrollment +GroupData +PauseBlock +RequestGodlikePowers +GrantGodlikePowers +TransactionID +DestinationID +Controls +FirstDetachAll +EstateID +ImprovedInstantMessage +AgentQuit +WantToFlags +CheckParcelSales +ParcelSales +CurrentInterval +PriceRentLight +MediaAutoScale +NeighborBlock +LayerData +NVPairData +TeleportLocal +LayersPaused +VoteInitiator +MailPingBounce +TypeData +OwnerIDs +SystemKickUser +ErrorCode +SLXML_ID +TransactionTime +TimeToLive +StartParcelRemove +BulkParcelRemove +DirGroupsQuery +BonusEstimate +MusicURL +CompleteLure +ParcelPrimBonus +EjectUser +CoarseLocationUpdate +ChildAgentPositionUpdate +GroupIndex +GroupName +PriceParcelRent +SimStatus +TransactionSuccess +LureType +GroupMask +SitObject +AssetNum +Override +LocomotionState +PriceUpload +RemoveParcel +ConfirmAuctionStart +RpcScriptRequestInbound +ParcelReturnObjects +TotalObjects +ObjectExtraParams +Questions +TransferAbort +TransferInventory +LandScriptsReply +Collada_ID +RayTargetID +ClaimPrice +ObjectProperties +ParcelProperties +LogoutRequest +AssetUploadRequest +ReputationIndividualRequest +MajorVersion +MinorVersion +SimulatorAssign +TransactionType +AvatarPropertiesUpdate +ParcelPropertiesUpdate +FetchItems +AbortXfer +DeRezAck +TakeControls +DirLandReply +SpaceLocationTeleportReply +IMViaEMail +StartExpungeProcessAck +RentPrice +GenericMessage +ChildAgentAlive +SpawnPointBlock +AttachmentBlock +RecallData +OfficerData +GroupOfficer +ObjectMaterial +OwnerName +AvatarNotesReply +CacheID +OwnerMask +TransferInventoryAck \ No newline at end of file diff --git a/applications/SLProxy/libsecondlife.dll b/applications/SLProxy/libsecondlife.dll new file mode 100755 index 0000000000000000000000000000000000000000..6875e88e0a25acc4b2954b15013aa31becdb4b8f GIT binary patch literal 72704 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

=Qf`8QJwHHMA~ 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 literal 0 HcmV?d00001 diff --git a/applications/SLProxy/protocol.txt b/applications/SLProxy/protocol.txt new file mode 100644 index 00000000..bb39cfc5 --- /dev/null +++ b/applications/SLProxy/protocol.txt @@ -0,0 +1 @@ +version 1.052 { TestMessage Low NotTrusted Zerocoded { TestBlock1 Single { Test1 U32 } } { NeighborBlock Multiple 4 { Test0 U32 } { Test1 U32 } { Test2 U32 } } } { SecuredTemplateChecksumRequest Fixed 0xFFFFFFFA NotTrusted Unencoded { TokenBlock Single { Token LLUUID } } } { PacketAck Fixed 0xFFFFFFFB NotTrusted Unencoded { Packets Variable { ID U32 } } } { OpenCircuit Fixed 0xFFFFFFFC NotTrusted Unencoded { CircuitInfo Single { IP IPADDR } { Port IPPORT } } } { CloseCircuit Fixed 0xFFFFFFFD NotTrusted Unencoded } { TemplateChecksumRequest Fixed 0xFFFFFFFE NotTrusted Unencoded } { TemplateChecksumReply Fixed 0xFFFFFFFF NotTrusted Unencoded { DataBlock Single { Checksum U32 } { MajorVersion U8 } { MinorVersion U8 } { PatchVersion U8 } { ServerVersion U8 } { Flags U32 } } { TokenBlock Single { Token LLUUID } } } { StartPingCheck High NotTrusted Unencoded { PingID Single { PingID U8 } { OldestUnacked U32 } } } { CompletePingCheck High NotTrusted Unencoded { PingID Single { PingID U8 } } } { AddCircuitCode Low Trusted Unencoded { CircuitCode Single { Code U32 } { SessionID LLUUID } { AgentID LLUUID } } } { UseCircuitCode Low NotTrusted Unencoded { CircuitCode Single { Code U32 } { SessionID LLUUID } { ID LLUUID } } } { LogControl Low Trusted Unencoded { Options Single { Level U8 } { Mask U32 } { Time BOOL } { Location BOOL } { RemoteInfos BOOL } } } { RelayLogControl Low Trusted Unencoded { Options Single { Level U8 } { Mask U32 } { Time BOOL } { Location BOOL } { RemoteInfos BOOL } } } { LogMessages Low Trusted Unencoded { Options Single { Enable BOOL } } } { NeighborList High Trusted Unencoded { NeighborBlock Multiple 4 { IP IPADDR } { Port IPPORT } { PublicIP IPADDR } { PublicPort IPPORT } { RegionID LLUUID } { Name Variable 1 } { SimAccess U8 } } } { SimulatorAssign Low Trusted Zerocoded { RegionInfo Single { GridsPerEdge S32 } { MetersPerGrid F32 } { Handle U64 } { UsecSinceStart U64 } { SecPerDay U32 } { SecPerYear U32 } { SunDirection LLVector3 } { SunAngVelocity LLVector3 } { IP IPADDR } { Port IPPORT } } { NeighborBlock Multiple 4 { IP IPADDR } { Port IPPORT } { PublicIP IPADDR } { PublicPort IPPORT } { Name Variable 1 } { SimAccess U8 } } } { SpaceServerSimulatorTimeMessage Low Trusted Unencoded { TimeInfo Single { UsecSinceStart U64 } { SecPerDay U32 } { SecPerYear U32 } { SunDirection LLVector3 } { SunPhase F32 } { SunAngVelocity LLVector3 } } } { ClosestSimulator Medium Trusted Unencoded { SimulatorBlock Single { IP IPADDR } { Port IPPORT } { Handle U64 } } { Viewer Single { ID LLUUID } } } { AvatarTextureUpdate Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { TexturesChanged BOOL } } { WearableData Variable { CacheID LLUUID } { TextureIndex U8 } } { TextureData Variable { TextureID LLUUID } } } { SimulatorMapUpdate Low Trusted Unencoded { MapData Single { Flags U32 } } } { SimulatorSetMap Low Trusted Unencoded { MapData Single { RegionHandle U64 } { Type S32 } { MapImage LLUUID } } } { SubscribeLoad Low Trusted Unencoded } { UnsubscribeLoad Low Trusted Unencoded } { SimulatorStart Low Trusted Unencoded { ControlPort Single { Port IPPORT } { PublicIP IPADDR } { PublicPort IPPORT } } { PositionSuggestion Single { Ignore BOOL } { GridX S32 } { GridY S32 } } } { SimulatorReady Low Trusted Zerocoded { SimulatorBlock Single { SimName Variable 1 } { SimAccess U8 } { RegionFlags U32 } { RegionID LLUUID } { EstateID U32 } { ParentEstateID U32 } } { TelehubBlock Single { HasTelehub BOOL } { TelehubPos LLVector3 } } } { TelehubInfo Low NotTrusted Unencoded { TelehubBlock Single { ObjectID LLUUID } { ObjectName Variable 1 } { TelehubPos LLVector3 } { TelehubRot LLQuaternion } } { SpawnPointBlock Variable { SpawnPointPos LLVector3 } } } { SimulatorPresentAtLocation Low Trusted Unencoded { SimulatorPublicHostBlock Single { Port IPPORT } { SimulatorIP IPADDR } { GridX U32 } { GridY U32 } } { NeighborBlock Multiple 4 { IP IPADDR } { Port IPPORT } } { SimulatorBlock Single { SimName Variable 1 } { SimAccess U8 } { RegionFlags U32 } { RegionID LLUUID } { EstateID U32 } { ParentEstateID U32 } } { TelehubBlock Variable { HasTelehub BOOL } { TelehubPos LLVector3 } } } { SimulatorLoad Low Trusted Unencoded { SimulatorLoad Single { TimeDilation F32 } { AgentCount S32 } { CanAcceptAgents BOOL } } { AgentList Variable { CircuitCode U32 } { X U8 } { Y U8 } } } { SimulatorShutdownRequest Low Trusted Unencoded } { RegionPresenceRequestByRegionID Low Trusted Unencoded { RegionData Variable { RegionID LLUUID } } } sim -> dataserver { RegionPresenceRequestByHandle Low Trusted Unencoded { RegionData Variable { RegionHandle U64 } } } { RegionPresenceResponse Low Trusted Zerocoded { RegionData Variable { RegionID LLUUID } { RegionHandle U64 } { InternalRegionIP IPADDR } { ExternalRegionIP IPADDR } { RegionPort IPPORT } { ValidUntil F64 } { Message Variable 1 } } } { RecordAgentPresence Low Trusted Unencoded { RegionData Single { RegionID LLUUID } } { AgentData Variable { AgentID LLUUID } { SessionID LLUUID } { SecureSessionID LLUUID } { LocalX S16 } { LocalY S16 } { TimeToLive S32 } { Status S32 } { EstateID U32 } } } { EraseAgentPresence Low Trusted Unencoded { AgentData Variable { AgentID LLUUID } } } { AgentPresenceRequest Low Trusted Unencoded { AgentData Variable { AgentID LLUUID } } } { AgentPresenceResponse Low Trusted Unencoded { AgentData Variable { AgentID LLUUID } { RegionIP IPADDR } { RegionPort IPPORT } { ValidUntil F64 } { EstateID U32 } } } { UpdateSimulator Low Trusted Unencoded { SimulatorInfo Single { RegionID LLUUID } { SimName Variable 1 } { EstateID U32 } { SimAccess U8 } } } { TrackAgentSession Low Trusted Unencoded { RegionData Single { RegionX F32 } { RegionY F32 } { SpaceIP IPADDR } { EstateID U32 } { AgentCount U32 } } { SessionInfo Variable { SessionID LLUUID } { ViewerIP IPADDR } { ViewerPort IPPORT } { GlobalX F64 } { GlobalY F64 } } } { ClearAgentSessions Low Trusted Unencoded { RegionInfo Single { RegionX U32 } { RegionY U32 } { SpaceIP IPADDR } } } { LogDwellTime Low Trusted Unencoded { DwellInfo Single { AgentID LLUUID } { SessionID LLUUID } { Duration F32 } { SimName Variable 1 } { RegionX U32 } { RegionY U32 } } } { LogFailedMoneyTransaction Low Trusted Unencoded { TransactionData Single { TransactionID LLUUID } { TransactionTime U32 } { TransactionType S32 } { SourceID LLUUID } { DestID LLUUID } { Flags U8 } { Amount S32 } { SimulatorIP IPADDR } { GridX U32 } { GridY U32 } { FailureType U8 } } } { UserReportInternal Low Trusted Zerocoded { ReportData Single { ReportType U8 } { Category U8 } { ReporterID LLUUID } { ViewerPosition LLVector3 } { AgentPosition LLVector3 } { ScreenshotID LLUUID } { ObjectID LLUUID } { OwnerID LLUUID } { LastOwnerID LLUUID } { CreatorID LLUUID } { SimName Variable 1 } { Summary Variable 1 } { Details Variable 2 } { VersionString Variable 1 } } { MeanCollision Variable { Perp LLUUID } { Time U32 } { Mag F32 } { Type U8 } } } { SetSimStatusInDatabase Low Trusted Unencoded { Data Single { RegionID LLUUID } { HostName Variable 1 } { X S32 } { Y S32 } { PID S32 } { AgentCount S32 } { TimeToLive S32 } { Status Variable 1 } } } { SetSimPresenceInDatabase Low Trusted Unencoded { SimData Single { RegionID LLUUID } { HostName Variable 1 } { GridX U32 } { GridY U32 } { PID S32 } { AgentCount S32 } { TimeToLive S32 } { Status Variable 1 } } } { EconomyDataRequest Low NotTrusted Unencoded } { EconomyData Low Trusted Zerocoded { Info Single { ObjectCapacity S32 } { ObjectCount S32 } { PriceEnergyUnit S32 } { PriceObjectClaim S32 } { PricePublicObjectDecay S32 } { PricePublicObjectDelete S32 } { PriceParcelClaim S32 } { PriceParcelClaimFactor F32 } { PriceUpload S32 } { PriceRentLight S32 } { TeleportMinPrice S32 } { TeleportPriceExponent F32 } { EnergyEfficiency F32 } { PriceObjectRent F32 } { PriceObjectScaleFactor F32 } { PriceParcelRent S32 } { PriceGroupCreate S32 } } } { AvatarPickerRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { QueryID LLUUID } } { Data Single { Name Variable 1 } } } { AvatarPickerRequestBackend Low Trusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { QueryID LLUUID } { GodLevel U8 } } { Data Single { Name Variable 1 } } } { AvatarPickerReply Low Trusted Unencoded { AgentData Single { AgentID LLUUID } { QueryID LLUUID } } { Data Variable { AvatarID LLUUID } { FirstName Variable 1 } { LastName Variable 1 } } } { PlacesQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { QueryID LLUUID } } { QueryData Single { QueryText Variable 1 } { QueryFlags U32 } { Category S8 } { SimName Variable 1 } } } { PlacesReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { QueryID LLUUID } } { QueryData Variable { OwnerID LLUUID } { Name Variable 1 } { Desc Variable 1 } { ActualArea S32 } { BillableArea S32 } { Flags U8 } { GlobalX F32 } { GlobalY F32 } { GlobalZ F32 } { SimName Variable 1 } { SnapshotID LLUUID } { Dwell F32 } { Price S32 } } } { DirFindQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { QueryFlags U32 } { QueryStart S32 } } } { DirFindQueryBackend Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { QueryFlags U32 } { QueryStart S32 } { EstateID U32 } { Godlike BOOL } { SpaceIP IPADDR } } } { DirPlacesQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { QueryFlags U32 } { Category S8 } { SimName Variable 1 } { QueryStart S32 } } } { DirPlacesQueryBackend Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { QueryFlags U32 } { Category S8 } { SimName Variable 1 } { EstateID U32 } { Godlike BOOL } { QueryStart S32 } } } { DirPlacesReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Variable { QueryID LLUUID } } { QueryReplies Variable { ParcelID LLUUID } { Name Variable 1 } { ForSale BOOL } { Auction BOOL } { ReservedNewbie BOOL } { Dwell F32 } } } { DirPeopleQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { Name Variable 1 } { Group Variable 1 } { Online U8 } { WantToFlags U32 } { SkillFlags U32 } { Reputation Variable 1 } { Distance Variable 1 } } } { DirPeopleQueryBackend Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { Name Variable 1 } { Group Variable 1 } { Online U8 } { WantToFlags U32 } { SkillFlags U32 } { Reputation Variable 1 } { Distance Variable 1 } { EstateID U32 } { Godlike BOOL } { SpaceIP IPADDR } } } { DirPeopleReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } } { QueryReplies Variable { AgentID LLUUID } { FirstName Variable 1 } { LastName Variable 1 } { Group Variable 1 } { Online BOOL } { Reputation S32 } } } { DirEventsReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } } { QueryReplies Variable { OwnerID LLUUID } { Name Variable 1 } { EventID U32 } { Date Variable 1 } { UnixTime U32 } { EventFlags U32 } } } { DirGroupsQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } } } { DirGroupsQueryBackend Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { EstateID U32 } { Godlike BOOL } } } { DirGroupsReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } } { QueryReplies Variable { GroupID LLUUID } { GroupName Variable 1 } { Members S32 } { OpenEnrollment BOOL } { MembershipFee S32 } } } { DirClassifiedQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { QueryFlags U32 } { Category U32 } } } { DirClassifiedQueryBackend Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { QueryFlags U32 } { Category U32 } { EstateID U32 } { Godlike BOOL } } } { DirClassifiedReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } } { QueryReplies Variable { ClassifiedID LLUUID } { Name Variable 1 } { ClassifiedFlags U8 } { CreationDate U32 } { ExpirationDate U32 } { PriceForListing S32 } } } { AvatarClassifiedReply Low Trusted Unencoded { AgentData Single { AgentID LLUUID } { TargetID LLUUID } } { Data Variable { ClassifiedID LLUUID } { Name Variable 1 } } } { ClassifiedInfoRequest Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { Data Single { ClassifiedID LLUUID } } } { ClassifiedInfoReply Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { Data Single { ClassifiedID LLUUID } { CreatorID LLUUID } { CreationDate U32 } { ExpirationDate U32 } { Category U32 } { Name Variable 1 } { Desc Variable 2 } { ParcelID LLUUID } { ParentEstate U32 } { SnapshotID LLUUID } { SimName Variable 1 } { PosGlobal LLVector3d } { ParcelName Variable 1 } { ClassifiedFlags U8 } { PriceForListing S32 } } } { ClassifiedInfoUpdate Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { ClassifiedID LLUUID } { Category U32 } { Name Variable 1 } { Desc Variable 2 } { ParcelID LLUUID } { ParentEstate U32 } { SnapshotID LLUUID } { PosGlobal LLVector3d } { ClassifiedFlags U8 } { PriceForListing S32 } } } { ClassifiedDelete Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { ClassifiedID LLUUID } } } { ClassifiedGodDelete Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { ClassifiedID LLUUID } { QueryID LLUUID } } } { DirPicksQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryFlags U32 } } } { DirPicksQueryBackend Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryFlags U32 } { EstateID U32 } { Godlike BOOL } } } { DirPicksReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } } { QueryReplies Variable { PickID LLUUID } { Name Variable 1 } { Enabled BOOL } } } { DirLandQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryFlags U32 } { ForSale BOOL } { Auction BOOL } { ReservedNewbie BOOL } } } { DirLandQueryBackend Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryFlags U32 } { ForSale BOOL } { Auction BOOL } { ReservedNewbie BOOL } { EstateID U32 } { Godlike BOOL } } } { DirLandReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } } { QueryReplies Variable { ParcelID LLUUID } { Name Variable 1 } { Auction BOOL } { ForSale BOOL } { ReservedNewbie BOOL } { SalePrice S32 } { ActualArea S32 } } } { DirPopularQuery Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryFlags U32 } } } { DirPopularQueryBackend Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } { QueryFlags U32 } { EstateID U32 } { Godlike BOOL } } } { DirPopularReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { QueryData Single { QueryID LLUUID } } { QueryReplies Variable { ParcelID LLUUID } { Name Variable 1 } { Dwell F32 } } } { ParcelInfoRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { ParcelID LLUUID } } } { ParcelInfoReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { Data Single { ParcelID LLUUID } { OwnerID LLUUID } { Name Variable 1 } { Desc Variable 1 } { ActualArea S32 } { BillableArea S32 } { Flags U8 } { GlobalX F32 } { GlobalY F32 } { GlobalZ F32 } { SimName Variable 1 } { SnapshotID LLUUID } { Dwell F32 } { SalePrice S32 } { AuctionID S32 } } } { ParcelObjectOwnersRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } } } { OnlineStatusRequest Low Trusted Unencoded { AgentData Single { AgentID LLUUID } { QueryID LLUUID } { EstateID U32 } { Godlike BOOL } { SpaceIP IPADDR } } { Data Variable { ID LLUUID } } } { OnlineStatusReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { QueryID LLUUID } } { Data Variable { ID LLUUID } } } { ParcelObjectOwnersReply Low Trusted Zerocoded { Data Variable { OwnerID LLUUID } { IsGroupOwned BOOL } { Count S32 } { OnlineStatus BOOL } } } { TeleportRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Info Single { RegionID LLUUID } { Position LLVector3 } { LookAt LLVector3 } } } { TeleportLocationRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Info Single { RegionHandle U64 } { Position LLVector3 } { LookAt LLVector3 } } } { TeleportLocal Low NotTrusted Unencoded { Info Single { AgentID LLUUID } { LocationID U32 } { Position LLVector3 } { LookAt LLVector3 } { TeleportFlags U32 } } } { TeleportLandmarkRequest Low NotTrusted Zerocoded { Info Single { AgentID LLUUID } { SessionID LLUUID } { LandmarkID LLUUID } } } { TeleportProgress Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Info Single { TeleportFlags U32 } { Message Variable 1 } } } { DataAgentAccessRequest Low Trusted Unencoded { Info Single { AgentID LLUUID } { EstateID U32 } { RegionHandle U64 } { LocationID U32 } { LocationPos LLVector3 } { LocationLookAt LLVector3 } } } { DataAgentAccessReply Low Trusted Unencoded { Info Single { AgentID LLUUID } } } { DataHomeLocationRequest Low Trusted Zerocoded { Info Single { AgentID LLUUID } } } { DataHomeLocationReply Low Trusted Unencoded { Info Single { AgentID LLUUID } { RegionHandle U64 } { Position LLVector3 } { LookAt LLVector3 } } } { SpaceLocationTeleportRequest Low Trusted Unencoded { Info Single { AgentID LLUUID } { SessionID LLUUID } { CircuitCode U32 } { RegionHandle U64 } { Position LLVector3 } { LookAt LLVector3 } { TravelAccess U8 } { ParentEstateID U32 } { TeleportFlags U32 } } } { SpaceLocationTeleportReply Low Trusted Unencoded { Info Single { AgentID LLUUID } { LocationID U32 } { SimIP IPADDR } { SimPort IPPORT } { RegionHandle U64 } { Position LLVector3 } { LookAt LLVector3 } { SimName Variable 1 } { SimAccess U8 } { TeleportFlags U32 } } } { TeleportFinish Low NotTrusted Unencoded { Info Single { AgentID LLUUID } { LocationID U32 } { SimIP IPADDR } { SimPort IPPORT } { RegionHandle U64 } { SimAccess U8 } { TeleportFlags U32 } } } { StartLure Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Info Single { LureType U8 } { TargetID LLUUID } { Message Variable 1 } } } { InitializeLure Low Trusted Unencoded { Info Single { LureType U8 } { AgentID LLUUID } { LureID LLUUID } { RegionHandle U64 } { Position LLVector3 } { LookAt LLVector3 } } } { TeleportLureRequest Low NotTrusted Unencoded { Info Single { AgentID LLUUID } { SessionID LLUUID } { LureID LLUUID } { TeleportFlags U32 } } } { TeleportCancel Low NotTrusted Unencoded { Info Single { AgentID LLUUID } { SessionID LLUUID } } } { CompleteLure Low Trusted Unencoded { Info Single { AgentID LLUUID } { SessionID LLUUID } { LureID LLUUID } { CircuitCode U32 } { TravelAccess U8 } { ParentEstateID U32 } { TeleportFlags U32 } } } { TeleportStart Low NotTrusted Unencoded { Info Single { TeleportFlags U32 } } } { TeleportFailed Low NotTrusted Unencoded { Info Single { AgentID LLUUID } { Reason Variable 1 } } } { LeaderBoardRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { Type S32 } } } { LeaderBoardData Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { BoardData Single { Type S32 } { MinPlace S32 } { MaxPlace S32 } { TimeString Variable 1 } } { Entry Variable { Sequence S32 } { Place S32 } { ID LLUUID } { Score S32 } { Name Fixed 32 } } } { RegisterNewAgent Low NotTrusted Unencoded { HelloBlock Single { AgentID LLUUID } { SessionID LLUUID } { LocationID U32 } { Godlike BOOL } } } { Undo Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { ObjectData Variable { ObjectID LLUUID } } } { Redo Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { ObjectData Variable { ObjectID LLUUID } } } { UndoLand Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } } { RedoLand Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } } { TransferEnergy Low NotTrusted Unencoded { Data Single { DestID LLUUID } { Amount S32 } } } { MovedIntoSimulator High Trusted Unencoded { Sender Single { ID LLUUID } { SessionID LLUUID } { CircuitCode U32 } } } { AgentPause Low NotTrusted Unencoded { Sender Single { AgentID LLUUID } { SessionID LLUUID } { SerialNum U32 } } } { AgentResume Low NotTrusted Unencoded { Sender Single { AgentID LLUUID } { SessionID LLUUID } { SerialNum U32 } } } { AgentUpdate High NotTrusted Zerocoded { AgentData Single { ID LLUUID } { BodyRotation LLQuaternion } { HeadRotation LLQuaternion } { State U8 } { CameraCenter LLVector3 } { CameraAtAxis LLVector3 } { CameraLeftAxis LLVector3 } { CameraUpAxis LLVector3 } { Far F32 } { ControlFlags U32 } { Flags U8 } } } { ChatFromViewer Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ChatData Single { Message Variable 2 } { Type U8 } { Channel S32 } } } { AgentThrottle Low NotTrusted Zerocoded { Sender Single { ID LLUUID } { CircuitCode U32 } { GenCounter U32 } } { Throttle Single { Throttles Variable 1 } } } { AgentFOV Low NotTrusted Unencoded { Sender Single { ID LLUUID } { CircuitCode U32 } { GenCounter U32 } } { FOVBlock Single { VerticalAngle F32 } } } { AgentHeightWidth Low NotTrusted Unencoded { Sender Single { ID LLUUID } { CircuitCode U32 } { GenCounter U32 } } { HeightWidthBlock Single { Height U16 } { Width U16 } } } { AgentSetAppearance Low NotTrusted Zerocoded { Sender Single { ID LLUUID } { SerialNum U32 } { Size LLVector3 } } { WearableData Variable { CacheID LLUUID } { TextureIndex U8 } } { ObjectData Single { TextureEntry Variable 2 } } { VisualParam Variable { ParamValue U8 } } } { AgentAnimation High NotTrusted Unencoded { Sender Single { ID LLUUID } } { AnimationList Variable { AnimID LLUUID } { StartAnim BOOL } } } { AgentRequestSit High NotTrusted Zerocoded { Sender Single { ID LLUUID } } { TargetObject Single { TargetID LLUUID } { Offset LLVector3 } } } { AgentSit High NotTrusted Unencoded { Sender Single { ID LLUUID } } } { RefreshViewer Low NotTrusted Unencoded { Sender Single { ID LLUUID } } } { AgentQuit Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { AgentQuitCopy Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { FuseBlock Single { ViewerCircuitCode U32 } } } { RequestImage High NotTrusted Unencoded { RequestImage Variable { Image LLUUID } { DiscardLevel S32 } { DownloadPriority F32 } { Packet U32 } } } { ImageNotInDatabase Low NotTrusted Unencoded { ImageID Single { ID LLUUID } } } { SetAlwaysRun Low NotTrusted Unencoded { Sender Single { ID LLUUID } { AlwaysRun BOOL } } } { ObjectAdd Medium NotTrusted Zerocoded { ObjectData Single { PCode U8 } { SenderID LLUUID } { GroupID LLUUID } { Material U8 } { AddFlags U32 } { PathCurve U8 } { ProfileCurve U8 } { PathBegin U8 } { PathEnd U8 } { PathScaleX U8 } { PathScaleY U8 } { PathShearX U8 } { PathShearY U8 } { PathTwist S8 } { PathTwistBegin S8 } { PathRadiusOffset S8 } { PathTaperX S8 } { PathTaperY S8 } { PathRevolutions U8 } { PathSkew S8 } { ProfileBegin U8 } { ProfileEnd U8 } { ProfileHollow U8 } { BypassRaycast U8 } { RayStart LLVector3 } { RayEnd LLVector3 } { RayTargetID LLUUID } { RayEndIsIntersection U8 } { Scale LLVector3 } { Rotation LLQuaternion } { TextureEntry Variable 2 } { NameValue Variable 2 } { State U8 } } { InventoryData Variable { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } { InventoryFile Single { Filename Variable 1 } } } { ObjectDelete Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { GroupID LLUUID } { Force BOOL } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectDuplicate Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { SharedData Single { Offset LLVector3 } { DuplicateFlags U32 } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectDuplicateOnRay Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } { RayStart LLVector3 } { RayEnd LLVector3 } { BypassRaycast BOOL } { RayEndIsIntersection BOOL } { CopyCenters BOOL } { CopyRotates BOOL } { RayTargetID LLUUID } { DuplicateFlags U32 } } { ObjectData Variable { ObjectLocalID U32 } } } { MultipleObjectUpdate Medium NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { Type U8 } { Data Variable 1 } } } { RequestMultipleObjects Medium NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { CacheMissType U8 } { ID U32 } } } { ObjectPosition Medium NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { Position LLVector3 } } } { ObjectScale Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { Scale LLVector3 } } } { ObjectRotation Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { Rotation LLQuaternion } } } { ObjectFlagUpdate Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { ObjectLocalID U32 } { UsePhysics BOOL } { IsTemporary BOOL } { IsPhantom BOOL } { CastsShadows BOOL } } } { ObjectClickAction Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { ClickAction U8 } } } { ObjectImage Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { MediaURL Variable 1 } { TextureEntry Variable 2 } } } { ObjectMaterial Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { Material U8 } } } { ObjectShape Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { PathCurve U8 } { ProfileCurve U8 } { PathBegin U8 } { PathEnd U8 } { PathScaleX U8 } { PathScaleY U8 } { PathShearX U8 } { PathShearY U8 } { PathTwist S8 } { PathTwistBegin S8 } { PathRadiusOffset S8 } { PathTaperX S8 } { PathTaperY S8 } { PathRevolutions U8 } { PathSkew S8 } { ProfileBegin U8 } { ProfileEnd U8 } { ProfileHollow U8 } } } { ObjectExtraParams Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { ParamType U16 } { ParamInUse BOOL } { ParamSize U32 } { ParamData Variable 1 } } } { ObjectOwner Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { HeaderData Single { Override BOOL } { OwnerID LLUUID } { GroupID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectGroup Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectBuy Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { GroupID LLUUID } { CategoryID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } { SaleType U8 } { SalePrice S32 } } } { BuyObjectInventory Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { ObjectID LLUUID } { ItemID LLUUID } { FolderID LLUUID } } } { DerezContainer Low Trusted Zerocoded { Data Single { ObjectID LLUUID } { Delete BOOL } } } { ObjectPermissions Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { HeaderData Single { Override BOOL } } { ObjectData Variable { ObjectLocalID U32 } { Field U8 } { Set U8 } { Mask U32 } } } { ObjectSaleInfo Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { LocalID U32 } { SaleType U8 } { SalePrice S32 } } } { ObjectName Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { LocalID U32 } { Name Variable 1 } } } { ObjectDescription Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { LocalID U32 } { Description Variable 1 } } } { ObjectCategory Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { LocalID U32 } { Category U32 } } } { ObjectSelect Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectDeselect Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectAttach Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { AttachmentPoint U8 } } { ObjectData Variable { ObjectLocalID U32 } { Rotation LLQuaternion } } } { ObjectDetach Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectDrop Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectLink Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectDelink Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectHinge Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { JointType Single { Type U8 } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectDehinge Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { ObjectData Variable { ObjectLocalID U32 } } } { ObjectGrab Low NotTrusted Zerocoded { Sender Single { ID LLUUID } } { ObjectData Single { LocalID U32 } { GrabOffset LLVector3 } } } { ObjectGrabUpdate Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Single { ObjectID LLUUID } { GrabOffsetInitial LLVector3 } { GrabPosition LLVector3 } { TimeSinceLast U32 } } } { ObjectDeGrab Low NotTrusted Unencoded { Sender Single { ID LLUUID } } { ObjectData Single { LocalID U32 } } } { ObjectSpinStart Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Single { ObjectID LLUUID } } } { ObjectSpinUpdate Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Single { ObjectID LLUUID } { Rotation LLQuaternion } } } { ObjectSpinStop Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ObjectData Single { ObjectID LLUUID } } } { ObjectExportSelected Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { RequestID LLUUID } { VolumeDetail S16 } } { ObjectData Variable { ObjectID LLUUID } } } { ObjectExportReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { RequestID LLUUID } } { AssetData Single { SLXML_ID LLUUID } { Collada_ID LLUUID } { ErrorCode S32 } } { TextureData Variable { AssetID LLUUID } { AssetNum S32 } } } { ObjectImport Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { FolderID LLUUID } } { AssetData Single { FileID LLUUID 1 } { ObjectName Variable 1 } { Description Variable 1 } } } { ObjectImportReply Low NotTrusted Zerocoded { AssetData Single { FileID LLUUID 1 } { ErrorValue S32 } } } { ModifyLand Low NotTrusted Zerocoded { ModifyBlock Single { AgentID LLUUID } { Action U8 } { BrushSize U8 } { Seconds F32 } { Height F32 } } { ParcelData Variable { LocalID S32 } { West F32 } { South F32 } { East F32 } { North F32 } } } { VelocityInterpolateOn Low NotTrusted Unencoded } { VelocityInterpolateOff Low NotTrusted Unencoded } { StateSave Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { DataBlock Single { Filename Variable 1 } } } { ReportAutosaveCrash Low NotTrusted Unencoded { AutosaveData Single { PID S32 } { Status S32 } } } { SimWideDeletes Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { DataBlock Single { TargetID LLUUID } { Flags U32 } } } { StateLoad Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { DataBlock Single { Filename Variable 1 } } } { RequestObjectPropertiesFamily Medium NotTrusted Zerocoded { ObjectData Single { RequestFlags U32 } { AgentID LLUUID } { ObjectID LLUUID } } } { TrackAgent Low NotTrusted Unencoded { AgentBlock Single { AgentID LLUUID } { PreyID LLUUID } } } { GrantModification Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { GranterName Variable 1 } } { EmpoweredBlock Variable { EmpoweredID LLUUID } } } { RevokeModification Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { GranterName Variable 1 } } { RevokedBlock Variable { RevokedID LLUUID } } } { RequestGrantedProxies Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { GrantedProxies Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { ProxyBlock Variable { EmpoweredID LLUUID } } } { AddModifyAbility Low Trusted Zerocoded { TargetBlock Single { TargetIP IPADDR } { TargetPort IPPORT } } { AgentBlock Single { AgentID LLUUID } } { GranterBlock Variable { GranterID LLUUID } } } { RemoveModifyAbility Low Trusted Unencoded { TargetBlock Single { TargetIP IPADDR } { TargetPort IPPORT } } { AgentBlock Single { AgentID LLUUID } { RevokerID LLUUID } } } { ViewerStats Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { IP IPADDR } { StartTime U32 } { RunTime F32 } { FPS F32 } { Ping F32 } { MetersTraveled F64 } { RegionsVisited S32 } { SysRAM U32 } { SysOS Variable 1 } { SysCPU Variable 1 } { SysGPU Variable 1 } } { DownloadTotals Single { World U32 } { Objects U32 } { Textures U32 } } { NetStats Multiple 2 { Bytes U32 } { Packets U32 } { Compressed U32 } { Savings U32 } } { FailStats Single { SendPacket U32 } { Dropped U32 } { Resent U32 } { FailedResends U32 } { OffCircuit U32 } { Invalid U32 } } { MiscStats Variable { Type U32 } { Value F64 } } } { ScriptAnswerYes Low NotTrusted Unencoded { Data Single { AgentID LLUUID } { TaskID LLUUID } { ItemID LLUUID } { Questions S32 } } } { UserReport Low NotTrusted Zerocoded { ReportData Single { ReportType U8 } { Category U8 } { ReporterID LLUUID } { Position LLVector3 } { CheckFlags U8 } { ScreenshotID LLUUID } { ObjectID LLUUID } { Summary Variable 1 } { Details Variable 2 } { VersionString Variable 1 } } { MeanCollision Variable { Perp LLUUID } { Time U32 } { Mag F32 } { Type U8 } } } { AlertMessage Low Trusted Unencoded { AlertData Single { Message Variable 1 } } } { AgentAlertMessage Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { AlertData Single { Modal BOOL } { Message Variable 1 } } } { MeanCollisionAlert Low Trusted Zerocoded { MeanCollision Variable { Victim LLUUID } { Perp LLUUID } { Time U32 } { Mag F32 } { Type U8 } } } { ViewerFrozenMessage Low Trusted Unencoded { FrozenData Single { Data BOOL } } } { HealthMessage Low Trusted Zerocoded { HealthData Single { Health F32 } } } { ChatFromSimulator Low Trusted Zerocoded { ChatData Single { ID LLUUID } { Name Variable 1 } { SourceType U8 } { Type U8 } { Audible U8 } { Message Variable 2 } } } { SimStats Low Trusted Unencoded { Region Single { RegionX U32 } { RegionY U32 } { RegionFlags U32 } { ObjectCapacity U32 } } { Stat Variable { StatID U32 } { StatValue F32 } } } { RequestRegionInfo Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { RegionInfo Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { RegionInfo Single { SimName Variable 1 } { EstateID U32 } { ParentEstateID U32 } { RegionFlags U32 } { SimAccess U8 } { MaxAgents U8 } { BillableFactor F32 } { ObjectBonusFactor F32 } { WaterHeight F32 } { TerrainRaiseLimit F32 } { TerrainLowerLimit F32 } { PricePerMeter S32 } { RedirectGridX S32 } { RedirectGridY S32 } { UseEstateSun BOOL } { SunHour F32 } } } { GodUpdateRegionInfo Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { RegionInfo Single { SimName Variable 1 } { EstateID U32 } { ParentEstateID U32 } { RegionFlags U32 } { BillableFactor F32 } { PricePerMeter S32 } { RedirectGridX S32 } { RedirectGridY S32 } } } { NearestLandingRegionRequest Low Trusted Unencoded { RequestingRegionData Single { RegionHandle U64 } } } { NearestLandingRegionReply Low Trusted Unencoded { LandingRegionData Single { RegionHandle U64 } } } { NearestLandingRegionUpdated Low Trusted Unencoded { RegionData Single { RegionHandle U64 } } } { TeleportLandingStatusChanged Low Trusted Unencoded { RegionData Single { RegionHandle U64 } } } { RegionHandshake Low NotTrusted Zerocoded { RegionInfo Single { RegionFlags U32 } { SimAccess U8 } { SimName Variable 1 } { SimOwner LLUUID } { IsEstateManager BOOL } { WaterHeight F32 } { BillableFactor F32 } { CacheID LLUUID } { TerrainBase0 LLUUID } { TerrainBase1 LLUUID } { TerrainBase2 LLUUID } { TerrainBase3 LLUUID } { TerrainDetail0 LLUUID } { TerrainDetail1 LLUUID } { TerrainDetail2 LLUUID } { TerrainDetail3 LLUUID } { TerrainStartHeight00 F32 } { TerrainStartHeight01 F32 } { TerrainStartHeight10 F32 } { TerrainStartHeight11 F32 } { TerrainHeightRange00 F32 } { TerrainHeightRange01 F32 } { TerrainHeightRange10 F32 } { TerrainHeightRange11 F32 } } } { RegionHandshakeReply Low NotTrusted Zerocoded { RegionInfo Single { Flags U32 } } } { CoarseLocationUpdate Medium Trusted Unencoded { Location Variable { X U8 } { Y U8 } { Z U8 } } { Index Single { You S16 } { Prey S16 } } } { ImageData High Trusted Unencoded { ImageID Single { ID LLUUID } { Codec U8 } { Size U32 } { Packets U16 } } { ImageData Single { Data Variable 2 } } } { ImagePacket High Trusted Unencoded { ImageID Single { ID LLUUID } { Packet U16 } } { ImageData Single { Data Variable 2 } } } { LayerData High Trusted Unencoded { LayerID Single { Type U8 } } { LayerData Single { Data Variable 2 } } } { ObjectUpdate High Trusted Zerocoded { RegionData Single { RegionHandle U64 } { TimeDilation U16 } } { ObjectData Variable { ID U32 } { State U8 } { FullID LLUUID } { CRC U32 } { PCode U8 } { Material U8 } { ClickAction U8 } { Scale LLVector3 } { ObjectData Variable 1 } { ParentID U32 } { UpdateFlags U32 } { PathCurve U8 } { ProfileCurve U8 } { PathBegin U8 } { PathEnd U8 } { PathScaleX U8 } { PathScaleY U8 } { PathShearX U8 } { PathShearY U8 } { PathTwist S8 } { PathTwistBegin S8 } { PathRadiusOffset S8 } { PathTaperX S8 } { PathTaperY S8 } { PathRevolutions U8 } { PathSkew S8 } { ProfileBegin U8 } { ProfileEnd U8 } { ProfileHollow U8 } { TextureEntry Variable 2 } { TextureAnim Variable 1 } { NameValue Variable 2 } { Data Variable 2 } { Text Variable 1 } { TextColor Fixed 4 } { MediaURL Variable 1 } { PSBlock Variable 1 } { ExtraParams Variable 1 } { Sound LLUUID } { Gain F32 } { Flags U8 } { Radius F32 } { JointType U8 } { JointPivot LLVector3 } { JointAxisOrAnchor LLVector3 } } } { ObjectUpdateCompressed High Trusted Unencoded { RegionData Single { RegionHandle U64 } { TimeDilation U16 } } { ObjectData Variable { UpdateFlags U32 } { Data Variable 2 } } } { ObjectUpdateCached High Trusted Unencoded { RegionData Single { RegionHandle U64 } { TimeDilation U16 } } { ObjectData Variable { ID U32 } { CRC U32 } { UpdateFlags U32 } } } { ImprovedTerseObjectUpdate High Trusted Unencoded { RegionData Single { RegionHandle U64 } { TimeDilation U16 } } { ObjectData Variable { Data Variable 1 } { TextureEntry Variable 2 } } } { KillObject High Trusted Unencoded { ObjectData Variable { ID U32 } } } { AgentToNewRegion High Trusted Unencoded { RegionData Single { SessionID LLUUID } { IP IPADDR } { Port IPPORT } { Handle U64 } } } { CrossedRegion Medium Trusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { RegionData Single { SimIP IPADDR } { SimPort IPPORT } { RegionHandle U64 } } { Info Single { Position LLVector3 } { LookAt LLVector3 } } } { SimulatorViewerTimeMessage Low Trusted Unencoded { TimeInfo Single { UsecSinceStart U64 } { SecPerDay U32 } { SecPerYear U32 } { SunDirection LLVector3 } { SunPhase F32 } { SunAngVelocity LLVector3 } } } { EnableSimulator Low Trusted Unencoded { SimulatorInfo Single { Handle U64 } { IP IPADDR } { Port IPPORT } } } { DisableSimulator Low Trusted Unencoded } { ConfirmEnableSimulator Medium Trusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { TransferRequest Low NotTrusted Zerocoded { TransferInfo Single { TransferID LLUUID } { ChannelType S32 } { SourceType S32 } { Priority F32 } { Params Variable 2 } } } { TransferInfo Low NotTrusted Zerocoded { TransferInfo Single { TransferID LLUUID } { ChannelType S32 } { TargetType S32 } { Status S32 } { Size S32 } } } { TransferPacket High NotTrusted Unencoded { TransferData Single { TransferID LLUUID } { ChannelType S32 } { Packet S32 } { Status S32 } { Data Variable 2 } } } { TransferAbort Low NotTrusted Zerocoded { TransferInfo Single { TransferID LLUUID } { ChannelType S32 } } } { TransferPriority Low NotTrusted Zerocoded { TransferInfo Single { TransferID LLUUID } { ChannelType S32 } { Priority F32 } } } { RequestXfer Low NotTrusted Zerocoded { XferID Single { ID U64 } { Filename Variable 1 } { FilePath U8 } { DeleteOnCompletion BOOL } { UseBigPackets BOOL } { VFileID LLUUID } { VFileType S16 } } } { SendXferPacket High NotTrusted Unencoded { XferID Single { ID U64 } { Packet U32 } } { DataPacket Single { Data Variable 2 } } } { ConfirmXferPacket High NotTrusted Unencoded { XferID Single { ID U64 } { Packet U32 } } } { AbortXfer Low NotTrusted Unencoded { XferID Single { ID U64 } { Result S32 } } } { RequestAvatarInfo Low Trusted Unencoded { DataBlock Single { FullID LLUUID } } } { AvatarAnimation High Trusted Unencoded { Sender Single { ID LLUUID } } { AnimationList Variable { AnimID LLUUID } { AnimSequenceID S32 } } { AnimationSourceList Variable { ObjectID LLUUID } } } { AvatarAppearance Low Trusted Zerocoded { Sender Single { ID LLUUID } { IsTrial BOOL } } { ObjectData Single { TextureEntry Variable 2 } } { VisualParam Variable { ParamValue U8 } } } { AvatarSitResponse High Trusted Zerocoded { SitObject Single { ID LLUUID } } { SitTransform Single { AutoPilot BOOL } { SitPosition LLVector3 } { SitRotation LLQuaternion } { CameraEyeOffset LLVector3 } { CameraAtOffset LLVector3 } { ForceMouselook BOOL } } } { SetFollowCamProperties Low Trusted Unencoded { ObjectData Single { ObjectID LLUUID } } { CameraProperty Variable { Type S32 } { Value F32 } } } { ClearFollowCamProperties Low Trusted Unencoded { ObjectData Single { ObjectID LLUUID } } } { CameraConstraint High Trusted Zerocoded { CameraCollidePlane Single { Plane LLVector4 } } } { ObjectProperties Medium Trusted Zerocoded { ObjectData Variable { ObjectID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { OwnershipCost S32 } { SaleType U8 } { SalePrice S32 } { AggregatePerms U8 } { AggregatePermTextures U8 } { AggregatePermTexturesOwner U8 } { Category U32 } { InventorySerial S16 } { ItemID LLUUID } { FolderID LLUUID } { FromTaskID LLUUID } { LastOwnerID LLUUID } { Name Variable 1 } { Description Variable 1 } { TouchName Variable 1 } { SitName Variable 1 } { TextureID Variable 1 } } } { ObjectPropertiesFamily Medium Trusted Zerocoded { ObjectData Single { RequestFlags U32 } { ObjectID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { OwnershipCost S32 } { SaleType U8 } { SalePrice S32 } { Category U32 } { LastOwnerID LLUUID } { Name Variable 1 } { Description Variable 1 } } } { RequestPayPrice Low NotTrusted Unencoded { ObjectData Single { ObjectID LLUUID } } } { PayPriceReply Low Trusted Unencoded { ObjectData Single { ObjectID LLUUID } { DefaultPayPrice S32 } } { ButtonData Variable { PayButton S32 } } } { KickUser Low Trusted Unencoded { TargetBlock Single { TargetIP IPADDR } { TargetPort IPPORT } } { UserInfo Single { AgentID LLUUID } { SessionID LLUUID } { Reason Variable 2 } } } { KickUserAck Low Trusted Unencoded { UserInfo Single { SessionID LLUUID } { Flags U32 } } } { GodKickUser Low NotTrusted Unencoded { UserInfo Single { GodID LLUUID } { GodSessionID LLUUID } { AgentID LLUUID } { KickFlags U32 } { Reason Variable 2 } } } { SystemKickUser Low Trusted Unencoded { AgentInfo Variable { AgentID LLUUID } } } { EjectUser Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { TargetID LLUUID } { Flags U32 } } } { FreezeUser Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { TargetID LLUUID } { Flags U32 } } } { AvatarPropertiesRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { AvatarID LLUUID } } } { AvatarPropertiesRequestBackend Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { AvatarID LLUUID } { GodLevel U8 } } } { AvatarPropertiesReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { AvatarID LLUUID } } { PropertiesData Single { ImageID LLUUID } { FLImageID LLUUID } { PartnerID LLUUID } { AboutText Variable 2 } { WantToMask U32 } { WantToText Variable 1 } { SkillsMask U32 } { SkillsText Variable 1 } { FLAboutText Variable 1 } { BornOn Variable 1 } { CharterMember Variable 1 } { AllowPublish BOOL } { MaturePublish BOOL } { Identified BOOL } { Transacted BOOL } } } { AvatarGroupsReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { AvatarID LLUUID } } { GroupData Variable { GroupOfficer BOOL } { GroupTitle Variable 1 } { GroupID LLUUID } { GroupName Variable 1 } { GroupInsigniaID LLUUID } } } { AvatarPropertiesUpdate Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { PropertiesData Single { AvatarID LLUUID } { ImageID LLUUID } { FLImageID LLUUID } { AboutText Variable 2 } { FLAboutText Variable 1 } { WantToMask U32 } { WantToText Variable 1 } { SkillsMask U32 } { SkillsText Variable 1 } { AllowPublish BOOL } { MaturePublish BOOL } } } { AvatarStatisticsReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { AvatarData Single { AvatarID LLUUID } } { StatisticsData Variable { Name Variable 1 } { Positive S32 } { Negative S32 } } } { AvatarNotesReply Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { Data Single { TargetID LLUUID } { Notes Variable 2 } } } { AvatarNotesUpdate Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { Data Single { TargetID LLUUID } { Notes Variable 2 } } } { AvatarPicksReply Low Trusted Unencoded { AgentData Single { AgentID LLUUID } { TargetID LLUUID } } { Data Variable { PickID LLUUID } { PickName Variable 1 } } } { EventInfoRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { EventData Single { EventID U32 } } } { EventInfoReply Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { EventData Single { EventID U32 } { Creator Variable 1 } { Name Variable 1 } { Category Variable 1 } { Desc Variable 2 } { Date Variable 1 } { DateUTC U32 } { Duration U32 } { Cover U32 } { Amount U32 } { SimName Variable 1 } { GlobalPos LLVector3d } { EventFlags U32 } } } { EventNotificationAddRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { EventData Single { EventID U32 } } } { EventNotificationRemoveRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { EventData Single { EventID U32 } } } { EventGodDelete Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { EventData Single { EventID U32 } } { QueryData Single { QueryID LLUUID } { QueryText Variable 1 } { QueryFlags U32 } { QueryStart S32 } } } { PickInfoRequest Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { Data Single { PickID LLUUID } } } { PickInfoReply Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { Data Single { PickID LLUUID } { CreatorID LLUUID } { TopPick BOOL } { ParcelID LLUUID } { Name Variable 1 } { Desc Variable 2 } { SnapshotID LLUUID } { User Variable 1 } { OriginalName Variable 1 } { SimName Variable 1 } { PosGlobal LLVector3d } { SortOrder S32 } { Enabled BOOL } } } { PickInfoUpdate Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { Data Single { PickID LLUUID } { CreatorID LLUUID } { TopPick BOOL } { ParcelID LLUUID } { Name Variable 1 } { Desc Variable 2 } { SnapshotID LLUUID } { PosGlobal LLVector3d } { SortOrder S32 } { Enabled BOOL } } } { PickDelete Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { Data Single { PickID LLUUID } } } { PickGodDelete Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { PickID LLUUID } { QueryID LLUUID } } } { ScriptQuestion Low Trusted Unencoded { Data Single { TaskID LLUUID } { ItemID LLUUID } { ObjectName Variable 1 } { ObjectOwner Variable 1 } { Questions S32 } } } { ScriptControlChange Low NotTrusted Unencoded { Data Variable { TakeControls BOOL } { Controls U32 } { PassToAgent BOOL } } } { ScriptDialog Low Trusted Zerocoded { Data Single { ObjectID LLUUID } { FirstName Variable 1 } { LastName Variable 1 } { ObjectName Variable 1 } { Message Variable 2 } { ChatChannel S32 } { ImageID LLUUID } } { Buttons Variable { ButtonLabel Variable 1 } } } { ScriptDialogReply Low NotTrusted Zerocoded { Data Single { AgentID LLUUID } { ObjectID LLUUID } { ChatChannel S32 } { ButtonIndex S32 } { ButtonLabel Variable 1 } } } { ForceScriptControlRelease Low NotTrusted Unencoded { Data Single { ID LLUUID } } } { RevokePermissions Low NotTrusted Unencoded { Data Single { AgentID LLUUID } { ObjectID LLUUID } { ObjectPermissions U32 } } } { LoadURL Low Trusted Unencoded { Data Single { ObjectName Variable 1 } { OwnerID LLUUID } { Message Variable 1 } { URL Variable 1 } } } { ScriptTeleportRequest Low NotTrusted Unencoded { Data Single { ObjectName Variable 1 } { SimName Variable 1 } { SimPosition LLVector3 } { LookAt LLVector3 } } } { ParcelOverlay Low Trusted Zerocoded { ParcelData Single { SequenceID S32 } { Data Variable 2 } } } { ParcelPropertiesRequest Medium NotTrusted Zerocoded { ParcelData Single { AgentID LLUUID } { SequenceID S32 } { West F32 } { South F32 } { East F32 } { North F32 } { SnapSelection BOOL } } } { ParcelPropertiesRequestByID Low NotTrusted Zerocoded { ParcelData Single { AgentID LLUUID } { SequenceID S32 } { LocalID S32 } } } { ParcelProperties High Trusted Zerocoded { ParcelData Single { RequestResult S32 } { SequenceID S32 } { SnapSelection BOOL } { SelfCount S32 } { OtherCount S32 } { PublicCount S32 } { LocalID S32 } { OwnerID LLUUID } { IsGroupOwned BOOL } { AuctionID U32 } { ReservedNewbie BOOL } { ClaimDate S32 } { ClaimPrice S32 } { RentPrice S32 } { AABBMin LLVector3 } { AABBMax LLVector3 } { Bitmap Variable 2 } { Area S32 } { Status U8 } { SimWideMaxPrims S32 } { SimWideTotalPrims S32 } { MaxPrims S32 } { TotalPrims S32 } { OwnerPrims S32 } { GroupPrims S32 } { OtherPrims S32 } { SelectedPrims S32 } { ParcelPrimBonus F32 } { OtherCleanTime S32 } { ParcelFlags U32 } { SalePrice S32 } { Name Variable 1 } { Desc Variable 1 } { MusicURL Variable 1 } { MediaURL Variable 1 } { MediaID LLUUID } { MediaAutoScale U8 } { GroupID LLUUID } { PassPrice S32 } { PassHours F32 } { Category U8 } { AuthBuyerID LLUUID } { SnapshotID LLUUID } { UserLocation LLVector3 } { UserLookAt LLVector3 } { LandingType U8 } } } { ParcelPropertiesUpdate Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } { Flags U32 } { ParcelFlags U32 } { SalePrice S32 } { Name Variable 1 } { Desc Variable 1 } { MusicURL Variable 1 } { MediaURL Variable 1 } { MediaID LLUUID } { MediaAutoScale U8 } { GroupID LLUUID } { PassPrice S32 } { PassHours F32 } { Category U8 } { AuthBuyerID LLUUID } { SnapshotID LLUUID } { UserLocation LLVector3 } { UserLookAt LLVector3 } { LandingType U8 } } } { ParcelReturnObjects Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } { ReturnType S32 } { OtherCleanTime S32 } } { TaskIDs Variable { TaskID LLUUID } } { OwnerIDs Variable { OwnerID LLUUID } } } { ParcelDisableObjects Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } { ReturnType S32 } { OtherCleanTime S32 } } { TaskIDs Variable { TaskID LLUUID } } { OwnerIDs Variable { OwnerID LLUUID } } } { ParcelSelectObjects Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } { ReturnType S32 } } { ReturnIDs Variable { ReturnID LLUUID } } } { ForceObjectSelect Low Trusted Unencoded { Header Single { ResetList BOOL } } { Data Variable { LocalID U32 } } } { ParcelBuyPass Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } } } { ParcelDeedToGroup Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { GroupID LLUUID } { LocalID S32 } } } { ParcelReclaim Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { LocalID S32 } } } { ParcelClaim Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { GroupID LLUUID } { IsGroupOwned BOOL } { Final BOOL } } { ParcelData Variable { West F32 } { South F32 } { East F32 } { North F32 } } } { ParcelJoin Low NotTrusted Unencoded { ParcelData Single { AgentID LLUUID } { West F32 } { South F32 } { East F32 } { North F32 } } } { ParcelDivide Low NotTrusted Unencoded { ParcelData Single { AgentID LLUUID } { West F32 } { South F32 } { East F32 } { North F32 } } } { ParcelRelease Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { LocalID S32 } } } { ParcelBuy Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { GroupID LLUUID } { IsGroupOwned BOOL } { LocalID S32 } { Final BOOL } } } { ParcelGodForceOwner Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { OwnerID LLUUID } { LocalID S32 } } } { ParcelAccessListRequest Low NotTrusted Zerocoded { Data Single { AgentID LLUUID } { SequenceID S32 } { Flags U32 } { LocalID S32 } } } { ParcelAccessListReply Low NotTrusted Zerocoded { Data Single { AgentID LLUUID } { SequenceID S32 } { Flags U32 } { LocalID S32 } } { List Variable { ID LLUUID } { Time S32 } { Flags U32 } } } { ParcelAccessListUpdate Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { Flags U32 } { LocalID S32 } } { List Variable { ID LLUUID } { Time S32 } { Flags U32 } } } { ParcelDwellRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { Data Single { LocalID S32 } { ParcelID LLUUID } } } { ParcelDwellReply Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { Data Single { LocalID S32 } { ParcelID LLUUID } { Dwell F32 } } } { RequestParcelTransfer Low Trusted Zerocoded { Data Single { TransactionID LLUUID } { TransactionTime U32 } { SourceID LLUUID } { DestID LLUUID } { OwnerID LLUUID } { Flags U8 } { TransactionType S32 } { Amount S32 } { BillableArea S32 } { ActualArea S32 } { Final BOOL } { ReservedNewbie BOOL } } } { UpdateParcel Low Trusted Zerocoded { ParcelData Single { ParcelID LLUUID } { RegionHandle U64 } { OwnerID LLUUID } { GroupOwned BOOL } { Status U8 } { Name Variable 1 } { Description Variable 1 } { MusicURL Variable 1 } { RegionX F32 } { RegionY F32 } { ActualArea S32 } { BillableArea S32 } { ShowDir BOOL } { IsForSale BOOL } { Category U8 } { SnapshotID LLUUID } { UserLocation LLVector3 } { SalePrice S32 } { AuthorizedBuyerID LLUUID } { ReservedNewbie BOOL } { AllowPublish BOOL } { MaturePublish BOOL } } } { RemoveParcel Low Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } } } { MergeParcel Low Trusted Unencoded { MasterParcelData Single { MasterID LLUUID } } { SlaveParcelData Variable { SlaveID LLUUID } } } { LogParcelChanges Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { RegionData Single { RegionHandle U64 } } { ParcelData Variable { ParcelID LLUUID } { OwnerID LLUUID } { IsOwnerGroup BOOL } { ActualArea S32 } { Action S8 } { TransactionID LLUUID } } } { CheckParcelSales Low Trusted Unencoded { RegionData Variable { RegionHandle U64 } } } { ParcelSales Low Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } { BuyerID LLUUID } } } { ParcelGodMarkAsContent Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } } } { ParcelGodReserveForNewbie Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } { SnapshotID LLUUID } } } { ViewerStartAuction Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ParcelData Single { LocalID S32 } { SnapshotID LLUUID } } } { StartAuction Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { ParcelData Single { ParcelID LLUUID } { SnapshotID LLUUID } { Name Variable 1 } } } { ConfirmAuctionStart Low Trusted Unencoded { AuctionData Single { ParcelID LLUUID } { AuctionID U32 } } } { CompleteAuction Low Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } } } { CancelAuction Low Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } } } { CheckParcelAuctions Low Trusted Unencoded { RegionData Variable { RegionHandle U64 } } } { ParcelAuctions Low Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } { WinnerID LLUUID } } } { UUIDNameRequest Low NotTrusted Unencoded { UUIDNameBlock Variable { ID LLUUID } } } { UUIDNameReply Low Trusted Unencoded { UUIDNameBlock Variable { ID LLUUID } { FirstName Variable 1 } { LastName Variable 1 } } } { UUIDGroupNameRequest Low NotTrusted Unencoded { UUIDNameBlock Variable { ID LLUUID } } } { UUIDGroupNameReply Low Trusted Unencoded { UUIDNameBlock Variable { ID LLUUID } { GroupName Variable 1 } } } { ChatPass Low Trusted Zerocoded { ChatData Single { Channel S32 } { Position LLVector3 } { ID LLUUID } { Name Variable 1 } { SourceType U8 } { Type U8 } { Radius F32 } { SimAccess U8 } { Message Variable 2 } } } { EdgeDataPacket High Trusted Zerocoded { EdgeData Single { LayerType U8 } { Direction U8 } { LayerData Variable 2 } } } { SimStatus Medium Trusted Unencoded { SimStatus Single { CanAcceptAgents BOOL } { CanAcceptTasks BOOL } } } { ChildAgentUpdate High Trusted Zerocoded { AgentData Single { RegionHandle U64 } { ViewerCircuitCode U32 } { AgentID LLUUID } { SessionID LLUUID } { AgentPos LLVector3 } { AgentVel LLVector3 } { Center LLVector3 } { Size LLVector3 } { AtAxis LLVector3 } { LeftAxis LLVector3 } { UpAxis LLVector3 } { ChangedGrid BOOL } { Far F32 } { Aspect F32 } { Throttles Variable 1 } { LocomotionState U32 } { HeadRotation LLQuaternion } { BodyRotation LLQuaternion } { ControlFlags U32 } { EnergyLevel F32 } { GodLevel U8 } { AlwaysRun BOOL } { PreyAgent LLUUID } { AgentAccess U8 } { AgentTextures Variable 2 } { GroupIndex S8 } } { GroupData Variable { GroupID LLUUID } { GroupOfficer BOOL } } { AnimationData Variable { Animation LLUUID } { ObjectID LLUUID } } { GranterBlock Variable { GranterID LLUUID } } { NVPairData Variable { NVPairs Variable 2 } } { VisualParam Variable { ParamValue U8 } } } { ChildAgentAlive High Trusted Unencoded { AgentData Single { RegionHandle U64 } { ViewerCircuitCode U32 } { AgentID LLUUID } { SessionID LLUUID } } } { ChildAgentPositionUpdate High Trusted Unencoded { AgentData Single { RegionHandle U64 } { ViewerCircuitCode U32 } { AgentID LLUUID } { SessionID LLUUID } { AgentPos LLVector3 } { AgentVel LLVector3 } { Center LLVector3 } { Size LLVector3 } { AtAxis LLVector3 } { LeftAxis LLVector3 } { UpAxis LLVector3 } { ChangedGrid BOOL } } } { ChildAgentDying Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { ChildAgentUnknown Low Trusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { PassObject High Trusted Zerocoded { ObjectData Single { ID LLUUID } { ParentID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { PCode U8 } { Material U8 } { State U8 } { Scale LLVector3 } { UsePhysics U8 } { PosX S16 } { PosY S16 } { PosZ S16 } { VelX S16 } { VelY S16 } { VelZ S16 } { Rotation LLQuaternion } { AngVelX S16 } { AngVelY S16 } { AngVelZ S16 } { PathCurve U8 } { ProfileCurve U8 } { PathBegin U8 } { PathEnd U8 } { PathScaleX U8 } { PathScaleY U8 } { PathShearX U8 } { PathShearY U8 } { PathTwist S8 } { PathTwistBegin S8 } { PathRadiusOffset S8 } { PathTaperX S8 } { PathTaperY S8 } { PathRevolutions U8 } { PathSkew S8 } { ProfileBegin U8 } { ProfileEnd U8 } { ProfileHollow U8 } { TextureEntry Variable 2 } { SubType S16 } { Active U8 } { Data Variable 2 } } { NVPairData Variable { NVPairs Variable 2 } } } { AtomicPassObject High Trusted Unencoded { TaskData Single { TaskID LLUUID } { AttachmentNeedsSave BOOL } } } { KillChildAgents Low Trusted Unencoded { IDBlock Single { AgentID LLUUID } } } { GetScriptRunning Low NotTrusted Unencoded { Script Single { ObjectID LLUUID } { ItemID LLUUID } } } { ScriptRunningReply Low NotTrusted Unencoded { Script Single { ObjectID LLUUID } { ItemID LLUUID } { Running BOOL } } } { SetScriptRunning Low NotTrusted Unencoded { Script Single { ObjectID LLUUID } { ItemID LLUUID } { Running BOOL } } } { ScriptReset Low NotTrusted Unencoded { Script Single { AgentID LLUUID } { ObjectID LLUUID } { ItemID LLUUID } } } { ScriptSensorRequest Low Trusted Zerocoded { Requester Single { SourceID LLUUID } { RequestID LLUUID } { SearchID LLUUID } { SearchPos LLVector3 } { SearchDir LLQuaternion } { SearchName Variable 1 } { Type S32 } { Range F32 } { Arc F32 } { RegionHandle U64 } { SearchRegions U8 } } } { ScriptSensorReply Low Trusted Zerocoded { Requester Single { SourceID LLUUID } } { SensedData Variable { ObjectID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { Position LLVector3 } { Velocity LLVector3 } { Rotation LLQuaternion } { Name Variable 1 } { Type S32 } { Range F32 } } } { CompleteAgentMovement Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { CircuitCode U32 } } } { AgentMovementComplete Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { Position LLVector3 } { LookAt LLVector3 } { RegionHandle U64 } { Timestamp U32 } } } { LogLogin Low Trusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { ViewerDigest LLUUID } { LastExecFroze BOOL } { SpaceIP IPADDR } } } { ConnectAgentToUserserver Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { ConnectToUserserver Low NotTrusted Unencoded } { DataServerLogout Low Trusted Unencoded { UserData Single { AgentID LLUUID } { ViewerIP IPADDR } { Disconnect BOOL } { SessionID LLUUID } } } { LogoutRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { FinalizeLogout Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } } { LogoutReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { InventoryData Variable { ItemID LLUUID } { NewAssetID LLUUID } } } { LogoutDemand Low NotTrusted Unencoded { LogoutBlock Single { SessionID LLUUID } } } { ViewerLoginLocationRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { PositionBlock Single { ViewerRegion U64 } { ViewerPosition LLVector3 } } { URLBlock Single { SimName Variable 1 } { Pos LLVector3 } } } { ViewerSimLocationRequest Low NotTrusted Unencoded { PositionBlock Single { AgentID LLUUID } { SimName Variable 1 } } } { RequestLocationGetAccess Low Trusted Unencoded { PositionBlock Single { AgentID LLUUID } { SessionID LLUUID } { ViewerIP IPADDR } { ViewerPort IPPORT } { ViewerRegion U64 } { ViewerPosition LLVector3 } } } { RequestLocationGetAccessReply Low Trusted Unencoded { PositionBlock Single { ViewerIP IPADDR } { ViewerPort IPPORT } { ViewerRegion U64 } { ViewerPosition LLVector3 } { TravelAccess U8 } } } { UserListRequest Low NotTrusted Unencoded } { ImprovedInstantMessage Low NotTrusted Zerocoded { MessageBlock Single { FromAgentID LLUUID } { ToAgentID LLUUID } { ParentEstateID U32 } { RegionID LLUUID } { Position LLVector3 } { Offline U8 } { Dialog U8 } { ID LLUUID } { Timestamp U32 } { FromAgentName Variable 1 } { Message Variable 2 } { BinaryBucket Variable 2 } } } { StartGroupIM Low NotTrusted Unencoded { SessionBlock Single { SessionID LLUUID } { Everyone U8 } } { Participants Variable { AgentID LLUUID } } } { DropGroupIM Low NotTrusted Unencoded { SessionBlock Single { SessionID LLUUID } { AgentID LLUUID } } } { GroupIM Low NotTrusted Unencoded { MessageBlock Single { SessionID LLUUID } { FromID LLUUID } { FromAgentName Variable 1 } { Message Variable 2 } } } { RetrieveInstantMessages Low NotTrusted Unencoded { AgentBlock Single { Agent LLUUID } } } { DequeueInstantMessages Low Trusted Unencoded } { FindAgent Low NotTrusted Unencoded { AgentBlock Single { Hunter LLUUID } { Prey LLUUID } { SpaceIP IPADDR } } { LocationBlock Variable { GlobalX F64 } { GlobalY F64 } } } { TrackOnlineStatus Low NotTrusted Zerocoded { AgentBlock Variable { AgentID LLUUID } } } { IgnoreOnlineStatus Low NotTrusted Zerocoded { AgentBlock Variable { AgentID LLUUID } } } { RequestGodlikePowers Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { RequestBlock Single { Godlike BOOL } { Token LLUUID } } } { GrantGodlikePowers Low Trusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { GrantData Single { GodLevel U8 } { Token LLUUID } } } { GodlikeMessage Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { MethodData Single { Method Variable 1 } { Invoice LLUUID } } { ParamList Variable { Parameter Variable 1 } } } { EstateOwnerMessage Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { MethodData Single { Method Variable 1 } { Invoice LLUUID } } { ParamList Variable { Parameter Variable 1 } } } { GenericMessage Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { MethodData Single { Method Variable 1 } { Invoice LLUUID } } { ParamList Variable { Parameter Variable 1 } } } { MuteListRequest Low NotTrusted Unencoded { MuteData Single { AgentID LLUUID } { MuteCRC U32 } } } { UpdateMuteListEntry Low NotTrusted Unencoded { MuteData Single { AgentID LLUUID } { MuteID LLUUID } { MuteName Variable 1 } } } { RemoveMuteListEntry Low NotTrusted Unencoded { MuteData Single { AgentID LLUUID } { MuteID LLUUID } } } { UpdateInventoryItem Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { InventoryData Variable { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } } { UpdateInventoryItemAsset Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { InventoryData Variable { ItemID LLUUID } { AssetID LLUUID } } } { MoveInventoryItem Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { Stamp BOOL } } { InventoryData Variable { ItemID LLUUID } { FolderID LLUUID } } } { CopyInventoryItem Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { InventoryData Variable { OldItemID LLUUID } { NewFolderID LLUUID } } } { RemoveInventoryItem Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { InventoryData Variable { ItemID LLUUID } } } { ChangeInventoryItemFlags Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { InventoryData Variable { ItemID LLUUID } { Flags U32 } } } { SaveAssetIntoInventory Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { InventoryData Single { ItemID LLUUID } { NewAssetID LLUUID } } } { CreateInventoryFolder Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { FolderData Single { FolderID LLUUID } { ParentID LLUUID } { Type S8 } { Name Variable 1 } } } { UpdateInventoryFolder Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { FolderData Variable { FolderID LLUUID } { ParentID LLUUID } { Type S8 } { Name Variable 1 } } } { MoveInventoryFolder Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { Stamp BOOL } } { InventoryData Variable { FolderID LLUUID } { ParentID LLUUID } } } { RemoveInventoryFolder Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { FolderData Variable { FolderID LLUUID } } } { FetchInventoryDescendents Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { InventoryData Single { FolderID LLUUID } { OwnerID LLUUID } { SortOrder S32 } { FetchFolders BOOL } { FetchItems BOOL } } } { InventoryDescendents Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { FolderID LLUUID } { OwnerID LLUUID } { Version S32 } { Descendents S32 } } { FolderData Variable { FolderID LLUUID } { ParentID LLUUID } { Type S8 } { Name Variable 1 } } { ItemData Variable { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } } { FetchInventory Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { InventoryData Variable { OwnerID LLUUID } { ItemID LLUUID } } } { FetchInventoryReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { InventoryData Variable { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } } { BulkUpdateInventory Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { TransactionID LLUUID } } { FolderData Variable { FolderID LLUUID } { ParentID LLUUID } { Type S8 } { Name Variable 1 } } { ItemData Variable { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } } { RequestInventoryAsset Low Trusted Unencoded { QueryData Single { QueryID LLUUID } { AgentID LLUUID } { OwnerID LLUUID } { ItemID LLUUID } } } { InventoryAssetResponse Low Trusted Unencoded { QueryData Single { QueryID LLUUID } { AssetID LLUUID } { IsReadable BOOL } } } { RemoveInventoryObjects Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { FolderData Variable { FolderID LLUUID } } { ItemData Variable { ItemID LLUUID } } } { PurgeInventoryDescendents Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { InventoryData Single { FolderID LLUUID } } } { UpdateTaskInventory Low NotTrusted Zerocoded { UpdateData Single { AgentID LLUUID } { GroupID LLUUID } { LocalID U32 } { Key U8 } } { InventoryData Single { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } } { RemoveTaskInventory Low NotTrusted Zerocoded { InventoryData Single { AgentID LLUUID } { GroupID LLUUID } { LocalID U32 } { ItemID LLUUID } } } { MoveTaskInventory Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } { FolderID LLUUID } } { InventoryData Single { LocalID U32 } { ItemID LLUUID } } } { RequestTaskInventory Low NotTrusted Unencoded { InventoryData Single { AgentID LLUUID } { LocalID U32 } } } { ReplyTaskInventory Low Trusted Zerocoded { InventoryData Single { TaskID LLUUID } { Serial S16 } { Filename Variable 1 } } } { DeRezObject Low NotTrusted Zerocoded { AgentBlock Single { AgentID LLUUID } { SessionID LLUUID } { GroupID LLUUID } { Destination U8 } { DestinationID LLUUID } { TransactionID LLUUID } { PacketCount U8 } { PacketNumber U8 } } { ObjectData Variable { ObjectLocalID U32 } } } { DeRezAck Low Trusted Unencoded } { RezObject Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { RezData Single { FromTaskID LLUUID } { BypassRaycast U8 } { RayStart LLVector3 } { RayEnd LLVector3 } { RayTargetID LLUUID } { RayEndIsIntersection BOOL } { RezSelected BOOL } { RemoveItem BOOL } { ItemFlags U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } } { InventoryData Single { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } } { DeclineInventory Low NotTrusted Unencoded { InfoBlock Single { TransactionID LLUUID } } } { TransferInventory Low Trusted Zerocoded { InfoBlock Single { SourceID LLUUID } { DestID LLUUID } { TransactionID LLUUID } } { InventoryBlock Variable { InventoryID LLUUID } { Type S8 } } } { TransferInventoryAck Low Trusted Zerocoded { InfoBlock Single { TransactionID LLUUID } { InventoryID LLUUID } } } { RequestFriendship Low NotTrusted Unencoded { AgentBlock Single { SourceID LLUUID } { FolderID LLUUID } { DestID LLUUID } { TransactionID LLUUID } } } { AcceptFriendship Low NotTrusted Unencoded { TransactionBlock Single { TransactionID LLUUID } } { FolderData Variable { FolderID LLUUID } } } { DeclineFriendship Low NotTrusted Unencoded { TransactionBlock Single { TransactionID LLUUID } } } { FormFriendship Low Trusted Unencoded { AgentBlock Single { SourceID LLUUID } { DestID LLUUID } } } { TerminateFriendship Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ExBlock Single { OtherID LLUUID } } } { OfferCallingCard Low NotTrusted Unencoded { AgentBlock Single { SourceID LLUUID } { DestID LLUUID } { TransactionID LLUUID } } } { AcceptCallingCard Low NotTrusted Unencoded { TransactionBlock Single { TransactionID LLUUID } } { FolderData Variable { FolderID LLUUID } } } { DeclineCallingCard Low NotTrusted Unencoded { TransactionBlock Single { TransactionID LLUUID } } } { RezScript Low NotTrusted Zerocoded { UpdateBlock Single { AgentID LLUUID } { GroupID LLUUID } { ObjectLocalID U32 } { Enabled BOOL } } { InventoryBlock Single { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } } { CreateInventoryItem Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { InventoryBlock Single { FolderID LLUUID } { NextOwnerMask U32 } { Type S8 } { InvType S8 } { Name Variable 1 } { Description Variable 1 } } } { CreateLandmarkForEvent Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { EventData Single { EventID U32 } } { InventoryBlock Single { FolderID LLUUID } { Name Variable 1 } } } { EventLocationRequest Low Trusted Zerocoded { QueryData Single { QueryID LLUUID } } { EventData Single { EventID U32 } } } { EventLocationReply Low Trusted Zerocoded { QueryData Single { QueryID LLUUID } } { EventData Single { Success BOOL } { RegionID LLUUID } { RegionPos LLVector3 } } } { RegionHandleRequest Low NotTrusted Unencoded { RequestBlock Single { RegionID LLUUID } } } { RegionIDAndHandleReply Low Trusted Unencoded { ReplyBlock Single { RegionID LLUUID } { RegionHandle U64 } } } { MoneyTransferRequest Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { MoneyData Single { SourceID LLUUID } { DestID LLUUID } { Flags U8 } { Amount S32 } { AggregatePermNextOwner U8 } { AggregatePermInventory U8 } { TransactionType S32 } { Description Variable 1 } } } { MoneyTransferBackend Low Trusted Zerocoded { MoneyData Single { TransactionID LLUUID } { TransactionTime U32 } { SourceID LLUUID } { DestID LLUUID } { Flags U8 } { Amount S32 } { AggregatePermNextOwner U8 } { AggregatePermInventory U8 } { TransactionType S32 } { Description Variable 1 } } } { BulkMoneyTransfer Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { RegionX U32 } { RegionY U32 } } { MoneyData Variable { TransactionID LLUUID } { DestID LLUUID } { Flags U8 } { Amount S32 } { TransactionType S32 } { Description Variable 1 } } } { AdjustBalance Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { Delta S32 } } } { MoneyBalanceRequest Low NotTrusted Zerocoded { MoneyData Single { TransactionID LLUUID } { AgentID LLUUID } } } { MoneyBalanceReply Low Trusted Zerocoded { MoneyData Single { AgentID LLUUID } { TransactionID LLUUID } { TransactionSuccess BOOL } { MoneyBalance S32 } { SquareMetersCredit S32 } { SquareMetersCommitted S32 } { Description Variable 1 } } } { RoutedMoneyBalanceReply Low Trusted Zerocoded { TargetBlock Single { TargetIP IPADDR } { TargetPort IPPORT } } { MoneyData Single { AgentID LLUUID } { TransactionID LLUUID } { TransactionSuccess BOOL } { MoneyBalance S32 } { SquareMetersCredit S32 } { SquareMetersCommitted S32 } { Description Variable 1 } } } { MoneyHistoryRequest Low NotTrusted Unencoded { MoneyData Single { AgentID LLUUID } { StartPeriod S32 } { EndPeriod S32 } } } { MoneyHistoryReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { MoneyData Single { StartPeriod S32 } { EndPeriod S32 } { Balance S32 } { StartDate Variable 1 } { TaxEstimate S32 } { StipendEstimate S32 } { BonusEstimate S32 } } { HistoryData Variable { Description Variable 1 } { Amount S32 } } } { MoneySummaryRequest Low NotTrusted Unencoded { MoneyData Single { AgentID LLUUID } { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } } } { MoneySummaryReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { MoneyData Single { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } { StartDate Variable 1 } { Balance S32 } { TotalCredits S32 } { TotalDebits S32 } { ObjectTaxCurrent S32 } { LightTaxCurrent S32 } { LandTaxCurrent S32 } { GroupTaxCurrent S32 } { ParcelDirFeeCurrent S32 } { ObjectTaxEstimate S32 } { LightTaxEstimate S32 } { LandTaxEstimate S32 } { GroupTaxEstimate S32 } { ParcelDirFeeEstimate S32 } { StipendEstimate S32 } { BonusEstimate S32 } { LastTaxDate Variable 1 } { TaxDate Variable 1 } } } { MoneyDetailsRequest Low NotTrusted Unencoded { MoneyData Single { AgentID LLUUID } { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } } } { MoneyDetailsReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { MoneyData Single { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } { StartDate Variable 1 } } { HistoryData Variable { Description Variable 1 } { Amount S32 } } } { MoneyTransactionsRequest Low NotTrusted Unencoded { MoneyData Single { AgentID LLUUID } { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } } } { MoneyTransactionsReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { MoneyData Single { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } { StartDate Variable 1 } } { HistoryData Variable { Time Variable 1 } { User Variable 1 } { Type S32 } { Item Variable 1 } { Amount S32 } } } { GestureUpdate Medium NotTrusted Unencoded { AgentBlock Single { AgentID LLUUID } { Filename Variable 1 } { ToViewer BOOL } } } { GestureRequest Low NotTrusted Unencoded { AgentBlock Single { AgentID LLUUID } { Reset BOOL } } } { ActivateGestures Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } } { Data Variable { ItemID LLUUID } { AssetID LLUUID } { GestureFlags U32 } } } { DeactivateGestures Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } } { Data Variable { ItemID LLUUID } { GestureFlags U32 } } } { InventoryUpdate Low Trusted Unencoded { AgentData Single { AgentID LLUUID } } { InventoryData Single { IsComplete U8 } { Filename Variable 1 } } } { MuteListUpdate Low Trusted Unencoded { MuteData Single { AgentID LLUUID } { Filename Variable 1 } } } { UseCachedMuteList Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } } { UserLoginLocationReply Low Trusted Zerocoded { AgentData Single { SessionID LLUUID } { Message Variable 1 } } { RegionInfo Single { LocationValid BOOL } { GridsPerEdge U32 } { MetersPerGrid F32 } { Handle U64 } { UsecSinceStart U64 } { SecPerDay U32 } { SecPerYear U32 } { SunDirection LLVector3 } { SunAngVelocity LLVector3 } } { SimulatorBlock Single { IP IPADDR } { Port IPPORT } } { URLBlock Single { LocationID U32 } { LocationLookAt LLVector3 } } } { UserSimLocationReply Low Trusted Unencoded { SimulatorBlock Single { AccessOK U8 } { SimName Variable 1 } { SimHandle U64 } } } { UserListReply Low Trusted Unencoded { UserBlock Variable { FirstName Variable 1 } { LastName Variable 1 } { Status U8 } } } { ChatMessage Low Trusted Unencoded { ChatData Single { Text Variable 2 } } } { OnlineNotification Low Trusted Unencoded { AgentBlock Variable { AgentID LLUUID } } } { OfflineNotification Low Trusted Unencoded { AgentBlock Variable { AgentID LLUUID } } } { SetStartLocationRequest Low NotTrusted Zerocoded { StartLocationData Single { AgentID LLUUID } { SimName Variable 1 } { LocationID U32 } { LocationPos LLVector3 } { LocationLookAt LLVector3 } } } { SetStartLocation Low Trusted Zerocoded { StartLocationData Single { AgentID LLUUID } { RegionID LLUUID } { LocationID U32 } { RegionHandle U64 } { LocationPos LLVector3 } { LocationLookAt LLVector3 } } } { UserLoginLocationRequest Low Trusted Zerocoded { UserBlock Single { SessionID LLUUID } { TravelAccess U8 } { FirstLogin BOOL } { LimitedToEstate U32 } } { PositionBlock Single { ViewerRegion U64 } { ViewerPosition LLVector3 } } { URLBlock Single { SimName Variable 1 } { Pos LLVector3 } } } { SpaceLoginLocationReply Low Trusted Zerocoded { UserBlock Single { SessionID LLUUID } { LocationID U32 } { LocationPos LLVector3 } { LocationLookAt LLVector3 } } { SimulatorBlock Single { IP IPADDR } { Port IPPORT } { CircuitCode U32 } { Name Variable 1 } { SimAccess U8 } } { RegionInfo Single { GridsPerEdge U32 } { MetersPerGrid F32 } { Handle U64 } { UsecSinceStart U64 } { SecPerDay U32 } { SecPerYear U32 } { SunDirection LLVector3 } { SunAngVelocity LLVector3 } } } { NetTest Low NotTrusted Unencoded { NetBlock Single { Port IPPORT } } } { SetCPURatio Low NotTrusted Unencoded { Data Single { Ratio U8 } } } { SimCrashed Low NotTrusted Unencoded { Data Single { RegionX U32 } { RegionY U32 } } { Users Variable { AgentID LLUUID } } } { SimulatorPauseState Low NotTrusted Unencoded { PauseBlock Single { SimPaused U32 } { LayersPaused U32 } { TasksPaused U32 } } } { SimulatorThrottleSettings Low NotTrusted Unencoded { Sender Single { ID LLUUID } } { Throttle Single { Throttles Variable 1 } } } { NameValuePair Low NotTrusted Unencoded { TaskData Single { ID LLUUID } } { NameValueData Variable { NVPair Variable 2 } } } { RemoveNameValuePair Low NotTrusted Unencoded { TaskData Single { ID LLUUID } } { NameValueData Variable { NVPair Variable 2 } } } { GetNameValuePair Low NotTrusted Unencoded { TaskData Single { ID LLUUID } } { NameValueName Variable { Name Variable 2 } } } { UpdateAttachment Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { AttachmentBlock Single { AttachmentPoint U8 } } { OperationData Single { AddItem BOOL } { UseExistingAsset BOOL } } { InventoryData Single { ItemID LLUUID } { FolderID LLUUID } { CreatorID LLUUID } { OwnerID LLUUID } { GroupID LLUUID } { BaseMask U32 } { OwnerMask U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { GroupOwned BOOL } { AssetID LLUUID } { Type S8 } { InvType S8 } { Flags U32 } { SaleType U8 } { SalePrice S32 } { Name Variable 1 } { Description Variable 1 } { CreationDate S32 } { CRC U32 } } } { RemoveAttachment Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { AttachmentBlock Single { AttachmentPoint U8 } { ItemID LLUUID } } } { UUIDSoundTriggerFar High NotTrusted Unencoded { SoundData Single { ID LLUUID } { Handle U64 } { XPos S16 } { YPos S16 } { ZPos S16 } { Gain F32 } } } { AttachedSound Medium Trusted Unencoded { DataBlock Single { SoundID LLUUID } { ObjectID LLUUID } { Gain F32 } { Flags U8 } } } { AttachedSoundGainChange Medium Trusted Unencoded { DataBlock Single { ObjectID LLUUID } { Gain F32 } } } { AttachedSoundCutoffRadius Medium Trusted Unencoded { DataBlock Single { ObjectID LLUUID } { Radius F32 } } } { PreloadSound Medium Trusted Unencoded { DataBlock Variable { ObjectID LLUUID } { SoundID LLUUID } } } { AssetUploadRequest Low NotTrusted Unencoded { AssetBlock Single { UUID LLUUID } { Type S8 } { Tempfile BOOL } { AssetData Variable 2 } } } { AssetUploadComplete Low NotTrusted Unencoded { AssetBlock Single { UUID LLUUID } { Type S8 } { Success BOOL } } } { ReputationAgentAssign Low NotTrusted Unencoded { DataBlock Single { RatorID LLUUID } { RateeID LLUUID } { Behavior F32 } { Appearance F32 } { Building F32 } } } { ReputationIndividualRequest Low NotTrusted Unencoded { ReputationData Single { FromID LLUUID } { ToID LLUUID } } } { ReputationIndividualReply Low Trusted Unencoded { ReputationData Single { FromID LLUUID } { ToID LLUUID } { Behavior F32 } { Appearance F32 } { Building F32 } } } { EmailMessageRequest Low Trusted Unencoded { DataBlock Single { ObjectID LLUUID } { FromAddress Variable 1 } { Subject Variable 1 } } } { EmailMessageReply Low Trusted Unencoded { DataBlock Single { ObjectID LLUUID } { More U32 } { Time U32 } { FromAddress Variable 1 } { Subject Variable 1 } { Data Variable 2 } { MailFilter Variable 1 } } } { InternalScriptMail Medium Trusted Unencoded { DataBlock Single { From Variable 1 } { To LLUUID } { Subject Variable 1 } { Body Variable 2 } } } { ScriptDataRequest Low Trusted Unencoded { DataBlock Variable { Hash U64 } { RequestType S8 } { Request Variable 2 } } } { ScriptDataReply Low Trusted Unencoded { DataBlock Variable { Hash U64 } { Reply Variable 2 } } } { CreateGroupRequest Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } { Name Variable 1 } { Charter Variable 2 } { ShowInList U8 } { ShowMembersInGroupDir U8 } { RequireMask U32 } { ReputationMin S32 } { ReputationMax S32 } { MoneyMin S32 } { MoneyMax S32 } { OfficerTitle Variable 1 } { MemberTitle Variable 1 } { PowersMask U32 } { InsigniaID LLUUID } { InviteOfficers Variable 2 } { InviteMembers Variable 2 } { MembershipFee S32 } { OpenEnrollment BOOL } { AllowPublish BOOL } { MaturePublish BOOL } } } { CreateGroupReply Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { ReplyData Single { GroupID LLUUID } { Result S32 } { Message Variable 1 } } } { UpdateGroupInfo Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } { Charter Variable 2 } { ShowInList BOOL } { ShowMembersInGroupDir BOOL } { OfficerTitle Variable 1 } { MemberTitle Variable 1 } { InsigniaID LLUUID } { MembershipFee S32 } { OpenEnrollment BOOL } { InviteOfficers Variable 2 } { InviteMembers Variable 2 } { AllowPublish BOOL } { MaturePublish BOOL } } } { GroupInfoUpdated Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } } { JoinGroupRequest Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } { Officer U8 } { MembershipFee S32 } } } { JoinGroupReply Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Success BOOL } } } { EjectGroupMemberRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } { AgentID LLUUID } } } { RemoveMemberFromGroup Low Trusted Unencoded { TargetBlock Single { TargetIP IPADDR } { TargetPort IPPORT } } { AgentBlock Single { AgentID LLUUID } } { GroupBlock Single { GroupID LLUUID } } } { LeaveGroupRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } } } { InviteGroupRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { InviteData Single { AgentName Variable 1 } { InviteeID LLUUID } { GroupID LLUUID } { Officer BOOL } } } { GroupPropertiesRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } } } { GroupPropertiesReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } { Name Variable 1 } { Charter Variable 2 } { ShowInList U8 } { ShowMembersInGroupDir U8 } { RequireMask U32 } { ReputationMin S32 } { ReputationMax S32 } { MoneyMin S32 } { MoneyMax S32 } { OfficerTitle Variable 1 } { MemberTitle Variable 1 } { PowersMask U32 } { InsigniaID LLUUID } { FounderID LLUUID } { MembershipFee S32 } { OpenEnrollment BOOL } { Money S32 } { CurrentElectionID LLUUID } { GroupMembershipCount S32 } { AllowPublish BOOL } { MaturePublish BOOL } } } { GroupProfileRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } } } { GroupProfileReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } { Name Variable 1 } { Charter Variable 2 } { ShowInList U8 } { ShowMembersInGroupDir U8 } { OfficerTitle Variable 1 } { MemberTitle Variable 1 } { InsigniaID LLUUID } { FounderID LLUUID } { FounderName Variable 1 } { MembershipFee S32 } { OpenEnrollment BOOL } } } { GroupMoneyHistoryRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } } } { GroupMoneyHistoryReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { GroupData Single { IntervalDays S32 } { CurrentInterval S32 } { CurrentTaxes S32 } { CurrentDividend S32 } { EstimatedTaxes S32 } { EstimatedDividend S32 } { NumberNonExemptMembers S32 } } } { GroupAccountSummaryRequest Low NotTrusted Zerocoded { MoneyData Single { AgentID LLUUID } { GroupID LLUUID } { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } } } { GroupAccountSummaryReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { MoneyData Single { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } { StartDate Variable 1 } { Balance S32 } { TotalCredits S32 } { TotalDebits S32 } { ObjectTaxCurrent S32 } { LightTaxCurrent S32 } { LandTaxCurrent S32 } { GroupTaxCurrent S32 } { ParcelDirFeeCurrent S32 } { ObjectTaxEstimate S32 } { LightTaxEstimate S32 } { LandTaxEstimate S32 } { GroupTaxEstimate S32 } { ParcelDirFeeEstimate S32 } { NonExemptMembers S32 } { LastTaxDate Variable 1 } { TaxDate Variable 1 } } } { GroupAccountDetailsRequest Low NotTrusted Zerocoded { MoneyData Single { AgentID LLUUID } { GroupID LLUUID } { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } } } { GroupAccountDetailsReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { MoneyData Single { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } { StartDate Variable 1 } } { HistoryData Variable { Description Variable 1 } { Amount S32 } } } { GroupAccountTransactionsRequest Low NotTrusted Zerocoded { MoneyData Single { AgentID LLUUID } { GroupID LLUUID } { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } } } { GroupAccountTransactionsReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { MoneyData Single { RequestID LLUUID } { IntervalDays S32 } { CurrentInterval S32 } { StartDate Variable 1 } } { HistoryData Variable { Time Variable 1 } { User Variable 1 } { Type S32 } { Item Variable 1 } { Amount S32 } } } { GroupElectionInfoRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } } } { GroupElectionInfoReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } } { ElectionData Single { GroupID LLUUID } { ElectionID LLUUID } { ElectionType Variable 1 } { StartDateTime Variable 1 } { EndDateTime Variable 1 } { ElectionInitiator LLUUID } { AlreadyVoted BOOL } { VotedForCandidate LLUUID } { VoteCast Variable 1 } { Majority F32 } { Quorum S32 } } { CandidateData Variable { AgentID LLUUID } } } { StartGroupElection Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ElectionData Single { GroupID LLUUID } { Duration S32 } { Majority F32 } { Quorum S32 } } } { GroupElectionBallot Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ElectionData Single { GroupID LLUUID } { ElectionID LLUUID } { CandidateID LLUUID } } } { StartGroupRecall Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { RecallData Single { GroupID LLUUID } { Duration S32 } { RecallID LLUUID } } } { GroupRecallBallot Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { RecallData Single { GroupID LLUUID } { ElectionID LLUUID } { VoteCast Variable 1 } } } { GroupActiveProposalsRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } } } { GroupActiveProposalItemReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { ProposalData Variable { VoteID LLUUID } { VoteInitiator LLUUID } { TerseDateID Variable 1 } { StartDateTime Variable 1 } { EndDateTime Variable 1 } { AlreadyVoted BOOL } { VoteCast Variable 1 } { Majority F32 } { Quorum S32 } { ProposalText Variable 1 } } } { GroupVoteHistoryRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } } } { GroupVoteHistoryItemReply Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } { HistoryItemData Single { VoteID LLUUID } { TerseDateID Variable 1 } { StartDateTime Variable 1 } { EndDateTime Variable 1 } { VoteInitiator LLUUID } { RecallID LLUUID } { VoteType Variable 1 } { VoteResult Variable 1 } { Majority F32 } { Quorum S32 } { ProposalText Variable 2 } } { VoteItem Variable { CandidateID LLUUID } { VoteCast Variable 1 } { NumVotes S32 } } } { StartGroupProposal Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { ProposalData Single { GroupID LLUUID } { Quorum S32 } { Majority F32 } { Duration S32 } { ProposalText Variable 1 } } } { GroupProposalBallot Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { ProposalData Single { ProposalID LLUUID } { VoteCast Variable 1 } } } { CallVote Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } } { VoteData Single { GroupID LLUUID } { VoteType S32 } { VoteQuorum S32 } { VoteTime F32 } { VoteText Variable 1 } } } { Vote Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { VoteData Single { VoteID LLUUID } { Response S32 } } } { TallyVotes Low Trusted Unencoded } { GroupMembersRequest Low NotTrusted Unencoded { RequestData Single { RequestID LLUUID } { GroupID LLUUID } { ActiveOnly BOOL } } } { GroupMembersReply Low NotTrusted Zerocoded { ReplyData Single { RequestID LLUUID } { GroupID LLUUID } } { AgentData Variable { AgentID LLUUID } } } { GroupOfficersAndMembersRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { GroupData Single { GroupID LLUUID } { IncludeMembers BOOL } } } { GroupOfficersAndMembersReply Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { CompoundMsgID LLUUID } } { GroupData Single { GroupID LLUUID } } { OfficerData Variable { AgentID LLUUID } { Contribution S32 } { OnlineStatus Variable 1 } } { MemberData Variable { AgentID LLUUID } { Contribution S32 } { OnlineStatus Variable 1 } } } { ActivateGroup Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { GroupID LLUUID } } } { SetGroupContribution Low NotTrusted Unencoded { Data Single { AgentID LLUUID } { GroupID LLUUID } { Contribution S32 } } } { LiveHelpGroupRequest Low Trusted Unencoded { RequestData Single { RequestID LLUUID } { AgentID LLUUID } } } { LiveHelpGroupReply Low Trusted Unencoded { ReplyData Single { RequestID LLUUID } { GroupID LLUUID } { Selection Variable 1 } } } { AgentWearablesRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } } { AgentWearablesUpdate Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SerialNum U32 } } { WearableData Variable { ItemID LLUUID } { AssetID LLUUID } { WearableType U8 } } } { AgentCachedTexture Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } { SerialNum S32 } } { WearableData Variable { ID LLUUID } { TextureIndex U8 } } } { AgentDataUpdateRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } } { AgentDataUpdate Low Trusted Zerocoded { AgentData Single { AgentID LLUUID } { FirstName Variable 1 } { LastName Variable 1 } { GroupTitle Variable 1 } { GroupIndex S8 } } { GroupData Variable { GroupID LLUUID } { GroupOfficer BOOL } { GroupInsigniaID LLUUID } { Contribution S32 } { GroupName Variable 1 } } } { LogTextMessage Low Trusted Zerocoded { DataBlock Variable { FromAgentId LLUUID } { ToAgentId LLUUID } { GlobalX F64 } { GlobalY F64 } { Time U32 } { Message Variable 2 } } } { ViewerEffect Medium NotTrusted Zerocoded { Effect Variable { ID LLUUID } { Type U8 } { Duration F32 } { Color Fixed 4 } { TypeData Variable 1 } } } { SetSunPhase Medium NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { Data Single { Phase F32 } } } { CreateTrustedCircuit Low NotTrusted Unencoded { DataBlock Single { Digest Fixed 32 } } } { DenyTrustedCircuit Low NotTrusted Unencoded } { RezSingleAttachmentFromInv Low NotTrusted Zerocoded { ObjectData Single { AgentID LLUUID } { AssetID LLUUID } { ItemID LLUUID } { AttachmentPt U8 } { ItemFlags U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { Name Variable 1 } { Description Variable 1 } } } { RezMultipleAttachmentsFromInv Low NotTrusted Zerocoded { HeaderData Single { CompoundMsgID LLUUID } { TotalObjects U8 } { AgentID LLUUID } { FirstDetachAll U8 } } { ObjectData Variable { AssetID LLUUID } { ItemID LLUUID } { AttachmentPt U8 } { ItemFlags U32 } { GroupMask U32 } { EveryoneMask U32 } { NextOwnerMask U32 } { Name Variable 1 } { Description Variable 1 } } } { DetachAttachmentIntoInv Low NotTrusted Unencoded { ObjectData Single { AgentID LLUUID } { ItemID LLUUID } } } { CreateNewOutfitAttachments Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { HeaderData Single { NewFolderID LLUUID } } { ObjectData Variable { OldItemID LLUUID } { OldFolderID LLUUID } } } { UserInfoRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } } { UserInfoReply Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { UserData Single { IMViaEMail BOOL } { EMail Variable 2 } } } { UpdateUserInfo Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { UserData Single { IMViaEMail BOOL } } } { GodExpungeUser Low NotTrusted Zerocoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { ExpungeData Variable { AgentID LLUUID } } } { StartExpungeProcess Low Trusted Zerocoded { ExpungeData Variable { AgentID LLUUID } } } { StartExpungeProcessAck Low Trusted Unencoded } { StartParcelRename Low Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } { NewName Variable 1 } } } { StartParcelRenameAck Low Trusted Unencoded } { BulkParcelRename Low Trusted Zerocoded { ParcelData Variable { RegionHandle U64 } { ParcelID LLUUID } { NewName Variable 1 } } } { ParcelRename Low Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } { NewName Variable 1 } } } { StartParcelRemove Low Trusted Unencoded { ParcelData Variable { ParcelID LLUUID } } } { StartParcelRemoveAck Low Trusted Unencoded } { BulkParcelRemove Low Trusted Zerocoded { ParcelData Variable { RegionHandle U64 } { ParcelID LLUUID } } } { InitiateUpload Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { FileData Single { BaseFilename Variable 1 } { SourceFilename Variable 1 } } } { InitiateDownload Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } } { FileData Single { SimFilename Variable 1 } { ViewerFilename Variable 1 } } } { SystemMessage Low Trusted Zerocoded { MethodData Single { Method Variable 1 } { Invoice LLUUID } { Digest Fixed 32 } } { ParamList Variable { Parameter Variable 1 } } } { MapLayerRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } { EstateID U32 } { Godlike BOOL } } } { MapLayerReply Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } } { LayerData Variable { Left U32 } { Right U32 } { Top U32 } { Bottom U32 } { ImageID LLUUID } } } { MapBlockRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } { EstateID U32 } { Godlike BOOL } } { PositionData Single { MinX U16 } { MaxX U16 } { MinY U16 } { MaxY U16 } } } { MapNameRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } { EstateID U32 } { Godlike BOOL } } { NameData Single { Name Variable 1 } } } { MapBlockReply Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } } { Data Variable { X U16 } { Y U16 } { Name Variable 1 } { Access U8 } { RegionFlags U32 } { WaterHeight U8 } { Agents U8 } { MapImageID LLUUID } } } { MapItemRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } { EstateID U32 } { Godlike BOOL } } { RequestData Single { ItemType U32 } { RegionHandle U64 } } } { MapItemReply Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { Flags U32 } } { RequestData Single { ItemType U32 } } { Data Variable { X U32 } { Y U32 } { ID LLUUID } { Extra S32 } { Extra2 S32 } { Name Variable 1 } } } { SendPostcard Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { AssetID LLUUID } { PosGlobal LLVector3d } { To Variable 1 } { From Variable 1 } { Name Variable 1 } { Subject Variable 1 } { Msg Variable 2 } { AllowPublish BOOL } { MaturePublish BOOL } } } { RpcChannelRequest Low Trusted Unencoded { DataBlock Single { GridX U32 } { GridY U32 } { TaskID LLUUID } { ItemID LLUUID } } } { RpcChannelReply Low Trusted Unencoded { DataBlock Single { TaskID LLUUID } { ItemID LLUUID } { ChannelID LLUUID } } } { RpcScriptRequestInbound Low NotTrusted Unencoded { TargetBlock Single { GridX U32 } { GridY U32 } } { DataBlock Single { TaskID LLUUID } { ItemID LLUUID } { ChannelID LLUUID } { IntValue U32 } { StringValue Variable 2 } } } { RpcScriptRequestInboundForward Low Trusted Unencoded { DataBlock Single { RPCServerIP IPADDR } { RPCServerPort IPPORT } { TaskID LLUUID } { ItemID LLUUID } { ChannelID LLUUID } { IntValue U32 } { StringValue Variable 2 } } } { RpcScriptReplyInbound Low NotTrusted Unencoded { DataBlock Single { TaskID LLUUID } { ItemID LLUUID } { ChannelID LLUUID } { IntValue U32 } { StringValue Variable 2 } } } { MailTaskSimRequest Low NotTrusted Unencoded { DataBlock Single { TaskID LLUUID } } } { MailTaskSimReply Low NotTrusted Unencoded { TargetBlock Single { TargetIP Variable 1 } { TargetPort IPPORT } } { DataBlock Single { TaskID LLUUID } } } { ScriptMailRegistration Low NotTrusted Unencoded { DataBlock Single { TargetIP Variable 1 } { TargetPort IPPORT } { TaskID LLUUID } { Flags U32 } } } { MailPingBounce Low NotTrusted Unencoded { DataBlock Single { TargetIP IPADDR } { TargetPort IPPORT } { TaskID LLUUID } { Flags U32 } } } { ParcelMediaCommandMessage Low NotTrusted Unencoded { CommandBlock Single { Flags U32 } { Command U32 } { Time F32 } } } { ParcelMediaUpdate Low NotTrusted Unencoded { DataBlock Single { MediaURL Variable 1 } { MediaID LLUUID } { MediaAutoScale U8 } } } { LandScriptsRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { RequestData Single { RequestFlags U32 } { ParcelLocalID S32 } { RelatedID LLUUID } } } { LandScriptsReply Low NotTrusted Unencoded { RequestData Single { RequestFlags U32 } { TotalScriptCount U32 } { TotalScriptTime F32 } } { Data Variable { TaskLocalID U32 } { TaskID LLUUID } { LocationX F32 } { LocationY F32 } { LocationZ F32 } { ScriptTime F32 } { ScriptCount S32 } { TaskName Variable 1 } { OwnerName Variable 1 } } } { LandCollidersRequest Low NotTrusted Unencoded { AgentData Single { AgentID LLUUID } { SessionID LLUUID } } { RequestData Single { RequestFlags U32 } { ParcelLocalID S32 } { RelatedID LLUUID } } } { LandCollidersReply Low NotTrusted Unencoded { RequestData Single { RequestFlags U32 } { TotalColliderCount U32 } } { Data Variable { TaskLocalID U32 } { TaskID LLUUID } { LocationX F32 } { LocationY F32 } { LocationZ F32 } { Score S32 } { TaskName Variable 1 } { OwnerName Variable 1 } } } \ No newline at end of file