|
|
@ -62,12 +62,12 @@ namespace WebSocketSharp.Server |
|
|
|
#region Private Fields
|
|
|
|
|
|
|
|
private System.Net.IPAddress _address; |
|
|
|
private string _docRootPath; |
|
|
|
private string _hostname; |
|
|
|
private HttpListener _listener; |
|
|
|
private Logger _log; |
|
|
|
private int _port; |
|
|
|
private Thread _receiveThread; |
|
|
|
private string _rootPath; |
|
|
|
private bool _secure; |
|
|
|
private WebSocketServiceManager _services; |
|
|
|
private volatile ServerState _state; |
|
|
@ -328,6 +328,80 @@ namespace WebSocketSharp.Server |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets or sets the path to the document folder of the server.
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>
|
|
|
|
/// <para>
|
|
|
|
/// '/' or '\' is trimmed from the end of the value if any.
|
|
|
|
/// </para>
|
|
|
|
/// <para>
|
|
|
|
/// The set operation does nothing if the server has already
|
|
|
|
/// started or it is shutting down.
|
|
|
|
/// </para>
|
|
|
|
/// </remarks>
|
|
|
|
/// <value>
|
|
|
|
/// <para>
|
|
|
|
/// A <see cref="string"/> that represents a path to the folder
|
|
|
|
/// from which to find the requested file.
|
|
|
|
/// </para>
|
|
|
|
/// <para>
|
|
|
|
/// The default value is "./Public".
|
|
|
|
/// </para>
|
|
|
|
/// </value>
|
|
|
|
/// <exception cref="ArgumentNullException">
|
|
|
|
/// The value specified for a set operation is <see langword="null"/>.
|
|
|
|
/// </exception>
|
|
|
|
/// <exception cref="ArgumentException">
|
|
|
|
/// <para>
|
|
|
|
/// The value specified for a set operation is an empty string.
|
|
|
|
/// </para>
|
|
|
|
/// <para>
|
|
|
|
/// -or-
|
|
|
|
/// </para>
|
|
|
|
/// <para>
|
|
|
|
/// The value specified for a set operation is an absolute root.
|
|
|
|
/// </para>
|
|
|
|
/// </exception>
|
|
|
|
public string DocumentRootPath { |
|
|
|
get { |
|
|
|
return _docRootPath; |
|
|
|
} |
|
|
|
|
|
|
|
set { |
|
|
|
if (value == null) |
|
|
|
throw new ArgumentNullException ("value"); |
|
|
|
|
|
|
|
if (value.Length == 0) |
|
|
|
throw new ArgumentException ("An empty string.", "value"); |
|
|
|
|
|
|
|
value = value.TrimSlashOrBackslashFromEnd (); |
|
|
|
if (value == "/") |
|
|
|
throw new ArgumentException ("An absolute root.", "value"); |
|
|
|
|
|
|
|
if (value == "\\") |
|
|
|
throw new ArgumentException ("An absolute root.", "value"); |
|
|
|
|
|
|
|
if (value.Length == 2 && value[1] == ':') |
|
|
|
throw new ArgumentException ("An absolute root.", "value"); |
|
|
|
|
|
|
|
string msg; |
|
|
|
if (!canSet (out msg)) { |
|
|
|
_log.Warn (msg); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
lock (_sync) { |
|
|
|
if (!canSet (out msg)) { |
|
|
|
_log.Warn (msg); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
_docRootPath = value; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets a value indicating whether the server has started.
|
|
|
|
/// </summary>
|
|
|
@ -512,80 +586,6 @@ namespace WebSocketSharp.Server |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets or sets the path to the document folder of the server.
|
|
|
|
/// </summary>
|
|
|
|
/// <remarks>
|
|
|
|
/// <para>
|
|
|
|
/// '/' or '\' is trimmed from the end of the value if any.
|
|
|
|
/// </para>
|
|
|
|
/// <para>
|
|
|
|
/// The set operation does nothing if the server has already
|
|
|
|
/// started or it is shutting down.
|
|
|
|
/// </para>
|
|
|
|
/// </remarks>
|
|
|
|
/// <value>
|
|
|
|
/// <para>
|
|
|
|
/// A <see cref="string"/> that represents a path to the folder
|
|
|
|
/// from which to find the requested file.
|
|
|
|
/// </para>
|
|
|
|
/// <para>
|
|
|
|
/// The default value is "./Public".
|
|
|
|
/// </para>
|
|
|
|
/// </value>
|
|
|
|
/// <exception cref="ArgumentNullException">
|
|
|
|
/// The value specified for a set operation is <see langword="null"/>.
|
|
|
|
/// </exception>
|
|
|
|
/// <exception cref="ArgumentException">
|
|
|
|
/// <para>
|
|
|
|
/// The value specified for a set operation is an empty string.
|
|
|
|
/// </para>
|
|
|
|
/// <para>
|
|
|
|
/// -or-
|
|
|
|
/// </para>
|
|
|
|
/// <para>
|
|
|
|
/// The value specified for a set operation is an absolute root.
|
|
|
|
/// </para>
|
|
|
|
/// </exception>
|
|
|
|
public string RootPath { |
|
|
|
get { |
|
|
|
return _rootPath; |
|
|
|
} |
|
|
|
|
|
|
|
set { |
|
|
|
if (value == null) |
|
|
|
throw new ArgumentNullException ("value"); |
|
|
|
|
|
|
|
if (value.Length == 0) |
|
|
|
throw new ArgumentException ("An empty string.", "value"); |
|
|
|
|
|
|
|
value = value.TrimSlashOrBackslashFromEnd (); |
|
|
|
if (value == "/") |
|
|
|
throw new ArgumentException ("An absolute root.", "value"); |
|
|
|
|
|
|
|
if (value == "\\") |
|
|
|
throw new ArgumentException ("An absolute root.", "value"); |
|
|
|
|
|
|
|
if (value.Length == 2 && value[1] == ':') |
|
|
|
throw new ArgumentException ("An absolute root.", "value"); |
|
|
|
|
|
|
|
string msg; |
|
|
|
if (!canSet (out msg)) { |
|
|
|
_log.Warn (msg); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
lock (_sync) { |
|
|
|
if (!canSet (out msg)) { |
|
|
|
_log.Warn (msg); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
_rootPath = value; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Gets the configuration for secure connections.
|
|
|
|
/// </summary>
|
|
|
@ -842,7 +842,7 @@ namespace WebSocketSharp.Server |
|
|
|
private string createFilePath (string childPath) |
|
|
|
{ |
|
|
|
childPath = childPath.TrimStart ('/', '\\'); |
|
|
|
return new StringBuilder (_rootPath, 32) |
|
|
|
return new StringBuilder (_docRootPath, 32) |
|
|
|
.AppendFormat ("/{0}", childPath) |
|
|
|
.ToString () |
|
|
|
.Replace ('\\', '/'); |
|
|
@ -862,6 +862,8 @@ namespace WebSocketSharp.Server |
|
|
|
_port = port; |
|
|
|
_secure = secure; |
|
|
|
|
|
|
|
_docRootPath = "./Public"; |
|
|
|
|
|
|
|
var lsnr = new HttpListener (); |
|
|
|
var pref = String.Format ( |
|
|
|
"http{0}://{1}:{2}/", secure ? "s" : "", _hostname, port |
|
|
@ -871,7 +873,6 @@ namespace WebSocketSharp.Server |
|
|
|
_listener = lsnr; |
|
|
|
|
|
|
|
_log = _listener.Log; |
|
|
|
_rootPath = "./Public"; |
|
|
|
_services = new WebSocketServiceManager (_log); |
|
|
|
_sync = new object (); |
|
|
|
} |
|
|
@ -900,7 +901,7 @@ namespace WebSocketSharp.Server |
|
|
|
: null; |
|
|
|
|
|
|
|
if (evt != null) |
|
|
|
evt (this, new HttpRequestEventArgs (context, _rootPath)); |
|
|
|
evt (this, new HttpRequestEventArgs (context, _docRootPath)); |
|
|
|
else |
|
|
|
context.Response.StatusCode = (int) HttpStatusCode.NotImplemented; |
|
|
|
|
|
|
|