Skip to content

Commit

Permalink
QUIC: add v1 quic_transport_parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
tmshort committed Dec 17, 2020
1 parent 5b76e4f commit 8f4f7f2
Show file tree
Hide file tree
Showing 14 changed files with 326 additions and 37 deletions.
11 changes: 11 additions & 0 deletions crypto/err/openssl.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1160,6 +1160,7 @@ SSL_F_FINAL_EC_PT_FORMATS:485:final_ec_pt_formats
SSL_F_FINAL_EMS:486:final_ems
SSL_F_FINAL_KEY_SHARE:503:final_key_share
SSL_F_FINAL_MAXFRAGMENTLEN:557:final_maxfragmentlen
SSL_F_FINAL_QUIC_TRANSPORT_PARAMS:652:final_quic_transport_params
SSL_F_FINAL_RENEGOTIATE:483:final_renegotiate
SSL_F_FINAL_SERVER_NAME:558:final_server_name
SSL_F_FINAL_SIG_ALGS:497:final_sig_algs
Expand Down Expand Up @@ -1432,6 +1433,8 @@ SSL_F_TLS_CONSTRUCT_CTOS_PSK:501:tls_construct_ctos_psk
SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES:509:tls_construct_ctos_psk_kex_modes
SSL_F_TLS_CONSTRUCT_CTOS_QUIC_TRANSPORT_PARAMS:648:\
tls_construct_ctos_quic_transport_params
SSL_F_TLS_CONSTRUCT_CTOS_QUIC_TRANSPORT_PARAMS_DRAFT:653:\
tls_construct_ctos_quic_transport_params_draft
SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE:473:tls_construct_ctos_renegotiate
SSL_F_TLS_CONSTRUCT_CTOS_SCT:474:tls_construct_ctos_sct
SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME:475:tls_construct_ctos_server_name
Expand Down Expand Up @@ -1475,6 +1478,8 @@ SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG:457:tls_construct_stoc_next_proto_neg
SSL_F_TLS_CONSTRUCT_STOC_PSK:504:tls_construct_stoc_psk
SSL_F_TLS_CONSTRUCT_STOC_QUIC_TRANSPORT_PARAMS:649:\
tls_construct_stoc_quic_transport_params
SSL_F_TLS_CONSTRUCT_STOC_QUIC_TRANSPORT_PARAMS_DRAFT:654:\
tls_construct_stoc_quic_transport_params_draft
SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE:458:tls_construct_stoc_renegotiate
SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME:459:tls_construct_stoc_server_name
SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET:460:tls_construct_stoc_session_ticket
Expand Down Expand Up @@ -1505,6 +1510,8 @@ SSL_F_TLS_PARSE_CTOS_PSK:505:tls_parse_ctos_psk
SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES:572:tls_parse_ctos_psk_kex_modes
SSL_F_TLS_PARSE_CTOS_QUIC_TRANSPORT_PARAMS:650:\
tls_parse_ctos_quic_transport_params
SSL_F_TLS_PARSE_CTOS_QUIC_TRANSPORT_PARAMS_DRAFT:655:\
tls_parse_ctos_quic_transport_params_draft
SSL_F_TLS_PARSE_CTOS_RENEGOTIATE:464:tls_parse_ctos_renegotiate
SSL_F_TLS_PARSE_CTOS_SERVER_NAME:573:tls_parse_ctos_server_name
SSL_F_TLS_PARSE_CTOS_SESSION_TICKET:574:tls_parse_ctos_session_ticket
Expand All @@ -1525,6 +1532,8 @@ SSL_F_TLS_PARSE_STOC_NPN:582:tls_parse_stoc_npn
SSL_F_TLS_PARSE_STOC_PSK:502:tls_parse_stoc_psk
SSL_F_TLS_PARSE_STOC_QUIC_TRANSPORT_PARAMS:651:\
tls_parse_stoc_quic_transport_params
SSL_F_TLS_PARSE_STOC_QUIC_TRANSPORT_PARAMS_DRAFT:656:\
tls_parse_stoc_quic_transport_params_draft
SSL_F_TLS_PARSE_STOC_RENEGOTIATE:448:tls_parse_stoc_renegotiate
SSL_F_TLS_PARSE_STOC_SCT:564:tls_parse_stoc_sct
SSL_F_TLS_PARSE_STOC_SERVER_NAME:583:tls_parse_stoc_server_name
Expand Down Expand Up @@ -2757,6 +2766,8 @@ SSL_R_MISSING_DSA_SIGNING_CERT:165:missing dsa signing cert
SSL_R_MISSING_ECDSA_SIGNING_CERT:381:missing ecdsa signing cert
SSL_R_MISSING_FATAL:256:missing fatal
SSL_R_MISSING_PARAMETERS:290:missing parameters
SSL_R_MISSING_QUIC_TRANSPORT_PARAMETERS_EXTENSION:294:\
missing quic transport parameters extension
SSL_R_MISSING_RSA_CERTIFICATE:168:missing rsa certificate
SSL_R_MISSING_RSA_ENCRYPTING_CERT:169:missing rsa encrypting cert
SSL_R_MISSING_RSA_SIGNING_CERT:170:missing rsa signing cert
Expand Down
11 changes: 11 additions & 0 deletions include/openssl/ssl.h
Original file line number Diff line number Diff line change
Expand Up @@ -2473,6 +2473,17 @@ __owur int SSL_process_quic_post_handshake(SSL *ssl);

