diff --git a/include/re_bfcp.h b/include/re_bfcp.h index d30ea30..cfeefd1 100644 --- a/include/re_bfcp.h +++ b/include/re_bfcp.h @@ -101,6 +101,7 @@ enum bfcp_priority { /** BFCP Transport */ enum bfcp_transp { BFCP_UDP, + BFCP_DTLS, }; /** BFCP Request Status */ @@ -178,6 +179,7 @@ struct bfcp_msg { struct list attrl; }; +struct tls; struct bfcp_conn; @@ -259,7 +261,7 @@ const char *bfcp_prim_name(enum bfcp_prim prim); /* conn */ int bfcp_listen(struct bfcp_conn **bcp, enum bfcp_transp tp, struct sa *laddr, - bfcp_recv_h *recvh, void *arg); + struct tls *tls, bfcp_recv_h *recvh, void *arg); void *bfcp_sock(const struct bfcp_conn *bc); diff --git a/src/bfcp/bfcp.h b/src/bfcp/bfcp.h index 7e76e0d..9e84718 100644 --- a/src/bfcp/bfcp.h +++ b/src/bfcp/bfcp.h @@ -17,6 +17,7 @@ struct bfcp_conn { struct tmr tmr1; struct tmr tmr2; struct udp_sock *us; + struct tls_sock *ss; struct mbuf *mb; bfcp_recv_h *recvh; void *arg; diff --git a/src/bfcp/conn.c b/src/bfcp/conn.c index df175d9..22c48ee 100644 --- a/src/bfcp/conn.c +++ b/src/bfcp/conn.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include "bfcp.h" @@ -23,6 +24,7 @@ static void destructor(void *arg) list_flush(&bc->ctransl); tmr_cancel(&bc->tmr1); tmr_cancel(&bc->tmr2); + mem_deref(bc->ss); mem_deref(bc->us); mem_deref(bc->mb); } @@ -81,13 +83,14 @@ out: * @param bcp Pointer to BFCP connection * @param tp BFCP Transport type * @param laddr Optional listening address/port + * @param tls TLS Context (optional) * @param recvh Receive handler * @param arg Receive handler argument * * @return 0 if success, otherwise errorcode */ int bfcp_listen(struct bfcp_conn **bcp, enum bfcp_transp tp, struct sa *laddr, - bfcp_recv_h *recvh, void *arg) + struct tls *tls, bfcp_recv_h *recvh, void *arg) { struct bfcp_conn *bc; int err; @@ -106,6 +109,7 @@ int bfcp_listen(struct bfcp_conn **bcp, enum bfcp_transp tp, struct sa *laddr, switch (bc->tp) { case BFCP_UDP: + case BFCP_DTLS: err = udp_listen(&bc->us, laddr, udp_recv_handler, bc); if (err) goto out; @@ -122,6 +126,18 @@ int bfcp_listen(struct bfcp_conn **bcp, enum bfcp_transp tp, struct sa *laddr, goto out; } + if (bc->tp == BFCP_DTLS) { + +#ifdef USE_OPENSSL_DTLS + err = tls_start_udp(&bc->ss, tls, bc->us, 0, 4); +#else + (void)tls; + err = ENOSYS; +#endif + if (err) + goto out; + } + out: if (err) mem_deref(bc); @@ -140,6 +156,7 @@ int bfcp_send(struct bfcp_conn *bc, const struct sa *dst, struct mbuf *mb) switch (bc->tp) { case BFCP_UDP: + case BFCP_DTLS: return udp_send(bc->us, dst, mb); default: