diff --git a/websocket-sharp/Net/HttpConnection.cs b/websocket-sharp/Net/HttpConnection.cs index 7f217156..2db2049a 100644 --- a/websocket-sharp/Net/HttpConnection.cs +++ b/websocket-sharp/Net/HttpConnection.cs @@ -72,11 +72,13 @@ namespace WebSocketSharp.Net private ListenerPrefix _prefix; private MemoryStream _requestBuffer; private int _reuses; + private bool _secure; private Socket _socket; private Stream _stream; private object _sync; private int _timeout; private Timer _timer; + private WebSocketStream _websocketStream; #endregion @@ -86,9 +88,10 @@ namespace WebSocketSharp.Net { _socket = socket; _listener = listener; + _secure = listener.IsSecure; var netStream = new NetworkStream (socket, false); - if (listener.IsSecure) { + if (_secure) { var sslStream = new SslStream (netStream, false); sslStream.AuthenticateAsServer (listener.Certificate); _stream = sslStream; @@ -116,7 +119,7 @@ namespace WebSocketSharp.Net public bool IsSecure { get { - return _listener.IsSecure; + return _secure; } } @@ -200,6 +203,9 @@ namespace WebSocketSharp.Net if (_stream == null) return; + _inputStream = null; + _websocketStream = null; + _stream.Dispose (); _stream = null; } @@ -510,6 +516,20 @@ namespace WebSocketSharp.Net } } + public WebSocketStream GetWebSocketStream () + { + if (_websocketStream != null || _socket == null) + return _websocketStream; + + lock (_sync) { + if (_socket == null) + return _websocketStream; + + _websocketStream = new WebSocketStream (_stream, _secure); + return _websocketStream; + } + } + public void SendError () { SendError (_context.ErrorMessage, _context.ErrorStatus); diff --git a/websocket-sharp/Net/WebSockets/HttpListenerWebSocketContext.cs b/websocket-sharp/Net/WebSockets/HttpListenerWebSocketContext.cs index a62ea0de..c47fd797 100644 --- a/websocket-sharp/Net/WebSockets/HttpListenerWebSocketContext.cs +++ b/websocket-sharp/Net/WebSockets/HttpListenerWebSocketContext.cs @@ -44,7 +44,6 @@ namespace WebSocketSharp.Net.WebSockets #region Private Fields private HttpListenerContext _context; - private WebSocketStream _stream; private WebSocket _websocket; #endregion @@ -55,7 +54,6 @@ namespace WebSocketSharp.Net.WebSockets HttpListenerContext context, string protocol, Logger logger) { _context = context; - _stream = WebSocketStream.CreateServerStream (context); _websocket = new WebSocket (this, protocol, logger); } @@ -65,7 +63,7 @@ namespace WebSocketSharp.Net.WebSockets internal WebSocketStream Stream { get { - return _stream; + return _context.Connection.GetWebSocketStream (); } } @@ -141,7 +139,7 @@ namespace WebSocketSharp.Net.WebSockets /// public override bool IsSecureConnection { get { - return _context.Request.IsSecureConnection; + return _context.Connection.IsSecure; } } diff --git a/websocket-sharp/WebSocketStream.cs b/websocket-sharp/WebSocketStream.cs index f09334e0..24af95c6 100644 --- a/websocket-sharp/WebSocketStream.cs +++ b/websocket-sharp/WebSocketStream.cs @@ -239,12 +239,6 @@ namespace WebSocketSharp return new WebSocketStream (netStream); } - public static WebSocketStream CreateServerStream (HttpListenerContext context) - { - var conn = context.Connection; - return new WebSocketStream (conn.Stream, conn.IsSecure); - } - public void Dispose () { _innerStream.Dispose ();