Changeset 1998
- Timestamp:
- 04/07/10 16:41:30 (14 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-camd35.c
r1989 r1998 494 494 reader[ridx].nprov = 0; //reset if number changes on reader change 495 495 reader[ridx].nprov = buf[47]; 496 reader[ridx]. aucaid= b2i(2, buf+20);496 reader[ridx].caid[0] = b2i(2, buf+20); 497 497 498 498 int i; … … 522 522 cs_hexdump(0, reader[ridx].hexserial, 8), 523 523 reader[ridx].card_system, 524 reader[ridx]. aucaid);524 reader[ridx].caid[0]); 525 525 } 526 526 -
trunk/module-dvbapi.c
r1997 r1998 48 48 unsigned char buffer_cache_dmx[CS_ECMSTORESIZE]; 49 49 unsigned char lastcw[2][8]; 50 int emm_filter; 51 struct s_reader *rdr; 52 50 53 } DEMUXTYPE; 51 54 #define DMX_FILTER_SIZE 16 … … 290 293 int g; 291 294 292 /* set cardsystem to 0. This prevents us for emm flood to server293 * until carsystem is set new from CMD05294 */295 if (reader[client[cs_idx].au].typ == R_CAMD35)296 reader[client[cs_idx].au].card_system = 0;297 298 295 for (g=0;g<MAX_FILTER;g++) { 299 296 if (demux[demux_index].demux_fd[g].fd>0 && demux[demux_index].demux_fd[g].type==type) { … … 338 335 } 339 336 340 void dvbapi_start_emm_filter(int demux_index , int emmtype, int type) {337 void dvbapi_start_emm_filter(int demux_index) { 341 338 int dmx_fd, i, n=-1; 342 uchar filter[32];343 uchar *reader_filter; 339 uchar *filter,nullserial[8]; 340 344 341 char *typtext[]={"UNKNOWN", "UNIQUE", "SHARED", "GLOBAL"}; 345 342 … … 349 346 ushort pid = demux[demux_index].ECMpids[demux[demux_index].pidindex].EMM_PID; 350 347 351 int found=0; 352 for (i=0;i<CS_MAXREADER;i++) { 353 354 if(!reader[i].aucaid) 355 reader[i].aucaid = reader[i].caid[0]; 356 357 if (reader[i].aucaid == caid) { 358 client[cs_idx].au=i; 359 found=1; 360 break; 361 } 362 } 363 364 if (!found) { 365 cs_log("emm dmx filter - no AU reader found"); 366 } else { 367 reader_filter = get_emm_filter(&reader[client[cs_idx].au], emmtype); 368 memcpy(filter, reader_filter, 32); 369 cs_log("emm dmx filter %s \t set to: %s",typtext[emmtype], cs_hexdump(0, filter, 32)); 370 371 348 if (pid==0 || demux[demux_index].emm_filter==1 || !demux[demux_index].rdr) 349 return; 350 351 memset(nullserial,0,8); 352 353 if (!memcmp(demux[demux_index].rdr->hexserial, nullserial, 8)) { 354 //cs_debug("dvbapi: hexserial not set %s", cs_hexdump(1, demux[demux_index].rdr->hexserial, 8)); 355 return; 356 } 357 358 if (demux[demux_index].rdr->card_system==0) 359 demux[demux_index].rdr->card_system=get_cardsystem(caid); 360 361 int j; 362 for (j=1;j<4;j++) { 363 int emmtype=j; 364 n=-1; 365 filter = get_emm_filter(demux[demux_index].rdr, emmtype); 366 372 367 for (i=0;i<MAX_FILTER;i++) { 373 368 if (demux[demux_index].demux_fd[i].fd<=0) { … … 376 371 } 377 372 } 378 373 379 374 if (n==-1) { 380 375 cs_log("dvbapi: no free filter"); … … 383 378 384 379 dmx_fd=dvbapi_open_device(demux_index, 0); 385 380 386 381 demux[demux_index].demux_fd[n].fd=dmx_fd; 387 382 demux[demux_index].demux_fd[n].CA_System_ID=caid; 388 383 demux[demux_index].demux_fd[n].PID=pid; 389 demux[demux_index].demux_fd[n].type=type; 390 391 cs_ddump(filter, 32, "demux filter:"); 384 demux[demux_index].demux_fd[n].type=TYPE_EMM; 385 386 cs_log("dvbapi: starting emm filter %s",typtext[emmtype]); 387 cs_dump(filter, 32, "demux filter:"); 392 388 dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 0); 393 389 } 390 demux[demux_index].emm_filter=1; 394 391 } 395 392 … … 618 615 demux[demux_id].cadev_index=demux_index2; 619 616 demux[demux_id].socket_fd=connfd; 617 demux[demux_id].emm_filter=0; 618 demux[demux_id].rdr=NULL; 620 619 621 620 for (i=0;i<8;i++) { … … 848 847 demux[i].demux_index=-1; 849 848 demux[i].socket_fd=0; 849 demux[i].emm_filter=0; 850 demux[i].rdr=NULL; 850 851 memset(demux[i].buffer_cache_dmx, 0, CS_ECMSTORESIZE); 851 852 for (rc=0;rc<MAX_FILTER;rc++) demux[i].demux_fd[rc].fd=0; … … 991 992 if (memcmp(md5buf, demux[demux_index].buffer_cache_dmx, CS_ECMSTORESIZE) != 0) { 992 993 memcpy(demux[demux_index].buffer_cache_dmx, md5buf, CS_ECMSTORESIZE); 993 994 995 if (cfg->dvbapi_au==1) 996 dvbapi_start_emm_filter(demux_index); 997 994 998 unsigned long provid=0; 995 999 int pid = dvbapi_check_array(cfg->dvbapi_prioritytab.caid, CS_MAXCAIDTAB, demux[demux_index].demux_fd[n].CA_System_ID); … … 1011 1015 memcpy(er->ecm, mbuf, er->l); 1012 1016 get_cw(er); 1013 } 1017 } 1014 1018 } 1015 1019 if (demux[demux_index].demux_fd[n].type==TYPE_EMM) { … … 1022 1026 1023 1027 dvbapi_stop_filter(demux_index, TYPE_EMM); 1024 if (cfg->dvbapi_au==0)1025 continue;1026 1027 dvbapi_start_emm_filter(demux_index, SHARED, TYPE_EMM);1028 dvbapi_start_emm_filter(demux_index, GLOBAL, TYPE_EMM);1029 dvbapi_start_emm_filter(demux_index, UNIQUE, TYPE_EMM);1030 1028 continue; 1031 1029 } … … 1048 1046 for (i=0;i<MAX_DEMUX;i++) { 1049 1047 if (demux[i].program_number==er->srvid) { 1048 demux[i].rdr=&reader[er->reader[0]]; 1049 1050 1050 if (er->rc<=3 && demux[i].pidindex==-1 && er->caid!=0) { 1051 1051 dvbapi_start_descrambling(i, er->caid, er->pid); -
trunk/module-newcamd.c
r1951 r1998 780 780 mbuf[4] = (uchar)(pufilt->caid>>8); 781 781 mbuf[5] = (uchar)(pufilt->caid); 782 783 //FIXME: this may break emm from non-oscam servers 784 if (au != -1) { 785 memcpy(mbuf+6, reader[au].hexserial, 8); 786 #if 0 782 787 mbuf[6] = 0x00; 783 788 mbuf[7] = 0x00; … … 816 821 mbuf[13] = reader[au].hexserial[5]; 817 822 } 823 #endif 818 824 } 819 825 else … … 853 859 */ 854 860 } 855 856 861 mbuf[14] = pufilt->nprids; 857 862 for( j=0; j<pufilt->nprids; j++) -
trunk/reader-common.c
r1990 r1998 449 449 case SC_NAGRA: 450 450 return nagra2_get_emm_filter(rdr, type); 451 break;452 451 case SC_IRDETO: 453 452 return irdeto_get_emm_filter(rdr, type); 454 break;455 453 case SC_CRYPTOWORKS: 456 454 return cryptoworks_get_emm_filter(rdr, type); 457 break;458 455 case SC_VIACCESS: 459 456 … … 461 458 case SC_CONAX: 462 459 return conax_get_emm_filter(rdr, type); 463 break;464 460 case SC_SECA: 465 461
Note:
See TracChangeset
for help on using the changeset viewer.