Visual Studio Reformat: SocketHttpListener
This commit is contained in:
parent
9014e16037
commit
8fd0bc63b9
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
namespace SocketHttpListener
|
||||
{
|
||||
internal enum Fin : byte
|
||||
{
|
||||
More = 0x0,
|
||||
Final = 0x1
|
||||
}
|
||||
internal enum Fin : byte
|
||||
{
|
||||
More = 0x0,
|
||||
Final = 0x1
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
namespace SocketHttpListener
|
||||
{
|
||||
internal enum Mask : byte
|
||||
{
|
||||
Unmask = 0x0,
|
||||
Mask = 0x1
|
||||
}
|
||||
internal enum Mask : byte
|
||||
{
|
||||
Unmask = 0x0,
|
||||
Mask = 0x1
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace SocketHttpListener.Net
|
||||
namespace SocketHttpListener.Net
|
||||
{
|
||||
internal class AuthenticationTypes
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Runtime.InteropServices;
|
||||
using SocketHttpListener.Primitives;
|
||||
|
||||
namespace SocketHttpListener.Net
|
||||
{
|
||||
|
|
|
@ -3,7 +3,6 @@ using System.Collections.Generic;
|
|||
using System.Globalization;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SocketHttpListener.Net
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace SocketHttpListener.Net
|
||||
namespace SocketHttpListener.Net
|
||||
{
|
||||
internal static partial class HttpKnownHeaderNames
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using System;
|
||||
using System.Net;
|
||||
using MediaBrowser.Model.Net;
|
||||
|
||||
namespace SocketHttpListener.Net
|
||||
{
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace SocketHttpListener.Net
|
||||
namespace SocketHttpListener.Net
|
||||
{
|
||||
internal static class UriScheme
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Text;
|
||||
|
||||
namespace SocketHttpListener.Net
|
||||
{
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SocketHttpListener.Net.WebSockets
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace SocketHttpListener.Net.WebSockets
|
||||
namespace SocketHttpListener.Net.WebSockets
|
||||
{
|
||||
public enum WebSocketCloseStatus
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
namespace SocketHttpListener
|
||||
{
|
||||
internal enum Rsv : byte
|
||||
{
|
||||
Off = 0x0,
|
||||
On = 0x1
|
||||
}
|
||||
internal enum Rsv : byte
|
||||
{
|
||||
Off = 0x0,
|
||||
On = 0x1
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ using System;
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace SocketHttpListener
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user