Exemplo n.º 1
0
        protected override void ScanStartLine(HeaderBuffer headerBuffer)
        {
            // argument checks
            Debug.Assert(headerBuffer != null);

            // read items
            string method = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: false);

            int    targetStart = headerBuffer.CurrentOffset;
            string target      = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: false);

            this.RequestTargetSpan = new Span(targetStart, headerBuffer.CurrentOffset - 1);

            string httpVersion = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: true);

            // set message properties
            this.Method  = method;
            this.Version = HeaderBuffer.ParseVersion(httpVersion);
            if (string.IsNullOrEmpty(target) == false)
            {
                char firstChar = target[0];
                if (firstChar != '/' && firstChar != '*')
                {
                    // absolute-form or authority-form
                    Uri         uri          = null;
                    DnsEndPoint hostEndPoint = null;

                    if (target.Contains("://"))
                    {
                        // maybe absolute-form
                        try {
                            uri          = new Uri(target);
                            hostEndPoint = new DnsEndPoint(uri.Host, uri.Port);
                        } catch {
                            // continue
                        }
                    }
                    else
                    {
                        // maybe authority-form
                        try {
                            // assume https scheme
                            uri          = new Uri($"https://{target}");
                            hostEndPoint = new DnsEndPoint(uri.Host, uri.Port);
                            uri          = null;                    // this.Uri is not set in case of authority-form
                        } catch {
                            // continue
                        }
                    }
                    this.HostEndPoint = hostEndPoint;
                    this.TargetUri    = uri;
                }
            }

            return;
        }
Exemplo n.º 2
0
        protected override void ScanStartLine(HeaderBuffer headerBuffer)
        {
            // argument checks
            Debug.Assert(headerBuffer != null);

            // read items
            string version    = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: false);
            string statusCode = headerBuffer.ReadSpaceSeparatedItem(skipItem: false, decapitalize: false, lastItem: false);

            headerBuffer.ReadSpaceSeparatedItem(skipItem: true, decapitalize: false, lastItem: true);

            // set message properties
            Version httpVersion = HeaderBuffer.ParseVersion(version);

            this.Version    = httpVersion;
            this.StatusCode = HeaderBuffer.ParseStatusCode(statusCode);
            if (httpVersion.Major == 1 && httpVersion.Minor == 0)
            {
                // in HTTP/1.0, keep-alive is disabled by default
                this.KeepAliveEnabled = false;
            }

            return;
        }