Changeset 3008
- Timestamp:
- 09/07/10 21:59:45 (14 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/globals.h
r3000 r3008 1119 1119 extern void send_clear_reader_stat(int ridx); 1120 1120 extern int chk_ctab(ushort caid, CAIDTAB *ctab); 1121 1121 extern int chk_srvid_match_by_caid_prov(ushort caid, ulong provid, SIDTAB *sidtab); 1122 extern int chk_srvid_by_caid_prov(ushort caid, ulong provid, int idx); 1123 1122 1124 #ifdef CS_ANTICASC 1123 1125 //extern void start_anticascader(void); -
trunk/module-cccam.c
r3005 r3008 915 915 916 916 cs_log("%s sending ecm for sid %04X(%d) to card %08x, hop %d, ecmtask %d", 917 getprefix(), cur_er->srvid, cur_er->l, card->id, card->hop 918 + 1, cur_er->idx); 917 getprefix(), cur_er->srvid, cur_er->l, card->id, card->hop, cur_er->idx); 919 918 cc_cmd_send(ecmbuf, cur_er->l + 13, MSG_CW_ECM); // send ecm 920 919 … … 2333 2332 2334 2333 flt = 0; 2335 if ( /*!reader[r].caid[0] && */reader[r].ftab.filts) {2334 if (reader[r].typ != R_CCCAM && reader[r].ftab.filts) { 2336 2335 for (j = 0; j < CS_MAXFILTERS; j++) { 2337 2336 if (reader[r].ftab.filts[j].caid && 2338 2337 chk_ctab(reader[r].ftab.filts[j].caid, &client[cs_idx].ctab)) { 2338 int ignore = 0; 2339 2339 memset(buf, 0, sizeof(buf)); 2340 2340 buf[0] = id >> 24; … … 2345 2345 buf[6] = reader[r].cc_id >> 8; 2346 2346 buf[7] = reader[r].cc_id & 0xFF; 2347 buf[8] = reader[r].ftab.filts[j].caid >> 8; 2348 buf[9] = reader[r].ftab.filts[j].caid & 0xff; 2347 ushort caid = reader[r].ftab.filts[j].caid; 2348 buf[8] = caid >> 8; 2349 buf[9] = caid & 0xff; 2349 2350 buf[10] = hop; 2350 2351 buf[11] = reshare; … … 2354 2355 //cs_log("Ident CCcam card report caid: %04X readr %s subid: %06X", reader[r].ftab.filts[j].caid, reader[r].label, reader[r].cc_id); 2355 2356 for (k = 0; k < reader[r].ftab.filts[j].nprids; k++) { 2356 buf[21 + (k * 7)] = reader[r].ftab.filts[j].prids[k]2357 2358 buf[22 + (k * 7)] = reader[r].ftab.filts[j].prids[k]2359 >> 8;2360 buf[23 + (k * 7)] = reader[r].ftab.filts[j].prids[k]2361 & 0xFF;2357 ulong prid = reader[r].ftab.filts[j].prids[k]; 2358 buf[21 + (k * 7)] = prid >> 16; 2359 buf[22 + (k * 7)] = prid >> 8; 2360 buf[23 + (k * 7)] = prid & 0xFF; 2361 if (!chk_srvid_by_caid_prov(caid, prid, cs_idx)) 2362 ignore = 1; 2362 2363 //cs_log("Ident CCcam card report provider: %02X%02X%02X", buf[21 + (k*7)]<<16, buf[22 + (k*7)], buf[23 + (k*7)]); 2363 2364 } 2365 if (ignore) //Filtered by services 2366 continue; 2367 2364 2368 buf[21 + (k * 7)] = 1; 2365 2369 memcpy(buf + 22 + (k * 7), cc->node_id, 8); … … 2379 2383 } 2380 2384 2381 if ( !reader[r].caid[0] && !flt) {2385 if (reader[r].typ != R_CCCAM && !reader[r].caid[0] && !flt) { 2382 2386 flt = 0; 2383 2387 for (j = 0; j < CS_MAXCAIDTAB; j++) { … … 2423 2427 } 2424 2428 2425 if (reader[r]. caid[0] && !flt && chk_ctab(reader[r].caid[0], &client[cs_idx].ctab)) {2429 if (reader[r].typ != R_CCCAM && reader[r].caid[0] && !flt && chk_ctab(reader[r].caid[0], &client[cs_idx].ctab)) { 2426 2430 //cs_log("tcp_connected: %d card_status: %d ", reader[r].tcp_connected, reader[r].card_status); 2427 2431 memset(buf, 0, sizeof(buf)); … … 2447 2451 //cs_log("Main CCcam card report provider: %02X%02X%02X%02X", buf[21+(j*7)], buf[22+(j*7)], buf[23+(j*7)], buf[24+(j*7)]); 2448 2452 } 2449 2450 2453 buf[21 + (j * 7)] = 1; 2451 2454 memcpy(buf + 22 + (j * 7), cc->node_id, 8); … … 2483 2486 chk_ctab(caid_info->caid, &client[cs_idx].ctab) && 2484 2487 chk_ctab(caid_info->caid, &reader[r].ctab)) { 2488 int ignore = 0; 2485 2489 memset(buf, 0, sizeof(buf)); 2486 2490 buf[0] = id >> 24; … … 2500 2504 uint8 *prov = llist_itr_init(caid_info->provs, &itr_prov); 2501 2505 while (prov) { 2506 ulong prid=0; 2502 2507 memcpy(buf + 21 + (j * 7), prov, 3); 2503 2508 prov = llist_itr_next(&itr_prov); 2504 2509 j++; 2510 if (!chk_srvid_by_caid_prov(caid_info->caid, prid, cs_idx) || 2511 !chk_srvid_by_caid_prov(caid_info->caid, prid, reader[r].cs_idx)) 2512 ignore = 1; 2505 2513 } 2506 buf[20] = j; 2507 2508 buf[21 + (j * 7)] = 1; 2509 memcpy(buf + 22 + (j * 7), cc->node_id, 8); 2510 id++; 2511 2512 int len = 30 + (j * 7); 2513 cc_cmd_send(buf, len, MSG_NEW_CARD); 2514 cc_add_reported_carddata(reported_carddatas, buf, len); 2514 if (!ignore) { //Filtered by service 2515 buf[20] = j; 2516 2517 buf[21 + (j * 7)] = 1; 2518 memcpy(buf + 22 + (j * 7), cc->node_id, 8); 2519 id++; 2520 2521 int len = 30 + (j * 7); 2522 cc_cmd_send(buf, len, MSG_NEW_CARD); 2523 cc_add_reported_carddata(reported_carddatas, buf, len); 2524 } 2515 2525 } 2516 2526 caid_info = llist_itr_next(&itr); -
trunk/oscam-chk.c
r3000 r3008 47 47 } 48 48 return(rc); 49 } 50 51 int chk_srvid_match_by_caid_prov(ushort caid, ulong provid, SIDTAB *sidtab) 52 { 53 int i, rc=0; 54 55 if (!sidtab->num_caid) 56 rc|=1; 57 else 58 for (i=0; (i<sidtab->num_caid) && (!(rc&1)); i++) 59 if (caid==sidtab->caid[i]) rc|=1; 60 61 if (!sidtab->num_provid) 62 rc|=2; 63 else 64 for (i=0; (i<sidtab->num_provid) && (!(rc&2)); i++) 65 if (provid==sidtab->provid[i]) rc|=2; 66 67 return(rc==3); 68 } 69 70 int chk_srvid_by_caid_prov(ushort caid, ulong provid, int idx) { 71 int nr, rc=0; 72 SIDTAB *sidtab; 73 74 if (!client[idx].sidtabok) 75 { 76 if (!client[idx].sidtabno) return(1); 77 rc=1; 78 } 79 for (nr=0, sidtab=cfg->sidtab; sidtab; sidtab=sidtab->next, nr++) 80 if (sidtab->num_caid | sidtab->num_provid | sidtab->num_srvid) 81 { 82 if ((client[idx].sidtabno&(1<<nr)) && 83 (chk_srvid_match_by_caid_prov(caid, provid, sidtab))) 84 return(0); 85 if ((client[idx].sidtabok&(1<<nr)) && 86 (chk_srvid_match_by_caid_prov(caid, provid, sidtab))) 87 rc=1; 88 } 89 return(rc); 90 49 91 } 50 92 … … 302 344 303 345 int matching_reader(ECM_REQUEST *er, struct s_reader *rdr) { 346 //Checking connected & group valid: 304 347 if (!((rdr->fd) && (rdr->grp&client[cs_idx].grp))) 305 348 return(0); 306 349 350 //Checking enabled and not deleted: 307 351 if (!rdr->enable || rdr->deleted) { 308 352 cs_debug_mask(D_TRACE, "reader disabled/deleted %s", rdr->label); … … 310 354 } 311 355 312 //Schlocke reader-defined function 356 //Schlocke reader-defined function, reader-self-check: 313 357 if (rdr->ph.c_available && !rdr->ph.c_available(rdr->ridx, AVAIL_CHECK_CONNECTED)) { 314 358 cs_debug_mask(D_TRACE, "reader unavailable %s", rdr->label); … … 316 360 } 317 361 362 //Checking caids: 318 363 if (!chk_ctab(er->ocaid, &rdr->ctab) || !chk_ctab(er->caid, &rdr->ctab)) { 319 364 cs_debug_mask(D_TRACE, "caid %04X not found in caidlist reader %s", er->caid, rdr->label); … … 321 366 } 322 367 368 //Checking services: 323 369 if (!chk_srvid(er, rdr->cs_idx)) { 324 370 cs_debug_mask(D_TRACE, "service %04X not matching reader %s", er->srvid, rdr->label); … … 326 372 } 327 373 374 //Checking ident: 328 375 if (!chk_rfilter(er, rdr)) { 329 376 cs_debug_mask(D_TRACE, "r-filter reader %s", rdr->label); … … 331 378 } 332 379 380 //Check ECM nanos: 333 381 if (!chk_class(er, &rdr->cltab, "reader", rdr->label)) { 334 382 cs_debug_mask(D_TRACE, "class filter reader %s", rdr->label); … … 336 384 } 337 385 386 //Checking chid: 338 387 if (!chk_chid(er, &rdr->fchid, "reader", rdr->label)) { 339 388 cs_debug_mask(D_TRACE, "chid filter reader %s", rdr->label); … … 341 390 } 342 391 392 //All checks done, reader is matching! 343 393 return(1); 344 394 }
Note:
See TracChangeset
for help on using the changeset viewer.