* Fixing length calculations for HTTP texture downloads (the end byte is inclusive in Range: headers)
parent
18a9ac6b39
commit
5ef2da39d8
|
@ -187,18 +187,20 @@ namespace OpenSim.Region.CoreModules.Avatar.ObjectCaps
|
||||||
int start, end;
|
int start, end;
|
||||||
if (TryParseRange(range, out start, out 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);
|
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);
|
//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.StatusCode = (int)System.Net.HttpStatusCode.PartialContent;
|
||||||
|
|
||||||
response.ContentLength = end - start;
|
response.ContentLength = len;
|
||||||
response.ContentType = texture.Metadata.ContentType;
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue