4 * \brief SSL session cache implementation
6 * Copyright (C) 2006-2013, ARM Limited, All Rights Reserved
8 * This file is part of mbed TLS (https://polarssl.org)
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License along
21 * with this program; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #ifndef POLARSSL_SSL_CACHE_H
25 #define POLARSSL_SSL_CACHE_H
29 #if defined(POLARSSL_THREADING_C)
30 #include "threading.h"
34 * \name SECTION: Module settings
36 * The configuration options you can set for this module are in this section.
37 * Either change them in config.h or define them on the compiler command line.
41 #if !defined(SSL_CACHE_DEFAULT_TIMEOUT)
42 #define SSL_CACHE_DEFAULT_TIMEOUT 86400 /*!< 1 day */
45 #if !defined(SSL_CACHE_DEFAULT_MAX_ENTRIES)
46 #define SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /*!< Maximum entries in cache */
49 /* \} name SECTION: Module settings */
55 typedef struct _ssl_cache_context ssl_cache_context
;
56 typedef struct _ssl_cache_entry ssl_cache_entry
;
59 * \brief This structure is used for storing cache entries
61 struct _ssl_cache_entry
63 #if defined(POLARSSL_HAVE_TIME)
64 time_t timestamp
; /*!< entry timestamp */
66 ssl_session session
; /*!< entry session */
67 #if defined(POLARSSL_X509_CRT_PARSE_C)
68 x509_buf peer_cert
; /*!< entry peer_cert */
70 ssl_cache_entry
*next
; /*!< chain pointer */
74 * \brief Cache context
76 struct _ssl_cache_context
78 ssl_cache_entry
*chain
; /*!< start of the chain */
79 int timeout
; /*!< cache entry timeout */
80 int max_entries
; /*!< maximum entries */
81 #if defined(POLARSSL_THREADING_C)
82 threading_mutex_t mutex
; /*!< mutex */
87 * \brief Initialize an SSL cache context
89 * \param cache SSL cache context
91 void ssl_cache_init( ssl_cache_context
*cache
);
94 * \brief Cache get callback implementation
95 * (Thread-safe if POLARSSL_THREADING_C is enabled)
97 * \param data SSL cache context
98 * \param session session to retrieve entry for
100 int ssl_cache_get( void *data
, ssl_session
*session
);
103 * \brief Cache set callback implementation
104 * (Thread-safe if POLARSSL_THREADING_C is enabled)
106 * \param data SSL cache context
107 * \param session session to store entry for
109 int ssl_cache_set( void *data
, const ssl_session
*session
);
111 #if defined(POLARSSL_HAVE_TIME)
113 * \brief Set the cache timeout
114 * (Default: SSL_CACHE_DEFAULT_TIMEOUT (1 day))
116 * A timeout of 0 indicates no timeout.
118 * \param cache SSL cache context
119 * \param timeout cache entry timeout in seconds
121 void ssl_cache_set_timeout( ssl_cache_context
*cache
, int timeout
);
122 #endif /* POLARSSL_HAVE_TIME */
125 * \brief Set the cache timeout
126 * (Default: SSL_CACHE_DEFAULT_MAX_ENTRIES (50))
128 * \param cache SSL cache context
129 * \param max cache entry maximum
131 void ssl_cache_set_max_entries( ssl_cache_context
*cache
, int max
);
134 * \brief Free referenced items in a cache context and clear memory
136 * \param cache SSL cache context
138 void ssl_cache_free( ssl_cache_context
*cache
);
144 #endif /* ssl_cache.h */