using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Web;
using WebDAVSharp.Server.Adapters;
using WebDAVSharp.Server.Exceptions;
using WebDAVSharp.Server.Stores;
namespace WebDAVSharp.Server.MethodHandlers {
///
/// This class implements the GET HTTP method for WebDAV#.
///
internal sealed class WebDavGetMethodHandler : WebDavMethodHandlerBase, IWebDavMethodHandler {
///
/// Gets the collection of the names of the verbs handled by this instance.
///
///
/// The names.
///
public IEnumerable Names {
get {
return new[]
{
"GET"
};
}
}
///
/// Processes the request.
///
/// The through which the request came in from the client.
/// The
/// object containing both the request and response
/// objects to use.
/// The that the is hosting.
///
///
/// specifies a request for a store item that does not exist.
/// - or -
///
/// specifies a request for a store item that is not a document.
/// specifies a request for a store item using a collection path that does not exist.
public void ProcessRequest(WebDavServer server, HttpContext context, IWebDavStore store, String fileName) {
IWebDavStoreCollection collection = GetParentCollection(server, store, fileName);
IWebDavStoreItem item = GetItemFromCollection(collection, fileName);
IWebDavStoreDocument doc = item as IWebDavStoreDocument;
if (doc == null)
throw new WebDavNotFoundException();
long docSize = doc.Size;
if (docSize == 0) {
context.Response.StatusCode = (int)HttpStatusCode.OK;
//context.Response.ContentLength64 = 0;
}
using (Stream stream = doc.OpenReadStream()) {
context.Response.StatusCode = (int)HttpStatusCode.OK;
//if (docSize > 0)
// context.Response.ContentLength64 = docSize;
byte[] buffer = new byte[4096];
int inBuffer;
while ((inBuffer = stream.Read(buffer, 0, buffer.Length)) > 0)
context.Response.OutputStream.Write(buffer, 0, inBuffer);
}
//context.Response.Close();
}
}
}