#41 - Support Http Head requests

This commit is contained in:
LukePulverenti
2013-03-12 23:57:54 -04:00
parent f61a812c0a
commit 17d01636ae
6 changed files with 79 additions and 26 deletions

View File

@@ -15,9 +15,10 @@ namespace MediaBrowser.Server.Implementations.HttpServer
/// Gets or sets the source stream.
/// </summary>
/// <value>The source stream.</value>
public Stream SourceStream { get; set; }
public HttpListenerResponse Response { get; set; }
public NameValueCollection RequestHeaders { get; set; }
private Stream SourceStream { get; set; }
private HttpListenerResponse Response { get; set; }
private NameValueCollection RequestHeaders { get; set; }
private bool IsHeadRequest { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="StreamWriter" /> class.
@@ -25,11 +26,13 @@ namespace MediaBrowser.Server.Implementations.HttpServer
/// <param name="requestHeaders">The request headers.</param>
/// <param name="response">The response.</param>
/// <param name="source">The source.</param>
public RangeRequestWriter(NameValueCollection requestHeaders, HttpListenerResponse response, Stream source)
/// <param name="isHeadRequest">if set to <c>true</c> [is head request].</param>
public RangeRequestWriter(NameValueCollection requestHeaders, HttpListenerResponse response, Stream source, bool isHeadRequest)
{
RequestHeaders = requestHeaders;
Response = response;
SourceStream = source;
IsHeadRequest = isHeadRequest;
}
/// <summary>
@@ -132,6 +135,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer
Response.ContentLength64 = rangeLength;
Response.Headers["Content-Range"] = string.Format("bytes {0}-{1}/{2}", rangeStart, rangeEnd, totalContentLength);
// Headers only
if (IsHeadRequest)
{
return Task.FromResult(true);
}
if (rangeStart > 0)
{
sourceStream.Position = rangeStart;
@@ -157,6 +166,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer
Response.ContentLength64 = rangeLength;
Response.Headers["Content-Range"] = string.Format("bytes {0}-{1}/{2}", rangeStart, rangeEnd, totalContentLength);
// Headers only
if (IsHeadRequest)
{
return;
}
sourceStream.Position = rangeStart;
// Fast track to just copy the stream to the end