diff options
| author | Luke <luke.pulverenti@gmail.com> | 2016-11-12 17:49:50 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-11-12 17:49:50 -0500 |
| commit | 6cbebfcc4ecf408f0f8dd9d07579045fb55a782e (patch) | |
| tree | 8915e9036e301656f3e8da53f8aaab85f4298781 | |
| parent | fc6184b15968fb0541f57f4c461aaf8df25e28e0 (diff) | |
| parent | 102bbe2beb76fa76b21f4ed3f7c584a58d787204 (diff) | |
Merge pull request #2284 from MediaBrowser/dev
Dev
| -rw-r--r-- | Emby.Server.Core/ApplicationHost.cs | 3 | ||||
| -rw-r--r-- | Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs | 7 | ||||
| -rw-r--r-- | MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj | 44 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/MainStartup.cs | 4 | ||||
| -rw-r--r-- | ServiceStack/Host/RestHandler.cs | 36 | ||||
| -rw-r--r-- | ServiceStack/ServiceStackHost.Runtime.cs | 21 | ||||
| -rw-r--r-- | SocketHttpListener.Portable/Net/HttpConnection.cs | 19 | ||||
| -rw-r--r-- | SocketHttpListener.Portable/Net/HttpListenerRequest.cs | 11 | ||||
| -rw-r--r-- | SocketHttpListener.Portable/Net/HttpListenerResponse.cs | 6 | ||||
| -rw-r--r-- | SocketHttpListener.Portable/Net/ResponseStream.cs | 10 |
10 files changed, 93 insertions, 68 deletions
diff --git a/Emby.Server.Core/ApplicationHost.cs b/Emby.Server.Core/ApplicationHost.cs index 0c0ef894e..5c8aea7ed 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 a8b115056..dc049cbde 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.Server.Mono/MediaBrowser.Server.Mono.csproj b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj index 090e8ea9a..ca830b2f4 100644 --- a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj +++ b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj @@ -115,6 +115,34 @@ </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <ItemGroup> + <ProjectReference Include="..\BDInfo\BDInfo.csproj"> + <Project>{88ae38df-19d7-406f-a6a9-09527719a21e}</Project> + <Name>BDInfo</Name> + </ProjectReference> + <ProjectReference Include="..\DvdLib\DvdLib.csproj"> + <Project>{713f42b5-878e-499d-a878-e4c652b1d5e8}</Project> + <Name>DvdLib</Name> + </ProjectReference> + <ProjectReference Include="..\Emby.Dlna\Emby.Dlna.csproj"> + <Project>{805844ab-e92f-45e6-9d99-4f6d48d129a5}</Project> + <Name>Emby.Dlna</Name> + </ProjectReference> + <ProjectReference Include="..\Emby.Drawing.ImageMagick\Emby.Drawing.ImageMagick.csproj"> + <Project>{6cfee013-6e7c-432b-ac37-cabf0880c69a}</Project> + <Name>Emby.Drawing.ImageMagick</Name> + </ProjectReference> + <ProjectReference Include="..\Emby.Drawing.Net\Emby.Drawing.Net.csproj"> + <Project>{c97a239e-a96c-4d64-a844-ccf8cc30aecb}</Project> + <Name>Emby.Drawing.Net</Name> + </ProjectReference> + <ProjectReference Include="..\Emby.Drawing\Emby.Drawing.csproj"> + <Project>{08fff49b-f175-4807-a2b5-73b0ebd9f716}</Project> + <Name>Emby.Drawing</Name> + </ProjectReference> + <ProjectReference Include="..\Emby.Photos\Emby.Photos.csproj"> + <Project>{89ab4548-770d-41fd-a891-8daff44f452c}</Project> + <Name>Emby.Photos</Name> + </ProjectReference> <ProjectReference Include="..\Emby.Server.Implementations\Emby.Server.Implementations.csproj"> <Project>{e383961b-9356-4d5d-8233-9a1079d03055}</Project> <Name>Emby.Server.Implementations</Name> @@ -163,6 +191,22 @@ <Project>{23499896-B135-4527-8574-C26E926EA99E}</Project> <Name>MediaBrowser.XbmcMetadata</Name> </ProjectReference> + <ProjectReference Include="..\OpenSubtitlesHandler\OpenSubtitlesHandler.csproj"> + <Project>{4a4402d4-e910-443b-b8fc-2c18286a2ca0}</Project> + <Name>OpenSubtitlesHandler</Name> + </ProjectReference> + <ProjectReference Include="..\RSSDP\RSSDP.csproj"> + <Project>{21002819-c39a-4d3e-be83-2a276a77fb1f}</Project> + <Name>RSSDP</Name> + </ProjectReference> + <ProjectReference Include="..\ServiceStack\ServiceStack.csproj"> + <Project>{680a1709-25eb-4d52-a87f-ee03ffd94baa}</Project> + <Name>ServiceStack</Name> + </ProjectReference> + <ProjectReference Include="..\SocketHttpListener.Portable\SocketHttpListener.Portable.csproj"> + <Project>{4f26d5d8-a7b0-42b3-ba42-7cb7d245934e}</Project> + <Name>SocketHttpListener.Portable</Name> + </ProjectReference> </ItemGroup> <ItemGroup> <None Include="..\ThirdParty\SQLite3\osx\libsqlite3.0.dylib"> diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 09c948a4a..fa8cccf34 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/ServiceStack/Host/RestHandler.cs b/ServiceStack/Host/RestHandler.cs index 5c360d150..1eae6be38 100644 --- a/ServiceStack/Host/RestHandler.cs +++ b/ServiceStack/Host/RestHandler.cs @@ -23,32 +23,13 @@ namespace ServiceStack.Host var taskResult = ServiceStackHost.Instance.GetTaskResult(taskResponse, RequestName); - var taskResults = taskResult as Task[]; - - if (taskResults == null) - { - var subTask = taskResult as Task; - if (subTask != null) - taskResult = ServiceStackHost.Instance.GetTaskResult(subTask, RequestName); - - return taskResult; - } - - if (taskResults.Length == 0) + var subTask = taskResult as Task; + if (subTask != null) { - return new object[] { }; + taskResult = ServiceStackHost.Instance.GetTaskResult(subTask, RequestName); } - var firstResponse = ServiceStackHost.Instance.GetTaskResult(taskResults[0], RequestName); - var batchedResponses = firstResponse != null - ? (object[])Array.CreateInstance(firstResponse.GetType(), taskResults.Length) - : new object[taskResults.Length]; - batchedResponses[0] = firstResponse; - for (var i = 1; i < taskResults.Length; i++) - { - batchedResponses[i] = ServiceStackHost.Instance.GetTaskResult(taskResults[i], RequestName); - } - return batchedResponses; + return taskResult; } protected static object CreateContentTypeRequest(IRequest httpReq, Type requestType, string contentType) @@ -141,18 +122,13 @@ namespace ServiceStack.Host var request = httpReq.Dto = CreateRequest(httpReq, restPath); - if (appHost.ApplyRequestFilters(httpReq, httpRes, request)) - return; + appHost.ApplyRequestFilters(httpReq, httpRes, request); var rawResponse = await ServiceStackHost.Instance.ServiceController.Execute(request, httpReq).ConfigureAwait(false); - if (httpRes.IsClosed) - return; - var response = await HandleResponseAsync(rawResponse).ConfigureAwait(false); - if (appHost.ApplyResponseFilters(httpReq, httpRes, response)) - return; + appHost.ApplyResponseFilters(httpReq, httpRes, response); await httpRes.WriteToResponse(httpReq, response).ConfigureAwait(false); } diff --git a/ServiceStack/ServiceStackHost.Runtime.cs b/ServiceStack/ServiceStackHost.Runtime.cs index 1a1656a0e..aaa50633b 100644 --- a/ServiceStack/ServiceStackHost.Runtime.cs +++ b/ServiceStack/ServiceStackHost.Runtime.cs @@ -14,10 +14,8 @@ namespace ServiceStack /// and no more processing should be done. /// </summary> /// <returns></returns> - public virtual bool ApplyRequestFilters(IRequest req, IResponse res, object requestDto) + public virtual void ApplyRequestFilters(IRequest req, IResponse res, object requestDto) { - if (res.IsClosed) return res.IsClosed; - //Exec all RequestFilter attributes with Priority < 0 var attributes = FilterAttributeCache.GetRequestFilterAttributes(requestDto.GetType()); var i = 0; @@ -25,16 +23,12 @@ namespace ServiceStack { var attribute = attributes[i]; attribute.RequestFilter(req, res, requestDto); - if (res.IsClosed) return res.IsClosed; } - if (res.IsClosed) return res.IsClosed; - //Exec global filters foreach (var requestFilter in GlobalRequestFilters) { requestFilter(req, res, requestDto); - if (res.IsClosed) return res.IsClosed; } //Exec remaining RequestFilter attributes with Priority >= 0 @@ -42,10 +36,7 @@ namespace ServiceStack { var attribute = attributes[i]; attribute.RequestFilter(req, res, requestDto); - if (res.IsClosed) return res.IsClosed; } - - return res.IsClosed; } /// <summary> @@ -53,21 +44,13 @@ namespace ServiceStack /// and no more processing should be done. /// </summary> /// <returns></returns> - public virtual bool ApplyResponseFilters(IRequest req, IResponse res, object response) + public virtual void ApplyResponseFilters(IRequest req, IResponse res, object response) { - if (response != null) - { - if (res.IsClosed) return res.IsClosed; - } - //Exec global filters foreach (var responseFilter in GlobalResponseFilters) { responseFilter(req, res, response); - if (res.IsClosed) return res.IsClosed; } - - return res.IsClosed; } } diff --git a/SocketHttpListener.Portable/Net/HttpConnection.cs b/SocketHttpListener.Portable/Net/HttpConnection.cs index db34c4218..67dd5c958 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(HttpListenerRequest request) { // 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 || request == null || request.HasExpect100Continue) + { + 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; } @@ -479,7 +490,7 @@ namespace SocketHttpListener.Net { if (!context.Request.IsWebSocketRequest || force_close) { - Stream st = GetResponseStream(); + Stream st = GetResponseStream(context.Request); if (st != null) st.Dispose(); diff --git a/SocketHttpListener.Portable/Net/HttpListenerRequest.cs b/SocketHttpListener.Portable/Net/HttpListenerRequest.cs index 63d5e510d..767f1c542 100644 --- a/SocketHttpListener.Portable/Net/HttpListenerRequest.cs +++ b/SocketHttpListener.Portable/Net/HttpListenerRequest.cs @@ -179,16 +179,21 @@ namespace SocketHttpListener.Net } } - if (String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0) + if (HasExpect100Continue) { - ResponseStream output = context.Connection.GetResponseStream(); - + var output = (ResponseStream)context.Connection.GetResponseStream(this); + var _100continue = _textEncoding.GetASCIIEncoding().GetBytes("HTTP/1.1 100 Continue\r\n\r\n"); output.InternalWrite(_100continue, 0, _100continue.Length); } } + public bool HasExpect100Continue + { + get { return String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0; } + } + static bool MaybeUri(string s) { int p = s.IndexOf(':'); diff --git a/SocketHttpListener.Portable/Net/HttpListenerResponse.cs b/SocketHttpListener.Portable/Net/HttpListenerResponse.cs index 0bc827b5a..8c610d725 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; @@ -149,7 +149,7 @@ namespace SocketHttpListener.Net get { if (output_stream == null) - output_stream = context.Connection.GetResponseStream(); + output_stream = context.Connection.GetResponseStream(context.Request); return output_stream; } } @@ -489,7 +489,7 @@ namespace SocketHttpListener.Net int preamble = encoding.GetPreamble().Length; if (output_stream == null) - output_stream = context.Connection.GetResponseStream(); + output_stream = context.Connection.GetResponseStream(context.Request); /* Assumes that the ms was at position 0 */ ms.Position = preamble; diff --git a/SocketHttpListener.Portable/Net/ResponseStream.cs b/SocketHttpListener.Portable/Net/ResponseStream.cs index 07788ea41..7a6425dea 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) { |
