aboutsummaryrefslogtreecommitdiff
path: root/src/supplemental/tls/tls_common.h
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2025-04-27 18:40:40 -0700
committerGarrett D'Amore <garrett@damore.org>2025-06-01 22:49:00 -0700
commit8bcb82d245a5fce1bd519e2f99250dedf11e763d (patch)
tree4d663bedbb043b9d599f061d7f2b5f9509c8f390 /src/supplemental/tls/tls_common.h
parent08400bd437149c4fb31af9b2abece2ae44041283 (diff)
downloadnng-8bcb82d245a5fce1bd519e2f99250dedf11e763d.tar.gz
nng-8bcb82d245a5fce1bd519e2f99250dedf11e763d.tar.bz2
nng-8bcb82d245a5fce1bd519e2f99250dedf11e763d.zip
Introduce DTLS transport for NNG.
This introduces a new experimental transport for DTLS, that provides encryption over UDP. It has a simpler protocol than the current UDP SP protocol (but we intend to fix that by making the UDP transport simpler in a follow up!) There are a few other fixes in the TLS layer itself, and in the build, that were needed to accomplish this work. Also there was an endianness bug in the UDP protocol handling, which is fixed here.
Diffstat (limited to 'src/supplemental/tls/tls_common.h')
-rw-r--r--src/supplemental/tls/tls_common.h31
1 files changed, 17 insertions, 14 deletions
diff --git a/src/supplemental/tls/tls_common.h b/src/supplemental/tls/tls_common.h
index 3e703785..14bb0cf7 100644
--- a/src/supplemental/tls/tls_common.h
+++ b/src/supplemental/tls/tls_common.h
@@ -39,8 +39,6 @@
// parts of TLS support that are invariant relative to different TLS
// libraries, such as dialer and listener support.
-static nni_atomic_ptr tls_engine;
-
struct nng_tls_config {
nng_tls_engine_config_ops ops;
const nng_tls_engine *engine; // store this so we can verify
@@ -78,29 +76,34 @@ typedef struct {
nni_tls_bio_ops bio_ops; // lower level ops vector
nni_aio bio_send; // lower level send pending
nni_aio bio_recv; // lower level recv pending
+ nni_mtx bio_lock; // lock protecting lower layer operations
uint8_t *bio_send_buf;
uint8_t *bio_recv_buf;
size_t bio_recv_len;
size_t bio_recv_off;
bool bio_recv_pend;
bool bio_send_active;
+ bool bio_closed;
+ nng_err bio_err;
size_t bio_send_len;
size_t bio_send_head;
size_t bio_send_tail;
nni_reap_node reap;
// ... engine connection data follows
-} tls_conn;
-
-extern void nni_tls_fini(tls_conn *conn);
-extern int nni_tls_init(tls_conn *conn, nng_tls_config *cfg);
-extern int nni_tls_start(
- tls_conn *conn, const nni_tls_bio_ops *biops, void *bio);
-extern void nni_tls_stop(tls_conn *conn);
-extern void nni_tls_close(tls_conn *conn);
-extern void nni_tls_recv(tls_conn *conn, nni_aio *aio);
-extern void nni_tls_send(tls_conn *conn, nni_aio *aio);
-extern bool nni_tls_verified(tls_conn *conn);
-extern const char *nni_tls_peer_cn(tls_conn *conn);
+} nni_tls_conn;
+
+extern void nni_tls_fini(nni_tls_conn *conn);
+extern int nni_tls_init(nni_tls_conn *conn, nng_tls_config *cfg);
+extern int nni_tls_start(nni_tls_conn *conn, const nni_tls_bio_ops *biops,
+ void *bio, const nng_sockaddr *sa);
+extern void nni_tls_stop(nni_tls_conn *conn);
+extern void nni_tls_close(nni_tls_conn *conn);
+extern void nni_tls_recv(nni_tls_conn *conn, nni_aio *aio);
+extern void nni_tls_send(nni_tls_conn *conn, nni_aio *aio);
+extern bool nni_tls_verified(nni_tls_conn *conn);
+extern const char *nni_tls_peer_cn(nni_tls_conn *conn);
+extern nng_err nni_tls_run(nni_tls_conn *conn);
+extern size_t nni_tls_engine_conn_size(void);
#endif // NNG_TLS_TLS_COMMON_H