Search in sources :

Example 1 with String16FW

use of io.aklivity.zilla.runtime.binding.http.internal.types.String16FW in project zilla by aklivity.

the class HttpServerFactory method decodeStartLine.

private DirectBuffer decodeStartLine(DirectBuffer buffer, int offset, int limit, HttpBeginExFW.Builder httpBeginEx, MutableBoolean hasAuthority, String16FW scheme) {
    DirectBuffer error = null;
    final CharSequence startLine = new AsciiSequenceView(buffer, offset, limit - offset);
    if (startLine.length() >= maximumHeadersSize) {
        error = ERROR_414_REQUEST_URI_TOO_LONG;
    } else if (requestLine.reset(startLine).matches()) {
        final String method = requestLine.group("method");
        final String target = requestLine.group("target");
        final String version = requestLine.group("version");
        final URI targetURI = createTargetURI(target);
        if (targetURI == null) {
            error = ERROR_400_BAD_REQUEST;
        } else if (!versionPart.reset(version).matches()) {
            error = ERROR_505_VERSION_NOT_SUPPORTED;
        } else if (targetURI.getUserInfo() != null) {
            error = ERROR_400_BAD_REQUEST;
        } else if (!SUPPORTED_METHODS.contains(method)) {
            error = ERROR_501_METHOD_NOT_IMPLEMENTED;
        } else {
            final String path = targetURI.getRawPath();
            final String authority = targetURI.getAuthority();
            httpBeginEx.headersItem(h -> h.name(HEADER_SCHEME).value(scheme)).headersItem(h -> h.name(HEADER_METHOD).value(method)).headersItem(h -> h.name(HEADER_PATH).value(path));
            if (authority != null) {
                httpBeginEx.headersItem(h -> h.name(HEADER_AUTHORITY).value(authority));
                hasAuthority.value = true;
            }
        }
    } else {
        error = ERROR_400_BAD_REQUEST;
    }
    return error;
}
Also used : MutableDirectBuffer(org.agrona.MutableDirectBuffer) DirectBuffer(org.agrona.DirectBuffer) HttpPolicyConfig(io.aklivity.zilla.runtime.binding.http.internal.config.HttpAccessControlConfig.HttpPolicyConfig) NO_DEBITOR_INDEX(io.aklivity.zilla.runtime.engine.budget.BudgetDebitor.NO_DEBITOR_INDEX) HpackHeaderFieldFW(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackHeaderFieldFW) HpackStringFW(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackStringFW) LongSupplier(java.util.function.LongSupplier) BindingHandler(io.aklivity.zilla.runtime.engine.binding.BindingHandler) MessageConsumer(io.aklivity.zilla.runtime.engine.binding.function.MessageConsumer) UnsafeBuffer(org.agrona.concurrent.UnsafeBuffer) INCREMENTAL_INDEXING(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackLiteralHeaderFieldFW.LiteralType.INCREMENTAL_INDEXING) Http2SettingsFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2SettingsFW) Matcher(java.util.regex.Matcher) Arrays.asList(java.util.Arrays.asList) HttpBinding(io.aklivity.zilla.runtime.binding.http.internal.HttpBinding) Http2ErrorCode(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2ErrorCode) Map(java.util.Map) Http2PingFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2PingFW) Array32FW(io.aklivity.zilla.runtime.binding.http.internal.types.Array32FW) UNKNOWN(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackHeaderFieldFW.HeaderFieldType.UNKNOWN) ProxyInfoFW(io.aklivity.zilla.runtime.binding.http.internal.types.ProxyInfoFW) WindowFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.WindowFW) EngineContext(io.aklivity.zilla.runtime.engine.EngineContext) BufferPool(io.aklivity.zilla.runtime.engine.buffer.BufferPool) EnumMap(java.util.EnumMap) PROXY_CONNECTION(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackContext.PROXY_CONNECTION) Http2DataFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2DataFW) Set(java.util.Set) Signaler(io.aklivity.zilla.runtime.engine.concurrent.Signaler) EndFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.EndFW) BindingConfig(io.aklivity.zilla.runtime.engine.config.BindingConfig) BufferUtil.limitOfBytes(io.aklivity.zilla.runtime.binding.http.internal.util.BufferUtil.limitOfBytes) CONNECTION(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackContext.CONNECTION) Http2ContinuationFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2ContinuationFW) AsciiSequenceView(org.agrona.AsciiSequenceView) HttpDataExFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.HttpDataExFW) LongLongConsumer(org.agrona.collections.LongLongConsumer) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) Long2ObjectHashMap(org.agrona.collections.Long2ObjectHashMap) MutableReference(org.agrona.collections.MutableReference) BiConsumer(java.util.function.BiConsumer) MutableInteger(org.agrona.collections.MutableInteger) MutableBoolean(org.agrona.collections.MutableBoolean) VERSION(io.aklivity.zilla.runtime.binding.http.internal.types.ProxySecureInfoType.VERSION) HttpEndExFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.HttpEndExFW) String16FW(io.aklivity.zilla.runtime.binding.http.internal.types.String16FW) KEEP_ALIVE(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackContext.KEEP_ALIVE) UPGRADE(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackContext.UPGRADE) ALPN(io.aklivity.zilla.runtime.binding.http.internal.types.ProxyInfoType.ALPN) HpackHuffman(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackHuffman) LongUnaryOperator(java.util.function.LongUnaryOperator) Http2PriorityFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2PriorityFW) AtomicBuffer(org.agrona.concurrent.AtomicBuffer) BufferUtil.indexOfByte(io.aklivity.zilla.runtime.binding.http.internal.util.BufferUtil.indexOfByte) Http2PushPromiseFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2PushPromiseFW) SortedSet(java.util.SortedSet) Http2Setting(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2Setting) BudgetCreditor(io.aklivity.zilla.runtime.engine.budget.BudgetCreditor) WITHOUT_INDEXING(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackLiteralHeaderFieldFW.LiteralType.WITHOUT_INDEXING) SECURE(io.aklivity.zilla.runtime.binding.http.internal.types.ProxyInfoType.SECURE) LongHashSet(org.agrona.collections.LongHashSet) OctetsFW(io.aklivity.zilla.runtime.binding.http.internal.types.OctetsFW) Flyweight(io.aklivity.zilla.runtime.binding.http.internal.types.Flyweight) URI(java.net.URI) Http2WindowUpdateFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2WindowUpdateFW) HttpBindingConfig(io.aklivity.zilla.runtime.binding.http.internal.config.HttpBindingConfig) HttpRouteConfig(io.aklivity.zilla.runtime.binding.http.internal.config.HttpRouteConfig) TRAILERS(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackContext.TRAILERS) Http2FrameType(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2FrameType) Int2ObjectHashMap(org.agrona.collections.Int2ObjectHashMap) SignalFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.SignalFW) ExpandableArrayBuffer(org.agrona.ExpandableArrayBuffer) Instant(java.time.Instant) Objects(java.util.Objects) FlushFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.FlushFW) List(java.util.List) HttpBeginExFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.HttpBeginExFW) HpackContext(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackContext) MutableDirectBuffer(org.agrona.MutableDirectBuffer) Pattern(java.util.regex.Pattern) DirectBuffer(org.agrona.DirectBuffer) HttpConfiguration(io.aklivity.zilla.runtime.binding.http.internal.HttpConfiguration) Http2PrefaceFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2PrefaceFW) HashMap(java.util.HashMap) BeginFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.BeginFW) HpackHeaderBlockFW(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackHeaderBlockFW) HttpAccessControlConfig(io.aklivity.zilla.runtime.binding.http.internal.config.HttpAccessControlConfig) HashSet(java.util.HashSet) DataFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.DataFW) HttpUtil(io.aklivity.zilla.runtime.binding.http.internal.util.HttpUtil) Http2GoawayFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2GoawayFW) HpackLiteralHeaderFieldFW(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackLiteralHeaderFieldFW) TE(io.aklivity.zilla.runtime.binding.http.internal.hpack.HpackContext.TE) String8FW(io.aklivity.zilla.runtime.binding.http.internal.types.String8FW) ProxyBeginExFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.ProxyBeginExFW) NO_CREDITOR_INDEX(io.aklivity.zilla.runtime.engine.budget.BudgetCreditor.NO_CREDITOR_INDEX) Character.toUpperCase(java.lang.Character.toUpperCase) Http2HeadersFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2HeadersFW) Iterator(java.util.Iterator) LongFunction(java.util.function.LongFunction) Http2FrameInfoFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2FrameInfoFW) HttpVersion(io.aklivity.zilla.runtime.binding.http.internal.config.HttpVersion) UTF_8(java.nio.charset.StandardCharsets.UTF_8) AbortFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.AbortFW) HttpHeaderFW(io.aklivity.zilla.runtime.binding.http.internal.types.HttpHeaderFW) BudgetDebitor(io.aklivity.zilla.runtime.engine.budget.BudgetDebitor) Integer.parseInt(java.lang.Integer.parseInt) US_ASCII(java.nio.charset.StandardCharsets.US_ASCII) Consumer(java.util.function.Consumer) Http2RstStreamFW(io.aklivity.zilla.runtime.binding.http.internal.codec.Http2RstStreamFW) NO_SLOT(io.aklivity.zilla.runtime.engine.buffer.BufferPool.NO_SLOT) ResetFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.ResetFW) CROSS_ORIGIN(io.aklivity.zilla.runtime.binding.http.internal.config.HttpAccessControlConfig.HttpPolicyConfig.CROSS_ORIGIN) Character.toLowerCase(java.lang.Character.toLowerCase) URI(java.net.URI) AsciiSequenceView(org.agrona.AsciiSequenceView)

