- Timestamp:
- 08/09/13 22:27:57 (11 years ago)
- Location:
- branches/modern
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/modern/module-cacheex.c
r8824 r8828 248 248 char result[CXM_FMT_LEN] = { 0 }; 249 249 int32_t s, size = CXM_FMT_LEN; 250 s = ecmfmt(entry->caid, 0, entry->provid, entry->chid, entry->pid, entry->srvid, entry->ecmlen, 0, 0, 0, result, size, 0 ,0);250 s = ecmfmt(entry->caid, 0, entry->provid, entry->chid, entry->pid, entry->srvid, entry->ecmlen, 0, 0, 0, result, size, 0, 0); 251 251 s += snprintf(result+s, size-s, " = "); 252 252 s += ecmfmt(entry->to_caid, 0, entry->to_provid, entry->to_chid, entry->to_pid, entry->to_srvid, entry->to_ecmlen, 0, 0, 0, result+s, size-s, 0, 0); -
branches/modern/module-cccam.c
r8700 r8828 1052 1052 1053 1053 rdr->caid = card->caid; 1054 if (cur_er) 1055 rdr->auprovid = cur_er->prid;1054 // if (cur_er) stefansat disabled for now as it seems to stop updating management providers 1055 // rdr->auprovid = cur_er->prid; 1056 1056 } 1057 1057 -
branches/modern/module-dvbapi-stapi.c
r8748 r8828 13 13 // These variables are declared in module-dvbapi.c 14 14 extern int32_t disable_pmt_files; 15 extern int32_t pausecam;16 15 extern struct s_dvbapi_priority *dvbapi_priority; 17 16 extern DEMUXTYPE demux[MAX_DEMUX]; … … 30 29 disable_pmt_files=1; 31 30 stapi_on=0; 32 pausecam = 1; // disable parsing of ecm/emm or attempts to start any new filters 33 34 for (i=0;i<MAX_DEMUX;i++) 31 char dest[1024]; 32 for (i=0;i<MAX_DEMUX;i++){ 33 snprintf(dest, sizeof(dest), "%s%s", TMPDIR, demux[i].pmt_file); 34 unlink(dest); // remove obsolete pmt file 35 35 dvbapi_stop_descrambling(i); 36 } 36 37 37 38 for (i=0;i<PTINUM;i++) { … … 123 124 cs_strncpy(dev_list[i].name,dp->d_name, sizeof(dev_list[i].name)); 124 125 cs_log("PTI: %s open %d", dp->d_name, i); 125 pausecam = 0 ; // allow parsing of ecm/emm or attempts to start new filters 126 126 127 127 ErrorCode = oscam_stapi_SignalAllocate(dev_list[i].SessionHandle, &dev_list[i].SignalHandle); 128 128 if (ErrorCode != 0) … … 164 164 int32_t stapi_set_filter(int32_t demux_id, uint16_t pid, uchar *filter, uchar *mask, int32_t num, char *pmtfile) { 165 165 int32_t i; 166 uint32_t ret = 0; 166 int32_t ret = -1; 167 char dest[1024]; 167 168 uint16_t pids[1] = { pid }; 168 169 struct s_dvbapi_priority *p; 169 170 170 if (!pmtfile) return 0; 171 if (!pmtfile){ 172 cs_debug_mask(D_DVBAPI, "No valid pmtfile!"); 173 return -1; 174 } 171 175 172 176 cs_debug_mask(D_DVBAPI, "pmt file %s demux_id %d", pmtfile, demux_id); 173 177 174 178 for (p=dvbapi_priority; p != NULL; p=p->next) { 175 if (p->type!='s') continue; 176 if (strcmp(pmtfile, p->pmtfile)!=0) 177 continue; 179 if (p->type!='s') continue; // stapi rule? 180 if (strcmp(pmtfile, p->pmtfile)!=0) continue; // same file? 178 181 179 182 for (i=0;i<PTINUM;i++) { 180 if(strcmp(dev_list[i].name, p->devname)==0 && p->disablefilter==0) { 183 if(strcmp(dev_list[i].name, p->devname)==0 && p->disablefilter==0) { // check device name and if filtering is enabled! 181 184 cs_debug_mask(D_DVBAPI, "set stapi filter on %s for pid %04X", dev_list[i].name, pids[0]); 182 185 ret = stapi_do_set_filter(demux_id, &dev_list[i].demux_fd[demux_id][num], pids, 1, filter, mask, i); 183 } 184 } 185 } 186 187 cs_debug_mask(D_DVBAPI, "filter #%d set (pid %04X)", num, pid); 186 if (ret > 0) { // success 187 cs_debug_mask(D_DVBAPI, "%s filter #%d set (pid %04X)", dev_list[i].name, num, pid); 188 return ret; // return filternumber 189 } 190 else { // failure 191 cs_debug_mask(D_DVBAPI, "Error setting new filter for pid %04X on %s!", pid, dev_list[i].name); 192 return -1; // set return to error 193 } 194 } 195 } 196 } 197 198 if (p == NULL){ 199 cs_debug_mask(D_DVBAPI, "No matching S: line in oscam.dvbapi for pmtfile %s -> stop descrambling!", pmtfile); 200 snprintf(dest, sizeof(dest), "%s%s", TMPDIR, demux[demux_id].pmt_file); 201 unlink(dest); // remove obsolete pmt file 202 dvbapi_stop_descrambling(demux_id); 203 } 188 204 return ret; 189 205 } -
branches/modern/module-dvbapi.c
r8823 r8828 2339 2339 2340 2340 if ((time_t)pmt_info.st_mtime != demux[i].pmt_time) { 2341 cs_log(" Stopping demux for pmt file %s", dest);2341 cs_log("PMT file %s is updated -> stop descrambling demuxer #%d", dest, i); 2342 2342 dvbapi_stop_descrambling(i); 2343 2343 } … … 2347 2347 continue; 2348 2348 } else { 2349 cs_log(" Stopping demux for pmt file %s", dest);2349 cs_log("Could not open PMT file %s -> stop descrambling demuxer #%d", dest, i); 2350 2350 dvbapi_stop_descrambling(i); 2351 2351 } … … 2372 2372 if (strncmp(dp->d_name, "pmt", 3)!=0 || strncmp(dp->d_name+strlen(dp->d_name)-4, ".tmp", 4)!=0) 2373 2373 continue; 2374 2374 #ifdef WITH_STAPI 2375 struct s_dvbapi_priority *p; 2376 for (p=dvbapi_priority; p != NULL; p=p->next) { // stapi: check if there is a device connected to this pmt file! 2377 if (p->type!='s') continue; // stapi rule? 2378 if (strcmp(dp->d_name, p->pmtfile)!=0) continue; // same file? 2379 break; // found match! 2380 } 2381 if (p == NULL){ 2382 cs_debug_mask(D_DVBAPI, "No matching S: line in oscam.dvbapi for pmtfile %s -> skip!", dp->d_name); 2383 continue; 2384 } 2385 #endif 2375 2386 snprintf(dest, sizeof(dest), "%s%s", TMPDIR, dp->d_name); 2376 2387 pmt_fd = open(dest, O_RDONLY); … … 2436 2447 if (len>sizeof(dest)) { 2437 2448 cs_debug_mask(D_DVBAPI,"event_handler() dest buffer is to small for pmt data!"); 2449 continue; 2450 } 2451 if (len<16){ 2452 cs_debug_mask(D_DVBAPI,"event_handler() received pmt is too small! (%d < 16 bytes!)", len); 2438 2453 continue; 2439 2454 } … … 2881 2896 if (demux[i].demux_fd[g].type == TYPE_EMM) emmcounter++; // count emm filters also 2882 2897 } 2883 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d has %d ecmpids, %d streampids, %d ecmfilters and %d emmfilters", i, demux[i].ECMpidcount, 2884 demux[i].STREAMpidcount, ecmcounter, emmcounter); 2885 // delayed emm start for non irdeto caids ( 2898 if (ecmcounter != demux[i].old_ecmfiltercount || emmcounter != demux[i].old_emmfiltercount){ // only produce log if something changed 2899 cs_debug_mask(D_DVBAPI,"[DVBAPI] Demuxer #%d has %d ecmpids, %d streampids, %d ecmfilters and %d emmfilters", i, demux[i].ECMpidcount, 2900 demux[i].STREAMpidcount, ecmcounter, emmcounter); 2901 demux[i].old_ecmfiltercount = ecmcounter; // save new amount of ecmfilters 2902 demux[i].old_emmfiltercount = emmcounter; // save new amount of emmfilters 2903 } 2886 2904 2887 if (cfg.dvbapi_au>0 && demux[i].EMMpidcount == 0 && ((time(NULL)-demux[i].emmstart)>30)){ //start emm cat 2905 // delayed emm start for non irdeto caids 2906 if (cfg.dvbapi_au>0 && demux[i].EMMpidcount == 0 && ((time(NULL)-demux[i].emmstart)>30) && emmcounter == 0){ //start emm cat 2888 2907 demux[i].emmstart = time(NULL); // trick to let emm fetching start after 30 seconds to speed up zapping 2889 2908 dvbapi_start_filter(i, demux[i].pidindex, 0x001, 0x001, 0x01, 0x01, 0xFF, 0, TYPE_EMM, 1); //CAT … … 3373 3392 edit_channel_cache(i, j, 1); // do it here to here after the right CHID is registered 3374 3393 3375 dvbapi_set_section_filter(i, er);3394 //dvbapi_set_section_filter(i, er); is not needed anymore (unsure) 3376 3395 demux[i].ECMpids[j].irdeto_cycle = 0xFE; // reset irdeto cycle 3377 3396 struct s_dvbapi_priority *delayentry=dvbapi_check_prio_match(i, demux[i].pidindex, 'd'); -
branches/modern/module-dvbapi.h
r8703 r8828 124 124 time_t pmt_time; 125 125 uint8_t stopdescramble; 126 uint8_t old_ecmfiltercount; // previous ecm filtercount 127 uint8_t old_emmfiltercount; // previous emm filtercount 126 128 #ifdef WITH_STAPI 127 129 uint32_t DescramblerHandle[PTINUM];
Note:
See TracChangeset
for help on using the changeset viewer.