static void device_fn(const char *token, char *value, void *setting, FILE *f)
{
	struct s_reader *rdr = setting;
	int32_t isphysical = !is_network_reader(rdr);
	if(value)
	{
		int32_t i;
		char *ptr, *saveptr1 = NULL;
		for(i = 0, ptr = strtok_r(value, ",", &saveptr1); (i < 3) && (ptr); ptr = strtok_r(NULL, ",", &saveptr1), i++)
		{
			trim(ptr);
			switch(i)
			{
			case 0:
				cs_strncpy(rdr->device, ptr, sizeof(rdr->device));
				break;
			case 1:
				rdr->r_port = atoi(ptr);
				break;
			case 2:
				rdr->l_port = atoi(ptr);
				break;
			}
		}
		return;
	}
	fprintf_conf(f, token, "%s", rdr->device); // it should not have \n at the end
	if((rdr->r_port || cfg.http_full_cfg) && !isphysical)
		{ fprintf(f, ",%d", rdr->r_port); }
	if((rdr->l_port || cfg.http_full_cfg) && !isphysical && strncmp(reader_get_type_desc(rdr, 0), "cccam", 5))
		{ fprintf(f, ",%d", rdr->l_port); }
	fprintf(f, "\n");
}
Exemple #2
0
const char *reader_get_type_desc(struct s_reader *rdr, int32_t extended)
{
	const char *desc = "unknown";
	if(rdr->crdr && rdr->crdr->desc)
		{ return rdr->crdr->desc; }
	if(is_network_reader(rdr) || rdr->typ == R_SERIAL)
	{
		if(rdr->ph.desc)
			{ desc = rdr->ph.desc; }
	}
	if(rdr->typ == R_NEWCAMD && rdr->ncd_proto == NCD_524)
		{ desc = "newcamd524"; }
	else if(extended && rdr->typ == R_CCCAM && cccam_client_extended_mode(rdr->client) && !cccam_client_multics_mode(rdr->client))
	{
		desc = "cccam_ext";
	}
	else if(!extended && rdr->typ == R_CCCAM && cccam_client_extended_mode(rdr->client) && !cccam_client_multics_mode(rdr->client))
	{
		desc = "cccam_ext";
	}
	else if(rdr->typ == R_CCCAM && cccam_client_multics_mode(rdr->client))
	{
		desc = "cccam_mcs";
	}
	return desc;
}
Exemple #3
0
int32_t emm_reader_match(struct s_reader *reader, uint16_t caid, uint32_t provid) {
	int32_t i;

	// if physical reader a card needs to be inserted
	if (!is_network_reader(reader) && reader->card_status != CARD_INSERTED)
		return 0;

	if (reader->audisabled)
		return 0;

	if (reader->caid != caid) {
		int caid_found = 0;
		for (i = 0; i < 2; i++) {
			if (reader->csystem.caids[i] == caid) {
				caid_found = 1;
				break;
			}
		}
		if (!caid_found) {
			rdr_debug_mask(reader, D_EMM, "reader_caid %04X != caid %04X", reader->caid, caid);
			return 0;
		}
	}

	//if (!hexserialset(reader)) { There are cards without serial, they should get emm of type global and shared!
	//	rdr_debug_mask(reader, D_EMM, "no hexserial is set");
	//	return 0;
	//}

	if (!provid) {
		rdr_debug_mask(reader, D_EMM, "caid %04X has no provider", caid);
		return 1;
	}

	if (reader->auprovid && reader->auprovid == provid) {
		rdr_debug_mask(reader, D_EMM, "matched auprovid %06X", reader->auprovid);
		return 1;
	}

	if (!reader->nprov) {
		rdr_debug_mask(reader, D_EMM, "no provider is set");
		return 1;
	}

	for (i=0; i<reader->nprov; i++) {
		uint32_t prid = b2i(4, reader->prid[i]);
		if (prid == provid || ( (reader->typ == R_CAMD35 || reader->typ == R_CS378X) && (prid & 0xFFFF) == (provid & 0xFFFF) )) {
			rdr_debug_mask(reader, D_EMM, "provider match %04X:%06X", caid, provid);
			return 1;
		}
	}
	rdr_debug_mask(reader, D_EMM, "skip provider %04X:%06X", caid, provid);
	return 0;
}