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

io.grpc.okhttp.internal.framed.FrameReader Maven / Gradle / Ivy

There is a newer version: 1.68.1
Show newest version
/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * 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.
 */
/*
 * Forked from OkHttp 2.5.0
 */

package io.grpc.okhttp.internal.framed;

import java.io.Closeable;
import java.io.IOException;
import java.util.List;

import okio.BufferedSource;
import okio.ByteString;

/** Reads transport frames for SPDY/3 or HTTP/2. */
public interface FrameReader extends Closeable {
  void readConnectionPreface() throws IOException;
  boolean nextFrame(Handler handler) throws IOException;

  interface Handler {
    void data(boolean inFinished, int streamId, BufferedSource source, int length, int paddedLength)
        throws IOException;

    /**
     * Create or update incoming headers, creating the corresponding streams
     * if necessary. Frames that trigger this are SPDY SYN_STREAM, HEADERS, and
     * SYN_REPLY, and HTTP/2 HEADERS and PUSH_PROMISE.
     *
     * @param outFinished true if the receiver should not send further frames.
     * @param inFinished true if the sender will not send further frames.
     * @param streamId the stream owning these headers.
     * @param associatedStreamId the stream that triggered the sender to create
     *     this stream.
     */
    void headers(boolean outFinished, boolean inFinished, int streamId, int associatedStreamId,
        List headerBlock, HeadersMode headersMode);
    void rstStream(int streamId, io.grpc.okhttp.internal.framed.ErrorCode errorCode);
    void settings(boolean clearPrevious, io.grpc.okhttp.internal.framed.Settings settings);

    /** HTTP/2 only. */
    void ackSettings();

    /**
     *  Read a connection-level ping from the peer.  {@code ack} indicates this
     *  is a reply.  Payload parameters are different between SPDY/3 and HTTP/2.
     *  

* In SPDY/3, only the first {@code payload1} parameter is set. If the * reader is a client, it is an unsigned even number. Likewise, a server * will receive an odd number. *

* In HTTP/2, both {@code payload1} and {@code payload2} parameters are * set. The data is opaque binary, and there are no rules on the content. */ void ping(boolean ack, int payload1, int payload2); /** * The peer tells us to stop creating streams. It is safe to replay * streams with {@code ID > lastGoodStreamId} on a new connection. In- * flight streams with {@code ID <= lastGoodStreamId} can only be replayed * on a new connection if they are idempotent. * * @param lastGoodStreamId the last stream ID the peer processed before * sending this message. If {@code lastGoodStreamId} is zero, the peer * processed no frames. * @param errorCode reason for closing the connection. * @param debugData only valid for HTTP/2; opaque debug data to send. */ void goAway(int lastGoodStreamId, io.grpc.okhttp.internal.framed.ErrorCode errorCode, ByteString debugData); /** * Notifies that an additional {@code windowSizeIncrement} bytes can be * sent on {@code streamId}, or the connection if {@code streamId} is zero. */ void windowUpdate(int streamId, long windowSizeIncrement); /** * Called when reading a headers or priority frame. This may be used to * change the stream's weight from the default (16) to a new value. * * @param streamId stream which has a priority change. * @param streamDependency the stream ID this stream is dependent on. * @param weight relative proportion of priority in [1..256]. * @param exclusive inserts this stream ID as the sole child of * {@code streamDependency}. */ void priority(int streamId, int streamDependency, int weight, boolean exclusive); /** * HTTP/2 only. Receive a push promise header block. *

* A push promise contains all the headers that pertain to a server-initiated * request, and a {@code promisedStreamId} to which response frames will be * delivered. Push promise frames are sent as a part of the response to * {@code streamId}. * * @param streamId client-initiated stream ID. Must be an odd number. * @param promisedStreamId server-initiated stream ID. Must be an even * number. * @param requestHeaders minimally includes {@code :method}, {@code :scheme}, * {@code :authority}, and {@code :path}. */ void pushPromise(int streamId, int promisedStreamId, List requestHeaders) throws IOException; /** * HTTP/2 only. Expresses that resources for the connection or a client- * initiated stream are available from a different network location or * protocol configuration. * *

See alt-svc * * @param streamId when a client-initiated stream ID (odd number), the * origin of this alternate service is the origin of the stream. When * zero, the origin is specified in the {@code origin} parameter. * @param origin when present, the * origin is typically * represented as a combination of scheme, host and port. When empty, * the origin is that of the {@code streamId}. * @param protocol an ALPN protocol, such as {@code h2}. * @param host an IP address or hostname. * @param port the IP port associated with the service. * @param maxAge time in seconds that this alternative is considered fresh. */ void alternateService(int streamId, String origin, ByteString protocol, String host, int port, long maxAge); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy