Changeset 2000
- Timestamp:
- 04/07/10 18:42:57 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/reader-irdeto.c
r1994 r2000 293 293 294 294 int l = (ep->emm[3]&0x07); 295 int mode = (ep->emm[3]>>3); 296 int type = (ep->emm[3]&0x03); 295 int base = (ep->emm[3]>>3); 297 296 char dumprdrserial[l*3]; 298 297 299 298 cs_debug_mask(D_EMM, "Entered irdeto_get_emm_type ep->emm[3]=%02x",ep->emm[3]); 300 299 301 switch ( type) {302 303 case 0 x00:304 // means global emm300 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 0x02:309 // 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 0x03:318 // 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 348 filter[1] = emm_g; 349 // FIXME: more restrictive filter for provider addressed EMM's 350 filter[1+16] = 0x0F; 344 351 break; 352 345 353 case SHARED: 346 354 filter[0] = 0x82; 347 355 filter[0+16] = 0xFF; 348 filter[1] = 0xD2;349 filter[1+16] = 0x 0F;356 filter[1] = emm_s; 357 filter[1+16] = 0xFF; 350 358 memcpy(filter+2, rdr->hexserial, 2); 351 359 memset(filter+2+16, 0xFF, 2); 352 360 break; 361 353 362 case UNIQUE: 354 363 filter[0] = 0x82; 355 364 filter[0+16] = 0xFF; 356 filter[1] = 0xD3;357 filter[1+16] = 0x 0F;365 filter[1] = emm_u; 366 filter[1+16] = 0xFF; 358 367 memcpy(filter+2, rdr->hexserial, 4); 359 368 memset(filter+2+16, 0xFF, 4);
Note:
See TracChangeset
for help on using the changeset viewer.