All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.facebook.presto.jdbc.internal.okhttp3.internal.http2.PushObserver Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2014 Square, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.facebook.presto.jdbc.internal.okhttp3.internal.http2;

import java.io.IOException;
import java.util.List;
import com.facebook.presto.jdbc.internal.okhttp3.Protocol;
import com.facebook.presto.jdbc.internal.okio.BufferedSource;

/**
 * {@link Protocol#HTTP_2 HTTP/2} only. Processes server-initiated HTTP requests on the client.
 * Implementations must quickly dispatch callbacks to avoid creating a bottleneck.
 *
 * 

While {@link #onReset} may occur at any time, the following callbacks are expected in order, * correlated by stream ID. * *

    *
  • {@link #onRequest}
  • {@link #onHeaders} (unless canceled) *
  • {@link #onData} (optional sequence of data frames) *
* *

As a stream ID is scoped to a single HTTP/2 connection, implementations which target multiple * connections should expect repetition of stream IDs. * *

Return true to request cancellation of a pushed stream. Note that this does not guarantee * future frames won't arrive on the stream ID. */ public interface PushObserver { /** * Describes the request that the server intends to push a response for. * * @param streamId server-initiated stream ID: an even number. * @param requestHeaders minimally includes {@code :method}, {@code :scheme}, {@code :authority}, * and {@code :path}. */ boolean onRequest(int streamId, List

requestHeaders); /** * The response headers corresponding to a pushed request. When {@code last} is true, there are * no data frames to follow. * * @param streamId server-initiated stream ID: an even number. * @param responseHeaders minimally includes {@code :status}. * @param last when true, there is no response data. */ boolean onHeaders(int streamId, List
responseHeaders, boolean last); /** * A chunk of response data corresponding to a pushed request. This data must either be read or * skipped. * * @param streamId server-initiated stream ID: an even number. * @param source location of data corresponding with this stream ID. * @param byteCount number of bytes to read or skip from the source. * @param last when true, there are no data frames to follow. */ boolean onData(int streamId, BufferedSource source, int byteCount, boolean last) throws IOException; /** Indicates the reason why this stream was canceled. */ void onReset(int streamId, ErrorCode errorCode); PushObserver CANCEL = new PushObserver() { @Override public boolean onRequest(int streamId, List
requestHeaders) { return true; } @Override public boolean onHeaders(int streamId, List
responseHeaders, boolean last) { return true; } @Override public boolean onData(int streamId, BufferedSource source, int byteCount, boolean last) throws IOException { source.skip(byteCount); return true; } @Override public void onReset(int streamId, ErrorCode errorCode) { } }; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy