Changeset 1685


Ignore:
Timestamp:
02/25/10 13:12:21 (11 years ago)
Author:
merek
Message:

Code Cleanup in chk_reader

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/oscam-config.c

    r1684 r1685  
    10621062    cfg->usrfile = NULL;
    10631063    cfg->cwlogdir = NULL;
     1064    cfg->ncd_keepalive = 1;
    10641065#ifdef CS_ANTICASC
    10651066    cfg->ac_enabled = 0;
     
    10711072    strcpy(cfg->ac_logfile, "./oscam_ac.log");
    10721073#endif
    1073     cfg->ncd_keepalive=1;
    10741074    sprintf(token, "%s%s", cs_confdir, cs_conf);
    10751075    if (!(fp = fopen(token, "r"))) {
     
    15881588static void chk_reader(char *token, char *value, struct s_reader *rdr)
    15891589{
    1590   int i;
    1591   char *ptr;
    1592   /*
    1593    *  case sensitive first
    1594    */
    1595   if (!strcmp(token, "device"))
    1596   {
    1597     for (i=0, ptr=strtok(value, ","); (i<3)&&(ptr); ptr=strtok(NULL, ","), i++)
    1598     {
    1599       trim(ptr);
    1600       switch(i)
    1601       {
    1602         case 0: cs_strncpy(rdr->device, ptr, sizeof(rdr->device)); break;
    1603         case 1: rdr->r_port=atoi(ptr); break;
    1604         case 2: rdr->l_port=atoi(ptr); break;
    1605       }
    1606     }
    1607     return;
    1608   }
    1609   if (!strcmp(token, "key"))
    1610   {
    1611     if (key_atob14(value, rdr->ncd_key))
    1612     {
    1613       fprintf(stderr, "Configuration newcamd: Error in Key\n");
    1614       exit(1);
    1615     }
    1616     return;
    1617   }
     1590    int i;
     1591    char *ptr;
     1592    /*
     1593     *  case sensitive first
     1594     */
     1595    if (!strcmp(token, "device")) {
     1596        for (i = 0, ptr = strtok(value, ","); (i < 3) && (ptr); ptr = strtok(NULL, ","), i++) {
     1597            trim(ptr);
     1598            switch(i) {
     1599                case 0:
     1600                    cs_strncpy(rdr->device, ptr, sizeof(rdr->device));
     1601                    break;
     1602
     1603                case 1:
     1604                    rdr->r_port = atoi(ptr);
     1605                    break;
     1606
     1607                case 2:
     1608                    rdr->l_port = atoi(ptr);
     1609                    break;
     1610            }
     1611        }
     1612        return;
     1613    }
     1614
     1615    if (!strcmp(token, "key")) {
     1616        if (key_atob14(value, rdr->ncd_key)) {
     1617            fprintf(stderr, "Configuration newcamd: Error in Key\n");
     1618            exit(1);
     1619        }
     1620        return;
     1621    }
     1622
    16181623#ifdef CS_WITH_GBOX
    1619   if (!strcmp(token, "password")) { cs_strncpy((char *)rdr->gbox_pwd, (const char *)i2b(4, a2i(value, 4)), 4); return; }
    1620   if (!strcmp(token, "premium")) { rdr->gbox_prem=1; return; }
    1621 #endif
    1622   if (!strcmp(token, "account"))
    1623   {
    1624     for (i=0, ptr=strtok(value, ","); (i<2)&&(ptr); ptr=strtok(NULL, ","), i++)
    1625     {
    1626       trim(ptr);
    1627       switch(i)
    1628       {
    1629         case 0: cs_strncpy(rdr->r_usr, ptr, sizeof(rdr->r_usr)); break;
    1630         case 1: cs_strncpy(rdr->r_pwd, ptr, sizeof(rdr->r_pwd)); break;
    1631       }
    1632     }
    1633     return;
    1634   }
    1635   if( !strcmp(token, "pincode")) { strncpy(rdr->pincode, value, sizeof(rdr->pincode)-1); return; }
    1636   if (!strcmp(token, "readnano") && value[0]) { asprintf(&(rdr->emmfile), "%s", value); return; }
    1637   /*
    1638    *  case insensitive
    1639    */
    1640   strtolower(value);
    1641 
    1642   if (!strcmp(token, "enable")) { rdr->enable=atoi(value) ? 1 : 0; return; }
    1643   if (!strcmp(token, "services")) { chk_services(value, &rdr->sidtabok, &rdr->sidtabno); return; }
    1644   if (!strcmp(token, "inactivitytimeout")) {   rdr->tcp_ito = atoi(value);  return; }
    1645   if (!strcmp(token, "reconnecttimeout")) {    rdr->tcp_rto = atoi(value);  return; }
    1646   if (!strcmp(token, "disableserverfilter")) { rdr->ncd_disable_server_filt = atoi(value);  return; }
    1647   //FIXME workaround for Smargo until native mode works
    1648   if (!strcmp(token, "smargopatch")) { rdr->smargopatch = atoi(value);  return; }
    1649   if (!strcmp(token, "label")) { cs_strncpy(rdr->label, value, sizeof(rdr->label)); return; }
    1650   if (!strcmp(token, "fallback")) { rdr->fallback=atoi(value) ? 1 : 0; return; }
    1651   if (!strcmp(token, "logport")) { rdr->log_port=atoi(value); return; }
    1652   if (!strcmp(token, "caid")) { chk_caidtab(value, &rdr->ctab); return; }
    1653   if (!strcmp(token, "boxid")) { rdr->boxid=a2i(value,4); return; }
    1654   if (!strcmp(token, "aeskey"))
    1655   {
    1656     if (key_atob(value, rdr->aes_key))
    1657     {
    1658       fprintf(stderr, "Configuration reader: Error in AES Key\n");
    1659       exit(1);
    1660     }
    1661     return;
    1662   }
    1663   if ((!strcmp(token, "n3_rsakey")) || (!strcmp(token, "rsakey")) )
    1664   {
    1665     rdr->has_rsa=1;
    1666     if (key_atob_l(value, rdr->rsa_mod, 128))
    1667     {
    1668       fprintf(stderr, "Configuration reader: Error in rsakey\n");
    1669       exit(1);
    1670     }
    1671     return;
    1672   }
    1673   if (!strcmp(token, "tiger_rsakey"))
    1674   {
    1675     if (key_atob_l(value, rdr->rsa_mod, 240))
    1676     {
    1677       fprintf(stderr, "Configuration reader: Error in tiger_rsakey\n");
    1678       exit(1);
    1679     }
    1680     return;
    1681   }
    1682   if ((!strcmp(token, "n3_boxkey")) || (!strcmp(token, "boxkey")))
    1683   {
    1684     if (key_atob_l(value, rdr->nagra_boxkey, 16))
    1685     {
    1686       fprintf(stderr, "Configuration reader: Error in boxkey\n");
    1687       exit(1);
    1688     }
    1689     return;
    1690   }
    1691   if (!strcmp(token, "detect"))
    1692   {
    1693     for (i=0; RDR_CD_TXT[i]; i++)
    1694     {
    1695       if (!strcmp(value, RDR_CD_TXT[i]))
    1696         rdr->detect=i;
    1697       else
    1698         if ((value[0]=='!') && (!strcmp(value+1, RDR_CD_TXT[i])))
    1699           rdr->detect=i|0x80;
    1700     }
    1701     return;
    1702   }
    1703   if (!strcmp(token, "mhz")) { rdr->mhz=atoi(value); return; }
    1704   if (!strcmp(token, "cardmhz")) { rdr->cardmhz=atoi(value); return; }
    1705   if (!strcmp(token, "protocol"))
    1706   {
    1707     if (!strcmp(value, "mouse")) {      rdr->typ=R_MOUSE; return; }
    1708     if (!strcmp(value, "smartreader")) {      rdr->typ=R_SMART; return; }
    1709     if (!strcmp(value, "internal")) {   rdr->typ=R_INTERNAL; return; }
     1624    if (!strcmp(token, "password")) {
     1625        cs_strncpy((char *)rdr->gbox_pwd, (const char *)i2b(4, a2i(value, 4)), 4);
     1626        return;
     1627    }
     1628
     1629    if (!strcmp(token, "premium")) {
     1630        rdr->gbox_prem = 1;
     1631        return;
     1632    }
     1633#endif
     1634    if (!strcmp(token, "account")) {
     1635        for (i = 0, ptr = strtok(value, ","); (i < 2) && (ptr); ptr = strtok(NULL, ","), i++) {
     1636            trim(ptr);
     1637            switch(i) {
     1638                case 0:
     1639                    cs_strncpy(rdr->r_usr, ptr, sizeof(rdr->r_usr));
     1640                    break;
     1641
     1642                case 1:
     1643                    cs_strncpy(rdr->r_pwd, ptr, sizeof(rdr->r_pwd));
     1644                    break;
     1645            }
     1646        }
     1647        return;
     1648    }
     1649
     1650    if (!strcmp(token, "pincode")) {
     1651        strncpy(rdr->pincode, value, sizeof(rdr->pincode) - 1);
     1652        return;
     1653    }
     1654
     1655    if (!strcmp(token, "readnano") && value[0]) {
     1656        asprintf(&(rdr->emmfile), "%s", value);
     1657        return;
     1658    }
     1659
     1660    /*
     1661     *  case insensitive
     1662    */
     1663    strtolower(value);
     1664
     1665    if (!strcmp(token, "enable")) {
     1666        rdr->enable = atoi(value) ? 1 : 0;
     1667        return;
     1668    }
     1669
     1670    if (!strcmp(token, "services")) {
     1671        chk_services(value, &rdr->sidtabok, &rdr->sidtabno);
     1672        return;
     1673    }
     1674
     1675    if (!strcmp(token, "inactivitytimeout")) {
     1676        rdr->tcp_ito = atoi(value);
     1677        return;
     1678    }
     1679
     1680    if (!strcmp(token, "reconnecttimeout")) {
     1681        rdr->tcp_rto = atoi(value);
     1682        return;
     1683    }
     1684
     1685    if (!strcmp(token, "disableserverfilter")) {
     1686        rdr->ncd_disable_server_filt = atoi(value);
     1687        return;
     1688    }
     1689
     1690    //FIXME workaround for Smargo until native mode works
     1691    if (!strcmp(token, "smargopatch")) {
     1692        rdr->smargopatch = atoi(value);
     1693        return;
     1694    }
     1695
     1696    if (!strcmp(token, "label")) {
     1697        cs_strncpy(rdr->label, value, sizeof(rdr->label));
     1698        return;
     1699    }
     1700
     1701    if (!strcmp(token, "fallback")) {
     1702        rdr->fallback = atoi(value) ? 1 : 0;
     1703        return;
     1704    }
     1705
     1706    if (!strcmp(token, "logport")) {
     1707        rdr->log_port = atoi(value);
     1708        return;
     1709    }
     1710
     1711    if (!strcmp(token, "caid")) {
     1712        chk_caidtab(value, &rdr->ctab);
     1713        return;
     1714    }
     1715
     1716    if (!strcmp(token, "boxid")) {
     1717        rdr->boxid = a2i(value, 4);
     1718        return;
     1719    }
     1720
     1721    if (!strcmp(token, "aeskey")) {
     1722        if (key_atob(value, rdr->aes_key)) {
     1723            fprintf(stderr, "Configuration reader: Error in AES Key\n");
     1724            exit(1);
     1725        }
     1726        return;
     1727    }
     1728
     1729    if ((!strcmp(token, "n3_rsakey")) || (!strcmp(token, "rsakey"))) {
     1730        rdr->has_rsa = 1;
     1731        if (key_atob_l(value, rdr->rsa_mod, 128)) {
     1732            fprintf(stderr, "Configuration reader: Error in rsakey\n");
     1733            exit(1);
     1734        }
     1735        return;
     1736    }
     1737
     1738    if (!strcmp(token, "tiger_rsakey")) {
     1739        if (key_atob_l(value, rdr->rsa_mod, 240)) {
     1740            fprintf(stderr, "Configuration reader: Error in tiger_rsakey\n");
     1741            exit(1);
     1742        }
     1743        return;
     1744    }
     1745
     1746    if ((!strcmp(token, "n3_boxkey")) || (!strcmp(token, "boxkey"))) {
     1747        if (key_atob_l(value, rdr->nagra_boxkey, 16)) {
     1748            fprintf(stderr, "Configuration reader: Error in boxkey\n");
     1749            exit(1);
     1750        }
     1751        return;
     1752    }
     1753
     1754    if (!strcmp(token, "detect")) {
     1755        for (i = 0; RDR_CD_TXT[i]; i++) {
     1756            if (!strcmp(value, RDR_CD_TXT[i])) {
     1757                rdr->detect = i;
     1758            }
     1759            else {
     1760                if ((value[0] == '!') && (!strcmp(value+1, RDR_CD_TXT[i])))
     1761                    rdr->detect = i|0x80;
     1762            }
     1763        }
     1764        return;
     1765    }
     1766
     1767    if (!strcmp(token, "mhz")) {
     1768        rdr->mhz = atoi(value);
     1769        return;
     1770    }
     1771
     1772    if (!strcmp(token, "cardmhz")) {
     1773        rdr->cardmhz = atoi(value);
     1774        return;
     1775    }
     1776
     1777    if (!strcmp(token, "protocol")) {
     1778
     1779        if (!strcmp(value, "mouse")) {
     1780            rdr->typ = R_MOUSE;
     1781            return;
     1782        }
     1783
     1784        if (!strcmp(value, "smartreader")) {
     1785            rdr->typ = R_SMART;
     1786            return;
     1787        }
     1788
     1789        if (!strcmp(value, "internal")) {
     1790            rdr->typ = R_INTERNAL;
     1791            return;
     1792        }
     1793
    17101794#ifdef HAVE_PCSC
    1711     if (!strcmp(value, "pcsc")) {   rdr->typ=R_PCSC; return; }
    1712 #endif
    1713     if (!strcmp(value, "serial")) {     rdr->typ=R_SERIAL; return; }
    1714     if (!strcmp(value, "camd35")) {     rdr->typ=R_CAMD35; return; }
    1715     if (!strcmp(value, "cs378x")) {     rdr->typ=R_CS378X; return; }
    1716     if (!strcmp(value, "cs357x")) {     rdr->typ=R_CAMD35; return; }
    1717     if (!strcmp(value, "gbox")) {       rdr->typ=R_GBOX; return; }
    1718     if (!strcmp(value, "cccam")) {
    1719       rdr->typ=R_CCCAM;
    1720      // strcpy(value, "1");
    1721      // chk_caidtab(value, &rdr->ctab); // this is a MAJOR hack for auto multiple caid support (not currently working due to ncd table issue)
    1722       return;
    1723     }
    1724     if (!strcmp(value, "radegast")) {       rdr->typ=R_RADEGAST; return; }
    1725     if (!strcmp(value, "newcamd") ||
    1726         !strcmp(value, "newcamd525")) {rdr->typ=R_NEWCAMD;
    1727                                        rdr->ncd_proto=NCD_525; return; }
    1728     if (!strcmp(value, "newcamd524")) {rdr->typ=R_NEWCAMD;
    1729                                        rdr->ncd_proto=NCD_524; return; }
    1730     fprintf(stderr, "WARNING: value '%s' in protocol-line not recognized, assuming MOUSE\n",value);
    1731     rdr->typ=R_MOUSE;
    1732     return;
    1733   }
    1734   if (!strcmp(token, "loadbalanced")) { rdr->loadbalanced=atoi(value); return; }
    1735   if (!strcmp(token, "ident")) { chk_ftab(value, &rdr->ftab,"reader",rdr->label,"provid"); return; }
    1736   if (!strcmp(token, "class")) { chk_cltab(value, &rdr->cltab); return; }
    1737   if (!strcmp(token, "chid")) {  chk_ftab(value, &rdr->fchid,"reader",rdr->label,"chid"); return; }
    1738   if (!strcmp(token, "showcls")) { rdr->show_cls = atoi(value); return; }
    1739   if (!strcmp(token, "maxqlen"))
    1740   {
    1741     rdr->maxqlen = atoi(value);
    1742     if( rdr->maxqlen<0 || rdr->maxqlen>CS_MAXQLEN )
    1743       rdr->maxqlen=CS_MAXQLEN;
    1744     return;
    1745   }
    1746   if (!strcmp(token, "group"))
    1747   {
    1748     for (ptr=strtok(value, ","); ptr; ptr=strtok(NULL, ","))
    1749     {
    1750       int g;
    1751       g=atoi(ptr);
    1752       if ((g>0) && (g<33)) rdr->grp|=(1<<(g-1));
    1753     }
    1754     return;
    1755   }
    1756   if (!strcmp(token, "emmcache"))
    1757   {
    1758     for (i=0, ptr=strtok(value, ","); (i<3)&&(ptr); ptr=strtok(NULL, ","), i++)
    1759       switch(i)
    1760       {
    1761         case 0: rdr->cachemm=atoi(ptr);   break;
    1762         case 1: rdr->rewritemm=atoi(ptr); break;
    1763         case 2: rdr->logemm=atoi(ptr);    break;
    1764       }
    1765     if (rdr->rewritemm <=0) {
    1766       fprintf(stderr, "Notice: Setting EMMCACHE to %i,1,%i instead of %i,%i,%i. Zero or negative number of rewrites is silly\n", rdr->cachemm,rdr->logemm,rdr->cachemm,rdr->rewritemm,rdr->logemm);
    1767       rdr->rewritemm = 1;
    1768     }
    1769     return;
    1770   }
    1771 
    1772   if (!strcmp(token, "blocknano"))
    1773   {
    1774     if (!strcmp(value,"all")) //wildcard is used
    1775       for (i=0 ; i<256; i++)
    1776   rdr->b_nano[i] |= 0x01; //set all lsb's to block all nanos
    1777     else
    1778       for (ptr=strtok(value, ","); ptr; ptr=strtok(NULL, ","))
    1779   if ((i=byte_atob(ptr))>=0)
    1780     rdr->b_nano[i]|= 0x01; //lsb is set when to block nano
    1781     return;
    1782   }
    1783   if (!strcmp(token, "savenano"))
    1784   {
    1785     if (!strcmp(value,"all")) //wildcard is used
    1786       for (i=0 ; i<256; i++)
    1787   rdr->b_nano[i] |= 0x02; //set all lsb+1 to save all nanos to file
    1788     else
    1789       for (ptr=strtok(value, ","); ptr; ptr=strtok(NULL, ","))
    1790   if ((i=byte_atob(ptr))>=0)
    1791     rdr->b_nano[i]|= 0x02; //lsb+1 is set when to save nano to file
    1792     return;
    1793   }
    1794   if (!strcmp(token, "cccversion")) {  // cccam version
    1795     if (strlen(value)>sizeof(rdr->cc_version)-1) {
    1796       fprintf(stderr, "cccam config: version too long\n");
    1797       exit(1);
    1798     }
    1799     memset(rdr->cc_version, 0, sizeof(rdr->cc_version));
    1800     cs_strncpy(rdr->cc_version, value, sizeof(rdr->cc_version));
    1801     return;
    1802   }
    1803   if (!strcmp(token, "cccbuild")) {  // cccam build number
    1804     if (strlen(value)>sizeof(rdr->cc_build)-1) {
    1805       fprintf(stderr, "cccam config build number too long\n");
    1806       exit(1);
    1807     }
    1808     memset(rdr->cc_build, 0, sizeof(rdr->cc_build));
    1809     cs_strncpy(rdr->cc_build, value, sizeof(rdr->cc_build));
    1810     return;
    1811   }
    1812   if (!strcmp(token, "cccmaxhop")) {  // cccam max card distance
    1813     rdr->cc_maxhop = atoi(value);
    1814     return;
    1815   }
    1816   if (!strcmp(token, "deprecated")) { rdr->deprecated=atoi(value); return; }
    1817   if (token[0] != '#')
    1818     cs_log( "Warning: keyword '%s' in reader section not recognized",token);
     1795        if (!strcmp(value, "pcsc")) {
     1796            rdr->typ = R_PCSC;
     1797            return;
     1798        }
     1799#endif
     1800
     1801        if (!strcmp(value, "serial")) {
     1802            rdr->typ = R_SERIAL;
     1803            return;
     1804        }
     1805
     1806        if (!strcmp(value, "camd35")) {
     1807            rdr->typ = R_CAMD35;
     1808            return;
     1809        }
     1810
     1811        if (!strcmp(value, "cs378x")) {
     1812            rdr->typ = R_CS378X;
     1813            return;
     1814        }
     1815
     1816        if (!strcmp(value, "cs357x")) {
     1817            rdr->typ = R_CAMD35;
     1818            return;
     1819        }
     1820
     1821        if (!strcmp(value, "gbox")) {
     1822            rdr->typ = R_GBOX;
     1823            return;
     1824        }
     1825
     1826        if (!strcmp(value, "cccam")) {
     1827            rdr->typ = R_CCCAM;
     1828            //strcpy(value, "1");
     1829            //chk_caidtab(value, &rdr->ctab);
     1830            //this is a MAJOR hack for auto multiple caid support (not currently working due to ncd table issue)
     1831            return;
     1832        }
     1833
     1834        if (!strcmp(value, "radegast")) {
     1835            rdr->typ = R_RADEGAST;
     1836            return;
     1837        }
     1838
     1839        if (!strcmp(value, "newcamd") || !strcmp(value, "newcamd525")) {
     1840            rdr->typ = R_NEWCAMD;
     1841            rdr->ncd_proto = NCD_525;
     1842            return;
     1843        }
     1844
     1845        if (!strcmp(value, "newcamd524")) {
     1846            rdr->typ = R_NEWCAMD;
     1847            rdr->ncd_proto = NCD_524;
     1848            return;
     1849        }
     1850
     1851        fprintf(stderr, "WARNING: value '%s' in protocol-line not recognized, assuming MOUSE\n",value);
     1852        rdr->typ = R_MOUSE;
     1853        return;
     1854    }
     1855
     1856    if (!strcmp(token, "loadbalanced")) {
     1857        rdr->loadbalanced = atoi(value);
     1858        return;
     1859    }
     1860
     1861    if (!strcmp(token, "ident")) {
     1862        chk_ftab(value, &rdr->ftab,"reader",rdr->label,"provid");
     1863        return;
     1864    }
     1865
     1866    if (!strcmp(token, "class")) {
     1867        chk_cltab(value, &rdr->cltab);
     1868        return;
     1869    }
     1870
     1871    if (!strcmp(token, "chid")) {
     1872        chk_ftab(value, &rdr->fchid,"reader",rdr->label,"chid");
     1873        return;
     1874    }
     1875
     1876    if (!strcmp(token, "showcls")) {
     1877        rdr->show_cls = atoi(value);
     1878        return;
     1879    }
     1880
     1881    if (!strcmp(token, "maxqlen")) {
     1882        rdr->maxqlen = atoi(value);
     1883        if( rdr->maxqlen < 0 || rdr->maxqlen > CS_MAXQLEN) {
     1884            rdr->maxqlen = CS_MAXQLEN;
     1885        }
     1886        return;
     1887    }
     1888
     1889    if (!strcmp(token, "group"))
     1890    {
     1891        for (ptr = strtok(value, ","); ptr; ptr = strtok(NULL, ",")) {
     1892            int g;
     1893            g = atoi(ptr);
     1894            if ((g>0) && (g<33)) {
     1895                rdr->grp |= (1<<(g-1));
     1896            }
     1897        }
     1898        return;
     1899    }
     1900
     1901    if (!strcmp(token, "emmcache")) {
     1902        for (i = 0, ptr = strtok(value, ","); (i < 3) && (ptr); ptr = strtok(NULL, ","), i++) {
     1903            switch(i)
     1904            {
     1905                case 0:
     1906                    rdr->cachemm = atoi(ptr);
     1907                    break;
     1908
     1909                case 1:
     1910                    rdr->rewritemm = atoi(ptr);
     1911                    break;
     1912
     1913                case 2: rdr->logemm = atoi(ptr);
     1914                    break;
     1915            }
     1916        }
     1917
     1918        if (rdr->rewritemm <= 0) {
     1919            fprintf(stderr, "Notice: Setting EMMCACHE to %i,1,%i instead of %i,%i,%i. ",
     1920                rdr->cachemm, rdr->logemm,
     1921                rdr->cachemm, rdr->rewritemm,
     1922                rdr->logemm);
     1923
     1924            fprintf(stderr, "Zero or negative number of rewrites is silly\n");
     1925            rdr->rewritemm = 1;
     1926        }
     1927        return;
     1928    }
     1929
     1930    if (!strcmp(token, "blocknano")) {
     1931        //wildcard is used
     1932        if (!strcmp(value,"all")) {
     1933            for (i = 0 ; i < 256; i++) {
     1934                rdr->b_nano[i] |= 0x01; //set all lsb's to block all nanos
     1935            }
     1936        }
     1937        else {
     1938            for (ptr = strtok(value, ","); ptr; ptr = strtok(NULL, ",")) {
     1939                if ((i = byte_atob(ptr)) >= 0) {
     1940                    rdr->b_nano[i] |= 0x01; //lsb is set when to block nano
     1941                }
     1942            }
     1943        }
     1944        return;
     1945    }
     1946
     1947    if (!strcmp(token, "savenano")) {
     1948        //wildcard is used
     1949        if (!strcmp(value,"all")) {
     1950            for (i = 0 ; i < 256; i++) {
     1951                rdr->b_nano[i] |= 0x02; //set all lsb+1 to save all nanos to file
     1952            }
     1953        }
     1954        else {
     1955            for (ptr = strtok(value, ","); ptr; ptr = strtok(NULL, ",")) {
     1956                if ((i = byte_atob(ptr)) >= 0) {
     1957                    rdr->b_nano[i] |= 0x02; //lsb+1 is set when to save nano to file
     1958                }
     1959            }
     1960        }
     1961        return;
     1962    }
     1963
     1964    if (!strcmp(token, "cccversion")) {
     1965        // cccam version
     1966        if (strlen(value) > sizeof(rdr->cc_version) - 1) {
     1967            fprintf(stderr, "cccam config: version too long\n");
     1968            exit(1);
     1969        }
     1970        memset(rdr->cc_version, 0, sizeof(rdr->cc_version));
     1971        cs_strncpy(rdr->cc_version, value, sizeof(rdr->cc_version));
     1972        return;
     1973    }
     1974
     1975    if (!strcmp(token, "cccbuild")) {
     1976        // cccam build number
     1977        if (strlen(value) > sizeof(rdr->cc_build) - 1) {
     1978            fprintf(stderr, "cccam config build number too long\n");
     1979            exit(1);
     1980        }
     1981
     1982        memset(rdr->cc_build, 0, sizeof(rdr->cc_build));
     1983        cs_strncpy(rdr->cc_build, value, sizeof(rdr->cc_build));
     1984        return;
     1985    }
     1986
     1987    if (!strcmp(token, "cccmaxhop")) {
     1988        // cccam max card distance
     1989        rdr->cc_maxhop = atoi(value);
     1990        return;
     1991    }
     1992
     1993    if (!strcmp(token, "deprecated")) {
     1994        rdr->deprecated = atoi(value);
     1995        return;
     1996    }
     1997
     1998    if (token[0] != '#')
     1999        cs_log("Warning: keyword '%s' in reader section not recognized",token);
    18192000}
    18202001
Note: See TracChangeset for help on using the changeset viewer.