diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 8be8493097..fd8f72b8cf 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -1153,8 +1153,6 @@ namespace OpenSim.Framework.Servers.HttpServer
///
public void HandleXmlRpcRequests(OSHttpRequest request, OSHttpResponse response)
{
- String requestBody = null;
-
Stream requestStream = request.InputStream;
Stream innerStream = null;
try
@@ -1162,59 +1160,45 @@ namespace OpenSim.Framework.Servers.HttpServer
if ((request.Headers["Content-Encoding"] == "gzip") || (request.Headers["X-Content-Encoding"] == "gzip"))
{
innerStream = requestStream;
- requestStream = new GZipStream(innerStream, System.IO.Compression.CompressionMode.Decompress);
+ requestStream = new GZipStream(innerStream, CompressionMode.Decompress);
}
-
- using (StreamReader reader = new StreamReader(requestStream, Encoding.UTF8))
- requestBody = reader.ReadToEnd();
}
catch
{
- requestBody = null;
- }
- finally
- {
- if (innerStream != null && innerStream.CanRead)
- innerStream.Dispose();
if (requestStream.CanRead)
requestStream.Dispose();
- }
+ if (innerStream != null && innerStream.CanRead)
+ innerStream.Dispose();
- if (string.IsNullOrWhiteSpace(requestBody))
- {
- response.StatusCode = (int)HttpStatusCode.NotFound;
+ response.StatusCode = (int)HttpStatusCode.BadRequest;
response.KeepAlive = false;
return;
}
- //m_log.Debug(requestBody);
- requestBody = requestBody.Replace("", "");
-
XmlRpcRequest xmlRprcRequest = null;
try
{
- xmlRprcRequest = (XmlRpcRequest) (new XmlRpcRequestDeserializer()).Deserialize(requestBody);
- }
- catch (XmlException e)
- {
- if (DebugLevel >= 1)
+ using (StreamReader reader = new StreamReader(requestStream, Encoding.UTF8))
{
- if (DebugLevel >= 2)
- m_log.Warn(
- string.Format(
- "[BASE HTTP SERVER]: Got XMLRPC request with invalid XML from {0}. XML was '{1}'. Sending blank response. Exception ",
- request.RemoteIPEndPoint, requestBody),
- e);
- else
- {
- m_log.WarnFormat(
- "[BASE HTTP SERVER]: Got XMLRPC request with invalid XML from {0}, length {1}. Sending blank response.",
- request.RemoteIPEndPoint, requestBody.Length);
- }
+ var xmlDes = new XmlRpcRequestDeserializer();
+ xmlRprcRequest = (XmlRpcRequest)xmlDes.Deserialize(reader);
}
}
+ catch (Exception e)
+ {
+ m_log.WarnFormat(
+ "[BASE HTTP SERVER]: Fail to decode XMLRPC request {0}: {1}",
+ request.RemoteIPEndPoint, e.Message);
+ }
+ finally
+ {
+ if (requestStream.CanRead)
+ requestStream.Dispose();
+ if (innerStream != null && innerStream.CanRead)
+ innerStream.Dispose();
+ }
- if(xmlRprcRequest == null)
+ if (xmlRprcRequest == null)
{
response.StatusCode = (int)HttpStatusCode.NotFound;
response.KeepAlive = false;
@@ -1298,32 +1282,26 @@ namespace OpenSim.Framework.Servers.HttpServer
String.Format("Requested method [{0}] not found", methodName));
}
- response.KeepAlive = keepAlive;
- response.ContentType = "text/xml";
- string responseString = String.Empty;
- using (MemoryStream outs = new MemoryStream())
+ using (MemoryStream outs = new MemoryStream(64 * 1024))
{
using (XmlTextWriter writer = new XmlTextWriter(outs, UTF8NoBOM))
{
writer.Formatting = Formatting.None;
- XmlRpcResponseSerializer.Singleton.Serialize(writer, xmlRpcResponse);
+ var xmlrpcSer = new XmlRpcResponseSerializer();
+ xmlrpcSer.Serialize(writer, xmlRpcResponse);
writer.Flush();
- //outs.Seek(0, SeekOrigin.Begin);
- //using (StreamReader sr = new StreamReader(outs))
- // responseString = sr.ReadToEnd();
response.RawBuffer = outs.GetBuffer();
response.RawBufferLen = (int)outs.Length;
}
}
- //response.RawBuffer = Util.UTF8NBGetbytes(responseString);
response.StatusCode = (int)HttpStatusCode.OK;
+ response.KeepAlive = keepAlive;
+ response.ContentType = "text/xml";
}
public void HandleXmlRpcRequests(OSHttpRequest request, OSHttpResponse response, Dictionary rpcHandlers)
{
- String requestBody = null;
-
Stream requestStream = request.InputStream;
Stream innerStream = null;
try
@@ -1331,57 +1309,43 @@ namespace OpenSim.Framework.Servers.HttpServer
if ((request.Headers["Content-Encoding"] == "gzip") || (request.Headers["X-Content-Encoding"] == "gzip"))
{
innerStream = requestStream;
- requestStream = new GZipStream(innerStream, System.IO.Compression.CompressionMode.Decompress);
+ requestStream = new GZipStream(innerStream, CompressionMode.Decompress);
}
-
- using (StreamReader reader = new StreamReader(requestStream, Encoding.UTF8))
- requestBody = reader.ReadToEnd();
}
catch
{
- requestBody = null;
- }
- finally
- {
- if (innerStream != null && innerStream.CanRead)
- innerStream.Dispose();
if (requestStream.CanRead)
requestStream.Dispose();
- }
+ if (innerStream != null && innerStream.CanRead)
+ innerStream.Dispose();
- if (string.IsNullOrWhiteSpace(requestBody))
- {
- response.StatusCode = (int)HttpStatusCode.NotFound;
+ response.StatusCode = (int)HttpStatusCode.BadRequest;
response.KeepAlive = false;
return;
}
- //m_log.Debug(requestBody);
- requestBody = requestBody.Replace("", "");
-
XmlRpcRequest xmlRprcRequest = null;
try
{
- xmlRprcRequest = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody);
- }
- catch (XmlException e)
- {
- if (DebugLevel >= 1)
+ using (StreamReader reader = new StreamReader(requestStream, Encoding.UTF8))
{
- if (DebugLevel >= 2)
- m_log.Warn(
- string.Format(
- "[BASE HTTP SERVER]: Got XMLRPC request with invalid XML from {0}. XML was '{1}'. Sending blank response. Exception ",
- request.RemoteIPEndPoint, requestBody),
- e);
- else
- {
- m_log.WarnFormat(
- "[BASE HTTP SERVER]: Got XMLRPC request with invalid XML from {0}, length {1}. Sending blank response.",
- request.RemoteIPEndPoint, requestBody.Length);
- }
+ var xmlDes = new XmlRpcRequestDeserializer();
+ xmlRprcRequest = (XmlRpcRequest)xmlDes.Deserialize(reader);
}
}
+ catch (Exception e)
+ {
+ m_log.WarnFormat(
+ "[BASE HTTP SERVER]: Fail to decode XMLRPC request {0}: {1}",
+ request.RemoteIPEndPoint, e.Message);
+ }
+ finally
+ {
+ if (requestStream.CanRead)
+ requestStream.Dispose();
+ if (innerStream != null && innerStream.CanRead)
+ innerStream.Dispose();
+ }
if (xmlRprcRequest == null)
{
@@ -1437,8 +1401,7 @@ namespace OpenSim.Framework.Servers.HttpServer
}
catch (Exception e)
{
- string errorMessage
- = String.Format(
+ string errorMessage = string.Format(
"Requested method [{0}] from {1} threw exception: {2} {3}",
methodName, request.RemoteIPEndPoint.Address, e.Message, e.StackTrace);
@@ -1461,26 +1424,22 @@ namespace OpenSim.Framework.Servers.HttpServer
String.Format("Requested method [{0}] not found", methodName));
}
- string responseString = String.Empty;
using (MemoryStream outs = new MemoryStream(64 * 1024))
{
using (XmlTextWriter writer = new XmlTextWriter(outs, UTF8NoBOM))
{
writer.Formatting = Formatting.None;
- XmlRpcResponseSerializer.Singleton.Serialize(writer, xmlRpcResponse);
+ var xmlrpcSer = new XmlRpcResponseSerializer();
+ xmlrpcSer.Serialize(writer, xmlRpcResponse);
writer.Flush();
- //outs.Seek(0, SeekOrigin.Begin);
- //using (StreamReader sr = new StreamReader(outs))
- // responseString = sr.ReadToEnd();
response.RawBuffer = outs.GetBuffer();
response.RawBufferLen = (int)outs.Length;
}
}
response.StatusCode = (int)HttpStatusCode.OK;
- response.ContentType = "text/xml";
response.KeepAlive = false;
- //response.RawBuffer = Util.UTF8NBGetbytes(responseString);
+ response.ContentType = "text/xml";
}
// JsonRpc (v2.0 only)
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
index c621c8365a..325cdea3a5 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
@@ -143,7 +143,6 @@ namespace OSHttpServer
basecontextID = 1;
contextID = basecontextID;
- sock.NoDelay = true;
}
public bool CanSend()
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs
index c51ccbeff9..8f5916d07b 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs
@@ -154,6 +154,7 @@ namespace OSHttpServer
if(socket.Connected)
{
+ socket.NoDelay = true;
m_logWriter.Write(this, LogPrio.Debug, "Accepted connection from: " + socket.RemoteEndPoint);