@Override
    protected void onRequest(long n) {
        // Fetch from upstream only when this deframer is initialized and the given demand is valid.
        if (initialized && n > 0) {
            if (requestHeaders != null) {
                // A readily available HTTP headers is not delivered yet.
                final HttpHeaders requestHeaders = this.requestHeaders;
                this.requestHeaders = null;
                //noinspection unchecked
                subscriber.onNext((I) requestHeaders);
            } else {
                whenConsumed().thenRun(() -> {
                    if (demand() > 0) {
                        askUpstreamForElement();
                    }
                });
            }
        }
    }
Returns a new {@link DecodedStreamMessage} with the specified {@link HttpDecoder},
{@link ByteBufAllocator} and {@code byteBufConverter}.
core/src/main/java/com/linecorp/armeria/internal/common/stream/DecodedStreamMessage.java