int last_error;
};
+/*
+ * QUIC connection SSL object (QCSO) type. This implements the API personality
+ * layer for QCSO objects, wrapping the QUIC-native QUIC_CHANNEL object.
+ */
struct quic_conn_st {
/*
* ssl_st is a common header for ordinary SSL objects, QUIC connection
int last_error;
};
+/*
+ * QUIC listener SSL object (QLSO) type. This implements the API personality
+ * layer for QLSO objects, wrapping the QUIC-native QUIC_PORT object.
+ */
+struct quic_listener_st {
+ /* Common header for SSL objects. */
+ struct ssl_st ssl;
+};
+
/* Internal calls to the QUIC CSM which come from various places. */
int ossl_quic_conn_on_handshake_confirmed(QUIC_CONNECTION *qc);
? (c SSL_CONNECTION *)((c QUIC_CONNECTION *)(ssl))->tls \
: NULL))
-# define IS_QUIC(ssl) ((ssl) != NULL \
- && ((ssl)->type == SSL_TYPE_QUIC_CONNECTION \
- || (ssl)->type == SSL_TYPE_QUIC_XSO))
+# define QUIC_LISTENER_FROM_SSL_int(ssl, c) \
+ ((ssl) == NULL \
+ ? NULL \
+ : ((ssl)->type == SSL_TYPE_QUIC_LISTENER \
+ ? (c QUIC_LISTENER *)(ssl) \
+ : NULL))
+
+# define IS_QUIC_CS(ssl) ((ssl) != NULL \
+ && ((ssl)->type == SSL_TYPE_QUIC_CONNECTION \
+ || (ssl)->type == SSL_TYPE_QUIC_XSO))
+
+# define IS_QUIC(ssl) \
+ ((ssl) != NULL && SSL_TYPE_IS_QUIC((ssl)->type))
# else
# define QUIC_CONNECTION_FROM_SSL_int(ssl, c) NULL
# define QUIC_XSO_FROM_SSL_int(ssl, c) NULL
+# define QUIC_LISTENER_FROM_SSL_int(ssl, c) NULL
# define SSL_CONNECTION_FROM_QUIC_SSL_int(ssl, c) NULL
# define IS_QUIC(ssl) 0
+# define IS_QUIC_CS(ssl) 0
# define IS_QUIC_CTX(ctx) 0
# define IS_QUIC_METHOD(m) 0
# endif
QUIC_XSO_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
# define QUIC_XSO_FROM_CONST_SSL(ssl) \
QUIC_XSO_FROM_SSL_int(ssl, const)
+# define QUIC_LISTENER_FROM_SSL(ssl) \
+ QUIC_LISTENER_FROM_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
+# define QUIC_LISTENER_FROM_CONST_SSL(ssl) \
+ QUIC_LISTENER_FROM_SSL_int(ssl, const)
# define SSL_CONNECTION_FROM_QUIC_SSL(ssl) \
SSL_CONNECTION_FROM_QUIC_SSL_int(ssl, SSL_CONNECTION_NO_CONST)
# define SSL_CONNECTION_FROM_CONST_QUIC_SSL(ssl) \
typedef struct cert_pkey_st CERT_PKEY;
-#define SSL_TYPE_SSL_CONNECTION 0
-#define SSL_TYPE_QUIC_CONNECTION 1
-#define SSL_TYPE_QUIC_XSO 2
+#define SSL_TYPE_SSL_CONNECTION 0
+#define SSL_TYPE_QUIC_CONNECTION 0x80
+#define SSL_TYPE_QUIC_XSO 0x81
+#define SSL_TYPE_QUIC_LISTENER 0x82
+
+#define SSL_TYPE_IS_QUIC(x) (((x) & 0x80) != 0)
struct ssl_st {
int type;