/// <summary>
 /// 表示握手回复
 /// </summary>
 /// <param name="request">握手请求</param>
 /// <exception cref="ArgumentNullException"></exception>
 public HandshakeResponse(HttpRequest request)
 {
     if (request == null)
     {
         throw new ArgumentNullException();
     }
     this.request = request;
 }
Esempio n. 2
0
        /// <summary>
        /// 解析连接请求信息
        /// </summary>
        /// <param name="bytes">原始数量</param>
        /// <param name="scheme">scheme</param>
        /// <returns></returns>
        private static HttpRequest From(byte[] bytes, string scheme)
        {
            const string pattern = @"^(?<method>[^\s]+)\s(?<path>[^\s]+)\sHTTP\/1\.1\r\n" +
                @"((?<field_name>[^:\r\n]+):\s(?<field_value>[^\r\n]*)\r\n)+" +
                @"\r\n" +
                @"(?<body>.+)?";

            var match = Regex.Match(Encoding.UTF8.GetString(bytes), pattern, RegexOptions.IgnoreCase);
            if (match.Success == false)
            {
                return null;
            }

            var request = new HttpRequest
            {
                Method = match.Groups["method"].Value,
                Path = match.Groups["path"].Value,
                Body = match.Groups["body"].Value.Trim(),
                Scheme = scheme
            };

            var fields = match.Groups["field_name"].Captures;
            var values = match.Groups["field_value"].Captures;
            for (var i = 0; i < fields.Count; i++)
            {
                var name = fields[i].ToString();
                var value = values[i].ToString();
                request.Header[name] = value;
            }
            return request;
        }