Example 2 with String16FW

use of io.aklivity.zilla.runtime.binding.http.internal.types.String16FW in project zilla by aklivity.

the class HttpClientFactory method newStream.

@Override
public MessageConsumer newStream(int msgTypeId, DirectBuffer buffer, int index, int length, MessageConsumer application) {
    final BeginFW begin = beginRO.wrap(buffer, index, index + length);
    final long routeId = begin.routeId();
    final long authorization = begin.authorization();
    final HttpBeginExFW beginEx = begin.extension().get(beginExRO::tryWrap);
    final HttpBindingConfig binding = bindings.get(routeId);
    HttpRouteConfig route = null;
    if (binding != null) {
        // TODO: avoid object creation
        final Map<String, String> headers = beginEx != null ? asHeadersMap(beginEx.headers()) : EMPTY_HEADERS;
        route = binding.resolve(authorization, headers::get);
    }
    MessageConsumer newStream = null;
    if (route != null) {
        final long resolvedId = route.id;
        final Map<String8FW, String16FW> overrides = binding.options != null && binding.options.overrides != null ? binding.options.overrides : EMPTY_OVERRIDES;
        final HttpClientPool clientPool = clientPools.computeIfAbsent(resolvedId, HttpClientPool::new);
        newStream = clientPool.newStream(application, begin, overrides);
    }
    return newStream;
}
Also used : MessageConsumer(io.aklivity.zilla.runtime.engine.binding.function.MessageConsumer) BeginFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.BeginFW) HttpRouteConfig(io.aklivity.zilla.runtime.binding.http.internal.config.HttpRouteConfig) HttpBeginExFW(io.aklivity.zilla.runtime.binding.http.internal.types.stream.HttpBeginExFW) String8FW(io.aklivity.zilla.runtime.binding.http.internal.types.String8FW) HttpBindingConfig(io.aklivity.zilla.runtime.binding.http.internal.config.HttpBindingConfig) String16FW(io.aklivity.zilla.runtime.binding.http.internal.types.String16FW)

