Changeset 3729 for trunk/reader-viaccess.c
- Timestamp:
- 10/25/10 22:06:01 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-viaccess.c
r3640 r3729 430 430 static int viaccess_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) 431 431 { 432 ulong provid=0; 432 433 cs_debug_mask(D_EMM, "Entered viaccess_get_emm_type ep->emm[0]=%02x",ep->emm[0]); 434 435 if (ep->emm[3] == 0x90 && ep->emm[4] == 0x03) { 436 provid = ep->emm[5] << 16 | ep->emm[6] << 8 | (ep->emm[7] & 0xFE); 437 memcpy(ep->provid, i2b(4, provid), 4); 438 } 433 439 434 440 switch (ep->emm[0]) { … … 813 819 } 814 820 821 #ifdef HAVE_DVBAPI 822 void viaccess_reassemble_emm(uchar *buffer, uint *len) { 823 static uchar emm_global[512]; 824 static int emm_global_len = 0; 825 826 int pos, emm_len = 0, k; 827 uchar emmbuf[512]; 828 829 // Viaccess 830 if (*len>500) return; 831 832 switch(buffer[0]) { 833 case 0x8c: 834 case 0x8d: 835 // emm-s part 1 836 if (!memcmp(emm_global, buffer, *len)) 837 return; 838 839 //cs_log("viaccess global emm_provid: %06X provid: %06X", emm_provid, provider); 840 841 // copy first part of the emm-s 842 memcpy(emm_global, buffer, *len); 843 emm_global_len=*len; 844 //cs_ddump(buffer, len, "viaccess global emm:"); 845 return; 846 847 case 0x8e: 848 // emm-s part 2 849 if (!emm_global_len) return; 850 851 if (buffer[6]!=0x00) return; 852 853 memcpy(emmbuf, buffer, 7); 854 pos=7; 855 856 for (k=3; k<emm_global[2]+2 && k<emm_global_len; k += emm_global[k+1]+2) { 857 if (emm_global[k]!=0x90) continue; 858 memcpy(emmbuf+pos, emm_global+k, emm_global[k+1]+2); 859 pos += emm_global[k+1]+2; 860 } 861 862 memcpy(emmbuf+pos, "\x9E\x20", 2); 863 memcpy(emmbuf+pos+2, buffer+7, 32); 864 pos+=34; 865 866 int found=0; 867 for (k=8; k<emm_global[2]+2 && k<emm_global_len; k += emm_global[k+1]+2) { 868 if (emm_global[k] == 0xA1 || emm_global[k] == 0xA8 || emm_global[k] == 0xA9 || emm_global[k] == 0xB6) { 869 memcpy(emmbuf+pos, emm_global+k, emm_global[k+1]+2); 870 pos += emm_global[k+1]+2; 871 found=1; 872 } 873 } 874 if (found==0) return; 875 876 memcpy(emmbuf+pos, "\xF0\x08", 2); 877 memcpy(emmbuf+pos+2, buffer+39, 8); 878 pos+=10; 879 880 emm_len=pos; 881 emmbuf[2]=emm_len-3; 882 cs_ddump(buffer, *len, "original emm:"); 883 memcpy(buffer, emmbuf, emm_len); 884 *len=emm_len; 885 break; 886 } 887 } 888 #endif 889 815 890 void reader_viaccess(struct s_cardsystem *ph) 816 891 {
Note:
See TracChangeset
for help on using the changeset viewer.