2 * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the Apache License 2.0 (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
10 #ifndef OSSL_QUIC_SSL_H
11 # define OSSL_QUIC_SSL_H
13 # include <openssl/ssl.h>
14 # include <openssl/bio.h>
15 # include "internal/quic_record_rx.h" /* OSSL_QRX */
16 # include "internal/quic_ackm.h" /* OSSL_ACKM */
18 # ifndef OPENSSL_NO_QUIC
20 __owur SSL
*ossl_quic_new(SSL_CTX
*ctx
);
21 __owur
int ossl_quic_init(SSL
*s
);
22 void ossl_quic_deinit(SSL
*s
);
23 void ossl_quic_free(SSL
*s
);
24 int ossl_quic_reset(SSL
*s
);
25 int ossl_quic_clear(SSL
*s
);
26 __owur
int ossl_quic_accept(SSL
*s
);
27 __owur
int ossl_quic_connect(SSL
*s
);
28 __owur
int ossl_quic_read(SSL
*s
, void *buf
, size_t len
, size_t *readbytes
);
29 __owur
int ossl_quic_peek(SSL
*s
, void *buf
, size_t len
, size_t *readbytes
);
30 __owur
int ossl_quic_write(SSL
*s
, const void *buf
, size_t len
, size_t *written
);
31 __owur
int ossl_quic_shutdown(SSL
*s
);
32 __owur
long ossl_quic_ctrl(SSL
*s
, int cmd
, long larg
, void *parg
);
33 __owur
long ossl_quic_ctx_ctrl(SSL_CTX
*ctx
, int cmd
, long larg
, void *parg
);
34 __owur
long ossl_quic_callback_ctrl(SSL
*s
, int cmd
, void (*fp
) (void));
35 __owur
long ossl_quic_ctx_callback_ctrl(SSL_CTX
*ctx
, int cmd
, void (*fp
) (void));
36 __owur
size_t ossl_quic_pending(const SSL
*s
);
37 __owur
int ossl_quic_num_ciphers(void);
38 __owur
const SSL_CIPHER
*ossl_quic_get_cipher(unsigned int u
);
39 int ossl_quic_renegotiate_check(SSL
*ssl
, int initok
);
41 typedef struct quic_conn_st QUIC_CONNECTION
;
43 __owur QUIC_CONNECTION
*ossl_quic_conn_from_ssl(SSL
*ssl
);
45 int ossl_quic_do_handshake(QUIC_CONNECTION
*qc
);
46 void ossl_quic_set_connect_state(QUIC_CONNECTION
*qc
);
47 void ossl_quic_set_accept_state(QUIC_CONNECTION
*qc
);
49 __owur
int ossl_quic_tick(QUIC_CONNECTION
*qc
);
50 __owur
int ossl_quic_get_tick_timeout(QUIC_CONNECTION
*qc
, struct timeval
*tv
);
51 __owur
int ossl_quic_get_rpoll_descriptor(QUIC_CONNECTION
*qc
, BIO_POLL_DESCRIPTOR
*d
);
52 __owur
int ossl_quic_get_wpoll_descriptor(QUIC_CONNECTION
*qc
, BIO_POLL_DESCRIPTOR
*d
);
53 __owur
int ossl_quic_get_want_net_read(QUIC_CONNECTION
*qc
);
54 __owur
int ossl_quic_get_want_net_write(QUIC_CONNECTION
*qc
);
55 __owur
int ossl_quic_get_error(const QUIC_CONNECTION
*qc
, int i
);
56 __owur
int ossl_quic_conn_get_blocking_mode(const QUIC_CONNECTION
*qc
);
57 __owur
int ossl_quic_conn_set_blocking_mode(QUIC_CONNECTION
*qc
, int blocking
);
58 void ossl_quic_conn_set0_net_rbio(QUIC_CONNECTION
*qc
, BIO
*net_wbio
);
59 void ossl_quic_conn_set0_net_wbio(QUIC_CONNECTION
*qc
, BIO
*net_wbio
);
60 BIO
*ossl_quic_conn_get_net_rbio(const QUIC_CONNECTION
*qc
);
61 BIO
*ossl_quic_conn_get_net_wbio(const QUIC_CONNECTION
*qc
);
62 __owur
int ossl_quic_conn_set_initial_peer_addr(QUIC_CONNECTION
*qc
,
63 const BIO_ADDR
*peer_addr
);