Visual Studio Reformat: SocketHttpListener

This commit is contained in:
Erwin de Haan 2019-01-13 20:27:29 +01:00
parent 9014e16037
commit 8fd0bc63b9
53 changed files with 946 additions and 1042 deletions

View File

@ -1,17 +1,17 @@
namespace SocketHttpListener
{
/// <summary>
/// Contains the values that indicate whether the byte order is a Little-endian or Big-endian.
/// </summary>
public enum ByteOrder : byte
{
/// <summary>
/// Indicates a Little-endian.
/// Contains the values that indicate whether the byte order is a Little-endian or Big-endian.
/// </summary>
Little,
/// <summary>
/// Indicates a Big-endian.
/// </summary>
Big
}
public enum ByteOrder : byte
{
/// <summary>
/// Indicates a Little-endian.
/// </summary>
Little,
/// <summary>
/// Indicates a Big-endian.
/// </summary>
Big
}
}

View File

@ -3,88 +3,95 @@ using System.Text;
namespace SocketHttpListener
{
/// <summary>
/// Contains the event data associated with a <see cref="WebSocket.OnClose"/> event.
/// </summary>
/// <remarks>
/// A <see cref="WebSocket.OnClose"/> event occurs when the WebSocket connection has been closed.
/// If you would like to get the reason for the close, you should access the <see cref="Code"/> or
/// <see cref="Reason"/> property.
/// </remarks>
public class CloseEventArgs : EventArgs
{
#region Private Fields
private bool _clean;
private ushort _code;
private string _reason;
#endregion
#region Internal Constructors
internal CloseEventArgs (PayloadData payload)
/// <summary>
/// Contains the event data associated with a <see cref="WebSocket.OnClose"/> event.
/// </summary>
/// <remarks>
/// A <see cref="WebSocket.OnClose"/> event occurs when the WebSocket connection has been closed.
/// If you would like to get the reason for the close, you should access the <see cref="Code"/> or
/// <see cref="Reason"/> property.
/// </remarks>
public class CloseEventArgs : EventArgs
{
var data = payload.ApplicationData;
var len = data.Length;
_code = len > 1
? data.SubArray (0, 2).ToUInt16 (ByteOrder.Big)
: (ushort) CloseStatusCode.NoStatusCode;
#region Private Fields
_reason = len > 2
? GetUtf8String(data.SubArray (2, len - 2))
: string.Empty;
private bool _clean;
private ushort _code;
private string _reason;
#endregion
#region Internal Constructors
internal CloseEventArgs(PayloadData payload)
{
var data = payload.ApplicationData;
var len = data.Length;
_code = len > 1
? data.SubArray(0, 2).ToUInt16(ByteOrder.Big)
: (ushort)CloseStatusCode.NoStatusCode;
_reason = len > 2
? GetUtf8String(data.SubArray(2, len - 2))
: string.Empty;
}
private static string GetUtf8String(byte[] bytes)
{
return Encoding.UTF8.GetString(bytes, 0, bytes.Length);
}
#endregion
#region Public Properties
/// <summary>
/// Gets the status code for the close.
/// </summary>
/// <value>
/// A <see cref="ushort"/> that represents the status code for the close if any.
/// </value>
public ushort Code
{
get
{
return _code;
}
}
/// <summary>
/// Gets the reason for the close.
/// </summary>
/// <value>
/// A <see cref="string"/> that represents the reason for the close if any.
/// </value>
public string Reason
{
get
{
return _reason;
}
}
/// <summary>
/// Gets a value indicating whether the WebSocket connection has been closed cleanly.
/// </summary>
/// <value>
/// <c>true</c> if the WebSocket connection has been closed cleanly; otherwise, <c>false</c>.
/// </value>
public bool WasClean
{
get
{
return _clean;
}
internal set
{
_clean = value;
}
}
#endregion
}
private static string GetUtf8String(byte[] bytes)
{
return Encoding.UTF8.GetString(bytes, 0, bytes.Length);
}
#endregion
#region Public Properties
/// <summary>
/// Gets the status code for the close.
/// </summary>
/// <value>
/// A <see cref="ushort"/> that represents the status code for the close if any.
/// </value>
public ushort Code {
get {
return _code;
}
}
/// <summary>
/// Gets the reason for the close.
/// </summary>
/// <value>
/// A <see cref="string"/> that represents the reason for the close if any.
/// </value>
public string Reason {
get {
return _reason;
}
}
/// <summary>
/// Gets a value indicating whether the WebSocket connection has been closed cleanly.
/// </summary>
/// <value>
/// <c>true</c> if the WebSocket connection has been closed cleanly; otherwise, <c>false</c>.
/// </value>
public bool WasClean {
get {
return _clean;
}
internal set {
_clean = value;
}
}
#endregion
}
}

View File

