static Http2ToHttpHeaderTranslator() { RequestHeaderTranslations = new CharSequenceMap <AsciiString>(); ResponseHeaderTranslations = new CharSequenceMap <AsciiString>(); _ = ResponseHeaderTranslations.Add(PseudoHeaderName.Authority.Value, HttpHeaderNames.Host); _ = ResponseHeaderTranslations.Add(PseudoHeaderName.Scheme.Value, ExtensionHeaderNames.Scheme); _ = RequestHeaderTranslations.Add(ResponseHeaderTranslations); _ = ResponseHeaderTranslations.Add(PseudoHeaderName.Path.Value, ExtensionHeaderNames.Path); }
static PseudoHeaderName() { Method = new PseudoHeaderName(":method", true); Scheme = new PseudoHeaderName(":scheme", true); Authority = new PseudoHeaderName(":authority", true); Path = new PseudoHeaderName(":path", true); Status = new PseudoHeaderName(":status", false); All = new PseudoHeaderName[] { Method, Scheme, Authority, Path, Status }; PseudoHeaders = new CharSequenceMap <PseudoHeaderName>(); foreach (PseudoHeaderName pseudoHeader in All) { _ = PseudoHeaders.Add(pseudoHeader._value, pseudoHeader); } }
static HttpConversionUtil() { HttpToHttp2HeaderBlacklist = new CharSequenceMap <AsciiString> { { HttpHeaderNames.Connection, AsciiString.Empty }, { HttpHeaderNames.KeepAlive, AsciiString.Empty }, { HttpHeaderNames.ProxyConnection, AsciiString.Empty }, { HttpHeaderNames.TransferEncoding, AsciiString.Empty }, { HttpHeaderNames.Host, AsciiString.Empty }, { HttpHeaderNames.Upgrade, AsciiString.Empty }, { ExtensionHeaderNames.StreamId, AsciiString.Empty }, { ExtensionHeaderNames.Scheme, AsciiString.Empty }, { ExtensionHeaderNames.Path, AsciiString.Empty } }; }
/// <summary> /// create a map CharSequenceMap header name to index value to allow quick lookup /// </summary> static CharSequenceMap <int> CreateMap() { int length = StaticTable.Length; CharSequenceMap <int> ret = new CharSequenceMap <int>(true, UnsupportedValueConverter <int> .Instance, length); // Iterate through the static table in reverse order to // save the smallest index for a given name in the map. for (int index = length; index > 0; index--) { HpackHeaderField entry = GetEntry(index); ICharSequence name = entry._name; _ = ret.Set(name, index); } return(ret); }
private static CharSequenceMap <AsciiString> ToLowercaseMap(IEnumerable <ICharSequence> values, int arraySizeHint) { var valueConverter = UnsupportedValueConverter <AsciiString> .Instance; var result = new CharSequenceMap <AsciiString>(true, valueConverter, arraySizeHint); foreach (var item in values) { AsciiString lowerCased = AsciiString.Of(item).ToLowerCase(); try { int index = lowerCased.ForEachByte(ByteProcessor.FindComma); if (index != -1) { int start = 0; do { _ = result.Add(lowerCased.SubSequence(start, index, false).Trim(), AsciiString.Empty); start = index + 1; } while (start < lowerCased.Count && (index = lowerCased.ForEachByte(start, lowerCased.Count - start, ByteProcessor.FindComma)) != -1); _ = result.Add(lowerCased.SubSequence(start, lowerCased.Count, false).Trim(), AsciiString.Empty); } else { _ = result.Add(lowerCased.Trim(), AsciiString.Empty); } } catch (Exception) { // This is not expect to happen because FIND_COMMA never throws but must be caught // because of the ByteProcessor interface. ThrowHelper.ThrowInvalidOperationException(); } } return(result); }
static HpackStaticTable() { StaticTable = new[] { /* 1 */ NewEmptyHeaderField(":authority"), /* 2 */ NewHeaderField(":method", "GET"), /* 3 */ NewHeaderField(":method", "POST"), /* 4 */ NewHeaderField(":path", "/"), /* 5 */ NewHeaderField(":path", "/index.html"), /* 6 */ NewHeaderField(":scheme", "http"), /* 7 */ NewHeaderField(":scheme", "https"), /* 8 */ NewHeaderField(":status", "200"), /* 9 */ NewHeaderField(":status", "204"), /* 10 */ NewHeaderField(":status", "206"), /* 11 */ NewHeaderField(":status", "304"), /* 12 */ NewHeaderField(":status", "400"), /* 13 */ NewHeaderField(":status", "404"), /* 14 */ NewHeaderField(":status", "500"), /* 15 */ NewEmptyHeaderField("accept-charset"), /* 16 */ NewHeaderField("accept-encoding", "gzip, deflate"), /* 17 */ NewEmptyHeaderField("accept-language"), /* 18 */ NewEmptyHeaderField("accept-ranges"), /* 19 */ NewEmptyHeaderField("accept"), /* 20 */ NewEmptyHeaderField("access-control-allow-origin"), /* 21 */ NewEmptyHeaderField("age"), /* 22 */ NewEmptyHeaderField("allow"), /* 23 */ NewEmptyHeaderField("authorization"), /* 24 */ NewEmptyHeaderField("cache-control"), /* 25 */ NewEmptyHeaderField("content-disposition"), /* 26 */ NewEmptyHeaderField("content-encoding"), /* 27 */ NewEmptyHeaderField("content-language"), /* 28 */ NewEmptyHeaderField("content-length"), /* 29 */ NewEmptyHeaderField("content-location"), /* 30 */ NewEmptyHeaderField("content-range"), /* 31 */ NewEmptyHeaderField("content-type"), /* 32 */ NewEmptyHeaderField("cookie"), /* 33 */ NewEmptyHeaderField("date"), /* 34 */ NewEmptyHeaderField("etag"), /* 35 */ NewEmptyHeaderField("expect"), /* 36 */ NewEmptyHeaderField("expires"), /* 37 */ NewEmptyHeaderField("from"), /* 38 */ NewEmptyHeaderField("host"), /* 39 */ NewEmptyHeaderField("if-match"), /* 40 */ NewEmptyHeaderField("if-modified-since"), /* 41 */ NewEmptyHeaderField("if-none-match"), /* 42 */ NewEmptyHeaderField("if-range"), /* 43 */ NewEmptyHeaderField("if-unmodified-since"), /* 44 */ NewEmptyHeaderField("last-modified"), /* 45 */ NewEmptyHeaderField("link"), /* 46 */ NewEmptyHeaderField("location"), /* 47 */ NewEmptyHeaderField("max-forwards"), /* 48 */ NewEmptyHeaderField("proxy-authenticate"), /* 49 */ NewEmptyHeaderField("proxy-authorization"), /* 50 */ NewEmptyHeaderField("range"), /* 51 */ NewEmptyHeaderField("referer"), /* 52 */ NewEmptyHeaderField("refresh"), /* 53 */ NewEmptyHeaderField("retry-after"), /* 54 */ NewEmptyHeaderField("server"), /* 55 */ NewEmptyHeaderField("set-cookie"), /* 56 */ NewEmptyHeaderField("strict-transport-security"), /* 57 */ NewEmptyHeaderField("transfer-encoding"), /* 58 */ NewEmptyHeaderField("user-agent"), /* 59 */ NewEmptyHeaderField("vary"), /* 60 */ NewEmptyHeaderField("via"), /* 61 */ NewEmptyHeaderField("www-authenticate") }; Length = StaticTable.Length; StaticIndexByName = CreateMap(); }
public Http2ToHttpHeaderTranslator(int streamId, HttpHeaders output, bool request) { _streamId = streamId; _output = output; _translations = request ? RequestHeaderTranslations : ResponseHeaderTranslations; }