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); }
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); }
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); }
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); }
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); }
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; }
public HeaderDescriptor(KnownHeader knownHeader) { _descriptor = knownHeader; }