using System; using System.Collections.Generic; using System.Text; using OpenSim.Framework.Servers; using System.IO; using System.Collections; using libsecondlife; namespace OpenSim.Region.Capabilities { public class LLSDStreamhandler : BaseStreamHandler where TRequest : new() { private LLSDMethod m_method; public LLSDStreamhandler(string httpMethod, string path, LLSDMethod method) : base(httpMethod, path) { m_method = method; } public override byte[] Handle(string path, Stream request) { Encoding encoding = Encoding.UTF8; StreamReader streamReader = new StreamReader(request, encoding); string requestBody = streamReader.ReadToEnd(); streamReader.Close(); Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(encoding.GetBytes(requestBody)); TRequest llsdRequest = new TRequest(); LLSDHelpers.DeserialiseLLSDMap(hash, llsdRequest); TResponse response = m_method(llsdRequest); return encoding.GetBytes( LLSDHelpers.SerialiseLLSDReply(response) ); } } }