private void Handshake(string TransportName, WebSocketContext Context) { void OnError() { Context.WebSocket.Close(CloseStatusCode.Abnormal, Exceptions.BAD_REQUEST.Message); } try { if (EngineIOHttpManager.IsWebSocket(TransportName)) { Handshake(Context.QueryString["sid"] ?? EngineIOSocketID.Generate(), new EngineIOWebSocket(Context)); } else { OnError(); } } catch (Exception Exception) { EngineIOLogger.Error(this, Exception); OnError(); } }
private void OnOpen() { ReadyState = EngineIOReadyState.OPEN; PriorWebsocketSuccess = Transport is EngineIOWebSocket; Emit(Event.OPEN); Flush(); if (ReadyState == EngineIOReadyState.OPEN && Option.Upgrade && Option.WebSocket && Transport is EngineIOPolling) { foreach (string Upgrade in Handshake.Upgrades) { if (EngineIOHttpManager.IsWebSocket(Upgrade)) { Probe(); break; } } } }
private EngineIOException Verify(NameValueCollection QueryString, NameValueCollection Headers, EngineIOTransportType ExpectedTransportType) { EngineIOException Exception = Exceptions.UNKNOWN_TRANSPORT; if (EngineIOHttpManager.GetTransport(QueryString).Equals(ExpectedTransportType.ToString())) { bool IsPolling = EngineIOHttpManager.IsPolling(QueryString) && Option.Polling; bool IsWebSocket = EngineIOHttpManager.IsWebSocket(QueryString) && Option.WebSocket; if (IsPolling || IsWebSocket) { if (EngineIOHttpManager.IsValidHeader(EngineIOHttpManager.GetOrigin(Headers))) { Exception = null; } else { Exception = Exceptions.BAD_REQUEST; } } } return(Exception); }