summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2019-08-20 08:49:56 +0200
committerDaniel Stenberg <daniel@haxx.se>2019-08-20 08:51:23 +0200
commit349c3f5a0820948eacd12b1b9b93a1aadcdd3ada (patch)
treed2d4f13307d0189c597a5a5a677ea3814b65622b /lib
parente54affa82cba9d1a2113c3867f4b8d7855df9200 (diff)
downloadcurl-349c3f5a0820948eacd12b1b9b93a1aadcdd3ada.tar.gz
ngtcp2: move the h3 initing to immediately after the rx key
To fix a segfault and to better deal with 0-RTT Assisted-by: Tatsuhiro Tsujikawa
Diffstat (limited to 'lib')
-rw-r--r--lib/vquic/ngtcp2.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c
index 8ecc67045..bd24df35d 100644
--- a/lib/vquic/ngtcp2.c
+++ b/lib/vquic/ngtcp2.c
@@ -315,6 +315,7 @@ static void set_tls_alert(struct quicsocket *qs, uint8_t alert)
{
qs->tls_alert = alert;
}
+static int init_ngh3_conn(struct quicsocket *qs);
static int ssl_on_key(struct quicsocket *qs,
int name, const uint8_t *secret, size_t secretlen)
@@ -395,6 +396,10 @@ static int ssl_on_key(struct quicsocket *qs,
ngtcp2_conn_install_rx_keys(qs->qconn, key, keylen, iv, ivlen,
hp, hplen);
qs->rx_crypto_level = NGTCP2_CRYPTO_LEVEL_APP;
+ if(init_ngh3_conn(qs) != CURLE_OK) {
+ return NGTCP2_ERR_CALLBACK_FAILURE;
+ }
+
break;
}
return 0;
@@ -746,8 +751,6 @@ cb_recv_crypto_data(ngtcp2_conn *tconn, ngtcp2_crypto_level crypto_level,
return quic_read_tls(qs);
}
-static int init_ngh3_conn(struct quicsocket *qs);
-
static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data)
{
struct quicsocket *qs = (struct quicsocket *)user_data;
@@ -755,10 +758,6 @@ static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data)
qs->tx_crypto_level = NGTCP2_CRYPTO_LEVEL_APP;
infof(qs->conn->data, "QUIC handshake is completed\n");
- if(init_ngh3_conn(qs) != CURLE_OK) {
- return NGTCP2_ERR_CALLBACK_FAILURE;
- }
-
return 0;
}