From 0566d3fa3a583d508d65d0068733ecfce7f733df Mon Sep 17 00:00:00 2001 From: amet Date: Tue, 17 Sep 2013 21:06:31 +0400 Subject: [PATCH] move detect_card_type to commonly accessible place --- src/descrambler.h | 17 +++++++ src/descrambler/cwc.c | 92 ++--------------------------------- src/descrambler/descrambler.c | 42 +++++++++++++++- 3 files changed, 61 insertions(+), 90 deletions(-) mode change 100644 => 100755 src/descrambler.h mode change 100644 => 100755 src/descrambler/descrambler.c diff --git a/src/descrambler.h b/src/descrambler.h old mode 100644 new mode 100755 index e9056f81..b9ccd50a --- a/src/descrambler.h +++ b/src/descrambler.h @@ -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__ */ diff --git a/src/descrambler/cwc.c b/src/descrambler/cwc.c index 0727ed05..0fd73cd7 100644 --- a/src/descrambler/cwc.c +++ b/src/descrambler/cwc.c @@ -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]; diff --git a/src/descrambler/descrambler.c b/src/descrambler/descrambler.c old mode 100644 new mode 100755 index f23ce1f6..8ab6a098 --- a/src/descrambler/descrambler.c +++ b/src/descrambler/descrambler.c @@ -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