Changeset 2002
- Timestamp:
- 04/07/10 19:14:20 (14 years ago)
- Location:
- branches/modular
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/modular/Distribution/doc/man/oscam.conf.5
r1892 r2002 139 139 1 = try decoding on local cards first, default:0 140 140 .RE 141 .PP 142 \fBecmcache\fP = \fB0\fP|\fB1\fP 143 .RS 3n 144 1 = disable ECM cache, default:0 145 .RE 141 146 .SS "The [monitor] section" 142 147 .PP -
branches/modular/Distribution/doc/txt/oscam.conf.txt
r1892 r2002 103 103 1 = try decoding on local cards first, default:0 104 104 105 ecmcache = 0|1 106 1 = disable ECM cache, default:0 107 105 108 The [monitor] section 106 109 port = 0|port -
branches/modular/globals.h
r1975 r2002 354 354 int (*get_emm_type)(); 355 355 uchar* (*get_emm_filter)(); 356 uchar caids[2]; 356 357 }; 357 358 … … 1029 1030 extern int reader_emm(struct s_reader * reader, EMM_PACKET *); 1030 1031 int reader_get_emm_type(EMM_PACKET *ep, struct s_reader * reader); 1032 int get_cardsystem(ushort caid); 1033 uchar *get_emm_filter(struct s_reader * rdr, int type); 1031 1034 1032 1035 #ifdef HAVE_PCSC -
branches/modular/module-camd35.c
r1975 r2002 193 193 } 194 194 //we think client/server protocols should deliver all information, and only readers should discard EMM 195 mbuf[128] = reader[au].blockemm_g;196 mbuf[129] = reader[au].blockemm_s;197 mbuf[130] = reader[au].blockemm_u;198 mbuf[131] = reader[au].card_system; //Cardsystem for Oscam client195 mbuf[128] = (reader[au].blockemm_g == 1) ? 0: 1; 196 mbuf[129] = (reader[au].blockemm_s == 1) ? 0: 1; 197 mbuf[130] = (reader[au].blockemm_u == 1) ? 0: 1; 198 //mbuf[131] = reader[au].card_system; //Cardsystem for Oscam client 199 199 } 200 200 else // disable emm … … 490 490 491 491 // reading CMD05 Emm request and set serial 492 if ( (buf[0] == 0x05) && !(buf[131]==0xff)) {492 if (buf[0] == 0x05) { 493 493 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; … … 514 514 reader[ridx].hexserial[7] = 0; 515 515 516 reader[ridx].blockemm_g = buf[128];517 reader[ridx].blockemm_s = buf[129];518 reader[ridx].blockemm_u = buf[129];519 reader[ridx].card_system = buf[131];516 reader[ridx].blockemm_g = (buf[128]==1) ? 0: 1; 517 reader[ridx].blockemm_s = (buf[129]==1) ? 0: 1; 518 reader[ridx].blockemm_u = (buf[130]==1) ? 0: 1; 519 reader[ridx].card_system = get_cardsystem(reader[ridx].aucaid); 520 520 cs_log("CMD05 reader: %s serial: %s cardsyst: %d aucaid: %04X", 521 521 reader[ridx].label, 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 -
branches/modular/module-dvbapi.c
r1979 r2002 48 48 unsigned char buffer_cache_dmx[CS_ECMSTORESIZE]; 49 49 unsigned char lastcw[2][8]; 50 int emm_filter; 51 uchar hexserial[8]; 52 struct s_reader *rdr; 53 50 54 } DEMUXTYPE; 51 55 #define DMX_FILTER_SIZE 16 … … 290 294 int g; 291 295 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 296 for (g=0;g<MAX_FILTER;g++) { 299 297 if (demux[demux_index].demux_fd[g].fd>0 && demux[demux_index].demux_fd[g].type==type) { … … 338 336 } 339 337 340 void dvbapi_start_emm_filter(int demux_index, int emmtype, int type) { 341 int dmx_fd,i,n=-1; 342 uchar filter[32]; 338 void dvbapi_start_emm_filter(int demux_index) { 339 int dmx_fd, i, n=-1; 340 uchar *filter,nullserial[8]; 341 342 char *typtext[]={"UNKNOWN", "UNIQUE", "SHARED", "GLOBAL"}; 343 343 344 344 if (demux[demux_index].pidindex==-1) return; … … 347 347 ushort pid = demux[demux_index].ECMpids[demux[demux_index].pidindex].EMM_PID; 348 348 349 if ( reader[client[cs_idx].au].card_system<1)349 if (pid==0 || !demux[demux_index].rdr) 350 350 return; 351 351 352 if (cardsystem[reader[client[cs_idx].au].card_system-1].get_emm_filter) { 353 uchar *filter1 = cardsystem[reader[client[cs_idx].au].card_system-1].get_emm_filter(&reader[client[cs_idx].au], emmtype); 354 memcpy(filter,filter1,32); 355 } else { 356 if (emmtype!=GLOBAL) return; 357 memset(filter,0,32); 358 filter[0]=0x80; 359 filter[0+16]=0xF0; 360 } 361 362 for (i=0;i<MAX_FILTER;i++) { 363 if (demux[demux_index].demux_fd[i].fd<=0) { 364 n=i; 365 break; 366 } 367 } 368 369 if (n==-1) { 370 cs_log("dvbapi: no free filter"); 352 memset(nullserial,0,8); 353 354 if (!memcmp(demux[demux_index].rdr->hexserial, nullserial, 8)) { 355 //cs_debug("dvbapi: hexserial not set %s", cs_hexdump(1, demux[demux_index].rdr->hexserial, 8)); 371 356 return; 372 357 } 373 358 374 dmx_fd=dvbapi_open_device(demux_index, 0); 375 376 demux[demux_index].demux_fd[n].fd=dmx_fd; 377 demux[demux_index].demux_fd[n].CA_System_ID=caid; 378 demux[demux_index].demux_fd[n].PID=pid; 379 demux[demux_index].demux_fd[n].type=type; 380 381 cs_ddump(filter, 32, "demux filter:"); 382 dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 0); 359 if (demux[demux_index].emm_filter==1 && !memcmp(demux[demux_index].rdr->hexserial, demux[demux_index].hexserial, 8)) { 360 return; 361 } 362 363 if (memcmp(demux[demux_index].rdr->hexserial, demux[demux_index].hexserial, 8)) { 364 dvbapi_stop_filter(demux_index, TYPE_EMM); 365 } 366 367 if (demux[demux_index].rdr->card_system==0) 368 demux[demux_index].rdr->card_system=get_cardsystem(caid); 369 370 int j; 371 for (j=1;j<4;j++) { 372 int emmtype=j; 373 n=-1; 374 filter = get_emm_filter(demux[demux_index].rdr, emmtype); 375 376 for (i=0;i<MAX_FILTER;i++) { 377 if (demux[demux_index].demux_fd[i].fd<=0) { 378 n=i; 379 break; 380 } 381 } 382 383 if (n==-1) { 384 cs_log("dvbapi: no free filter"); 385 return; 386 } 387 388 dmx_fd=dvbapi_open_device(demux_index, 0); 389 390 demux[demux_index].demux_fd[n].fd=dmx_fd; 391 demux[demux_index].demux_fd[n].CA_System_ID=caid; 392 demux[demux_index].demux_fd[n].PID=pid; 393 demux[demux_index].demux_fd[n].type=TYPE_EMM; 394 395 cs_log("dvbapi: starting emm filter %s",typtext[emmtype]); 396 cs_dump(filter, 32, "demux filter:"); 397 dvbapi_set_filter(dmx_fd, selected_api, pid, filter, filter+16, 0); 398 } 399 400 memcpy(demux[demux_index].hexserial, demux[demux_index].rdr->hexserial, 8); 401 demux[demux_index].emm_filter=1; 383 402 } 384 403 … … 607 626 demux[demux_id].cadev_index=demux_index2; 608 627 demux[demux_id].socket_fd=connfd; 628 demux[demux_id].emm_filter=0; 629 demux[demux_id].rdr=NULL; 630 memset(demux[demux_id].hexserial, 0, 8); 609 631 610 632 for (i=0;i<8;i++) { … … 837 859 demux[i].demux_index=-1; 838 860 demux[i].socket_fd=0; 861 demux[i].emm_filter=0; 862 demux[i].rdr=NULL; 863 memset(demux[i].hexserial, 0, 8); 839 864 memset(demux[i].buffer_cache_dmx, 0, CS_ECMSTORESIZE); 840 865 for (rc=0;rc<MAX_FILTER;rc++) demux[i].demux_fd[rc].fd=0; … … 980 1005 if (memcmp(md5buf, demux[demux_index].buffer_cache_dmx, CS_ECMSTORESIZE) != 0) { 981 1006 memcpy(demux[demux_index].buffer_cache_dmx, md5buf, CS_ECMSTORESIZE); 982 1007 1008 if (cfg->dvbapi_au==1) 1009 dvbapi_start_emm_filter(demux_index); 1010 983 1011 unsigned long provid=0; 984 1012 int pid = dvbapi_check_array(cfg->dvbapi_prioritytab.caid, CS_MAXCAIDTAB, demux[demux_index].demux_fd[n].CA_System_ID); … … 1000 1028 memcpy(er->ecm, mbuf, er->l); 1001 1029 get_cw(er); 1002 } 1030 } 1003 1031 } 1004 1032 if (demux[demux_index].demux_fd[n].type==TYPE_EMM) { … … 1011 1039 1012 1040 dvbapi_stop_filter(demux_index, TYPE_EMM); 1013 if (cfg->dvbapi_au==0)1014 continue;1015 1016 dvbapi_start_emm_filter(demux_index, SHARED, TYPE_EMM);1017 dvbapi_start_emm_filter(demux_index, GLOBAL, TYPE_EMM);1018 //dvbapi_start_emm_filter(demux_index, UNIQUE, TYPE_EMM);1019 1041 continue; 1020 1042 } … … 1037 1059 for (i=0;i<MAX_DEMUX;i++) { 1038 1060 if (demux[i].program_number==er->srvid) { 1061 demux[i].rdr=&reader[er->reader[0]]; 1062 1039 1063 if (er->rc<=3 && demux[i].pidindex==-1 && er->caid!=0) { 1040 1064 dvbapi_start_descrambling(i, er->caid, er->pid); … … 1094 1118 if (reader[er->reader[0]].typ & R_IS_CASCADING) 1095 1119 fprintf(ecmtxt, "from: %s\n", reader[er->reader[0]].device); 1120 else 1121 fprintf(ecmtxt, "from: local\n"); 1096 1122 fprintf(ecmtxt, "protocol: %d\n", reader[er->reader[0]].typ); 1097 1123 if (reader[er->reader[0]].typ == R_CCCAM) -
branches/modular/module-newcamd.c
r1975 r2002 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++) -
branches/modular/oscam-config.c
r1975 r2002 1609 1609 fprintf_conf(f, CONFVARWIDTH, "clientmaxidle", "%d\n", cfg->cmaxidle); 1610 1610 fprintf_conf(f, CONFVARWIDTH, "cachedelay", "%ld\n", cfg->delay); 1611 fprintf_conf(f, CONFVARWIDTH, "ecmcache", "%ld\n", cfg->cachecm); 1611 1612 fprintf_conf(f, CONFVARWIDTH, "bindwait", "%d\n", cfg->bindwait); 1612 1613 fprintf_conf(f, CONFVARWIDTH, "netprio", "%ld\n", cfg->netprio); -
branches/modular/reader-common.c
r1975 r2002 368 368 } 369 369 370 int get_cardsystem(ushort caid) { 371 int i,j; 372 for (i=0; i<CS_MAX_MOD; i++) { 373 if (cardsystem[i].caids) { 374 for (j=0;j<2;j++) { 375 if ((cardsystem[i].caids[j]==caid >> 8)) { 376 return i+1; 377 } 378 } 379 } 380 } 381 return 0; 382 } 383 384 uchar *get_emm_filter(struct s_reader * rdr, int type) { 385 386 static uint8_t filter[32]; 387 memset(filter, 0xFF, 32); // should deliver a filter which not produce a flood if cardsystem is not yet implemented. 388 389 if (cardsystem[rdr->card_system-1].get_emm_filter) { 390 uchar *filter1 = cardsystem[rdr->card_system-1].get_emm_filter(rdr, type); 391 memcpy(filter,filter1,32); 392 } else { 393 if (type==GLOBAL) { 394 memset(filter,0,32); 395 filter[0]=0x80; 396 filter[0+16]=0xF0; 397 } 398 } 399 400 return filter; 401 } 402 370 403 int reader_emm(struct s_reader * reader, EMM_PACKET *ep) 371 404 { -
branches/modular/reader-common.h
r1979 r2002 40 40 int cryptoworks_card_info(struct s_reader * reader); 41 41 int CheckSctLen(const uchar *, int); 42 uchar *cryptoworks_get_emm_filter(struct s_reader * rdr, int type); 42 43 43 44 // reader-seca … … 62 63 int conax_get_emm_type(EMM_PACKET *, struct s_reader *); 63 64 int conax_card_info(struct s_reader * reader); 64 65 uchar *conax_get_emm_filter(struct s_reader * rdr, int type); 66 65 67 // reader-dre 66 68 int dre_card_init(struct s_reader * reader, ATR atr); -
branches/modular/reader-conax.c
r1975 r2002 222 222 } 223 223 } 224 } 225 226 uchar *conax_get_emm_filter(struct s_reader * rdr, int type) 227 { 228 static uint8_t filter[32]; 229 memset(filter, 0x00, 32); 230 231 /* this section is not yet ready */ 232 233 switch (type) { 234 case GLOBAL: 235 filter[0] = 0x80; 236 filter[0+16] = 0xF0; 237 filter[1] = 0x00; 238 filter[1+16] = 0x00; // 0x00 to 0xD0 239 break; 240 case SHARED: 241 filter[0] = 0x80; 242 filter[0+16] = 0xF0; 243 filter[1] = 0x00; 244 filter[1+16] = 0x00; 245 memcpy(filter+4, rdr->sa[0], 4); 246 memset(filter+4+16, 0xFF, 4); 247 break; 248 case UNIQUE: 249 filter[0] = 0x80; 250 filter[0+16] = 0xF0; 251 filter[1] = 0x00; 252 filter[1+16] = 0x00; 253 memcpy(filter+4, rdr->hexserial + 2, 4); 254 memset(filter+4+16, 0xFF, 4); 255 break; 256 } 257 258 return filter; 224 259 } 225 260 … … 303 338 ph->card_init=conax_card_init; 304 339 ph->get_emm_type=conax_get_emm_type; 305 } 340 ph->caids[0]=0x0B; 341 } -
branches/modular/reader-cryptoworks.c
r1975 r2002 486 486 } 487 487 488 //incoming via camd3.5x 489 //ep->type=emm[4]; 488 /* FIXME: Dont know how to handle camd3 cryptoworks emms correct */ 490 489 case 0x8F: 491 default: 490 ep->type = UNKNOWN; 491 cs_debug_mask(D_EMM, "CRYPTOWORKS EMM: UNKNOWN 0x8F via camd3"); 492 return TRUE; 493 494 /* FIXME: Seems to be that all other EMM types are rejected by the card */ 495 default: 492 496 ep->type = UNKNOWN; 493 497 cs_debug_mask(D_EMM, "CRYPTOWORKS EMM: UNKNOWN"); 494 return TRUE;498 return FALSE; // skip emm 495 499 } 496 500 } 497 501 502 uchar *cryptoworks_get_emm_filter(struct s_reader * rdr, int type) 503 { 504 static uint8_t filter[32]; 505 memset(filter, 0x00, 32); 506 507 switch (type) { 508 case GLOBAL: 509 filter[0] = 0x88; 510 filter[0+16] = 0xFE; // 0x88 to 0x89 511 filter[1] = 0xA9; 512 filter[1+16] = 0xFF; 513 filter[2] = 0xFF; 514 filter[2+16] = 0xFF; 515 filter[6] = 0x83; 516 filter[6+16] = 0xFF; 517 filter[7] = 0x01; 518 filter[7+16] = 0xFF; 519 break; 520 case SHARED: 521 filter[0] = 0x84; 522 filter[0+16] = 0xFF; 523 filter[1] = 0xA9; 524 filter[1+16] = 0xFF; 525 filter[2] = 0xFF; 526 filter[2+16] = 0xFF; 527 memcpy(filter+3, rdr->hexserial, 4); 528 memset(filter+3+16, 0xFF, 4); 529 filter[10] = 0x80; 530 filter[10+16] = 0xFF; 531 filter[11] = 0x04; 532 filter[11+16] = 0xFF; 533 break; 534 case UNIQUE: 535 filter[0] = 0x82; 536 filter[0+16] = 0xFF; 537 filter[1] = 0xA9; 538 filter[1+16] = 0xFF; 539 filter[2] = 0xFF; 540 filter[2+16] = 0xFF; 541 memcpy(filter+3, rdr->hexserial, 6); 542 memset(filter+3+16, 0xFF, 6); 543 filter[11] = 0x80; 544 filter[11+16] = 0xFF; 545 filter[12] = 0x05; 546 filter[12+16] = 0xFF; 547 break; 548 } 549 550 return filter; 551 } 498 552 499 553 int cryptoworks_do_emm(struct s_reader * reader, EMM_PACKET *ep) … … 506 560 uchar *emm=ep->emm; 507 561 508 /* this original562 /* FIXME: this is the original code how to deal with camd3 EMM's 509 563 if ((emm[0]==0x8f) && (emm[3]==0xa4)) // emm via camd3.5x 510 564 { … … 516 570 */ 517 571 518 //cs_log("[cryptoworks-reader] EMM Dump:..: %s",cs_hexdump(1, emm, emm[2]));519 572 switch(ep->type) 520 573 { … … 523 576 if(emm[3]==0xA4) 524 577 { 525 //cs_log("[cryptoworks-reader] EMM Dump: CMD: %s", cs_hexdump(1, emm+3, 5));526 //cs_log("[cryptoworks-reader] EMM Dump: DATA: %s",cs_hexdump(1, emm+8, emm[7]));527 578 write_cmd(emm+3, emm+3+CMD_LEN); 528 579 rc=((cta_res[0]==0x90)&&(cta_res[1]==0x00)); … … 533 584 case GLOBAL: 534 585 insEMM_GA[4]=ep->emm[2]-2; 535 //cs_log("[cryptoworks-reader] EMM Dump: CMD: %s", cs_hexdump(1, insEMM_GA, 5));536 //cs_log("[cryptoworks-reader] EMM Dump: DATA: %s",cs_hexdump(1, emm+5, insEMM_GA[4]));537 //cs_log("[cryptoworks-reader] EMM Dump: IF: %02X == %02X",emm[7],(insEMM_GA[4]-3));538 539 586 if(emm[7]==insEMM_GA[4]-3) 540 587 { … … 547 594 case SHARED: 548 595 insEMM_SA[4]=ep->emm[2]-6; 549 //cs_log("[cryptoworks-reader] EMM Dump: CMD: %s", cs_hexdump(1, insEMM_SA, 5));550 //cs_log("[cryptoworks-reader] EMM Dump: DATA: %s",cs_hexdump(1, emm+9, insEMM_SA[4]));551 //cs_log("[cryptoworks-reader] EMM Dump: IF: %02X == %02X",emm[11],(insEMM_SA[4]-3));552 553 596 if(emm[11]==insEMM_SA[4]-3) 554 597 { … … 561 604 case UNIQUE: 562 605 insEMM_UA[4]=ep->emm[2]-7; 563 //cs_log("[cryptoworks-reader] EMM Dump: CMD: %s", cs_hexdump(1, insEMM_UA, 5));564 //cs_log("[cryptoworks-reader] EMM Dump: DATA: %s",cs_hexdump(1, emm+10, insEMM_UA[4]));565 //cs_log("[cryptoworks-reader] EMM Dump: IF: %02X == %02X",emm[12],(insEMM_UA[4]-3));566 567 606 if(emm[12]==insEMM_UA[4]-3) 568 607 { … … 652 691 ph->card_init=cryptoworks_card_init; 653 692 ph->get_emm_type=cryptoworks_get_emm_type; 654 } 693 ph->caids[0]=0x0D; 694 } -
branches/modular/reader-irdeto.c
r1979 r2002 293 293 294 294 int l = (ep->emm[3]&0x07); 295 int mode = (ep->emm[3]>>3);295 int base = (ep->emm[3]>>3); 296 296 char dumprdrserial[l*3]; 297 297 298 298 cs_debug_mask(D_EMM, "Entered irdeto_get_emm_type ep->emm[3]=%02x",ep->emm[3]); 299 299 300 switch (ep->emm[3]) { 301 302 case 0x00: 303 case 0xd0: 304 // 0xd0/0x00 means global emm 300 switch (l) { 301 302 case 0: 303 // global emm, 0 bytes addressed 305 304 ep->type = GLOBAL; 306 305 cs_debug_mask(D_EMM, "IRDETO EMM: GLOBAL"); 307 306 return TRUE; 308 case 0xd2:309 // 0xd2 means shared emm, first 2 bytes of hexserial are transmitted in emm, seems to be the shared adr307 case 2: 308 // shared emm, 2 bytes addressed 310 309 ep->type = SHARED; 311 310 memset(ep->hexserial, 0, 8); … … 315 314 return (!l || !memcmp(ep->emm + 4, rdr->hexserial, l)); 316 315 317 case 0xd3:318 // 0xd3 means uniqe emm316 case 3: 317 // unique emm, 3 bytes addressed 319 318 ep->type = UNIQUE; 320 319 memset(ep->hexserial, 0, 8); … … 322 321 strcpy(dumprdrserial, cs_hexdump(1, rdr->hexserial, l)); 323 322 cs_debug_mask(D_EMM, "IRDETO EMM: UNIQUE, l = %d, ep = %s , rdr = %s", l, cs_hexdump(1, ep->hexserial, l), dumprdrserial); 324 return (mode == rdr->hexserial[3] && (!l || !memcmp(ep->emm + 4, rdr->hexserial, l))); 323 return (base == rdr->hexserial[3] && (!l || !memcmp(ep->emm + 4, rdr->hexserial, l))); 324 325 325 default: 326 326 ep->type = UNKNOWN; … … 336 336 memset(filter, 0x00, 32); 337 337 338 int base = rdr->hexserial[3]; 339 int emm_g = base * 8; 340 int emm_s = emm_g + 2; 341 int emm_u = emm_g + 3; 342 338 343 switch (type) { 339 344 case GLOBAL: 345 // hex addressed 340 346 filter[0] = 0x82; 341 347 filter[0+16] = 0xFF; 342 filter[1] = 0x00; 343 filter[1+16] = 0x2F; // 0x00 to 0xD0 344 //filter[1] = 0xD0; 345 //filter[1+16] = 0xFF; 348 filter[1] = emm_g; 349 // FIXME: more restrictive filter for provider addressed EMM's 350 filter[1+16] = 0x0F; 346 351 break; 352 347 353 case SHARED: 348 354 filter[0] = 0x82; 349 355 filter[0+16] = 0xFF; 350 filter[1] = 0xD2;356 filter[1] = emm_s; 351 357 filter[1+16] = 0xFF; 352 filter[2] = rdr->sa[0][0]; 353 filter[2+16] = 0xFF; 354 filter[3] = rdr->sa[0][1]; 355 filter[3+16] = 0xFF; 358 memcpy(filter+2, rdr->hexserial, 2); 359 memset(filter+2+16, 0xFF, 2); 356 360 break; 361 357 362 case UNIQUE: 358 363 filter[0] = 0x82; 359 364 filter[0+16] = 0xFF; 360 filter[1] = 0xD3;365 filter[1] = emm_u; 361 366 filter[1+16] = 0xFF; 362 367 memcpy(filter+2, rdr->hexserial, 4); … … 477 482 ph->get_emm_type=irdeto_get_emm_type; 478 483 ph->get_emm_filter=irdeto_get_emm_filter; 479 } 484 ph->caids[0]=0x06; 485 ph->caids[1]=0x17; 486 } -
branches/modular/reader-nagra.c
r1975 r2002 773 773 return filter; 774 774 } 775 776 775 int nagra2_do_emm(struct s_reader * reader, EMM_PACKET *ep) 777 776 { … … 822 821 ph->get_emm_type=nagra2_get_emm_type; 823 822 ph->get_emm_filter=nagra2_get_emm_filter; 824 } 823 ph->caids[0]=0x18; 824 } -
branches/modular/reader-seca.c
r1975 r2002 263 263 ph->card_init=seca_card_init; 264 264 ph->get_emm_type=seca_get_emm_type; 265 } 266 265 ph->caids[0]=0x01; 266 } 267 -
branches/modular/reader-viaccess.c
r1975 r2002 659 659 ph->card_init=viaccess_card_init; 660 660 ph->get_emm_type=viaccess_get_emm_type; 661 } 661 ph->caids[0]=0x05; 662 } -
branches/modular/reader-videoguard2.c
r1975 r2002 1068 1068 ph->card_init=videoguard_card_init; 1069 1069 ph->get_emm_type=videoguard_get_emm_type; 1070 } 1070 ph->caids[0]=0x09; 1071 }
Note:
See TracChangeset
for help on using the changeset viewer.