5 | | static int32_t seca_do_ecm(struct s_reader * reader, const ECM_REQUEST *er, struct s_ecm_answer *ea) |
6 | | int ecm_type; |
7 | | int seca_version = reader->availkeys[0][1]; //misusing availkeys to store seca_version |
8 | | if (seca_version == 3) ecm_type = 3; // assume ecm type same as card in reader |
9 | | if (seca_version == 2) ecm_type = 2; // assume ecm type same as card in reader |
10 | | if(er->ecm[8] == 0x00) ecm_type = 3; // this is a mediaguard 3 ecm request |
11 | | if(er->ecm[8] == 0x10 && er->ECM[9] == 0x01) ecm_type = 2; // this is a seca2 ecm request |
12 | | if ((ecm_type == 2 && seca_version == 3) :: (ecm_type == 3 && seca_version == 2)) return ERROR; |
13 | | |
| 5 | if (er->ecm[3] == 0x00 && er->ecm[4] == 0x6a) { //provid 006A = CDNL uses seca2/seca3 simulcrypt on same caid |
| 6 | int ecm_type = 0; |
| 7 | int seca_version = reader->availkeys[0][1]; //misusing availkeys to store seca_version |
| 8 | if (seca_version == 3) { //assume ecm type same as card in reader |
| 9 | ecm_type = 3; |
| 10 | } |
| 11 | if (seca_version == 2) { //assume ecm type same as card in reader |
| 12 | ecm_type = 2; |
| 13 | } |
| 14 | if (er->ecm[8] == 0x00) { //this is a mediaguard 3 ecm request |
| 15 | ecm_type = 3; |
| 16 | } |
| 17 | if (er->ecm[8] == 0x10) { // first seca2 request byte found |
| 18 | if (er->ecm[9] == 0x01) {//second seca2 ecmrequest byte found |
| 19 | ecm_type = 2; |
| 20 | } |
| 21 | } |
| 22 | if (ecm_type != seca_version){ //only accept ecmrequest for right card! |
| 23 | snprintf( ea->msglog, MSGLOGSIZE, "ecm not valid!" ); |
| 24 | return ERROR; |
| 25 | } |
| 26 | } |