void rtp_session_send_rtcp_fb_generic_nack(RtpSession *session, uint16_t pid, uint16_t blp) { mblk_t *m; if ((rtp_session_avpf_enabled(session) == TRUE) && (rtp_session_avpf_feature_enabled(session, ORTP_AVPF_FEATURE_GENERIC_NACK) == TRUE)) { m = make_rtcp_fb_generic_nack(session, pid, blp); rtp_session_add_fb_packet_to_send(session, m); rtp_session_send_fb_rtcp_packet_and_reschedule(session); } }
void rtp_session_send_rtcp_fb_tmmbn(RtpSession *session, uint32_t ssrc) { mblk_t *m; if ((rtp_session_avpf_enabled(session) == TRUE) && (rtp_session_avpf_feature_enabled(session, ORTP_AVPF_FEATURE_TMMBR) == TRUE)) { m = make_rtcp_fb_tmmbn(session, ssrc); if (m) { rtp_session_add_fb_packet_to_send(session, m); session->rtcp.send_algo.tmmbn_scheduled = TRUE; } rtp_session_send_fb_rtcp_packet_and_reschedule(session); } }
void rtp_session_send_rtcp_fb_tmmbr(RtpSession *session, uint64_t mxtbr) { mblk_t *m; if ((rtp_session_avpf_enabled(session) == TRUE) && (rtp_session_avpf_feature_enabled(session, ORTP_AVPF_FEATURE_TMMBR) == TRUE)) { if ((rtp_session_rtcp_rtpfb_scheduled(session, RTCP_RTPFB_TMMBR) != TRUE) && (rtp_session_get_recv_ssrc(session) != 0)) { uint16_t overhead = (session->rtp.gs.sockfamily == AF_INET6) ? IP6_UDP_OVERHEAD : IP_UDP_OVERHEAD; m = make_rtcp_fb_tmmbr(session, mxtbr, overhead); rtp_session_add_fb_packet_to_send(session, m); session->rtcp.send_algo.tmmbr_scheduled = TRUE; } rtp_session_send_fb_rtcp_packet_and_reschedule(session); } }
static void append_fb_packets(RtpSession *session, mblk_t *m) { if (session->rtcp.send_algo.fb_packets != NULL) { concatb(m, session->rtcp.send_algo.fb_packets); session->rtcp.send_algo.fb_packets = NULL; } /* Repeat TMMBR packets until they are acknowledged with a TMMBN unless a TMMBN is being sent. */ if (rtp_session_avpf_feature_enabled(session, ORTP_AVPF_FEATURE_TMMBR) && (session->rtcp.tmmbr_info.sent != NULL) && (session->rtcp.send_algo.tmmbr_scheduled != TRUE) && (session->rtcp.send_algo.tmmbn_scheduled != TRUE)) { concatb(m, copymsg(session->rtcp.tmmbr_info.sent)); } session->rtcp.send_algo.tmmbr_scheduled = FALSE; session->rtcp.send_algo.tmmbn_scheduled = FALSE; }