Changeset 3583
- Timestamp:
- 10/17/10 12:37:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-cccam.c
r3565 r3583 2088 2088 2089 2089 ulong crc = 0; 2090 intr;2091 for (r = 0; r < CS_MAXREADER; r++) {2092 if (r eader[r].enable && !reader[r].deleted && reader[r].client2093 && !r eader[r].audisabled)2094 crc += crc32(0, r eader[r].hexserial, 8);2090 struct s_reader *rdr; 2091 for (rdr=first_reader; rdr ; rdr=rdr->next) { 2092 if (rdr->enable && !rdr->deleted && rdr->client 2093 && !rdr->audisabled) 2094 crc += crc32(0, rdr->hexserial, 8); 2095 2095 } 2096 2096 return crc; … … 2291 2291 int isau = is_au(cl); 2292 2292 2293 for (r = 0; r < CS_MAXREADER; r++) { 2294 if (!reader[r].fd || !reader[r].enable || reader[r].deleted) 2293 struct s_reader *rdr; 2294 for (r=0,rdr=first_reader; rdr ; rdr=rdr->next, r++) { 2295 if (!rdr->fd || !rdr->enable || rdr->deleted) 2295 2296 continue; 2296 if (!(r eader[r].grp & cl->grp))2297 if (!(rdr->grp & cl->grp)) 2297 2298 continue; 2298 reader_reshare = r eader[r].cc_reshare;2299 reader_reshare = rdr->cc_reshare; 2299 2300 2300 2301 reshare = (reader_reshare < usr_reshare) ? reader_reshare : usr_reshare; … … 2302 2303 continue; 2303 2304 2304 if (!r eader[r].cc_id) {2305 r eader[r].cc_id = (r+0x64)<<16 | fast_rnd()<<8 | fast_rnd();2306 } 2307 2308 int au_allowed = !r eader[r].audisabled && isau;2305 if (!rdr->cc_id) { 2306 rdr->cc_id = (r+0x64)<<16 | fast_rnd()<<8 | fast_rnd(); 2307 } 2308 2309 int au_allowed = !rdr->audisabled && isau; 2309 2310 2310 2311 flt = 0; 2311 if (r eader[r].typ != R_CCCAM && reader[r].ftab.filts) {2312 if (rdr->typ != R_CCCAM && rdr->ftab.filts) { 2312 2313 for (j = 0; j < CS_MAXFILTERS; j++) { 2313 if (r eader[r].ftab.filts[j].caid && chk_ctab(2314 r eader[r].ftab.filts[j].caid, &cl->ctab)) {2314 if (rdr->ftab.filts[j].caid && chk_ctab( 2315 rdr->ftab.filts[j].caid, &cl->ctab)) { 2315 2316 int ignore = 0; 2316 2317 memset(buf, 0, sizeof(buf)); … … 2319 2320 buf[2] = id >> 8; 2320 2321 buf[3] = id & 0xff; 2321 buf[4] = r eader[r].cc_id >> 24;2322 buf[5] = r eader[r].cc_id >> 16;2322 buf[4] = rdr->cc_id >> 24; 2323 buf[5] = rdr->cc_id >> 16; 2323 2324 buf[6] = j >> 8; 2324 2325 buf[7] = j & 0xFF; 2325 ushort caid = r eader[r].ftab.filts[j].caid;2326 ushort caid = rdr->ftab.filts[j].caid; 2326 2327 buf[8] = caid >> 8; 2327 2328 buf[9] = caid & 0xff; … … 2330 2331 //Setting UA: (Unique Address): 2331 2332 if (au_allowed) 2332 cc_UA_oscam2cccam(r eader[r].hexserial, buf + 12, caid);2333 buf[20] = r eader[r].ftab.filts[j].nprids;2334 //cs_log("Ident CCcam card report caid: %04X readr %s subid: %06X", r eader[r].ftab.filts[j].caid, reader[r].label, reader[r].cc_id);2335 for (k = 0; k < r eader[r].ftab.filts[j].nprids; k++) {2336 ulong prid = r eader[r].ftab.filts[j].prids[k];2333 cc_UA_oscam2cccam(rdr->hexserial, buf + 12, caid); 2334 buf[20] = rdr->ftab.filts[j].nprids; 2335 //cs_log("Ident CCcam card report caid: %04X readr %s subid: %06X", rdr->ftab.filts[j].caid, rdr->label, rdr->cc_id); 2336 for (k = 0; k < rdr->ftab.filts[j].nprids; k++) { 2337 ulong prid = rdr->ftab.filts[j].prids[k]; 2337 2338 if (!chk_srvid_by_caid_prov(cl, caid, prid)) { 2338 2339 ignore = 1; … … 2346 2347 if (au_allowed) { 2347 2348 int l; 2348 for (l = 0; l < r eader[r].nprov; l++) {2349 for (l = 0; l < rdr->nprov; l++) { 2349 2350 ulong rprid = get_reader_prid(r, l); 2350 2351 if (rprid == prid) 2351 cc_SA_oscam2cccam(&r eader[r].sa[l][0], buf+ofs+3);2352 cc_SA_oscam2cccam(&rdr->sa[l][0], buf+ofs+3); 2352 2353 } 2353 2354 } … … 2367 2368 } 2368 2369 2369 if (r eader[r].typ != R_CCCAM && !reader[r].caid[0] && !flt) {2370 if (rdr->typ != R_CCCAM && !rdr->caid[0] && !flt) { 2370 2371 flt = 0; 2371 2372 for (j = 0; j < CS_MAXCAIDTAB; j++) { 2372 //cs_log("CAID map CCcam card report caid: %04X cmap: %04X", r eader[r].ctab.caid[j], reader[r].ctab.cmap[j]);2373 ushort lcaid = r eader[r].ctab.caid[j];2373 //cs_log("CAID map CCcam card report caid: %04X cmap: %04X", rdr->ctab.caid[j], rdr->ctab.cmap[j]); 2374 ushort lcaid = rdr->ctab.caid[j]; 2374 2375 2375 2376 if (!chk_ctab(lcaid, &cl->ctab)) … … 2377 2378 2378 2379 if (!lcaid || (lcaid == 0xFFFF)) 2379 lcaid = r eader[r].ctab.cmap[j];2380 lcaid = rdr->ctab.cmap[j]; 2380 2381 2381 2382 if (lcaid && (lcaid != 0xFFFF)) { … … 2385 2386 buf[2] = id >> 8; 2386 2387 buf[3] = id & 0xff; 2387 buf[4] = r eader[r].cc_id >> 24;2388 buf[5] = r eader[r].cc_id >> 16;2388 buf[4] = rdr->cc_id >> 24; 2389 buf[5] = rdr->cc_id >> 16; 2389 2390 buf[6] = j >> 8; 2390 2391 buf[7] = j & 0xFF; … … 2394 2395 buf[11] = reshare; 2395 2396 if (au_allowed) 2396 cc_UA_oscam2cccam(r eader[r].hexserial, buf + 12, lcaid);2397 cc_UA_oscam2cccam(rdr->hexserial, buf + 12, lcaid); 2397 2398 buf[20] = 1; 2398 2399 buf[21 + 7] = 1; … … 2407 2408 } 2408 2409 2409 if (r eader[r].typ != R_CCCAM && reader[r].caid[0] && !flt && chk_ctab(2410 r eader[r].caid[0], &cl->ctab)) {2411 //cs_log("tcp_connected: %d card_status: %d ", r eader[r].tcp_connected, reader[r].card_status);2410 if (rdr->typ != R_CCCAM && rdr->caid[0] && !flt && chk_ctab( 2411 rdr->caid[0], &cl->ctab)) { 2412 //cs_log("tcp_connected: %d card_status: %d ", rdr->tcp_connected, rdr->card_status); 2412 2413 memset(buf, 0, sizeof(buf)); 2413 2414 buf[0] = id >> 24; … … 2415 2416 buf[2] = id >> 8; 2416 2417 buf[3] = id & 0xff; 2417 buf[4] = r eader[r].cc_id >> 24;2418 buf[5] = r eader[r].cc_id >> 16;2419 buf[6] = r eader[r].cc_id >> 8;2420 buf[7] = r eader[r].cc_id & 0xFF;2421 ushort caid = r eader[r].caid[0];2418 buf[4] = rdr->cc_id >> 24; 2419 buf[5] = rdr->cc_id >> 16; 2420 buf[6] = rdr->cc_id >> 8; 2421 buf[7] = rdr->cc_id & 0xFF; 2422 ushort caid = rdr->caid[0]; 2422 2423 buf[8] = caid >> 8; 2423 2424 buf[9] = caid & 0xff; … … 2425 2426 buf[11] = reshare; 2426 2427 if (au_allowed) 2427 cc_UA_oscam2cccam(r eader[r].hexserial, buf + 12, caid);2428 buf[20] = r eader[r].nprov;2429 for (j = 0; j < r eader[r].nprov; j++) {2428 cc_UA_oscam2cccam(rdr->hexserial, buf + 12, caid); 2429 buf[20] = rdr->nprov; 2430 for (j = 0; j < rdr->nprov; j++) { 2430 2431 ulong prid = get_reader_prid(r, j); 2431 2432 int ofs = 21 + (j * 7); … … 2435 2436 //Setting SA (Shared Addresses): 2436 2437 if (au_allowed) 2437 cc_SA_oscam2cccam(&r eader[r].sa[j][0], buf+ofs+3);2438 cc_SA_oscam2cccam(&rdr->sa[j][0], buf+ofs+3); 2438 2439 //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)]); 2439 2440 } … … 2442 2443 id++; 2443 2444 2444 if ((r eader[r].tcp_connected || reader[r].card_status2445 == CARD_INSERTED) /*&& !r eader[r].cc_id*/) {2446 //r eader[r].cc_id = b2i(3, buf + 5);2445 if ((rdr->tcp_connected || rdr->card_status 2446 == CARD_INSERTED) /*&& !rdr->cc_id*/) { 2447 //rdr->cc_id = b2i(3, buf + 5); 2447 2448 int len = 30 + (j * 7); 2448 2449 cc_add_reported_carddata(cl, reported_carddatas, buf, len, &reader[r]); 2449 2450 cc_cmd_send(cl, buf, len, MSG_NEW_CARD); 2450 //cs_log("CCcam: local card or newcamd reader %02X report ADD caid: %02X%02X %d %d %s subid: %06X", buf[7], buf[8], buf[9], r eader[r].card_status, reader[r].tcp_connected, reader[r].label, reader[r].cc_id);2451 } else if ((r eader[r].card_status != CARD_INSERTED)2452 && (!r eader[r].tcp_connected) && reader[r].cc_id) {2453 //r eader[r].cc_id = 0;2451 //cs_log("CCcam: local card or newcamd reader %02X report ADD caid: %02X%02X %d %d %s subid: %06X", buf[7], buf[8], buf[9], rdr->card_status, rdr->tcp_connected, rdr->label, rdr->cc_id); 2452 } else if ((rdr->card_status != CARD_INSERTED) 2453 && (!rdr->tcp_connected) && rdr->cc_id) { 2454 //rdr->cc_id = 0; 2454 2455 cc_cmd_send(cl, buf, 4, MSG_CARD_REMOVED); 2455 //cs_log("CCcam: local card or newcamd reader %02X report REMOVE caid: %02X%02X %s", buf[7], buf[8], buf[9], r eader[r].label);2456 //cs_log("CCcam: local card or newcamd reader %02X report REMOVE caid: %02X%02X %s", buf[7], buf[8], buf[9], rdr->label); 2456 2457 } 2457 2458 } 2458 2459 2459 if (r eader[r].typ == R_CCCAM && !flt) {2460 if (rdr->typ == R_CCCAM && !flt) { 2460 2461 2461 2462 cs_debug_mask(D_TRACE, "%s asking reader %s for cards...", 2462 getprefix(), r eader[r].label);2463 getprefix(), rdr->label); 2463 2464 2464 2465 struct cc_card *card; 2465 struct s_client *rc = r eader[r].client;2466 struct s_client *rc = rdr->client; 2466 2467 struct cc_data *rcc = rc->cc; 2467 2468 … … 2475 2476 if (card->hop <= maxhops && 2476 2477 chk_ctab(card->caid, &cl->ctab) && chk_ctab( 2477 card->caid, &r eader[r].ctab)) {2478 card->caid, &rdr->ctab)) { 2478 2479 2479 2480 if (cfg->cc_ignore_reshare || card->maxdown > 0) { … … 2487 2488 prov = llist_itr_next(&itr_prov); 2488 2489 if (!chk_srvid_by_caid_prov(cl, card->caid, prid) || 2489 !chk_srvid_by_caid_prov(r eader[r].client, card->caid, prid)) {2490 !chk_srvid_by_caid_prov(rdr->client, card->caid, prid)) { 2490 2491 ignore = 1; 2491 2492 break; … … 2507 2508 } 2508 2509 cs_debug_mask(D_TRACE, "%s got %d cards from %s", getprefix(), 2509 count, r eader[r].label);2510 count, rdr->label); 2510 2511 } 2511 2512 } … … 2599 2600 **/ 2600 2601 int cc_srv_wakeup_readers(struct s_client *cl) { 2601 int r;2602 2602 int wakeup = 0; 2603 for (r = 0; r < CS_MAXREADER; r++) { 2604 if (reader[r].typ != R_CCCAM) 2603 struct s_reader *rdr; 2604 for (rdr=first_reader; rdr ; rdr=rdr->next) { 2605 if (rdr->typ != R_CCCAM) 2605 2606 continue; 2606 if (!r eader[r].fd || !reader[r].enable || reader[r].deleted || reader[r].tcp_connected == 2)2607 if (!rdr->fd || !rdr->enable || rdr->deleted || rdr->tcp_connected == 2) 2607 2608 continue; 2608 if (!(r eader[r].grp & cl->grp))2609 if (!(rdr->grp & cl->grp)) 2609 2610 continue; 2610 2611 2611 2612 //This wakeups the reader: 2612 2613 uchar dummy; 2613 write_to_pipe(r eader[r].fd, PIP_ID_CIN, &dummy, sizeof(dummy));2614 write_to_pipe(rdr->fd, PIP_ID_CIN, &dummy, sizeof(dummy)); 2614 2615 wakeup++; 2615 2616 } … … 2618 2619 2619 2620 int cc_cards_modified() { 2620 int r, modified = 0; 2621 for (r = 0; r < CS_MAXREADER; r++) { 2622 if (reader[r].typ == R_CCCAM && reader[r].fd) { 2623 struct s_client *clr = reader[r].client; 2624 if (clr->cc) { 2625 struct cc_data *ccr = clr->cc; 2626 modified += ccr->cards_modified; 2627 } 2628 } 2621 int modified = 0; 2622 struct s_reader *rdr; 2623 for (rdr=first_reader; rdr ; rdr=rdr->next) { 2624 if (rdr->typ == R_CCCAM && rdr->fd) { 2625 struct s_client *clr = rdr->client; 2626 if (clr->cc) { 2627 struct cc_data *ccr = clr->cc; 2628 modified += ccr->cards_modified; 2629 } 2630 } 2629 2631 } 2630 2632 return modified;
Note:
See TracChangeset
for help on using the changeset viewer.