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)