change FetchInventory2 region handler

master
UbitUmarov 2020-04-28 01:15:18 +01:00
parent bfcbdc8a93
commit 7e2ed9ee2b
2 changed files with 52 additions and 21 deletions

View File

@ -25,12 +25,12 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
using System.Net;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using OpenMetaverse; using OpenMetaverse;
using OpenMetaverse.StructuredData; using OpenMetaverse.StructuredData;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Framework.Capabilities;
using OpenSim.Framework.Servers.HttpServer; using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Services.Interfaces; using OpenSim.Services.Interfaces;
using OSDArray = OpenMetaverse.StructuredData.OSDArray; using OSDArray = OpenMetaverse.StructuredData.OSDArray;
@ -107,5 +107,51 @@ namespace OpenSim.Capabilities.Handlers
LLSDxmlEncode.AddEndMap(lsl); LLSDxmlEncode.AddEndMap(lsl);
return LLSDxmlEncode.End(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;
}
} }
} }

View File

@ -110,30 +110,15 @@ namespace OpenSim.Region.ClientStack.Linden
private void RegisterCaps(UUID agentID, Caps caps) private void RegisterCaps(UUID agentID, Caps caps)
{ {
RegisterFetchCap(agentID, caps, "FetchInventory2", m_fetchInventory2Url); if (m_fetchInventory2Url == "localhost")
}
private void RegisterFetchCap(UUID agentID, Caps caps, string capName, string url)
{ {
string capUrl;
if (url == "localhost")
{
capUrl = "/CAPS/" + UUID.Random();
FetchInventory2Handler fetchHandler = new FetchInventory2Handler(m_inventoryService, agentID); FetchInventory2Handler fetchHandler = new FetchInventory2Handler(m_inventoryService, agentID);
caps.RegisterSimpleHandler("FetchInventory2",
IRequestHandler reqHandler new SimpleOSDMapHandler("POST", "/" + UUID.Random(), fetchHandler.FetchInventorySimpleRequest));
= new RestStreamHandler(
"POST", capUrl, fetchHandler.FetchInventoryRequest, capName, agentID.ToString());
caps.RegisterHandler(capName, reqHandler);
} }
else else if(!string.IsNullOrWhiteSpace(m_fetchInventory2Url))
{ {
capUrl = url; caps.RegisterHandler("FetchInventory2", m_fetchInventory2Url);
caps.RegisterHandler(capName, capUrl);
} }
// m_log.DebugFormat( // m_log.DebugFormat(