Changeset 11696


Ignore:
Timestamp:
09/16/21 12:41:35 (6 days ago)
Author:
felixka
Message:

[gbx] - enhance 'ignore peer' feature

  • thx to @chimpie232 for providing the patch
  • improve ccc reshare
  • code cosmetic
Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/module-gbox-cards.c

    r11687 r11696  
    165165        return;
    166166    }
    167 
     167    fprintf(fhandle, "Statistics for peer cards received\n");
    168168    struct gbox_card *card;
    169169    cs_readlock(__func__, &gbox_cards_lock);
     
    173173        if (card->type == GBOX_CARD_TYPE_GBOX)
    174174        {
    175             fprintf(fhandle, "CardID %4d Card %08X id:%04X #CWs:%d AVGtime:%d ms\n",
    176                     card_count, card->caprovid, card->id.peer, card->no_cws_returned, card->average_cw_time);
    177             fprintf(fhandle, "Good SIDs:\n");
     175            fprintf(fhandle, "\nCard# %04d  CaProv:%08X ID:%04X #CWs:%d AVGtime:%d ms",
     176                    card_count +1, card->caprovid, card->id.peer, card->no_cws_returned, card->average_cw_time);
     177            fprintf(fhandle, "\n Good SID: ");
    178178            LL_ITER it2 = ll_iter_create(card->goodsids);
    179179            while((srvid_good = ll_iter_next(&it2)))
    180                 { fprintf(fhandle, "%04X\n", srvid_good->srvid.sid); }
    181             fprintf(fhandle, "Bad SIDs:\n");
     180                { fprintf(fhandle, "%04X ", srvid_good->srvid.sid); }
     181            fprintf(fhandle, "\n Bad SID: ");
    182182            it2 = ll_iter_create(card->badsids);
    183183            while((srvid_bad = ll_iter_next(&it2)))
    184                 { fprintf(fhandle, "%04X #%d\n", srvid_bad->srvid.sid, srvid_bad->bad_strikes); }
     184                { fprintf(fhandle, "%04X ", srvid_bad->srvid.sid); }
    185185            card_count++;
    186186        }
     
    319319            while((card = ll_iter_next(&it)))
    320320                {
    321                 //  crd_num++;
    322321                    if (card->caprovid == caprovid && card->id.peer == id_peer && card->id.slot == slot && type != GBOX_CARD_TYPE_CCCAM)
    323322                        {
     
    373372                    return;
    374373                }
    375             if (check_card_properties(caprovid, id_peer, slot, distance, type))
     374            if (check_card_properties(caprovid, id_peer, slot, distance, type) && !check_peer_ignored(id_peer))
    376375                {
    377376                    cs_log_dbg(D_READER, "add card to card_list - peer: %04X %08X dist %d", id_peer, caprovid, distance);
  • trunk/module-gbox.c

    r11687 r11696  
    2727static int8_t local_gbox_initialized = 0;
    2828static uint8_t local_cards_initialized = 0;
    29 static time_t last_stats_written;
    3029uint8_t local_gbx_rev = 0x30;
    31 
    32 static uint16_t gbox_add_local_cards(void);
     30uint32_t startup = 0;
     31
     32static uint32_t gbox_add_local_cards(void);
    3333static int32_t gbox_send_ecm(struct s_client *cli, ECM_REQUEST *er);
    3434void start_gbx_ticker(void);
     
    3636char *get_gbox_tmp_fname(char *fext)
    3737{
    38     static char gbox_tmpfile_buf[64] = { 0 };
     38    static char gbox_tmpfile_buf[128];
     39    memset(gbox_tmpfile_buf, 0, sizeof(gbox_tmpfile_buf));
    3940    const char *slash = "/";
     41
    4042    if(!cfg.gbox_tmp_dir)
    4143    {
     
    9597    if(txt_id == GBOX_ATTACK_PEER_IGNORE)
    9698    {
    97         fprintf(fhandle, "ATTACK ALERT FROM %04X  %s - peer is ignored - %s",
     99        fprintf(fhandle, "ATTACK ALERT FROM %04X  %s - peer ignored by conf - %s",
    98100            rcvd_id, cs_inet_ntoa(cli->ip), tsbuf);
    99101    }
     
    157159        char *cmd = buf;
    158160        FILE *p;
    159         if ((p = popen(cmd, "w")) == NULL)
    160         {
    161             cs_log("Error %s",fname);
     161        if((p = popen(cmd, "w")) == NULL)
     162        {
     163            cs_log("Error popen: %s",fname);
    162164            return;
    163165        }
    164         pclose(p);
     166        if(pclose(p) == -1)
     167        {
     168            cs_log("Error pclose(): %s",fname);
     169            return;
     170        }
    165171    }
    166172    return;
     
    647653                if(nbcards_cnt == MAX_GBOX_CARDS)
    648654                {
    649                     cs_log("gbox_send_hello - max cards send to peer reached");
     655                    cs_log("max card limit [%d] send to peer %04X is exceeded", MAX_GBOX_CARDS, peer->gbox.id);
    650656                    break;
    651657                }
    652            
     658
    653659                if(nbcards_cnt == nb_send_cards)
    654660                {
     
    11181124            peer->crd_crc_change = 0;
    11191125            peer->next_hello = 0;
    1120 //          cli->last = time((time_t *)0);
     1126            cli->last = time((time_t *)0);
    11211127    }
    11221128    else
     
    11641170}
    11651171
    1166 static int8_t check_peer_ignored(uint16_t peer_id)
     1172int8_t check_peer_ignored(uint16_t peer_id)
    11671173{
    11681174    int i;
     
    15821588                            n, username(proxy), proxy->reader->device);
    15831589    } // end switch
    1584 
    1585     if((time(NULL) - last_stats_written) > STATS_WRITE_TIME)
    1586     {
    1587         gbox_write_stats();
    1588         last_stats_written = time(NULL);
    1589     }
    15901590    return 0;
    15911591}
     
    16181618}
    16191619
    1620 static uint16_t gbox_add_local_cards(void)
     1620static uint32_t gbox_add_local_cards(void)
    16211621{
    16221622    int32_t i;
     
    16331633    struct cc_provider *provider;
    16341634    uint8_t *node1 = NULL;
     1635    uint8_t offset = 0;
    16351636
    16361637    gbox_delete_cards(GBOX_DELETE_WITH_TYPE, GBOX_CARD_TYPE_CCCAM);
     
    16531654                    prid = cl->reader->prid[i][1] << 16 | cl->reader->prid[i][2] << 8 | cl->reader->prid[i][3];
    16541655                    gbox_add_card(local_gbox.id, gbox_get_caprovid(cl->reader->caid, prid), slot, DEFAULT_GBOX_RESHARE, 0, GBOX_CARD_TYPE_LOCAL, NULL);
    1655                     crdnb++;
    16561656                }
    16571657            }
    1658             else if(caid_is_viaccess(cl->reader->caid)) //skip via issuer
    1659             {
    1660                 for(i = 1; i < cl->reader->nprov; i++)
     1658            else if(caid_is_viaccess(cl->reader->caid))
     1659            {
     1660                for(i = 1; i < cl->reader->nprov; i++)  //skip via issuer
    16611661                {
    16621662                    prid = cl->reader->prid[i][1] << 16 | cl->reader->prid[i][2] << 8 | cl->reader->prid[i][3];
    16631663                    gbox_add_card(local_gbox.id, gbox_get_caprovid(cl->reader->caid, prid), slot, DEFAULT_GBOX_RESHARE, 0, GBOX_CARD_TYPE_LOCAL, NULL);
    1664                     crdnb++;
    16651664                }
    16661665            }
     
    16681667            {
    16691668                gbox_add_card(local_gbox.id, gbox_get_caprovid(cl->reader->caid, 0), slot, DEFAULT_GBOX_RESHARE, 0, GBOX_CARD_TYPE_LOCAL, NULL);
    1670                 crdnb++;
    16711669                if(chk_is_betatunnel_caid(cl->reader->caid) == 1) // 1702 1722
    16721670                    {
     
    16751673                    }
    16761674            }
    1677             //crdnb++;
     1675            crdnb++;
    16781676        } // end local readers
    16791677#ifdef MODULE_CCCAM
     
    16881686                node1 = ll_has_elements(card->remote_nodes);
    16891687                checksum = ((node1[0] ^ node1[7]) << 8) | ((node1[1] ^ node1[6]) << 24) | (node1[2] ^ node1[5]) | ((node1[3] ^ node1[4]) << 16);
    1690                 cc_peer_id = ((((checksum >> 24) & 0xFF) ^ ((checksum >> 8) & 0xFF)) << 8 | (((checksum >> 16) & 0xFF) ^ (checksum & 0xFF)));
    1691 
    1692                 slot = gbox_next_free_slot(cc_peer_id);
     1688                cc_peer_id = ((((checksum >> 24) & 0xFF) ^ ((checksum >> 8) & 0xFF)) << 8 | (((checksum >> 16) & 0xFF) ^ (checksum & 0xFF))) + offset;
     1689
     1690                slot = gbox_next_free_slot(cc_peer_id);
    16931691
    16941692                if(caid_is_seca(card->caid) || caid_is_viaccess(card->caid) || caid_is_cryptoworks(card->caid))
     
    17061704                cccrdnb++;
    17071705                crdnb++;
     1706
     1707                if(slot % 18 == 0)
     1708                    {
     1709                        //offset++;
     1710                        offset += (rand() % 18) +1;
     1711                        //cs_log("cccrdnum: %d, slot: %d, offset: %d, caid: %04X, peer: %04X", cccrdnb, slot, offset, card->caid, cc_peer_id);
     1712                    }
    17081713            }
    17091714        } // end cccam
     
    17341739            { cs_log("Local gbox cards initialized - cards: %d", crdnb); }
    17351740        }
    1736     return crdnb - cccrdnb;
     1741    return (cccrdnb << 16) | (crdnb - cccrdnb);
    17371742} //end add local gbox cards
    17381743
     
    17581763            return;
    17591764        }
    1760         cs_log("Card update send to peer(s) online - crd(s):%d", gbox_add_local_cards());
     1765
     1766        cs_log("Card update send to peer(s) online - Local/Proxy crd(s):%d", gbox_add_local_cards() & 0xffff);
    17611767        //gbox_write_local_cards_info(); //done by gbox_add_local_cards()
    17621768        gbox_send_peer_crd_update();
     
    22962302    }
    22972303
    2298     last_stats_written = time(NULL);
    22992304    gbox_write_version();
    23002305
     
    26432648static pthread_mutex_t gbx_tick_sleep_cond_mutex;
    26442649static pthread_mutex_t gbx_tick_mutex;
    2645 uint32_t startup = 0;
    26462650
    26472651static void gbx_tick_mutex_init(void)
     
    26672671            gbox_init_send_gsms();
    26682672        }
    2669        
     2673
    26702674        startup++;
    26712675       
    2672         if(startup < 30)
     2676        if(startup < GBOX_START_TIME)
    26732677            {
    26742678                delayed_crd_update();
     2679            }
     2680        else if(startup == GBOX_START_TIME -10)
     2681            {
     2682                gbox_add_local_cards();
     2683            }
     2684        else if(startup % STATS_WRITE_TIME == 0)
     2685            {
     2686                gbox_write_stats();
    26752687            }
    26762688
  • trunk/module-gbox.h

    r11687 r11696  
    1919#define MIN_GBOX_MESSAGE_LENGTH     10 // CMD + pw + pw. TODO: Check if is really min
    2020#define MIN_ECM_LENGTH               8
    21 #define STATS_WRITE_TIME           300 // write stats file every 5 min
     21#define STATS_WRITE_TIME            60 // write stats file every 1 min
    2222#define MAX_GBOX_CARDS            1024 // send max. 1024 cards to peer
    2323#define LOCAL_GBOX_MAJOR_VERSION  0x02
     24#define GBOX_START_TIME             30
    2425
    2526#define MSG_ECM       0x445C
     
    172173uint16_t gbox_convert_password_to_id(uint32_t password);
    173174uint8_t get_peer_onl_status(uint16_t peer_id);
     175int8_t check_peer_ignored(uint16_t peer_id);
    174176uint32_t gbox_get_local_gbox_password(void);
    175177void gbox_send(struct s_client *cli, uint8_t *buf, int32_t l);
Note: See TracChangeset for help on using the changeset viewer.