Beispiel #1
0
        /// <summary>
        /// Websocket 握手输出
        /// </summary>
        /// <param name="response"></param>
        public static void WriteWebSocketHandshakeResponse(HandshakeResponse response)
        {
            HeaderBuilder builder = HeaderBuilder.NewResonse(101, "Switching Protocols");

            builder.Add("Upgrade", "websocket");
            builder.Add("Connection", "Upgrade");
            builder.Add("Sec-WebSocket-Accept", response.CreateResponseKey());
            builder.Add("Server", Utility.PRODUCT_NAME);
            response.Stream.WriteBytes(builder.ToByteArray());
        }
        /// <summary>
        /// 转换为二进制数据
        /// </summary>
        /// <returns></returns>
        public override ArraySegment <byte> ToArraySegment(bool mask)
        {
            var builder = HeaderBuilder.NewResonse(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));
        }
Beispiel #3
0
        /// <summary>
        /// 生成头部数据
        /// </summary>
        /// <param name="contentLength">内容长度</param>
        /// <param name="gzip">gzip模式</param>
        /// <returns></returns>
        private static byte[] GenerateResponseHeader(HttpResponse response, int contentLength, bool gzip)
        {
            HeaderBuilder header = HeaderBuilder.NewResonse(response.Status, response.StatusDescription);

            header.Add("Date", DateTime.Now.ToUniversalTime().ToString("r"));
            header.Add("Server", Utility.PRODUCT_NAME);
            if (response.KeepAlive)
            {
                header.Add("Connection", "keep-alive");
            }
            else
            {
                header.Add("Connection", "close");
            }
            if (response.Charset == null)
            {
                header.Add("Content-Type", response.ContentType);
            }
            else
            {
                string contenType = string.Format("{0}; charset={1}", response.ContentType, response.Charset.WebName);
                header.Add("Content-Type", contenType);
            }

            if (contentLength >= 0)
            {
                header.Add("Content-Length", contentLength);
            }
            if (gzip == true)
            {
                header.Add("Content-Encoding", "gzip");
            }

            foreach (HttpCookie cookie in response.Cookies)
            {
                StringBuilder cookiesb = new StringBuilder();
                cookiesb.Append(string.Format("{0}={1}; ", cookie.Name, cookie.Value));
                if (cookie.Expires != -1)
                {
                    DateTime tt = Converter.Cast <DateTime>(cookie.Expires);
                    cookiesb.Append(string.Format("Expires={0}; ", tt.ToString("r")));
                }
                cookiesb.Append(string.Format("Path={0}; ", cookie.Path));
                cookiesb.Append(string.Format("Domain={0}; ", cookie.Domain));
                if (cookie.Secure)
                {
                    cookiesb.Append("Secure; ");
                }
                if (cookie.HttpOnly)
                {
                    cookiesb.Append("HttpOnly; ");
                }

                cookiesb.Remove(cookiesb.Length - 2, 2);
                header.Append("Set-Cookie", cookiesb.ToString());
            }

            foreach (string key in response.Headers.AllKeys)
            {
                header.Add(key, response.Headers[key]);
            }
            return(header.ToByteArray());
        }