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 00000000..cb3f12d9 Binary files /dev/null and b/applications/SLProxy/XmlRpcCS.dll differ 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 00000000..6875e88e Binary files /dev/null and b/applications/SLProxy/libsecondlife.dll differ 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