Changeset 4005


Ignore:
Timestamp:
11/27/10 11:57:39 (10 years ago)
Author:
schlocke
Message:

increasing minimum ecm cache to 5

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/oscam.c

    r4002 r4005  
    3636struct  s_ecm     *ecmcache;
    3737struct  s_ecm     *ecmidx;
     38pthread_mutex_t ecmcache_lock;
    3839
    3940#ifdef CS_WITH_GBOX
     
    668669}
    669670
     671static struct s_ecm *generate_cache()
     672{
     673  int i;
     674  struct s_ecm *idx, *cache;
     675  cache=idx=malloc(sizeof(struct s_ecm));
     676  memset(idx, 0, sizeof(struct s_ecm));
     677  for(i=0;i<5;i++) {
     678    idx->next=malloc(sizeof(struct s_ecm));
     679    idx=idx->next;
     680    memset(idx, 0, sizeof(struct s_ecm));
     681  }
     682  return cache;
     683}
     684
    670685static void init_shm()
    671686{
    672   int i;
    673   cwidx=cwcache=malloc(sizeof(struct s_ecm));
    674   for(i=0;i<5;i++) {
    675     cwidx->next=malloc(sizeof(struct s_ecm));
    676     cwidx=cwidx->next;
    677     cwidx->next=NULL;
    678   }
    679   cwidx=cwcache;
    680 
    681   ecmidx=ecmcache=malloc(sizeof(struct s_ecm));
    682   ecmcache->next = NULL;
     687  //Generate 5 CW cache entries:
     688  cwidx=cwcache=generate_cache();
     689
     690  //Generate 5 ECM cache entries:
     691  ecmidx=ecmcache=generate_cache();
    683692
    684693  first_client = malloc(sizeof(struct s_client));
     
    707716
    708717  pthread_mutex_init(&gethostbyname_lock, NULL);
     718  pthread_mutex_init(&ecmcache_lock, NULL);
    709719
    710720#ifdef CS_LOGHISTORY
     
    11741184}
    11751185
     1186static void store_ecm(ECM_REQUEST *er, uint64 grp)
     1187{
     1188    if (ecmidx->next)
     1189        ecmidx=ecmidx->next;
     1190    else
     1191        ecmidx=ecmcache;
     1192    memcpy(ecmidx->ecmd5, er->ecmd5, CS_ECMSTORESIZE);
     1193    ecmidx->caid = er->caid;
     1194    ecmidx->grp = grp;
     1195    ecmidx->reader = er->selected_reader;
     1196}
     1197
    11761198/**
    11771199 * ecm cache
    11781200 **/
    1179 int check_ecmcache(ECM_REQUEST *er, uint64 grp)
     1201static int check_and_store_ecmcache(ECM_REQUEST *er, uint64 grp)
    11801202{
    11811203    struct s_ecm *ecmc;
     1204        pthread_mutex_lock(&ecmcache_lock);
    11821205    for (ecmc=ecmcache; ecmc ; ecmc=ecmc->next)
    11831206        if ((grp & ecmc->grp) &&
     
    11851208             (!memcmp(ecmc->ecmd5, er->ecmd5, CS_ECMSTORESIZE)))
    11861209        {
     1210                er->rc = 99;
     1211                pthread_mutex_unlock(&ecmcache_lock);
    11871212            return(1);
    11881213        }
     1214        store_ecm(er, grp); //Only ECM, no CW!
     1215        pthread_mutex_unlock(&ecmcache_lock);
    11891216    return(0);
    11901217}
     
    12421269    cwidx->reader = er->selected_reader;
    12431270    //cs_ddump(cwcache[*cwidx].ecmd5, CS_ECMSTORESIZE, "ECM stored (idx=%d)", *cwidx);
    1244 }
    1245 
    1246 static void store_ecm(ECM_REQUEST *er, uint64 grp)
    1247 {
    1248     if (ecmidx->next)
    1249         ecmidx=ecmidx->next;
    1250     else
    1251         ecmidx=ecmcache;
    1252     memcpy(ecmidx->ecmd5, er->ecmd5, CS_ECMSTORESIZE);
    1253     ecmidx->caid = er->caid;
    1254     ecmidx->grp = grp;
    1255     ecmidx->reader = er->selected_reader;
    12561271}
    12571272
     
    22512266        if (check_cwcache1(er, client->grp))
    22522267            er->rc = 1;
    2253                 else if (check_ecmcache(er, client->grp)) {
    2254                         er->rc = 99;
    2255                         return; //ecm already requested!
    2256                 }
    2257                 else
    2258                         store_ecm(er, client->grp); //Only ECM, no CW!
     2268                else if (check_and_store_ecmcache(er, client->grp))
     2269                        return;
    22592270
    22602271#ifdef CS_ANTICASC
Note: See TracChangeset for help on using the changeset viewer.