aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Emby.Dlna/Api/DlnaServerService.cs10
-rw-r--r--Emby.Dlna/ConnectionManager/ConnectionManager.cs3
-rw-r--r--Emby.Dlna/ContentDirectory/ContentDirectory.cs2
-rw-r--r--Emby.Dlna/ControlRequest.cs5
-rw-r--r--Emby.Dlna/DlnaManager.cs17
-rw-r--r--Emby.Dlna/IUpnpService.cs5
-rw-r--r--Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs3
-rw-r--r--Emby.Server.Implementations/HttpServer/HttpListenerHost.cs7
-rw-r--r--Emby.Server.Implementations/HttpServer/HttpResultFactory.cs19
-rw-r--r--Emby.Server.Implementations/HttpServer/WebSocketConnection.cs3
-rw-r--r--Emby.Server.Implementations/Net/WebSocketConnectEventArgs.cs3
-rw-r--r--Emby.Server.Implementations/Services/ServiceHandler.cs2
-rw-r--r--Emby.Server.Implementations/Session/SessionWebSocketListener.cs3
-rw-r--r--Emby.Server.Implementations/SocketSharp/RequestMono.cs2
-rw-r--r--Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs6
-rw-r--r--Emby.Server.Implementations/SocketSharp/WebSocketSharpRequest.cs12
-rw-r--r--Emby.Server.Implementations/SocketSharp/WebSocketSharpResponse.cs83
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs6
-rw-r--r--MediaBrowser.Controller/Dlna/IDlnaManager.cs5
-rw-r--r--MediaBrowser.Controller/Net/IWebSocketConnection.cs3
-rw-r--r--MediaBrowser.Controller/Net/WebSocketConnectEventArgs.cs6
-rw-r--r--MediaBrowser.Model/Services/IHttpRequest.cs5
-rw-r--r--MediaBrowser.Model/Services/IHttpResponse.cs12
-rw-r--r--MediaBrowser.Model/Services/IRequest.cs21
-rw-r--r--MediaBrowser.Model/Services/QueryParamCollection.cs20
25 files changed, 66 insertions, 197 deletions
diff --git a/Emby.Dlna/Api/DlnaServerService.cs b/Emby.Dlna/Api/DlnaServerService.cs
index 68bf80163..8bf3797f8 100644
--- a/Emby.Dlna/Api/DlnaServerService.cs
+++ b/Emby.Dlna/Api/DlnaServerService.cs
@@ -136,7 +136,7 @@ namespace Emby.Dlna.Api
{
var url = Request.AbsoluteUri;
var serverAddress = url.Substring(0, url.IndexOf("/dlna/", StringComparison.OrdinalIgnoreCase));
- var xml = _dlnaManager.GetServerDescriptionXml(Request.Headers.ToDictionary(), request.UuId, serverAddress);
+ var xml = _dlnaManager.GetServerDescriptionXml(Request.Headers, request.UuId, serverAddress);
var cacheLength = TimeSpan.FromDays(1);
var cacheKey = Request.RawUrl.GetMD5();
@@ -147,21 +147,21 @@ namespace Emby.Dlna.Api
public object Get(GetContentDirectory request)
{
- var xml = ContentDirectory.GetServiceXml(Request.Headers.ToDictionary());
+ var xml = ContentDirectory.GetServiceXml();
return _resultFactory.GetResult(Request, xml, XMLContentType);
}
public object Get(GetMediaReceiverRegistrar request)
{
- var xml = MediaReceiverRegistrar.GetServiceXml(Request.Headers.ToDictionary());
+ var xml = MediaReceiverRegistrar.GetServiceXml();
return _resultFactory.GetResult(Request, xml, XMLContentType);
}
public object Get(GetConnnectionManager request)
{
- var xml = ConnectionManager.GetServiceXml(Request.Headers.ToDictionary());
+ var xml = ConnectionManager.GetServiceXml();
return _resultFactory.GetResult(Request, xml, XMLContentType);
}
@@ -193,7 +193,7 @@ namespace Emby.Dlna.Api
return service.ProcessControlRequest(new ControlRequest
{
- Headers = Request.Headers.ToDictionary(),
+ Headers = Request.Headers,
InputXml = requestStream,
TargetServerUuId = id,
RequestedUrl = Request.AbsoluteUri
diff --git a/Emby.Dlna/ConnectionManager/ConnectionManager.cs b/Emby.Dlna/ConnectionManager/ConnectionManager.cs
index cc427f2a1..e138b91d6 100644
--- a/Emby.Dlna/ConnectionManager/ConnectionManager.cs
+++ b/Emby.Dlna/ConnectionManager/ConnectionManager.cs
@@ -1,4 +1,3 @@
-using System.Collections.Generic;
using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
@@ -24,7 +23,7 @@ namespace Emby.Dlna.ConnectionManager
XmlReaderSettingsFactory = xmlReaderSettingsFactory;
}
- public string GetServiceXml(IDictionary<string, string> headers)
+ public string GetServiceXml()
{
return new ConnectionManagerXmlBuilder().GetXml();
}
diff --git a/Emby.Dlna/ContentDirectory/ContentDirectory.cs b/Emby.Dlna/ContentDirectory/ContentDirectory.cs
index b0fec90e6..867e6112f 100644
--- a/Emby.Dlna/ContentDirectory/ContentDirectory.cs
+++ b/Emby.Dlna/ContentDirectory/ContentDirectory.cs
@@ -65,7 +65,7 @@ namespace Emby.Dlna.ContentDirectory
}
}
- public string GetServiceXml(IDictionary<string, string> headers)
+ public string GetServiceXml()
{
return new ContentDirectoryXmlBuilder().GetXml();
}
diff --git a/Emby.Dlna/ControlRequest.cs b/Emby.Dlna/ControlRequest.cs
index afd9a0b87..907d437f8 100644
--- a/Emby.Dlna/ControlRequest.cs
+++ b/Emby.Dlna/ControlRequest.cs
@@ -1,11 +1,12 @@
using System.Collections.Generic;
using System.IO;
+using Microsoft.AspNetCore.Http;
namespace Emby.Dlna
{
public class ControlRequest
{
- public IDictionary<string, string> Headers { get; set; }
+ public IHeaderDictionary Headers { get; set; }
public Stream InputXml { get; set; }
@@ -15,7 +16,7 @@ namespace Emby.Dlna
public ControlRequest()
{
- Headers = new Dictionary<string, string>();
+ Headers = new HeaderDictionary();
}
}
}
diff --git a/Emby.Dlna/DlnaManager.cs b/Emby.Dlna/DlnaManager.cs
index f53d27451..770a90152 100644
--- a/Emby.Dlna/DlnaManager.cs
+++ b/Emby.Dlna/DlnaManager.cs
@@ -17,7 +17,9 @@ using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Reflection;
using MediaBrowser.Model.Serialization;
+using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Primitives;
namespace Emby.Dlna
{
@@ -205,16 +207,13 @@ namespace Emby.Dlna
}
}
- public DeviceProfile GetProfile(IDictionary<string, string> headers)
+ public DeviceProfile GetProfile(IHeaderDictionary headers)
{
if (headers == null)
{
throw new ArgumentNullException(nameof(headers));
}
- // Convert to case insensitive
- headers = new Dictionary<string, string>(headers, StringComparer.OrdinalIgnoreCase);
-
var profile = GetProfiles().FirstOrDefault(i => i.Identification != null && IsMatch(headers, i.Identification));
if (profile != null)
@@ -230,12 +229,12 @@ namespace Emby.Dlna
return profile;
}
- private bool IsMatch(IDictionary<string, string> headers, DeviceIdentification profileInfo)
+ private bool IsMatch(IHeaderDictionary headers, DeviceIdentification profileInfo)
{
return profileInfo.Headers.Any(i => IsMatch(headers, i));
}
- private bool IsMatch(IDictionary<string, string> headers, HttpHeaderInfo header)
+ private bool IsMatch(IHeaderDictionary headers, HttpHeaderInfo header)
{
// Handle invalid user setup
if (string.IsNullOrEmpty(header.Name))
@@ -243,14 +242,14 @@ namespace Emby.Dlna
return false;
}
- if (headers.TryGetValue(header.Name, out string value))
+ if (headers.TryGetValue(header.Name, out StringValues value))
{
switch (header.Match)
{
case HeaderMatchType.Equals:
return string.Equals(value, header.Value, StringComparison.OrdinalIgnoreCase);
case HeaderMatchType.Substring:
- var isMatch = value.IndexOf(header.Value, StringComparison.OrdinalIgnoreCase) != -1;
+ var isMatch = value.ToString().IndexOf(header.Value, StringComparison.OrdinalIgnoreCase) != -1;
//_logger.LogDebug("IsMatch-Substring value: {0} testValue: {1} isMatch: {2}", value, header.Value, isMatch);
return isMatch;
case HeaderMatchType.Regex:
@@ -493,7 +492,7 @@ namespace Emby.Dlna
internal string Path { get; set; }
}
- public string GetServerDescriptionXml(IDictionary<string, string> headers, string serverUuId, string serverAddress)
+ public string GetServerDescriptionXml(IHeaderDictionary headers, string serverUuId, string serverAddress)
{
var profile = GetProfile(headers) ??
GetDefaultProfile();
diff --git a/Emby.Dlna/IUpnpService.cs b/Emby.Dlna/IUpnpService.cs
index ab8aa4619..ae90e95c7 100644
--- a/Emby.Dlna/IUpnpService.cs
+++ b/Emby.Dlna/IUpnpService.cs
@@ -1,5 +1,3 @@
-using System.Collections.Generic;
-
namespace Emby.Dlna
{
public interface IUpnpService
@@ -7,9 +5,8 @@ namespace Emby.Dlna
/// <summary>
/// Gets the content directory XML.
/// </summary>
- /// <param name="headers">The headers.</param>
/// <returns>System.String.</returns>
- string GetServiceXml(IDictionary<string, string> headers);
+ string GetServiceXml();
/// <summary>
/// Processes the control request.
diff --git a/Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs b/Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs
index 2b84528ea..9c6022b6c 100644
--- a/Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs
+++ b/Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs
@@ -3,6 +3,7 @@ using Emby.Dlna.Service;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Model.Xml;
+using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
namespace Emby.Dlna.MediaReceiverRegistrar
@@ -19,7 +20,7 @@ namespace Emby.Dlna.MediaReceiverRegistrar
XmlReaderSettingsFactory = xmlReaderSettingsFactory;
}
- public string GetServiceXml(IDictionary<string, string> headers)
+ public string GetServiceXml()
{
return new MediaReceiverRegistrarXmlBuilder().GetXml();
}
diff --git a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs
index 2abc6c2f4..70753e563 100644
--- a/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs
+++ b/Emby.Server.Implementations/HttpServer/HttpListenerHost.cs
@@ -22,6 +22,7 @@ using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Internal;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
@@ -154,7 +155,7 @@ namespace Emby.Server.Implementations.HttpServer
{
OnReceive = ProcessWebSocketMessageReceived,
Url = e.Url,
- QueryString = e.QueryString ?? new QueryParamCollection()
+ QueryString = e.QueryString ?? new QueryCollection()
};
connection.Closed += Connection_Closed;
@@ -606,8 +607,8 @@ namespace Emby.Server.Implementations.HttpServer
}
finally
{
- httpRes.Close();
-
+ // TODO
+ httpRes.IsClosed = true;
stopWatch.Stop();
var elapsed = stopWatch.Elapsed;
if (elapsed.TotalMilliseconds > 500)
diff --git a/Emby.Server.Implementations/HttpServer/HttpResultFactory.cs b/Emby.Server.Implementations/HttpServer/HttpResultFactory.cs
index 09cdbc3c2..52c8221f6 100644
--- a/Emby.Server.Implementations/HttpServer/HttpResultFactory.cs
+++ b/Emby.Server.Implementations/HttpServer/HttpResultFactory.cs
@@ -16,6 +16,8 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Primitives;
+using Microsoft.Net.Http.Headers;
using IRequest = MediaBrowser.Model.Services.IRequest;
using MimeTypes = MediaBrowser.Model.Net.MimeTypes;
@@ -246,9 +248,9 @@ namespace Emby.Server.Implementations.HttpServer
private static string GetCompressionType(IRequest request)
{
- var acceptEncoding = request.Headers["Accept-Encoding"];
+ var acceptEncoding = request.Headers["Accept-Encoding"].ToString();
- if (acceptEncoding != null)
+ if (string.IsNullOrEmpty(acceptEncoding))
{
//if (_brotliCompressor != null && acceptEncoding.IndexOf("br", StringComparison.OrdinalIgnoreCase) != -1)
// return "br";
@@ -424,12 +426,12 @@ namespace Emby.Server.Implementations.HttpServer
/// </summary>
private object GetCachedResult(IRequest requestContext, IDictionary<string, string> responseHeaders, StaticResultOptions options)
{
- bool noCache = (requestContext.Headers.Get("Cache-Control") ?? string.Empty).IndexOf("no-cache", StringComparison.OrdinalIgnoreCase) != -1;
+ bool noCache = (requestContext.Headers[HeaderNames.CacheControl].ToString()).IndexOf("no-cache", StringComparison.OrdinalIgnoreCase) != -1;
AddCachingHeaders(responseHeaders, options.CacheDuration, noCache, options.DateLastModified);
if (!noCache)
{
- DateTime.TryParse(requestContext.Headers.Get("If-Modified-Since"), out var ifModifiedSinceHeader);
+ DateTime.TryParse(requestContext.Headers[HeaderNames.IfModifiedSince], out var ifModifiedSinceHeader);
if (IsNotModified(ifModifiedSinceHeader, options.CacheDuration, options.DateLastModified))
{
@@ -530,7 +532,7 @@ namespace Emby.Server.Implementations.HttpServer
options.ResponseHeaders = options.ResponseHeaders ?? new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
var contentType = options.ContentType;
- if (!string.IsNullOrEmpty(requestContext.Headers.Get("If-Modified-Since")))
+ if (!StringValues.IsNullOrEmpty(requestContext.Headers[HeaderNames.IfModifiedSince]))
{
// See if the result is already cached in the browser
var result = GetCachedResult(requestContext, options.ResponseHeaders, options);
@@ -548,7 +550,7 @@ namespace Emby.Server.Implementations.HttpServer
AddCachingHeaders(responseHeaders, options.CacheDuration, false, options.DateLastModified);
AddAgeHeader(responseHeaders, options.DateLastModified);
- var rangeHeader = requestContext.Headers.Get("Range");
+ var rangeHeader = requestContext.Headers["Range"];
if (!isHeadRequest && !string.IsNullOrEmpty(options.Path))
{
@@ -610,11 +612,6 @@ namespace Emby.Server.Implementations.HttpServer
}
/// <summary>
- /// The us culture
- /// </summary>
- private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
-
- /// <summary>
/// Adds the caching responseHeaders.
/// </summary>
private void AddCachingHeaders(IDictionary<string, string> responseHeaders, TimeSpan? cacheDuration,
diff --git a/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs b/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs
index e9d0bac74..2bf460bd1 100644
--- a/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs
+++ b/Emby.Server.Implementations/HttpServer/WebSocketConnection.cs
@@ -8,6 +8,7 @@ using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using UtfUnknown;
@@ -67,7 +68,7 @@ namespace Emby.Server.Implementations.HttpServer
/// Gets or sets the query string.
/// </summary>
/// <value>The query string.</value>
- public QueryParamCollection QueryString { get; set; }
+ public IQueryCollection QueryString { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="WebSocketConnection" /> class.
diff --git a/Emby.Server.Implementations/Net/WebSocketConnectEventArgs.cs b/Emby.Server.Implementations/Net/WebSocketConnectEventArgs.cs
index 666f1f601..e3047d392 100644
--- a/Emby.Server.Implementations/Net/WebSocketConnectEventArgs.cs
+++ b/Emby.Server.Implementations/Net/WebSocketConnectEventArgs.cs
@@ -1,6 +1,7 @@
using System;
using System.Net.WebSockets;
using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
namespace Emby.Server.Implementations.Net
{
@@ -15,7 +16,7 @@ namespace Emby.Server.Implementations.Net
/// Gets or sets the query string.
/// </summary>
/// <value>The query string.</value>
- public QueryParamCollection QueryString { get; set; }
+ public IQueryCollection QueryString { get; set; }
/// <summary>
/// Gets or sets the web socket.
/// </summary>
diff --git a/Emby.Server.Implementations/Services/ServiceHandler.cs b/Emby.Server.Implementations/Services/ServiceHandler.cs
index 7e836e22c..3c8adfc98 100644
--- a/Emby.Server.Implementations/Services/ServiceHandler.cs
+++ b/Emby.Server.Implementations/Services/ServiceHandler.cs
@@ -154,7 +154,7 @@ namespace Emby.Server.Implementations.Services
{
if (name == null) continue; //thank you ASP.NET
- var values = request.QueryString.GetValues(name);
+ var values = request.QueryString[name];
if (values.Count == 1)
{
map[name] = values[0];
diff --git a/Emby.Server.Implementations/Session/SessionWebSocketListener.cs b/Emby.Server.Implementations/Session/SessionWebSocketListener.cs
index 24903f5e8..a551433ed 100644
--- a/Emby.Server.Implementations/Session/SessionWebSocketListener.cs
+++ b/Emby.Server.Implementations/Session/SessionWebSocketListener.cs
@@ -5,6 +5,7 @@ using MediaBrowser.Controller.Session;
using MediaBrowser.Model.Events;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Session
@@ -62,7 +63,7 @@ namespace Emby.Server.Implementations.Session
}
}
- private SessionInfo GetSession(QueryParamCollection queryString, string remoteEndpoint)
+ private SessionInfo GetSession(IQueryCollection queryString, string remoteEndpoint)
{
if (queryString == null)
{
diff --git a/Emby.Server.Implementations/SocketSharp/RequestMono.cs b/Emby.Server.Implementations/SocketSharp/RequestMono.cs
index 113f76b10..f73adc5ff 100644
--- a/Emby.Server.Implementations/SocketSharp/RequestMono.cs
+++ b/Emby.Server.Implementations/SocketSharp/RequestMono.cs
@@ -118,8 +118,6 @@ namespace Emby.Server.Implementations.SocketSharp
public string Authorization => StringValues.IsNullOrEmpty(request.Headers["Authorization"]) ? null : request.Headers["Authorization"].ToString();
- protected bool validate_cookies { get; set; }
- protected bool validate_query_string { get; set; }
protected bool validate_form { get; set; }
protected bool checked_form { get; set; }
diff --git a/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs b/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
index 77469244b..9f046c3fd 100644
--- a/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
+++ b/Emby.Server.Implementations/SocketSharp/WebSocketSharpListener.cs
@@ -52,12 +52,10 @@ using Microsoft.Extensions.Logging;
var endpoint = ctx.Connection.RemoteIpAddress.ToString();
var url = ctx.Request.GetDisplayUrl();
- var queryString = new QueryParamCollection(ctx.Request.Query);
-
var connectingArgs = new WebSocketConnectingEventArgs
{
Url = url,
- QueryString = queryString,
+ QueryString = ctx.Request.Query,
Endpoint = endpoint
};
@@ -73,7 +71,7 @@ using Microsoft.Extensions.Logging;
WebSocketConnected(new WebSocketConnectEventArgs
{
Url = url,
- QueryString = queryString,
+ QueryString = ctx.Request.Query,
WebSocket = socket,
Endpoint = endpoint
});
diff --git a/Emby.Server.Implementations/SocketSharp/WebSocketSharpRequest.cs b/Emby.Server.Implementations/SocketSharp/WebSocketSharpRequest.cs
index bddccf68b..24fd36062 100644
--- a/Emby.Server.Implementations/SocketSharp/WebSocketSharpRequest.cs
+++ b/Emby.Server.Implementations/SocketSharp/WebSocketSharpRequest.cs
@@ -13,7 +13,6 @@ using Microsoft.Extensions.Primitives;
using Microsoft.Net.Http.Headers;
using IHttpFile = MediaBrowser.Model.Services.IHttpFile;
using IHttpRequest = MediaBrowser.Model.Services.IHttpRequest;
-using IHttpResponse = MediaBrowser.Model.Services.IHttpResponse;
using IResponse = MediaBrowser.Model.Services.IResponse;
namespace Emby.Server.Implementations.SocketSharp
@@ -21,7 +20,7 @@ namespace Emby.Server.Implementations.SocketSharp
public partial class WebSocketSharpRequest : IHttpRequest
{
private readonly HttpRequest request;
- private readonly IHttpResponse response;
+ private readonly IResponse response;
public WebSocketSharpRequest(HttpRequest httpContext, HttpResponse response, string operationName, ILogger logger)
{
@@ -34,11 +33,9 @@ namespace Emby.Server.Implementations.SocketSharp
public HttpRequest HttpRequest => request;
- public object OriginalRequest => request;
-
public IResponse Response => response;
- public IHttpResponse HttpResponse => response;
+ public IResponse HttpResponse => response;
public string OperationName { get; set; }
@@ -396,10 +393,9 @@ namespace Emby.Server.Implementations.SocketSharp
public string UserAgent => request.Headers[HeaderNames.UserAgent];
- public QueryParamCollection Headers => new QueryParamCollection(request.Headers);
+ public IHeaderDictionary Headers => request.Headers;
- private QueryParamCollection queryString;
- public QueryParamCollection QueryString => queryString ?? (queryString = new QueryParamCollection(request.Query));
+ public IQueryCollection QueryString => request.Query;
public bool IsLocal => string.Equals(request.HttpContext.Connection.LocalIpAddress.ToString(), request.HttpContext.Connection.RemoteIpAddress.ToString());
diff --git a/Emby.Server.Implementations/SocketSharp/WebSocketSharpResponse.cs b/Emby.Server.Implementations/SocketSharp/WebSocketSharpResponse.cs
index f9ecb52a5..c4fbaddd3 100644
--- a/Emby.Server.Implementations/SocketSharp/WebSocketSharpResponse.cs
+++ b/Emby.Server.Implementations/SocketSharp/WebSocketSharpResponse.cs
@@ -1,23 +1,18 @@
using System;
using System.Collections.Generic;
using System.IO;
-using System.Net;
-using System.Net.Sockets;
using System.Runtime.InteropServices;
-using System.Text;
using System.Threading;
using System.Threading.Tasks;
-using Emby.Server.Implementations;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
-using IHttpResponse = MediaBrowser.Model.Services.IHttpResponse;
using IRequest = MediaBrowser.Model.Services.IRequest;
namespace Emby.Server.Implementations.SocketSharp
{
- public class WebSocketSharpResponse : IHttpResponse
+ public class WebSocketSharpResponse : IResponse
{
private readonly ILogger _logger;
@@ -51,42 +46,7 @@ namespace Emby.Server.Implementations.SocketSharp
set => _response.ContentType = value;
}
- public QueryParamCollection Headers => new QueryParamCollection(_response.Headers);
-
- private static string AsHeaderValue(Cookie cookie)
- {
- DateTime defaultExpires = DateTime.MinValue;
-
- var path = cookie.Expires == defaultExpires
- ? "/"
- : cookie.Path ?? "/";
-
- var sb = new StringBuilder();
-
- sb.Append($"{cookie.Name}={cookie.Value};path={path}");
-
- if (cookie.Expires != defaultExpires)
- {
- sb.Append($";expires={cookie.Expires:R}");
- }
-
- if (!string.IsNullOrEmpty(cookie.Domain))
- {
- sb.Append($";domain={cookie.Domain}");
- }
-
- if (cookie.Secure)
- {
- sb.Append(";Secure");
- }
-
- if (cookie.HttpOnly)
- {
- sb.Append(";HttpOnly");
- }
-
- return sb.ToString();
- }
+ public IHeaderDictionary Headers => _response.Headers;
public void AddHeader(string name, string value)
{
@@ -111,51 +71,14 @@ namespace Emby.Server.Implementations.SocketSharp
public Stream OutputStream => _response.Body;
- public void Close()
- {
- if (!this.IsClosed)
- {
- this.IsClosed = true;
-
- try
- {
- var response = this._response;
-
- var outputStream = response.Body;
-
- // This is needed with compression
- outputStream.Flush();
- outputStream.Dispose();
- }
- catch (SocketException)
- {
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Error in HttpListenerResponseWrapper");
- }
- }
- }
-
public bool IsClosed
{
get;
- private set;
- }
-
- public void SetCookie(Cookie cookie)
- {
- var cookieStr = AsHeaderValue(cookie);
- _response.Headers.Add("Set-Cookie", cookieStr);
+ set;
}
public bool SendChunked { get; set; }
- public bool KeepAlive { get; set; }
-
- public void ClearCookies()
- {
- }
const int StreamCopyToBufferSize = 81920;
public async Task TransmitFile(string path, long offset, long count, FileShareMode fileShareMode, IFileSystem fileSystem, IStreamHelper streamHelper, CancellationToken cancellationToken)
{
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index a6be071b8..ae259a4f5 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -609,12 +609,12 @@ namespace MediaBrowser.Api.Playback
{
foreach (var param in Request.QueryString)
{
- if (char.IsLower(param.Name[0]))
+ if (char.IsLower(param.Key[0]))
{
// This was probably not parsed initially and should be a StreamOptions
// TODO: This should be incorporated either in the lower framework for parsing requests
// or the generated URL should correctly serialize it
- request.StreamOptions[param.Name] = param.Value;
+ request.StreamOptions[param.Key] = param.Value;
}
}
}
@@ -867,7 +867,7 @@ namespace MediaBrowser.Api.Playback
private void ApplyDeviceProfileSettings(StreamState state)
{
- var headers = Request.Headers.ToDictionary();
+ var headers = Request.Headers;
if (!string.IsNullOrWhiteSpace(state.Request.DeviceProfileId))
{
diff --git a/MediaBrowser.Controller/Dlna/IDlnaManager.cs b/MediaBrowser.Controller/Dlna/IDlnaManager.cs
index a6ee7c505..41a7686a3 100644
--- a/MediaBrowser.Controller/Dlna/IDlnaManager.cs
+++ b/MediaBrowser.Controller/Dlna/IDlnaManager.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Model.Dlna;
+using Microsoft.AspNetCore.Http;
namespace MediaBrowser.Controller.Dlna
{
@@ -17,7 +18,7 @@ namespace MediaBrowser.Controller.Dlna
/// </summary>
/// <param name="headers">The headers.</param>
/// <returns>DeviceProfile.</returns>
- DeviceProfile GetProfile(IDictionary<string, string> headers);
+ DeviceProfile GetProfile(IHeaderDictionary headers);
/// <summary>
/// Gets the default profile.
@@ -64,7 +65,7 @@ namespace MediaBrowser.Controller.Dlna
/// <param name="serverUuId">The server uu identifier.</param>
/// <param name="serverAddress">The server address.</param>
/// <returns>System.String.</returns>
- string GetServerDescriptionXml(IDictionary<string, string> headers, string serverUuId, string serverAddress);
+ string GetServerDescriptionXml(IHeaderDictionary headers, string serverUuId, string serverAddress);
/// <summary>
/// Gets the icon.
diff --git a/MediaBrowser.Controller/Net/IWebSocketConnection.cs b/MediaBrowser.Controller/Net/IWebSocketConnection.cs
index a09b2f7a2..566897b31 100644
--- a/MediaBrowser.Controller/Net/IWebSocketConnection.cs
+++ b/MediaBrowser.Controller/Net/IWebSocketConnection.cs
@@ -4,6 +4,7 @@ using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
namespace MediaBrowser.Controller.Net
{
@@ -35,7 +36,7 @@ namespace MediaBrowser.Controller.Net
/// Gets or sets the query string.
/// </summary>
/// <value>The query string.</value>
- QueryParamCollection QueryString { get; set; }
+ IQueryCollection QueryString { get; set; }
/// <summary>
/// Gets or sets the receive action.
diff --git a/MediaBrowser.Controller/Net/WebSocketConnectEventArgs.cs b/MediaBrowser.Controller/Net/WebSocketConnectEventArgs.cs
index f26b764bb..107e67421 100644
--- a/MediaBrowser.Controller/Net/WebSocketConnectEventArgs.cs
+++ b/MediaBrowser.Controller/Net/WebSocketConnectEventArgs.cs
@@ -1,5 +1,7 @@
using System;
using MediaBrowser.Model.Services;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Internal;
namespace MediaBrowser.Controller.Net
{
@@ -22,7 +24,7 @@ namespace MediaBrowser.Controller.Net
/// Gets or sets the query string.
/// </summary>
/// <value>The query string.</value>
- public QueryParamCollection QueryString { get; set; }
+ public IQueryCollection QueryString { get; set; }
/// <summary>
/// Gets or sets a value indicating whether [allow connection].
/// </summary>
@@ -31,7 +33,7 @@ namespace MediaBrowser.Controller.Net
public WebSocketConnectingEventArgs()
{
- QueryString = new QueryParamCollection();
+ QueryString = new QueryCollection();
AllowConnection = true;
}
}
diff --git a/MediaBrowser.Model/Services/IHttpRequest.cs b/MediaBrowser.Model/Services/IHttpRequest.cs
index 579f80c96..50c6076f3 100644
--- a/MediaBrowser.Model/Services/IHttpRequest.cs
+++ b/MediaBrowser.Model/Services/IHttpRequest.cs
@@ -3,11 +3,6 @@ namespace MediaBrowser.Model.Services
public interface IHttpRequest : IRequest
{
/// <summary>
- /// The HttpResponse
- /// </summary>
- IHttpResponse HttpResponse { get; }
-
- /// <summary>
/// The HTTP Verb
/// </summary>
string HttpMethod { get; }
diff --git a/MediaBrowser.Model/Services/IHttpResponse.cs b/MediaBrowser.Model/Services/IHttpResponse.cs
index a8b79f394..b99d12525 100644
--- a/MediaBrowser.Model/Services/IHttpResponse.cs
+++ b/MediaBrowser.Model/Services/IHttpResponse.cs
@@ -4,17 +4,5 @@ namespace MediaBrowser.Model.Services
{
public interface IHttpResponse : IResponse
{
- //ICookies Cookies { get; }
-
- /// <summary>
- /// Adds a new Set-Cookie instruction to Response
- /// </summary>
- /// <param name="cookie"></param>
- void SetCookie(Cookie cookie);
-
- /// <summary>
- /// Removes all pending Set-Cookie instructions
- /// </summary>
- void ClearCookies();
}
}
diff --git a/MediaBrowser.Model/Services/IRequest.cs b/MediaBrowser.Model/Services/IRequest.cs
index 0fd4ea37b..edb5a2509 100644
--- a/MediaBrowser.Model/Services/IRequest.cs
+++ b/MediaBrowser.Model/Services/IRequest.cs
@@ -1,20 +1,15 @@
using System;
using System.Collections.Generic;
using System.IO;
-using System.Net;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.IO;
+using Microsoft.AspNetCore.Http;
namespace MediaBrowser.Model.Services
{
public interface IRequest
{
- /// <summary>
- /// The underlying ASP.NET or HttpListener HttpRequest
- /// </summary>
- object OriginalRequest { get; }
-
IResponse Response { get; }
/// <summary>
@@ -51,9 +46,9 @@ namespace MediaBrowser.Model.Services
/// </summary>
Dictionary<string, object> Items { get; }
- QueryParamCollection Headers { get; }
+ IHeaderDictionary Headers { get; }
- QueryParamCollection QueryString { get; }
+ IQueryCollection QueryString { get; }
Task<QueryParamCollection> GetFormData();
@@ -123,20 +118,14 @@ namespace MediaBrowser.Model.Services
Stream OutputStream { get; }
/// <summary>
- /// Signal that this response has been handled and no more processing should be done.
- /// When used in a request or response filter, no more filters or processing is done on this request.
- /// </summary>
- void Close();
-
- /// <summary>
/// Gets a value indicating whether this instance is closed.
/// </summary>
- bool IsClosed { get; }
+ bool IsClosed { get; set; }
//Add Metadata to Response
Dictionary<string, object> Items { get; }
- QueryParamCollection Headers { get; }
+ IHeaderDictionary Headers { get; }
Task TransmitFile(string path, long offset, long count, FileShareMode fileShareMode, IFileSystem fileSystem, IStreamHelper streamHelper, CancellationToken cancellationToken);
diff --git a/MediaBrowser.Model/Services/QueryParamCollection.cs b/MediaBrowser.Model/Services/QueryParamCollection.cs
index 9f23b2420..4631a3b63 100644
--- a/MediaBrowser.Model/Services/QueryParamCollection.cs
+++ b/MediaBrowser.Model/Services/QueryParamCollection.cs
@@ -1,10 +1,7 @@
using System;
using System.Collections.Generic;
-using System.Collections.Specialized;
using System.Linq;
-using System.Net;
using MediaBrowser.Model.Dto;
-using Microsoft.AspNetCore.Http;
namespace MediaBrowser.Model.Services
{
@@ -13,23 +10,6 @@ namespace MediaBrowser.Model.Services
{
public QueryParamCollection()
{
-
- }
-
- public QueryParamCollection(IHeaderDictionary headers)
- {
- foreach (var pair in headers)
- {
- Add(pair.Key, pair.Value);
- }
- }
-
- public QueryParamCollection(IQueryCollection queryCollection)
- {
- foreach (var pair in queryCollection)
- {
- Add(pair.Key, pair.Value);
- }
}
private static StringComparison GetStringComparison()