Example #1
0
        internal static KnownHeader TryGetKnownHeader(string name)
        {
            KnownHeader candidate = GetCandidate(new StringAccessor(name));

            if (candidate != null && StringComparer.OrdinalIgnoreCase.Equals(name, candidate.Name))
            {
                return(candidate);
            }

            return(null);
        }
Example #2
0
        internal static unsafe KnownHeader TryGetKnownHeader(ReadOnlySpan <byte> name)
        {
            fixed(byte *p = &MemoryMarshal.GetReference(name))
            {
                KnownHeader candidate = GetCandidate(new BytePtrAccessor(p, name.Length));

                if (candidate != null && ByteArrayHelpers.EqualsOrdinalAsciiIgnoreCase(candidate.Name, name))
                {
                    return(candidate);
                }
            }

            return(null);
        }
Example #3
0
        internal unsafe static KnownHeader TryGetKnownHeader(ReadOnlySpan <byte> name)
        {
            fixed(byte *p = &name.DangerousGetPinnableReference())
            {
                KnownHeader candidate = GetCandidate(new BytePtrAccessor(p, name.Length));

                if (candidate != null && ByteArrayHelpers.EqualsOrdinalAsciiIgnoreCase(candidate.Name, name))
                {
                    return(candidate);
                }
            }

            return(null);
        }
Example #4
0
        internal override bool IsAllowedHeaderName(HeaderDescriptor descriptor)
        {
            if (!_containsTrailingHeaders)
            {
                return(true);
            }

            KnownHeader knownHeader = KnownHeaders.TryGetKnownHeader(descriptor.Name);

            if (knownHeader == null)
            {
                return(true);
            }

            return((knownHeader.HeaderType & HttpHeaderType.NonTrailing) == 0);
        }
Example #5
0
        internal static IEnumerable <KeyValuePair <HeaderDescriptor, string[]> > GetHeaderDescriptorsAndValues(this HttpHeaders headers)
        {
            List <KeyValuePair <HeaderDescriptor, string[]> > result = new List <KeyValuePair <HeaderDescriptor, string[]> >();

            foreach (KeyValuePair <string, IEnumerable <string> > header in headers)
            {
                KnownHeader knownHeader = KnownHeaders.TryGetKnownHeader(header.Key);
                if (knownHeader == null)
                {
                    knownHeader = new KnownHeader(header.Key);
                }
                HeaderDescriptor descriptor = new HeaderDescriptor(knownHeader);
                result.Add(new KeyValuePair <HeaderDescriptor, string[]>(descriptor, header.Value.ToArray()));
            }

            return(result);
        }
        // Returns false for invalid header name.
        public static bool TryGet(ReadOnlySpan <byte> headerName, out HeaderDescriptor descriptor)
        {
            Debug.Assert(headerName.Length > 0);

            KnownHeader knownHeader = KnownHeaders.TryGetKnownHeader(headerName);

            if (knownHeader != null)
            {
                descriptor = new HeaderDescriptor(knownHeader);
                return(true);
            }

            if (!HttpRuleParser.IsToken(headerName))
            {
                descriptor = default(HeaderDescriptor);
                return(false);
            }

            descriptor = new HeaderDescriptor(HttpRuleParser.GetTokenString(headerName));
            return(true);
        }
        public override bool Equals(object obj) => throw new InvalidOperationException();   // Ensure this is never called, to avoid boxing

        // Returns false for invalid header name.
        public static bool TryGet(string headerName, out HeaderDescriptor descriptor)
        {
            Debug.Assert(!string.IsNullOrEmpty(headerName));

            KnownHeader knownHeader = KnownHeaders.TryGetKnownHeader(headerName);

            if (knownHeader != null)
            {
                descriptor = new HeaderDescriptor(knownHeader);
                return(true);
            }

            if (!HttpRuleParser.IsToken(headerName))
            {
                descriptor = default(HeaderDescriptor);
                return(false);
            }

            descriptor = new HeaderDescriptor(headerName);
            return(true);
        }
Example #8
0
 public HeaderDescriptor(KnownHeader knownHeader)
 {
     _knownHeader = knownHeader;
     _headerName  = knownHeader.Name;
 }
 // This should not be used directly; use static TryGet below
 private HeaderDescriptor(string headerName)
 {
     _headerName  = headerName;
     _knownHeader = null;
 }
Example #10
0
 public HeaderDescriptor(KnownHeader knownHeader)
 {
     _descriptor = knownHeader;
 }