public void ShouldCreateHeaderForAuthorization() { var header = new HttpHeaderBuilder().ForAuthorization("anystring"); header.Key.Should().Be.EqualTo("Authorization"); header.Value.Should().Be.EqualTo("MAPLINKWS anystring"); }
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)); }
/// <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()); }