Commits

Anonymous committed 2c23c81

Initial checkin.

Comments (0)

Files changed (2)

message_template.msg

+// Linden Lab development message templates
+
+version 2.0
+
+// The Version 2.0 template requires preservation of message
+// numbers. Each message must be numbered relative to the
+// other messages of that type. The current highest number 
+// for each type is listed below:
+// Low: 423
+// Medium: 18
+// High: 29
+// PLEASE UPDATE THIS WHEN YOU ADD A NEW MESSAGE!
+
+
+// *************************************************************************
+// Test Message
+// *************************************************************************
+
+// Test Message
+
+{
+	TestMessage Low 1 NotTrusted Zerocoded
+	{
+		TestBlock1		Single
+		{	Test1		U32	}
+	}
+	{
+		NeighborBlock		Multiple		4
+		{	Test0		U32	}
+		{	Test1		U32	}
+		{	Test2		U32	}
+	}
+}
+
+// *************************************************************************
+// Messaging Internal Data Management Message
+// *************************************************************************
+
+// *************************
+// List fixed messages first
+// *************************
+
+
+// Packet Ack - Ack a list of packets sent reliable
+{
+	PacketAck Fixed 0xFFFFFFFB NotTrusted Unencoded
+	{
+		Packets			Variable		
+		{	ID			U32	}
+	}
+}
+
+
+// OpenCircuit - Tells the recipient's messaging system to open the descibed circuit
+{
+	OpenCircuit Fixed 0xFFFFFFFC NotTrusted Unencoded UDPBlackListed
+	{
+		CircuitInfo		Single
+		{	IP			IPADDR	}
+		{	Port		IPPORT	}
+	}
+}
+
+
+// CloseCircuit - Tells the recipient's messaging system to close the descibed circuit
+{
+	CloseCircuit Fixed 0xFFFFFFFD NotTrusted Unencoded
+}
+
+
+// ******************
+// End fixed messages
+// ******************
+
+// StartPingCheck - used to measure circuit ping times
+// PingID is used to determine how backlogged the ping was that was
+// returned (or how hosed the other side is)
+{
+	StartPingCheck High 1 NotTrusted Unencoded
+	{
+		PingID Single
+		{	PingID	U8	}
+		{	OldestUnacked	U32	}	// Current oldest "unacked" packet on the sender side
+	}
+}
+
+// CompletePingCheck - used to measure circuit ping times
+
+{
+	CompletePingCheck High 2 NotTrusted Unencoded
+	{
+		PingID Single
+		{	PingID	U8	}
+	}
+}
+
+// space->sim
+// sim->sim
+// AddCircuitCode - Tells the recipient's messaging system that this code
+// is for a legal circuit
+{
+	AddCircuitCode Low 2 Trusted Unencoded
+	{
+		CircuitCode		Single
+		{	Code		U32		}
+		{	SessionID	LLUUID	}
+		{	AgentID		LLUUID	} // WARNING - may be null in valid message
+	}
+}
+
+// viewer->sim
+// UseCircuitCode - Attempts to provide the recipient with IP and Port
+// info. In the case of viewers, the id is the session id. For other
+// machines it may be null. The session id will always be the session
+// id of the process, which every server will generate on startup and
+// the viewer will be handed after login.
+{
+	UseCircuitCode Low 3 NotTrusted Unencoded
+	{
+		CircuitCode		Single
+		{	Code		U32		}
+		{	SessionID	LLUUID	}
+		{	ID			LLUUID	} // agent id
+	}
+}
+
+
+// *************************************************************************
+// SpaceServer to Simulator Messages
+// ************************************************************************
+
+// Neighbor List - Passed anytime neighbors change
+{
+	NeighborList High 3 Trusted Unencoded
+	{
+		NeighborBlock	Multiple		4
+		{	IP			IPADDR	}
+		{	Port		IPPORT	}
+		{	PublicIP    IPADDR	}
+		{	PublicPort  IPPORT	}
+		{	RegionID	LLUUID	}
+		{	Name		Variable		1	}	// string
+		{	SimAccess	U8	}
+	}
+}
+
+
+// AvatarTextureUpdate
+// simulator -> dataserver
+// reliable
+{
+	AvatarTextureUpdate Low 4 Trusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID			LLUUID	}
+		{	TexturesChanged	BOOL	}
+	}
+	{
+		WearableData		Variable
+		{	CacheID			LLUUID }
+		{	TextureIndex	U8 }
+		{	HostName		Variable	1	}
+	}
+	{
+		TextureData		Variable
+		{	TextureID		LLUUID	}
+	}
+}
+
+
+// SimulatorMapUpdate
+// simulator -> dataserver
+// reliable
+{
+	SimulatorMapUpdate Low 5 Trusted Unencoded
+	{
+		MapData		Single
+		{	Flags		U32		}
+	}
+}
+
+// SimulatorSetMap
+// simulator -> dataserver
+// reliable
+// Used to upload a map image into the database (currently used only for Land For Sale)
+{
+	SimulatorSetMap Low 6 Trusted Unencoded
+	{
+		MapData		Single
+		{	RegionHandle	U64		}
+		{	Type			S32		}
+		{	MapImage		LLUUID	}
+	}
+}
+
+// SubscribeLoad
+// spaceserver -> simulator
+// reliable
+{
+	SubscribeLoad	Low	7 Trusted Unencoded
+}
+
+// UnsubscribeLoad
+// spaceserver -> simulator
+// reliable
+{
+	UnsubscribeLoad Low 8 Trusted Unencoded
+}
+
+
+// ************************************************************************
+// Simulator to SpaceServer Messages
+// ************************************************************************
+
+// SimulatorReady - indicates the sim has finished loading its state
+// and is ready to receive updates from others
+{
+	SimulatorReady Low 9 Trusted Zerocoded
+	{
+		SimulatorBlock		Single
+		{	SimName			Variable	1	}
+		{	SimAccess		U8	}
+		{	RegionFlags		U32	}
+		{	RegionID		LLUUID	}
+		{	EstateID		U32	}
+		{	ParentEstateID	U32	}
+	}
+	{
+		TelehubBlock		Single
+		{	HasTelehub		BOOL		}
+		{	TelehubPos		LLVector3	}
+	}
+}
+
+// TelehubInfo - fill in the UI for telehub creation floater.
+// sim -> viewer
+// reliable
+{
+	TelehubInfo	Low	10 Trusted Unencoded
+	{
+		TelehubBlock		Single
+		{	ObjectID		LLUUID			}	// null if no telehub
+		{	ObjectName		Variable 1		}	// string
+		{	TelehubPos		LLVector3		}	// fallback if viewer can't find object
+		{	TelehubRot		LLQuaternion	}
+	}
+	{
+		SpawnPointBlock		Variable
+		{	SpawnPointPos	LLVector3		}	// relative to telehub position
+	}
+}
+
+// SimulatorPresentAtLocation - indicates that the sim is present at a grid
+// location and passes what it believes its neighbors are
+{
+	SimulatorPresentAtLocation Low 11 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
+// simulator -> spaceserver
+// reliable
+{
+	SimulatorLoad Low 12 Trusted Unencoded
+	{
+		SimulatorLoad		Single
+		{	TimeDilation 	F32 }
+		{	AgentCount 		S32 }
+		{	CanAcceptAgents	BOOL	}
+	}
+	{
+		AgentList	Variable
+		{	CircuitCode		U32	}
+		{	X				U8	}
+		{	Y				U8	}
+	}
+}
+
+// Simulator Shutdown Request - Tells spaceserver that a simulator is trying to shutdown
+{
+	SimulatorShutdownRequest Low 13 Trusted Unencoded
+}
+
+// ****************************************************************************
+// Presense messages
+// ****************************************************************************
+
+// sim -> dataserver
+{
+	RegionPresenceRequestByRegionID Low 14 Trusted Unencoded
+	{
+		RegionData		Variable
+		{	RegionID	LLUUID	}
+	}
+}
+
+// sim -> dataserver
+{
+	RegionPresenceRequestByHandle Low 15 Trusted Unencoded
+	{
+		RegionData		Variable
+		{	RegionHandle	U64	}
+	}
+}
+
+// dataserver -> sim
+{
+	RegionPresenceResponse Low 16 Trusted Zerocoded
+	{
+		RegionData		Variable
+		{	RegionID			LLUUID	}
+		{	RegionHandle		U64	}
+		{	InternalRegionIP	IPADDR	}
+		{	ExternalRegionIP	IPADDR	}
+		{	RegionPort			IPPORT	}
+		{	ValidUntil			F64	}
+		{	Message				Variable	1	}
+	}
+}
+ 
+
+// ****************************************************************************
+// Simulator to dataserver messages
+// ****************************************************************************
+
+// Updates SimName, EstateID and SimAccess using RegionID as a key
+{
+	UpdateSimulator Low 17 Trusted Unencoded
+	{
+		SimulatorInfo	Single
+		{	RegionID	LLUUID	}
+		{	SimName		Variable	1	}
+		{	EstateID	U32		}
+		{	SimAccess	U8		}
+	}
+}
+
+
+// record dwell time.
+{
+	LogDwellTime	Low	18 Trusted Unencoded
+	{
+		DwellInfo	Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	Duration	F32		}
+		{	SimName		Variable	1 }
+		{	RegionX		U32		}
+		{	RegionY		U32		}
+		{	AvgAgentsInView U8  }
+		{	AvgViewerFPS U8		}
+	}
+}
+
+// Disabled feature response message
+{
+	FeatureDisabled	Low 19 Trusted Unencoded
+	{
+		FailureInfo			Single
+		{	ErrorMessage	Variable	1	}
+		{	AgentID			LLUUID			}
+		{	TransactionID	LLUUID			}
+	}
+}
+
+
+// record lost money transactions.  This message could be generated
+// from either the simulator or the dataserver, depending on how
+// the transaction failed.
+{
+	LogFailedMoneyTransaction	Low 20 Trusted Unencoded
+	{
+		TransactionData	Single
+		{	TransactionID	LLUUID	}
+		{ 	TransactionTime	U32		} // utc seconds since epoch
+		{	TransactionType	S32		}	// see lltransactiontypes.h
+		{	SourceID		LLUUID  }
+		{	DestID			LLUUID	}	// destination of the transfer
+		{	Flags			U8		}
+		{	Amount			S32		}
+		{	SimulatorIP		IPADDR	}	// U32 encoded IP
+		{	GridX			U32		}
+		{	GridY			U32		}
+		{	FailureType		U8		}
+	}
+}
+
+// complaint/bug-report - sim -> dataserver. see UserReport for details.
+// reliable
+{
+	UserReportInternal Low 21 Trusted Zerocoded
+	{
+		ReportData	Single
+		{   ReportType		U8   }
+		{   Category		U8   }
+		{   ReporterID		LLUUID  }
+		{	ViewerPosition	LLVector3	}
+		{	AgentPosition	LLVector3	}
+		{   ScreenshotID	LLUUID  }
+		{   ObjectID		LLUUID  }
+		{   OwnerID			LLUUID  }
+		{   LastOwnerID		LLUUID  }
+		{   CreatorID		LLUUID  }
+		{	RegionID		LLUUID	}
+		{   AbuserID		LLUUID  }
+		{	AbuseRegionName	Variable	1	}
+		{	AbuseRegionID	LLUUID	}
+		{   Summary			Variable	1   }
+		{   Details 		Variable	2   }
+		{	VersionString	Variable	1	}
+	}
+}
+
+// SetSimStatusInDatabase
+// alters the "simulator" table in the database
+// sim -> dataserver
+// reliable
+{
+	SetSimStatusInDatabase Low 22 Trusted Unencoded
+	{
+		Data	Single
+		{	RegionID	LLUUID	}
+		{   HostName 	Variable 1	}
+		{	X			S32	}
+		{	Y			S32	}
+		{	PID			S32	}
+		{	AgentCount	S32	}
+		{	TimeToLive  S32 } // in seconds
+		{	Status		Variable	1	}
+	}
+}
+
+// SetSimPresenceInDatabase
+// updates the "presence" table in the database to ensure
+// that a given simulator is present and valid for a set amount of
+// time
+{
+	SetSimPresenceInDatabase Low 23 Trusted Unencoded
+	{
+		SimData Single
+		{   RegionID 	LLUUID	}
+		{   HostName 	Variable 1	}
+		{	GridX		U32	}
+		{	GridY		U32	}
+		{	PID			S32	}
+		{	AgentCount	S32	}
+		{	TimeToLive  S32 } // in seconds
+		{	Status		Variable	1	}
+	}
+}
+
+// ***************************************************************************
+// Economy messages
+// ***************************************************************************
+
+// once we use local stats, this will include a region handle
+{
+	EconomyDataRequest Low 24 NotTrusted Unencoded
+}
+
+// dataserver to sim, response w/ econ data
+{
+	EconomyData Low 25 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	}
+	}
+}
+
+// ***************************************************************************
+// Search messages
+// ***************************************************************************
+
+// AvatarPickerRequest
+// Get a list of names to select a person
+// viewer -> sim -> data
+// reliable
+{
+	AvatarPickerRequest Low 26 NotTrusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID		}
+		{	SessionID	LLUUID		}
+		{	QueryID		LLUUID		}
+	}
+	{
+		Data			Single
+		{	Name		Variable 1	}
+	}
+}
+
+// backend implementation which tracks if the user is a god.
+{
+	AvatarPickerRequestBackend Low 27 Trusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID		}
+		{	SessionID	LLUUID		}
+		{	QueryID		LLUUID		}
+		{	GodLevel	U8	}
+	}
+	{
+		Data			Single
+		{	Name		Variable 1	}
+	}
+}
+
+// AvatarPickerReply
+// List of names to select a person
+// reliable
+{
+	AvatarPickerReply Low 28 Trusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID		}
+		{	QueryID		LLUUID		}
+	}
+	{
+		Data			Variable
+		{	AvatarID	LLUUID		}
+		{	FirstName	Variable 1	}
+		{	LastName	Variable 1	}
+	}
+}
+
+// PlacesQuery
+// Used for getting a list of places for the group land panel
+// and the user land holdings panel.  NOT for the directory.
+{
+	PlacesQuery Low 29 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID		}
+		{	SessionID	LLUUID		}
+		{	QueryID		LLUUID		}
+	}
+	{
+		TransactionData Single
+		{	TransactionID	LLUUID	}
+	}
+	{
+		QueryData		Single
+		{	QueryText	Variable	1	}
+		{	QueryFlags	U32				}
+		{	Category	S8				}
+		{	SimName		Variable	1	}
+	}
+}
+
+// PlacesReply
+// dataserver -> simulator -> viewer
+// If the user has specified a location, use that to compute
+// global x,y,z.  Otherwise, use center of the AABB.
+// reliable
+{
+	PlacesReply Low 30 Trusted Zerocoded UDPDeprecated
+	{
+		AgentData		Single
+		{	AgentID		LLUUID		}
+		{	QueryID		LLUUID		}
+	}
+	{
+		TransactionData Single
+		{	TransactionID	LLUUID	}
+	}
+	{
+		QueryData		Variable
+		{	OwnerID			LLUUID			}
+		{	Name			Variable	1	}
+		{	Desc			Variable	1	}
+		{	ActualArea		S32				}
+		{	BillableArea	S32				}
+		{	Flags			U8				}
+		{	GlobalX			F32				}	// meters
+		{	GlobalY			F32				}	// meters
+		{	GlobalZ			F32				}	// meters
+		{	SimName			Variable	1	}
+		{	SnapshotID		LLUUID			}
+		{	Dwell			F32				}
+		{	Price			S32				}
+		//{	ProductSKU		Variable	1	}
+	}
+}
+
+// DirFindQuery viewer->sim
+// Message to start asking questions for the directory 
+{
+	DirFindQuery Low 31 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID		}
+		{	SessionID	LLUUID		}
+	}
+	{
+		QueryData		Single
+		{	QueryID		LLUUID		}
+		{	QueryText	Variable 1	}
+		{	QueryFlags	U32			}
+		{	QueryStart	S32			}	// prev/next page support
+	}
+}
+
+// DirFindQueryBackend sim->data
+// Trusted message generated by receipt of DirFindQuery to sim.
+{
+	DirFindQueryBackend Low 32 Trusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID		}
+	}
+	{
+		QueryData		Single
+		{	QueryID		LLUUID		}
+		{	QueryText	Variable 1	}
+		{	QueryFlags	U32			}
+		{	QueryStart	S32			}	// prev/next page support
+		{	EstateID	U32			}
+		{	Godlike		BOOL		}
+	}
+}
+
+
+// DirPlacesQuery viewer->sim
+// Used for the Find directory of places
+{
+	DirPlacesQuery Low 33 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 sim->dataserver
+// Used for the Find directory of places.
+{
+	DirPlacesQueryBackend Low 34 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 dataserver->sim->viewer
+// If the user has specified a location, use that to compute
+// global x,y,z.  Otherwise, use center of the AABB.
+// reliable
+{
+	DirPlacesReply Low 35 Trusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID		}
+	}
+	{
+		QueryData		Variable
+		{	QueryID		LLUUID		}
+	}
+	{
+		QueryReplies            Variable
+		{	ParcelID		LLUUID		}
+		{	Name			Variable 1	}
+		{	ForSale			BOOL		}
+		{	Auction			BOOL		}
+		{	Dwell			F32			}
+	}
+	{
+		StatusData            Variable
+		{	Status		U32		}
+	}
+}
+
+// DirPeopleReply
+{
+	DirPeopleReply Low 36 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
+{
+	DirEventsReply Low 37 Trusted 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				}
+	}
+	{
+		StatusData Variable
+		{	Status		U32			}
+	}
+}
+
+// DirGroupsReply
+// dataserver -> userserver -> viewer
+// reliable
+{
+	DirGroupsReply Low 38 Trusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID			}
+	}
+	{
+		QueryData		Single
+		{	QueryID		LLUUID			}
+	}
+	{
+		QueryReplies	Variable
+		{	GroupID			LLUUID			}
+		{	GroupName		Variable	1	}	// string
+		{	Members			S32				}
+		{	SearchOrder		F32				}
+	}
+}
+
+
+// DirClassifiedQuery viewer->sim
+// reliable
+{
+	DirClassifiedQuery Low 39 NotTrusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+		{	SessionID		LLUUID	}
+	}
+	{
+		QueryData			Single
+		{	QueryID			LLUUID			}
+		{	QueryText		Variable	1	}
+		{	QueryFlags		U32				}
+		{	Category		U32				}
+		{	QueryStart	S32					}
+	}
+}
+
+// DirClassifiedQueryBackend sim->dataserver
+// reliable
+{
+	DirClassifiedQueryBackend Low 40 Trusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+	}
+	{
+		QueryData			Single
+		{	QueryID			LLUUID			}
+		{	QueryText		Variable	1	}
+		{	QueryFlags		U32				}
+		{	Category		U32				}
+		{	EstateID		U32				}
+		{	Godlike			BOOL			}
+		{	QueryStart	S32					}
+	}
+}
+
+// DirClassifiedReply dataserver->sim->viewer
+// reliable
+{
+	DirClassifiedReply Low 41 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			}
+	}
+	{
+		StatusData Variable
+		{	Status			U32		}
+	}
+}
+
+
+// AvatarClassifiedReply
+// dataserver -> simulator -> viewer
+// Send the header information for this avatar's classifieds
+// This fills in the tabs of the Classifieds panel.
+// reliable
+{
+	AvatarClassifiedReply Low 42 Trusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID			LLUUID		}
+		{	TargetID		LLUUID		}
+	}
+	{
+		Data			Variable
+		{	ClassifiedID	LLUUID		}
+		{	Name			Variable 1	}
+	}
+}
+
+
+// ClassifiedInfoRequest
+// viewer -> simulator
+// simulator -> dataserver
+// reliable
+{
+	ClassifiedInfoRequest Low 43 NotTrusted Zerocoded
+	{
+		AgentData        Single
+		{    AgentID        LLUUID		}
+		{    SessionID      LLUUID		}
+	}
+	{
+		Data        Single
+		{	ClassifiedID	LLUUID		}
+	}
+}
+
+
+// ClassifiedInfoReply
+// dataserver -> simulator
+// simulator -> viewer
+// reliable
+{
+	ClassifiedInfoReply Low 44 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
+// Update a classified.  ParcelID and EstateID are set
+// on the simulator as the message passes through.
+// viewer -> simulator -> dataserver
+// reliable
+{
+	ClassifiedInfoUpdate Low 45 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
+// Delete a classified from the database.
+// viewer -> simulator -> dataserver
+// reliable
+{
+	ClassifiedDelete Low 46 NotTrusted Unencoded
+	{
+		AgentData	Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		Data	Single
+		{	ClassifiedID	LLUUID		}
+	}
+}
+
+// ClassifiedGodDelete
+// Delete a classified from the database.
+// QueryID is needed so database can send a repeat list of 
+// classified.
+// viewer -> simulator -> dataserver
+// reliable
+{
+	ClassifiedGodDelete Low 47 NotTrusted Unencoded
+	{
+		AgentData	Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		Data	Single
+		{	ClassifiedID	LLUUID		}
+		{	QueryID			LLUUID		}
+	}
+}
+
+
+// DirLandQuery viewer->sim
+// Special query for the land for sale/auction panel.
+// reliable
+{
+	DirLandQuery Low 48 NotTrusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+		{	SessionID		LLUUID	}
+	}
+	{
+		QueryData			Single
+		{	QueryID			LLUUID	}
+		{	QueryFlags		U32		}
+		{	SearchType		U32		}
+		{	Price			S32		}
+		{	Area			S32		}
+		{	QueryStart		S32		}
+	}
+}
+
+// DirLandQueryBackend sim->dataserver
+// Special query for the land for sale/auction panel.
+{
+	DirLandQueryBackend Low 49 Trusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+	}
+	{
+		QueryData			Single
+		{	QueryID			LLUUID	}
+		{	QueryFlags		U32		}
+		{	SearchType		U32		}
+		{	Price			S32		}
+		{	Area			S32		}
+		{	QueryStart		S32		}
+		{	EstateID		U32		}
+		{	Godlike			BOOL	}
+	}
+}
+
+// DirLandReply
+// dataserver -> simulator -> viewer
+// reliable
+{
+	DirLandReply Low 50 Trusted Zerocoded UDPDeprecated
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+	}
+	{
+		QueryData			Single
+		{	QueryID			LLUUID		}
+	}
+	{
+		QueryReplies		Variable
+		{	ParcelID		LLUUID		}
+		{	Name			Variable 1	}
+		{	Auction			BOOL		}
+		{	ForSale			BOOL		}
+		{	SalePrice		S32			}
+		{	ActualArea		S32			}
+		//{	ProductSKU		Variable 1	}
+	}
+}
+
+// DEPRECATED: DirPopularQuery viewer->sim
+// Special query for the land for sale/auction panel.
+// reliable
+{
+	DirPopularQuery Low 51 NotTrusted Zerocoded Deprecated
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+		{	SessionID		LLUUID	}
+	}
+	{
+		QueryData			Single
+		{	QueryID			LLUUID	}
+		{	QueryFlags		U32		}
+	}
+}
+
+// DEPRECATED: DirPopularQueryBackend sim->dataserver
+// Special query for the land for sale/auction panel.
+// reliable
+{
+	DirPopularQueryBackend Low 52 Trusted Zerocoded Deprecated
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+	}
+	{
+		QueryData			Single
+		{	QueryID			LLUUID	}
+		{	QueryFlags		U32		}
+		{	EstateID		U32		}
+		{	Godlike			BOOL	}
+	}
+}
+
+// DEPRECATED: DirPopularReply
+// dataserver -> simulator -> viewer
+// reliable
+{
+	DirPopularReply Low 53 Trusted Zerocoded Deprecated
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+	}
+	{
+		QueryData			Single
+		{	QueryID			LLUUID		}
+	}
+	{
+		QueryReplies		Variable
+		{	ParcelID		LLUUID		}
+		{	Name			Variable 1	}
+		{	Dwell			F32			}
+	}
+}
+
+// ParcelInfoRequest
+// viewer -> simulator -> dataserver
+// reliable
+{
+	ParcelInfoRequest Low 54 NotTrusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID	}
+	}
+	{
+		Data			Single
+		{	ParcelID		LLUUID		}
+	}
+}
+
+// ParcelInfoReply
+// dataserver -> simulator -> viewer
+// reliable
+{
+	ParcelInfoReply Low 55 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				}	// meters
+		{	GlobalY			F32				}	// meters
+		{	GlobalZ			F32				}	// meters
+		{	SimName			Variable	1	}
+		{	SnapshotID		LLUUID			}
+		{	Dwell			F32				}
+		{	SalePrice		S32				}
+		{	AuctionID		S32				}
+	}
+}
+
+
+// ParcelObjectOwnersRequest
+// viewer -> simulator
+// reliable
+{
+	ParcelObjectOwnersRequest Low 56 NotTrusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID	}
+	}
+	{
+		ParcelData		Single
+		{	LocalID			S32		}
+	}
+}
+
+
+// ParcelObjectOwnersReply
+// simulator -> viewer
+// reliable
+{
+	ParcelObjectOwnersReply Low 57 Trusted Zerocoded UDPDeprecated
+	{
+		Data			Variable
+		{	OwnerID			LLUUID			}
+		{	IsGroupOwned	BOOL			}
+		{	Count			S32				}
+		{	OnlineStatus	BOOL			}
+	}
+}
+
+// GroupNoticeListRequest
+// viewer -> simulator -> dataserver
+// reliable
+{
+	GroupNoticesListRequest	Low	58 NotTrusted	Unencoded
+	{
+		AgentData        Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		Data        Single
+		{	GroupID			LLUUID		}
+	}
+}
+
+// GroupNoticesListReply
+// dataserver -> simulator -> viewer
+// reliable
+{
+	GroupNoticesListReply	Low	59 Trusted	Unencoded
+	{
+		AgentData	Single
+		{	AgentID			LLUUID		}
+		{	GroupID			LLUUID		}
+	}
+	{
+		Data		Variable
+		{	NoticeID		LLUUID		}
+		{	Timestamp		U32			}
+		{	FromName		Variable 2	}
+		{	Subject			Variable 2	}
+		{	HasAttachment	BOOL		}
+		{	AssetType		U8			}
+	}
+}
+
+// GroupNoticeRequest
+// viewer -> simulator
+// simulator -> dataserver
+// reliable
+{
+	GroupNoticeRequest Low 60 NotTrusted Unencoded
+	{
+		AgentData        Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		Data        Single
+		{	GroupNoticeID	LLUUID		}
+	}
+}
+
+// GroupNoticeAdd
+// Add a group notice. 
+// simulator -> dataserver
+// reliable
+{
+	GroupNoticeAdd Low 61 Trusted Unencoded
+	{
+		AgentData	Single
+		{	AgentID			LLUUID		}
+	}
+	{
+		MessageBlock		Single
+		{	ToGroupID		LLUUID	}
+		{	ID				LLUUID	}
+		{	Dialog			U8	}
+		{	FromAgentName	Variable	1	}
+		{	Message			Variable	2	}
+		{	BinaryBucket	Variable	2	}
+	}
+}
+
+
+// ****************************************************************************
+// Teleport messages
+//
+// The teleport messages are numerous, so I have attempted to give them a 
+// consistent naming convention. Since there is a bit of glob pattern
+// aliasing, the rules are applied in order.
+//
+// Teleport* - viewer->sim or sim->viewer message which announces a 
+//             teleportation request, progrees, start, or end.
+// Data* - sim->data or data->sim trusted message.
+// Space* - sim->space or space->sim trusted messaging
+// *Lure - A lure message to pass around information.
+//
+// All actual viewer teleports will begin with a Teleport* message and
+// end in a TeleportStart, TeleportLocal or TeleportFailed message. The TeleportFailed
+// message may be returned by any process and must be routed through the
+// teleporting agent's simulator and back to the viewer.
+// ****************************************************************************
+
+// TeleportRequest
+// viewer -> sim specifying exact teleport destination
+{
+	TeleportRequest	Low	62 NotTrusted Unencoded
+	{
+		AgentData	Single
+		{	AgentID		LLUUID		}
+		{	SessionID	LLUUID		}
+	}
+	{
+		Info		Single
+		{	RegionID	LLUUID		}
+		{	Position	LLVector3	}
+		{	LookAt		LLVector3	}
+	}
+}
+
+// TeleportLocationRequest
+// viewer -> sim specifying exact teleport destination
+{
+	TeleportLocationRequest	Low	63 NotTrusted Unencoded
+	{
+		AgentData	Single
+		{	AgentID		LLUUID		}
+		{	SessionID	LLUUID		}
+	}
+	{
+		Info	Single
+		{	RegionHandle	U64			}
+		{	Position		LLVector3	}
+		{	LookAt			LLVector3	}
+	}
+}
+
+// TeleportLocal
+// sim -> viewer reply telling the viewer that we've successfully TP'd
+// to somewhere else within the sim
+{
+	TeleportLocal Low 64 Trusted Unencoded
+	{
+		Info		Single
+		{	AgentID			LLUUID			}
+		{	LocationID		U32				}
+		{	Position		LLVector3		}	// region
+		{	LookAt			LLVector3		}
+		{	TeleportFlags 	U32				}
+	}
+}
+
+// TeleportLandmarkRequest viewer->sim
+// teleport to landmark asset ID destination. use LLUUD::null for home.
+{
+	TeleportLandmarkRequest Low 65 NotTrusted Zerocoded
+	{
+		Info		Single
+		{	AgentID			LLUUID	}
+		{	SessionID		LLUUID	}
+		{	LandmarkID		LLUUID	}
+	}
+}
+
+// TeleportProgress sim->viewer
+// Tell the agent how the teleport is going.
+{
+	TeleportProgress Low 66 Trusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+	}
+	{
+		Info			Single
+		{	TeleportFlags	U32			}
+		{	Message		Variable	1	}  // string
+	}
+}
+
+// DataHomeLocationRequest sim->data
+// Request 
+{
+	DataHomeLocationRequest Low 67 Trusted Zerocoded
+	{
+		Info		Single
+		{	AgentID			LLUUID	}
+		{	KickedFromEstateID	U32	}
+	}
+	{
+		AgentInfo	Single
+		{   AgentEffectiveMaturity U32  }
+	}
+}
+
+// DataHomeLocationReply data->sim
+// response is the location of agent home.
+{
+	DataHomeLocationReply Low 68 Trusted Unencoded
+	{
+		Info		Single
+		{	AgentID			LLUUID		}
+		{	RegionHandle	U64			}
+		{	Position		LLVector3	}	// region coords
+		{	LookAt			LLVector3	}
+	}
+}
+
+
+// TeleportFinish sim->viewer
+// called when all of the information has been collected and readied for 
+// the agent.
+{
+	TeleportFinish Low 69 Trusted Unencoded UDPBlackListed
+	{
+		Info		Single
+		{	AgentID			LLUUID			}
+		{	LocationID		U32				}
+		{	SimIP			IPADDR			}
+		{	SimPort			IPPORT			}
+		{	RegionHandle	U64				}
+		{	SeedCapability	Variable	2	}	// URL
+		{	SimAccess		U8				}
+		{	TeleportFlags 	U32				}
+	}
+}
+
+// StartLure viewer->sim
+// Sent from viewer to the local simulator to lure target id to near 
+// agent id. This will generate an instant message that will be routed 
+// through the space server and out to the userserver. When that IM 
+// goes through the userserver and the TargetID is online, the 
+// userserver will send an InitializeLure to the spaceserver. When that
+// packet is acked, the original instant message is finally forwarded to 
+// TargetID.
+{
+	StartLure	Low	70 NotTrusted Unencoded
+	{
+		AgentData	Single
+		{	AgentID			LLUUID			}
+		{	SessionID		LLUUID			}
+	}
+	{
+		Info	Single
+		{	LureType 		U8	 			}
+		{	Message			Variable	1	}
+	}
+	{
+		TargetData Variable
+		{	TargetID		LLUUID			}
+	}
+}
+
+// TeleportLureRequest viewer->sim
+// Message from target of lure to begin the teleport process on the 
+// local simulator.
+{
+	TeleportLureRequest	Low	71 NotTrusted Unencoded
+	{
+		Info	Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	LureID		LLUUID	}
+		{	TeleportFlags 	U32				}
+	}
+}
+
+// TeleportCancel viewer->sim
+// reliable
+{
+	TeleportCancel	Low	72 NotTrusted Unencoded
+	{
+		Info	Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+}
+
+
+// TeleportStart sim->viewer
+// announce a successful teleport request to the viewer.
+{
+	TeleportStart Low 73 Trusted Unencoded
+	{
+		Info	Single
+		{	TeleportFlags	U32		}
+	}
+}
+
+// TeleportFailed somewhere->sim->viewer
+// announce failure of teleport request
+{
+	TeleportFailed Low 74 Trusted Unencoded
+	{
+		Info		Single
+		{	AgentID		LLUUID			}
+		{	Reason		Variable	1	}  // string
+	}
+	{
+		AlertInfo			Variable
+		{	Message			Variable	1	}	// string id
+		{	ExtraParams		Variable	1	}	// llsd extra parameters
+	}
+}
+
+
+// ***************************************************************************
+// Viewer to Simulator Messages
+// ***************************************************************************
+
+// Undo
+{
+	Undo Low 75 NotTrusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	GroupID		LLUUID	}
+	}
+	{
+		ObjectData		Variable
+		{	ObjectID	LLUUID	}
+	}
+}
+
+
+// Redo
+{
+	Redo Low 76 NotTrusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	GroupID		LLUUID	}
+	}
+	{
+		ObjectData		Variable
+		{	ObjectID	LLUUID	}
+	}
+}
+
+// UndoLand
+{
+	UndoLand Low 77 NotTrusted Unencoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+}
+
+
+// AgentPause - viewer occasionally will block, inform simulator of this fact
+{
+	AgentPause Low 78 NotTrusted Unencoded
+	{
+		AgentData			Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	SerialNum	U32		}	// U32, used by both pause and resume. Non-increasing numbers are ignored.
+	}
+}
+
+// AgentResume - unblock the agent
+{
+	AgentResume Low 79 NotTrusted Unencoded
+	{
+		AgentData			Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	SerialNum	U32		}	// U32, used by both pause and resume. Non-increasing numbers are ignored.
+	}
+}
+
+
+// AgentUpdate - Camera info sent from viewer to simulator
+// or, more simply, two axes and compute cross product
+// State data is temporary, indicates current behavior state:
+//	0 = walking
+//  1 = mouselook
+//  2 = typing 
+//  
+// Center is region local (JNC 8.16.2001)
+// Camera center is region local (JNC 8.29.2001)
+{
+	AgentUpdate High 4 NotTrusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID	}
+		{	SessionID		LLUUID	}
+		{	BodyRotation	LLQuaternion	}
+		{	HeadRotation	LLQuaternion	}
+		{	State			U8	}
+		{	CameraCenter	LLVector3	}
+		{	CameraAtAxis	LLVector3	}
+		{	CameraLeftAxis	LLVector3	}
+		{	CameraUpAxis	LLVector3	}
+		{	Far				F32	}
+		{	ControlFlags	U32	}
+		{	Flags			U8	}
+	}
+}
+
+// ChatFromViewer
+// Specifies the text to be said and the "type", 
+// normal speech, shout, whisper.
+// with the specified radius
+{
+	ChatFromViewer Low 80 NotTrusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		ChatData			Single
+		{	Message			Variable 2	}
+		{	Type			U8			}
+		{	Channel			S32			}
+	}
+}
+
+
+// AgentThrottle
+{
+	AgentThrottle Low 81 NotTrusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+		{	CircuitCode		U32		}
+	}
+	{
+		Throttle			Single
+		{	GenCounter		U32		}
+		{	Throttles		Variable 1	}
+	}
+}
+
+
+// AgentFOV - Update to agent's field of view, angle is vertical, single F32 float in radians
+{
+	AgentFOV Low 82 NotTrusted Unencoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+		{	CircuitCode		U32		}
+	}
+	{
+		FOVBlock			Single
+		{	GenCounter		U32		}
+		{	VerticalAngle	F32	}
+	}
+}
+
+
+// AgentHeightWidth - Update to height and aspect, sent as height/width to save space
+// Usually sent when window resized or created
+{
+	AgentHeightWidth Low 83 NotTrusted Unencoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+		{	CircuitCode		U32		}
+	}
+	{
+		HeightWidthBlock	Single
+		{	GenCounter		U32		}
+		{	Height			U16	}
+		{	Width			U16	}
+	}
+}
+
+
+// AgentSetAppearance - Update to agent appearance
+{
+	AgentSetAppearance Low 84 NotTrusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+		{	SerialNum		U32	}	// U32, Increases every time the appearance changes. A value of 0 resets.
+		{ 	Size			LLVector3	}
+	}
+	{
+		WearableData		Variable
+		{	CacheID			LLUUID }
+		{	TextureIndex	U8 }
+	}
+	{
+		ObjectData			Single
+		{	TextureEntry	Variable	2	}
+	}
+	{
+		VisualParam			Variable
+		{	ParamValue		U8	}
+	}
+}
+
+// AgentAnimation - Update animation state
+// viewer --> simulator
+{
+	AgentAnimation High 5 NotTrusted Unencoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		AnimationList Variable
+		{ AnimID		LLUUID }
+		{ StartAnim		BOOL }
+	}
+	{
+		PhysicalAvatarEventList Variable
+		{ TypeData		Variable	1 }
+	}
+}
+
+// AgentRequestSit - Try to sit on an object
+{
+	AgentRequestSit		High 6  NotTrusted Zerocoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		TargetObject	Single
+		{	TargetID	LLUUID	}
+		{	Offset		LLVector3	}
+	}
+}
+
+// AgentSit - Actually sit on object
+{
+	AgentSit			High 7  NotTrusted Unencoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+}
+
+
+// quit message sent between simulators
+{
+	AgentQuitCopy Low 85 NotTrusted Unencoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		FuseBlock			Single
+		{	ViewerCircuitCode	U32	}
+	}
+}
+
+
+// Request Image - Sent by the viewer to request a specified image at a specified resolution
+
+{
+	RequestImage High 8 NotTrusted Unencoded
+	{
+		AgentData			Single
+		{	AgentID			LLUUID		}
+		{	SessionID		LLUUID		}
+	}
+	{
+		RequestImage			Variable
+		{	Image				LLUUID	}
+		{	DiscardLevel		S8	}
+		{	DownloadPriority	F32	}
+		{	Packet				U32	}
+		{	Type				U8	}
+	}
+}
+
+// ImageNotInDatabase
+// Simulator informs viewer that a requsted image definitely does not exist in the asset database
+{
+	ImageNotInDatabase Low 86 Trusted Unencoded
+	{
+		ImageID				Single
+		{	ID				LLUUID	}
+	}
+}
+
+// RebakeAvatarTextures
+// simulator -> viewer request when a temporary baked avatar texture is not found
+{
+	RebakeAvatarTextures Low 87 Trusted Unencoded
+	{
+		TextureData			Single
+		{	TextureID		LLUUID	}
+	}
+}
+
+
+// SetAlwaysRun
+// Lets the viewer choose between running and walking
+{
+	SetAlwaysRun Low 88 NotTrusted Unencoded
+	{
+		AgentData				Single
+		{	AgentID			LLUUID	}
+		{	SessionID		LLUUID	}
+		{	AlwaysRun		BOOL	}
+	}
+}
+
+// ObjectAdd - create new object in the world
+// Simulator will assign ID and send message back to signal
+// object actually created.
+//
+// AddFlags (see also ObjectUpdate)
+// 0x01 - use physics
+// 0x02 - create selected
+//
+// If only one ImageID is sent for an object type that has more than
+// one face, the same image is repeated on each subsequent face.
+// 
+// Data field is opaque type-specific data for this object
+{
+	ObjectAdd Medium 1 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	GroupID			LLUUID	}
+	}
+	{
+		ObjectData			Single
+		{	PCode			U8	}
+		{	Material		U8	}
+		{	AddFlags		U32	}	// see object_flags.h
+
+		{	PathCurve		U8	}
+		{	ProfileCurve	U8	}
+		{	PathBegin		U16	}	// 0 to 1, quanta = 0.01
+		{	PathEnd			U16	}	// 0 to 1, quanta = 0.01
+		{	PathScaleX		U8	}	// 0 to 1, quanta = 0.01
+		{	PathScaleY		U8	}	// 0 to 1, quanta = 0.01
+		{	PathShearX		U8	}	// -.5 to .5, quanta = 0.01
+		{	PathShearY		U8	}	// -.5 to .5, quanta = 0.01
+		{	PathTwist		S8	}	// -1 to 1, quanta = 0.01
+		{	PathTwistBegin		S8	}	// -1 to 1, quanta = 0.01
+		{ 	PathRadiusOffset 	S8	} 	// -1 to 1, quanta = 0.01
+		{ 	PathTaperX		S8	}	// -1 to 1, quanta = 0.01
+		{	PathTaperY		S8	}	// -1 to 1, quanta = 0.01
+		{	PathRevolutions		U8	}	// 0 to 3, quanta = 0.015
+		{	PathSkew		S8	}	// -1 to 1, quanta = 0.01
+		{	ProfileBegin	U16	}	// 0 to 1, quanta = 0.01
+		{	ProfileEnd		U16	}	// 0 to 1, quanta = 0.01
+		{	ProfileHollow	U16	}	// 0 to 1, quanta = 0.01
+
+		{	BypassRaycast	U8	}
+		{	RayStart		LLVector3	}
+		{	RayEnd			LLVector3	}
+		{	RayTargetID		LLUUID	}
+		{	RayEndIsIntersection	U8	}
+
+		{	Scale			LLVector3	}
+		{	Rotation		LLQuaternion	}
+
+		{	State			U8	}
+	}
+}
+
+
+// ObjectDelete
+// viewer -> simulator
+{
+	ObjectDelete Low 89 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	Force		BOOL	}	// BOOL, god trying to force delete
+	}
+	{
+		ObjectData		Variable
+		{	ObjectLocalID	U32	}
+	}
+}
+
+
+// ObjectDuplicate
+// viewer -> simulator
+// Makes a copy of a set of objects, offset by a given amount
+{
+	ObjectDuplicate Low 90 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	GroupID		LLUUID	}
+	}
+	{
+		SharedData			Single
+		{	Offset			LLVector3	}
+		{	DuplicateFlags	U32			}	// see object_flags.h
+	}
+	{
+		ObjectData			Variable
+		{	ObjectLocalID		U32		}
+	}
+}
+
+
+// ObjectDuplicateOnRay
+// viewer -> simulator
+// Makes a copy of an object, using the add object raycast
+// code to abut it to other objects.
+{
+	ObjectDuplicateOnRay Low 91 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID					LLUUID	}
+		{	SessionID				LLUUID	}
+		{	GroupID					LLUUID	}
+		{	RayStart				LLVector3	}	// region local
+		{	RayEnd					LLVector3	}	// region local
+		{	BypassRaycast			BOOL	}
+		{	RayEndIsIntersection	BOOL	}
+		{	CopyCenters				BOOL	}
+		{	CopyRotates				BOOL	}
+		{	RayTargetID				LLUUID	}
+		{	DuplicateFlags			U32		}	// see object_flags.h
+	}
+	{
+		ObjectData			Variable
+		{	ObjectLocalID			U32		}
+	}
+}
+
+
+// MultipleObjectUpdate
+// viewer -> simulator
+// updates position, rotation and scale in one message
+// positions sent as region-local floats
+{
+	MultipleObjectUpdate Medium 2 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID			LLUUID	}
+		{	SessionID		LLUUID	}
+	}
+	{
+		ObjectData		Variable 
+		{	ObjectLocalID	U32		}
+		{   Type			U8		}
+		{	Data			Variable	1	}	// custom type
+	}
+}
+
+// RequestMultipleObjects
+// viewer -> simulator
+// reliable
+//
+// When the viewer gets a local_id/crc for an object that
+// it either doesn't have, or doesn't have the current version
+// of, it sends this upstream get get an update.
+//
+// CacheMissType 0 => full object (viewer doesn't have it)
+// CacheMissType 1 => CRC mismatch only
+{
+	RequestMultipleObjects Medium 3 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID		LLUUID	}
+	}
+	{
+		ObjectData	Variable 
+		{	CacheMissType	U8	}
+		{	ID				U32	}
+	}
+}
+
+
+// DEPRECATED: ObjectPosition
+// == Old Behavior ==
+// Set the position on objects
+//
+// == Reason for deprecation ==
+// Unused code path was removed in the move to Havok4
+// Object position, scale and rotation messages were already unified
+// to MultipleObjectUpdate and this message was unused cruft.
+//
+// == New Location ==
+// MultipleObjectUpdate can be used instead.
+{
+	ObjectPosition Medium 4 NotTrusted Zerocoded Deprecated
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData		Variable
+		{	ObjectLocalID	U32			}
+		{	Position		LLVector3	}	// region
+	}
+}
+
+
+// DEPRECATED: ObjectScale
+// == Old Behavior ==
+// Set the scale on objects
+//
+// == Reason for deprecation ==
+// Unused code path was removed in the move to Havok4
+// Object position, scale and rotation messages were already unified
+// to MultipleObjectUpdate and this message was unused cruft.
+//
+// == New Location ==
+// MultipleObjectUpdate can be used instead.
+{
+	ObjectScale Low 92 NotTrusted Zerocoded Deprecated
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData		Variable
+		{	ObjectLocalID	U32			}
+		{	Scale			LLVector3	}
+	}
+}
+
+
+// ObjectRotation
+// viewer -> simulator
+{
+	ObjectRotation Low 93 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData		Variable
+		{	ObjectLocalID	U32				}
+		{	Rotation		LLQuaternion	}
+	}
+}
+
+
+// ObjectFlagUpdate
+// viewer -> simulator
+{
+	ObjectFlagUpdate Low 94 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	ObjectLocalID	U32		}
+		{	UsePhysics		BOOL	}
+		{	IsTemporary		BOOL	}
+		{	IsPhantom		BOOL	}
+		{	CastsShadows	BOOL	}
+	}
+}
+
+
+// ObjectClickAction
+// viewer -> simulator
+{
+	ObjectClickAction Low 95 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData		Variable
+		{	ObjectLocalID	U32		}
+		{	ClickAction		U8		}
+	}
+}
+
+
+// ObjectImage
+// viewer -> simulator
+{
+	ObjectImage Low 96 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData			Variable
+		{	ObjectLocalID		U32				}
+		{	MediaURL			Variable	1	}
+		{	TextureEntry		Variable	2	}
+	}
+}
+
+
+{
+	ObjectMaterial Low 97 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData		Variable
+		{	ObjectLocalID	U32	}
+		{	Material	U8	}
+	}
+}
+
+
+{
+	ObjectShape Low 98 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData			Variable
+		{	ObjectLocalID	U32	}
+		{	PathCurve		U8	}
+		{	ProfileCurve	U8	}
+		{	PathBegin		U16	}	// 0 to 1, quanta = 0.01
+		{	PathEnd			U16	}	// 0 to 1, quanta = 0.01
+		{	PathScaleX		U8	}	// 0 to 1, quanta = 0.01
+		{	PathScaleY		U8	}	// 0 to 1, quanta = 0.01
+		{	PathShearX		U8	}	// -.5 to .5, quanta = 0.01
+		{	PathShearY		U8	}	// -.5 to .5, quanta = 0.01
+		{	PathTwist		S8	}	// -1 to 1, quanta = 0.01
+		{	PathTwistBegin		S8	}	// -1 to 1, quanta = 0.01
+		{ 	PathRadiusOffset 	S8	} 	// -1 to 1, quanta = 0.01
+		{ 	PathTaperX		S8	}	// -1 to 1, quanta = 0.01
+		{	PathTaperY		S8	}	// -1 to 1, quanta = 0.01
+		{	PathRevolutions		U8	}	// 0 to 3, quanta = 0.015
+		{	PathSkew		S8	}	// -1 to 1, quanta = 0.01
+		{	ProfileBegin	U16	}	// 0 to 1, quanta = 0.01
+		{	ProfileEnd		U16	}	// 0 to 1, quanta = 0.01
+		{	ProfileHollow	U16	}	// 0 to 1, quanta = 0.01
+	}
+}
+
+{
+	ObjectExtraParams Low 99 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		ObjectData			Variable
+		{	ObjectLocalID	U32				}
+		{	ParamType		U16				}
+		{	ParamInUse		BOOL			}
+		{	ParamSize		U32				}
+		{	ParamData		Variable	1	}
+	}
+}
+
+
+// ObjectOwner
+// To make public, set OwnerID to LLUUID::null.
+// TODO: Eliminate god-bit. Maybe not. God-bit is ok, because it's
+// known on the server.
+{
+	ObjectOwner Low 100 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}
+	{
+		HeaderData		Single
+		{	Override	BOOL	}	// BOOL, God-bit.
+		{	OwnerID		LLUUID	}
+		{	GroupID		LLUUID	}
+	}
+	{
+		ObjectData	Variable
+		{	ObjectLocalID	U32	}
+	}
+}
+
+// ObjectGroup
+// To make the object part of no group, set GroupID = LLUUID::null.
+// This call only works if objectid.ownerid == agentid.
+{
+	ObjectGroup	Low	101 NotTrusted Zerocoded
+	{
+		AgentData	Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	GroupID		LLUUID	}
+	}
+	{
+		ObjectData	Variable
+		{	ObjectLocalID	U32	}
+	}
+}
+
+// Attempt to buy an object. This will only pack root objects.
+{
+	ObjectBuy Low 102 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+		{	GroupID		LLUUID	}
+		{	CategoryID	LLUUID	}	// folder where it goes (if derezed)
+	}
+	{
+		ObjectData		Variable
+		{	ObjectLocalID	U32	}
+		{	SaleType		U8	}   // U8 -> EForSale
+		{	SalePrice		S32	}
+	}
+}
+
+// viewer -> simulator
+
+// buy object inventory. If the transaction succeeds, it will add
+// inventory to the agent, and potentially remove the original.
+{
+	BuyObjectInventory	Low	103 NotTrusted Zerocoded
+	{
+		AgentData		Single
+		{	AgentID		LLUUID	}
+		{	SessionID	LLUUID	}
+	}