Example 3 with String16FW

use of io.aklivity.zilla.runtime.binding.http.internal.types.String16FW in project zilla by aklivity.

the class HttpServerFactory method initHeaders.

private static Array32FW<HttpHeaderFW> initHeaders(HttpConfiguration config, String16FW status) {
    final Array32FW.Builder<HttpHeaderFW.Builder, HttpHeaderFW> builder = new Array32FW.Builder<>(new HttpHeaderFW.Builder(), new HttpHeaderFW()).wrap(new UnsafeBuffer(new byte[64]), 0, 64).item(h -> h.name(HEADER_STATUS).value(status));
    final String16FW server = config.serverHeader();
    if (server != null) {
        builder.item(h -> h.name(HEADER_SERVER).value(server));
    }
    return builder.build();
}
Also used : HttpHeaderFW(io.aklivity.zilla.runtime.binding.http.internal.types.HttpHeaderFW) Array32FW(io.aklivity.zilla.runtime.binding.http.internal.types.Array32FW) String16FW(io.aklivity.zilla.runtime.binding.http.internal.types.String16FW) UnsafeBuffer(org.agrona.concurrent.UnsafeBuffer)

Example 4 with String16FW

use of io.aklivity.zilla.runtime.binding.http.internal.types.String16FW in project zilla by aklivity.

the class HttpOptionsConfigAdapterTest method shouldReadOptions.

