Ejemplo n.º 1
0
int32_t stapi_remove_filter(int32_t demux_id, int32_t num, char *pmtfile)
{
	int32_t i, ret = 0;
	struct s_dvbapi_priority *p;

	if(!pmtfile) { return 0; }

	for(p = dvbapi_priority; p != NULL; p = p->next)
	{
		if(p->type != 's') { continue; }
		if(strcmp(pmtfile, p->pmtfile) != 0)
			{ continue; }

		for(i = 0; i < PTINUM; i++)
		{
			if(strcmp(dev_list[i].name, p->devname) == 0 && p->disablefilter == 0)
			{
				ret = stapi_do_remove_filter(demux_id, &dev_list[i].demux_fd[demux_id][num], i);
			}
		}
	}
	if(ret == 1)
	{
		cs_log_dbg(D_DVBAPI, "filter %d removed", num);
	}
	else
	{
		cs_log_dbg(D_DVBAPI, "Error: filter %d was not removed!", num);
	}
	return ret;
}
Ejemplo n.º 2
0
int32_t stapi_do_set_filter(int32_t demux_id, FILTERTYPE *filter, uint16_t *pids, int32_t pidcount, uchar *filt, uchar *mask, int32_t dev_id) {
	uint32_t FilterAssociateError=0;
	int32_t k, ret=0;

	filter->fd			= 0;
	filter->BufferHandle[0] 	= 0;
	filter->SlotHandle[0]	= 0;

	if (dev_list[dev_id].SessionHandle==0) return 0;

	uint32_t FilterAllocateError = oscam_stapi_FilterAllocate(dev_list[dev_id].SessionHandle, &filter->fd);

	if (FilterAllocateError != 0) {
		cs_log("FilterAllocate problem");
		filter->fd=0;
		return 0;
	}

	for (k=0;k<pidcount;k++) {
		uint16_t pid = pids[k];

		uint32_t QuerySlot = oscam_stapi_PidQuery(dev_list[dev_id].name, pid);
		int32_t SlotInit=1;

		if (QuerySlot != 0) {
			uint32_t checkslot = check_slot(dev_id, QuerySlot, NULL);
			if (checkslot>0) {
				filter->SlotHandle[k] = QuerySlot;
				filter->BufferHandle[k] = checkslot;
				SlotInit=0;
			} else {
				cs_log("overtake: clear pid: %d", oscam_stapi_SlotClearPid(QuerySlot));
				SlotInit=1;
			}
		}

		if (SlotInit==1) {
			ret = oscam_stapi_SlotInit(dev_list[dev_id].SessionHandle, dev_list[dev_id].SignalHandle, &filter->BufferHandle[k], &filter->SlotHandle[k], pid);
		}

		FilterAssociateError = oscam_stapi_FilterAssociate(filter->fd, filter->SlotHandle[k]);
		filter->NumSlots++;
	}

	uint32_t FilterSetError			= oscam_stapi_FilterSet(filter->fd, filt, mask);

	if (ret || FilterAllocateError || FilterAssociateError || FilterSetError) {
		cs_log("set_filter: dev: %d FAl: %d FAs: %d FS: %d",
			dev_id, FilterAllocateError, FilterAssociateError, FilterSetError);
		stapi_do_remove_filter(demux_id, filter, dev_id);
		return 0;
	} else {
		return 1;
	}
}
Ejemplo n.º 3
0
int32_t stapi_remove_filter(int32_t demux_id, int32_t num, char *pmtfile) {
	int32_t i;
	struct s_dvbapi_priority *p;

	if (!pmtfile) return 0;

	for (p=dvbapi_priority; p != NULL; p=p->next) {
		if (p->type!='s') continue;
		if (strcmp(pmtfile, p->pmtfile)!=0)
			continue;

		for (i=0;i<PTINUM;i++) {
			if(strcmp(dev_list[i].name, p->devname)==0 && p->disablefilter==0) {
				stapi_do_remove_filter(demux_id, &dev_list[i].demux_fd[demux_id][num], i);
			}
		}
	}

	cs_debug_mask(D_DVBAPI, "filter #%d removed", num);
	return 1;
}