Changeset 596


Ignore:
Timestamp:
12/01/09 15:25:41 (11 years ago)
Author:
cogsi
Message:

cccam sid blocking code to skip peer if unable to descramble (untested)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/cccam-test/module-cccam.c

    r595 r596  
    9696void *llist_itr_init(LLIST *l, LLIST_ITR *itr)
    9797{
    98   pthread_mutex_lock(&l->lock);
     98 // pthread_mutex_lock(&l->lock);
    9999  if (l->first) {
    100100
     
    111111void llist_itr_release(LLIST_ITR *itr)
    112112{
    113   pthread_mutex_unlock(&itr->l->lock);
     113 // pthread_mutex_unlock(&itr->l->lock);
    114114}
    115115
     
    228228
    229229  uint32 count;
     230  uint16 cur_sid;
    230231};
    231232
     
    514515
    515516  cc->cur_card = NULL;
     517  cc->cur_sid = er->srvid;
    516518
    517519  card = llist_itr_init(cc->cards, &itr);
     
    519521  while (card) {
    520522    if (card->caid == er->caid) {   // caid matches
     523      int s = 0;
     524
     525      LLIST_ITR sitr;
     526      uint16 *sid = llist_itr_init(card->badsids, &sitr);
     527      while (sid) {
     528        if (*sid == cc->cur_sid) {
     529          s = 1;
     530          break;
     531        }
     532        sid = llist_itr_next(&sitr);
     533      }
     534      llist_itr_release(&sitr);
     535
    521536      LLIST_ITR pitr;
    522537      char *prov = llist_itr_init(card->provs, &pitr);
    523       while (prov) {
     538      while (prov && !s) {
    524539        if (B24(prov) == er->prid) {  // provid matches
    525540          if ((h < 0) || (card->hop < h)) {  // card is closer
     
    567582  }
    568583
    569   if (n) return 0;
    570   else return -1;
     584  return 0;
    571585}
    572586
     
    591605
    592606      card->provs = llist_create();
     607      card->badsids = llist_create();
    593608      card->id = B32(buf+4);
    594609      card->caid = B16(buf+12);
     
    623638
    624639        llist_destroy(card->provs);
     640        llist_destroy(card->badsids);
    625641        free(card);
    626642
     
    636652  case MSG_CW_NOK1:
    637653  case MSG_CW_NOK2:
    638     cs_log("cccam: cw nok");
     654    cs_log("cccam: cw nok, sid = %x", cc->cur_sid);
     655
     656    int f = 0;
     657    LLIST_ITR itr;
     658    uint16 *sid = llist_itr_init(cc->cur_card->badsids, &itr);
     659    while (sid && !f) {
     660      if (*sid == cc->cur_sid) {
     661        llist_itr_release(&itr);
     662        f = 1;
     663      }
     664      sid = llist_itr_next(&itr);
     665    }
     666    llist_itr_release(&itr);
     667
     668    if (!f) {
     669      sid = malloc(sizeof(uint16));
     670      *sid = cc->cur_sid;
     671
     672      sid = llist_append(cc->cur_card->badsids, sid);
     673      cs_debug("   added sid block for card %08x", cc->cur_card->id);
     674    }
     675    bzero(cc->dcw, 16);
     676    return 0;
    639677    break;
    640678  case MSG_CW:
     
    663701    cs_debug("cccam: recv chk - MSG_CW %d - %s", cc->count, cs_hexdump(0, dcw, 16));
    664702    *rc = 1;
    665     //return 0;
    666703    return(cc->count);
    667   }
    668 
    669   return -1;
     704  } else if ((buf[1] == (MSG_CW_NOK1)) || (buf[1] == (MSG_CW_NOK2))) {
     705    /*memcpy(dcw, cc->dcw, 16);
     706    return *rc = 1;
     707    return(cc->count);*/
     708  }
     709
     710  return (-1);
    670711}
    671712
Note: See TracChangeset for help on using the changeset viewer.