@ -1,94 +1,94 @@
namespace SocketHttpListener
{
/// <summary>
/// Contains the values of the status code for the WebSocket connection close.
/// </summary>
/// <remarks>
/// <para>
/// The values of the status code are defined in
/// <see href="http://tools.ietf.org/html/rfc6455#section-7.4">Section 7.4</see>
/// of RFC 6455.
/// </para>
/// <para>
/// "Reserved value" must not be set as a status code in a close control frame
/// by an endpoint. It's designated for use in applications expecting a status
/// code to indicate that the connection was closed due to the system grounds.
/// </para>
/// </remarks>
public enum CloseStatusCode : ushort
{
/// <summary>
/// Equivalent to close status 1000.
/// Indicates a normal close.
/// Contains the values of the status code for the WebSocket connection close.
/// </summary>
Normal = 1000,
/// <summary>
/// Equivalent to close status 1001.
/// Indicates that an endpoint is going away.
/// </summary>
Away = 1001,
/// <summary>
/// Equivalent to close status 1002.
/// Indicates that an endpoint is terminating the connection due to a protocol error.
/// </summary>
ProtocolError = 1002,
/// <summary>
/// Equivalent to close status 1003.
/// Indicates that an endpoint is terminating the connection because it has received
/// an unacceptable type message.
/// </summary>
IncorrectData = 1003,
/// <summary>
/// Equivalent to close status 1004.
/// Still undefined. Reserved value.
/// </summary>
Undefined = 1004,
/// <summary>
/// Equivalent to close status 1005.
/// Indicates that no status code was actually present. Reserved value.
/// </summary>
NoStatusCode = 1005,
/// <summary>
/// Equivalent to close status 1006.
/// Indicates that the connection was closed abnormally. Reserved value.
/// </summary>
Abnormal = 1006,
/// <summary>
/// Equivalent to close status 1007.
/// Indicates that an endpoint is terminating the connection because it has received
/// a message that contains a data that isn't consistent with the type of the message.
/// </summary>
InconsistentData = 1007,
/// <summary>
/// Equivalent to close status 1008.
/// Indicates that an endpoint is terminating the connection because it has received
/// a message that violates its policy.
/// </summary>
PolicyViolation = 1008,
/// <summary>
/// Equivalent to close status 1009.
/// Indicates that an endpoint is terminating the connection because it has received
/// a message that is too big to process.
/// </summary>
TooBig = 1009,
/// <summary>
/// Equivalent to close status 1010.
/// Indicates that the client is terminating the connection because it has expected
/// the server to negotiate one or more extension, but the server didn't return them
/// in the handshake response.
/// </summary>
IgnoreExtension = 1010,
/// <summary>
/// Equivalent to close status 1011.
/// Indicates that the server is terminating the connection because it has encountered
/// an unexpected condition that prevented it from fulfilling the request.
/// </summary>
ServerError = 1011,
/// <summary>
/// Equivalent to close status 1015.
/// Indicates that the connection was closed due to a failure to perform a TLS handshake.
/// Reserved value.
/// </summary>
TlsHandshakeFailure = 1015
}
/// <remarks>
/// <para>
/// The values of the status code are defined in
/// <see href="http://tools.ietf.org/html/rfc6455#section-7.4">Section 7.4</see>
/// of RFC 6455.
/// </para>
/// <para>
/// "Reserved value" must not be set as a status code in a close control frame
/// by an endpoint. It's designated for use in applications expecting a status
/// code to indicate that the connection was closed due to the system grounds.
/// </para>
/// </remarks>
public enum CloseStatusCode : ushort
{
/// <summary>
/// Equivalent to close status 1000.
/// Indicates a normal close.
/// </summary>
Normal = 1000,
/// <summary>
/// Equivalent to close status 1001.
/// Indicates that an endpoint is going away.
/// </summary>
Away = 1001,
/// <summary>
/// Equivalent to close status 1002.
/// Indicates that an endpoint is terminating the connection due to a protocol error.
/// </summary>
ProtocolError = 1002,
/// <summary>
/// Equivalent to close status 1003.
/// Indicates that an endpoint is terminating the connection because it has received
/// an unacceptable type message.
/// </summary>
IncorrectData = 1003,
/// <summary>
/// Equivalent to close status 1004.
/// Still undefined. Reserved value.
/// </summary>
Undefined = 1004,
/// <summary>
/// Equivalent to close status 1005.
/// Indicates that no status code was actually present. Reserved value.
/// </summary>
NoStatusCode = 1005,
/// <summary>
/// Equivalent to close status 1006.
/// Indicates that the connection was closed abnormally. Reserved value.
/// </summary>
Abnormal = 1006,
/// <summary>
/// Equivalent to close status 1007.
/// Indicates that an endpoint is terminating the connection because it has received
/// a message that contains a data that isn't consistent with the type of the message.
/// </summary>
InconsistentData = 1007,
/// <summary>
/// Equivalent to close status 1008.
/// Indicates that an endpoint is terminating the connection because it has received
/// a message that violates its policy.
/// </summary>
PolicyViolation = 1008,
/// <summary>
/// Equivalent to close status 1009.
/// Indicates that an endpoint is terminating the connection because it has received
/// a message that is too big to process.
/// </summary>
TooBig = 1009,
/// <summary>
/// Equivalent to close status 1010.
/// Indicates that the client is terminating the connection because it has expected
/// the server to negotiate one or more extension, but the server didn't return them
/// in the handshake response.
/// </summary>
IgnoreExtension = 1010,
/// <summary>
/// Equivalent to close status 1011.
/// Indicates that the server is terminating the connection because it has encountered
/// an unexpected condition that prevented it from fulfilling the request.
/// </summary>
ServerError = 1011,
/// <summary>
/// Equivalent to close status 1015.
/// Indicates that the connection was closed due to a failure to perform a TLS handshake.
/// Reserved value.
/// </summary>
TlsHandshakeFailure = 1015
}
}

View File

@ -1,23 +1,23 @@
namespace SocketHttpListener
{
/// <summary>
/// Contains the values of the compression method used to compress the message on the WebSocket
/// connection.
/// </summary>
/// <remarks>
/// The values of the compression method are defined in
/// <see href="http://tools.ietf.org/html/draft-ietf-hybi-permessage-compression-09">Compression
/// Extensions for WebSocket</see>.
/// </remarks>
public enum CompressionMethod : byte
{
/// <summary>
/// Indicates non compression.
/// Contains the values of the compression method used to compress the message on the WebSocket
/// connection.
/// </summary>
None,
/// <summary>
/// Indicates using DEFLATE.
/// </summary>
Deflate
}
/// <remarks>
/// The values of the compression method are defined in
/// <see href="http://tools.ietf.org/html/draft-ietf-hybi-permessage-compression-09">Compression
/// Extensions for WebSocket</see>.
/// </remarks>
public enum CompressionMethod : byte
{
/// <summary>
/// Indicates non compression.
/// </summary>
None,
/// <summary>
/// Indicates using DEFLATE.
/// </summary>
Deflate
}
}

View File

@ -2,45 +2,47 @@ using System;
namespace SocketHttpListener
{
/// <summary>
/// Contains the event data associated with a <see cref="WebSocket.OnError"/> event.
/// </summary>
/// <remarks>
/// A <see cref="WebSocket.OnError"/> event occurs when the <see cref="WebSocket"/> gets an error.
/// If you would like to get the error message, you should access the <see cref="Message"/>
/// property.
/// </remarks>
public class ErrorEventArgs : EventArgs
{
#region Private Fields
private string _message;
#endregion
#region Internal Constructors
internal ErrorEventArgs (string message)
{
_message = message;
}
#endregion
#region Public Properties
/// <summary>
/// Gets the error message.
/// Contains the event data associated with a <see cref="WebSocket.OnError"/> event.
/// </summary>
/// <value>
/// A <see cref="string"/> that represents the error message.
/// </value>
public string Message {
get {
return _message;
}
}
/// <remarks>
/// A <see cref="WebSocket.OnError"/> event occurs when the <see cref="WebSocket"/> gets an error.
/// If you would like to get the error message, you should access the <see cref="Message"/>
/// property.
/// </remarks>
public class ErrorEventArgs : EventArgs
{
#region Private Fields
#endregion
}
private string _message;
#endregion
#region Internal Constructors
internal ErrorEventArgs(string message)
{
_message = message;
}
#endregion
#region Public Properties
/// <summary>
/// Gets the error message.
/// </summary>
/// <value>
/// A <see cref="string"/> that represents the error message.
/// </value>
public string Message
{
get
{
return _message;
}
}
#endregion
}
}

View File

