aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-11-12 03:02:46 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-11-12 03:02:46 -0500
commit1714cb8764f2311fd255945d5a03d6b298f62071 (patch)
tree43b05abfdff0a4bb49258180798b5df8e0f07b81
parent6865bb53530abbf703b590dd39cfa27274b03107 (diff)
update response stream handling
-rw-r--r--Emby.Server.Core/ApplicationHost.cs3
-rw-r--r--Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs7
-rw-r--r--MediaBrowser.ServerApplication/MainStartup.cs4
-rw-r--r--SocketHttpListener.Portable/Net/HttpConnection.cs17
-rw-r--r--SocketHttpListener.Portable/Net/HttpListenerRequest.cs4
-rw-r--r--SocketHttpListener.Portable/Net/HttpListenerResponse.cs2
-rw-r--r--SocketHttpListener.Portable/Net/ResponseStream.cs10
7 files changed, 32 insertions, 15 deletions
diff --git a/Emby.Server.Core/ApplicationHost.cs b/Emby.Server.Core/ApplicationHost.cs
index 0c0ef894e4..5c8aea7edf 100644
--- a/Emby.Server.Core/ApplicationHost.cs
+++ b/Emby.Server.Core/ApplicationHost.cs
@@ -1136,9 +1136,6 @@ namespace Emby.Server.Core
{
get
{
-#if DEBUG
- return false;
-#endif
#pragma warning disable 162
return NativeApp.CanSelfUpdate;
#pragma warning restore 162
diff --git a/Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs b/Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs
index a8b1150567..dc049cbde6 100644
--- a/Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs
+++ b/Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs
@@ -100,7 +100,12 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp
{
var outputStream = response.OutputStream;
- outputStream.Flush();
+ // This is needed with compression
+ //if (!string.IsNullOrWhiteSpace(GetHeader("Content-Encoding")))
+ {
+ outputStream.Flush();
+ }
+
outputStream.Dispose();
response.Close();
}
diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs
index 09c948a4a8..fa8cccf342 100644
--- a/MediaBrowser.ServerApplication/MainStartup.cs
+++ b/MediaBrowser.ServerApplication/MainStartup.cs
@@ -291,6 +291,10 @@ namespace MediaBrowser.ServerApplication
{
get
{
+#if DEBUG
+ return false;
+#endif
+
if (_isRunningAsService)
{
return _canRestartService;
diff --git a/SocketHttpListener.Portable/Net/HttpConnection.cs b/SocketHttpListener.Portable/Net/HttpConnection.cs
index db34c42185..8e472117ee 100644
--- a/SocketHttpListener.Portable/Net/HttpConnection.cs
+++ b/SocketHttpListener.Portable/Net/HttpConnection.cs
@@ -23,7 +23,7 @@ namespace SocketHttpListener.Net
StringBuilder current_line;
ListenerPrefix prefix;
RequestStream i_stream;
- ResponseStream o_stream;
+ Stream o_stream;
bool chunked;
int reuses;
bool context_bound;
@@ -204,12 +204,23 @@ namespace SocketHttpListener.Net
return i_stream;
}
- public ResponseStream GetResponseStream()
+ public Stream GetResponseStream()
{
// TODO: can we get this stream before reading the input?
if (o_stream == null)
{
- o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding);
+ if (context.Response.SendChunked)
+ {
+ o_stream = new ResponseStream(stream, context.Response, _memoryStreamFactory, _textEncoding);
+ }
+ else
+ {
+ o_stream = stream;
+ using (var headerStream = ResponseStream.GetHeaders(context.Response, _memoryStreamFactory, false))
+ {
+ headerStream.CopyTo(o_stream);
+ }
+ }
}
return o_stream;
}
diff --git a/SocketHttpListener.Portable/Net/HttpListenerRequest.cs b/SocketHttpListener.Portable/Net/HttpListenerRequest.cs
index 63d5e510d2..5631fc0a10 100644
--- a/SocketHttpListener.Portable/Net/HttpListenerRequest.cs
+++ b/SocketHttpListener.Portable/Net/HttpListenerRequest.cs
@@ -181,11 +181,11 @@ namespace SocketHttpListener.Net
if (String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0)
{
- ResponseStream output = context.Connection.GetResponseStream();
+ var output = context.Connection.GetResponseStream();
var _100continue = _textEncoding.GetASCIIEncoding().GetBytes("HTTP/1.1 100 Continue\r\n\r\n");
- output.InternalWrite(_100continue, 0, _100continue.Length);
+ //output.InternalWrite(_100continue, 0, _100continue.Length);
}
}
diff --git a/SocketHttpListener.Portable/Net/HttpListenerResponse.cs b/SocketHttpListener.Portable/Net/HttpListenerResponse.cs
index 0bc827b5a4..93358cae42 100644
--- a/SocketHttpListener.Portable/Net/HttpListenerResponse.cs
+++ b/SocketHttpListener.Portable/Net/HttpListenerResponse.cs
@@ -19,7 +19,7 @@ namespace SocketHttpListener.Net
CookieCollection cookies;
WebHeaderCollection headers = new WebHeaderCollection();
bool keep_alive = true;
- ResponseStream output_stream;
+ Stream output_stream;
Version version = HttpVersion.Version11;
string location;
int status_code = 200;
diff --git a/SocketHttpListener.Portable/Net/ResponseStream.cs b/SocketHttpListener.Portable/Net/ResponseStream.cs
index 07788ea418..7a6425deac 100644
--- a/SocketHttpListener.Portable/Net/ResponseStream.cs
+++ b/SocketHttpListener.Portable/Net/ResponseStream.cs
@@ -64,7 +64,7 @@ namespace SocketHttpListener.Net
{
disposed = true;
byte[] bytes = null;
- MemoryStream ms = GetHeaders(true);
+ MemoryStream ms = GetHeaders(response, _memoryStreamFactory, false);
bool chunked = response.SendChunked;
if (stream.CanWrite)
{
@@ -102,14 +102,14 @@ namespace SocketHttpListener.Net
base.Dispose(disposing);
}
- MemoryStream GetHeaders(bool closing)
+ internal static MemoryStream GetHeaders(HttpListenerResponse response, IMemoryStreamFactory memoryStreamFactory, bool closing)
{
// SendHeaders works on shared headers
lock (response.headers_lock)
{
if (response.HeadersSent)
return null;
- MemoryStream ms = _memoryStreamFactory.CreateNew();
+ MemoryStream ms = memoryStreamFactory.CreateNew();
response.SendHeaders(closing, ms);
return ms;
}
@@ -137,7 +137,7 @@ namespace SocketHttpListener.Net
throw new ObjectDisposedException(GetType().ToString());
byte[] bytes = null;
- MemoryStream ms = GetHeaders(false);
+ MemoryStream ms = GetHeaders(response, _memoryStreamFactory, false);
bool chunked = response.SendChunked;
if (ms != null)
{
@@ -177,7 +177,7 @@ namespace SocketHttpListener.Net
throw new ObjectDisposedException(GetType().ToString());
byte[] bytes = null;
- MemoryStream ms = GetHeaders(false);
+ MemoryStream ms = GetHeaders(response, _memoryStreamFactory, false);
bool chunked = response.SendChunked;
if (ms != null)
{