diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-10-25 15:02:04 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-10-25 15:02:04 -0400 |
| commit | ef6b90b8e6e6c317fcda85a392c79324f91250db (patch) | |
| tree | 570c78c0915d3608399f003038b66d56e5e29e84 /MediaBrowser.Server.Implementations/HttpServer/SocketSharp | |
| parent | edbe28d9fc3091121b7e2323fe42d62a70c9e351 (diff) | |
make controller project portable
Diffstat (limited to 'MediaBrowser.Server.Implementations/HttpServer/SocketSharp')
5 files changed, 81 insertions, 56 deletions
diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/HttpUtility.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/HttpUtility.cs index 3ef48d13a..49d6bceb4 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/HttpUtility.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/HttpUtility.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Text; +using MediaBrowser.Model.Services; namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp { @@ -857,28 +858,28 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp return output.ToString(); } - public static NameValueCollection ParseQueryString(string query) + public static QueryParamCollection ParseQueryString(string query) { return ParseQueryString(query, Encoding.UTF8); } - public static NameValueCollection ParseQueryString(string query, Encoding encoding) + public static QueryParamCollection ParseQueryString(string query, Encoding encoding) { if (query == null) throw new ArgumentNullException("query"); if (encoding == null) throw new ArgumentNullException("encoding"); if (query.Length == 0 || (query.Length == 1 && query[0] == '?')) - return new NameValueCollection(); + return new QueryParamCollection(); if (query[0] == '?') query = query.Substring(1); - NameValueCollection result = new HttpQSCollection(); + QueryParamCollection result = new QueryParamCollection(); ParseQueryString(query, encoding, result); return result; } - internal static void ParseQueryString(string query, Encoding encoding, NameValueCollection result) + internal static void ParseQueryString(string query, Encoding encoding, QueryParamCollection result) { if (query.Length == 0) return; diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/RequestMono.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/RequestMono.cs index d20dd7ec0..13ae48cff 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/RequestMono.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/RequestMono.cs @@ -5,8 +5,8 @@ using System.IO; using System.Text; using System.Threading.Tasks; using System.Web; +using MediaBrowser.Model.Services; using ServiceStack; -using ServiceStack.Web; namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp { @@ -83,7 +83,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp } } - public NameValueCollection Form + public QueryParamCollection Form { get { @@ -155,14 +155,15 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp throw new HttpRequestValidationException(msg); } - static void ValidateNameValueCollection(string name, NameValueCollection coll) + static void ValidateNameValueCollection(string name, QueryParamCollection coll) { if (coll == null) return; - foreach (string key in coll.Keys) + foreach (var pair in coll) { - string val = coll[key]; + var key = pair.Name; + var val = pair.Value; if (val != null && val.Length > 0 && IsInvalidString(val)) ThrowValidationException(name, key, val); } @@ -348,7 +349,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp } } } - class WebROCollection : NameValueCollection + class WebROCollection : QueryParamCollection { bool got_id; int id; @@ -369,28 +370,29 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp } public void Protect() { - IsReadOnly = true; + //IsReadOnly = true; } public void Unprotect() { - IsReadOnly = false; + //IsReadOnly = false; } public override string ToString() { StringBuilder result = new StringBuilder(); - foreach (string key in AllKeys) + foreach (var pair in this) { if (result.Length > 0) result.Append('&'); + var key = pair.Name; if (key != null && key.Length > 0) { result.Append(key); result.Append('='); } - result.Append(Get(key)); + result.Append(pair.Value); } return result.ToString(); diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs index 5509eb627..37bd00602 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs @@ -2,8 +2,6 @@ using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations.Logging; -using ServiceStack; -using ServiceStack.Web; using SocketHttpListener.Net; using System; using System.Collections.Generic; @@ -11,6 +9,8 @@ using System.Linq; using System.Threading.Tasks; using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; +using MediaBrowser.Model.Services; +using ServiceStack; namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp { @@ -102,12 +102,19 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp { var endpoint = ctx.Request.RemoteEndPoint.ToString(); var url = ctx.Request.RawUrl; - var queryString = new NameValueCollection(ctx.Request.QueryString ?? new NameValueCollection()); + var queryString = ctx.Request.QueryString ?? new NameValueCollection(); + + var queryParamCollection = new QueryParamCollection(); + + foreach (var key in queryString.AllKeys) + { + queryParamCollection[key] = queryString[key]; + } var connectingArgs = new WebSocketConnectingEventArgs { Url = url, - QueryString = queryString, + QueryString = queryParamCollection, Endpoint = endpoint }; @@ -127,7 +134,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp WebSocketConnected(new WebSocketConnectEventArgs { Url = url, - QueryString = queryString, + QueryString = queryParamCollection, WebSocket = new SharpWebSocket(webSocketContext.WebSocket, _logger), Endpoint = endpoint }); diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs index 59e0b2a9b..2546519f4 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs @@ -1,15 +1,21 @@ using System; using System.Collections.Generic; +using System.Collections.Specialized; using System.IO; using System.Text; using Funq; using MediaBrowser.Common.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Services; using ServiceStack; using ServiceStack.Host; using ServiceStack.Web; using SocketHttpListener.Net; +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 MediaBrowser.Server.Implementations.HttpServer.SocketSharp { @@ -27,8 +33,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp _memoryStreamProvider = memoryStreamProvider; this.request = httpContext.Request; this.response = new WebSocketSharpResponse(logger, httpContext.Response, this); - - this.RequestPreferences = new RequestPreferences(this); } public HttpListenerRequest HttpRequest @@ -53,8 +57,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp public RequestAttributes RequestAttributes { get; set; } - public IRequestPreferences RequestPreferences { get; private set; } - public T TryResolve<T>() { if (typeof(T) == typeof(IHttpRequest)) @@ -324,22 +326,34 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp get { return request.UserAgent; } } - private NameValueCollectionWrapper headers; - public INameValueCollection Headers + private QueryParamCollection headers; + public QueryParamCollection Headers + { + get { return headers ?? (headers = ToQueryParams(request.Headers)); } + } + + private QueryParamCollection queryString; + public QueryParamCollection QueryString { - get { return headers ?? (headers = new NameValueCollectionWrapper(request.Headers)); } + get { return queryString ?? (queryString = MyHttpUtility.ParseQueryString(request.Url.Query)); } } - private NameValueCollectionWrapper queryString; - public INameValueCollection QueryString + private QueryParamCollection formData; + public QueryParamCollection FormData { - get { return queryString ?? (queryString = new NameValueCollectionWrapper(MyHttpUtility.ParseQueryString(request.Url.Query))); } + get { return formData ?? (formData = this.Form); } } - private NameValueCollectionWrapper formData; - public INameValueCollection FormData + private QueryParamCollection ToQueryParams(NameValueCollection collection) { - get { return formData ?? (formData = new NameValueCollectionWrapper(this.Form)); } + var result = new QueryParamCollection(); + + foreach (var key in collection.AllKeys) + { + result[key] = collection[key]; + } + + return result; } public bool IsLocal diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs index a58645ec5..3aae6c9ca 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpResponse.cs @@ -5,20 +5,21 @@ using System.Net; using MediaBrowser.Model.Logging; using ServiceStack; using ServiceStack.Host; -using ServiceStack.Web; using HttpListenerResponse = SocketHttpListener.Net.HttpListenerResponse; +using IHttpResponse = MediaBrowser.Model.Services.IHttpResponse; +using IRequest = MediaBrowser.Model.Services.IRequest; namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp { public class WebSocketSharpResponse : IHttpResponse { private readonly ILogger _logger; - private readonly HttpListenerResponse response; + private readonly HttpListenerResponse _response; public WebSocketSharpResponse(ILogger logger, HttpListenerResponse response, IRequest request) { _logger = logger; - this.response = response; + this._response = response; Items = new Dictionary<string, object>(); Request = request; } @@ -28,28 +29,28 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp public Dictionary<string, object> Items { get; private set; } public object OriginalResponse { - get { return response; } + get { return _response; } } public int StatusCode { - get { return this.response.StatusCode; } - set { this.response.StatusCode = value; } + get { return this._response.StatusCode; } + set { this._response.StatusCode = value; } } public string StatusDescription { - get { return this.response.StatusDescription; } - set { this.response.StatusDescription = value; } + get { return this._response.StatusDescription; } + set { this._response.StatusDescription = value; } } public string ContentType { - get { return response.ContentType; } - set { response.ContentType = value; } + get { return _response.ContentType; } + set { _response.ContentType = value; } } - public ICookies Cookies { get; set; } + //public ICookies Cookies { get; set; } public void AddHeader(string name, string value) { @@ -59,22 +60,22 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp return; } - response.AddHeader(name, value); + _response.AddHeader(name, value); } public string GetHeader(string name) { - return response.Headers[name]; + return _response.Headers[name]; } public void Redirect(string url) { - response.Redirect(url); + _response.Redirect(url); } public Stream OutputStream { - get { return response.OutputStream; } + get { return _response.OutputStream; } } public object Dto { get; set; } @@ -82,9 +83,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp public void Write(string text) { var bOutput = System.Text.Encoding.UTF8.GetBytes(text); - response.ContentLength64 = bOutput.Length; + _response.ContentLength64 = bOutput.Length; - var outputStream = response.OutputStream; + var outputStream = _response.OutputStream; outputStream.Write(bOutput, 0, bOutput.Length); Close(); } @@ -97,7 +98,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp try { - this.response.CloseOutputStream(_logger); + this._response.CloseOutputStream(_logger); } catch (Exception ex) { @@ -113,7 +114,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp public void Flush() { - response.OutputStream.Flush(); + _response.OutputStream.Flush(); } public bool IsClosed @@ -127,19 +128,19 @@ namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp //you can happily set the Content-Length header in Asp.Net //but HttpListener will complain if you do - you have to set ContentLength64 on the response. //workaround: HttpListener throws "The parameter is incorrect" exceptions when we try to set the Content-Length header - response.ContentLength64 = contentLength; + _response.ContentLength64 = contentLength; } public void SetCookie(Cookie cookie) { var cookieStr = cookie.AsHeaderValue(); - response.Headers.Add(HttpHeaders.SetCookie, cookieStr); + _response.Headers.Add(HttpHeaders.SetCookie, cookieStr); } public bool SendChunked { - get { return response.SendChunked; } - set { response.SendChunked = value; } + get { return _response.SendChunked; } + set { _response.SendChunked = value; } } public bool KeepAlive { get; set; } |
