|
|
|
@ -70,11 +70,13 @@ namespace WebSocketSharp.Server
|
|
|
|
private Logger _logger;
|
|
|
|
private Logger _logger;
|
|
|
|
private int _port;
|
|
|
|
private int _port;
|
|
|
|
private string _realm;
|
|
|
|
private string _realm;
|
|
|
|
|
|
|
|
private string _realmInUse;
|
|
|
|
private Thread _receiveThread;
|
|
|
|
private Thread _receiveThread;
|
|
|
|
private bool _reuseAddress;
|
|
|
|
private bool _reuseAddress;
|
|
|
|
private bool _secure;
|
|
|
|
private bool _secure;
|
|
|
|
private WebSocketServiceManager _services;
|
|
|
|
private WebSocketServiceManager _services;
|
|
|
|
private ServerSslConfiguration _sslConfig;
|
|
|
|
private ServerSslConfiguration _sslConfig;
|
|
|
|
|
|
|
|
private ServerSslConfiguration _sslConfigInUse;
|
|
|
|
private volatile ServerState _state;
|
|
|
|
private volatile ServerState _state;
|
|
|
|
private object _sync;
|
|
|
|
private object _sync;
|
|
|
|
private Func<IIdentity, NetworkCredential> _userCredFinder;
|
|
|
|
private Func<IIdentity, NetworkCredential> _userCredFinder;
|
|
|
|
@ -786,8 +788,8 @@ namespace WebSocketSharp.Server
|
|
|
|
ThreadPool.QueueUserWorkItem (
|
|
|
|
ThreadPool.QueueUserWorkItem (
|
|
|
|
state => {
|
|
|
|
state => {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
var ctx = cl.GetWebSocketContext (null, _secure, _sslConfig, _logger);
|
|
|
|
var ctx = cl.GetWebSocketContext (null, _secure, _sslConfigInUse, _logger);
|
|
|
|
if (!ctx.Authenticate (_authSchemes, getRealm (), _userCredFinder))
|
|
|
|
if (!ctx.Authenticate (_authSchemes, _realmInUse, _userCredFinder))
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
processRequest (ctx);
|
|
|
|
processRequest (ctx);
|
|
|
|
@ -940,13 +942,27 @@ namespace WebSocketSharp.Server
|
|
|
|
/// </summary>
|
|
|
|
/// </summary>
|
|
|
|
public void Start ()
|
|
|
|
public void Start ()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
string msg;
|
|
|
|
|
|
|
|
if (!checkIfAvailable (true, false, false, true, out msg)) {
|
|
|
|
|
|
|
|
_logger.Error (msg);
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var sslConfig = getSslConfiguration ();
|
|
|
|
|
|
|
|
if (!checkSslConfiguration (sslConfig, out msg)) {
|
|
|
|
|
|
|
|
_logger.Error (msg);
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
lock (_sync) {
|
|
|
|
lock (_sync) {
|
|
|
|
var msg = _state.CheckIfAvailable (true, false, false) ?? checkIfCertificateExists ();
|
|
|
|
if (!checkIfAvailable (true, false, false, true, out msg)) {
|
|
|
|
if (msg != null) {
|
|
|
|
|
|
|
|
_logger.Error (msg);
|
|
|
|
_logger.Error (msg);
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_realmInUse = getRealm ();
|
|
|
|
|
|
|
|
_sslConfigInUse = sslConfig;
|
|
|
|
|
|
|
|
|
|
|
|
_services.Start ();
|
|
|
|
_services.Start ();
|
|
|
|
startReceiving ();
|
|
|
|
startReceiving ();
|
|
|
|
|
|
|
|
|
|
|
|
|