Esempio n. 1
0
        protected virtual void ScanHeaderFieldValue(HeaderBuffer headerBuffer, string decapitalizedFieldName, int startOffset)
        {
            // argument checks
            Debug.Assert(headerBuffer != null);

            string value;

            switch (decapitalizedFieldName)
            {
            case "content-length":
                value = headerBuffer.ReadFieldASCIIValue(decapitalize: false);
                this.ContentLength = HeaderBuffer.ParseHeaderFieldValueAsLong(value);
                break;

            case "transfer-encoding":
                value = headerBuffer.ReadFieldASCIIValue(decapitalize: true);
                if (HeaderBuffer.IsChunkedSpecified(value) == false)
                {
                    throw MessageBuffer.CreateBadRequestException();
                }
                this.ContentLength = -1;                                // -1 means 'chunked'
                break;

            default:
                // just skip
                headerBuffer.SkipField();
                break;
            }
        }
Esempio n. 2
0
        protected override void ScanHeaderFieldValue(HeaderBuffer headerBuffer, string decapitalizedFieldName, int startOffset)
        {
            switch (decapitalizedFieldName)
            {
            case "host":
                // save its value, but its span is unnecessary
                if (this.HostEndPoint == null)
                {
                    string hostValue = HeaderBuffer.TrimHeaderFieldValue(headerBuffer.ReadFieldASCIIValue(false));
                    this.HostEndPoint = Util.ParseEndPoint(hostValue, canOmitPort: true);
                }
                else
                {
                    headerBuffer.SkipField();
                }
                this.HostSpan = new Span(startOffset, headerBuffer.CurrentOffset);
                break;

            case "proxy-authorization":
                // save its span, but its value is unnecessary
                headerBuffer.SkipField();
                this.ProxyAuthorizationSpan = new Span(startOffset, headerBuffer.CurrentOffset);
                break;

            default:
                base.ScanHeaderFieldValue(headerBuffer, decapitalizedFieldName, startOffset);
                break;
            }
        }
Esempio n. 3
0
        protected override void ScanHeaderFieldValue(HeaderBuffer headerBuffer, string decapitalizedFieldName, int startOffset)
        {
            switch (decapitalizedFieldName)
            {
            case "content-length":
            case "transfer-encoding":
                // Do not parse these header fields in response of HEAD method
                // otherwise it will be blocked to try to read body stream after this.
                if (this.Request?.Method != "HEAD")
                {
                    base.ScanHeaderFieldValue(headerBuffer, decapitalizedFieldName, startOffset);
                }
                break;

            case "connection":
                // ToDo: exact parsing
                string value = headerBuffer.ReadFieldASCIIValue(false);
                if (value.Contains("close"))
                {
                    this.KeepAliveEnabled = false;
                }
                else if (value.Contains("keep-alive"))
                {
                    this.KeepAliveEnabled = true;
                }
                break;

            case "proxy-authenticate":
                // save its span and value
                this.ProxyAuthenticateValue = headerBuffer.ReadFieldASCIIValue(false);
                this.ProxyAuthenticateSpan  = new Span(startOffset, headerBuffer.CurrentOffset);
                break;

            default:
                base.ScanHeaderFieldValue(headerBuffer, decapitalizedFieldName, startOffset);
                break;
            }
        }