__owur int SSL_is_quic(SSL *ssl);

/* BoringSSL API */
__owur void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy);

/* Set an explicit value that you want to use */
/* If set to 0 (default) the server will use the versions the client used */
/* If set to 0 (default) the client will send both extensions */
void SSL_set_quic_transport_version(SSL *ssl, int version);
__owur int SSL_get_quic_transport_version(const SSL *ssl);
/* Get the version the peer sent, -1 if neither, 0 if both */
__owur int SSL_get_peer_quic_transport_version(const SSL *ssl);

int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c);

# endif
Expand Down
6 changes: 6 additions & 0 deletions include/openssl/sslerr.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ int ERR_load_SSL_strings(void);
# define SSL_F_FINAL_EMS 486
# define SSL_F_FINAL_KEY_SHARE 503
# define SSL_F_FINAL_MAXFRAGMENTLEN 557
# define SSL_F_FINAL_QUIC_TRANSPORT_PARAMS 652
# define SSL_F_FINAL_RENEGOTIATE 483
# define SSL_F_FINAL_SERVER_NAME 558
# define SSL_F_FINAL_SIG_ALGS 497
Expand Down Expand Up @@ -328,6 +329,7 @@ int ERR_load_SSL_strings(void);
# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501
# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509
# define SSL_F_TLS_CONSTRUCT_CTOS_QUIC_TRANSPORT_PARAMS 648
# define SSL_F_TLS_CONSTRUCT_CTOS_QUIC_TRANSPORT_PARAMS_DRAFT 653
# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473
# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474
# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475
Expand Down Expand Up @@ -368,6 +370,7 @@ int ERR_load_SSL_strings(void);
# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457
# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504
# define SSL_F_TLS_CONSTRUCT_STOC_QUIC_TRANSPORT_PARAMS 649
# define SSL_F_TLS_CONSTRUCT_STOC_QUIC_TRANSPORT_PARAMS_DRAFT 654
# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458
# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459
# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460
Expand All @@ -394,6 +397,7 @@ int ERR_load_SSL_strings(void);
# define SSL_F_TLS_PARSE_CTOS_PSK 505
# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572
# define SSL_F_TLS_PARSE_CTOS_QUIC_TRANSPORT_PARAMS 650
# define SSL_F_TLS_PARSE_CTOS_QUIC_TRANSPORT_PARAMS_DRAFT 655
# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464
# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573
# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574
Expand All @@ -413,6 +417,7 @@ int ERR_load_SSL_strings(void);
# define SSL_F_TLS_PARSE_STOC_NPN 582
# define SSL_F_TLS_PARSE_STOC_PSK 502
# define SSL_F_TLS_PARSE_STOC_QUIC_TRANSPORT_PARAMS 651
# define SSL_F_TLS_PARSE_STOC_QUIC_TRANSPORT_PARAMS_DRAFT 656
# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448
# define SSL_F_TLS_PARSE_STOC_SCT 564
# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583
Expand Down Expand Up @@ -605,6 +610,7 @@ int ERR_load_SSL_strings(void);
# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381
# define SSL_R_MISSING_FATAL 256
# define SSL_R_MISSING_PARAMETERS 290
# define SSL_R_MISSING_QUIC_TRANSPORT_PARAMETERS_EXTENSION 294
# define SSL_R_MISSING_RSA_CERTIFICATE 168
# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169
# define SSL_R_MISSING_RSA_SIGNING_CERT 170
Expand Down
3 changes: 2 additions & 1 deletion include/openssl/tls1.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ extern "C" {
# define TLSEXT_TYPE_renegotiate 0xff01

/* ExtensionType value from draft-ietf-quic-tls-27 */
# define TLSEXT_TYPE_quic_transport_parameters 0xffa5
# define TLSEXT_TYPE_quic_transport_parameters_draft 0xffa5
# define TLSEXT_TYPE_quic_transport_parameters 0x0039

# ifndef OPENSSL_NO_NEXTPROTONEG
/* This is not an IANA defined extension number */
Expand Down
14 changes: 13 additions & 1 deletion ssl/ssl_err.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
Expand Down Expand Up @@ -85,6 +85,8 @@ static const ERR_STRING_DATA SSL_str_functs[] = {
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_KEY_SHARE, 0), "final_key_share"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_MAXFRAGMENTLEN, 0),
"final_maxfragmentlen"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_QUIC_TRANSPORT_PARAMS, 0),
"final_quic_transport_params"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_RENEGOTIATE, 0), "final_renegotiate"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_SERVER_NAME, 0), "final_server_name"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_SIG_ALGS, 0), "final_sig_algs"},
Expand Down Expand Up @@ -496,6 +498,8 @@ static const ERR_STRING_DATA SSL_str_functs[] = {
"tls_construct_ctos_psk_kex_modes"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_QUIC_TRANSPORT_PARAMS, 0),
"tls_construct_ctos_quic_transport_params"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_QUIC_TRANSPORT_PARAMS_DRAFT, 0),
"tls_construct_ctos_quic_transport_params_draft"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE, 0),
"tls_construct_ctos_renegotiate"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_CTOS_SCT, 0),
Expand Down Expand Up @@ -569,6 +573,8 @@ static const ERR_STRING_DATA SSL_str_functs[] = {
"tls_construct_stoc_psk"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_QUIC_TRANSPORT_PARAMS, 0),
"tls_construct_stoc_quic_transport_params"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_QUIC_TRANSPORT_PARAMS_DRAFT, 0),
"tls_construct_stoc_quic_transport_params_draft"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE, 0),
"tls_construct_stoc_renegotiate"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME, 0),
Expand Down Expand Up @@ -617,6 +623,8 @@ static const ERR_STRING_DATA SSL_str_functs[] = {
"tls_parse_ctos_psk_kex_modes"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_QUIC_TRANSPORT_PARAMS, 0),
"tls_parse_ctos_quic_transport_params"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_QUIC_TRANSPORT_PARAMS_DRAFT, 0),
"tls_parse_ctos_quic_transport_params_draft"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_RENEGOTIATE, 0),
"tls_parse_ctos_renegotiate"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_CTOS_SERVER_NAME, 0),
Expand Down Expand Up @@ -651,6 +659,8 @@ static const ERR_STRING_DATA SSL_str_functs[] = {
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_PSK, 0), "tls_parse_stoc_psk"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_QUIC_TRANSPORT_PARAMS, 0),
"tls_parse_stoc_quic_transport_params"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_QUIC_TRANSPORT_PARAMS_DRAFT, 0),
"tls_parse_stoc_quic_transport_params_draft"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_RENEGOTIATE, 0),
"tls_parse_stoc_renegotiate"},
{ERR_PACK(ERR_LIB_SSL, SSL_F_TLS_PARSE_STOC_SCT, 0), "tls_parse_stoc_sct"},
Expand Down Expand Up @@ -972,6 +982,8 @@ static const ERR_STRING_DATA SSL_str_reasons[] = {
"missing ecdsa signing cert"},
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_FATAL), "missing fatal"},
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_PARAMETERS), "missing parameters"},
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_QUIC_TRANSPORT_PARAMETERS_EXTENSION),
"missing quic transport parameters extension"},
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_CERTIFICATE),
"missing rsa certificate"},
{ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_ENCRYPTING_CERT),
Expand Down
1 change: 1 addition & 0 deletions ssl/ssl_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -1212,6 +1212,7 @@ void SSL_free(SSL *s)

