Changeset 4664
- Timestamp:
- 01/31/11 18:36:44 (13 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-dvbapi.c
r4663 r4664 1848 1848 1849 1849 FILE *ecmtxt; 1850 if ((ecmtxt = fopen(ECMINFO_FILE, "w"))) { 1851 if(er->rc <= E_EMU) { 1852 fprintf(ecmtxt, "caid: 0x%04X\npid: 0x%04X\nprov: 0x%06X\n", er->caid, er->pid, (uint) er->prid); 1853 fprintf(ecmtxt, "reader: %s\n", er->selected_reader->label); 1854 if (er->selected_reader->typ & R_IS_CASCADING) 1855 fprintf(ecmtxt, "from: %s\n", er->selected_reader->device); 1856 else 1857 fprintf(ecmtxt, "from: local\n"); 1858 fprintf(ecmtxt, "protocol: %s\n", er->selected_reader->ph.desc); 1859 fprintf(ecmtxt, "hops: %d\n", er->selected_reader->cc_currenthops); 1860 fprintf(ecmtxt, "ecm time: %.3f\n", (float) client->cwlastresptime/1000); 1861 fprintf(ecmtxt, "cw0: %s\n", cs_hexdump(1,demux[i].lastcw[0],8)); 1862 fprintf(ecmtxt, "cw1: %s\n", cs_hexdump(1,demux[i].lastcw[1],8)); 1863 fclose(ecmtxt); 1864 ecmtxt = NULL; 1865 } 1850 ecmtxt = fopen(ECMINFO_FILE, "w"); 1851 if(ecmtxt != NULL) { 1852 fprintf(ecmtxt, "caid: 0x%04X\npid: 0x%04X\nprov: 0x%06X\n", er->caid, er->pid, (uint) er->prid); 1853 fprintf(ecmtxt, "reader: %s\n", er->selected_reader->label); 1854 if (er->selected_reader->typ & R_IS_CASCADING) 1855 fprintf(ecmtxt, "from: %s\n", er->selected_reader->device); 1856 else 1857 fprintf(ecmtxt, "from: local\n"); 1858 fprintf(ecmtxt, "protocol: %s\n", er->selected_reader->ph.desc); 1859 fprintf(ecmtxt, "hops: %d\n", er->selected_reader->cc_currenthops); 1860 fprintf(ecmtxt, "ecm time: %.3f\n", (float) client->cwlastresptime/1000); 1861 fprintf(ecmtxt, "cw0: %s\n", cs_hexdump(1,demux[i].lastcw[0],8)); 1862 fprintf(ecmtxt, "cw1: %s\n", cs_hexdump(1,demux[i].lastcw[1],8)); 1863 fclose(ecmtxt); 1864 ecmtxt = NULL; 1866 1865 } 1867 1866 } -
trunk/reader-viaccess.c
r4645 r4664 918 918 919 919 #ifdef HAVE_DVBAPI 920 int is_fixed_emm(uchar pi) {921 //check whether pi is valid according to viaccess spec922 //if pi is valid then we have a variable emm-s923 if ( (pi >= 0x90 && pi <= 0x94) ||924 (pi == 0x9E) ||925 (pi >= 0xA0 && pi <= 0xAF) ||926 (pi == 0xB6) ||927 (pi >= 0xC1 && pi <= 0xCF) ||928 (pi >= 0xD0 && pi <= 0xD8) ||929 (pi >= 0xEE && pi <= 0xEF) ||930 (pi == 0xF0)931 )932 return 0;933 else934 return 1;935 }936 937 920 //compare function for qsort in order to sort nanos 938 921 int cmp_nanos(const void *n1, const void *n2) { … … 954 937 const int NANO_LENGTH=64; 955 938 uint k; 956 uchar emmbuf[512];957 939 958 940 // Viaccess … … 987 969 nano_counter++; 988 970 } 989 k=0; 990 991 //extract from emm-s 992 //determine fixed or variable length emm-s 993 //it is fixed if no pi according to viaccess spec is found on buffer[7] 994 if (is_fixed_emm(buffer[7])) { 971 972 if (buffer[2]==0x2c) { 995 973 cs_debug_mask(D_DVBAPI, "viaccess_reassemble_emm: found fixed emm"); 996 974 //add 9E 20 nano + first 32 bytes of emm content … … 1003 981 memcpy(&nano_buffer[nano_counter][2], buffer+39, 8); 1004 982 nano_counter++; 1005 } 1006 else { 983 } else { 1007 984 cs_debug_mask(D_DVBAPI, "viaccess_reassemble_emm: found variable emm"); 1008 985 //extract from variable emm-s … … 1012 989 nano_counter++; 1013 990 } 1014 k=0;1015 991 } 1016 992 1017 cs_d ebug_mask(D_DVBAPI, "viaccess_reassemble_emm: nano_counter=%d", nano_counter);993 cs_ddump_mask(D_DVBAPI, buffer, *len, "viaccess_reassemble_emm: emm-s"); 1018 994 1019 995 //sort nanos according to ascending pi 1020 996 qsort(&nano_buffer, nano_counter, sizeof(*nano_buffer), cmp_nanos); 1021 997 1022 //copy emm-s header (including sa)1023 memcpy(emmbuf, buffer, 7);1024 998 pos=7; 1025 1026 999 //add nanos in sorted order to emmbuf 1027 for (i=0; i<nano_counter ; i++) {1028 memcpy(& emmbuf[pos], &nano_buffer[i][0], nano_buffer[i][1]+2);1000 for (i=0; i<nano_counter, pos<500; i++) { 1001 memcpy(&buffer[pos], &nano_buffer[i][0], nano_buffer[i][1]+2); 1029 1002 pos+=nano_buffer[i][1]+2; 1030 1003 } 1031 1004 1032 1005 //calculate emm length and set it on position 2 1033 emmbuf[2]=pos-3; 1034 1035 //cs_ddump_mask(D_READER, buffer, *len, "original emm:"); 1006 buffer[2]=pos-3; 1007 1036 1008 cs_ddump_mask(D_DVBAPI, emm_global, emm_global_len, "viaccess_reassemble_emm: emm-gh"); 1037 cs_ddump_mask(D_DVBAPI, buffer, *len, "viaccess_reassemble_emm: emm-s"); 1038 cs_ddump_mask(D_DVBAPI, emmbuf, pos, "viaccess_reassemble_emm: assembled emm"); 1039 1040 //place assembled emm 1041 memcpy(buffer, emmbuf, pos); 1009 cs_ddump_mask(D_DVBAPI, buffer, pos, "viaccess_reassemble_emm: assembled emm nano_counter=%d", nano_counter); 1010 1042 1011 *len=pos; 1043 1012 cs_debug_mask(D_DVBAPI, "viaccess_reassemble_emm: exit len=%d", pos);
Note:
See TracChangeset
for help on using the changeset viewer.