diff --git a/daemon/media_socket.c b/daemon/media_socket.c index baeae64d4..aa25ee9dc 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -1393,7 +1393,6 @@ bool get_consecutive_ports(socket_intf_list_q *out, unsigned int num_ports, unsi for (l = log->list.head; l; l = l->next) { loc = l->data; inet_ntop(loc->spec->local_address.addr.family->af, &loc->spec->local_address.addr.u, ip, sizeof(ip)); - ilog(LOG_DEBUG, "XXXXXXXXXX IP: %s", ip); } ilog(LOG_DEBUG, ""); */ @@ -1719,7 +1718,7 @@ static const char *kernelize_target(kernelize_state *s, struct packet_stream *st reti->rtp = 1; reti->ssrc_req = 1; - if (!MEDIA_ISSET(media, TRANSCODING)) { + if (rtcp_kernel_fw(media)) { reti->rtcp_fw = 1; if (media->protocol->avpf) reti->rtcp_fb_fw = 1; diff --git a/daemon/rtcp.c b/daemon/rtcp.c index f7b5f1104..c8fbdfc07 100644 --- a/daemon/rtcp.c +++ b/daemon/rtcp.c @@ -272,6 +272,8 @@ struct rtcp_handler { void (*finish)(struct rtcp_process_ctx *, call_t *, const endpoint_t *, const endpoint_t *, int64_t); void (*destroy)(struct rtcp_process_ctx *); + + bool no_kernel_fw; }; // collection of all handler types struct rtcp_handlers { @@ -366,9 +368,11 @@ static struct rtcp_handler transcode_handlers = { .common = transcode_common, .rr = transcode_rr, .sr = transcode_sr, + .no_kernel_fw = true, }; static struct rtcp_handler sink_handlers = { .common = sink_common, + .no_kernel_fw = true, }; static struct rtcp_handler transcode_handlers_wrap = { .common = transcode_common_wrap, @@ -1650,3 +1654,10 @@ out: static void sink_common(struct rtcp_process_ctx *ctx, struct rtcp_packet *common) { ctx->discard = 1; } + + +bool rtcp_kernel_fw(struct call_media *media) { + if (!media->rtcp_handler) + return true; + return !media->rtcp_handler->no_kernel_fw; +} diff --git a/include/rtcp.h b/include/rtcp.h index e9679b0b3..502fba550 100644 --- a/include/rtcp.h +++ b/include/rtcp.h @@ -27,6 +27,7 @@ struct rtcp_packet *rtcp_payload(str *p, const str *s); int rtcp_parse(GQueue *q, struct media_packet *); void rtcp_list_free(GQueue *q); +bool rtcp_kernel_fw(struct call_media *); rtcp_filter_func rtcp_avpf2avp_filter;