Changeset 1685
- Timestamp:
- 02/25/10 13:12:21 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/oscam-config.c
r1684 r1685 1062 1062 cfg->usrfile = NULL; 1063 1063 cfg->cwlogdir = NULL; 1064 cfg->ncd_keepalive = 1; 1064 1065 #ifdef CS_ANTICASC 1065 1066 cfg->ac_enabled = 0; … … 1071 1072 strcpy(cfg->ac_logfile, "./oscam_ac.log"); 1072 1073 #endif 1073 cfg->ncd_keepalive=1;1074 1074 sprintf(token, "%s%s", cs_confdir, cs_conf); 1075 1075 if (!(fp = fopen(token, "r"))) { … … 1588 1588 static void chk_reader(char *token, char *value, struct s_reader *rdr) 1589 1589 { 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 1618 1623 #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 1710 1794 #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); 1819 2000 } 1820 2001
Note:
See TracChangeset
for help on using the changeset viewer.