#define NGX_QUIC_MAX_BUFFERED 65535
-typedef enum {
- NGX_QUIC_ST_UNAVAIL, /* connection not ready */
- NGX_QUIC_ST_INITIAL, /* connection just created */
- NGX_QUIC_ST_HANDSHAKE, /* handshake started */
- NGX_QUIC_ST_EARLY_DATA, /* handshake in progress */
- NGX_QUIC_ST_APPLICATION /* handshake complete */
-} ngx_quic_state_t;
-
-
typedef struct {
ngx_rbtree_t tree;
ngx_rbtree_node_t sentinel;
ngx_quic_tp_t tp;
ngx_quic_tp_t ctp;
- ngx_quic_state_t state;
+ enum ssl_encryption_level_t state;
ngx_quic_send_ctx_t send_ctx[NGX_QUIC_SEND_CTX_LAST];
ngx_quic_secrets_t keys[NGX_QUIC_ENCRYPTION_LAST];
unsigned draining:1;
unsigned key_phase:1;
unsigned in_retry:1;
+ unsigned initialized:1;
};
keys = &c->quic->keys[level];
if (level == ssl_encryption_early_data) {
- c->quic->state = NGX_QUIC_ST_EARLY_DATA;
+ c->quic->state = ssl_encryption_early_data;
}
return ngx_quic_set_encryption_secret(c->pool, ssl_conn, level,
}
if (level == ssl_encryption_early_data) {
- c->quic->state = NGX_QUIC_ST_EARLY_DATA;
+ c->quic->state = ssl_encryption_early_data;
return 1;
}
qc->push.cancelable = 1;
c->quic = qc;
- qc->state = NGX_QUIC_ST_UNAVAIL;
+ qc->state = ssl_encryption_initial;
qc->ssl = ssl;
qc->tp = *tp;
qc->streams.handler = handler;
return NGX_ERROR;
}
- qc->state = NGX_QUIC_ST_INITIAL;
+ qc->initialized = 1;
if (pkt->token.len) {
rc = ngx_quic_validate_token(c, pkt);
}
qc->max_streams = qc->tp.initial_max_streams_bidi;
- qc->state = NGX_QUIC_ST_HANDSHAKE;
+ qc->state = ssl_encryption_handshake;
return NGX_OK;
}
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
"quic ngx_quic_close_connection, rc: %i", rc);
- if (!c->quic || c->quic->state == NGX_QUIC_ST_UNAVAIL) {
+ if (!c->quic || !c->quic->initialized) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
"quic close connection early error");
if (!qc->closing) {
- switch (qc->state) {
- case NGX_QUIC_ST_INITIAL:
- level = ssl_encryption_initial;
- break;
-
- case NGX_QUIC_ST_HANDSHAKE:
- level = ssl_encryption_handshake;
- break;
-
- default: /* NGX_QUIC_ST_APPLICATION/EARLY_DATA */
- level = ssl_encryption_application;
- break;
- }
+ level = (qc->state == ssl_encryption_early_data)
+ ? ssl_encryption_application
+ : qc->state;
if (rc == NGX_OK) {
return NGX_ERROR;
}
- if (c->quic->state != NGX_QUIC_ST_EARLY_DATA) {
+ if (c->quic->state != ssl_encryption_early_data) {
ngx_log_error(NGX_LOG_INFO, c->log, 0, "quic unexpected 0-RTT packet");
return NGX_OK;
}
}
} else if (n == 1 && !SSL_in_init(ssl_conn)) {
- c->quic->state = NGX_QUIC_ST_APPLICATION;
+ c->quic->state = ssl_encryption_application;
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
"quic ssl cipher: %s", SSL_get_cipher(ssl_conn));