size_t token_len;
} QUIC_TOKEN;
-SSL_TOKEN_STORE_HANDLE *ossl_quic_new_token_store(void);
-void ossl_quic_free_token_store(SSL_TOKEN_STORE_HANDLE *hdl);
-SSL_TOKEN_STORE_HANDLE *ossl_quic_get0_token_store(SSL_CTX *ctx);
-int ossl_quic_set1_token_store(SSL_CTX *ctx, SSL_TOKEN_STORE_HANDLE *hdl);
+SSL_TOKEN_STORE *ossl_quic_new_token_store(void);
+void ossl_quic_free_token_store(SSL_TOKEN_STORE *hdl);
+SSL_TOKEN_STORE *ossl_quic_get0_token_store(SSL_CTX *ctx);
+int ossl_quic_set1_token_store(SSL_CTX *ctx, SSL_TOKEN_STORE *hdl);
int ossl_quic_set_peer_token(SSL_CTX *ctx, BIO_ADDR *peer,
const uint8_t *token, size_t token_len);
int ossl_quic_get_peer_token(SSL_CTX *ctx, BIO_ADDR *peer,
__owur SSL *SSL_get0_connection(SSL *s);
__owur int SSL_is_connection(SSL *s);
-typedef void SSL_TOKEN_STORE_HANDLE;
-__owur SSL_TOKEN_STORE_HANDLE *SSL_CTX_get0_token_store(SSL_CTX *ctx);
-__owur int SSL_CTX_set1_token_store(SSL_CTX *ctx, SSL_TOKEN_STORE_HANDLE *hdl);
+typedef struct ssl_token_store_st SSL_TOKEN_STORE;
+__owur SSL_TOKEN_STORE *SSL_CTX_get0_token_store(SSL_CTX *ctx);
+__owur int SSL_CTX_set1_token_store(SSL_CTX *ctx, SSL_TOKEN_STORE *hdl);
__owur int SSL_is_listener(SSL *ssl);
__owur SSL *SSL_get0_listener(SSL *s);
SSL *ossl_quic_new_from_listener(SSL *ssl, uint64_t flags)
{
QCTX ctx;
- QUIC_CONNECTION *qc;
+ QUIC_CONNECTION *qc = NULL;
QUIC_LISTENER *ql;
SSL_CONNECTION *sc = NULL;
* ctx as a client, so we should allocate one now
*/
if (ssl->ctx->tokencache == NULL)
- ssl->ctx->tokencache = ossl_quic_new_token_store();
+ if ((ssl->ctx->tokencache = ossl_quic_new_token_store()) == NULL)
+ goto err;
if ((qc = OPENSSL_zalloc(sizeof(*qc))) == NULL) {
QUIC_RAISE_NON_NORMAL_ERROR(NULL, ERR_R_CRYPTO_LIB, NULL);
DEFINE_LHASH_OF_EX(QUIC_TOKEN);
-typedef struct ssl_token_store_st {
+struct ssl_token_store_st {
LHASH_OF(QUIC_TOKEN) *cache;
CRYPTO_REF_COUNT references;
CRYPTO_MUTEX *mutex;
-} SSL_TOKEN_STORE;
+};
static uint64_t fnv1a_hash_token(uint8_t *key, size_t len)
{
return memcmp(a->hashkey, b->hashkey, a->hashkey_len);
}
-SSL_TOKEN_STORE_HANDLE *ossl_quic_new_token_store(void)
+SSL_TOKEN_STORE *ossl_quic_new_token_store(void)
{
int ok = 0;
SSL_TOKEN_STORE *newcache = OPENSSL_zalloc(sizeof(SSL_TOKEN_STORE));
ossl_quic_free_token_store(newcache);
newcache = NULL;
}
- return (SSL_TOKEN_STORE_HANDLE *)newcache;
+ return newcache;
}
static void free_this_token(QUIC_TOKEN *tok)
ossl_quic_free_peer_token(tok);
}
-void ossl_quic_free_token_store(SSL_TOKEN_STORE_HANDLE *hdl)
+void ossl_quic_free_token_store(SSL_TOKEN_STORE *hdl)
{
int refs;
- SSL_TOKEN_STORE *c = (SSL_TOKEN_STORE *)hdl;
- if (c == NULL)
+ if (hdl == NULL)
return;
- if (!CRYPTO_DOWN_REF(&c->references, &refs))
+ if (!CRYPTO_DOWN_REF(&hdl->references, &refs))
return;
if (refs > 0)
return;
/* last reference, we can clean up */
- ossl_crypto_mutex_free(&c->mutex);
- lh_QUIC_TOKEN_doall(c->cache, free_this_token);
- lh_QUIC_TOKEN_free(c->cache);
- OPENSSL_free(c);
+ ossl_crypto_mutex_free(&hdl->mutex);
+ lh_QUIC_TOKEN_doall(hdl->cache, free_this_token);
+ lh_QUIC_TOKEN_free(hdl->cache);
+ OPENSSL_free(hdl);
return;
}
-SSL_TOKEN_STORE_HANDLE *ossl_quic_get0_token_store(SSL_CTX *ctx)
+SSL_TOKEN_STORE *ossl_quic_get0_token_store(SSL_CTX *ctx)
{
return ctx->tokencache;
}
-int ossl_quic_set1_token_store(SSL_CTX *ctx, SSL_TOKEN_STORE_HANDLE *hdl)
+int ossl_quic_set1_token_store(SSL_CTX *ctx, SSL_TOKEN_STORE *hdl)
{
SSL_TOKEN_STORE *new = hdl;
- SSL_TOKEN_STORE_HANDLE *old = ctx->tokencache;
+ SSL_TOKEN_STORE *old = ctx->tokencache;
int ref;
if (!CRYPTO_UP_REF(&new->references, &ref))