--- linphone-3.3.2/oRTP/src/rtcp.c 2010-02-08 15:38:31.000000000 +0100 +++ ortp-0.15.0/src/rtcp.c 2010-11-19 13:38:15.967624002 +0100 @@ -367,6 +367,7 @@ void rtp_session_send_rtcp_APP(RtpSessio mblk_t *d; h->b_wptr+=rtcp_app_init(session,h->b_wptr,subtype,name,datalen+sizeof(rtcp_app_t)); d=esballoc((uint8_t*)data,datalen,0,NULL); + d->b_wptr += datalen; h->b_cont=d; rtp_session_rtcp_send(session,h); } --- linphone-3.3.2/oRTP/src/rtcpparse.c 2010-02-08 15:38:31.000000000 +0100 +++ ortp-0.15.0/src/rtcpparse.c 2010-11-18 11:11:27.000000000 +0100 @@ -196,7 +196,7 @@ bool_t rtcp_is_BYE(const mblk_t *m){ const rtcp_common_header_t *ch=rtcp_get_common_header(m); if (ch && rtcp_common_header_get_packet_type(ch)==RTCP_BYE){ if (msgdsize(m)b_rptr; int rc=rtcp_common_header_get_rc(&bye->ch); - int len=rtcp_common_header_get_length(&bye->ch); + int len=4*rtcp_common_header_get_length(&bye->ch); if (idxssrc[idx]<=(m->b_rptr +sizeof(rtcp_common_header_t)+len-4)) { @@ -224,7 +224,7 @@ bool_t rtcp_BYE_get_ssrc(const mblk_t *m bool_t rtcp_BYE_get_reason(const mblk_t *m, const char **reason, int *reason_len){ rtcp_bye_t *bye=(rtcp_bye_t*)m->b_rptr; int rc=rtcp_common_header_get_rc(&bye->ch); - int len=rtcp_common_header_get_length(&bye->ch); + int len=4*rtcp_common_header_get_length(&bye->ch); uint8_t *rptr=(uint8_t*)m->b_rptr+sizeof(rtcp_common_header_t)+rc*4; uint8_t *end=(uint8_t*)(m->b_rptr+sizeof(rtcp_common_header_t)+len); if (rptrb_rptr; - int datalen=sizeof(rtcp_common_header_t)+rtcp_common_header_get_length(&app->ch)-8; + int datalen=sizeof(rtcp_common_header_t)+4*rtcp_common_header_get_length(&app->ch)-8; if (datalen>0){ *data=(uint8_t*)m->b_rptr+sizeof(rtcp_app_t); *len=datalen;