= nng_tls_config_alloc(3tls) // // Copyright 2019 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // // This document is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this // file was obtained (LICENSE.txt). A copy of the license may also be // found online at https://opensource.org/licenses/MIT. // == NAME nng_tls_config_alloc - allocate TLS configuration object == SYNOPSIS [source, c] ---- #include #include typedef enum nng_tls_mode { NNG_TLS_MODE_CLIENT, NNG_TLS_MODE_SERVER } nng_tls_mode; int nng_tls_config_alloc(nng_tls_config **cfgp, nng_tls_mode mode); ---- == DESCRIPTION The `nng_tls_config_alloc()` function creates a newly initialized https://tools.ietf.org/html/rfc5246[Transport Layer Security]) configuration object, and stores a pointer to it in the value pointed to by _cfgp_. This object is initialized for use when acting as either a client (`NNG_TLS_MODE_CLIENT`) or as a server (`NNG_TLS_MODE_SERVER`), depending on the value of _mode_. A TLS object can be further modified by functions that set the security keys used, peer certificates, protocol policies, and so forth. A single TLS configuration object can be used with multiple TLS streams or services. The underlying system uses reference counting to ensure that object is not inadvertently freed while in use. A configuration object created with `nng_tls_config_alloc()` starts with a reference count of one. The reference count may be incremented using xref:nng_tls_config_hold.3tls.adoc[`nng_tls_config_hold()`] and may be decremented with xref:nng_tls_config_free.3tls.adoc[`nng_tls_config_free()`]. Also note that a TLS configuration object becomes "`read-only`" after it is first used with a service. After this points, attempts to apply further changes to the configuration will result in `NNG_EBUSY`. == RETURN VALUES This function returns 0 on success, and non-zero otherwise. == ERRORS [horizontal] `NNG_ENOMEM`:: Insufficient memory is available. `NNG_EINVAL`:: An invalid _mode_ was specified. == SEE ALSO [.text-left] xref:nng_strerror.3.adoc[nng_strerror(3)], xref:nng_tls_config_auth_mode.3tls.adoc[nng_tls_config_auth_mode(3tls)], xref:nng_tls_config_ca_chain.3tls.adoc[nng_tls_config_ca_chain(3tls)], xref:nng_tls_config_own_cert.3tls.adoc[nng_tls_config_own_cert(3tls)], xref:nng_tls_config_free.3tls.adoc[nng_tls_config_free(3tls)], xref:nng_tls_config_hold.3tls.adoc[nng_tls_config_hold(3tls)], xref:nng_tls_config_server_name.3tls.adoc[nng_tls_config_server_name(3tls)], xref:nng_tls_config.5.adoc[nng_tls_config(5)], xref:nng.7.adoc[nng(7)]