mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-10-30 18:22:48 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			161 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Specialized;
 | |
| using System.IO;
 | |
| using System.Net;
 | |
| using System.Text;
 | |
| using HttpStatusCode = SocketHttpListener.Net.HttpStatusCode;
 | |
| using HttpVersion = SocketHttpListener.Net.HttpVersion;
 | |
| using System.Linq;
 | |
| using MediaBrowser.Model.Services;
 | |
| 
 | |
| namespace SocketHttpListener
 | |
| {
 | |
|     internal class HttpResponse : HttpBase
 | |
|     {
 | |
|         #region Private Fields
 | |
| 
 | |
|         private string _code;
 | |
|         private string _reason;
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Private Constructors
 | |
| 
 | |
|         private HttpResponse(string code, string reason, Version version, QueryParamCollection headers)
 | |
|             : base(version, headers)
 | |
|         {
 | |
|             _code = code;
 | |
|             _reason = reason;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal Constructors
 | |
| 
 | |
|         internal HttpResponse(HttpStatusCode code)
 | |
|             : this(code, code.GetDescription())
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         internal HttpResponse(HttpStatusCode code, string reason)
 | |
|             : this(((int)code).ToString(), reason, HttpVersion.Version11, new QueryParamCollection())
 | |
|         {
 | |
|             Headers["Server"] = "websocket-sharp/1.0";
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Public Properties
 | |
| 
 | |
|         public CookieCollection Cookies
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return Headers.GetCookies(true);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public bool IsProxyAuthenticationRequired
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _code == "407";
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public bool IsUnauthorized
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _code == "401";
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public bool IsWebSocketResponse
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 var headers = Headers;
 | |
|                 return ProtocolVersion > HttpVersion.Version10 &&
 | |
|                        _code == "101" &&
 | |
|                        headers.Contains("Upgrade", "websocket") &&
 | |
|                        headers.Contains("Connection", "Upgrade");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public string Reason
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _reason;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public string StatusCode
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _code;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Internal Methods
 | |
| 
 | |
|         internal static HttpResponse CreateCloseResponse(HttpStatusCode code)
 | |
|         {
 | |
|             var res = new HttpResponse(code);
 | |
|             res.Headers["Connection"] = "close";
 | |
| 
 | |
|             return res;
 | |
|         }
 | |
| 
 | |
|         internal static HttpResponse CreateWebSocketResponse()
 | |
|         {
 | |
|             var res = new HttpResponse(HttpStatusCode.SwitchingProtocols);
 | |
| 
 | |
|             var headers = res.Headers;
 | |
|             headers["Upgrade"] = "websocket";
 | |
|             headers["Connection"] = "Upgrade";
 | |
| 
 | |
|             return res;
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
| 
 | |
|         #region Public Methods
 | |
| 
 | |
|         public void SetCookies(CookieCollection cookies)
 | |
|         {
 | |
|             if (cookies == null || cookies.Count == 0)
 | |
|                 return;
 | |
| 
 | |
|             var headers = Headers;
 | |
|             var sorted = cookies.OfType<Cookie>().OrderBy(i => i.Name).ToList();
 | |
| 
 | |
|             foreach (var cookie in sorted)
 | |
|                 headers.Add("Set-Cookie", cookie.ToString());
 | |
|         }
 | |
| 
 | |
|         public override string ToString()
 | |
|         {
 | |
|             var output = new StringBuilder(64);
 | |
|             output.AppendFormat("HTTP/{0} {1} {2}{3}", ProtocolVersion, _code, _reason, CrLf);
 | |
| 
 | |
|             var headers = Headers;
 | |
|             foreach (var key in headers.Keys)
 | |
|                 output.AppendFormat("{0}: {1}{2}", key, headers[key], CrLf);
 | |
| 
 | |
|             output.Append(CrLf);
 | |
| 
 | |
|             var entity = EntityBody;
 | |
|             if (entity.Length > 0)
 | |
|                 output.Append(entity);
 | |
| 
 | |
|             return output.ToString();
 | |
|         }
 | |
| 
 | |
|         #endregion
 | |
|     }
 | |
| } |