blob: 79aaee9a27a07e7803f742a0d5959b5e43b0f52f [file] [log] [blame]
Michal Vasko45f298f2016-01-29 10:26:26 +01001/**
2 * \file session_server_ch.h
3 * \author Michal Vasko <mvasko@cesnet.cz>
4 * \brief libnetconf2 Call Home session server manipulation
5 *
6 * Copyright (c) 2015 CESNET, z.s.p.o.
7 *
Radek Krejci9b81f5b2016-02-24 13:14:49 +01008 * This source code is licensed under BSD 3-Clause License (the "License").
9 * You may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
Michal Vaskoafd416b2016-02-25 14:51:46 +010011 *
Radek Krejci9b81f5b2016-02-24 13:14:49 +010012 * https://opensource.org/licenses/BSD-3-Clause
Michal Vasko45f298f2016-01-29 10:26:26 +010013 */
14
15#ifndef NC_SESSION_SERVER_CH_H_
16#define NC_SESSION_SERVER_CH_H_
17
18#include <stdint.h>
19#include <libyang/libyang.h>
20
21#include "session.h"
22#include "netconf.h"
23
Michal Vasko2e6defd2016-10-07 15:48:15 +020024#if defined(NC_ENABLED_SSH) || defined(NC_ENABLED_TLS)
Michal Vasko45f298f2016-01-29 10:26:26 +010025
26/**
Michal Vasko2e6defd2016-10-07 15:48:15 +020027 * @brief Add a new Call Home client.
Michal Vasko45f298f2016-01-29 10:26:26 +010028 *
Michal Vasko2e6defd2016-10-07 15:48:15 +020029 * @param[in] name Arbitrary unique client name.
30 * @param[in] ti Transport protocol to use.
31 * @return 0 on success, -1 on error.
Michal Vasko45f298f2016-01-29 10:26:26 +010032 */
Michal Vasko2e6defd2016-10-07 15:48:15 +020033int nc_server_ch_add_client(const char *name, NC_TRANSPORT_IMPL ti);
34
35/**
36 * @brief Drop any connections, stop connecting and remove a client.
37 *
38 * @param[in] name Client name. NULL matches all the clients.
39 * @return 0 on success, -1 on not finding any match.
40 */
41int nc_server_ch_del_client(const char *name);
42
43/**
44 * @brief Add a new Call Home client endpoint.
45 *
46 * @param[in] client_name Existing client name.
47 * @param[in] endpt_name Arbitrary unique (within the client) endpoint name.
48 * @return 0 on success, -1 on error.
49 */
50int nc_server_ch_client_add_endpt(const char *client_name, const char *endpt_name);
51
52/**
53 * @brief Remove a Call Home client endpoint.
54 *
55 * @param[in] client_name Existing client name.
56 * @param[in] endpt_name Existing endpoint of \p client_name. NULL matches all endpoints.
57 * @return 0 on success, -1 on error.
58 */
59int nc_server_ch_client_del_endpt(const char *client_name, const char *endpt_name);
60
61/**
62 * @brief Change Call Home client endpoint listening address.
63 *
64 * On error the previous listening socket (if any) is left untouched.
65 *
66 * @param[in] client_name Existing Call Home client name.
67 * @param[in] endpt_name Existing endpoint name of \p client_name.
68 * @param[in] address New listening address.
69 * @return 0 on success, -1 on error.
70 */
71int nc_server_ch_client_endpt_set_address(const char *client_name, const char *endpt_name, const char *address);
72
73/**
74 * @brief Change Call Home client endpoint listening port.
75 *
76 * On error the previous listening socket (if any) is left untouched.
77 *
78 * @param[in] client_name Existing Call Home client name.
79 * @param[in] endpt_name Existing endpoint name of \p client_name.
80 * @param[in] port New listening port.
81 * @return 0 on success, -1 on error.
82 */
83int nc_server_ch_client_endpt_set_port(const char *client_name, const char *endpt_name, uint16_t port);
84
85/**
86 * @brief Set Call Home client connection type.
87 *
88 * @param[in] client_name Existing Call Home client name.
89 * @param[in] conn_type Call Home connection type.
90 * @return 0 on success, -1 on error.
91 */
92int nc_server_ch_client_set_conn_type(const char *client_name, NC_CH_CONN_TYPE conn_type);
93
94/**
95 * @brief Set Call Home client persistent connection idle timeout.
96 *
97 * @param[in] client_name Existing Call Home client name.
98 * @param[in] idle_timeout Call Home persistent idle timeout.
99 * @return 0 on success, -1 on error.
100 */
101int nc_server_ch_client_persist_set_idle_timeout(const char *client_name, uint32_t idle_timeout);
102
103/**
104 * @brief Set Call Home client persistent connection keep-alive max wait time.
105 *
106 * @param[in] client_name Existing Call Home client name.
107 * @param[in] max_wait Call Home persistent max wait time for keep-alive reply.
108 * @return 0 on success, -1 on error.
109 */
110int nc_server_ch_client_persist_set_keep_alive_max_wait(const char *client_name, uint16_t max_wait);
111
112/**
113 * @brief Set Call Home client persistent connection keep-alive max attempts.
114 *
115 * @param[in] client_name Existing Call Home client name.
116 * @param[in] max_attempts Call Home persistent keep-alive maximum contact attempts.
117 * @return 0 on success, -1 on error.
118 */
119int nc_server_ch_client_persist_set_keep_alive_max_attempts(const char *client_name, uint8_t max_attempts);
120
121/**
122 * @brief Set Call Home client periodic connection idle timeout.
123 *
124 * @param[in] client_name Existing Call Home client name.
125 * @param[in] idle_timeout Call Home periodic idle timeout.
126 * @return 0 on success, -1 on error.
127 */
128int nc_server_ch_client_period_set_idle_timeout(const char *client_name, uint16_t idle_timeout);
129
130/**
131 * @brief Set Call Home client periodic reconnect timeout.
132 *
133 * @param[in] client_name Existing Call Home client name.
134 * @param[in] reconnect_timeout Call Home periodic reconnect timeout.
135 * @return 0 on success, -1 on error.
136 */
137int nc_server_ch_client_period_set_reconnect_timeout(const char *client_name, uint16_t reconnect_timeout);
138
139/**
140 * @brief Set Call Home client start-with policy.
141 *
142 * @param[in] client_name Existing Call Home client name.
143 * @param[in] start_with Call Home client start-with.
144 * @return 0 on success, -1 on error.
145 */
146int nc_server_ch_client_set_start_with(const char *client_name, NC_CH_START_WITH start_with);
147
148/**
149 * @brief Set Call Home client overall max attempts.
150 *
151 * @param[in] client_name Existing Call Home client name.
152 * @param[in] conn_type Call Home overall max reconnect attempts.
153 * @return 0 on success, -1 on error.
154 */
155int nc_server_ch_client_set_max_attempts(const char *client_name, uint8_t max_attempts);
156
157/**
158 * @brief Establish a Call Home connection with a listening NETCONF client.
159 *
160 * @param[in] client_name Existing client name.
161 * @param[out] session_clb Function that is called for every established session on the client. \p new_session
162 * pointer is internally discarded afterwards.
163 * @return 0 if the thread was successfully created, -1 on error.
164 */
165int nc_connect_ch_client_dispatch(const char *client_name,
166 void (*session_clb)(const char *client_name, struct nc_session *new_session));
167
168#endif /* NC_ENABLED_SSH || NC_ENABLED_TLS */
169
170#ifdef NC_ENABLED_SSH
Michal Vasko45f298f2016-01-29 10:26:26 +0100171
172/**
Michal Vaskoe2713da2016-08-22 16:06:40 +0200173 * @brief Add Call Home SSH host keys the server will identify itself with. Any RSA, DSA, and
174 * ECDSA keys can be added. However, a maximum of one key of each type will be used
175 * during SSH authentication, later keys replacing earlier ones.
176 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200177 * @param[in] client_name Existing Call Home client name.
Michal Vaskod6829ce2016-09-22 09:45:13 +0200178 * @param[in] privkey_path Path to a private key.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200179 * @return 0 on success, -1 on error.
180 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200181int nc_server_ssh_ch_client_add_hostkey(const char *client_name, const char *privkey_path);
Michal Vaskoe2713da2016-08-22 16:06:40 +0200182
183/**
184 * @brief Delete Call Home SSH host keys. Their order is preserved.
Michal Vasko45f298f2016-01-29 10:26:26 +0100185 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200186 * @param[in] client_name Existing Call Home client name.
Michal Vaskod6829ce2016-09-22 09:45:13 +0200187 * @param[in] privkey_path Path to a private key. NULL matches all the keys.
Michal Vasko45f298f2016-01-29 10:26:26 +0100188 * @return 0 on success, -1 on error.
189 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200190int nc_server_ssh_ch_client_del_hostkey(const char *client_name, const char *privkey_path);
Michal Vasko45f298f2016-01-29 10:26:26 +0100191
192/**
193 * @brief Set Call Home SSH banner the server will send to every client.
194 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200195 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100196 * @param[in] banner SSH banner.
197 * @return 0 on success, -1 on error.
198 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200199int nc_server_ssh_ch_client_set_banner(const char *client_name, const char *banner);
Michal Vasko45f298f2016-01-29 10:26:26 +0100200
201/**
202 * @brief Set accepted Call Home SSH authentication methods. All (publickey, password, interactive)
Michal Vaskof0537d82016-01-29 14:42:38 +0100203 * are supported by default.
Michal Vasko45f298f2016-01-29 10:26:26 +0100204 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200205 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100206 * @param[in] auth_methods Accepted authentication methods bit field of NC_SSH_AUTH_TYPE.
207 * @return 0 on success, -1 on error.
208 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200209int nc_server_ssh_ch_client_set_auth_methods(const char *client_name, int auth_methods);
Michal Vasko45f298f2016-01-29 10:26:26 +0100210
211/**
212 * @brief Set Call Home SSH authentication attempts of every client. 3 by default.
213 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200214 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100215 * @param[in] auth_attempts Failed authentication attempts before a client is dropped.
216 * @return 0 on success, -1 on error.
217 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200218int nc_server_ssh_ch_client_set_auth_attempts(const char *client_name, uint16_t auth_attempts);
Michal Vasko45f298f2016-01-29 10:26:26 +0100219
220/**
221 * @brief Set Call Home SSH authentication timeout. 10 seconds by default.
222 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200223 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100224 * @param[in] auth_timeout Number of seconds before an unauthenticated client is dropped.
225 * @return 0 on success, -1 on error.
226 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200227int nc_server_ssh_ch_client_set_auth_timeout(const char *client_name, uint16_t auth_timeout);
Michal Vasko45f298f2016-01-29 10:26:26 +0100228
229/**
230 * @brief Add an authorized Call Home client SSH public key. This public key can be used for
Michal Vaskof0537d82016-01-29 14:42:38 +0100231 * publickey authentication afterwards.
Michal Vasko45f298f2016-01-29 10:26:26 +0100232 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200233 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100234 * @param[in] pubkey_path Path to the public key.
235 * @param[in] username Username that the client with the public key must use.
236 * @return 0 on success, -1 on error.
237 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200238int nc_server_ssh_ch_client_add_authkey(const char *client_name, const char *pubkey_path, const char *username);
Michal Vasko45f298f2016-01-29 10:26:26 +0100239
240/**
241 * @brief Remove an authorized Call Home client SSH public key.
242 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200243 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100244 * @param[in] pubkey_path Path to an authorized public key. NULL matches all the keys.
245 * @param[in] username Username for an authorized public key. NULL matches all the usernames.
246 * @return 0 on success, -1 on not finding any match.
247 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200248int nc_server_ssh_ch_client_del_authkey(const char *client_name, const char *pubkey_path, const char *username);
Michal Vasko45f298f2016-01-29 10:26:26 +0100249
Radek Krejci53691be2016-02-22 13:58:37 +0100250#endif /* NC_ENABLED_SSH */
Michal Vasko45f298f2016-01-29 10:26:26 +0100251
Radek Krejci53691be2016-02-22 13:58:37 +0100252#ifdef NC_ENABLED_TLS
Michal Vasko45f298f2016-01-29 10:26:26 +0100253
254/**
Michal Vasko45f298f2016-01-29 10:26:26 +0100255 * @brief Set server Call Home TLS certificate. Alternative to nc_tls_server_set_cert_path().
Michal Vaskof0537d82016-01-29 14:42:38 +0100256 * There can only be one certificate for each key type, it is replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100257 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200258 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100259 * @param[in] cert Base64-encoded certificate in ASN.1 DER encoding.
260 * @return 0 on success, -1 on error.
261 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200262int nc_server_tls_ch_client_set_cert(const char *client_name, const char *cert);
Michal Vasko45f298f2016-01-29 10:26:26 +0100263
264/**
265 * @brief Set server Call Home TLS certificate. Alternative to nc_tls_server_set_cert().
Michal Vaskof0537d82016-01-29 14:42:38 +0100266 * There can only be one certificate for each key type, it is replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100267 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200268 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100269 * @param[in] cert_path Path to a certificate file in PEM format.
270 * @return 0 on success, -1 on error.
271 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200272int nc_server_tls_ch_client_set_cert_path(const char *client_name, const char *cert_path);
Michal Vasko45f298f2016-01-29 10:26:26 +0100273
274/**
275 * @brief Set server Call Home TLS private key matching the certificate.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200276 * Alternative to nc_server_tls_ch_client_set_key_path().
277 * There can only be one of every key type, it is replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100278 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200279 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100280 * @param[in] privkey Base64-encoded certificate in ASN.1 DER encoding.
281 * @param[in] is_rsa Whether \p privkey are the data of an RSA (1) or DSA (0) key.
282 * @return 0 on success, -1 on error.
283 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200284int nc_server_tls_ch_client_set_key(const char *client_name, const char *privkey, int is_rsa);
Michal Vasko45f298f2016-01-29 10:26:26 +0100285
286/**
287 * @brief Set server Call Home TLS private key matching the certificate.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200288 * Alternative to nc_server_tls_ch_client_set_key().
289 * There can only be one of every key type, it is replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100290 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200291 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100292 * @param[in] privkey_path Path to a private key file in PEM format.
293 * @return 0 on success, -1 on error.
294 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200295int nc_server_tls_ch_client_set_key_path(const char *client_name, const char *privkey_path);
Michal Vasko45f298f2016-01-29 10:26:26 +0100296
297/**
298 * @brief Add a Call Home trusted certificate. Can be both a CA or a client one.
299 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200300 * @param[in] client_name Existing Call Home client name.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200301 * @param[in] cert_name Arbitary name identifying this certificate.
Michal Vaskof0537d82016-01-29 14:42:38 +0100302 * @param[in] cert Base64-enocded certificate in ASN.1 DER encoding.
Michal Vasko45f298f2016-01-29 10:26:26 +0100303 * @return 0 on success, -1 on error.
304 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200305int nc_server_tls_ch_client_add_trusted_cert(const char *client_name, const char *cert_name, const char *cert);
Michal Vasko45f298f2016-01-29 10:26:26 +0100306
307/**
308 * @brief Add a Call Home trusted certificate. Can be both a CA or a client one.
309 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200310 * @param[in] client_name Existing Call Home client name.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200311 * @param[in] cert_name Arbitary name identifying this certificate.
Michal Vasko45f298f2016-01-29 10:26:26 +0100312 * @param[in] cert_path Path to a trusted certificate file in PEM format.
313 * @return 0 on success, -1 on error.
314 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200315int nc_server_tls_ch_client_add_trusted_cert_path(const char *client_name, const char *cert_name, const char *cert_path);
Michal Vasko45f298f2016-01-29 10:26:26 +0100316
317/**
318 * @brief Set trusted Call Home Certificate Authority certificate locations. There
Michal Vaskof0537d82016-01-29 14:42:38 +0100319 * can only be one file and one directory, they are replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100320 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200321 * @param[in] client_name Existing Call Home client name.
Michal Vaskob34b3e82016-02-26 15:04:58 +0100322 * @param[in] ca_file Path to a trusted CA cert store file in PEM format.
323 * Can be NULL.
324 * @param[in] ca_dir Path to a trusted CA cert store hashed directory
325 * (c_rehash utility can be used to create hashes)
326 * with PEM files. Can be NULL.
Michal Vasko45f298f2016-01-29 10:26:26 +0100327 * @return 0 on success, -1 on error.
328 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200329int nc_server_tls_ch_client_set_trusted_ca_paths(const char *client_name, const char *ca_file, const char *ca_dir);
Michal Vasko45f298f2016-01-29 10:26:26 +0100330
331/**
Michal Vasko2e6defd2016-10-07 15:48:15 +0200332 * @brief Remove a set Call Home trusted certificate.
Michal Vaskof0537d82016-01-29 14:42:38 +0100333 * CRLs and CTN entries are not affected.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200334 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200335 * @param[in] client_name Existing Call Home client name.
Michal Vaskoe2713da2016-08-22 16:06:40 +0200336 * @param[in] cert_name Name of the certificate to delete. NULL deletes all the certificates.
337 * @return 0 on success, -1 on not found.
Michal Vasko45f298f2016-01-29 10:26:26 +0100338 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200339int nc_server_tls_ch_client_del_trusted_cert(const char *client_name, const char *cert_name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100340
341/**
342 * @brief Set Call Home Certificate Revocation List locations. There can only be
Michal Vaskof0537d82016-01-29 14:42:38 +0100343 * one file and one directory, they are replaced if already set.
Michal Vasko45f298f2016-01-29 10:26:26 +0100344 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200345 * @param[in] client_name Existing Call Home client name.
Michal Vaskob34b3e82016-02-26 15:04:58 +0100346 * @param[in] crl_file Path to a CRL store file in PEM format. Can be NULL.
347 * @param[in] crl_dir Path to a CRL store hashed directory (c_rehash utility
348 * can be used to create hashes) with PEM files. Can be NULL.
Michal Vasko45f298f2016-01-29 10:26:26 +0100349 * @return 0 on success, -1 on error.
350 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200351int nc_server_tls_ch_client_set_crl_paths(const char *client_name, const char *crl_file, const char *crl_dir);
Michal Vasko45f298f2016-01-29 10:26:26 +0100352
353/**
354 * @brief Destroy and clean Call Home CRLs. Call Home certificates, private keys,
Michal Vaskof0537d82016-01-29 14:42:38 +0100355 * and CTN entries are not affected.
Michal Vasko2e6defd2016-10-07 15:48:15 +0200356 *
357 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100358 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200359void nc_server_tls_ch_client_clear_crls(const char *client_name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100360
361/**
362 * @brief Add a Call Home Cert-to-name entry.
363 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200364 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100365 * @param[in] id Priority of the entry.
366 * @param[in] fingerprint Matching certificate fingerprint.
367 * @param[in] map_type Type of username-certificate mapping.
368 * @param[in] name Specific username if \p map_type == NC_TLS_CTN_SPECIFED. Must be NULL otherwise.
369 * @return 0 on success, -1 on error.
370 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200371int nc_server_tls_ch_client_add_ctn(const char *client_name, uint32_t id, const char *fingerprint,
372 NC_TLS_CTN_MAPTYPE map_type, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100373
374/**
375 * @brief Remove a Call Home Cert-to-name entry.
376 *
Michal Vasko2e6defd2016-10-07 15:48:15 +0200377 * @param[in] client_name Existing Call Home client name.
Michal Vasko45f298f2016-01-29 10:26:26 +0100378 * @param[in] id Priority of the entry. -1 matches all the priorities.
379 * @param[in] fingerprint Fingerprint fo the entry. NULL matches all the fingerprints.
380 * @param[in] map_type Mapping type of the entry. 0 matches all the mapping types.
381 * @param[in] name Specific username for the entry. NULL matches all the usernames.
382 * @return 0 on success, -1 on not finding any match.
383 */
Michal Vasko2e6defd2016-10-07 15:48:15 +0200384int nc_server_tls_ch_client_del_ctn(const char *client_name, int64_t id, const char *fingerprint,
385 NC_TLS_CTN_MAPTYPE map_type, const char *name);
Michal Vasko45f298f2016-01-29 10:26:26 +0100386
Radek Krejci53691be2016-02-22 13:58:37 +0100387#endif /* NC_ENABLED_TLS */
Michal Vasko45f298f2016-01-29 10:26:26 +0100388
389#endif /* NC_SESSION_SERVER_CH_H_ */