OpenSimulatorToViewerInventoryProtocol

From OpenSimulator

Revision as of 05:01, 4 March 2015 by Acryline (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

Introduction

This is a page which gives some details about the protocols used to transfer inventory between a viewer (client) and an OpenSimulator installation. Like many pages, it is a work-in-progress, so if there are more things you would like to know, please ask on the opensim-dev Mailing Lists.

Protocols

There are two OpenSimulator <-> viewer inventory protocols. The first works purely with UDP messages. The second uses HTTP instead via capabilities to replace the fetch parts of the UDP protocol.

The UDP protocol is older and the fetch parts have been replaced in the Linden Lab grid completely by the HTTP capability protocol. However, some viewers can still fall back on the UDP for fetching and it remains supported in OpenSimulator.

Other inventory operations (e.g. folder creation) are still done via UDP.

The HTTP protocol should perform considerably better than the UDP protocol for users with large inventories. However, many viewers provide the option to fallback to UDP inventory if there are issues with the HTTP protocol. It is also possible to disable the HTTP protocol in the OpenSimulator installation by disabling the capabilties.

UDP Protocol

These are some of the UDP messages involved in protocol manipuation. Warning: list is probably incomplete, need to fill out.

 BulkUpdateInventory
   server -> client
   sent when an inventory item is given to the agent
   contains only the update item(s)
 CreateInventoryItem
   client -> server
   received when a client directly creates a new item in inventory
   not when a client takes an object or a copy of an object from the environment
 FetchInventory
   client -> server
   fetch the details of a particular item
 FetchInventoryDescendents
   client -> server
   received when an inventory folder is opened
   InventoryDescendents is the reply
 FetchInventoryReplyPacket
   server -> client
   contains inventory item details
   for some reason this is the same as item data sent in InventoryDescendents
 InventoryDescendents
   reply packet for FetchInventoryDescendents containing inventory details
   contains folder and item data
 LinkInventoryItem
   client -> server
   link an inventory item to an existing item
 RemoveInventoryItem
   invoked by the client when Purge Item is selected on an item in the trash
 UpdateCreateInventoryItem
   server -> client
   sent when 
     an item is derezzed into an avatar's inventory
     an item is dragged into an avatar's inventory
 UpdateInventoryItem
   client <-> server
   sent server -> client
     apparently when a derez suceeds
   sent client -> server
     when different eyes are worn in viewer 2
       possibly this is to change worn status
 UpdateInventoryFolder
   called when a folder is renamed

HTTP protocol

The HTTP protocol works via various Capabilities. The capabilities required for HTTP transfer at the present time are

  • FetchInventory2
  • FetchInventoryDescendents2
  • FetchLib2
  • FetchLibDescendents2

For more details about how they operate, please see the Linden Lab Inventory capabilities document.

Historically, the following capabilities were used. However, these have been obsolete for a long time and can be disregarded.

  • FetchInventory
  • FetchLib
  • FetchLibDescendents

If the inventory capabilities are disabled, then some viewers (very probably all current viewers) will fall back on the UDP mechanism to fetch inventory data. Various viewers may provide a menu option to not use HTTP inventory. Older viewers will solely use the UDP mechanism. However, some viewers have historically been buggy where the fallback fails to be setup properly.

Personal tools
General
About This Wiki