Changeset 3383
- Timestamp:
- 10/06/10 00:45:32 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-viaccess.c
r3357 r3383 488 488 { 489 489 def_resp; 490 //static const unsigned char insa4[] = { 0xca,0xa4,0x04,0x00,0x03 }; // set provider id490 static const unsigned char insa4[] = { 0xca,0xa4,0x04,0x00,0x03 }; // set provider id 491 491 unsigned char insf0[] = { 0xca,0xf0,0x00,0x01,0x22 }; // set adf 492 492 unsigned char insf4[] = { 0xca,0xf4,0x00,0x01,0x00 }; // set adf, encrypted … … 518 518 519 519 if (emmParsed[0]==0x90 && emmParsed[1]==0x03) { 520 /* identification of the service operator */ 521 522 uchar soid[3], ident[3], i; 523 524 for (i=0; i<3; i++) { 525 soid[i]=ident[i]=emmParsed[2+i]; 526 } 527 ident[2]&=0xF0; 528 keynr=soid[2]&0x0F; 529 if (chk_prov(reader, ident, keynr)) { 530 provider_ok = 1; 531 } else { 532 cs_debug("[viaccess-reader] EMM: provider or key not found on card (%x, %x)", ident, keynr); 533 cs_log("[viaccess-reader] EMM: provider or key not found on card (%x, %x)", ident, keynr); 534 return ERROR; 535 } 536 537 // as we are maybe changing the used provider, clear the cache, so the next ecm will re-select the correct one 538 memset(&reader->last_geo, 0, sizeof(reader->last_geo)); 539 540 // set provider -> newcs doesn't do this and it works on all cards apparently. 541 // I'm commenting this code for now. If it breaks some card I suspect this is related 542 // to the ADF being encrypted or not. When not encrypted, we might need to set the provider, 543 // if it's encrypted , don't set the provider. 544 /* 545 write_cmd(insa4, soid); 546 if( cta_res[cta_lr-2]!=0x90 || cta_res[cta_lr-1]!=0x00 ) { 547 cs_dump(insa4, 5, "set provider cmd:"); 548 cs_dump(soid, 3, "set provider data:"); 549 cs_log("[viaccess-reader] update error: %02X %02X", cta_res[cta_lr-2], cta_res[cta_lr-1]); 550 return ERROR; 551 } 552 */ 553 } else if (emmParsed[0]==0x9e && emmParsed[1]==0x20) { 520 /* identification of the service operator */ 521 522 uchar soid[3], ident[3], i; 523 524 for (i=0; i<3; i++) { 525 soid[i]=ident[i]=emmParsed[2+i]; 526 } 527 ident[2]&=0xF0; 528 keynr=soid[2]&0x0F; 529 if (chk_prov(reader, ident, keynr)) { 530 provider_ok = 1; 531 } else { 532 cs_debug("[viaccess-reader] EMM: provider or key not found on card (%x, %x)", ident, keynr); 533 cs_log("[viaccess-reader] EMM: provider or key not found on card (%x, %x)", ident, keynr); 534 return ERROR; 535 } 536 537 // check if the provider changes. If yes, set the new one. If not, don't .. card will return an error if we do. 538 if( memcmp(&reader->last_geo.provid,ident,3)) { 539 write_cmd(insa4, soid); 540 if( cta_res[cta_lr-2]!=0x90 || cta_res[cta_lr-1]!=0x00 ) { 541 cs_dump(insa4, 5, "set provider cmd:"); 542 cs_dump(soid, 3, "set provider data:"); 543 cs_log("[viaccess-reader] update error: %02X %02X", cta_res[cta_lr-2], cta_res[cta_lr-1]); 544 return ERROR; 545 } 546 } 547 // as we are maybe changing the used provider, clear the cache, so the next ecm will re-select the correct one 548 memset(&reader->last_geo, 0, sizeof(reader->last_geo)); 549 550 } 551 else if (emmParsed[0]==0x9e && emmParsed[1]==0x20) { 554 552 /* adf */ 555 553 … … 607 605 // set adf 608 606 insf0[3] = keynr; // key 607 insf0[4] = nano9EData[1] + 2; 609 608 write_cmd(insf0, nano9EData); 610 609 if( cta_res[cta_lr-2]!=0x90 || cta_res[cta_lr-1]!=0x00 ) { 611 610 cs_dump(insf0, 5, "set adf cmd:"); 612 cs_dump(nano9EData, 0x22, "set adf data:");611 cs_dump(nano9EData, insf0[4] , "set adf data:"); 613 612 cs_log("[viaccess-reader] update error: %02X %02X", cta_res[cta_lr-2], cta_res[cta_lr-1]); 614 613 return ERROR; … … 631 630 632 631 if (!nano92Data) { 633 // send subscription 632 // send subscription 633 ins18[2] = nano9EData ? 0x01: 0x00; // found 9E nano ? 634 ins18[3] = keynr; // key 634 635 ins18[4] = ins18Len + nanoF0Data[1] + 2; 635 636 memcpy (insData, ins18Data, ins18Len); … … 653 654 } 654 655 656 ins1c[2] = nano9EData ? 0x01: 0x00; // found 9E nano ? 655 657 ins1c[3] = keynr; // key 656 658 ins1c[4] = nano92Data[1] + 2 + nano81Data[1] + 2 + nanoF0Data[1] + 2;
Note:
See TracChangeset
for help on using the changeset viewer.