[websocket] Better hijacking.
authorINADA Naoki <inada-n@klab.com>
Mon, 7 Apr 2014 02:08:18 +0000 (11:08 +0900)
committerINADA Naoki <inada-n@klab.com>
Mon, 7 Apr 2014 02:08:18 +0000 (11:08 +0900)
mcs/class/System/System.Net/HttpConnection.cs
mcs/class/System/System.Net/HttpListenerContext.cs

index c08d3d58e32b2cebd8b2abcb1f0b953e747c3c56..821f554f48173c63bcf4447dbc32b8424119450e 100644 (file)
@@ -209,10 +209,14 @@ namespace System.Net {
                        return o_stream;
                }
 
-               internal Stream Hijack ()
+               internal Socket Hijack ()
                {
                        // TODO: disable normal request/response.
-                       return stream;
+                       RemoveConnection ();
+                       var s = sock;
+                       sock = null;
+                       o_stream = null;
+                       return s;
                }
 
                static void OnRead (IAsyncResult ares)
index 846b6750ff294382464aa98187f6c6af660a2e95..0a0f8702e08968baa1c2c72bf5437179bb510a0f 100644 (file)
@@ -37,6 +37,7 @@ using System.Security.Principal;
 using System.Text;
 
 #if NET_4_5
+using System.Net.Sockets;
 using System.Net.WebSockets;
 using System.Threading.Tasks;
 #endif
@@ -175,7 +176,7 @@ namespace System.Net {
                        }
                        string acceptKey = StreamWebSocket.CreateAcceptKey (secKey);
                        var rstream = cnc.GetRequestStream (false, -1);
-                       var wstream = cnc.Hijack ();
+                       var wstream = new NetworkStream (cnc.Hijack ());
                        string header = "HTTP/1.1 101 Switching Protocols\r\n";
                        header += "Upgrade: websocket\r\nConnection: Upgrade\r\n";
                        header += "Sec-WebSocket-Accept: " + acceptKey + "\r\n\r\n";