Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}