typedef struct quic_conn_st QUIC_CONNECTION;
typedef struct quic_xso_st QUIC_XSO;
typedef struct quic_listener_st QUIC_LISTENER;
+typedef struct quic_domain_st QUIC_DOMAIN;
# endif
? (c QUIC_LISTENER *)(ssl) \
: NULL))
+# define QUIC_DOMAIN_FROM_SSL_int(ssl, c) \
+ ((ssl) == NULL \
+ ? NULL \
+ : ((ssl)->type == SSL_TYPE_QUIC_DOMAIN \
+ ? (c QUIC_DOMAIN *)(ssl) \
+ : NULL))
+
# define IS_QUIC_CS(ssl) ((ssl) != NULL \
&& ((ssl)->type == SSL_TYPE_QUIC_CONNECTION \
|| (ssl)->type == SSL_TYPE_QUIC_XSO))
/* The QLSO this connection belongs to, if any. */
QUIC_LISTENER *listener;
+ /* The QDSO this connection belongs to, if any. */
+ QUIC_DOMAIN *domain;
+
/* The QUIC engine representing the QUIC event domain. */
QUIC_ENGINE *engine;
/* QUIC_OBJ common header, including SSL object common header. */
QUIC_OBJ obj;
+ /* The QDSO this connection belongs to, if any. */
+ QUIC_DOMAIN *domain;
+
/* The QUIC engine representing the QUIC event domain. */
QUIC_ENGINE *engine;
unsigned int listening : 1;
};
+/*
+ * QUIC domain SSL object (QDSO) type. This implements the API personality layer
+ * for QDSO objects, wrapping the QUIC-native QUIC_ENGINE object.
+ */
+struct quic_domain_st {
+ /* QUIC_OBJ common header, including SSL object common header. */
+ QUIC_OBJ obj;
+
+ /* The QUIC engine representing the QUIC event domain. */
+ QUIC_ENGINE *engine;
+
+#if defined(OPENSSL_THREADS)
+ /*
+ * The mutex used to synchronise access to the QUIC_ENGINE. We own this but
+ * provide it to the engine.
+ */
+ CRYPTO_MUTEX *mutex;
+#endif
+};
+
/* Internal calls to the QUIC CSM which come from various places. */
int ossl_quic_conn_on_handshake_confirmed(QUIC_CONNECTION *qc);
#define SSL_TYPE_QUIC_CONNECTION 0x80
#define SSL_TYPE_QUIC_XSO 0x81
#define SSL_TYPE_QUIC_LISTENER 0x82
+#define SSL_TYPE_QUIC_DOMAIN 0x83
#define SSL_TYPE_IS_QUIC(x) (((x) & 0x80) != 0)