SSL_get_stream_id

- NAME
- SYNOPSIS
- DESCRIPTION
- NOTES
- RETURN VALUES
- SEE ALSO
- HISTORY
- COPYRIGHT

# NAME

SSL_get_stream_id, SSL_get_stream_type, SSL_STREAM_TYPE_NONE, SSL_STREAM_TYPE_READ, SSL_STREAM_TYPE_WRITE, SSL_STREAM_TYPE_BIDI, SSL_is_stream_local - get QUIC stream ID and stream type information

# SYNOPSIS

     #include <openssl/ssl.h>

     uint64_t SSL_get_stream_id(SSL *ssl);

     #define SSL_STREAM_TYPE_NONE
     #define SSL_STREAM_TYPE_BIDI
     #define SSL_STREAM_TYPE_READ
     #define SSL_STREAM_TYPE_WRITE
     int SSL_get_stream_type(SSL *ssl);

     int SSL_is_stream_local(SSL *ssl);

# DESCRIPTION

The `SSL_get_stream_id()` function returns the QUIC stream ID for a QUIC stream SSL object, or for a QUIC connection SSL object which has a default stream attached.

The `SSL_get_stream_type()` function identifies what operations can be performed on the stream, and returns one of the following values:

SSL_STREAM_TYPE_NONE

  The SSL object is a QUIC connection SSL object without a default stream attached.

SSL_STREAM_TYPE_BIDI

  The SSL object is a non-QUIC SSL object, or is a QUIC stream object (or QUIC connection SSL object with a default stream attached), and that stream is a bidirectional QUIC stream.

SSL_STREAM_TYPE_READ

  The SSL object is a QUIC stream object (or QUIC connection SSL object with a default stream attached), and that stream is a unidirectional QUIC stream which was initiated by the remote peer; thus, it can be read from, but not written to.

SSL_STREAM_TYPE_WRITE

  The SSL object is a QUIC stream object (or QUIC connection SSL object with a default stream attached), and that stream is a unidirectional QUIC stream which was initiated by the local application; thus, it can be written to, but not read from.

The `SSL_is_stream_local()` function determines whether a stream was locally created.

# NOTES

While QUICv1 assigns specific meaning to the low two bits of a QUIC stream ID, QUIC stream IDs in future versions of QUIC are not required to have the same semantics. Do not determine stream properties using these bits. Instead, use `SSL_get_stream_type()` to determine the stream type and `SSL_get_stream_is_local()` to determine the stream initiator.

The `SSL_get_stream_type()` identifies the type of a QUIC stream based on its identity, and does not indicate whether an operation can currently be successfully performed on a stream. For example, you might locally initiate a unidirectional stream, write to it, and then conclude the stream using SSL_stream_conclude(3), meaning that it can no longer be written to, but `SSL_get_stream_type()` would still return SSL_STREAM_TYPE_WRITE. The value returned by `SSL_get_stream_type()` does not vary over the lifespan of a stream.

# RETURN VALUES

`SSL_get_stream_id()` returns a QUIC stream ID, or UINT64_MAX if called on an SSL object which is not a QUIC SSL object, or if called on a QUIC connection SSL object without a default stream attached. Note that valid QUIC stream IDs are always below 2**62.

`SSL_get_stream_type()` returns one of the SSL_STREAM_TYPE values.

`SSL_is_stream_local()` returns 1 if called on a QUIC stream SSL object which represents a stream which was locally initiated. It returns 0 if called on a QUIC stream SSL object which represents a stream which was remotely initiated by a peer, and -1 if called on any other kind of SSL object.

# SEE ALSO

SSL_new_stream(3), SSL_accept_stream(3)

# HISTORY

These functions were added in OpenSSL 3.2.

# COPYRIGHT

Copyright 2002-2023 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.