Changeset 95


Ignore:
Timestamp:
05/30/09 17:35:47 (11 years ago)
Author:
smurzch2
Message:

Try decoding first on local cards.

Thanks to okmikel for this patch.
Try decoding first on local cards before sending ECM to network readers (only
for not Fallback Readers).
This is controlled with global config
PreferLocalCards = 1

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Distribution/doc/oscam-conf.txt

    r94 r95  
    6464WaitForCards   = 1: wait for local cards on oscam startup before oening network ports,
    6565                 0: no wait
     66PreferLocalCards = 1: try decoding first on local cards before sending ECM to
     67                      network readers (only for not Fallback Readers)
     68                   0: no preferences
    6669
    6770[monitor]
  • trunk/globals.h

    r94 r95  
    512512  int       show_ecm_dw;
    513513  int       waitforcards;
     514  int       preferlocalcards;
    514515  uchar      gbox_pwd[8];
    515516  uchar     ignorefile[512];
     
    557558  uchar         rcEx;
    558559  struct timeb  tps;        // incoming time stamp
     560  uchar         locals_done;
    559561  ushort        gbxCWFrom;
    560562  ushort        gbxFrom;
     
    654656extern void do_emm(EMM_PACKET *);
    655657extern ECM_REQUEST *get_ecmtask(void);
    656 extern void request_cw(ECM_REQUEST *, int);
     658extern void request_cw(ECM_REQUEST *, int, int);
    657659extern int send_dcw(ECM_REQUEST *);
    658660extern int process_input(uchar *, int, int);
  • trunk/oscam-config.c

    r94 r95  
    332332  if( !strcmp(token, "waitforcards") )
    333333    cfg->waitforcards = atoi(value);
     334  if( !strcmp(token, "preferlocalcards") )
     335    cfg->preferlocalcards = atoi(value);
    334336}
    335337
  • trunk/oscam.c

    r94 r95  
    15711571}
    15721572
    1573 void request_cw(ECM_REQUEST *er, int flag)
     1573void request_cw(ECM_REQUEST *er, int flag, int reader_types)
    15741574{
    15751575  int i;
    1576   er->level=flag;
     1576  if ((reader_types == 0) || (reader_types == 2))
     1577    er->level=flag;
    15771578  flag=(flag)?3:1;      // flag specifies with/without fallback-readers
    15781579  for (i=0; i<CS_MAXREADER; i++)
    1579     if (er->reader[i]&flag)
    1580       write_ecm_request(reader[i].fd, er);
     1580  {
     1581      switch (reader_types)
     1582      {
     1583          // network and local cards
     1584          default:
     1585          case 0: 
     1586              if (er->reader[i]&flag)
     1587                  write_ecm_request(reader[i].fd, er);
     1588              break;
     1589              // only local cards 
     1590          case 1: 
     1591              if (!(reader[i].typ & R_IS_NETWORK))
     1592                  if (er->reader[i]&flag)
     1593                      write_ecm_request(reader[i].fd, er);
     1594              break;
     1595              // only network
     1596          case 2: 
     1597              if ((reader[i].typ & R_IS_NETWORK))
     1598                  if (er->reader[i]&flag)
     1599                      write_ecm_request(reader[i].fd, er);
     1600              break;
     1601      }
     1602  }
    15811603}
    15821604
     
    17311753
    17321754  er->rcEx=0;
    1733   request_cw(er, 0);
     1755  request_cw(er, 0, cfg->preferlocalcards ? 1 : 0);
    17341756}
    17351757
     
    18081830      {
    18091831        for (j=0, act=1; (act) && (j<CS_MAXREADER); j++)
    1810           if (er->reader[j]&1)
    1811             act=0;
     1832        {
     1833            if (cfg->preferlocalcards && !er->locals_done)
     1834            {
     1835                if ((er->reader[j]&1) && !(reader[j].typ & R_IS_NETWORK))
     1836                    act=0;
     1837            }
     1838            else if (cfg->preferlocalcards && er->locals_done)
     1839            {
     1840                if ((er->reader[j]&1) && (reader[j].typ & R_IS_NETWORK))
     1841                    act=0;
     1842            }
     1843            else
     1844            {
     1845                if (er->reader[j]&1)
     1846                    act=0;
     1847            }
     1848        }
    18121849//cs_log("stage 0, act=%d r0=%d, r1=%d, r2=%d, r3=%d, r4=%d r5=%d", act,
    18131850//      er->reader[0], er->reader[1], er->reader[2],
     
    18151852        if (act)
    18161853        {
    1817           er->stage++;
    1818           request_cw(er, er->stage);
    1819           tpc.millitm += (cfg->ctimeout-cfg->ftimeout);
    1820           tpc.time += tpc.millitm / 1000;
    1821           tpc.millitm = tpc.millitm % 1000;
     1854          int inc_stage = 1;
     1855
     1856          if (cfg->preferlocalcards && !er->locals_done)
     1857          {
     1858              int i;
     1859
     1860              er->locals_done = 1;
     1861              for (i = 0; i < CS_MAXREADER; i++)
     1862              {
     1863                  if (reader[i].typ & R_IS_NETWORK)
     1864                  {
     1865                      inc_stage = 0;
     1866                  }
     1867              }
     1868          }
     1869          if (!inc_stage)
     1870          {
     1871              request_cw(er, er->stage, 2);
     1872              tpc.millitm += 1000 * (tpn.time - er->tps.time) + tpn.millitm - er->tps.millitm;
     1873              tpc.time += tpc.millitm / 1000;
     1874              tpc.millitm = tpc.millitm % 1000;
     1875          }
     1876          else
     1877          {
     1878              er->locals_done = 0;
     1879              er->stage++;
     1880              request_cw(er, er->stage, cfg->preferlocalcards ? 1 : 0);
     1881
     1882              tpc.millitm += (cfg->ctimeout-cfg->ftimeout);
     1883              tpc.time += tpc.millitm / 1000;
     1884              tpc.millitm = tpc.millitm % 1000;
     1885          }
    18221886        }
    18231887      }
     
    18351899        {
    18361900          er->stage++;
    1837           request_cw(er, er->stage);
     1901          request_cw(er, er->stage, 0);
    18381902          tpc.millitm += (cfg->ctimeout-cfg->ftimeout);
    18391903          tpc.time += tpc.millitm / 1000;
Note: See TracChangeset for help on using the changeset viewer.