From ec0d2c28fa04102ecbad4c5660efecbb970201dd Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Mon, 4 May 2009 20:19:21 +0000 Subject: Committing the changed tree --- .../Framework/Servers/HttpServer/OSHttpResponse.cs | 302 +++++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs (limited to 'OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs') diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs new file mode 100644 index 0000000..210d122 --- /dev/null +++ b/OpenSim/Framework/Servers/HttpServer/OSHttpResponse.cs @@ -0,0 +1,302 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.IO; +using System.Net; +using System.Text; +using HttpServer; + +namespace OpenSim.Framework.Servers.HttpServer +{ + /// + /// OSHttpResponse is the OpenSim representation of an HTTP + /// response. + /// + public class OSHttpResponse + { + /// + /// Content type property. + /// + /// + /// Setting this property will also set IsContentTypeSet to + /// true. + /// + public string ContentType + { + get + { + return _httpResponse.ContentType; + } + + set + { + _httpResponse.ContentType = value; + } + } + + /// + /// Boolean property indicating whether the content type + /// property actively has been set. + /// + /// + /// IsContentTypeSet will go away together with .NET base. + /// + // public bool IsContentTypeSet + // { + // get { return _contentTypeSet; } + // } + // private bool _contentTypeSet; + + + /// + /// Length of the body content; 0 if there is no body. + /// + public long ContentLength + { + get + { + return _httpResponse.ContentLength; + } + + set + { + _httpResponse.ContentLength = value; + } + } + + /// + /// Alias for ContentLength. + /// + public long ContentLength64 + { + get { return ContentLength; } + set { ContentLength = value; } + } + + /// + /// Encoding of the body content. + /// + public Encoding ContentEncoding + { + get + { + return _httpResponse.Encoding; + } + + set + { + _httpResponse.Encoding = value; + } + } + + public bool KeepAlive + { + get + { + return _httpResponse.Connection == ConnectionType.KeepAlive; + } + + set + { + if (value) + _httpResponse.Connection = ConnectionType.KeepAlive; + else + _httpResponse.Connection = ConnectionType.Close; + } + } + + /// + /// Get or set the keep alive timeout property (default is + /// 20). Setting this to 0 also disables KeepAlive. Setting + /// this to something else but 0 also enable KeepAlive. + /// + public int KeepAliveTimeout + { + get + { + return _httpResponse.KeepAlive; + } + + set + { + if (value == 0) + { + _httpResponse.Connection = ConnectionType.Close; + _httpResponse.KeepAlive = 0; + } + else + { + _httpResponse.Connection = ConnectionType.KeepAlive; + _httpResponse.KeepAlive = value; + } + } + } + + /// + /// Return the output stream feeding the body. + /// + /// + /// On its way out... + /// + public Stream OutputStream + { + get + { + return _httpResponse.Body; + } + } + + public string ProtocolVersion + { + get + { + return _httpResponse.ProtocolVersion; + } + + set + { + _httpResponse.ProtocolVersion = value; + } + } + + /// + /// Return the output stream feeding the body. + /// + public Stream Body + { + get + { + return _httpResponse.Body; + } + } + + /// + /// Set a redirct location. + /// + public string RedirectLocation + { + // get { return _redirectLocation; } + set + { + _httpResponse.Redirect(value); + } + } + + + /// + /// Chunk transfers. + /// + public bool SendChunked + { + get + { + return _httpResponse.Chunked; + } + + set + { + _httpResponse.Chunked = value; + } + } + + /// + /// HTTP status code. + /// + public int StatusCode + { + get + { + return (int)_httpResponse.Status; + } + + set + { + _httpResponse.Status = (HttpStatusCode)value; + } + } + + + /// + /// HTTP status description. + /// + public string StatusDescription + { + get + { + return _httpResponse.Reason; + } + + set + { + _httpResponse.Reason = value; + } + } + + + protected IHttpResponse _httpResponse; + + public OSHttpResponse() {} + + public OSHttpResponse(IHttpResponse resp) + { + _httpResponse = resp; + } + + /// + /// Instantiate an OSHttpResponse object from an OSHttpRequest + /// object. + /// Incoming OSHttpRequest to which we are + /// replying + public OSHttpResponse(OSHttpRequest req) + { + _httpResponse = new HttpResponse(req.IHttpClientContext, req.IHttpRequest); + } + + /// + /// Add a header field and content to the response. + /// + /// string containing the header field + /// name + /// string containing the header field + /// value + public void AddHeader(string key, string value) + { + _httpResponse.AddHeader(key, value); + } + + /// + /// Send the response back to the remote client + /// + public void Send() + { + _httpResponse.Body.Flush(); + _httpResponse.Send(); + + } + } +} -- cgit v1.1