www.pudn.com > streamrtp.rar > rtcpapp.c


/*-------------------------------------------------------------------------
 * rtcpapp.c - rtcpapp
 *-------------------------------------------------------------------------
 */

#include 
#include 
#include 

/*------------------------------------------------------------------------
 * rtcpapp - process an incoming RTCP application specific packet
 *------------------------------------------------------------------------
 */
int
rtcpapp(struct session *psn, struct rtcp *prtcp)
{

	struct app	*papp;
	struct stream	*pstm;

	if (prtcp->rtcp_type != RTCP_APP)
		return ERROR;
  
	papp = (struct app *) prtcp->rtcp_data;

	papp->app_ssrc = ntohl(papp->app_ssrc);

	pstm = rtpgetstream(psn, papp->app_ssrc);
	if (pstm == NULL)
		if ((pstm = rtpnewstream(psn, papp->app_ssrc)) == NULL)
			return ERROR;

	if (!RTP_INACTIVE(pstm->stm_inactive))
		pstm->stm_inactive = 0;
	else {
		rtpreleasestream(psn, pstm);
		return OK;
	}

	rtpreleasestream(psn, pstm);

	/*
	 * Post an event containing the
	 * application-specific data.
	 */
	rtppostevent(psn, EVENT_RTCP_APP, papp->app_ssrc, (char *) prtcp, RTCP_LENGTH_BYTE(prtcp));
	return OK;
}