multiplex: Install ZRTP handler for ZRTP streams

This commit is contained in:
Heikki Tampio 2023-06-15 15:22:22 +03:00
parent 72f5bb1871
commit 954e85f481
3 changed files with 32 additions and 1 deletions

View File

@ -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!");

View File

@ -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))

View File

@ -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_;
};
}