Browse Source

TT#5566 recognize and ignore (for now) RTCP packets

Change-Id: Ife95c9506a652b5410380963dbc1cf98f4ace611
changes/55/9755/1
Richard Fuchs 9 years ago
parent
commit
7395f8bef1
6 changed files with 46 additions and 29 deletions
  1. +1
    -0
      daemon/crypto.c
  2. +1
    -0
      daemon/media_socket.c
  3. +1
    -16
      daemon/rtcp.c
  4. +0
    -13
      daemon/rtcp.h
  5. +38
    -0
      lib/rtcplib.h
  6. +5
    -0
      recording-daemon/packet.c

+ 1
- 0
daemon/crypto.c View File

@ -13,6 +13,7 @@
#include "rtcp.h"
#include "log.h"
#include "rtplib.h"
#include "rtcplib.h"


+ 1
- 0
daemon/media_socket.c View File

@ -20,6 +20,7 @@
#include "poller.h"
#include "recording.h"
#include "rtplib.h"
#include "rtcplib.h"
#ifndef PORT_RANDOM_MIN


+ 1
- 16
daemon/rtcp.c View File

@ -14,6 +14,7 @@
#include "rtcp_xr.h"
#include "homer.h"
#include "media_socket.h"
#include "rtcplib.h"
@ -460,22 +461,6 @@ error:
}
/* RFC 5761 section 4 */
int rtcp_demux_is_rtcp(const str *s) {
struct rtcp_packet *rtcp;
if (s->len < sizeof(*rtcp))
return 0;
rtcp = (void *) s->s;
if (rtcp->header.pt < 194)
return 0;
if (rtcp->header.pt > 223)
return 0;
return 1;
}
static void print_rtcp_common(GString *log, const pjmedia_rtcp_common *common) {
if (log)
g_string_append_printf(log,"version=%u, padding=%u, count=%u, payloadtype=%u, length=%u, ssrc=%u, ",


+ 0
- 13
daemon/rtcp.h View File

@ -10,17 +10,6 @@ struct crypto_context;
struct rtcp_header {
unsigned char v_p_x;
unsigned char pt;
u_int16_t length;
} __attribute__ ((packed));
struct rtcp_packet {
struct rtcp_header header;
u_int32_t ssrc;
} __attribute__ ((packed));
/**
* RTCP sender report.
*/
@ -97,8 +86,6 @@ int rtcp_avpf2avp(str *);
int rtcp_avp2savp(str *, struct crypto_context *);
int rtcp_savp2avp(str *, struct crypto_context *);
int rtcp_demux_is_rtcp(const str *);
void parse_and_log_rtcp_report(struct stream_fd *sfd, const str *, const endpoint_t *, const struct timeval *);
#endif

+ 38
- 0
lib/rtcplib.h View File

@ -0,0 +1,38 @@
#ifndef _RTCPLIB_H_
#define _RTCPLIB_H_
#include "str.h"
#include "compat.h"
struct rtcp_header {
unsigned char v_p_x;
unsigned char pt;
u_int16_t length;
} __attribute__ ((packed));
struct rtcp_packet {
struct rtcp_header header;
u_int32_t ssrc;
} __attribute__ ((packed));
/* RFC 5761 section 4 */
INLINE int rtcp_demux_is_rtcp(const str *s) {
struct rtcp_packet *rtcp;
if (s->len < sizeof(*rtcp))
return 0;
rtcp = (void *) s->s;
if (rtcp->header.pt < 194)
return 0;
if (rtcp->header.pt > 223)
return 0;
return 1;
}
#endif

+ 5
- 0
recording-daemon/packet.c View File

@ -9,6 +9,7 @@
#include "rtplib.h"
#include "str.h"
#include "decoder.h"
#include "rtcplib.h"
static int ptr_cmp(const void *a, const void *b, void *dummy) {
@ -178,6 +179,9 @@ void packet_process(stream_t *stream, unsigned char *buf, unsigned len) {
packet->udp = (void *) bufstr.s;
str_shift(&bufstr, sizeof(*packet->udp));
if (rtcp_demux_is_rtcp(&bufstr))
goto ignore; // for now
if (rtp_payload(&packet->rtp, &packet->payload, &bufstr))
goto err;
if (rtp_padding(packet->rtp, &packet->payload))
@ -218,5 +222,6 @@ dupe:
err:
ilog(LOG_WARN, "Failed to parse packet headers");
ignore:
packet_free(packet);
}

Loading…
Cancel
Save