move detect_card_type to commonly accessible place

This commit is contained in:
amet 2013-09-17 21:06:31 +04:00
parent f2e1e9c3ad
commit 0566d3fa3a
3 changed files with 61 additions and 90 deletions

17
src/descrambler.h Normal file → Executable file
View file

@ -58,12 +58,29 @@ typedef struct caid {
} caid_t;
/**
* cards for which emm updates are handled
*/
typedef enum {
CARD_IRDETO,
CARD_DRE,
CARD_CONAX,
CARD_SECA,
CARD_VIACCESS,
CARD_NAGRA,
CARD_NDS,
CARD_CRYPTOWORKS,
CARD_BULCRYPT,
CARD_UNKNOWN
} card_type_t;
LIST_HEAD(caid_list, caid);
void descrambler_init ( void );
void descrambler_service_start ( struct service *t );
const char *descrambler_caid2name(uint16_t caid);
uint16_t descrambler_name2caid(const char *str);
card_type_t detect_card_type(const uint16_t caid);
#endif /* __TVH_DESCRAMBLER_H__ */

View file

@ -52,22 +52,6 @@
#define CWS_NETMSGSIZE 362
#define CWS_FIRSTCMDNO 0xe0
/**
* cards for which emm updates are handled
*/
typedef enum {
CARD_IRDETO,
CARD_DRE,
CARD_CONAX,
CARD_SECA,
CARD_VIACCESS,
CARD_NAGRA,
CARD_NDS,
CARD_CRYPTOWORKS,
CARD_BULCRYPT,
CARD_UNKNOWN
} card_type_t;
typedef enum {
MSG_CLIENT_2_SERVER_LOGIN = CWS_FIRSTCMDNO,
MSG_CLIENT_2_SERVER_LOGIN_ACK,
@ -297,7 +281,6 @@ typedef struct cwc {
*/
static void cwc_service_destroy(th_descrambler_t *td);
static void cwc_detect_card_type(cwc_t *cwc, struct cs_card_data *pcard);
void cwc_emm_conax(cwc_t *cwc, struct cs_card_data *pcard, uint8_t *data, int len);
void cwc_emm_irdeto(cwc_t *cwc, struct cs_card_data *pcard, uint8_t *data, int len);
void cwc_emm_dre(cwc_t *cwc, struct cs_card_data *pcard, uint8_t *data, int len);
@ -616,7 +599,7 @@ cwc_decode_card_data_reply(cwc_t *cwc, uint8_t *msg, int len)
n = descrambler_caid2name(pcard->cwc_caid & 0xff00) ?: "Unknown";
memcpy(pcard->cwc_ua, &msg[6], 8);
cwc_detect_card_type(cwc, pcard);
pcard->cwc_card_type = detect_card_type(pcard->cwc_caid);
msg += 15;
plen -= 12;
@ -684,76 +667,6 @@ cwc_decode_card_data_reply(cwc_t *cwc, uint8_t *msg, int len)
return 0;
}
/**
* Detects the cam card type
* If you want to add another card, have a look at
* http://www.dvbservices.com/identifiers/ca_system_id?page=3
*
* based on the equivalent in sasc-ng
*/
static void
cwc_detect_card_type(cwc_t *cwc, struct cs_card_data *pcard)
{
uint8_t c_sys = pcard->cwc_caid >> 8;
switch(pcard->cwc_caid) {
case 0x5581:
case 0x4aee:
pcard->cwc_card_type = CARD_BULCRYPT;
tvhlog(LOG_INFO, "cwc", "%s:%i: bulcrypt card",
cwc->cwc_hostname, cwc->cwc_port);
return;
}
switch(c_sys) {
case 0x17:
case 0x06:
pcard->cwc_card_type = CARD_IRDETO;
tvhlog(LOG_INFO, "cwc", "%s:%i: irdeto card",
cwc->cwc_hostname, cwc->cwc_port);
break;
case 0x05:
pcard->cwc_card_type = CARD_VIACCESS;
tvhlog(LOG_INFO, "cwc", "%s:%i: viaccess card",
cwc->cwc_hostname, cwc->cwc_port);
break;
case 0x0b:
pcard->cwc_card_type = CARD_CONAX;
tvhlog(LOG_INFO, "cwc", "%s:%i: conax card",
cwc->cwc_hostname, cwc->cwc_port);
break;
case 0x01:
pcard->cwc_card_type = CARD_SECA;
tvhlog(LOG_INFO, "cwc", "%s:%i: seca card",
cwc->cwc_hostname, cwc->cwc_port);
break;
case 0x4a:
pcard->cwc_card_type = CARD_DRE;
tvhlog(LOG_INFO, "cwc", "%s:%i: dre card",
cwc->cwc_hostname, cwc->cwc_port);
break;
case 0x18:
pcard->cwc_card_type = CARD_NAGRA;
tvhlog(LOG_INFO, "cwc", "%s:%i: nagra card",
cwc->cwc_hostname, cwc->cwc_port);
break;
case 0x09:
pcard->cwc_card_type = CARD_NDS;
tvhlog(LOG_INFO, "cwc", "%s:%i: nds card",
cwc->cwc_hostname, cwc->cwc_port);
break;
case 0x0d:
pcard->cwc_card_type = CARD_CRYPTOWORKS;
tvhlog(LOG_INFO, "cwc", "%s:%i: cryptoworks card",
cwc->cwc_hostname, cwc->cwc_port);
break;
default:
pcard->cwc_card_type = CARD_UNKNOWN;
break;
}
}
/**
* Login command
*/
@ -985,7 +898,8 @@ cwc_running_reply(cwc_t *cwc, uint8_t msgtype, uint8_t *msg, int len)
n = descrambler_caid2name(pcard->cwc_caid & 0xff00) ?: "Unknown";
memcpy(pcard->cwc_ua, &msg[6], 8);
cwc_detect_card_type(cwc, pcard);
pcard->cwc_card_type = detect_card_type(pcard->cwc_caid);
pcard->cwc_providers[0].id = (msg[8] << 16) | (msg[9] << 8) | msg[10];

42
src/descrambler/descrambler.c Normal file → Executable file
View file

@ -144,7 +144,47 @@ descrambler_name2caid(const char *s)
return (i < 0) ? strtol(s, NULL, 0) : i;
}
/**
* Detects the cam card type
* If you want to add another card, have a look at
* http://www.dvbservices.com/identifiers/ca_system_id?page=3
*
* based on the equivalent in sasc-ng
*/
card_type_t
detect_card_type(const uint16_t caid)
{
uint8_t c_sys = caid >> 8;
switch(caid) {
case 0x5581:
case 0x4aee:
return CARD_BULCRYPT;
}
switch(c_sys) {
case 0x17:
case 0x06:
return CARD_IRDETO;
case 0x05:
return CARD_VIACCESS;
case 0x0b:
return CARD_CONAX;
case 0x01:
return CARD_SECA;
case 0x4a:
return CARD_DRE;
case 0x18:
return CARD_NAGRA;
case 0x09:
return CARD_NDS;
case 0x0d:
return CARD_CRYPTOWORKS;
default:
return CARD_UNKNOWN;
}
}
/* **************************************************************************
* Editor