// // ======================================================================== // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package org.eclipse.jetty.http2; import java.io.Closeable; import org.eclipse.jetty.http2.api.Stream; import org.eclipse.jetty.http2.frames.Frame; import org.eclipse.jetty.util.Callback; /** * <p>The SPI interface for implementing a HTTP/2 stream.</p> * <p>This class extends {@link Stream} by adding the methods required to * implement the HTTP/2 stream functionalities.</p> */ public interface IStream extends Stream, Closeable { /** * <p>The constant used as attribute key to store/retrieve the HTTP * channel associated with this stream</p> * * @see #setAttribute(String, Object) */ public static final String CHANNEL_ATTRIBUTE = IStream.class.getName() + ".channel"; /** * @return whether this stream is local or remote */ public boolean isLocal(); @Override public ISession getSession(); /** * @return the {@link org.eclipse.jetty.http2.api.Stream.Listener} associated with this stream * @see #setListener(Listener) */ public Listener getListener(); /** * @param listener the {@link org.eclipse.jetty.http2.api.Stream.Listener} associated with this stream * @see #getListener() */ public void setListener(Listener listener); /** * <p>Processes the given {@code frame}, belonging to this stream.</p> * * @param frame the frame to process * @param callback the callback to complete when frame has been processed */ public void process(Frame frame, Callback callback); /** * <p>Updates the close state of this stream.</p> * * @param update whether to update the close state * @param local whether the update comes from a local operation * (such as sending a frame that ends the stream) * or a remote operation (such as receiving a frame * @return whether the stream has been fully closed by this invocation */ public boolean updateClose(boolean update, boolean local); /** * <p>Forcibly closes this stream.</p> */ @Override public void close(); /** * <p>Updates the stream send window by the given {@code delta}.</p> * * @param delta the delta value (positive or negative) to add to the stream send window * @return the previous value of the stream send window */ public int updateSendWindow(int delta); /** * <p>Updates the stream receive window by the given {@code delta}.</p> * * @param delta the delta value (positive or negative) to add to the stream receive window * @return the previous value of the stream receive window */ public int updateRecvWindow(int delta); /** * <p>Marks this stream as not idle so that the * {@link #getIdleTimeout() idle timeout} is postponed.</p> */ public void notIdle(); }