/// <summary> /// Creates a <see cref="WebSocketConnectionInfo"/> for a given request and IP address. /// </summary> /// <param name="request">The <see cref="WebSocketHttpRequest"/> to get the connection information for.</param> /// <param name="clientIPAddress">The IP address of the client connection.</param> /// <returns>The created <see cref="WebSocketConnectionInfo"/>.</returns> public static WebSocketConnectionInfo Create(WebSocketHttpRequest request, string clientIPAddress) { var info = new WebSocketConnectionInfo { Origin = request["Origin"] ?? request["Sec-WebSocket-Origin"], Host = request["Host"], SubProtocol = request["Sec-WebSocket-Protocol"], Path = request.Path, ClientIPAddress = clientIPAddress }; var cookieHeader = request["Cookie"]; if (cookieHeader != null) { var match = CookieRegex.Match(cookieHeader); var fields = match.Groups["cookie_name"].Captures; var values = match.Groups["cookie_value"].Captures; for (var i = 0; i < fields.Count; i++) { var name = fields[i].ToString(); var value = values[i].ToString(); info.Cookies[name] = value; } } return(info); }
private void CreateHandler(IEnumerable <byte> data) { var request = this.parser.Parse(data.ToArray(), this.scheme); if (request == null) { return; } try { this.Handler = HandlerFactory.BuildHandler(request); } catch (WebSocketException) { StandardHttpRequestReceivedEventArgs e = new StandardHttpRequestReceivedEventArgs(this); this.OnStandardHttpRequestReceived(e); if (!e.Handled) { throw; } } if (this.Handler == null) { return; } this.Handler.TextMessageHandled += new EventHandler <TextMessageHandledEventArgs>(this.Handler_TextMessageHandled); this.Handler.BinaryMessageHandled += new EventHandler <BinaryMessageHandledEventArgs>(this.Handler_BinaryMessageHandled); this.Handler.CloseHandled += new EventHandler(this.Handler_CloseHandled); this.ConnectionInfo = WebSocketConnectionInfo.Create(request, this.Socket.RemoteIPAddress); var handshake = this.Handler.CreateHandshake(); this.SendBytes(handshake); this.OnOpen(new ConnectionEventArgs(this)); }