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


/*-------------------------------------------------------------------------
 * rtpsources.c - rtpsources
 *-------------------------------------------------------------------------
 */

#include 
#include 
#include 

/*-------------------------------------------------------------------------
 * rtpsources - fill array sources with a list of synchronization sources
 * participating in the session and return list's length.
 * Maxsources gives the size of the area pointed to by sources in 
 * sizeof(ssrc_t) (short) units.
 *-------------------------------------------------------------------------
 */
int
rtpsources(struct session *psn, ssrc_t *sources, int maxsources)
{

	struct htent	**v;
	int		htcount, i, count;

	if (pthread_mutex_lock(&psn->sn_getstreammutex) != 0)
		return ERROR;

	if ((v = htenum(psn->sn_ssrcs)) == NULL) {
		pthread_mutex_unlock(&psn->sn_getstreammutex);
		return ERROR;
	}

	for (htcount = 0; v[htcount] != NULL; htcount++);
  
	maxsources = min(maxsources, htcount);
  
	for (i = 0, count = 0; count < maxsources && i < htcount; i++)
		if (((struct stream *) v[i]->hte_object)->stm_zombie != TRUE) {
			sources[i] = v[i]->hte_key;
			count++;
		}

	pthread_mutex_unlock(&psn->sn_getstreammutex);
	free(v);
	return maxsources;
}