Class Quiche

java.lang.Object
org.eclipse.jetty.quic.quiche.Quiche
Direct Known Subclasses:
ForeignQuicheConnection, JnaQuicheConnection

public abstract class Quiche extends Object

Provides Java APIs to access the native Quiche library.

The access is performed via a QuicheBinding, depending on the implementation used to access the native Quiche library.

  • Constructor Details

    • Quiche

      public Quiche()
  • Method Details

    • toInetSocketAddress

      public static InetSocketAddress toInetSocketAddress(SocketAddress address, boolean client)
    • probeConnectionId

      public static byte[] probeConnectionId(ByteBuffer packet)
    • connect

      public static Quiche connect(QuicheConfig quicheConfig, InetSocketAddress local, InetSocketAddress peer) throws IOException
      Throws:
      IOException
    • connect

      public static Quiche connect(QuicheConfig quicheConfig, InetSocketAddress local, InetSocketAddress peer, int connectionIdLength) throws IOException
      Throws:
      IOException
    • negotiate

      public static boolean negotiate(Quiche.TokenMinter tokenMinter, ByteBuffer packetRead, ByteBuffer packetToSend) throws IOException
      Fully consumes the packetRead buffer.
      Returns:
      true if a negotiation packet was written to the packetToSend buffer, false if negotiation failed and the packetRead buffer can be dropped.
      Throws:
      IOException
    • tryAccept

      public static Quiche tryAccept(QuicheConfig quicheConfig, Quiche.TokenValidator tokenValidator, ByteBuffer packetRead, SocketAddress local, SocketAddress peer) throws IOException
      Fully consumes the packetRead buffer if the connection was accepted.
      Returns:
      an established connection if accept succeeded, null if accept failed and negotiation should be tried.
      Throws:
      IOException
    • readableStreamIds

      public final List<Long> readableStreamIds()
    • writableStreamIds

      public final List<Long> writableStreamIds()
    • iterableStreamIds

      protected abstract List<Long> iterableStreamIds(boolean write)
    • feedCipherBytes

      public abstract int feedCipherBytes(ByteBuffer buffer, SocketAddress local, SocketAddress peer) throws IOException
      Read the buffer of cipher text coming from the network.
      Parameters:
      buffer - the buffer to read.
      local - the local address on which the buffer was received.
      peer - the address of the peer from which the buffer was received.
      Returns:
      how many bytes were consumed.
      Throws:
      IOException
    • drainCipherBytes

      public abstract int drainCipherBytes(ByteBuffer buffer) throws IOException
      Fill the given buffer with cipher text to be sent.
      Parameters:
      buffer - the buffer to fill.
      Returns:
      how many bytes were added to the buffer.
      Throws:
      IOException
    • isConnectionClosed

      public abstract boolean isConnectionClosed()
    • isConnectionEstablished

      public abstract boolean isConnectionEstablished()
    • nextTimeout

      public abstract long nextTimeout()
    • onTimeout

      public abstract void onTimeout()
    • getNegotiatedProtocol

      public abstract String getNegotiatedProtocol()
    • close

      public abstract boolean close(long error, String reason)
    • dispose

      public abstract void dispose()
    • isDraining

      public abstract boolean isDraining()
    • maxLocalStreams

      public abstract int maxLocalStreams()
    • windowCapacity

      public abstract long windowCapacity()
    • windowCapacity

      public abstract long windowCapacity(long streamId) throws IOException
      Throws:
      IOException
    • shutdownStream

      public abstract void shutdownStream(long streamId, boolean writeSide, long error) throws IOException
      Throws:
      IOException
    • feedFinForStream

      public final void feedFinForStream(long streamId) throws IOException
      Throws:
      IOException
    • feedClearBytesForStream

      public final int feedClearBytesForStream(long streamId, ByteBuffer buffer) throws IOException
      Throws:
      IOException
    • feedClearBytesForStream

      public abstract int feedClearBytesForStream(long streamId, ByteBuffer buffer, boolean last) throws IOException
      Throws:
      IOException
    • drainClearBytesForStream

      public abstract int drainClearBytesForStream(long streamId, ByteBuffer buffer, boolean[] last) throws IOException
      Throws:
      IOException
    • isStreamFinished

      public abstract boolean isStreamFinished(long streamId)
      Parameters:
      streamId - the stream id
      Returns:
      whether all the data has been read from the specified stream.
    • getRemoteCloseInfo

      public abstract Quiche.CloseInfo getRemoteCloseInfo()
    • getLocalCloseInfo

      public abstract Quiche.CloseInfo getLocalCloseInfo()
    • getPeerCertificate

      public abstract byte[] getPeerCertificate()