diff --git a/src/cwc.c b/src/cwc.c index 689e0218..b47563bd 100644 --- a/src/cwc.c +++ b/src/cwc.c @@ -47,7 +47,7 @@ #define CWC_KEEPALIVE_INTERVAL 30 -#define CWS_NETMSGSIZE 256 +#define CWS_NETMSGSIZE 272 #define CWS_FIRSTCMDNO 0xe0 /** @@ -55,6 +55,7 @@ */ typedef enum { CARD_IRDETO, + CARD_DRE, CARD_CONAX, CARD_SECA, CARD_VIACCESS, @@ -271,6 +272,7 @@ static void cwc_service_destroy(th_descrambler_t *td); static void cwc_detecs_card_type(cwc_t *cwc); void cwc_emm_conax(cwc_t *cwc, uint8_t *data, int len); void cwc_emm_irdeto(cwc_t *cwc, uint8_t *data, int len); +void cwc_emm_dre(cwc_t *cwc, uint8_t *data, int len); void cwc_emm_seca(cwc_t *cwc, uint8_t *data, int len); void cwc_emm_viaccess(cwc_t *cwc, uint8_t *data, int len); @@ -667,6 +669,10 @@ cwc_detecs_card_type(cwc_t *cwc) cwc->cwc_card_type = CARD_SECA; tvhlog(LOG_INFO, "cwc", "%s: seca card", cwc->cwc_hostname); + case 0x4a: + cwc->cwc_card_type = CARD_DRE; + tvhlog(LOG_INFO, "cwc", "%s: dre card", + cwc->cwc_hostname); break; default: cwc->cwc_card_type = CARD_UNKNOWN; @@ -1175,6 +1181,9 @@ cwc_emm(uint8_t *data, int len) case CARD_VIACCESS: cwc_emm_viaccess(cwc, data, len); break; + case CARD_DRE: + cwc_emm_dre(cwc, data, len); + break; case CARD_UNKNOWN: break; } @@ -1544,6 +1553,34 @@ cwc_table_input(struct th_descrambler *td, struct service *t, } } +/** + * dre emm handler + */ +void +cwc_emm_dre(cwc_t *cwc, uint8_t *data, int len) +{ + int match = 0; + + if (data[0] == 0x87) { + if (memcmp(&data[3], &cwc->cwc_ua[4], 4) == 0) { + match = 1; + } + } + else if (data[0] == 0x86) { + int i; + for (i=0; i < cwc->cwc_num_providers; i++) { + if (memcmp(&data[40], &cwc->cwc_providers[i].sa[4], 4) == 0) { +/* if (memcmp(&data[3], &cwc->cwc_providers[i].sa[4], 1) == 0) { */ + match = 1; + break; + } + } + } + + if (match) + cwc_send_msg(cwc, data, len, 0, 1); +} + /** * diff --git a/src/psi.c b/src/psi.c index 35aab5c9..42231b7c 100644 --- a/src/psi.c +++ b/src/psi.c @@ -849,7 +849,9 @@ static struct strtab caidnametab[] = { { "Mentor", 0x2500 }, { "EBU", 0x2600 }, { "GI", 0x4700 }, - { "Telemann", 0x4800 } + { "Telemann", 0x4800 }, + { "DRECrypt", 0x4ae0 }, + { "DRECrypt2", 0x4ae1 } }; const char *