@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.IO.Compression;
using System.Net;
@ -441,7 +440,8 @@ namespace SocketHttpListener
continue;
}
}
else {
else
{
}
buffer.Append(c);

View File

@ -1,8 +1,8 @@
namespace SocketHttpListener
{
internal enum Fin : byte
{
More = 0x0,
Final = 0x1
}
internal enum Fin : byte
{
More = 0x0,
Final = 0x1
}
}

View File

@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Text;
using System.Threading;
using MediaBrowser.Model.Services;
namespace SocketHttpListener

View File

@ -1,13 +1,11 @@
using System;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using HttpStatusCode = SocketHttpListener.Net.HttpStatusCode;
using HttpVersion = SocketHttpListener.Net.HttpVersion;
using System.Linq;
using MediaBrowser.Model.Services;
using SocketHttpListener.Net;
using HttpStatusCode = SocketHttpListener.Net.HttpStatusCode;
using HttpVersion = SocketHttpListener.Net.HttpVersion;
namespace SocketHttpListener
{

View File

@ -1,8 +1,8 @@
namespace SocketHttpListener
{
internal enum Mask : byte
{
Unmask = 0x0,
Mask = 0x1
}
internal enum Mask : byte
{
Unmask = 0x0,
Mask = 0x1
}
}

View File

@ -3,94 +3,100 @@ using System.Text;
namespace SocketHttpListener
{
/// <summary>
/// Contains the event data associated with a <see cref="WebSocket.OnMessage"/> event.
/// </summary>
/// <remarks>
/// A <see cref="WebSocket.OnMessage"/> event occurs when the <see cref="WebSocket"/> receives
/// a text or binary data frame.
/// If you want to get the received data, you access the <see cref="MessageEventArgs.Data"/> or
/// <see cref="MessageEventArgs.RawData"/> property.
/// </remarks>
public class MessageEventArgs : EventArgs
{
#region Private Fields
private string _data;
private Opcode _opcode;
private byte[] _rawData;
#endregion
#region Internal Constructors
internal MessageEventArgs (Opcode opcode, byte[] data)
{
_opcode = opcode;
_rawData = data;
_data = convertToString (opcode, data);
}
internal MessageEventArgs (Opcode opcode, PayloadData payload)
{
_opcode = opcode;
_rawData = payload.ApplicationData;
_data = convertToString (opcode, _rawData);
}
#endregion
#region Public Properties
/// <summary>
/// Gets the received data as a <see cref="string"/>.
/// Contains the event data associated with a <see cref="WebSocket.OnMessage"/> event.
/// </summary>
/// <value>
/// A <see cref="string"/> that contains the received data.
/// </value>
public string Data {
get {
return _data;
}
}
/// <summary>
/// Gets the received data as an array of <see cref="byte"/>.
/// </summary>
/// <value>
/// An array of <see cref="byte"/> that contains the received data.
/// </value>
public byte [] RawData {
get {
return _rawData;
}
}
/// <summary>
/// Gets the type of the received data.
/// </summary>
/// <value>
/// One of the <see cref="Opcode"/> values, indicates the type of the received data.
/// </value>
public Opcode Type {
get {
return _opcode;
}
}
#endregion
#region Private Methods
private static string convertToString (Opcode opcode, byte [] data)
/// <remarks>
/// A <see cref="WebSocket.OnMessage"/> event occurs when the <see cref="WebSocket"/> receives
/// a text or binary data frame.
/// If you want to get the received data, you access the <see cref="MessageEventArgs.Data"/> or
/// <see cref="MessageEventArgs.RawData"/> property.
/// </remarks>
public class MessageEventArgs : EventArgs
{
return data.Length == 0
? string.Empty
: opcode == Opcode.Text
? Encoding.UTF8.GetString (data, 0, data.Length)
: opcode.ToString ();
}
#region Private Fields
#endregion
}
private string _data;
private Opcode _opcode;
private byte[] _rawData;
#endregion
#region Internal Constructors
internal MessageEventArgs(Opcode opcode, byte[] data)
{
_opcode = opcode;
_rawData = data;
_data = convertToString(opcode, data);
}
internal MessageEventArgs(Opcode opcode, PayloadData payload)
{
_opcode = opcode;
_rawData = payload.ApplicationData;
_data = convertToString(opcode, _rawData);
}
#endregion
#region Public Properties
/// <summary>
/// Gets the received data as a <see cref="string"/>.
/// </summary>
/// <value>
/// A <see cref="string"/> that contains the received data.
/// </value>
public string Data
{
get
{
return _data;
}
}
/// <summary>
/// Gets the received data as an array of <see cref="byte"/>.
/// </summary>
/// <value>
/// An array of <see cref="byte"/> that contains the received data.
/// </value>
public byte[] RawData
{
get
{
return _rawData;
}
}
/// <summary>
/// Gets the type of the received data.
/// </summary>
/// <value>
/// One of the <see cref="Opcode"/> values, indicates the type of the received data.
/// </value>
public Opcode Type
{
get
{
return _opcode;
}
}
#endregion
#region Private Methods
private static string convertToString(Opcode opcode, byte[] data)
{
return data.Length == 0
? string.Empty
: opcode == Opcode.Text
? Encoding.UTF8.GetString(data, 0, data.Length)
: opcode.ToString();
}
#endregion
}
}

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SocketHttpListener.Net
namespace SocketHttpListener.Net
{
internal class AuthenticationTypes
{

View File

@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace SocketHttpListener.Net
namespace SocketHttpListener.Net
{
internal enum BoundaryType
{

View File

@ -1,5 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;

View File

@ -1,8 +1,6 @@
using System;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using SocketHttpListener.Primitives;
namespace SocketHttpListener.Net
{

View File

@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Globalization;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace SocketHttpListener.Net
{

View File

@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace SocketHttpListener.Net
namespace SocketHttpListener.Net
{
internal enum EntitySendFormat
{

View File

@ -3,19 +3,17 @@ using System.IO;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.IO;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Text;
using Microsoft.Extensions.Logging;
using SocketHttpListener.Primitives;
using System.Security.Authentication;
using System.Threading;
namespace SocketHttpListener.Net
{
sealed class HttpConnection

View File

@ -1,21 +1,15 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.IO;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Text;
using SocketHttpListener.Primitives;
using ProtocolType = MediaBrowser.Model.Net.ProtocolType;
using SocketType = MediaBrowser.Model.Net.SocketType;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
namespace SocketHttpListener.Net
{
@ -209,7 +203,7 @@ namespace SocketHttpListener.Net
return;
}
if(accepted == null)
if (accepted == null)
{
return;
}

View File

@ -3,12 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Threading.Tasks;
using MediaBrowser.Model.IO;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Net;
using SocketHttpListener.Primitives;
namespace SocketHttpListener.Net
{

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SocketHttpListener.Net
namespace SocketHttpListener.Net
{
internal static partial class HttpKnownHeaderNames
{

View File

@ -1,17 +1,15 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using MediaBrowser.Common.Net;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.IO;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Text;
using SocketHttpListener.Primitives;
using Microsoft.Extensions.Logging;
namespace SocketHttpListener.Net
{

View File

@ -1,8 +1,8 @@
using System.ComponentModel;
using System;
using System.ComponentModel;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
using System;
using MediaBrowser.Model.Text;
using SocketHttpListener.Net.WebSockets;

View File

@ -1,12 +1,8 @@
using System;
using System.Net;
using System.Security.Principal;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.IO;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.Text;
using SocketHttpListener.Net.WebSockets;
using System.Threading.Tasks;
using SocketHttpListener.Net.WebSockets;
namespace SocketHttpListener.Net
{

View File

@ -1,12 +1,7 @@
using System;
using System.Text;
using System.Collections.Specialized;
using System.Globalization;
using System.IO;
using System.Security.Authentication.ExtendedProtection;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using MediaBrowser.Model.Services;
using MediaBrowser.Model.Text;
namespace SocketHttpListener.Net
{

View File

@ -1,17 +1,11 @@
using System;
using System.Collections.Specialized;
using System.Globalization;
using System.IO;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Services;
using MediaBrowser.Model.Text;
using SocketHttpListener.Primitives;
using System.Collections.Generic;
using System.Globalization;
using System.Net;
using System.Text;
using MediaBrowser.Model.Services;
using SocketHttpListener.Net.WebSockets;
using SocketHttpListener.Primitives;
namespace SocketHttpListener.Net
{

View File

@ -1,8 +1,8 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Globalization;
using System.Text;
namespace SocketHttpListener.Net
{

View File

@ -1,14 +1,13 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Text;
using SocketHttpListener.Primitives;
using System.Threading;
using MediaBrowser.Model.IO;
namespace SocketHttpListener.Net
{

View File

@ -1,14 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Diagnostics;
using Microsoft.Win32.SafeHandles;
namespace SocketHttpListener.Net
{

View File

@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.ExceptionServices;
using System.Text;
using System.Threading.Tasks;
namespace SocketHttpListener.Net
{

View File

@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

View File

@ -1,15 +1,13 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.ExceptionServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.IO;
using Microsoft.Extensions.Logging;
using MediaBrowser.Model.System;
using Microsoft.Extensions.Logging;
namespace SocketHttpListener.Net
{

View File

@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

View File

@ -1,321 +1,321 @@
namespace SocketHttpListener.Net
{
/// <summary>
/// Contains the values of the HTTP status codes.
/// </summary>
/// <remarks>
/// The HttpStatusCode enumeration contains the values of the HTTP status codes defined in
/// <see href="http://tools.ietf.org/html/rfc2616#section-10">RFC 2616</see> for HTTP 1.1.
/// </remarks>
public enum HttpStatusCode
{
/// <summary>
/// Equivalent to status code 100.
/// Indicates that the client should continue with its request.
/// Contains the values of the HTTP status codes.
/// </summary>
Continue = 100,
/// <summary>
/// Equivalent to status code 101.
/// Indicates that the server is switching the HTTP version or protocol on the connection.
/// </summary>
SwitchingProtocols = 101,
/// <summary>
/// Equivalent to status code 200.
/// Indicates that the client's request has succeeded.
/// </summary>
OK = 200,
/// <summary>
/// Equivalent to status code 201.
/// Indicates that the client's request has been fulfilled and resulted in a new resource being
/// created.
/// </summary>
Created = 201,
/// <summary>
/// Equivalent to status code 202.
/// Indicates that the client's request has been accepted for processing, but the processing
/// hasn't been completed.
/// </summary>
Accepted = 202,
/// <summary>
/// Equivalent to status code 203.
/// Indicates that the returned metainformation is from a local or a third-party copy instead of
/// the origin server.
/// </summary>
NonAuthoritativeInformation = 203,
/// <summary>
/// Equivalent to status code 204.
/// Indicates that the server has fulfilled the client's request but doesn't need to return
/// an entity-body.
/// </summary>
NoContent = 204,
/// <summary>
/// Equivalent to status code 205.
/// Indicates that the server has fulfilled the client's request, and the user agent should
/// reset the document view which caused the request to be sent.
/// </summary>
ResetContent = 205,
/// <summary>
/// Equivalent to status code 206.
/// Indicates that the server has fulfilled the partial GET request for the resource.
/// </summary>
PartialContent = 206,
/// <summary>
/// <para>
/// Equivalent to status code 300.
/// Indicates that the requested resource corresponds to any of multiple representations.
/// </para>
/// <para>
/// MultipleChoices is a synonym for Ambiguous.
/// </para>
/// </summary>
MultipleChoices = 300,
/// <summary>
/// <para>
/// Equivalent to status code 300.
/// Indicates that the requested resource corresponds to any of multiple representations.
/// </para>
/// <para>
/// Ambiguous is a synonym for MultipleChoices.
/// </para>
/// </summary>
Ambiguous = 300,
/// <summary>
/// <para>
/// Equivalent to status code 301.
/// Indicates that the requested resource has been assigned a new permanent URI and
/// any future references to this resource should use one of the returned URIs.
/// </para>
/// <para>
/// MovedPermanently is a synonym for Moved.
/// </para>
/// </summary>
MovedPermanently = 301,
/// <summary>
/// <para>
/// Equivalent to status code 301.
/// Indicates that the requested resource has been assigned a new permanent URI and
/// any future references to this resource should use one of the returned URIs.
/// </para>
/// <para>
/// Moved is a synonym for MovedPermanently.
/// </para>
/// </summary>
Moved = 301,
/// <summary>
/// <para>
/// Equivalent to status code 302.
/// Indicates that the requested resource is located temporarily under a different URI.
/// </para>
/// <para>
/// Found is a synonym for Redirect.
/// </para>
/// </summary>
Found = 302,
/// <summary>
/// <para>
/// Equivalent to status code 302.
/// Indicates that the requested resource is located temporarily under a different URI.
/// </para>
/// <para>
/// Redirect is a synonym for Found.
/// </para>
/// </summary>
Redirect = 302,
/// <summary>
/// <para>
/// Equivalent to status code 303.
/// Indicates that the response to the request can be found under a different URI and
/// should be retrieved using a GET method on that resource.
/// </para>
/// <para>
/// SeeOther is a synonym for RedirectMethod.
/// </para>
/// </summary>
SeeOther = 303,
/// <summary>
/// <para>
/// Equivalent to status code 303.
/// Indicates that the response to the request can be found under a different URI and
/// should be retrieved using a GET method on that resource.
/// </para>
/// <para>
/// RedirectMethod is a synonym for SeeOther.
/// </para>
/// </summary>
RedirectMethod = 303,
/// <summary>
/// Equivalent to status code 304.
/// Indicates that the client has performed a conditional GET request and access is allowed,
/// but the document hasn't been modified.
/// </summary>
NotModified = 304,
/// <summary>
/// Equivalent to status code 305.
/// Indicates that the requested resource must be accessed through the proxy given by
/// the Location field.
/// </summary>
UseProxy = 305,
/// <summary>
/// Equivalent to status code 306.
/// This status code was used in a previous version of the specification, is no longer used,
/// and is reserved for future use.
/// </summary>
Unused = 306,
/// <summary>
/// <para>
/// Equivalent to status code 307.
/// Indicates that the requested resource is located temporarily under a different URI.
/// </para>
/// <para>
/// TemporaryRedirect is a synonym for RedirectKeepVerb.
/// </para>
/// </summary>
TemporaryRedirect = 307,
/// <summary>
/// <para>
/// Equivalent to status code 307.
/// Indicates that the requested resource is located temporarily under a different URI.
/// </para>
/// <para>
/// RedirectKeepVerb is a synonym for TemporaryRedirect.
/// </para>
/// </summary>
RedirectKeepVerb = 307,
/// <summary>
/// Equivalent to status code 400.
/// Indicates that the client's request couldn't be understood by the server due to
/// malformed syntax.
/// </summary>
BadRequest = 400,
/// <summary>
/// Equivalent to status code 401.
/// Indicates that the client's request requires user authentication.
/// </summary>
Unauthorized = 401,
/// <summary>
/// Equivalent to status code 402.
/// This status code is reserved for future use.
/// </summary>
PaymentRequired = 402,
/// <summary>
/// Equivalent to status code 403.
/// Indicates that the server understood the client's request but is refusing to fulfill it.
/// </summary>
Forbidden = 403,
/// <summary>
/// Equivalent to status code 404.
/// Indicates that the server hasn't found anything matching the request URI.
/// </summary>
NotFound = 404,
/// <summary>
/// Equivalent to status code 405.
/// Indicates that the method specified in the request line isn't allowed for the resource
/// identified by the request URI.
/// </summary>
MethodNotAllowed = 405,
/// <summary>
/// Equivalent to status code 406.
/// Indicates that the server doesn't have the appropriate resource to respond to the Accept
/// headers in the client's request.
/// </summary>
NotAcceptable = 406,
/// <summary>
/// Equivalent to status code 407.
/// Indicates that the client must first authenticate itself with the proxy.
/// </summary>
ProxyAuthenticationRequired = 407,
/// <summary>
/// Equivalent to status code 408.
/// Indicates that the client didn't produce a request within the time that the server was
/// prepared to wait.
/// </summary>
RequestTimeout = 408,
/// <summary>
/// Equivalent to status code 409.
/// Indicates that the client's request couldn't be completed due to a conflict on the server.
/// </summary>
Conflict = 409,
/// <summary>
/// Equivalent to status code 410.
/// Indicates that the requested resource is no longer available at the server and
/// no forwarding address is known.
/// </summary>
Gone = 410,
/// <summary>
/// Equivalent to status code 411.
/// Indicates that the server refuses to accept the client's request without a defined
/// Content-Length.
/// </summary>
LengthRequired = 411,
/// <summary>
/// Equivalent to status code 412.
/// Indicates that the precondition given in one or more of the request headers evaluated to
/// false when it was tested on the server.
/// </summary>
PreconditionFailed = 412,
/// <summary>
/// Equivalent to status code 413.
/// Indicates that the entity of the client's request is larger than the server is willing or
/// able to process.
/// </summary>
RequestEntityTooLarge = 413,
/// <summary>
/// Equivalent to status code 414.
/// Indicates that the request URI is longer than the server is willing to interpret.
/// </summary>
RequestUriTooLong = 414,
/// <summary>
/// Equivalent to status code 415.
/// Indicates that the entity of the client's request is in a format not supported by
/// the requested resource for the requested method.
/// </summary>
UnsupportedMediaType = 415,
/// <summary>
/// Equivalent to status code 416.
/// Indicates that none of the range specifier values in a Range request header overlap
/// the current extent of the selected resource.
/// </summary>
RequestedRangeNotSatisfiable = 416,
/// <summary>
/// Equivalent to status code 417.
/// Indicates that the expectation given in an Expect request header couldn't be met by
/// the server.
/// </summary>
ExpectationFailed = 417,
/// <summary>
/// Equivalent to status code 500.
/// Indicates that the server encountered an unexpected condition which prevented it from
/// fulfilling the client's request.
/// </summary>
InternalServerError = 500,
/// <summary>
/// Equivalent to status code 501.
/// Indicates that the server doesn't support the functionality required to fulfill the client's
/// request.
/// </summary>
NotImplemented = 501,
/// <summary>
/// Equivalent to status code 502.
/// Indicates that a gateway or proxy server received an invalid response from the upstream
/// server.
/// </summary>
BadGateway = 502,
/// <summary>
/// Equivalent to status code 503.
/// Indicates that the server is currently unable to handle the client's request due to
/// a temporary overloading or maintenance of the server.
/// </summary>
ServiceUnavailable = 503,
/// <summary>
/// Equivalent to status code 504.
/// Indicates that a gateway or proxy server didn't receive a timely response from the upstream
/// server or some other auxiliary server.
/// </summary>
GatewayTimeout = 504,
/// <summary>
/// Equivalent to status code 505.
/// Indicates that the server doesn't support the HTTP version used in the client's request.
/// </summary>
HttpVersionNotSupported = 505,
}
/// <remarks>
/// The HttpStatusCode enumeration contains the values of the HTTP status codes defined in
/// <see href="http://tools.ietf.org/html/rfc2616#section-10">RFC 2616</see> for HTTP 1.1.
/// </remarks>
public enum HttpStatusCode
{
/// <summary>
/// Equivalent to status code 100.
/// Indicates that the client should continue with its request.
/// </summary>
Continue = 100,
/// <summary>
/// Equivalent to status code 101.
/// Indicates that the server is switching the HTTP version or protocol on the connection.
/// </summary>
SwitchingProtocols = 101,
/// <summary>
/// Equivalent to status code 200.
/// Indicates that the client's request has succeeded.
/// </summary>
OK = 200,
/// <summary>
/// Equivalent to status code 201.
/// Indicates that the client's request has been fulfilled and resulted in a new resource being
/// created.
/// </summary>
Created = 201,
/// <summary>
/// Equivalent to status code 202.
/// Indicates that the client's request has been accepted for processing, but the processing
/// hasn't been completed.
/// </summary>
Accepted = 202,
/// <summary>
/// Equivalent to status code 203.
/// Indicates that the returned metainformation is from a local or a third-party copy instead of
/// the origin server.
/// </summary>
NonAuthoritativeInformation = 203,
/// <summary>
/// Equivalent to status code 204.
/// Indicates that the server has fulfilled the client's request but doesn't need to return
/// an entity-body.
/// </summary>
NoContent = 204,
/// <summary>
/// Equivalent to status code 205.
/// Indicates that the server has fulfilled the client's request, and the user agent should
/// reset the document view which caused the request to be sent.
/// </summary>
ResetContent = 205,
/// <summary>
/// Equivalent to status code 206.
/// Indicates that the server has fulfilled the partial GET request for the resource.
/// </summary>
PartialContent = 206,
/// <summary>
/// <para>
/// Equivalent to status code 300.
/// Indicates that the requested resource corresponds to any of multiple representations.
/// </para>
/// <para>
/// MultipleChoices is a synonym for Ambiguous.
/// </para>
/// </summary>
MultipleChoices = 300,
/// <summary>
/// <para>
/// Equivalent to status code 300.
/// Indicates that the requested resource corresponds to any of multiple representations.
/// </para>
/// <para>
/// Ambiguous is a synonym for MultipleChoices.
/// </para>
/// </summary>
Ambiguous = 300,
/// <summary>
/// <para>
/// Equivalent to status code 301.
/// Indicates that the requested resource has been assigned a new permanent URI and
/// any future references to this resource should use one of the returned URIs.
/// </para>
/// <para>
/// MovedPermanently is a synonym for Moved.
/// </para>
/// </summary>
MovedPermanently = 301,
/// <summary>
/// <para>
/// Equivalent to status code 301.
/// Indicates that the requested resource has been assigned a new permanent URI and
/// any future references to this resource should use one of the returned URIs.
/// </para>
/// <para>
/// Moved is a synonym for MovedPermanently.
/// </para>
/// </summary>
Moved = 301,
/// <summary>
/// <para>
/// Equivalent to status code 302.
/// Indicates that the requested resource is located temporarily under a different URI.
/// </para>
/// <para>
/// Found is a synonym for Redirect.
/// </para>
/// </summary>
Found = 302,
/// <summary>
/// <para>
/// Equivalent to status code 302.
/// Indicates that the requested resource is located temporarily under a different URI.
/// </para>
/// <para>
/// Redirect is a synonym for Found.
/// </para>
/// </summary>
Redirect = 302,
/// <summary>
/// <para>
/// Equivalent to status code 303.
/// Indicates that the response to the request can be found under a different URI and
/// should be retrieved using a GET method on that resource.
/// </para>
/// <para>
/// SeeOther is a synonym for RedirectMethod.
/// </para>
/// </summary>
SeeOther = 303,
/// <summary>
/// <para>
/// Equivalent to status code 303.
/// Indicates that the response to the request can be found under a different URI and
/// should be retrieved using a GET method on that resource.
/// </para>
/// <para>
/// RedirectMethod is a synonym for SeeOther.
/// </para>
/// </summary>
RedirectMethod = 303,
/// <summary>
/// Equivalent to status code 304.
/// Indicates that the client has performed a conditional GET request and access is allowed,
/// but the document hasn't been modified.
/// </summary>
NotModified = 304,
/// <summary>
/// Equivalent to status code 305.
/// Indicates that the requested resource must be accessed through the proxy given by
/// the Location field.
/// </summary>
UseProxy = 305,
/// <summary>
/// Equivalent to status code 306.
/// This status code was used in a previous version of the specification, is no longer used,
/// and is reserved for future use.
/// </summary>
Unused = 306,
/// <summary>
/// <para>
/// Equivalent to status code 307.
/// Indicates that the requested resource is located temporarily under a different URI.
/// </para>
/// <para>
/// TemporaryRedirect is a synonym for RedirectKeepVerb.
/// </para>
/// </summary>
TemporaryRedirect = 307,
/// <summary>
/// <para>
/// Equivalent to status code 307.
/// Indicates that the requested resource is located temporarily under a different URI.
/// </para>
/// <para>
/// RedirectKeepVerb is a synonym for TemporaryRedirect.
/// </para>
/// </summary>
RedirectKeepVerb = 307,
/// <summary>
/// Equivalent to status code 400.
/// Indicates that the client's request couldn't be understood by the server due to
/// malformed syntax.
/// </summary>
BadRequest = 400,
/// <summary>
/// Equivalent to status code 401.
/// Indicates that the client's request requires user authentication.
/// </summary>
Unauthorized = 401,
/// <summary>
/// Equivalent to status code 402.
/// This status code is reserved for future use.
/// </summary>
PaymentRequired = 402,
/// <summary>
/// Equivalent to status code 403.
/// Indicates that the server understood the client's request but is refusing to fulfill it.
/// </summary>
Forbidden = 403,
/// <summary>
/// Equivalent to status code 404.
/// Indicates that the server hasn't found anything matching the request URI.
/// </summary>
NotFound = 404,
/// <summary>
/// Equivalent to status code 405.
/// Indicates that the method specified in the request line isn't allowed for the resource
/// identified by the request URI.
/// </summary>
MethodNotAllowed = 405,
/// <summary>
/// Equivalent to status code 406.
/// Indicates that the server doesn't have the appropriate resource to respond to the Accept
/// headers in the client's request.
/// </summary>
NotAcceptable = 406,
/// <summary>
/// Equivalent to status code 407.
/// Indicates that the client must first authenticate itself with the proxy.
/// </summary>
ProxyAuthenticationRequired = 407,
/// <summary>
/// Equivalent to status code 408.
/// Indicates that the client didn't produce a request within the time that the server was
/// prepared to wait.
/// </summary>
RequestTimeout = 408,
/// <summary>
/// Equivalent to status code 409.
/// Indicates that the client's request couldn't be completed due to a conflict on the server.
/// </summary>
Conflict = 409,
/// <summary>
/// Equivalent to status code 410.
/// Indicates that the requested resource is no longer available at the server and
/// no forwarding address is known.
/// </summary>
Gone = 410,
/// <summary>
/// Equivalent to status code 411.
/// Indicates that the server refuses to accept the client's request without a defined
/// Content-Length.
/// </summary>
LengthRequired = 411,
/// <summary>
/// Equivalent to status code 412.
/// Indicates that the precondition given in one or more of the request headers evaluated to
/// false when it was tested on the server.
/// </summary>
PreconditionFailed = 412,
/// <summary>
/// Equivalent to status code 413.
/// Indicates that the entity of the client's request is larger than the server is willing or
/// able to process.
/// </summary>
RequestEntityTooLarge = 413,
/// <summary>
/// Equivalent to status code 414.
/// Indicates that the request URI is longer than the server is willing to interpret.
/// </summary>
RequestUriTooLong = 414,
/// <summary>
/// Equivalent to status code 415.
/// Indicates that the entity of the client's request is in a format not supported by
/// the requested resource for the requested method.
/// </summary>
UnsupportedMediaType = 415,
/// <summary>
/// Equivalent to status code 416.
/// Indicates that none of the range specifier values in a Range request header overlap
/// the current extent of the selected resource.
/// </summary>
RequestedRangeNotSatisfiable = 416,
/// <summary>
/// Equivalent to status code 417.
/// Indicates that the expectation given in an Expect request header couldn't be met by
/// the server.
/// </summary>
ExpectationFailed = 417,
/// <summary>
/// Equivalent to status code 500.
/// Indicates that the server encountered an unexpected condition which prevented it from
/// fulfilling the client's request.
/// </summary>
InternalServerError = 500,
/// <summary>
/// Equivalent to status code 501.
/// Indicates that the server doesn't support the functionality required to fulfill the client's
/// request.
/// </summary>
NotImplemented = 501,
/// <summary>
/// Equivalent to status code 502.
/// Indicates that a gateway or proxy server received an invalid response from the upstream
/// server.
/// </summary>
BadGateway = 502,
/// <summary>
/// Equivalent to status code 503.
/// Indicates that the server is currently unable to handle the client's request due to
/// a temporary overloading or maintenance of the server.
/// </summary>
ServiceUnavailable = 503,
/// <summary>
/// Equivalent to status code 504.
/// Indicates that a gateway or proxy server didn't receive a timely response from the upstream
/// server or some other auxiliary server.
/// </summary>
GatewayTimeout = 504,
/// <summary>
/// Equivalent to status code 505.
/// Indicates that the server doesn't support the HTTP version used in the client's request.
/// </summary>
HttpVersionNotSupported = 505,
}
}

View File

@ -1,9 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace SocketHttpListener.Net
namespace SocketHttpListener.Net
{
internal static class HttpStatusDescription
{

View File

@ -1,6 +1,5 @@
using System;
using System.Net;
using MediaBrowser.Model.Net;
namespace SocketHttpListener.Net
{

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SocketHttpListener.Net
namespace SocketHttpListener.Net
{
internal static class UriScheme
{

View File

@ -1,13 +1,8 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Text;
using MediaBrowser.Model.Services;
using MediaBrowser.Model.Extensions;
namespace SocketHttpListener.Net
{

View File

@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Text;
namespace SocketHttpListener.Net
{

View File

@ -1,14 +1,8 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Net;
using System.Security.Principal;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Services;
using SocketHttpListener.Primitives;
namespace SocketHttpListener.Net.WebSockets
{

View File

@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace SocketHttpListener.Net.WebSockets

View File

@ -1,8 +1,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics.CodeAnalysis;
using System.Security.Cryptography;
using System.Text;
using System.Threading;
namespace SocketHttpListener.Net.WebSockets

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SocketHttpListener.Net.WebSockets
namespace SocketHttpListener.Net.WebSockets
{
public enum WebSocketCloseStatus
{

View File

@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Net;
using System.Security.Principal;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Services;
namespace SocketHttpListener.Net.WebSockets

View File

@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using MediaBrowser.Model.Net;
using System.Globalization;
using System.Text;
using WebSocketState = System.Net.WebSockets.WebSocketState;
namespace SocketHttpListener.Net.WebSockets

View File

@ -1,43 +1,43 @@
namespace SocketHttpListener
{
/// <summary>
/// Contains the values of the opcode that indicates the type of a WebSocket frame.
/// </summary>
/// <remarks>
/// The values of the opcode are defined in
/// <see href="http://tools.ietf.org/html/rfc6455#section-5.2">Section 5.2</see> of RFC 6455.
/// </remarks>
public enum Opcode : byte
{
/// <summary>
/// Equivalent to numeric value 0.
/// Indicates a continuation frame.
/// Contains the values of the opcode that indicates the type of a WebSocket frame.
/// </summary>
Cont = 0x0,
/// <summary>
/// Equivalent to numeric value 1.
/// Indicates a text frame.
/// </summary>
Text = 0x1,
/// <summary>
/// Equivalent to numeric value 2.
/// Indicates a binary frame.
/// </summary>
Binary = 0x2,
/// <summary>
/// Equivalent to numeric value 8.
/// Indicates a connection close frame.
/// </summary>
Close = 0x8,
/// <summary>
/// Equivalent to numeric value 9.
/// Indicates a ping frame.
/// </summary>
Ping = 0x9,
/// <summary>
/// Equivalent to numeric value 10.
/// Indicates a pong frame.
/// </summary>
Pong = 0xa
}
/// <remarks>
/// The values of the opcode are defined in
/// <see href="http://tools.ietf.org/html/rfc6455#section-5.2">Section 5.2</see> of RFC 6455.
/// </remarks>
public enum Opcode : byte
{
/// <summary>
/// Equivalent to numeric value 0.
/// Indicates a continuation frame.
/// </summary>
Cont = 0x0,
/// <summary>
/// Equivalent to numeric value 1.
/// Indicates a text frame.
/// </summary>
Text = 0x1,
/// <summary>
/// Equivalent to numeric value 2.
/// Indicates a binary frame.
/// </summary>
Binary = 0x2,
/// <summary>
/// Equivalent to numeric value 8.
/// Indicates a connection close frame.
/// </summary>
Close = 0x8,
/// <summary>
/// Equivalent to numeric value 9.
/// Indicates a ping frame.
/// </summary>
Ping = 0x9,
/// <summary>
/// Equivalent to numeric value 10.
/// Indicates a pong frame.
/// </summary>
Pong = 0xa
}
}

View File

@ -5,145 +5,155 @@ using System.Text;
namespace SocketHttpListener
{
internal class PayloadData : IEnumerable<byte>
{
#region Private Fields
private byte [] _applicationData;
private byte [] _extensionData;
private bool _masked;
#endregion
#region Public Const Fields
public const ulong MaxLength = long.MaxValue;
#endregion
#region Public Constructors
public PayloadData ()
: this (new byte [0], new byte [0], false)
internal class PayloadData : IEnumerable<byte>
{
#region Private Fields
private byte[] _applicationData;
private byte[] _extensionData;
private bool _masked;
#endregion
#region Public Const Fields
public const ulong MaxLength = long.MaxValue;
#endregion
#region Public Constructors
public PayloadData()
: this(new byte[0], new byte[0], false)
{
}
public PayloadData(byte[] applicationData)
: this(new byte[0], applicationData, false)
{
}
public PayloadData(string applicationData)
: this(new byte[0], Encoding.UTF8.GetBytes(applicationData), false)
{
}
public PayloadData(byte[] applicationData, bool masked)
: this(new byte[0], applicationData, masked)
{
}
public PayloadData(byte[] extensionData, byte[] applicationData, bool masked)
{
_extensionData = extensionData;
_applicationData = applicationData;
_masked = masked;
}
#endregion
#region Internal Properties
internal bool ContainsReservedCloseStatusCode
{
get
{
return _applicationData.Length > 1 &&
_applicationData.SubArray(0, 2).ToUInt16(ByteOrder.Big).IsReserved();
}
}
#endregion
#region Public Properties
public byte[] ApplicationData
{
get
{
return _applicationData;
}
}
public byte[] ExtensionData
{
get
{
return _extensionData;
}
}
public bool IsMasked
{
get
{
return _masked;
}
}
public ulong Length
{
get
{
return (ulong)(_extensionData.Length + _applicationData.Length);
}
}
#endregion
#region Private Methods
private static void mask(byte[] src, byte[] key)
{
for (long i = 0; i < src.Length; i++)
src[i] = (byte)(src[i] ^ key[i % 4]);
}
#endregion
#region Public Methods
public IEnumerator<byte> GetEnumerator()
{
foreach (byte b in _extensionData)
yield return b;
foreach (byte b in _applicationData)
yield return b;
}
public void Mask(byte[] maskingKey)
{
if (_extensionData.Length > 0)
mask(_extensionData, maskingKey);
if (_applicationData.Length > 0)
mask(_applicationData, maskingKey);
_masked = !_masked;
}
public byte[] ToByteArray()
{
return _extensionData.Length > 0
? new List<byte>(this).ToArray()
: _applicationData;
}
public override string ToString()
{
return BitConverter.ToString(ToByteArray());
}
#endregion
#region Explicitly Implemented Interface Members
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
#endregion
}
public PayloadData (byte [] applicationData)
: this (new byte [0], applicationData, false)
{
}
public PayloadData (string applicationData)
: this (new byte [0], Encoding.UTF8.GetBytes (applicationData), false)
{
}
public PayloadData (byte [] applicationData, bool masked)
: this (new byte [0], applicationData, masked)
{
}
public PayloadData (byte [] extensionData, byte [] applicationData, bool masked)
{
_extensionData = extensionData;
_applicationData = applicationData;
_masked = masked;
}
#endregion
#region Internal Properties
internal bool ContainsReservedCloseStatusCode {
get {
return _applicationData.Length > 1 &&
_applicationData.SubArray (0, 2).ToUInt16 (ByteOrder.Big).IsReserved ();
}
}
#endregion
#region Public Properties
public byte [] ApplicationData {
get {
return _applicationData;
}
}
public byte [] ExtensionData {
get {
return _extensionData;
}
}
public bool IsMasked {
get {
return _masked;
}
}
public ulong Length {
get {
return (ulong) (_extensionData.Length + _applicationData.Length);
}
}
#endregion
#region Private Methods
private static void mask (byte [] src, byte [] key)
{
for (long i = 0; i < src.Length; i++)
src [i] = (byte) (src [i] ^ key [i % 4]);
}
#endregion
#region Public Methods
public IEnumerator<byte> GetEnumerator ()
{
foreach (byte b in _extensionData)
yield return b;
foreach (byte b in _applicationData)
yield return b;
}
public void Mask (byte [] maskingKey)
{
if (_extensionData.Length > 0)
mask (_extensionData, maskingKey);
if (_applicationData.Length > 0)
mask (_applicationData, maskingKey);
_masked = !_masked;
}
public byte [] ToByteArray ()
{
return _extensionData.Length > 0
? new List<byte> (this).ToArray ()
: _applicationData;
}
public override string ToString ()
{
return BitConverter.ToString (ToByteArray ());
}
#endregion
#region Explicitly Implemented Interface Members
IEnumerator IEnumerable.GetEnumerator ()
{
return GetEnumerator ();
}
#endregion
}
}

View File

@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Text;
using MediaBrowser.Model.Text;
namespace SocketHttpListener.Primitives

View File

@ -1,8 +1,8 @@
namespace SocketHttpListener
{
internal enum Rsv : byte
{
Off = 0x0,
On = 0x1
}
internal enum Rsv : byte
{
Off = 0x0,
On = 0x1
}
}

View File

@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace SocketHttpListener
{

View File

@ -3,15 +3,12 @@ using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.IO;
using SocketHttpListener.Net.WebSockets;
using SocketHttpListener.Primitives;
using HttpStatusCode = SocketHttpListener.Net.HttpStatusCode;
using System.Net.Sockets;
using WebSocketState = System.Net.WebSockets.WebSocketState;
namespace SocketHttpListener

View File

@ -2,59 +2,60 @@ using System;
namespace SocketHttpListener
{
/// <summary>
/// The exception that is thrown when a <see cref="WebSocket"/> gets a fatal error.
/// </summary>
public class WebSocketException : Exception
{
#region Internal Constructors
internal WebSocketException ()
: this (CloseStatusCode.Abnormal, null, null)
{
}
internal WebSocketException (string message)
: this (CloseStatusCode.Abnormal, message, null)
{
}
internal WebSocketException (CloseStatusCode code)
: this (code, null, null)
{
}
internal WebSocketException (string message, Exception innerException)
: this (CloseStatusCode.Abnormal, message, innerException)
{
}
internal WebSocketException (CloseStatusCode code, string message)
: this (code, message, null)
{
}
internal WebSocketException (CloseStatusCode code, string message, Exception innerException)
: base (message ?? code.GetMessage (), innerException)
{
Code = code;
}
#endregion
#region Public Properties
/// <summary>
/// Gets the status code indicating the cause for the exception.
/// The exception that is thrown when a <see cref="WebSocket"/> gets a fatal error.
/// </summary>
/// <value>
/// One of the <see cref="CloseStatusCode"/> enum values, represents the status code indicating
/// the cause for the exception.
/// </value>
public CloseStatusCode Code {
get; private set;
}
public class WebSocketException : Exception
{
#region Internal Constructors
#endregion
}
internal WebSocketException()
: this(CloseStatusCode.Abnormal, null, null)
{
}
internal WebSocketException(string message)
: this(CloseStatusCode.Abnormal, message, null)
{
}
internal WebSocketException(CloseStatusCode code)
: this(code, null, null)
{
}
internal WebSocketException(string message, Exception innerException)
: this(CloseStatusCode.Abnormal, message, innerException)
{
}
internal WebSocketException(CloseStatusCode code, string message)
: this(code, message, null)
{
}
internal WebSocketException(CloseStatusCode code, string message, Exception innerException)
: base(message ?? code.GetMessage(), innerException)
{
Code = code;
}
#endregion
#region Public Properties
/// <summary>
/// Gets the status code indicating the cause for the exception.
/// </summary>
/// <value>
/// One of the <see cref="CloseStatusCode"/> enum values, represents the status code indicating
/// the cause for the exception.
/// </value>
public CloseStatusCode Code
{
get; private set;
}
#endregion
}
}

View File

@ -2,7 +2,6 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace SocketHttpListener
{