aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Services
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/Services')
-rw-r--r--Emby.Server.Implementations/Services/HttpResult.cs9
-rw-r--r--Emby.Server.Implementations/Services/ResponseHelper.cs31
-rw-r--r--Emby.Server.Implementations/Services/ServiceHandler.cs56
3 files changed, 58 insertions, 38 deletions
diff --git a/Emby.Server.Implementations/Services/HttpResult.cs b/Emby.Server.Implementations/Services/HttpResult.cs
index dfad09f7b..91314c15a 100644
--- a/Emby.Server.Implementations/Services/HttpResult.cs
+++ b/Emby.Server.Implementations/Services/HttpResult.cs
@@ -45,10 +45,15 @@ namespace Emby.Server.Implementations.Services
var bytesResponse = this.Response as byte[];
if (bytesResponse != null)
{
+ var contentLength = bytesResponse.Length;
+
if (response != null)
- response.SetContentLength(bytesResponse.Length);
+ response.SetContentLength(contentLength);
- await responseStream.WriteAsync(bytesResponse, 0, bytesResponse.Length).ConfigureAwait(false);
+ if (contentLength > 0)
+ {
+ await responseStream.WriteAsync(bytesResponse, 0, contentLength).ConfigureAwait(false);
+ }
return;
}
diff --git a/Emby.Server.Implementations/Services/ResponseHelper.cs b/Emby.Server.Implementations/Services/ResponseHelper.cs
index 84dc343c3..22e1bc4aa 100644
--- a/Emby.Server.Implementations/Services/ResponseHelper.cs
+++ b/Emby.Server.Implementations/Services/ResponseHelper.cs
@@ -41,11 +41,11 @@ namespace Emby.Server.Implementations.Services
response.StatusCode = httpResult.Status;
response.StatusDescription = httpResult.StatusCode.ToString();
- if (string.IsNullOrEmpty(httpResult.ContentType))
- {
- httpResult.ContentType = defaultContentType;
- }
- response.ContentType = httpResult.ContentType;
+ //if (string.IsNullOrEmpty(httpResult.ContentType))
+ //{
+ // httpResult.ContentType = defaultContentType;
+ //}
+ //response.ContentType = httpResult.ContentType;
if (httpResult.Cookies != null)
{
@@ -124,7 +124,10 @@ namespace Emby.Server.Implementations.Services
response.ContentType = "application/octet-stream";
response.SetContentLength(bytes.Length);
- await response.OutputStream.WriteAsync(bytes, 0, bytes.Length, cancellationToken).ConfigureAwait(false);
+ if (bytes.Length > 0)
+ {
+ await response.OutputStream.WriteAsync(bytes, 0, bytes.Length, cancellationToken).ConfigureAwait(false);
+ }
return;
}
@@ -133,7 +136,10 @@ namespace Emby.Server.Implementations.Services
{
bytes = Encoding.UTF8.GetBytes(responseText);
response.SetContentLength(bytes.Length);
- await response.OutputStream.WriteAsync(bytes, 0, bytes.Length, cancellationToken).ConfigureAwait(false);
+ if (bytes.Length > 0)
+ {
+ await response.OutputStream.WriteAsync(bytes, 0, bytes.Length, cancellationToken).ConfigureAwait(false);
+ }
return;
}
@@ -150,8 +156,15 @@ namespace Emby.Server.Implementations.Services
serializer(result, ms);
ms.Position = 0;
- response.SetContentLength(ms.Length);
- await ms.CopyToAsync(response.OutputStream).ConfigureAwait(false);
+
+ var contentLength = ms.Length;
+
+ response.SetContentLength(contentLength);
+
+ if (contentLength > 0)
+ {
+ await ms.CopyToAsync(response.OutputStream).ConfigureAwait(false);
+ }
}
//serializer(result, outputStream);
diff --git a/Emby.Server.Implementations/Services/ServiceHandler.cs b/Emby.Server.Implementations/Services/ServiceHandler.cs
index f9fcfdbab..d500595ce 100644
--- a/Emby.Server.Implementations/Services/ServiceHandler.cs
+++ b/Emby.Server.Implementations/Services/ServiceHandler.cs
@@ -162,7 +162,11 @@ namespace Emby.Server.Implementations.Services
if (RequireqRequestStream(requestType))
{
// Used by IRequiresRequestStream
- return CreateRequiresRequestStreamRequest(host, httpReq, requestType);
+ var request = ServiceHandler.CreateRequest(httpReq, restPath, GetRequestParams(httpReq), host.CreateInstance(requestType));
+
+ var rawReq = (IRequiresRequestStream)request;
+ rawReq.RequestStream = httpReq.InputStream;
+ return rawReq;
}
var requestParams = GetFlattenedRequestParams(httpReq);
@@ -176,16 +180,6 @@ namespace Emby.Server.Implementations.Services
return requiresRequestStreamTypeInfo.IsAssignableFrom(requestType.GetTypeInfo());
}
- private static IRequiresRequestStream CreateRequiresRequestStreamRequest(HttpListenerHost host, IRequest req, Type requestType)
- {
- var restPath = GetRoute(req);
- var request = ServiceHandler.CreateRequest(req, restPath, GetRequestParams(req), host.CreateInstance(requestType));
-
- var rawReq = (IRequiresRequestStream)request;
- rawReq.RequestStream = req.InputStream;
- return rawReq;
- }
-
public static object CreateRequest(HttpListenerHost host, IRequest httpReq, RestPath restPath, Dictionary<string, string> requestParams)
{
var requestDto = CreateContentTypeRequest(host, httpReq, restPath.RequestType, httpReq.ContentType);
@@ -228,22 +222,26 @@ namespace Emby.Server.Implementations.Services
}
}
- if ((IsMethod(request.Verb, "POST") || IsMethod(request.Verb, "PUT")) && request.FormData != null)
+ if ((IsMethod(request.Verb, "POST") || IsMethod(request.Verb, "PUT")))
{
- foreach (var name in request.FormData.Keys)
+ var formData = request.FormData;
+ if (formData != null)
{
- if (name == null) continue; //thank you ASP.NET
-
- var values = request.FormData.GetValues(name);
- if (values.Count == 1)
+ foreach (var name in formData.Keys)
{
- map[name] = values[0];
- }
- else
- {
- for (var i = 0; i < values.Count; i++)
+ if (name == null) continue; //thank you ASP.NET
+
+ var values = formData.GetValues(name);
+ if (values.Count == 1)
+ {
+ map[name] = values[0];
+ }
+ else
{
- map[name + (i == 0 ? "" : "#" + i)] = values[i];
+ for (var i = 0; i < values.Count; i++)
+ {
+ map[name + (i == 0 ? "" : "#" + i)] = values[i];
+ }
}
}
}
@@ -270,12 +268,16 @@ namespace Emby.Server.Implementations.Services
map[name] = request.QueryString[name];
}
- if ((IsMethod(request.Verb, "POST") || IsMethod(request.Verb, "PUT")) && request.FormData != null)
+ if ((IsMethod(request.Verb, "POST") || IsMethod(request.Verb, "PUT")))
{
- foreach (var name in request.FormData.Keys)
+ var formData = request.FormData;
+ if (formData != null)
{
- if (name == null) continue; //thank you ASP.NET
- map[name] = request.FormData[name];
+ foreach (var name in formData.Keys)
+ {
+ if (name == null) continue; //thank you ASP.NET
+ map[name] = formData[name];
+ }
}
}