MINOR: quic-be: Mux initialization
Reset the flags which denotes that the connection is waiting for a TLS handshake completion. This must be accomplished before the mux creation. Check the alpn has been successfully negotiated. Then, finally create the mux. Note that the ->mux_proto of the server must be set before calling conn_create_mux().
This commit is contained in:
parent
7d3f60f079
commit
bfa6885c2f
@ -926,10 +926,33 @@ static int qc_ssl_provide_quic_data(struct ncbuf *ncbuf,
|
||||
#endif
|
||||
|
||||
/* Check the alpn could be negotiated */
|
||||
if (!qc->app_ops) {
|
||||
TRACE_ERROR("No negotiated ALPN", QUIC_EV_CONN_IO_CB, qc, &state);
|
||||
quic_set_tls_alert(qc, SSL_AD_NO_APPLICATION_PROTOCOL);
|
||||
goto leave;
|
||||
if (qc_is_listener(qc)) {
|
||||
if (!qc->app_ops) {
|
||||
TRACE_ERROR("No negotiated ALPN", QUIC_EV_CONN_IO_CB, qc, &state);
|
||||
quic_set_tls_alert(qc, SSL_AD_NO_APPLICATION_PROTOCOL);
|
||||
goto leave;
|
||||
}
|
||||
}
|
||||
else {
|
||||
const unsigned char *alpn;
|
||||
size_t alpn_len;
|
||||
struct server *s = objt_server(ctx->conn->target);
|
||||
|
||||
ctx->conn->flags &= ~(CO_FL_SSL_WAIT_HS | CO_FL_WAIT_L6_CONN);
|
||||
if (!ssl_sock_get_alpn(ctx->conn, ctx, (const char **)&alpn, (int *)&alpn_len) ||
|
||||
!quic_set_app_ops(qc, alpn, alpn_len)) {
|
||||
TRACE_ERROR("No negotiated ALPN", QUIC_EV_CONN_IO_CB, qc, &state);
|
||||
quic_set_tls_alert(qc, SSL_AD_NO_APPLICATION_PROTOCOL);
|
||||
goto leave;
|
||||
}
|
||||
|
||||
s->mux_proto = get_mux_proto(ist("quic"));
|
||||
if (conn_create_mux(ctx->conn, NULL) < 0) {
|
||||
TRACE_ERROR("mux creation failed", QUIC_EV_CONN_IO_CB, qc, &state);
|
||||
goto leave;
|
||||
}
|
||||
|
||||
qc->mux_state = QC_MUX_READY;
|
||||
}
|
||||
|
||||
/* I/O callback switch */
|
||||
|
Loading…
x
Reference in New Issue
Block a user