2016-11-11 19:55:12 +00:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.IO;
|
|
|
|
using System.Net;
|
|
|
|
using System.Threading;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using MediaBrowser.Model.Services;
|
|
|
|
|
2017-02-13 01:07:48 +00:00
|
|
|
namespace Emby.Server.Implementations.Services
|
2016-11-11 19:55:12 +00:00
|
|
|
{
|
|
|
|
public class HttpResult
|
|
|
|
: IHttpResult, IAsyncStreamWriter
|
|
|
|
{
|
2016-11-12 06:58:50 +00:00
|
|
|
public object Response { get; set; }
|
2016-11-11 19:55:12 +00:00
|
|
|
|
|
|
|
public HttpResult(object response, string contentType, HttpStatusCode statusCode)
|
|
|
|
{
|
|
|
|
this.Headers = new Dictionary<string, string>();
|
|
|
|
|
|
|
|
this.Response = response;
|
|
|
|
this.ContentType = contentType;
|
|
|
|
this.StatusCode = statusCode;
|
|
|
|
}
|
|
|
|
|
|
|
|
public string ContentType { get; set; }
|
|
|
|
|
|
|
|
public IDictionary<string, string> Headers { get; private set; }
|
|
|
|
|
|
|
|
public int Status { get; set; }
|
|
|
|
|
|
|
|
public HttpStatusCode StatusCode
|
|
|
|
{
|
2019-01-06 20:50:43 +00:00
|
|
|
get => (HttpStatusCode)Status;
|
|
|
|
set => Status = (int)value;
|
2016-11-11 19:55:12 +00:00
|
|
|
}
|
|
|
|
|
2016-11-12 06:58:50 +00:00
|
|
|
public IRequest RequestContext { get; set; }
|
2016-11-11 19:55:12 +00:00
|
|
|
|
|
|
|
public async Task WriteToAsync(Stream responseStream, CancellationToken cancellationToken)
|
|
|
|
{
|
2019-01-06 19:35:36 +00:00
|
|
|
var response = RequestContext == null ? null : RequestContext.Response;
|
2016-11-11 19:55:12 +00:00
|
|
|
|
2019-01-06 19:35:36 +00:00
|
|
|
if (this.Response is byte[] bytesResponse)
|
2016-11-11 19:55:12 +00:00
|
|
|
{
|
2017-09-03 07:28:58 +00:00
|
|
|
var contentLength = bytesResponse.Length;
|
|
|
|
|
2019-04-24 12:06:54 +00:00
|
|
|
if (response != null)
|
|
|
|
{
|
|
|
|
response.OriginalResponse.ContentLength = contentLength;
|
|
|
|
}
|
|
|
|
|
2017-09-03 07:28:58 +00:00
|
|
|
if (contentLength > 0)
|
|
|
|
{
|
2019-02-26 20:08:30 +00:00
|
|
|
await responseStream.WriteAsync(bytesResponse, 0, contentLength, cancellationToken).ConfigureAwait(false);
|
2017-09-03 07:28:58 +00:00
|
|
|
}
|
2016-11-11 19:55:12 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2017-02-13 01:07:48 +00:00
|
|
|
await ResponseHelper.WriteObject(this.RequestContext, this.Response, response).ConfigureAwait(false);
|
2016-11-11 19:55:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|