multiplex: Install ZRTP handler for ZRTP streams
This commit is contained in:
parent
72f5bb1871
commit
954e85f481
|
@ -370,6 +370,12 @@ rtp_error_t uvgrtp::media_stream::init(std::shared_ptr<uvgrtp::zrtp> zrtp)
|
|||
}
|
||||
}
|
||||
|
||||
reception_flow_->new_install_handler(
|
||||
1, remote_ssrc_,
|
||||
std::bind(&uvgrtp::zrtp::new_packet_handler, zrtp, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
|
||||
std::placeholders::_4, std::placeholders::_5),
|
||||
nullptr);
|
||||
|
||||
rtp_error_t ret = RTP_OK;
|
||||
if ((ret = zrtp->init(rtp_->get_ssrc(), socket_, remote_sockaddr_, remote_sockaddr_ip6_, perform_dh, ipv6_)) != RTP_OK) {
|
||||
UVG_LOG_WARN("Failed to initialize ZRTP for media stream!");
|
||||
|
|
25
src/zrtp.cc
25
src/zrtp.cc
|
@ -36,7 +36,8 @@ uvgrtp::zrtp::zrtp():
|
|||
remote_ip6_addr_(),
|
||||
initialized_(false),
|
||||
receiver_(),
|
||||
dh_finished_(false)
|
||||
dh_finished_(false),
|
||||
state_(0)
|
||||
{
|
||||
cctx_.sha256 = new uvgrtp::crypto::sha256;
|
||||
cctx_.dh = new uvgrtp::crypto::dh;
|
||||
|
@ -967,6 +968,28 @@ rtp_error_t uvgrtp::zrtp::get_srtp_keys(
|
|||
return RTP_OK;
|
||||
}
|
||||
|
||||
rtp_error_t uvgrtp::zrtp::new_packet_handler(void* args, int rce_flags, uint8_t* read_ptr, size_t size, frame::rtp_frame** out)
|
||||
{
|
||||
if (size < 0 || (uint32_t)size < sizeof(uvgrtp::zrtp_msg::zrtp_msg))
|
||||
{
|
||||
return RTP_PKT_NOT_HANDLED;
|
||||
}
|
||||
|
||||
(void)args;
|
||||
(void)rce_flags;
|
||||
(void)out;
|
||||
|
||||
auto msg = (uvgrtp::zrtp_msg::zrtp_msg*)read_ptr;
|
||||
|
||||
/* not a ZRTP packet */
|
||||
if (msg->header.version || msg->preamble != ZRTP_PREAMBLE) {
|
||||
return RTP_PKT_NOT_HANDLED;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
rtp_error_t uvgrtp::zrtp::packet_handler(ssize_t size, void *packet, int rce_flags, frame::rtp_frame **out)
|
||||
{
|
||||
if (size < 0 || (uint32_t)size < sizeof(uvgrtp::zrtp_msg::zrtp_msg))
|
||||
|
|
|
@ -73,6 +73,7 @@ namespace uvgrtp {
|
|||
* Return RTP_PKT_NOT_HANDLED if "buffer" does not contain a ZRTP message
|
||||
* Return RTP_GENERIC_ERROR if "buffer" contains an invalid ZRTP message */
|
||||
static rtp_error_t packet_handler(ssize_t size, void *packet, int rce_flags, frame::rtp_frame **out);
|
||||
rtp_error_t new_packet_handler(void* args, int rce_flags, uint8_t* read_ptr, size_t size, frame::rtp_frame** out);
|
||||
|
||||
inline bool has_dh_finished() const
|
||||
{
|
||||
|
@ -192,6 +193,7 @@ namespace uvgrtp {
|
|||
std::mutex zrtp_mtx_;
|
||||
|
||||
bool dh_finished_ = false;
|
||||
int state_;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue