2
0
Эх сурвалжийг харах

Merge pull request #2286 from MediaBrowser/dev

Dev
Luke 8 жил өмнө
parent
commit
af127bcafd

+ 1 - 3
ServiceStack/HttpResponseExtensionsInternal.cs

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

+ 8 - 14
SocketHttpListener.Portable/Net/HttpConnection.cs

@@ -204,12 +204,12 @@ namespace SocketHttpListener.Net
             return i_stream;
         }
 
-        public Stream GetResponseStream(HttpListenerRequest request)
+        public Stream GetResponseStream(bool isExpect100Continue = false)
         {
             // TODO: can we get this stream before reading the input?
             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);
                 }
@@ -438,7 +438,9 @@ namespace SocketHttpListener.Net
                     str = String.Format("<h1>{0}</h1>", description);
 
                 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
             {
@@ -490,9 +492,11 @@ namespace SocketHttpListener.Net
             {
                 if (!context.Request.IsWebSocketRequest || force_close)
                 {
-                    Stream st = GetResponseStream(context.Request);
+                    Stream st = GetResponseStream();
                     if (st != null)
+                    {
                         st.Dispose();
+                    }
 
                     o_stream = null;
                 }
@@ -514,16 +518,6 @@ namespace SocketHttpListener.Net
 
                 if (!force_close && context.Request.FlushInput())
                 {
-                    if (chunked && context.Response.ForceCloseChunked == false)
-                    {
-                        // Don't close. Keep working.
-                        reuses++;
-                        Unbind();
-                        Init();
-                        BeginReadRequest();
-                        return;
-                    }
-
                     reuses++;
                     Unbind();
                     Init();

+ 2 - 7
SocketHttpListener.Portable/Net/HttpListenerRequest.cs

@@ -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");
 
@@ -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)
         {
             int p = s.IndexOf(':');

+ 3 - 24
SocketHttpListener.Portable/Net/HttpListenerResponse.cs

@@ -30,8 +30,6 @@ namespace SocketHttpListener.Net
         internal bool HeadersSent;
         internal object headers_lock = new object();
 
-        bool force_close_chunked;
-
         private readonly ILogger _logger;
         private readonly ITextEncoding _textEncoding;
 
@@ -50,11 +48,6 @@ namespace SocketHttpListener.Net
             }
         }
 
-        internal bool ForceCloseChunked
-        {
-            get { return force_close_chunked; }
-        }
-
         public Encoding ContentEncoding
         {
             get
@@ -149,7 +142,7 @@ namespace SocketHttpListener.Net
             get
             {
                 if (output_stream == null)
-                    output_stream = context.Connection.GetResponseStream(context.Request);
+                    output_stream = context.Connection.GetResponseStream();
                 return output_stream;
             }
         }
@@ -327,7 +320,7 @@ namespace SocketHttpListener.Net
             headers.Add(name, value);
         }
 
-        void Close(bool force)
+        private void Close(bool force)
         {
             if (force)
             {
@@ -345,20 +338,6 @@ namespace SocketHttpListener.Net
             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)
         {
             StatusCode = 302; // Found
@@ -489,7 +468,7 @@ namespace SocketHttpListener.Net
 
             int preamble = encoding.GetPreamble().Length;
             if (output_stream == null)
-                output_stream = context.Connection.GetResponseStream(context.Request);
+                output_stream = context.Connection.GetResponseStream();
 
             /* Assumes that the ms was at position 0 */
             ms.Position = preamble;