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; }
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; }
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; }
/*---------------------------------------------------------------------------*/ 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); }