|
|
|
@ -520,18 +520,24 @@ void print_rtcp_rr(char** cdrbufcur, const pjmedia_rtcp_rr* rr) {
|
|
|
|
|
void parse_and_log_rtcp_report(struct stream_fd *sfd, const void *pkt, long size) {
|
|
|
|
|
|
|
|
|
|
static const int CDRBUFLENGTH = 1024*1024*1; // 1 MB
|
|
|
|
|
char cdrbuffer[CDRBUFLENGTH]; memset(&cdrbuffer,0,CDRBUFLENGTH);
|
|
|
|
|
char cdrbuffer[CDRBUFLENGTH];
|
|
|
|
|
char* cdrbufcur = cdrbuffer;
|
|
|
|
|
pjmedia_rtcp_common *common = (pjmedia_rtcp_common*) pkt;
|
|
|
|
|
const pjmedia_rtcp_rr *rr = NULL;
|
|
|
|
|
const pjmedia_rtcp_sr *sr = NULL;
|
|
|
|
|
|
|
|
|
|
cdrbufcur += sprintf(cdrbufcur,"[%s] ",sfd->stream->call->callid);
|
|
|
|
|
cdrbufcur += sprintf(cdrbufcur,"["STR_FORMAT"] ", STR_FMT(&sfd->stream->call->callid));
|
|
|
|
|
|
|
|
|
|
if (size < sizeof(*common))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
print_rtcp_common(&cdrbufcur,common);
|
|
|
|
|
|
|
|
|
|
/* Parse RTCP */
|
|
|
|
|
if (common->pt == RTCP_PT_SR) {
|
|
|
|
|
if (size < (sizeof(*common) + sizeof(*sr)))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
sr = (pjmedia_rtcp_sr*) (((char*)pkt) + sizeof(pjmedia_rtcp_common));
|
|
|
|
|
|
|
|
|
|
print_rtcp_sr(&cdrbufcur,sr);
|
|
|
|
@ -542,11 +548,14 @@ void parse_and_log_rtcp_report(struct stream_fd *sfd, const void *pkt, long size
|
|
|
|
|
print_rtcp_rr(&cdrbufcur,rr);
|
|
|
|
|
}
|
|
|
|
|
} else if (common->pt == RTCP_PT_RR && common->count > 0) {
|
|
|
|
|
if (size < (sizeof(*common) + sizeof(*rr)))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
rr = (pjmedia_rtcp_rr*)(((char*)pkt) + sizeof(pjmedia_rtcp_common));
|
|
|
|
|
print_rtcp_rr(&cdrbufcur,rr);
|
|
|
|
|
|
|
|
|
|
} else if (common->pt == RTCP_PT_XR) {
|
|
|
|
|
pjmedia_rtcp_xr_rx_rtcp_xr(&cdrbufcur, pkt, size);
|
|
|
|
|
pjmedia_rtcp_xr_rx_rtcp_xr(cdrbufcur, pkt, size);
|
|
|
|
|
}
|
|
|
|
|
rtcplog(cdrbuffer);
|
|
|
|
|
}
|
|
|
|
|