VirtualBox

source: vbox/trunk/src/libs/openssl-3.3.2/include/internal/quic_port.h@ 108403

最後變更 在這個檔案從108403是 108206,由 vboxsync 提交於 5 週 前

openssl-3.3.2: Exported all files to OSE and removed .scm-settings ​bugref:10757

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 4.5 KB
 
1/*
2 * Copyright 2023 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#ifndef OSSL_QUIC_PORT_H
10# define OSSL_QUIC_PORT_H
11
12# include <openssl/ssl.h>
13# include "internal/quic_types.h"
14# include "internal/quic_reactor.h"
15# include "internal/quic_demux.h"
16# include "internal/quic_predef.h"
17# include "internal/thread_arch.h"
18
19# ifndef OPENSSL_NO_QUIC
20
21/*
22 * QUIC Port
23 * =========
24 *
25 * A QUIC Port (QUIC_PORT) represents a single UDP network socket and contains
26 * zero or more subsidiary QUIC_CHANNEL instances, each of which represents a
27 * single QUIC connection. All QUIC_CHANNEL instances must belong to a
28 * QUIC_PORT.
29 *
30 * A QUIC port is responsible for managing a set of channels which all use the
31 * same UDP socket, and (in future) for automatically creating new channels when
32 * incoming connections are received.
33 *
34 * In order to retain compatibility with QUIC_TSERVER, it also supports a point
35 * of legacy compatibility where a caller can create an incoming (server role)
36 * channel and that channel will be automatically be bound to the next incoming
37 * connection. In the future this will go away once QUIC_TSERVER is removed.
38 *
39 * All QUIC_PORT instances are created by a QUIC_ENGINE.
40 */
41typedef struct quic_port_args_st {
42 /* The engine which the QUIC port is to be a child of. */
43 QUIC_ENGINE *engine;
44
45 /*
46 * This SSL_CTX will be used when constructing the handshake layer object
47 * inside newly created channels.
48 */
49 SSL_CTX *channel_ctx;
50
51 /*
52 * If 1, this port is to be used for multiple connections, so
53 * non-zero-length CIDs should be used. If 0, this port will only be used
54 * for a single connection, so a zero-length local CID can be used.
55 */
56 int is_multi_conn;
57} QUIC_PORT_ARGS;
58
59/* Only QUIC_ENGINE should use this function. */
60QUIC_PORT *ossl_quic_port_new(const QUIC_PORT_ARGS *args);
61
62void ossl_quic_port_free(QUIC_PORT *port);
63
64/*
65 * Operations
66 * ==========
67 */
68
69/* Create an outgoing channel using this port. */
70QUIC_CHANNEL *ossl_quic_port_create_outgoing(QUIC_PORT *port, SSL *tls);
71
72/*
73 * Create an incoming channel using this port.
74 *
75 * TODO(QUIC SERVER): temporary TSERVER use only - will be removed.
76 */
77QUIC_CHANNEL *ossl_quic_port_create_incoming(QUIC_PORT *port, SSL *tls);
78
79/*
80 * Queries and Accessors
81 * =====================
82 */
83
84/* Gets/sets the underlying network read and write BIO. */
85BIO *ossl_quic_port_get_net_rbio(QUIC_PORT *port);
86BIO *ossl_quic_port_get_net_wbio(QUIC_PORT *port);
87int ossl_quic_port_set_net_rbio(QUIC_PORT *port, BIO *net_rbio);
88int ossl_quic_port_set_net_wbio(QUIC_PORT *port, BIO *net_wbio);
89
90/*
91 * Re-poll the network BIOs already set to determine if their support
92 * for polling has changed.
93 */
94int ossl_quic_port_update_poll_descriptors(QUIC_PORT *port);
95
96/* Gets the engine which this port is a child of. */
97QUIC_ENGINE *ossl_quic_port_get0_engine(QUIC_PORT *port);
98
99/* Gets the reactor which can be used to tick/poll on the port. */
100QUIC_REACTOR *ossl_quic_port_get0_reactor(QUIC_PORT *port);
101
102/* Gets the demuxer belonging to the port. */
103QUIC_DEMUX *ossl_quic_port_get0_demux(QUIC_PORT *port);
104
105/* Gets the mutex used by the port. */
106CRYPTO_MUTEX *ossl_quic_port_get0_mutex(QUIC_PORT *port);
107
108/* Gets the current time. */
109OSSL_TIME ossl_quic_port_get_time(QUIC_PORT *port);
110
111int ossl_quic_port_get_rx_short_dcid_len(const QUIC_PORT *port);
112int ossl_quic_port_get_tx_init_dcid_len(const QUIC_PORT *port);
113
114/* Returns 1 if the port is running/healthy, 0 if it has failed. */
115int ossl_quic_port_is_running(const QUIC_PORT *port);
116
117/*
118 * Restores port-level error to the error stack. To be called only if
119 * the port is no longer running.
120 */
121void ossl_quic_port_restore_err_state(const QUIC_PORT *port);
122
123/* For use by QUIC_ENGINE. You should not need to call this directly. */
124void ossl_quic_port_subtick(QUIC_PORT *port, QUIC_TICK_RESULT *r,
125 uint32_t flags);
126
127/*
128 * Events
129 * ======
130 */
131
132/*
133 * Called if a permanent network error occurs. Terminates all channels
134 * immediately. triggering_ch is an optional argument designating
135 * a channel which encountered the network error.
136 */
137void ossl_quic_port_raise_net_error(QUIC_PORT *port,
138 QUIC_CHANNEL *triggering_ch);
139
140# endif
141
142#endif
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette