diff --git a/OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs b/OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs index 53bffd52ac..184d0b0182 100644 --- a/OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs +++ b/OpenSim/Capabilities/Handlers/FetchInventory/FetchInventory2Handler.cs @@ -25,12 +25,12 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System.Net; using System.Reflection; using System.Text; using OpenMetaverse; using OpenMetaverse.StructuredData; using OpenSim.Framework; -using OpenSim.Framework.Capabilities; using OpenSim.Framework.Servers.HttpServer; using OpenSim.Services.Interfaces; using OSDArray = OpenMetaverse.StructuredData.OSDArray; @@ -107,5 +107,51 @@ namespace OpenSim.Capabilities.Handlers LLSDxmlEncode.AddEndMap(lsl); return LLSDxmlEncode.End(lsl); } + + public void FetchInventorySimpleRequest(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, OSDMap requestmap) + { + //m_log.DebugFormat("[FETCH INVENTORY HANDLER]: Received FetchInventory capability request {0}", request); + + OSDArray itemsRequested = (OSDArray)requestmap["items"]; + + UUID[] itemIDs = new UUID[itemsRequested.Count]; + int i = 0; + foreach (OSDMap osdItemId in itemsRequested) + { + itemIDs[i++] = osdItemId["item_id"].AsUUID(); + } + + InventoryItemBase[] items = null; + try + { + items = m_inventoryService.GetMultipleItems(m_agentID, itemIDs); + } + catch{ } + + StringBuilder lsl = LLSDxmlEncode.Start(4096); + LLSDxmlEncode.AddMap(lsl); + + LLSDxmlEncode.AddElem("agent_id", m_agentID, lsl); + + if (items == null || items.Length == 0) + { + LLSDxmlEncode.AddEmptyArray("items", lsl); + } + else + { + LLSDxmlEncode.AddArray("items", lsl); + foreach (InventoryItemBase item in items) + { + if (item != null) + item.ToLLSDxml(lsl, 0xff); + } + LLSDxmlEncode.AddEndArray(lsl); + } + + LLSDxmlEncode.AddEndMap(lsl); + httpResponse.RawBuffer = Util.UTF8.GetBytes(LLSDxmlEncode.End(lsl)); + httpResponse.StatusCode = (int)HttpStatusCode.OK; + } } } + diff --git a/OpenSim/Region/ClientStack/Linden/Caps/FetchInventory2Module.cs b/OpenSim/Region/ClientStack/Linden/Caps/FetchInventory2Module.cs index eef94354c8..91ce4f49f5 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/FetchInventory2Module.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/FetchInventory2Module.cs @@ -110,30 +110,15 @@ namespace OpenSim.Region.ClientStack.Linden private void RegisterCaps(UUID agentID, Caps caps) { - RegisterFetchCap(agentID, caps, "FetchInventory2", m_fetchInventory2Url); - } - - private void RegisterFetchCap(UUID agentID, Caps caps, string capName, string url) - { - string capUrl; - - if (url == "localhost") + if (m_fetchInventory2Url == "localhost") { - capUrl = "/CAPS/" + UUID.Random(); - FetchInventory2Handler fetchHandler = new FetchInventory2Handler(m_inventoryService, agentID); - - IRequestHandler reqHandler - = new RestStreamHandler( - "POST", capUrl, fetchHandler.FetchInventoryRequest, capName, agentID.ToString()); - - caps.RegisterHandler(capName, reqHandler); + caps.RegisterSimpleHandler("FetchInventory2", + new SimpleOSDMapHandler("POST", "/" + UUID.Random(), fetchHandler.FetchInventorySimpleRequest)); } - else + else if(!string.IsNullOrWhiteSpace(m_fetchInventory2Url)) { - capUrl = url; - - caps.RegisterHandler(capName, capUrl); + caps.RegisterHandler("FetchInventory2", m_fetchInventory2Url); } // m_log.DebugFormat(