#ifndef OPENSSL_NO_QUIC
OPENSSL_free(s->ext.quic_transport_params);
OPENSSL_free(s->ext.peer_quic_transport_params_draft);
OPENSSL_free(s->ext.peer_quic_transport_params);
BUF_MEM_free(s->quic_buf);
while (s->quic_input_data_head != NULL) {
Expand Down
10 changes: 10 additions & 0 deletions ssl/ssl_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -722,6 +722,7 @@ typedef enum tlsext_index_en {
TLSEXT_IDX_cryptopro_bug,
TLSEXT_IDX_early_data,
TLSEXT_IDX_certificate_authorities,
TLSEXT_IDX_quic_transport_params_draft,
TLSEXT_IDX_quic_transport_params,
TLSEXT_IDX_padding,
TLSEXT_IDX_psk,
Expand Down Expand Up @@ -1399,6 +1400,8 @@ struct ssl_st {
#ifndef OPENSSL_NO_QUIC
uint8_t *quic_transport_params;
size_t quic_transport_params_len;
uint8_t *peer_quic_transport_params_draft;
size_t peer_quic_transport_params_draft_len;
uint8_t *peer_quic_transport_params;
size_t peer_quic_transport_params_len;
#endif
Expand All @@ -1408,6 +1411,13 @@ struct ssl_st {
OSSL_ENCRYPTION_LEVEL quic_read_level;
OSSL_ENCRYPTION_LEVEL quic_write_level;
OSSL_ENCRYPTION_LEVEL quic_latest_level_received;
/* defaults to 0, but can be set to:
* - TLSEXT_TYPE_quic_transport_parameters_draft
* - TLSEXT_TYPE_quic_transport_parameters
* Client: if 0, send both
* Server: if 0, use same version as client sent
*/
int quic_transport_version;
BUF_MEM *quic_buf; /* buffer incoming handshake messages */
QUIC_DATA *quic_input_data_head;
QUIC_DATA *quic_input_data_tail;
Expand Down
41 changes: 39 additions & 2 deletions ssl/ssl_quic.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,45 @@ void SSL_get_peer_quic_transport_params(const SSL *ssl,
const uint8_t **out_params,
size_t *out_params_len)
{
*out_params = ssl->ext.peer_quic_transport_params;
*out_params_len = ssl->ext.peer_quic_transport_params_len;
if (ssl->ext.peer_quic_transport_params_len) {
*out_params = ssl->ext.peer_quic_transport_params;
*out_params_len = ssl->ext.peer_quic_transport_params_len;
} else {
*out_params = ssl->ext.peer_quic_transport_params_draft;
*out_params_len = ssl->ext.peer_quic_transport_params_draft_len;
}
}

/* returns 0 if both are set, -1 if neither, otherwise version */
int SSL_get_peer_quic_transport_version(const SSL *ssl)
{
if (ssl->ext.peer_quic_transport_params_len != 0
&& ssl->ext.peer_quic_transport_params_draft_len != 0)
return -1;
if (ssl->ext.peer_quic_transport_params_len != 0)
return TLSEXT_TYPE_quic_transport_parameters;
if (ssl->ext.peer_quic_transport_params_draft_len != 0)
return TLSEXT_TYPE_quic_transport_parameters_draft;

return -1;
}

void SSL_set_quic_use_legacy_codepoint(SSL *ssl, int use_legacy)
{
if (use_legacy)
ssl->quic_transport_version = TLSEXT_TYPE_quic_transport_parameters_draft;
else
ssl->quic_transport_version = TLSEXT_TYPE_quic_transport_parameters;
}

void SSL_set_quic_transport_version(SSL *ssl, int version)
{
ssl->quic_transport_version = version;
}

int SSL_get_quic_transport_version(const SSL *ssl)
{
return ssl->quic_transport_version;
}

size_t SSL_quic_max_handshake_flight_len(const SSL *ssl, OSSL_ENCRYPTION_LEVEL level)
Expand Down
40 changes: 40 additions & 0 deletions ssl/statem/extensions.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ static int final_maxfragmentlen(SSL *s, unsigned int context, int sent);
static int init_post_handshake_auth(SSL *s, unsigned int context);
#ifndef OPENSSL_NO_QUIC
static int init_quic_transport_params(SSL *s, unsigned int context);
static int final_quic_transport_params_draft(SSL *s, unsigned int context, int sent);
static int final_quic_transport_params(SSL *s, unsigned int context, int sent);
#endif

Expand Down Expand Up @@ -378,6 +379,15 @@ static const EXTENSION_DEFINITION ext_defs[] = {
tls_construct_certificate_authorities, NULL,
},
#ifndef OPENSSL_NO_QUIC
{
TLSEXT_TYPE_quic_transport_parameters_draft,
SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
| SSL_EXT_TLS_IMPLEMENTATION_ONLY | SSL_EXT_TLS1_3_ONLY,
init_quic_transport_params,
tls_parse_ctos_quic_transport_params_draft, tls_parse_stoc_quic_transport_params_draft,
tls_construct_stoc_quic_transport_params_draft, tls_construct_ctos_quic_transport_params_draft,
final_quic_transport_params_draft,
},
{
TLSEXT_TYPE_quic_transport_parameters,
SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS
Expand Down Expand Up @@ -1737,8 +1747,38 @@ static int init_quic_transport_params(SSL *s, unsigned int context)
return 1;
}

static int final_quic_transport_params_draft(SSL *s, unsigned int context,
int sent)
{
return 1;
}

static int final_quic_transport_params(SSL *s, unsigned int context, int sent)
{
/* called after final_quic_transport_params_draft */
if (SSL_IS_QUIC(s)) {
if (s->ext.peer_quic_transport_params_len == 0
&& s->ext.peer_quic_transport_params_draft_len == 0) {
SSLfatal(s, SSL_AD_MISSING_EXTENSION,
SSL_F_FINAL_QUIC_TRANSPORT_PARAMS,
SSL_R_MISSING_QUIC_TRANSPORT_PARAMETERS_EXTENSION);
return 0;
}
/* if we got both, discard the one we can't use */
if (s->ext.peer_quic_transport_params_len != 0
&& s->ext.peer_quic_transport_params_draft_len != 0) {
if (s->quic_transport_version == TLSEXT_TYPE_quic_transport_parameters_draft) {
OPENSSL_free(s->ext.peer_quic_transport_params);
s->ext.peer_quic_transport_params = NULL;
s->ext.peer_quic_transport_params_len = 0;
} else {
OPENSSL_free(s->ext.peer_quic_transport_params_draft);
s->ext.peer_quic_transport_params_draft = NULL;
s->ext.peer_quic_transport_params_draft_len = 0;
}
}
}

return 1;
}
#endif
Loading

0 comments on commit 8f4f7f2

Please sign in to comment.