示例#1
0
        public void ShouldCreateHeaderForAuthorization()
        {
            var header = new HttpHeaderBuilder().ForAuthorization("anystring");

            header.Key.Should().Be.EqualTo("Authorization");
            header.Value.Should().Be.EqualTo("MAPLINKWS anystring");
        }
示例#2
0
        public void ShouldCreateHeaderForXMaplinkDate()
        {
            var header = new HttpHeaderBuilder().ForXMaplinkDate(new DateTime(2011, 08, 01));

            header.Key.Should().Be.EqualTo("X-Maplink-Date");
            header.Value.Should().Be.EqualTo("Mon, 01 Aug 2011 00:00:00 GMT");
        }
        /// <summary>
        /// 转换为二进制数据
        /// </summary>
        /// <returns></returns>
        public override ArraySegment <byte> ToArraySegment(bool mask)
        {
            var builder = HttpHeaderBuilder.Resonse(101, "Switching Protocols");

            builder.Add("Upgrade", "websocket");
            builder.Add("Connection", "Upgrade");
            builder.Add("Sec-WebSocket-Accept", this.CreateResponseKey());
            builder.Add("Server", "NetworkSocket");
            var bytes = builder.ToByteArray();

            return(new ArraySegment <byte>(bytes));
        }
示例#4
0
        /// <summary>
        /// 生成握手内容
        /// </summary>
        /// <param name="client">客户端</param>
        /// <param name="path">路径</param>
        /// <param name="secKey">安全Key</param>
        /// <returns></returns>
        private byte[] GenerateHandshakeBuffer(WebSocketClient client, string path, out string secKey)
        {
            var host        = client.RemoteEndPoint.ToString();
            var dnsEndpoint = client.RemoteEndPoint as DnsEndPoint;

            if (dnsEndpoint != null)
            {
                host = string.Format("{0}:{1}", dnsEndpoint.Host, dnsEndpoint.Port);
            }

            var keyBytes = SHA1.Create().ComputeHash(Guid.NewGuid().ToByteArray());

            secKey = Convert.ToBase64String(keyBytes);

            var header = HttpHeaderBuilder.Request(HttpMethod.GET, path);

            header.Add("Host", host);
            header.Add("Connection", "Upgrade");
            header.Add("Upgrade", "websocket");
            header.Add("Origin", "http://" + host);
            header.Add("Sec-WebSocket-Version", "13");
            header.Add("Sec-WebSocket-Key", this.secKey);
            return(header.ToByteArray());
        }