diff --git a/OpenSim/Framework/Servers/RestDeserialiseHandler.cs b/OpenSim/Framework/Servers/RestDeserialiseHandler.cs new file mode 100644 index 0000000000..cb500cabec --- /dev/null +++ b/OpenSim/Framework/Servers/RestDeserialiseHandler.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using System.Xml; +using System.Xml.Serialization; + +namespace OpenSim.Framework.Servers +{ + public delegate string RestDeserialiseMethod(TRequest request); + + public class RestDeserialisehandler : BaseStreamHandler + where TRequest : new() + { + private RestDeserialiseMethod m_method; + + public RestDeserialisehandler(string httpMethod, string path, RestDeserialiseMethod method) + : base(httpMethod, path) + { + m_method = method; + } + + public override byte[] Handle(string path, Stream request) + { + Type type = typeof(TRequest); + + TRequest deserial= default(TRequest); + using (XmlTextReader xreader = new XmlTextReader(request)) + { + XmlSerializer serializer = new XmlSerializer(type); + deserial = (TRequest)serializer.Deserialize(xreader); + } + + string response = m_method(deserial); + + Encoding encoding = new UTF8Encoding(false); + return encoding.GetBytes(response); + + } + } +}