Example #1
0
static int media_alloc(struct menc_media **stp, struct menc_sess *sess,
		       struct rtp_sock *rtp,
		       int proto, void *rtpsock, void *rtcpsock,
		       struct sdp_media *sdpm)
{
	struct menc_media *st;
	zrtp_status_t s;
	int layer = 10; /* above zero */
	int err = 0;
	(void)rtcpsock;

	if (!stp || !sess || proto != IPPROTO_UDP)
		return EINVAL;

	st = *stp;
	if (st)
		goto start;

	st = mem_zalloc(sizeof(*st), media_destructor);
	if (!st)
		return ENOMEM;

	st->sess = sess;
	st->rtpsock = mem_ref(rtpsock);

	err = udp_register_helper(&st->uh, rtpsock, layer,
				  udp_helper_send, udp_helper_recv, st);
	if (err)
		goto out;

	s = zrtp_stream_attach(sess->zrtp_session, &st->zrtp_stream);
	if (s != zrtp_status_ok) {
		warning("zrtp: zrtp_stream_attach failed (status=%d)\n", s);
		err = EPROTO;
		goto out;
	}

	zrtp_stream_set_userdata(st->zrtp_stream, st);

 out:
	if (err) {
		mem_deref(st);
		return err;
	}
	else
		*stp = st;

 start:
	if (sa_isset(sdp_media_raddr(sdpm), SA_ALL)) {
		st->raddr = *sdp_media_raddr(sdpm);

		s = zrtp_stream_start(st->zrtp_stream, rtp_sess_ssrc(rtp));
		if (s != zrtp_status_ok) {
			warning("zrtp: zrtp_stream_start: status = %d\n", s);
		}
	}

	return err;
}
Example #2
0
int AmZRTPSessionState::startStreams(uint32_t ssrc){
  if (NULL == zrtp_audio)
    return -1;

  zrtp_status_t status = zrtp_stream_start(zrtp_audio, ssrc);
  if (zrtp_status_ok != status) {
    ERROR("starting ZRTP stream\n");
    return -1;
  }
  return 0;
}
Example #3
0
zrtp_status_t zrtp_test_channel_start(zrtp_test_id_t id) {
	zrtp_status_t s1, s2;
	zrtp_test_channel_t *the_channel = zrtp_test_channel_by_id(id);
	zrtp_test_session_t *the_session;

	the_session = zrtp_test_session_by_id(the_channel->left->session_id);
	if (the_session->cfg.is_enrollment)
		s1 = zrtp_stream_registration_start(the_channel->left->zrtp, the_channel->left->id); /* use stream Id as ssrc */
	else
		s1 = zrtp_stream_start(the_channel->left->zrtp, the_channel->left->id); /* use stream Id as ssrc */
	if (s1 == zrtp_status_ok) {
		the_session = zrtp_test_session_by_id(the_channel->right->session_id);
		if (the_session->cfg.is_enrollment)
			s2 = zrtp_stream_registration_start(the_channel->right->zrtp, the_channel->right->id);
		else
			s2 = zrtp_stream_start(the_channel->right->zrtp, the_channel->right->id);
	} else {
		return s1;
	}

	return s2;
}
Example #4
0
/*---------------------------------------------------------------------------*/
zrtp_status_t zrtp_stream_registration_start(zrtp_stream_t* stream, uint32_t ssrc)
{
	if (!stream) {
		return zrtp_status_bad_param;
	}
	
	ZRTP_LOG(3,(_ZTU_,"START REGISTRATION STREAM ID=%u mode=%s state=%s.\n",
				stream->id, zrtp_log_mode2str(stream->mode), zrtp_log_state2str(stream->state)));
				
	if (NULL == stream->zrtp->cb.cache_cb.on_get_mitm) {
		ZRTP_LOG(2,(_ZTU_,"WARNING: Can't use MiTM Functions with no ZRTP Cache.\n"));
		return zrtp_status_notavailable;
	}
	
	stream->mitm_mode = ZRTP_MITM_MODE_REG_SERVER;
	return zrtp_stream_start(stream, ssrc);
}