aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-11-09 15:24:43 -0800
committerGarrett D'Amore <garrett@damore.org>2024-11-09 16:27:45 -0800
commit0058b766b91f08b34dcef3c7bb55b216099f3f66 (patch)
tree5ac1fa105d707018cdfa9f5244da5837a8c31601 /src/core
parent150d80c2c62ce3693dbbd0256c16337879c7d825 (diff)
downloadnng-0058b766b91f08b34dcef3c7bb55b216099f3f66.tar.gz
nng-0058b766b91f08b34dcef3c7bb55b216099f3f66.tar.bz2
nng-0058b766b91f08b34dcef3c7bb55b216099f3f66.zip
TLS configuration changed to use discret _set_tls and _get_tls functions.
This is simpler, and more reliable than using socket options.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/dialer.c18
-rw-r--r--src/core/dialer.h4
-rw-r--r--src/core/listener.c19
-rw-r--r--src/core/listener.h2
-rw-r--r--src/core/stream.c60
-rw-r--r--src/core/stream.h8
6 files changed, 110 insertions, 1 deletions
diff --git a/src/core/dialer.c b/src/core/dialer.c
index 722a0868..0ee2d361 100644
--- a/src/core/dialer.c
+++ b/src/core/dialer.c
@@ -558,6 +558,24 @@ nni_dialer_getopt(
return (nni_sock_getopt(d->d_sock, name, valp, szp, t));
}
+int
+nni_dialer_get_tls(nni_dialer *d, nng_tls_config **cfgp)
+{
+ if (d->d_ops.d_get_tls == NULL) {
+ return (NNG_ENOTSUP);
+ }
+ return (d->d_ops.d_get_tls(d->d_data, cfgp));
+}
+
+int
+nni_dialer_set_tls(nni_dialer *d, nng_tls_config *cfg)
+{
+ if (d->d_ops.d_set_tls == NULL) {
+ return (NNG_ENOTSUP);
+ }
+ return (d->d_ops.d_set_tls(d->d_data, cfg));
+}
+
void
nni_dialer_add_stat(nni_dialer *d, nni_stat_item *item)
{
diff --git a/src/core/dialer.h b/src/core/dialer.h
index 7bc1547d..97a24e4a 100644
--- a/src/core/dialer.h
+++ b/src/core/dialer.h
@@ -1,5 +1,5 @@
//
-// Copyright 2021 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
// Copyright 2018 Devolutions <info@devolutions.net>
//
@@ -25,6 +25,8 @@ extern int nni_dialer_setopt(
nni_dialer *, const char *, const void *, size_t, nni_type);
extern int nni_dialer_getopt(
nni_dialer *, const char *, void *, size_t *, nni_type);
+extern int nni_dialer_get_tls(nni_dialer *, nng_tls_config **);
+extern int nni_dialer_set_tls(nni_dialer *, nng_tls_config *);
extern void nni_dialer_add_stat(nni_dialer *, nni_stat_item *);
extern void nni_dialer_bump_error(nni_dialer *, int);
diff --git a/src/core/listener.c b/src/core/listener.c
index 65fe5a9f..38a7d323 100644
--- a/src/core/listener.c
+++ b/src/core/listener.c
@@ -9,6 +9,7 @@
// found online at https://opensource.org/licenses/MIT.
//
+#include "core/defs.h"
#include "core/nng_impl.h"
#include "core/strs.h"
#include "nng/nng.h"
@@ -507,6 +508,24 @@ nni_listener_getopt(
return (nni_sock_getopt(l->l_sock, name, val, szp, t));
}
+int
+nni_listener_get_tls(nni_listener *l, nng_tls_config **cfgp)
+{
+ if (l->l_ops.l_get_tls == NULL) {
+ return (NNG_ENOTSUP);
+ }
+ return (l->l_ops.l_get_tls(l->l_data, cfgp));
+}
+
+int
+nni_listener_set_tls(nni_listener *l, nng_tls_config *cfg)
+{
+ if (l->l_ops.l_set_tls == NULL) {
+ return (NNG_ENOTSUP);
+ }
+ return (l->l_ops.l_set_tls(l->l_data, cfg));
+}
+
void
nni_listener_add_stat(nni_listener *l, nni_stat_item *item)
{
diff --git a/src/core/listener.h b/src/core/listener.h
index c6c0b5d3..67c80be0 100644
--- a/src/core/listener.h
+++ b/src/core/listener.h
@@ -25,6 +25,8 @@ extern int nni_listener_setopt(
nni_listener *, const char *, const void *, size_t, nni_type);
extern int nni_listener_getopt(
nni_listener *, const char *, void *, size_t *, nni_type);
+extern int nni_listener_get_tls(nni_listener *, nng_tls_config **);
+extern int nni_listener_set_tls(nni_listener *, nng_tls_config *);
extern void nni_listener_add_stat(nni_listener *, nni_stat_item *);
extern void nni_listener_bump_error(nni_listener *, int);
diff --git a/src/core/stream.c b/src/core/stream.c
index 4ac27705..78029ddc 100644
--- a/src/core/stream.c
+++ b/src/core/stream.c
@@ -214,6 +214,24 @@ nni_stream_dialer_set(nng_stream_dialer *d, const char *nm, const void *data,
return (d->sd_set(d, nm, data, sz, t));
}
+int
+nni_stream_dialer_get_tls(nng_stream_dialer *d, nng_tls_config **cfgp)
+{
+ if (d->sd_get_tls == NULL) {
+ return (NNG_ENOTSUP);
+ }
+ return (d->sd_get_tls(d, cfgp));
+}
+
+int
+nni_stream_dialer_set_tls(nng_stream_dialer *d, nng_tls_config *cfg)
+{
+ if (d->sd_set_tls == NULL) {
+ return (NNG_ENOTSUP);
+ }
+ return (d->sd_set_tls(d, cfg));
+}
+
void
nng_stream_listener_close(nng_stream_listener *l)
{
@@ -253,6 +271,24 @@ nni_stream_listener_set(nng_stream_listener *l, const char *nm,
}
int
+nni_stream_listener_get_tls(nng_stream_listener *l, nng_tls_config **cfgp)
+{
+ if (l->sl_get_tls == NULL) {
+ return (NNG_ENOTSUP);
+ }
+ return (l->sl_get_tls(l, cfgp));
+}
+
+int
+nni_stream_listener_set_tls(nng_stream_listener *l, nng_tls_config *cfg)
+{
+ if (l->sl_set_tls == NULL) {
+ return (NNG_ENOTSUP);
+ }
+ return (l->sl_set_tls(l, cfg));
+}
+
+int
nng_stream_listener_alloc_url(nng_stream_listener **lp, const nng_url *url)
{
int rv;
@@ -387,6 +423,12 @@ nng_stream_dialer_get_addr(
}
int
+nng_stream_dialer_get_tls(nng_stream_dialer *d, nng_tls_config **cfgp)
+{
+ return (nni_stream_dialer_get_tls(d, cfgp));
+}
+
+int
nng_stream_listener_get_int(nng_stream_listener *l, const char *n, int *v)
{
return (nni_stream_listener_get(l, n, v, NULL, NNI_TYPE_INT32));
@@ -438,6 +480,12 @@ nng_stream_listener_get_addr(
}
int
+nng_stream_listener_get_tls(nng_stream_listener *l, nng_tls_config **cfgp)
+{
+ return (nni_stream_listener_get_tls(l, cfgp));
+}
+
+int
nng_stream_dialer_set_int(nng_stream_dialer *d, const char *n, int v)
{
return (nni_stream_dialer_set(d, n, &v, sizeof(v), NNI_TYPE_INT32));
@@ -489,6 +537,12 @@ nng_stream_dialer_set_addr(
}
int
+nng_stream_dialer_set_tls(nng_stream_dialer *d, nng_tls_config *cfg)
+{
+ return (nni_stream_dialer_set_tls(d, cfg));
+}
+
+int
nng_stream_listener_set_int(nng_stream_listener *l, const char *n, int v)
{
return (nni_stream_listener_set(l, n, &v, sizeof(v), NNI_TYPE_INT32));
@@ -543,3 +597,9 @@ nng_stream_listener_set_addr(
return (
nni_stream_listener_set(l, n, v, sizeof(*v), NNI_TYPE_SOCKADDR));
}
+
+int
+nng_stream_listener_set_tls(nng_stream_listener *l, nng_tls_config *cfg)
+{
+ return (nni_stream_listener_set_tls(l, cfg));
+}
diff --git a/src/core/stream.h b/src/core/stream.h
index eb3cb93b..0fa79a47 100644
--- a/src/core/stream.h
+++ b/src/core/stream.h
@@ -25,11 +25,15 @@ extern int nni_stream_dialer_get(
nng_stream_dialer *, const char *, void *, size_t *, nni_type);
extern int nni_stream_dialer_set(
nng_stream_dialer *, const char *, const void *, size_t, nni_type);
+extern int nni_stream_dialer_set_tls(nng_stream_dialer *, nng_tls_config *);
+extern int nni_stream_dialer_get_tls(nng_stream_dialer *, nng_tls_config **);
extern int nni_stream_listener_get(
nng_stream_listener *, const char *, void *, size_t *, nni_type);
extern int nni_stream_listener_set(
nng_stream_listener *, const char *, const void *, size_t, nni_type);
+extern int nni_stream_listener_set_tls(nng_stream_listener *, nng_tls_config *);
+extern int nni_stream_listener_get_tls(nng_stream_listener *, nng_tls_config **);
// This is the common implementation of a connected byte stream. It should be
// the first element of any implementation. Applications are not permitted to
@@ -50,6 +54,8 @@ struct nng_stream_dialer {
void (*sd_dial)(void *, nng_aio *);
int (*sd_get)(void *, const char *, void *, size_t *, nni_type);
int (*sd_set)(void *, const char *, const void *, size_t, nni_type);
+ int (*sd_get_tls)(void *, nng_tls_config **);
+ int (*sd_set_tls)(void *, nng_tls_config *);
};
// Listener implementation. Stream listeners accept connections and create
@@ -61,6 +67,8 @@ struct nng_stream_listener {
void (*sl_accept)(void *, nng_aio *);
int (*sl_get)(void *, const char *, void *, size_t *, nni_type);
int (*sl_set)(void *, const char *, const void *, size_t, nni_type);
+ int (*sl_get_tls)(void *, nng_tls_config **);
+ int (*sl_set_tls)(void *, nng_tls_config *);
};
#endif // CORE_STREAM_H