Пример #1
0
static void
process_delete(session_t *sp, rtp_event *e)
{
	    if (log_fp != 0)
	    {
		struct timeval  tv, *dead;
		int d_sec = -1, d_usec = -1;

		gettimeofday(&tv, 0);

		dead = (struct timeval *) e->data;
		if (dead != 0)
		{
		    d_sec = (int) dead->tv_sec;
		    d_usec = (int) dead->tv_usec;
		}
		fprintf(log_fp, "%d.%06d %d delete %x %d.%06d\n", (int) tv.tv_sec, (int) tv.tv_usec,
			rtp_get_ssrc_count(sp->rtp_session[0]),
			e->ssrc,
			d_sec, d_usec);
		fflush(log_fp);
	    }
        if (e->ssrc != rtp_my_ssrc(sp->rtp_session[0]) && sp->mbus_engine != NULL) {
                struct s_source *s;
                pdb_entry_t     *pdbe;
                if ((s = source_get_by_ssrc(sp->active_sources, e->ssrc)) != NULL) {
                        source_remove(sp->active_sources, s);
                }
                if (pdb_item_get(sp->pdb, e->ssrc, &pdbe)) {
                        pdb_item_destroy(sp->pdb, e->ssrc);
                        /* Will not be in ui if not in pdb */
                        ui_send_rtp_remove(sp, sp->mbus_ui_addr, e->ssrc);
                }
        }
}
Пример #2
0
int
pdb_destroy(pdb_t **pp)
{
        pdb_t   *p = *pp;
        uint32_t id;

        while(pdb_get_first_id(p, &id)) {
                if (pdb_item_destroy(p, id) == FALSE) {
                        debug_msg("Failed to destroy item\n");
                        return FALSE;
                }
        }

        if (btree_destroy(&p->db) == FALSE) {
                debug_msg("Failed to destroy tree\n");
                return FALSE;
        }

        xfree(p);
        *pp = NULL;
        return TRUE;
}