From cbab363c4779004bbc85eea2fe5e73da7c23d3cf Mon Sep 17 00:00:00 2001 From: Richard Aas Date: Mon, 1 Sep 2014 09:43:22 +0000 Subject: [PATCH] tls: support DTLS over TURN --- src/tls/openssl/tls_udp.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/tls/openssl/tls_udp.c b/src/tls/openssl/tls_udp.c index ca6197d..bc8732e 100644 --- a/src/tls/openssl/tls_udp.c +++ b/src/tls/openssl/tls_udp.c @@ -81,20 +81,23 @@ static int bio_destroy(BIO *b) static int bio_write(BIO *b, const char *buf, int len) { struct tls_conn *tc = b->ptr; - struct mbuf mb; + struct mbuf *mb; + enum {SPACE = 4}; int err; - mb.buf = (void *)buf; - mb.pos = 0; - mb.end = mb.size = len; - - err = udp_send_helper(tc->sock->us, &tc->peer, &mb, tc->sock->uh); - if (err) { - DEBUG_WARNING("udp send error: %m\n", err); + mb = mbuf_alloc(SPACE + len); + if (!mb) return -1; - } - return len; + mb->pos = SPACE; + (void)mbuf_write_mem(mb, (void *)buf, len); + mb->pos = SPACE; + + err = udp_send_helper(tc->sock->us, &tc->peer, mb, tc->sock->uh); + + mem_deref(mb); + + return err ? -1 : len; }