Beispiel #1
0
        private void OnNewHandshakeRequest(IAsyncResult ar)
        {
            var parameters = (HandshakeParameter)ar.AsyncState;
            var requestMessageTrimmed = Encoding.UTF8.GetString(parameters.HandshakeBuffer).TrimEnd("\0".ToCharArray());
            var handshakeRequest = new HandshakeRequest(requestMessageTrimmed);
            var handshakeResponse = _handshakeResponseFactory.GetResponse(handshakeRequest);

            if (NewConnection == null)
            {
                parameters.ClientSocket.Close();
                parameters.ClientSocket.Dispose();
                return;
            }

            var messageDecoder = _messageDecoderFactory.GetDecoder(handshakeRequest.Version);
            var clientSocket = new ClientSocket(parameters.ClientSocket,new byte[parameters.MessageSize],_maskingService);
            var messageHandler = new ClientMessageHandler(clientSocket, messageDecoder,new ThreadSafeBuffer());
            var clientEvents = new ClientEvents(messageHandler);
            var clientSender = new ClientSender(messageHandler);
            var connectionInfo = new ConnectionInfo
            {
                Accept = handshakeResponse.AcceptToken,
                Path = handshakeRequest.Path,
                Version = handshakeRequest.Version
            };

            NewConnection(clientSender, clientEvents, connectionInfo);
            parameters.ClientSocket.Send(Encoding.UTF8.GetBytes(handshakeResponse.ToString()));
        }
Beispiel #2
0
        public void Parse_Hixie76_Handshake_Correctly()
        {
            const string handshakeRequestMessage =
                @"GET /ws HTTP/1.1
            Host: pmx
            Upgrade: websocket
            Connection: Upgrade
            Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
            Sec-WebSocket-Origin: http://pmx
            Sec-WebSocket-Protocol: chat, superchat
            Sec-WebSocket-Version: 7";

            var handshakeRequest = new HandshakeRequest(handshakeRequestMessage);
            handshakeRequest.Connection.ShouldEqual("Upgrade");
            handshakeRequest.Host.ShouldEqual("pmx");
            handshakeRequest.Key.ShouldEqual("dGhlIHNhbXBsZSBub25jZQ==");
            handshakeRequest.Origin.ShouldEqual("http://pmx");
            handshakeRequest.Path.ShouldEqual("ws");
            handshakeRequest.Upgrade.ShouldEqual("websocket");
            handshakeRequest.Version.ShouldEqual(ProtocolVersion.Hixie76);
        }
 public HandshakeResponse GetResponse(HandshakeRequest handshakeRequest)
 {
     var keyConverter = _keyConverters.Where(kc => kc.AppliesTo(handshakeRequest.Version)).FirstOrDefault();
     return keyConverter == null ? null : new HandshakeResponse(keyConverter.CreateAcceptToken(handshakeRequest.Key));
 }