Changeset 8909
- Timestamp:
- 09/10/13 00:55:39 (11 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/globals.h
r8908 r8909 782 782 uint16_t onid; 783 783 uint16_t tsid; 784 uint32_t ens; 784 uint32_t ens; // enigma namespace 785 uint32_t vpid; // videopid 785 786 uint16_t chid; 786 787 uint16_t pid; -
trunk/module-constcw.c
r8489 r8909 19 19 } 20 20 21 int32_t constcw_analyse_file(uint16_t c_caid, uint32_t UNUSED(c_prid), uint16_t c_sid, uchar *dcw)21 int32_t constcw_analyse_file(uint16_t c_caid, uint32_t c_prid, uint16_t c_sid, uint32_t c_vpid, uint16_t c_ecmpid, uchar *dcw) 22 22 { 23 //CAID:PROVIDER:SID: PMT:PID::XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX23 //CAID:PROVIDER:SID:VPID:ECMPID::XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX 24 24 25 25 FILE *fp; 26 26 char token[512]; 27 uint32_t caid, provid, sid, pmt,pid;27 uint32_t caid, provid, sid, vpid, ecmpid; 28 28 int32_t cw[16]; 29 29 … … 34 34 if (token[0]=='#') continue; 35 35 36 sscanf(token, "%4x:%6x:%4x:%4x:%4x::%2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x", &caid, &provid, &sid, & pmt, &pid,36 sscanf(token, "%4x:%6x:%4x:%4x:%4x::%2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x", &caid, &provid, &sid, &vpid, &ecmpid, 37 37 &cw[0], &cw[1], &cw[2], &cw[3], &cw[4], &cw[5], &cw[6], &cw[7], 38 38 &cw[8], &cw[9], &cw[10], &cw[11], &cw[12], &cw[13], &cw[14], &cw[15]); 39 39 40 40 //cs_log("Line found: %s", token); 41 if (c_caid == caid && c_sid == sid ){41 if (c_caid == caid && c_sid == sid && (!provid || provid == c_prid) && (!vpid || vpid == c_vpid ) && (!ecmpid || ecmpid == c_ecmpid )){ 42 42 fclose(fp); 43 43 int8_t i; 44 44 for(i = 0; i < 16; ++i) 45 45 dcw[i] = (uchar) cw[i]; 46 cs_log("Entry found: %04X:%06X:%04X:%04X:%04X::%s", caid, provid, sid, pmt,pid, cs_hexdump(1, dcw, 16, token, sizeof(token)));46 cs_log("Entry found: %04X:%06X:%04X:%04X:%04X::%s", caid, provid, sid, vpid, ecmpid, cs_hexdump(1, dcw, 16, token, sizeof(token))); 47 47 return 1; 48 48 } … … 110 110 //cs_log("Searching ConstCW for ECM: %04X:%06X:%04X (%d)", er->caid, er->prid, er->srvid, er->l); 111 111 112 if (constcw_analyse_file(er->caid, er->prid, er->srvid, cw)==0) {112 if (constcw_analyse_file(er->caid, er->prid, er->srvid, er->vpid, er->pid, cw)==0) { 113 113 write_ecm_answer(rdr, er, E_NOTFOUND, (E1_READER<<4 | E2_SID), NULL, NULL); 114 114 } else { -
trunk/module-dvbapi.c
r8904 r8909 812 812 if (added==1) 813 813 return; 814 814 for (n=0;n<demux[demux_id].ECMpidcount;n++) { // check for existing pid 815 if (demux[demux_id].ECMpids[n].CAID == caid && demux[demux_id].ECMpids[n].ECM_PID == ecmpid) 816 return; // found same pid -> skip 817 } 815 818 demux[demux_id].ECMpids[demux[demux_id].ECMpidcount].ECM_PID = ecmpid; 816 819 demux[demux_id].ECMpids[demux[demux_id].ECMpidcount].CAID = caid; … … 1158 1161 er->pid = demux[demux_id].ECMpids[pid].ECM_PID; 1159 1162 er->prid = demux[demux_id].ECMpids[pid].PROVID; 1163 er->vpid = demux[demux_id].ECMpids[pid].VPID; 1160 1164 1161 1165 for (rdr=first_active_reader; rdr != NULL ; rdr=rdr->next){ … … 1201 1205 } 1202 1206 1203 cs_log("[DVBAPI] Demuxer #%d trying to descramble PID #%d CAID %04X PROVID %06X ECMPID %04X ANY CHID", demux_id, pid, 1204 demux[demux_id].ECMpids[pid].CAID, demux[demux_id].ECMpids[pid].PROVID, demux[demux_id].ECMpids[pid].ECM_PID); 1207 cs_log("[DVBAPI] Demuxer #%d trying to descramble PID #%d CAID %04X PROVID %06X ECMPID %04X ANY CHID VPID %04X", demux_id, pid, 1208 demux[demux_id].ECMpids[pid].CAID, demux[demux_id].ECMpids[pid].PROVID, demux[demux_id].ECMpids[pid].ECM_PID, 1209 demux[demux_id].ECMpids[pid].VPID); 1205 1210 1206 1211 demux[demux_id].curindex=pid; // set current pid to the fresh started one … … 1221 1226 1222 1227 if (p && p->chid<0x10000){ // do we prio a certain chid? 1223 cs_log("[DVBAPI] Demuxer #%d trying to descramble PID #%d CAID %04X PROVID %06X ECMPID %04X CHID %04X ", demux_id, pid,1228 cs_log("[DVBAPI] Demuxer #%d trying to descramble PID #%d CAID %04X PROVID %06X ECMPID %04X CHID %04X VPID %04X", demux_id, pid, 1224 1229 demux[demux_id].ECMpids[pid].CAID, demux[demux_id].ECMpids[pid].PROVID, demux[demux_id].ECMpids[pid].ECM_PID, 1225 demux[demux_id].ECMpids[pid].CHID );1230 demux[demux_id].ECMpids[pid].CHID, demux[demux_id].ECMpids[pid].VPID); 1226 1231 } 1227 1232 else{ 1228 cs_log("[DVBAPI] Demuxer #%d trying to descramble PID #%d CAID %04X PROVID %06X ECMPID %04X ANY CHID", demux_id, pid, 1229 demux[demux_id].ECMpids[pid].CAID, demux[demux_id].ECMpids[pid].PROVID, demux[demux_id].ECMpids[pid].ECM_PID); 1233 cs_log("[DVBAPI] Demuxer #%d trying to descramble PID #%d CAID %04X PROVID %06X ECMPID %04X ANY CHID VPID %04X", demux_id, pid, 1234 demux[demux_id].ECMpids[pid].CAID, demux[demux_id].ECMpids[pid].PROVID, demux[demux_id].ECMpids[pid].ECM_PID, 1235 demux[demux_id].ECMpids[pid].VPID); 1230 1236 } 1231 1237 … … 2117 2123 dvbapi_parse_descriptor(demux_id, program_info_length-1, buffer+7); 2118 2124 2119 uint32_t es_info_length=0 ;2125 uint32_t es_info_length=0, vpid = 0; 2120 2126 struct s_dvbapi_priority *addentry; 2121 2127 … … 2131 2137 2132 2138 demux[demux_id].STREAMpids[demux[demux_id].STREAMpidcount++]=elementary_pid; 2133 2139 if (!vpid && (stream_type == 01 || stream_type == 02 || stream_type == 0x10)) vpid = elementary_pid; // find and register videopid 2140 2134 2141 if (es_info_length != 0 && es_info_length < length) { 2135 2142 dvbapi_parse_descriptor(demux_id, es_info_length, buffer+i+5); … … 2145 2152 } 2146 2153 } 2154 } 2155 for(j = 0; j < demux[demux_id].ECMpidcount; j++){ 2156 demux[demux_id].ECMpids[j].VPID=vpid; // register found vpid on all ecmpids of this demuxer 2147 2157 } 2148 2158 cs_log("Found %d ECMpids and %d STREAMpids in PMT", demux[demux_id].ECMpidcount, demux[demux_id].STREAMpidcount); … … 2623 2633 er->pid = curpid->ECM_PID; 2624 2634 er->prid = curpid->PROVID; 2635 er->vpid = curpid->VPID; 2625 2636 er->ecmlen= len; 2626 2637 memcpy(er->ecm, buffer, er->ecmlen); … … 2630 2641 2631 2642 if (curpid->CAID>>8 == 0x06){ //irdeto cas 2632 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d ECMTYPE %02X CAID %04X PROVID %06X ECMPID %04X IRDETO INDEX %02X MAX INDEX %02X CHID %04X CYCLE %02X ", demux_id, er->ecm[0], er->caid, er->prid, er->pid, er->ecm[4], er->ecm[5], er->chid, curpid->irdeto_cycle);2643 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d ECMTYPE %02X CAID %04X PROVID %06X ECMPID %04X IRDETO INDEX %02X MAX INDEX %02X CHID %04X CYCLE %02X VPID %04X", demux_id, er->ecm[0], er->caid, er->prid, er->pid, er->ecm[4], er->ecm[5], er->chid, curpid->irdeto_cycle, er->vpid); 2633 2644 2634 2645 if (curpid->irdeto_curindex != buffer[4]){ // old style wrong irdeto index … … 3292 3303 if (demux[i].program_number != er->srvid) continue; // skip ecm response for other srvid 3293 3304 demux[i].rdr=er->selected_reader; 3294 3295 for (j=0; j<demux[i].ECMpidcount; j++) // check for matching ecmpid 3305 for (j=0; j<demux[i].ECMpidcount; j++){ // check for matching ecmpid 3296 3306 if ((demux[i].ECMpids[j].CAID == er->caid || demux[i].ECMpids[j].CAID == er->ocaid) 3297 3307 && demux[i].ECMpids[j].ECM_PID == er->pid 3298 && demux[i].ECMpids[j].PROVID == er->prid) 3308 && demux[i].ECMpids[j].PROVID == er->prid 3309 && demux[i].ECMpids[j].VPID == er->vpid) 3299 3310 break; 3300 3311 } 3301 3312 if (j==demux[i].ECMpidcount) continue; // ecm response srvid ok but no matching ecmpid, perhaps this for other demuxer 3302 3313 3303 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d %scontrolword received for PID #%d CAID %04X PROVID %06X ECMPID %04X CHID %04X ", i,3304 (er->rc >= E_NOTFOUND?"no ":""), j, er->caid, er->prid, er->pid, er->chid );3314 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d %scontrolword received for PID #%d CAID %04X PROVID %06X ECMPID %04X CHID %04X VPID %04X", i, 3315 (er->rc >= E_NOTFOUND?"no ":""), j, er->caid, er->prid, er->pid, er->chid, er->vpid); 3305 3316 3306 3317 if (er->rc < E_NOTFOUND){ // check for delayed response on already expired ecmrequest … … 3347 3358 demux[i].curindex = j; 3348 3359 demux[i].ECMpids[j].checked = 3; 3349 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d descrambling PID #%d CAID %04X PROVID %06X ECMPID %04X CHID %02X ",3350 i, demux[i].curindex, er->caid, er->prid, er->pid, er->chid );3360 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d descrambling PID #%d CAID %04X PROVID %06X ECMPID %04X CHID %02X VPID %04X", 3361 i, demux[i].curindex, er->caid, er->prid, er->pid, er->chid, er->vpid); 3351 3362 } 3352 3363 … … 3376 3387 } 3377 3388 3378 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d descrambling PID #%d CAID %04X PROVID %06X ECMPID %04X CHID %02X ",3379 i, demux[i].curindex, er->caid, er->prid, er->pid, er->chid );3389 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d descrambling PID #%d CAID %04X PROVID %06X ECMPID %04X CHID %02X VPID %04X", 3390 i, demux[i].curindex, er->caid, er->prid, er->pid, er->chid, er->vpid); 3380 3391 } 3381 3392 … … 3417 3428 if (demux[i].ECMpids[j].irdeto_curindex==0xFE) demux[i].ECMpids[j].irdeto_curindex = 0x00; // init irdeto current index to first one 3418 3429 if (!(demux[i].ECMpids[j].irdeto_curindex+1 > demux[i].ECMpids[j].irdeto_maxindex)) { // check for last / max chid 3419 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d trying next irdeto chid of PID #%d CAID %04X PROVID %06X ECMPID %04X ", i,3420 j, er->caid, er->prid, er->pid );3430 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d trying next irdeto chid of PID #%d CAID %04X PROVID %06X ECMPID %04X VPID %04X", i, 3431 j, er->caid, er->prid, er->pid, er->vpid); 3421 3432 demux[i].ECMpids[j].irdeto_curindex++; // irdeto index one up 3422 3433 demux[i].ECMpids[j].table=0; … … 3551 3562 } 3552 3563 if (handled == 0) { 3553 cs_debug_mask(D_DVBAPI,"[DVBAPI] This ecm response is unhandled!"); 3564 cs_debug_mask(D_DVBAPI,"[DVBAPI] Unhandled ECM response received for CAID %04X PROVID %06X ECMPID %04X CHID %04X VPID %04X", 3565 er->caid, er->prid, er->pid, er->chid, er->vpid); 3554 3566 } 3555 3567 -
trunk/module-dvbapi.h
r8830 r8909 56 56 uint32_t CHID; 57 57 uint16_t EMM_PID; 58 uint32_t VPID; // videopid 58 59 uint8_t irdeto_maxindex; // max irdeto indexes always fresh fetched from current ecm 59 60 uint8_t irdeto_curindex; // current irdeto index we want to handle
Note:
See TracChangeset
for help on using the changeset viewer.