Changeset 1795 for branches/modular/reader-irdeto.c
- Timestamp:
- 03/06/10 00:34:56 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/modular/reader-irdeto.c
r1776 r1795 366 366 } 367 367 368 int irdeto_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) //returns TRUE if shared emm matches SA, unique emm matches serial, or global or unknown369 { 370 int i, l = (ep->emm[3]&0x07), ok=0;368 int irdeto_get_emm_type(EMM_PACKET *ep, struct s_reader * rdr) { 369 370 int l = (ep->emm[3]&0x07); 371 371 int mode = (ep->emm[3]>>3); 372 if (mode&0x10) { 373 // Hex addressed 374 ep->type = UNIQUE; 375 memset(ep->hexserial,0,8); 376 memcpy(ep->hexserial, ep->emm + 4, l); 377 return (mode == rdr->hexserial[3] && (!l || !memcmp(ep->emm+4, rdr->hexserial, l))); 372 373 cs_debug_mask(D_EMM, "Entered irdeto_get_emm_type ep->emm[3]=%02x",ep->emm[3]); 374 375 switch (ep->emm[3]) { 376 377 case 0xd0: 378 // 0xd0 means global emm 379 ep->type = GLOBAL; 380 cs_debug_mask(D_EMM, "IRDETO EMM: GLOBAL"); 381 return TRUE; 382 case 0xd2: 383 // 0xd2 means shared emm, first 2 bytes of hexserial are transmitted in emm, seems to be the shared adr 384 ep->type = SHARED; 385 memset(ep->hexserial, 0, 8); 386 memcpy(ep->hexserial, ep->emm + 4, l); 387 cs_debug_mask(D_EMM, "IRDETO EMM: SHARED, ep = %s, rdr = %s", cs_hexdump(1, ep->hexserial, l), 388 cs_hexdump(1, rdr->hexserial, l)); 389 return (!l || !memcmp(ep->emm + 4, rdr->hexserial, l)); 390 391 case 0xd3: 392 // 0xd3 means uniqe emm 393 ep->type = UNIQUE; 394 memset(ep->hexserial, 0, 8); 395 memcpy(ep->hexserial, ep->emm + 4, l); 396 cs_debug_mask(D_EMM, "IRDETO EMM: UNIQUE, ep = %s, rdr = %s", cs_hexdump(1, ep->hexserial, l), 397 cs_hexdump(1, rdr->hexserial, l)); 398 return (mode == rdr->hexserial[3] && (!l || !memcmp(ep->emm + 4, rdr->hexserial, l))); 399 default: 400 ep->type = UNKNOWN; 401 cs_debug_mask(D_EMM, "IRDETO EMM: UNKNOWN"); 402 return TRUE; 378 403 } 379 else { 380 // Provider addressed 381 for(i = 0; i < rdr->nprov; i++) { 382 ok = (mode == rdr->prid[i][0] && (!l || !memcmp(ep->emm+4, &rdr->prid[i][1], l))); 383 if (ok) break; 384 } 385 386 ep->type = SHARED; 387 memset(ep->hexserial,0,8); 388 //prid in hexserial instead of SA 389 memcpy(ep->hexserial, ep->emm+4, l); 390 return ok; 391 } 404 392 405 } 393 406
Note:
See TracChangeset
for help on using the changeset viewer.