static int bio_write(BIO *b, const char *buf, int len) { struct dtls_flow *tc = b->ptr; struct mbuf *mb; enum {SPACE = 4}; /* sizeof TURN channel header */ int err; mb = mbuf_alloc(SPACE + len); if (!mb) return -1; (void)mbuf_fill(mb, 0x00, SPACE); (void)mbuf_write_mem(mb, (void *)buf, len); mb->pos = SPACE; err = udp_send_helper(tc->us, &tc->peer, mb, tc->uh); if (err) { warning("dtls: udp_send_helper: %m\n", err); } mem_deref(mb); return err ? -1 : len; }
static int on_send_packet(const zrtp_stream_t *stream, char *rtp_packet, unsigned int rtp_packet_length) { struct menc_media *st = zrtp_stream_get_userdata(stream); struct mbuf *mb; int err; if (drop_packets(st)) return zrtp_status_ok; if (!sa_isset(&st->raddr, SA_ALL)) return zrtp_status_ok; mb = mbuf_alloc(PRESZ + rtp_packet_length); if (!mb) return zrtp_status_alloc_fail; mb->pos = PRESZ; (void)mbuf_write_mem(mb, (void *)rtp_packet, rtp_packet_length); mb->pos = PRESZ; err = udp_send_helper(st->rtpsock, &st->raddr, mb, st->uh_rtp); if (err) { warning("zrtp: udp_send %u bytes (%m)\n", rtp_packet_length, err); } mem_deref(mb); return zrtp_status_ok; }
static int bio_write(BIO *b, const char *buf, int len) { struct tls_conn *tc = b->ptr; struct mbuf mb; int err; mb.buf = (void *)buf; mb.pos = 0; mb.end = mb.size = len; err = udp_send_helper(tc->ts->us, &tc->peer, &mb, tc->ts->uh); if (err) return -1; return len; }