diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs
index 07b33e7e94..3d811ce284 100644
--- a/OpenSim/Framework/ChildAgentDataUpdate.cs
+++ b/OpenSim/Framework/ChildAgentDataUpdate.cs
@@ -775,7 +775,7 @@ namespace OpenSim.Framework
// packed_appearence should contain all appearance information
if (args.TryGetValue("packed_appearance", out tmp) && tmp is OSDMap)
{
- m_log.WarnFormat("[CHILDAGENTDATAUPDATE] got packed appearance");
+ //m_log.WarnFormat("[CHILDAGENTDATAUPDATE] got packed appearance");
Appearance = new AvatarAppearance((OSDMap)tmp);
}
else
diff --git a/OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs
index 65e95751b2..c615961d9f 100644
--- a/OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs
+++ b/OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs
@@ -182,9 +182,7 @@ namespace OpenSim.Framework.Servers.HttpServer
}
data = response;
-
return true;
}
-
}
}
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HeaderEventArgs.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HeaderEventArgs.cs
index 89f0f8fe44..23a57e97e2 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HeaderEventArgs.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HeaderEventArgs.cs
@@ -1,4 +1,5 @@
using System;
+using OpenMetaverse;
namespace OSHttpServer.Parser
{
@@ -7,16 +8,8 @@ namespace OSHttpServer.Parser
///
public class HeaderEventArgs : EventArgs
{
- ///
- /// Initializes a new instance of the class.
- ///
- /// Name of header.
- /// Header value.
- public HeaderEventArgs(string name, string value)
- {
- Name = name;
- Value = value;
- }
+ public osUTF8Slice Name;
+ public string Value;
///
/// Initializes a new instance of the class.
@@ -26,13 +19,14 @@ namespace OSHttpServer.Parser
}
///
- /// Gets or sets header name.
+ /// Initializes a new instance of the class.
///
- public string Name { get; set; }
-
- ///
- /// Gets or sets header value.
- ///
- public string Value { get; set; }
+ /// Name of header.
+ /// Header value.
+ public HeaderEventArgs(osUTF8Slice name, string value)
+ {
+ Name = name;
+ Value = value;
+ }
}
}
\ No newline at end of file
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
index 2e8a9b4288..b64e69a2c4 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpClientContext.cs
@@ -8,6 +8,7 @@ using OSHttpServer.Exceptions;
using OSHttpServer.Parser;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
+using OpenMetaverse;
namespace OSHttpServer
{
@@ -165,6 +166,7 @@ namespace OSHttpServer
m_currentRequest.AddToBody(e.Buffer, e.Offset, e.Count);
}
+ private static readonly byte[] OSUTF8expect = osUTF8.GetASCIIBytes("expect");
///
///
///
@@ -172,7 +174,7 @@ namespace OSHttpServer
///
protected virtual void OnHeaderReceived(object sender, HeaderEventArgs e)
{
- if (string.Compare(e.Name, "expect", true) == 0 && e.Value.Contains("100-continue"))
+ if (e.Name.ACSIILowerEquals(OSUTF8expect) && e.Value.Contains("100-continue"))
{
lock (m_requestsLock)
{
@@ -180,7 +182,7 @@ namespace OSHttpServer
Respond("HTTP/1.1", HttpStatusCode.Continue, null);
}
}
- m_currentRequest.AddHeader(e.Name, e.Value);
+ m_currentRequest.AddHeader(e.Name.ToString(), e.Value);
}
private void OnRequestLine(object sender, RequestLineEventArgs e)
diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpRequestParser.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpRequestParser.cs
index 14d1240e27..fd7fed6244 100644
--- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpRequestParser.cs
+++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpRequestParser.cs
@@ -1,6 +1,7 @@
using System;
using System.Text;
using OSHttpServer.Exceptions;
+using OpenMetaverse;
namespace OSHttpServer.Parser
{
@@ -13,8 +14,8 @@ namespace OSHttpServer.Parser
private readonly HeaderEventArgs m_headerArgs = new HeaderEventArgs();
private readonly BodyEventArgs m_bodyEventArgs = new BodyEventArgs();
private readonly RequestLineEventArgs m_requestLineArgs = new RequestLineEventArgs();
- private string m_curHeaderName = string.Empty;
- private string m_curHeaderValue = string.Empty;
+ private osUTF8Slice m_curHeaderName = new osUTF8Slice();
+ private osUTF8Slice m_curHeaderValue = new osUTF8Slice();
private int m_bodyBytesLeft;
///
@@ -81,8 +82,8 @@ namespace OSHttpServer.Parser
public void Clear()
{
m_bodyBytesLeft = 0;
- m_curHeaderName = string.Empty;
- m_curHeaderValue = string.Empty;
+ m_curHeaderName.Clear();
+ m_curHeaderValue.Clear();
CurrentState = RequestParserState.FirstLine;
}
@@ -153,6 +154,7 @@ namespace OSHttpServer.Parser
}
}
+ private static readonly byte[] OSUTF8contentlength = osUTF8.GetASCIIBytes("content-length");
///
/// We've parsed a new header.
///
@@ -161,21 +163,21 @@ namespace OSHttpServer.Parser
/// If content length cannot be parsed.
protected void OnHeader()
{
- if (string.Compare(m_curHeaderName, "content-length", true) == 0)
+ if (m_curHeaderName.ACSIILowerEquals(OSUTF8contentlength))
{
- if (!int.TryParse(m_curHeaderValue, out m_bodyBytesLeft))
+ if (!m_curHeaderValue.TryParseInt(out m_bodyBytesLeft))
throw new BadRequestException("Content length is not a number.");
}
if (HeaderReceived != null)
{
m_headerArgs.Name = m_curHeaderName;
- m_headerArgs.Value = m_curHeaderValue;
+ m_headerArgs.Value = m_curHeaderValue.ToString();
HeaderReceived?.Invoke(this, m_headerArgs);
}
- m_curHeaderName = string.Empty;
- m_curHeaderValue = string.Empty;
+ m_curHeaderName.Clear();
+ m_curHeaderValue.Clear();
}
private void OnRequestCompleted()
@@ -288,7 +290,7 @@ namespace OSHttpServer.Parser
"Expected header name, got colon on line " + currentLine);
throw new BadRequestException("Expected header name, got colon on line " + currentLine);
}
- m_curHeaderName = Encoding.UTF8.GetString(buffer, startPos, currentPos - startPos);
+ m_curHeaderName = new osUTF8Slice(buffer, startPos, currentPos - startPos);
handledBytes = currentPos + 1;
startPos = handledBytes;
if (ch == ':')
@@ -374,8 +376,13 @@ namespace OSHttpServer.Parser
&& (buffer[currentPos + newLineSize] == ' ' || buffer[currentPos + newLineSize] == '\t'))
{
if (startPos != -1)
- m_curHeaderValue += Encoding.UTF8.GetString(buffer, startPos, currentPos - startPos);
-
+ {
+ osUTF8Slice osUTF8SliceTmp = new osUTF8Slice(buffer, startPos, currentPos - startPos);
+ if (m_curHeaderValue.Length == 0)
+ m_curHeaderValue = osUTF8SliceTmp.Clone();
+ else
+ m_curHeaderValue.Append(osUTF8SliceTmp);
+ }
m_log.Write(this, LogPrio.Trace, "Header value is on multiple lines.");
CurrentState = RequestParserState.Between;
currentPos += newLineSize - 1;
@@ -384,8 +391,14 @@ namespace OSHttpServer.Parser
}
else
{
- m_curHeaderValue += Encoding.UTF8.GetString(buffer, startPos, currentPos - startPos);
+ osUTF8Slice osUTF8SliceTmp = new osUTF8Slice(buffer, startPos, currentPos - startPos);
+ if (m_curHeaderValue.Length == 0)
+ m_curHeaderValue = osUTF8SliceTmp.Clone();
+ else
+ m_curHeaderValue.Append(osUTF8SliceTmp);
+
m_log.Write(this, LogPrio.Trace, "Header [" + m_curHeaderName + ": " + m_curHeaderValue + "]");
+
OnHeader();
startPos = -1;
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 23490bb8db..131416d5d7 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -114,12 +114,12 @@ namespace OpenSim.Framework
///
public static OSDMap PutToServiceCompressed(string url, OSDMap data, int timeout)
{
- return ServiceOSDRequest(url,data, "PUT", timeout, true, false);
+ return ServiceOSDRequest(url, data, "PUT", timeout, true, false);
}
public static OSDMap PutToService(string url, OSDMap data, int timeout)
{
- return ServiceOSDRequest(url,data, "PUT", timeout, false, false);
+ return ServiceOSDRequest(url, data, "PUT", timeout, false, false);
}
public static OSDMap PostToService(string url, OSDMap data, int timeout, bool rpc)