private void HandleClientHandshakeReceived(IAsyncResult ar) { var handshakeStateContainer = (HandshakeStateContainer)ar.AsyncState; handshakeStateContainer.AsyncResult.HandleNewCompletedSynchronousValue(ar.CompletedSynchronously); try { clientHandshake = handshakeStateContainer.HandshakeReceiver.EndReceiveHandshake(ar); handshakeStateContainer.ClientHandshake = clientHandshake; if (!IsValidOrigin(clientHandshake.Origin)) { // Send Forbidden 403 handshakeStateContainer.HandshakeReceiver.Socket.Close(); } else if (!IsValidVersion(clientHandshake.Version)) { // Send Upgrade Required 426 handshakeStateContainer.HandshakeReceiver.Socket.Close(); } else { var serverHandshakeSender = new ServerHandshakeSender(handshakeStateContainer.HandshakeReceiver.Socket); handshakeStateContainer.HandshakeSender = serverHandshakeSender; serverHandshakeSender.BeginSendHandshake(new ServerHandshake(clientHandshake.Key), HandleServerHandshakeSent, handshakeStateContainer); } } catch (Exception ex) { // Send Bad Request 400 handshakeStateContainer.AsyncResult.SetCompleted(ex); } }
internal WebSocket(Socket socket, ClientHandshake clientHandshake) { this.socket = socket; receiveBuffer = new byte[10 * 1024]; outputBuffer = new byte[10 * 1024]; receiveBufferOffset = 0; sendBufferOffset = 0; sendBufferSize = 0; request = new Request(clientHandshake.Resource, clientHandshake.Cookies, clientHandshake.AllFields); }