1 | /*
|
---|
2 | * Copyright 2022-2024 The OpenSSL Project Authors. All Rights Reserved.
|
---|
3 | *
|
---|
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
|
---|
8 | */
|
---|
9 |
|
---|
10 | #ifndef OSSL_QUIC_SSL_H
|
---|
11 | # define OSSL_QUIC_SSL_H
|
---|
12 |
|
---|
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 */
|
---|
17 | # include "internal/quic_channel.h" /* QUIC_CHANNEL */
|
---|
18 |
|
---|
19 | # ifndef OPENSSL_NO_QUIC
|
---|
20 |
|
---|
21 | __owur SSL *ossl_quic_new(SSL_CTX *ctx);
|
---|
22 | __owur int ossl_quic_init(SSL *s);
|
---|
23 | void ossl_quic_deinit(SSL *s);
|
---|
24 | void ossl_quic_free(SSL *s);
|
---|
25 | int ossl_quic_reset(SSL *s);
|
---|
26 | int ossl_quic_clear(SSL *s);
|
---|
27 | __owur int ossl_quic_accept(SSL *s);
|
---|
28 | __owur int ossl_quic_connect(SSL *s);
|
---|
29 | __owur int ossl_quic_read(SSL *s, void *buf, size_t len, size_t *readbytes);
|
---|
30 | __owur int ossl_quic_peek(SSL *s, void *buf, size_t len, size_t *readbytes);
|
---|
31 | __owur int ossl_quic_write_flags(SSL *s, const void *buf, size_t len,
|
---|
32 | uint64_t flags, size_t *written);
|
---|
33 | __owur int ossl_quic_write(SSL *s, const void *buf, size_t len, size_t *written);
|
---|
34 | __owur long ossl_quic_ctrl(SSL *s, int cmd, long larg, void *parg);
|
---|
35 | __owur long ossl_quic_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg);
|
---|
36 | __owur long ossl_quic_callback_ctrl(SSL *s, int cmd, void (*fp) (void));
|
---|
37 | __owur long ossl_quic_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void));
|
---|
38 | __owur size_t ossl_quic_pending(const SSL *s);
|
---|
39 | __owur int ossl_quic_key_update(SSL *s, int update_type);
|
---|
40 | __owur int ossl_quic_get_key_update_type(const SSL *s);
|
---|
41 | __owur const SSL_CIPHER *ossl_quic_get_cipher_by_char(const unsigned char *p);
|
---|
42 | __owur int ossl_quic_num_ciphers(void);
|
---|
43 | __owur const SSL_CIPHER *ossl_quic_get_cipher(unsigned int u);
|
---|
44 | int ossl_quic_renegotiate_check(SSL *ssl, int initok);
|
---|
45 |
|
---|
46 | typedef struct quic_conn_st QUIC_CONNECTION;
|
---|
47 | typedef struct quic_xso_st QUIC_XSO;
|
---|
48 |
|
---|
49 | int ossl_quic_do_handshake(SSL *s);
|
---|
50 | void ossl_quic_set_connect_state(SSL *s);
|
---|
51 | void ossl_quic_set_accept_state(SSL *s);
|
---|
52 |
|
---|
53 | __owur int ossl_quic_has_pending(const SSL *s);
|
---|
54 | __owur int ossl_quic_handle_events(SSL *s);
|
---|
55 | __owur int ossl_quic_get_event_timeout(SSL *s, struct timeval *tv,
|
---|
56 | int *is_infinite);
|
---|
57 | OSSL_TIME ossl_quic_get_event_deadline(SSL *s);
|
---|
58 | __owur int ossl_quic_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *d);
|
---|
59 | __owur int ossl_quic_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *d);
|
---|
60 | __owur int ossl_quic_get_net_read_desired(SSL *s);
|
---|
61 | __owur int ossl_quic_get_net_write_desired(SSL *s);
|
---|
62 | __owur int ossl_quic_get_error(const SSL *s, int i);
|
---|
63 | __owur int ossl_quic_want(const SSL *s);
|
---|
64 | __owur int ossl_quic_conn_get_blocking_mode(const SSL *s);
|
---|
65 | __owur int ossl_quic_conn_set_blocking_mode(SSL *s, int blocking);
|
---|
66 | __owur int ossl_quic_conn_shutdown(SSL *s, uint64_t flags,
|
---|
67 | const SSL_SHUTDOWN_EX_ARGS *args,
|
---|
68 | size_t args_len);
|
---|
69 | __owur int ossl_quic_conn_stream_conclude(SSL *s);
|
---|
70 | void ossl_quic_conn_set0_net_rbio(SSL *s, BIO *net_wbio);
|
---|
71 | void ossl_quic_conn_set0_net_wbio(SSL *s, BIO *net_wbio);
|
---|
72 | BIO *ossl_quic_conn_get_net_rbio(const SSL *s);
|
---|
73 | BIO *ossl_quic_conn_get_net_wbio(const SSL *s);
|
---|
74 | __owur int ossl_quic_conn_set_initial_peer_addr(SSL *s,
|
---|
75 | const BIO_ADDR *peer_addr);
|
---|
76 | __owur SSL *ossl_quic_conn_stream_new(SSL *s, uint64_t flags);
|
---|
77 | __owur SSL *ossl_quic_get0_connection(SSL *s);
|
---|
78 | __owur int ossl_quic_get_stream_type(SSL *s);
|
---|
79 | __owur uint64_t ossl_quic_get_stream_id(SSL *s);
|
---|
80 | __owur int ossl_quic_is_stream_local(SSL *s);
|
---|
81 | __owur int ossl_quic_set_default_stream_mode(SSL *s, uint32_t mode);
|
---|
82 | __owur SSL *ossl_quic_detach_stream(SSL *s);
|
---|
83 | __owur int ossl_quic_attach_stream(SSL *conn, SSL *stream);
|
---|
84 | __owur int ossl_quic_set_incoming_stream_policy(SSL *s, int policy,
|
---|
85 | uint64_t aec);
|
---|
86 | __owur SSL *ossl_quic_accept_stream(SSL *s, uint64_t flags);
|
---|
87 | __owur size_t ossl_quic_get_accept_stream_queue_len(SSL *s);
|
---|
88 | __owur int ossl_quic_get_value_uint(SSL *s, uint32_t class_, uint32_t id,
|
---|
89 | uint64_t *value);
|
---|
90 | __owur int ossl_quic_set_value_uint(SSL *s, uint32_t class_, uint32_t id,
|
---|
91 | uint64_t value);
|
---|
92 |
|
---|
93 | __owur int ossl_quic_stream_reset(SSL *ssl,
|
---|
94 | const SSL_STREAM_RESET_ARGS *args,
|
---|
95 | size_t args_len);
|
---|
96 |
|
---|
97 | __owur int ossl_quic_get_stream_read_state(SSL *ssl);
|
---|
98 | __owur int ossl_quic_get_stream_write_state(SSL *ssl);
|
---|
99 | __owur int ossl_quic_get_stream_read_error_code(SSL *ssl,
|
---|
100 | uint64_t *app_error_code);
|
---|
101 | __owur int ossl_quic_get_stream_write_error_code(SSL *ssl,
|
---|
102 | uint64_t *app_error_code);
|
---|
103 | __owur int ossl_quic_get_conn_close_info(SSL *ssl,
|
---|
104 | SSL_CONN_CLOSE_INFO *info,
|
---|
105 | size_t info_len);
|
---|
106 |
|
---|
107 | uint64_t ossl_quic_set_options(SSL *s, uint64_t opts);
|
---|
108 | uint64_t ossl_quic_clear_options(SSL *s, uint64_t opts);
|
---|
109 | uint64_t ossl_quic_get_options(const SSL *s);
|
---|
110 |
|
---|
111 | /* Modifies write buffer size for a stream. */
|
---|
112 | __owur int ossl_quic_set_write_buffer_size(SSL *s, size_t size);
|
---|
113 |
|
---|
114 | /*
|
---|
115 | * Used to override ossl_time_now() for debug purposes. While this may be
|
---|
116 | * overridden at any time, expect strange results if you change it after
|
---|
117 | * connecting.
|
---|
118 | */
|
---|
119 | int ossl_quic_conn_set_override_now_cb(SSL *s,
|
---|
120 | OSSL_TIME (*now_cb)(void *arg),
|
---|
121 | void *now_cb_arg);
|
---|
122 |
|
---|
123 | /*
|
---|
124 | * Condvar waiting in the assist thread doesn't support time faking as it relies
|
---|
125 | * on the OS's notion of time, thus this is used in test code to force a
|
---|
126 | * spurious wakeup instead.
|
---|
127 | */
|
---|
128 | void ossl_quic_conn_force_assist_thread_wake(SSL *s);
|
---|
129 |
|
---|
130 | /* For use by tests only. */
|
---|
131 | QUIC_CHANNEL *ossl_quic_conn_get_channel(SSL *s);
|
---|
132 |
|
---|
133 | int ossl_quic_has_pending(const SSL *s);
|
---|
134 | int ossl_quic_get_shutdown(const SSL *s);
|
---|
135 |
|
---|
136 | /*
|
---|
137 | * Set qlog diagnostic title. String is copied internally on success and need
|
---|
138 | * not remain allocated. Only has any effect if logging has not already begun.
|
---|
139 | * For use by tests only. Setting this on a context affects any QCSO created
|
---|
140 | * after this is called but does not affect QCSOs already created from a
|
---|
141 | * context.
|
---|
142 | */
|
---|
143 | int ossl_quic_set_diag_title(SSL_CTX *ctx, const char *title);
|
---|
144 |
|
---|
145 | /* APIs used by the polling infrastructure */
|
---|
146 | int ossl_quic_conn_poll_events(SSL *ssl, uint64_t events, int do_tick,
|
---|
147 | uint64_t *revents);
|
---|
148 |
|
---|
149 | # endif
|
---|
150 |
|
---|
151 | #endif
|
---|