Changeset 1710


Ignore:
Timestamp:
02/26/10 13:46:32 (11 years ago)
Author:
merek
Message:

Readd irdeto guessing - now selectable with -DIRDETO_GUESSING, thanks to landlord

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/CMakeLists.txt

    r1647 r1710  
    165165    add_definitions ("-DWEBIF")
    166166endif (WEBIF)
     167
     168if(IRDETO_GUESSING)
     169    add_definitions ("-DIRDETO_GUESSING")
     170endif (IRDETO_GUESSING)
    167171
    168172check_include_file ("pthread.h" HAVE_PTHREAD)
     
    501505endif (HAVE_LIBUSB)
    502506if (WEBIF)
    503     message (STATUS "  Web interface enabled")
     507    message (STATUS "  web interface enabled")
    504508endif (WEBIF)
     509if (IRDETO_GUESSING)
     510    message (STATUS "  irdeto guessing enabled")
     511endif (IRDETO_GUESSING)
    505512message (STATUS "")
  • trunk/README

    r1701 r1710  
    2828Enable features:
    2929
    30 CS_ANTICASC   - enable anti-cascading (default)
    31 CS_LOGHISTORY - enable log history (default)
    32 CS_WITH_GBOX  - enable gbox support
    33 HAVE_DVBAPI   - enable DVB API support
    34 DWEBIF        - enable web interface
     30CS_ANTICASC     - enable anti-cascading (default)
     31CS_LOGHISTORY   - enable log history (default)
     32CS_WITH_GBOX    - enable gbox support
     33HAVE_DVBAPI     - enable DVB API support
     34DWEBIF          - enable web interface
     35IRDETO_GUESSING - enable irdeto guessing support
    3536
    3637Enable features with cmake:
    3738
    38 -DCS_ANTICASC=1   - enable anti-cascading (default)
    39 -DCS_LOGHISTORY=1 - enable log history (default)
    40 -DCS_WITH_GBOX=1  - enable gbox support
    41 -DHAVE_DVBAPI=1   - enable DVB API support
    42 -DWEBIF=1         - enable web interface
     39-DCS_ANTICASC=1     - enable anti-cascading (default)
     40-DCS_LOGHISTORY=1   - enable log history (default)
     41-DCS_WITH_GBOX=1    - enable gbox support
     42-DHAVE_DVBAPI=1     - enable DVB API support
     43-DWEBIF=1           - enable web interface
     44-DIRDETO_GUESSING=1 - enable irdeto guessing support
    4345
    4446Build with CMake (new solution for building)
  • trunk/globals.h

    r1708 r1710  
    681681    unsigned long   locals[CS_MAXLOCALS];
    682682#endif
    683     //struct s_irdeto_quess *itab[0xff];
     683#ifdef IRDETO_GUESSING
     684    struct s_irdeto_quess *itab[0xff];
     685#endif
    684686#ifdef HAVE_DVBAPI
    685687    int         dvbapi_enabled;
     
    840842extern ulong chk_provid(uchar *, ushort);
    841843extern void guess_cardsystem(ECM_REQUEST *);
     844#ifdef IRDETO_GUESSING
     845extern void guess_irdeto(ECM_REQUEST *);
     846#endif
    842847extern void get_cw(ECM_REQUEST *);
    843848extern void do_emm(EMM_PACKET *);
     
    880885extern int  search_boxkey(ushort, char *);
    881886extern void init_len4caid(void);
     887#ifdef IRDETO_GUESSING
     888extern int  init_irdeto_guess_tab(void);
     889#endif
    882890extern void chk_caidtab(char *caidasc, CAIDTAB *ctab);
    883891extern void chk_tuntab(char *tunasc, TUNTAB *ttab);
  • trunk/oscam-config.c

    r1709 r1710  
    1515#ifdef CS_ANTICASC
    1616static char *cs_ac="oscam.ac";
     17#endif
     18
     19#ifdef IRDETO_GUESSING
     20static char *cs_ird="oscam.ird";
    1721#endif
    1822
     
    26292633}
    26302634
     2635#ifdef IRDETO_GUESSING
     2636int init_irdeto_guess_tab()
     2637{
     2638  int i, j, skip;
     2639  int b47;
     2640  FILE *fp;
     2641  char token[128], *ptr;
     2642  char zSid[5];
     2643  uchar b3;
     2644  ushort caid, sid;
     2645  struct s_irdeto_quess *ird_row, *head;
     2646
     2647  memset(cfg->itab, 0, sizeof(cfg->itab));
     2648  sprintf(token, "%s%s", cs_confdir, cs_ird);
     2649  if (!(fp=fopen(token, "r")))
     2650  {
     2651    cs_log("can't open file \"%s\" (errno=%d) irdeto guessing not loaded",
     2652           token, errno);
     2653    return(1);
     2654  }
     2655  while (fgets(token, sizeof(token), fp))
     2656  {
     2657    if( strlen(token)<20 ) continue;
     2658    for( i=b3=b47=caid=sid=skip=0, ptr=strtok(token, ":"); (i<4)&&(ptr); ptr=strtok(NULL, ":"), i++ )
     2659    {
     2660      trim(ptr);
     2661      if( *ptr==';' || *ptr=='#' || *ptr=='-' ) {
     2662        skip=1;
     2663        break;
     2664      }
     2665      switch(i)
     2666      {
     2667        case 0: b3   = a2i(ptr, 2); break;
     2668        case 1: b47  = a2i(ptr, 8); break;
     2669        case 2: caid = a2i(ptr, 4); break;
     2670        case 3:
     2671          for( j=0; j<4; j++ )
     2672            zSid[j]=ptr[j];
     2673          zSid[4]=0;
     2674          sid  = a2i(zSid, 4);
     2675          break;
     2676      }
     2677    }
     2678    if( !skip )
     2679    {
     2680      if (!(ird_row=(struct s_irdeto_quess*)malloc(sizeof(struct s_irdeto_quess))))
     2681      {
     2682        cs_log("Error allocating memory (errno=%d)", errno);
     2683        return(1);
     2684      }
     2685      ird_row->b47  = b47;
     2686      ird_row->caid = caid;
     2687      ird_row->sid  = sid;
     2688      ird_row->next = 0;
     2689
     2690      head = cfg->itab[b3];
     2691      if( head ) {
     2692        while( head->next )
     2693          head=head->next;
     2694        head->next=ird_row;
     2695      }
     2696      else
     2697        cfg->itab[b3]=ird_row;
     2698        //cs_debug("%02X:%08X:%04X:%04X", b3, b47, caid, sid);
     2699    }
     2700  }
     2701  fclose(fp);
     2702
     2703  for( i=0; i<0xff; i++ )
     2704  {
     2705    head=cfg->itab[i];
     2706    while(head)
     2707    {
     2708      cs_debug("itab[%02X]: b47=%08X, caid=%04X, sid=%04X",
     2709               i, head->b47, head->caid, head->sid);
     2710      head=head->next;
     2711    }
     2712  }
     2713  return(0);
     2714}
     2715#endif
     2716
    26312717int init_readerdb()
    26322718{
  • trunk/oscam.c

    r1708 r1710  
    148148#ifdef CS_WITH_GBOX
    149149  fprintf(stderr, "gbox ");
     150#endif
     151#ifdef IRDETO_GUESSING
     152  fprintf(stderr, "irdeto guessing ");
    150153#endif
    151154  fprintf(stderr, "\n\n");
     
    17801783}
    17811784
     1785#ifdef IRDETO_GUESSING
     1786void guess_irdeto(ECM_REQUEST *er)
     1787{
     1788  uchar  b3;
     1789  int    b47;
     1790  //ushort chid;
     1791  struct s_irdeto_quess *ptr;
     1792
     1793  b3  = er->ecm[3];
     1794  ptr = cfg->itab[b3];
     1795  if( !ptr ) {
     1796    cs_debug("unknown irdeto byte 3: %02X", b3);
     1797    return;
     1798  }
     1799  b47  = b2i(4, er->ecm+4);
     1800  //chid = b2i(2, er->ecm+6);
     1801  //cs_debug("ecm: b47=%08X, ptr->b47=%08X, ptr->caid=%04X", b47, ptr->b47, ptr->caid);
     1802  while( ptr )
     1803  {
     1804    if( b47==ptr->b47 )
     1805    {
     1806      if( er->srvid && (er->srvid!=ptr->sid) )
     1807      {
     1808        cs_debug("sid mismatched (ecm: %04X, guess: %04X), wrong oscam.ird file?",
     1809                  er->srvid, ptr->sid);
     1810        return;
     1811      }
     1812      er->caid=ptr->caid;
     1813      er->srvid=ptr->sid;
     1814      er->chid=(ushort)ptr->b47;
     1815//      cs_debug("quess_irdeto() found caid=%04X, sid=%04X, chid=%04X",
     1816//               er->caid, er->srvid, er->chid);
     1817      return;
     1818    }
     1819    ptr=ptr->next;
     1820  }
     1821}
     1822#endif
     1823
    17821824void cs_betatunnel(ECM_REQUEST *er)
    17831825{
     
    18311873      (!er->ecm[5]) && (!er->ecm[6]) && (er->ecm[7]==er->ecm[2]-5))
    18321874    last_hope=0xd00;
     1875
     1876#ifdef IRDETO_GUESSING
     1877  if (!er->caid && er->ecm[2]==0x31 && er->ecm[0x0b]==0x28)
     1878    guess_irdeto(er);
     1879#endif
    18331880
    18341881  if (!er->caid)    // guess by len ..
     
    23672414  init_srvid();
    23682415  init_len4caid();
     2416#ifdef IRDETO_GUESSING
     2417  init_irdeto_guess_tab();
     2418#endif
    23692419  cs_init_statistics(cfg->usrfile);
    23702420
Note: See TracChangeset for help on using the changeset viewer.