@Test
public void shouldReadOptions() {
    String text = "{" + "\"versions\":" + "[" + "\"http/1.1\"," + "\"h2\"" + "]," + "\"access-control\":" + "{" + "\"policy\": \"cross-origin\"," + "\"allow\":" + "{" + "\"origins\": [ \"https://example.com:9090\" ]," + "\"methods\": [ \"DELETE\" ]," + "\"headers\": [ \"x-api-key\" ]," + "\"credentials\": true" + "}," + "\"max-age\": 10," + "\"expose\":" + "{" + "\"headers\": [ \"x-custom-header\" ]" + "}" + "}," + "\"overrides\":" + "{" + "\":authority\": \"example.com:443\"" + "}" + "}";
    HttpOptionsConfig options = jsonb.fromJson(text, HttpOptionsConfig.class);
    assertThat(options, not(nullValue()));
    assertThat(options.versions, equalTo(EnumSet.allOf(HttpVersion.class)));
    assertThat(options.access, not(nullValue()));
    assertThat(options.access.allow, not(nullValue()));
    assertThat(options.access.allow.origins, equalTo(singleton("https://example.com:9090")));
    assertThat(options.access.allow.methods, equalTo(singleton("DELETE")));
    assertThat(options.access.allow.headers, equalTo(singleton("x-api-key")));
    assertTrue(options.access.allow.credentials);
    assertThat(options.access.maxAge, equalTo(Duration.ofSeconds(10)));
    assertThat(options.access.expose, not(nullValue()));
    assertThat(options.access.expose.headers, equalTo(singleton("x-custom-header")));
    assertThat(options.overrides, equalTo(singletonMap(new String8FW(":authority"), new String16FW("example.com:443"))));
}
Also used : String8FW(io.aklivity.zilla.runtime.binding.http.internal.types.String8FW) String16FW(io.aklivity.zilla.runtime.binding.http.internal.types.String16FW) Test(org.junit.Test)

Example 5 with String16FW

use of io.aklivity.zilla.runtime.binding.http.internal.types.String16FW in project zilla by aklivity.

the class HttpOptionsConfigAdapter method adaptFromJson.

