From 5ef2da39d81c038c087b493330497856ed18325d Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Mon, 13 Sep 2010 11:23:45 -0700 Subject: [PATCH] * Fixing length calculations for HTTP texture downloads (the end byte is inclusive in Range: headers) --- .../CoreModules/Avatar/Assets/GetTextureModule.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs b/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs index 8aa87fddee..a3238dff9f 100644 --- a/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Assets/GetTextureModule.cs @@ -187,18 +187,20 @@ namespace OpenSim.Region.CoreModules.Avatar.ObjectCaps int start, end; if (TryParseRange(range, out start, out end)) { - end = Utils.Clamp(end, 1, texture.Data.Length); + end = Utils.Clamp(end, 1, texture.Data.Length - 1); start = Utils.Clamp(start, 0, end - 1); + int len = end - start + 1; //m_log.Debug("Serving " + start + " to " + end + " of " + texture.Data.Length + " bytes for texture " + texture.ID); - if (end - start < texture.Data.Length) + if (len < texture.Data.Length) response.StatusCode = (int)System.Net.HttpStatusCode.PartialContent; - response.ContentLength = end - start; + response.ContentLength = len; response.ContentType = texture.Metadata.ContentType; + response.AddHeader("Content-Range", String.Format("bytes {0}-{1}/{2}", start, end, texture.Data.Length)); - response.Body.Write(texture.Data, start, end - start); + response.Body.Write(texture.Data, start, len); } else {