e86709ee5a92755e6927977791c37980af6783b4
[sip-router] / modules / tls / tls_cfg.h
1 /* 
2  * $Id$
3  * 
4  * Copyright (C) 2010 iptelorg GmbH
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 /** tls runtime configuration.
19  * @filetls_cfg.h
20  * @ingroup: tls
21  * Module: @ref tls
22  */
23 /*
24  * History:
25  * --------
26  *  2010-05-27  initial version (andrei)
27 */
28
29 #ifndef __tls_cfg_h
30 #define __tls_cfg_h
31
32 #include "../../str.h"
33 #include "../../cfg/cfg.h"
34
35
36 /* maximum accepted lifetime (maximum possible is  ~ MAXINT/2)
37  *  (it should be kept in sync w/ MAX_TCP_CON_LIFETIME from tcp_main.c:
38  *   MAX_TLS_CON_LIFETIME <= MAX_TCP_CON_LIFETIME )*/
39 #define MAX_TLS_CON_LIFETIME    (1U<<(sizeof(ticks_t)*8-1))
40
41
42
43 struct cfg_group_tls {
44         int force_run;
45         str method;
46         int verify_cert;
47         int verify_depth;
48         int require_cert;
49         str private_key;
50         str ca_list;
51         str crl;
52         str certificate;
53         str cipher_list;
54         int session_cache;
55         str session_id;
56         str config_file;
57         int log;
58         int debug;
59         int con_lifetime;
60         int disable_compression;
61         /* release internal openssl read or write buffer when they are no longer
62          * used (complete read or write that does not have to buffer anything).
63          * Should be used together with tls_free_list_max_len. Might have some
64          * performance impact (and extra *malloc pressure), but has also the
65          * potential of saving a lot of memory (at least 32k/idle connection in the
66          * default config, or ~ 16k+tls_max_send_fragment)) */
67         int ssl_release_buffers;
68         /* maximum length of free/unused memory buffers/chunks per connection.
69          * Setting it to 0 would cause any unused buffers to be immediately freed
70          * and hence a lower memory footprint (at the cost of a possible
71          * performance decrease and more *malloc pressure).
72          * Too large value would result in extra memory consumption.
73          * The default is 32 in openssl.
74          * For lowest memory usage set it to 0 and tls_mode_release_buffers to 1
75          */
76         int ssl_freelist_max;
77         /* maximum number of bytes (clear text) sent into one record.
78          * The default and maximum value are ~16k. Lower values would lead to a
79          * lower  memory footprint.
80          * Values lower then the typical  app. write size might decrease
81          * performance (extra write() syscalls), so it should be kept ~2k for ser.
82          */
83         int ssl_max_send_fragment;
84         /* enable read ahead. Should increase performance (1 less syscall when
85          * enabled, else openssl makes 1 read() for each record header and another
86          * for the content), but might interact with SSL_pending() (not used right
87          * now)
88          */
89         int ssl_read_ahead;
90         int low_mem_threshold1;
91         int low_mem_threshold2;
92         int ct_wq_max; /* maximum overall tls write clear text queued bytes */
93         int con_ct_wq_max; /* maximum clear text write queued bytes per con */
94         int ct_wq_blk_size; /* minimum block size for the clear text write queue */
95         int send_close_notify; /* if set try to be nice and send a shutdown alert
96                                                     before closing the tcp connection */
97 };
98
99
100 extern struct cfg_group_tls default_tls_cfg;
101 extern void* tls_cfg;
102 extern cfg_def_t tls_cfg_def[];
103
104
105 extern int fix_tls_cfg(struct cfg_group_tls* cfg);
106
107 #endif /*__tls_cfg_h*/
108
109 /* vi: set ts=4 sw=4 tw=79:ai:cindent: */