/* Handle incoming stream data from the network */ static void stream_recv_handler(const struct rtp_header *hdr, struct mbuf *mb, void *arg) { struct audio *a = arg; struct aurx *rx = &a->rx; int err; if (!mb) goto out; /* Telephone event? */ if (hdr->pt == rx->pt_tel) { handle_telev(a, mb); return; } /* Comfort Noise (CN) as of RFC 3389 */ if (PT_CN == hdr->pt) return; /* Audio payload-type changed? */ /* XXX: this logic should be moved to stream.c */ if (hdr->pt != rx->pt) { err = pt_handler(a, rx->pt, hdr->pt); if (err) return; } out: (void)audio_stream_decode(a, &a->rx, mb); }
/* Handle incoming stream data from the network */ static void stream_recv_handler(const struct rtp_header *hdr, struct mbuf *mb, void *arg) { struct audio *a = arg; struct aurx *rx = &a->rx; int err; if (!mb) goto out; /* Telephone event? */ if (hdr->pt != rx->pt) { const struct sdp_format *fmt; fmt = sdp_media_lformat(stream_sdpmedia(a->strm), hdr->pt); if (fmt && !str_casecmp(fmt->name, "telephone-event")) { handle_telev(a, mb); return; } } /* Comfort Noise (CN) as of RFC 3389 */ if (PT_CN == hdr->pt) return; /* Audio payload-type changed? */ /* XXX: this logic should be moved to stream.c */ if (hdr->pt != rx->pt) { err = pt_handler(a, rx->pt, hdr->pt); if (err) return; } out: (void)aurx_stream_decode(&a->rx, mb); }