@Override
public OptionsConfig adaptFromJson(JsonObject object) {
    JsonArray versions = object.containsKey(VERSIONS_NAME) ? object.getJsonArray(VERSIONS_NAME) : null;
    SortedSet<HttpVersion> newVersions = null;
    if (versions != null) {
        SortedSet<HttpVersion> newVersions0 = new TreeSet<HttpVersion>();
        versions.forEach(v -> newVersions0.add(HttpVersion.of(JsonString.class.cast(v).getString())));
        newVersions = newVersions0;
    }
    HttpAccessControlConfig newAccess = null;
    JsonObject access = object.containsKey(ACCESS_CONTROL_NAME) ? object.getJsonObject(ACCESS_CONTROL_NAME) : null;
    if (access != null) {
        String policy = access.containsKey(POLICY_NAME) ? access.getString(POLICY_NAME) : null;
        switch(policy) {
            case POLICY_VALUE_SAME_ORIGIN:
                newAccess = new HttpAccessControlConfig(SAME_ORIGIN);
                break;
            case POLICY_VALUE_CROSS_ORIGIN:
                JsonObject allow = access.containsKey(ALLOW_NAME) ? access.getJsonObject(ALLOW_NAME) : null;
                HttpAllowConfig newAllow = null;
                if (allow != null) {
                    JsonArray origins = allow.containsKey(ALLOW_ORIGINS_NAME) ? allow.getJsonArray(ALLOW_ORIGINS_NAME) : null;
                    Set<String> newOrigins = null;
                    if (origins != null) {
                        Set<String> newOrigins0 = new LinkedHashSet<>();
                        origins.forEach(v -> newOrigins0.add(JsonString.class.cast(v).getString()));
                        newOrigins = newOrigins0;
                    }
                    JsonArray methods = allow.containsKey(ALLOW_METHODS_NAME) ? allow.getJsonArray(ALLOW_METHODS_NAME) : null;
                    Set<String> newMethods = null;
                    if (methods != null) {
                        Set<String> newMethods0 = new LinkedHashSet<>();
                        methods.forEach(v -> newMethods0.add(JsonString.class.cast(v).getString()));
                        newMethods = newMethods0;
                    }
                    JsonArray headers = allow.containsKey(ALLOW_HEADERS_NAME) ? allow.getJsonArray(ALLOW_HEADERS_NAME) : null;
                    Set<String> newHeaders = null;
                    if (headers != null) {
                        Set<String> newHeaders0 = new LinkedHashSet<>();
                        headers.forEach(v -> newHeaders0.add(JsonString.class.cast(v).getString()));
                        newHeaders = newHeaders0;
                    }
                    boolean newCredentials = false;
                    if (allow.containsKey(ALLOW_CREDENTIALS_NAME)) {
                        newCredentials = allow.getBoolean(ALLOW_CREDENTIALS_NAME);
                    }
                    newAllow = new HttpAllowConfig(newOrigins, newMethods, newHeaders, newCredentials);
                }
                Duration newMaxAge = null;
                JsonNumber maxAge = access.containsKey(MAX_AGE_NAME) ? access.getJsonNumber(MAX_AGE_NAME) : null;
                if (maxAge != null) {
                    newMaxAge = Duration.ofSeconds(maxAge.longValue());
                }
                HttpExposeConfig newExpose = null;
                JsonObject expose = access.containsKey(EXPOSE_NAME) ? access.getJsonObject(EXPOSE_NAME) : null;
                if (expose != null) {
                    JsonArray headers = expose.containsKey(ALLOW_HEADERS_NAME) ? expose.getJsonArray(ALLOW_HEADERS_NAME) : null;
                    Set<String> newHeaders = null;
                    if (headers != null) {
                        Set<String> newHeaders0 = new LinkedHashSet<>();
                        headers.forEach(v -> newHeaders0.add(JsonString.class.cast(v).getString()));
                        newHeaders = newHeaders0;
                    }
                    newExpose = new HttpExposeConfig(newHeaders);
                }
                newAccess = new HttpAccessControlConfig(CROSS_ORIGIN, newAllow, newMaxAge, newExpose);
                break;
        }
    }
    JsonObject overrides = object.containsKey(OVERRIDES_NAME) ? object.getJsonObject(OVERRIDES_NAME) : null;
    Map<String8FW, String16FW> newOverrides = null;
    if (overrides != null) {
        Map<String8FW, String16FW> newOverrides0 = new LinkedHashMap<>();
        overrides.forEach((k, v) -> newOverrides0.put(new String8FW(k), new String16FW(JsonString.class.cast(v).getString())));
        newOverrides = newOverrides0;
    }
    return new HttpOptionsConfig(newVersions, newOverrides, newAccess);
}
Also used : LinkedHashSet(java.util.LinkedHashSet) HttpExposeConfig(io.aklivity.zilla.runtime.binding.http.internal.config.HttpAccessControlConfig.HttpExposeConfig) HttpAllowConfig(io.aklivity.zilla.runtime.binding.http.internal.config.HttpAccessControlConfig.HttpAllowConfig) JsonObject(jakarta.json.JsonObject) Duration(java.time.Duration) JsonString(jakarta.json.JsonString) LinkedHashMap(java.util.LinkedHashMap) JsonArray(jakarta.json.JsonArray) String8FW(io.aklivity.zilla.runtime.binding.http.internal.types.String8FW) TreeSet(java.util.TreeSet) JsonNumber(jakarta.json.JsonNumber) String16FW(io.aklivity.zilla.runtime.binding.http.internal.types.String16FW) JsonString(jakarta.json.JsonString)

Aggregations

String16FW (io.aklivity.zilla.runtime.binding.http.internal.types.String16FW)5 String8FW (io.aklivity.zilla.runtime.binding.http.internal.types.String8FW)4 HttpBindingConfig (io.aklivity.zilla.runtime.binding.http.internal.config.HttpBindingConfig)2 HttpRouteConfig (io.aklivity.zilla.runtime.binding.http.internal.config.HttpRouteConfig)2 BeginFW (io.aklivity.zilla.runtime.binding.http.internal.types.stream.BeginFW)2 HttpBeginExFW (io.aklivity.zilla.runtime.binding.http.internal.types.stream.HttpBeginExFW)2 MessageConsumer (io.aklivity.zilla.runtime.engine.binding.function.MessageConsumer)2 HttpBinding (io.aklivity.zilla.runtime.binding.http.internal.HttpBinding)1 HttpConfiguration (io.aklivity.zilla.runtime.binding.http.internal.HttpConfiguration)1 Http2ContinuationFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2ContinuationFW)1 Http2DataFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2DataFW)1 Http2ErrorCode (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2ErrorCode)1 Http2FrameInfoFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2FrameInfoFW)1 Http2FrameType (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2FrameType)1 Http2GoawayFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2GoawayFW)1 Http2HeadersFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2HeadersFW)1 Http2PingFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2PingFW)1 Http2PrefaceFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2PrefaceFW)1 Http2PriorityFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2PriorityFW)1 Http2PushPromiseFW (io.aklivity.zilla.runtime.binding.http.internal.codec.Http2PushPromiseFW)1