Merge pull request #2286 from MediaBrowser/dev

Dev
This commit is contained in:
Luke 2016-11-12 20:57:19 -05:00 committed by GitHub
commit af127bcafd
4 changed files with 14 additions and 48 deletions

View file

@ -161,10 +161,8 @@ namespace ServiceStack
var responseText = result as string; var responseText = result as string;
if (responseText != null) if (responseText != null)
{ {
if (response.ContentType == null || response.ContentType == "text/html")
response.ContentType = defaultContentType;
var bytes = Encoding.UTF8.GetBytes(responseText); var bytes = Encoding.UTF8.GetBytes(responseText);
response.SetContentLength(bytes.Length);
await response.OutputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false); await response.OutputStream.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false);
return; return;
} }

View file

@ -204,12 +204,12 @@ namespace SocketHttpListener.Net
return i_stream; return i_stream;
} }
public Stream GetResponseStream(HttpListenerRequest request) public Stream GetResponseStream(bool isExpect100Continue = false)
{ {
// TODO: can we get this stream before reading the input? // TODO: can we get this stream before reading the input?
if (o_stream == null) if (o_stream == null)
{ {
if (context.Response.SendChunked || request == null || request.HasExpect100Continue) if (context.Response.SendChunked || isExpect100Continue || context.Response.ContentLength64 <= 0)
{ {
o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding); o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding);
} }
@ -438,7 +438,9 @@ namespace SocketHttpListener.Net
str = String.Format("<h1>{0}</h1>", description); str = String.Format("<h1>{0}</h1>", description);
byte[] error = context.Response.ContentEncoding.GetBytes(str); byte[] error = context.Response.ContentEncoding.GetBytes(str);
response.Close(error, false); response.ContentLength64 = error.Length;
response.OutputStream.Write(error, 0, (int)error.Length);
response.Close();
} }
catch catch
{ {
@ -490,9 +492,11 @@ namespace SocketHttpListener.Net
{ {
if (!context.Request.IsWebSocketRequest || force_close) if (!context.Request.IsWebSocketRequest || force_close)
{ {
Stream st = GetResponseStream(context.Request); Stream st = GetResponseStream();
if (st != null) if (st != null)
{
st.Dispose(); st.Dispose();
}
o_stream = null; o_stream = null;
} }
@ -514,16 +518,6 @@ namespace SocketHttpListener.Net
if (!force_close && context.Request.FlushInput()) if (!force_close && context.Request.FlushInput())
{ {
if (chunked && context.Response.ForceCloseChunked == false)
{
// Don't close. Keep working.
reuses++;
Unbind();
Init();
BeginReadRequest();
return;
}
reuses++; reuses++;
Unbind(); Unbind();
Init(); Init();

View file

@ -179,9 +179,9 @@ namespace SocketHttpListener.Net
} }
} }
if (HasExpect100Continue) if (String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0)
{ {
var output = (ResponseStream)context.Connection.GetResponseStream(this); var output = (ResponseStream)context.Connection.GetResponseStream(true);
var _100continue = _textEncoding.GetASCIIEncoding().GetBytes("HTTP/1.1 100 Continue\r\n\r\n"); var _100continue = _textEncoding.GetASCIIEncoding().GetBytes("HTTP/1.1 100 Continue\r\n\r\n");
@ -189,11 +189,6 @@ namespace SocketHttpListener.Net
} }
} }
public bool HasExpect100Continue
{
get { return String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0; }
}
static bool MaybeUri(string s) static bool MaybeUri(string s)
{ {
int p = s.IndexOf(':'); int p = s.IndexOf(':');

View file

@ -30,8 +30,6 @@ namespace SocketHttpListener.Net
internal bool HeadersSent; internal bool HeadersSent;
internal object headers_lock = new object(); internal object headers_lock = new object();
bool force_close_chunked;
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly ITextEncoding _textEncoding; private readonly ITextEncoding _textEncoding;
@ -50,11 +48,6 @@ namespace SocketHttpListener.Net
} }
} }
internal bool ForceCloseChunked
{
get { return force_close_chunked; }
}
public Encoding ContentEncoding public Encoding ContentEncoding
{ {
get get
@ -149,7 +142,7 @@ namespace SocketHttpListener.Net
get get
{ {
if (output_stream == null) if (output_stream == null)
output_stream = context.Connection.GetResponseStream(context.Request); output_stream = context.Connection.GetResponseStream();
return output_stream; return output_stream;
} }
} }
@ -327,7 +320,7 @@ namespace SocketHttpListener.Net
headers.Add(name, value); headers.Add(name, value);
} }
void Close(bool force) private void Close(bool force)
{ {
if (force) if (force)
{ {
@ -345,20 +338,6 @@ namespace SocketHttpListener.Net
Close(false); Close(false);
} }
public void Close(byte[] responseEntity, bool willBlock)
{
if (disposed)
return;
if (responseEntity == null)
throw new ArgumentNullException("responseEntity");
//TODO: if willBlock -> BeginWrite + Close ?
ContentLength64 = responseEntity.Length;
OutputStream.Write(responseEntity, 0, (int)content_length);
Close(false);
}
public void Redirect(string url) public void Redirect(string url)
{ {
StatusCode = 302; // Found StatusCode = 302; // Found
@ -489,7 +468,7 @@ namespace SocketHttpListener.Net
int preamble = encoding.GetPreamble().Length; int preamble = encoding.GetPreamble().Length;
if (output_stream == null) if (output_stream == null)
output_stream = context.Connection.GetResponseStream(context.Request); output_stream = context.Connection.GetResponseStream();
/* Assumes that the ms was at position 0 */ /* Assumes that the ms was at position 0 */
ms.Position = preamble; ms.Position = preamble;