Changeset 3581
- Timestamp:
- 10/17/10 11:43:45 (13 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/globals.h
r3580 r3581 1080 1080 int dvbapi_boxtype; 1081 1081 int dvbapi_pmtmode; 1082 CAIDTAB dvbapi_prioritytab; 1083 CAIDTAB dvbapi_ignoretab; 1084 CAIDTAB dvbapi_delaytab; 1082 SIDTABBITS dvbapi_sidtabok; // positiv services 1083 SIDTABBITS dvbapi_sidtabno; // negative services 1085 1084 #endif 1086 1085 … … 1347 1346 #ifdef HAVE_DVBAPI 1348 1347 extern void chk_t_dvbapi(char *token, char *value); 1349 void dvbapi_chk_caidtab(char *caidasc, CAIDTAB *ctab);1348 void dvbapi_chk_caidtab(char *caidasc, char type); 1350 1349 #endif 1351 1350 -
trunk/module-dvbapi.c
r3570 r3581 39 39 40 40 struct s_dvbapi_priority *dvbapi_priority=NULL; 41 struct s_client *dvbapi_client=NULL; 41 42 42 43 int dvbapi_set_filter(int demux_id, int api, unsigned short pid, uchar *filt, uchar *mask, int timeout, int pidindex, int count, int type) { … … 321 322 } 322 323 323 void dvbapi_add_ecmpid(int demux_id, ushort caid, ushort ecmpid, ulong provid , int chid) {324 void dvbapi_add_ecmpid(int demux_id, ushort caid, ushort ecmpid, ulong provid) { 324 325 int n,added=0; 325 326 … … 441 442 if (ioctl(ca_fd[i], CA_SET_PID, &ca_pid2)==-1) 442 443 cs_debug("Error Stream SET_PID"); 443 cs_debug("SET PID %#x",demux[demux_id].STREAMpids[num]);444 444 } 445 445 } … … 732 732 cs_ddump(buffer, len, "emm from fd %d:", demux[demux_index].demux_fd[filter_num].fd); 733 733 734 ushort caid = demux[demux_index].ECMpids[demux[demux_index].pidindex].CAID; 735 736 struct s_dvbapi_priority *mapentry = dvbapi_check_prio_match(demux_index, demux[demux_index].pidindex, 'm'); 737 if (mapentry) { 738 cs_debug("Mapping EMM from %04X:%06X to %04X:%06X", caid, provid, mapentry->caid, mapentry->provid); 739 caid = mapentry->caid; 740 provid = mapentry->provid; 741 } 742 734 743 memset(&epg, 0, sizeof(epg)); 735 744 736 epg.caid[0] = (uchar)( demux[demux_index].ECMpids[demux[demux_index].pidindex].CAID>>8);737 epg.caid[1] = (uchar)( demux[demux_index].ECMpids[demux[demux_index].pidindex].CAID);745 epg.caid[0] = (uchar)(caid>>8); 746 epg.caid[1] = (uchar)(caid); 738 747 739 748 cs_debug("setting epg.provid to %06x",provid); … … 747 756 memcpy(epg.emm, buffer, epg.l); 748 757 749 do_emm( cur_client(), &epg);758 do_emm(dvbapi_client, &epg); 750 759 } 751 760 752 761 int dvbapi_read_prio() { 753 762 FILE *fp; 754 char token[128]; 755 uint caid, provid, srvid, chid; 763 char token[128], str1[128]; 756 764 char type; 757 758 const char *cs_prio="oscam.prio"; 765 int i, ret, count=0; 766 767 const char *cs_prio="oscam.dvbapi"; 759 768 760 769 snprintf(token, 127, "%s%s", cs_confdir, cs_prio); … … 766 775 } 767 776 768 int ret;769 770 777 while (fgets(token, sizeof(token), fp)) { 771 if (token[0]=='#') continue; 778 if (token[0]=='#' || token[0]=='/') continue; 779 if (strlen(token)>100) continue; 772 780 773 type=caid=provid=srvid=chid=0; 774 ret = sscanf(token, "%c: %4x:%6x:%4x:%4x", &type, &caid, &provid, &srvid, &chid); 775 776 if (ret>1 && (type == 'P' || type == 'p' || type == 'I' || type == 'i') && caid>0) { 777 cs_log("adding: ret=%d %c %04X:%06X:%04X:%04X", ret, type, caid, provid, srvid, chid); 778 779 struct s_dvbapi_priority *entry = malloc(sizeof(struct s_dvbapi_priority)); 780 entry->caid=caid; 781 entry->provid=provid; 782 entry->srvid=srvid; 783 entry->chid=chid; 784 entry->next=NULL; 785 786 if (type=='P' || type == 'p') 787 entry->type='p'; 788 789 if (type=='I' || type == 'i') 790 entry->type='i'; 791 792 if (!dvbapi_priority) { 793 dvbapi_priority=entry; 794 } else { 795 struct s_dvbapi_priority *p; 796 for (p = dvbapi_priority; p->next != NULL; p = p->next); 797 p->next = entry; 798 } 799 } 800 801 } 781 memset(str1, 0, 128); 782 783 for (i=0;i<(int)strlen(token);i++) { 784 if ((token[i]==':' || token[i]==' ') && token[i+1]==':') { 785 memmove(token+i+2, token+i+1, strlen(token)-i+1); 786 token[i+1]='0'; 787 } 788 if (token[i]=='#' || token[i]=='/') { 789 token[i]='\0'; 790 break; 791 } 792 } 793 794 type = 0; 795 ret = sscanf(trim(token), "%c: %63s %63s", &type, str1, str1+64); 796 type = tolower(type); 797 798 if (ret<1 || (type != 'p' && type != 'i' && type != 'm' && type != 'd')) 799 continue; 800 801 struct s_dvbapi_priority *entry = malloc(sizeof(struct s_dvbapi_priority)); 802 memset(entry, 0, sizeof(struct s_dvbapi_priority)); 803 804 entry->type=type; 805 entry->next=NULL; 806 807 count++; 808 809 uint caid=0, provid=0, srvid=0, ecmpid=0, chid=0; 810 sscanf(str1, "%4x:%6x:%4x:%4x:%4x", &caid, &provid, &srvid, &ecmpid, &chid); 811 812 entry->caid=caid; 813 entry->provid=provid; 814 entry->srvid=srvid; 815 entry->ecmpid=ecmpid; 816 entry->chid=chid; 817 818 uint delay=0, force=0, mapcaid=0, mapprovid=0; 819 switch (type) { 820 case 'd': 821 sscanf(str1+64, "%4d", &delay); 822 entry->delay=delay; 823 break; 824 case 'p': 825 sscanf(str1+64, "%1d", &force); 826 entry->force=force; 827 break; 828 case 'm': 829 sscanf(str1+64, "%4x:%6x", &mapcaid, &mapprovid); 830 entry->mapcaid=mapcaid; 831 entry->mapprovid=mapprovid; 832 break; 833 } 834 835 cs_debug("prio: ret=%d | %c: %04X %06X %04X %04X %04X -> map %04X %06X | prio %d | delay %d", 836 ret, entry->type, entry->caid, entry->provid, entry->srvid, entry->ecmpid, entry->chid, entry->mapcaid, entry->mapprovid, entry->force, entry->delay); 837 838 if (!dvbapi_priority) { 839 dvbapi_priority=entry; 840 } else { 841 struct s_dvbapi_priority *p; 842 for (p = dvbapi_priority; p->next != NULL; p = p->next); 843 p->next = entry; 844 } 845 } 846 847 cs_log("%d entries read from %s", count, cs_prio); 802 848 803 849 fclose(fp); … … 805 851 } 806 852 807 853 struct s_dvbapi_priority *dvbapi_check_prio_match(int demux_id, int pidindex, char type) { 854 struct s_dvbapi_priority *p; 855 int i; 856 857 for (p=dvbapi_priority, i=0; p != NULL; p=p->next, i++) { 858 if (p->type != type) continue; 859 860 if (p->caid && p->caid != demux[demux_id].ECMpids[pidindex].CAID) continue; 861 if (p->provid && p->provid != demux[demux_id].ECMpids[pidindex].PROVID) continue; 862 if (p->srvid && p->srvid != demux[demux_id].ECMpids[pidindex].ECM_PID) continue; 863 if (p->ecmpid && p->ecmpid != demux[demux_id].program_number) continue; 864 if (p->chid && p->chid != 0) continue; 865 866 return p; 867 } 868 return NULL; 869 870 } 808 871 809 872 void dvbapi_resort_ecmpids(int demux_index) { … … 812 875 memset(global_caid_list, 0, sizeof global_caid_list); 813 876 814 for (i=0;i<CS_MAXREADER;i++) { 877 struct s_reader *rdr; 878 for (i=0,rdr=first_reader; rdr ; rdr=rdr->next, i++) { 815 879 for (j=0;j<CS_MAXREADERCAID;j++) { 816 if (r eader[i].caid[j] != 0 && !(reader[i].typ & R_IS_NETWORK)) {880 if (rdr->caid[j] != 0 && !(rdr->typ & R_IS_NETWORK)) { 817 881 if (k+1>=MAX_CAID) break; 818 global_caid_list[k++]=r eader[i].caid[j];882 global_caid_list[k++]=rdr->caid[j]; 819 883 } 820 884 } … … 829 893 if (dvbapi_priority) { 830 894 struct s_dvbapi_priority *p; 831 for (p=dvbapi_priority, i=0; p->next != NULL; p=p->next, i++) { 832 cs_debug("%02d: %c %x %x %x", i, p->type, p->caid, p->provid, p->srvid); 895 for (p=dvbapi_priority, i=0; p != NULL; p=p->next, i++) { 833 896 for (n=0; n<demux[demux_index].ECMpidcount; n++) { 834 if (p->caid==demux[demux_index].ECMpids[n].CAID && p->provid==demux[demux_index].ECMpids[n].PROVID) { 835 if (p->type=='p') { 836 demux[demux_index].ECMpids[n].status = new_status++; 837 cs_debug("[PRIORITIZE PID %d] %04X:%06X (position: %d)", n, demux[demux_index].ECMpids[n].CAID, demux[demux_index].ECMpids[n].PROVID, demux[demux_index].ECMpids[n].status); 838 } else { 839 demux[demux_index].ECMpids[n].status = -1; 840 cs_debug("[IGNORE PID %d] %04X:%06X", n, demux[demux_index].ECMpids[n].CAID, demux[demux_index].ECMpids[n].PROVID); 841 } 897 if (demux[demux_index].ECMpids[n].status != 0) continue; 898 899 if (p->caid && p->caid != demux[demux_index].ECMpids[n].CAID) continue; 900 if (p->provid && p->provid != demux[demux_index].ECMpids[n].PROVID) continue; 901 if (p->srvid && p->srvid != demux[demux_index].ECMpids[n].ECM_PID) continue; 902 if (p->ecmpid && p->ecmpid != demux[demux_index].program_number) continue; 903 if (p->chid && p->chid != 0) continue; 904 905 if (p->type=='p') { 906 demux[demux_index].ECMpids[n].status = new_status++; 907 cs_debug("[PRIORITIZE PID %d] %04X:%06X (position: %d)", n, demux[demux_index].ECMpids[n].CAID, demux[demux_index].ECMpids[n].PROVID, demux[demux_index].ECMpids[n].status); 908 } else if (p->type=='i') { 909 demux[demux_index].ECMpids[n].status = -1; 910 cs_debug("[IGNORE PID %d] %04X:%06X (file)", n, demux[demux_index].ECMpids[n].CAID, demux[demux_index].ECMpids[n].PROVID); 842 911 } 843 912 } … … 846 915 847 916 for (n=0; n<demux[demux_index].ECMpidcount; n++) { 848 for (i=0;i<CS_MAXCAIDTAB;i++) {849 ulong provid = (cfg->dvbapi_ignoretab.cmap[i] << 8 | cfg->dvbapi_ignoretab.mask[i]);850 if (cfg->dvbapi_ignoretab.caid[i] == demux[demux_index].ECMpids[n].CAID && (provid == demux[demux_index].ECMpids[n].PROVID || provid == 0)) {851 demux[demux_index].ECMpids[n].status=-1; //ignore852 cs_debug("[IGNORE PID %d] %04X:%06X", n, demux[demux_index].ECMpids[n].CAID, demux[demux_index].ECMpids[n].PROVID);853 }854 }855 856 for (i=0;i<CS_MAXCAIDTAB;i++) {857 ulong provid = (cfg->dvbapi_prioritytab.cmap[i] << 8 | cfg->dvbapi_prioritytab.mask[i]);858 if (cfg->dvbapi_prioritytab.caid[i] == demux[demux_index].ECMpids[n].CAID && (provid == demux[demux_index].ECMpids[n].PROVID || provid == 0 || demux[demux_index].ECMpids[n].PROVID == 0)) {859 demux[demux_index].ECMpids[n].status = new_status++; //priority860 cs_debug("[PRIORITIZE PID %d] %04X:%06X (position: %d)", n, demux[demux_index].ECMpids[n].CAID, demux[demux_index].ECMpids[n].PROVID, demux[demux_index].ECMpids[n].status);861 }862 }863 864 if (!cur_client()->sidtabok && !cur_client()->sidtabno) continue;865 866 917 int nr; 867 918 SIDTAB *sidtab; … … 873 924 for (nr=0, sidtab=cfg->sidtab; sidtab; sidtab=sidtab->next, nr++) { 874 925 if (sidtab->num_caid | sidtab->num_provid | sidtab->num_srvid) { 875 if ((c ur_client()->sidtabno&((SIDTABBITS)1<<nr)) && (chk_srvid_match(&er, sidtab))) {926 if ((cfg->dvbapi_sidtabno&((SIDTABBITS)1<<nr)) && (chk_srvid_match(&er, sidtab))) { 876 927 demux[demux_index].ECMpids[n].status = -1; //ignore 877 928 cs_debug("[IGNORE PID %d] %04X:%06X (service %s) pos %d", n, demux[demux_index].ECMpids[n].CAID, demux[demux_index].ECMpids[n].PROVID, sidtab->label, nr); 878 929 } 879 if ((c ur_client()->sidtabok&((SIDTABBITS)1<<nr)) && (chk_srvid_match(&er, sidtab))) {930 if ((cfg->dvbapi_sidtabok&((SIDTABBITS)1<<nr)) && (chk_srvid_match(&er, sidtab))) { 880 931 demux[demux_index].ECMpids[n].status = new_status++; //priority 881 932 cs_debug("[PRIORITIZE PID %d] %04X:%06X (service: %s position: %d)", n, demux[demux_index].ECMpids[n].CAID, demux[demux_index].ECMpids[n].PROVID, sidtab->label, demux[demux_index].ECMpids[n].status); … … 920 971 descriptor_ca_pid = ((buffer[j+2+u] & 0x1F) << 8) | buffer[j+2+u+1]; 921 972 descriptor_ca_provider = (buffer[j+2+u+2] << 8) | buffer[j+2+u+3]; 922 dvbapi_add_ecmpid(demux_id, descriptor_ca_system_id, descriptor_ca_pid, descriptor_ca_provider , 0);973 dvbapi_add_ecmpid(demux_id, descriptor_ca_system_id, descriptor_ca_pid, descriptor_ca_provider); 923 974 } 924 975 } else { … … 929 980 descriptor_ca_provider = buffer[j+6] << 16 | (buffer[j+7] << 8| (buffer[j+8])); 930 981 931 dvbapi_add_ecmpid(demux_id, descriptor_ca_system_id, descriptor_ca_pid, descriptor_ca_provider , 0);982 dvbapi_add_ecmpid(demux_id, descriptor_ca_system_id, descriptor_ca_pid, descriptor_ca_provider); 932 983 } 933 984 } … … 1081 1132 if (demux[demux_id].ECMpidcount>0) { 1082 1133 dvbapi_resort_ecmpids(demux_id); 1083 1084 if (demux[demux_id].ECMpidcount>0) 1085 dvbapi_try_next_caid(demux_id); 1134 dvbapi_try_next_caid(demux_id); 1086 1135 } else { 1087 1136 // set channel srvid+caid 1088 cur_client()->last_srvid = demux[demux_id].program_number;1089 cur_client()->last_caid = 0;1137 dvbapi_client->last_srvid = demux[demux_id].program_number; 1138 dvbapi_client->last_caid = 0; 1090 1139 // reset idle-Time 1091 cur_client()->last=time((time_t)0);1140 dvbapi_client->last=time((time_t)0); 1092 1141 } 1093 1142 … … 1179 1228 } 1180 1229 1181 void dvbapi_chk_caidtab(char *caidasc, CAIDTAB *ctab) {1230 void dvbapi_chk_caidtab(char *caidasc, char type) { 1182 1231 char *ptr1, *ptr3; 1183 1232 int i; 1184 1233 1185 for (i=0, ptr1=strtok(caidasc, ","); ( i<CS_MAXCAIDTAB) && (ptr1); ptr1=strtok(NULL, ",")) {1234 for (i=0, ptr1=strtok(caidasc, ","); (ptr1); ptr1=strtok(NULL, ",")) { 1186 1235 unsigned long caid, prov; 1187 1236 if( (ptr3=strchr(trim(ptr1), ':')) ) … … 1191 1240 1192 1241 if (((caid=a2i(ptr1, 2))|(prov=a2i(ptr3, 3)))) { 1193 ctab->caid[i]=caid; 1194 ctab->cmap[i]=prov >> 8; 1195 ctab->mask[i++]=prov; 1242 struct s_dvbapi_priority *entry = malloc(sizeof(struct s_dvbapi_priority)); 1243 memset(entry, 0, sizeof(struct s_dvbapi_priority)); 1244 entry->caid=caid; 1245 1246 if (type=='d') { 1247 char tmp1[5]; 1248 sprintf(tmp1, "%04X", (uint)prov); 1249 int cw_delay = strtol(tmp1, '\0', 10); 1250 entry->delay=cw_delay; 1251 } else 1252 entry->provid=prov; 1253 1254 entry->type=type; 1255 1256 entry->next=NULL; 1257 1258 if (!dvbapi_priority) { 1259 dvbapi_priority=entry; 1260 } else { 1261 struct s_dvbapi_priority *p; 1262 for (p = dvbapi_priority; p->next != NULL; p = p->next); 1263 p->next = entry; 1264 } 1265 1196 1266 } 1197 1267 } … … 1207 1277 int i, pmt_fd; 1208 1278 uchar mbuf[1024]; 1279 1280 if (dvbapi_client != cur_client()) return; 1209 1281 1210 1282 signal=signal; //avoid compiler warnings … … 1362 1434 cs_log("Found %d IRDETO ECM CHIDs", buffer[5]+1); 1363 1435 demux[demux_id].ECMpids[demux[demux_id].demux_fd[filter_num].pidindex].irdeto_numchids = buffer[5]+1; 1436 /* 1437 struct s_dvbapi_priority *chidentry = dvbapi_check_prio_match(demux_index, demux[demux_id].demux_fd[filter_num].pidindex, 'p'); 1438 if (chidentry) 1439 if(chidentry->chid) 1440 demux[demux_id].ECMpids[demux[demux_id].demux_fd[filter_num].pidindex].irdeto_curchid = chidentry->chid; 1441 */ 1364 1442 demux[demux_id].ECMpids[demux[demux_id].demux_fd[filter_num].pidindex].irdeto_curchid = 0; 1365 1443 } … … 1375 1453 demux[demux_id].ECMpids[demux[demux_id].demux_fd[filter_num].pidindex].table = buffer[0]; 1376 1454 1377 int pid = dvbapi_check_array(cfg->dvbapi_prioritytab.caid, CS_MAXCAIDTAB, caid); 1378 if (pid>=0 && provid == 0) { 1379 if (cfg->dvbapi_prioritytab.mask[pid]>0) 1380 provid = (cfg->dvbapi_prioritytab.cmap[pid] << 8 | cfg->dvbapi_prioritytab.mask[pid]); 1381 } 1455 struct s_dvbapi_priority *mapentry = dvbapi_check_prio_match(demux_id, demux[demux_id].demux_fd[filter_num].pidindex, 'm'); 1382 1456 1383 1457 if (!provid) … … 1396 1470 er->prid = provid; 1397 1471 1472 if (mapentry) { 1473 cs_debug("Mapping ECM from %04X:%06X to %04X:%06X", er->caid, er->prid, mapentry->caid, mapentry->provid); 1474 er->caid = mapentry->caid; 1475 er->prid = mapentry->provid; 1476 } 1477 1398 1478 er->l=len; 1399 1479 memcpy(er->ecm, buffer, er->l); 1400 1480 1401 1481 cs_debug("request cw for caid %04X provid %06X srvid %04X pid %04X chid %02X", er->caid, er->prid, er->srvid, er->pid, (caid >> 8) == 0x06 ? buffer[7] : 0); 1402 get_cw( cur_client(), er);1482 get_cw(dvbapi_client, er); 1403 1483 } 1404 1484 … … 1427 1507 client->thread=pthread_self(); 1428 1508 pthread_setspecific(getclient, cli); 1509 1510 dvbapi_client=cli; 1429 1511 1430 1512 int maxpfdsize=(MAX_DEMUX*MAX_FILTER)+MAX_DEMUX+2; … … 1667 1749 } 1668 1750 1669 if (er->rc==4 && cfg->dvbapi_au==1 && dvbapi_check_array(global_caid_list, MAX_CAID, er->caid)>=0 && er->caid!=0x0500 && er->caid!=0x0100) {1670 //local card and not found -> maybe card need emm1671 dvbapi_start_descrambling(i);1672 }1673 1674 1751 if (er->rc>3 && demux[i].pidindex==-1) { 1675 dvbapi_try_next_caid(i); 1676 return; 1752 struct s_dvbapi_priority *forceentry=dvbapi_check_prio_match(i, demux[i].curindex, 'p'); 1753 if (forceentry) { 1754 //not found -> maybe card need emm 1755 if (forceentry->force>0) 1756 dvbapi_start_descrambling(i); 1757 } else { 1758 dvbapi_try_next_caid(i); 1759 return; 1760 } 1677 1761 } 1678 1762 … … 1682 1766 } 1683 1767 1684 int dindex = dvbapi_check_array(cfg->dvbapi_delaytab.caid, CS_MAXCAIDTAB, er->caid); 1685 if (dindex>=0) { 1686 char tmp1[5]; 1687 sprintf(tmp1, "%04X", cfg->dvbapi_delaytab.mask[dindex]); 1688 int cw_delay = strtol(tmp1, '\0', 10); 1689 if (cw_delay<1000) { 1690 cs_debug("wait %d ms", cw_delay); 1691 cs_sleepms(cw_delay); 1768 struct s_dvbapi_priority *delayentry=dvbapi_check_prio_match(i, demux[i].pidindex, 'd'); 1769 if (delayentry) { 1770 if (delayentry->delay<1000) { 1771 cs_debug("wait %d ms", delayentry->delay); 1772 cs_sleepms(delayentry->delay); 1692 1773 } 1693 1774 } … … 1769 1850 1770 1851 cs_debug("request cw for caid %04X provid %06X srvid %04X pid %04X", er->caid, er->prid, er->srvid, er->pid); 1771 get_cw( cur_client(), er);1852 get_cw(dvbapi_client, er); 1772 1853 1773 1854 //openxcas_stop_filter(openxcas_stream_id, OPENXCAS_FILTER_ECM); … … 1781 1862 1782 1863 struct pollfd pfd; 1783 pfd.fd = cur_client()->fd_m2c_c;1864 pfd.fd = dvbapi_client->fd_m2c_c; 1784 1865 pfd.events = POLLIN | POLLPRI; 1785 1866 /* … … 1823 1904 1824 1905 cs_debug("request cw for caid %04X provid %06X srvid %04X pid %04X", er->caid, er->prid, er->srvid, er->pid); 1825 get_cw( cur_client(), er);1906 get_cw(dvbapi_client, er); 1826 1907 1827 1908 if (openxcas_stop_filter_ex(stream_id, seq, openxcas_filter_idx) < 0) … … 1835 1916 1836 1917 chk_pending(tp); 1837 process_client_pipe( cur_client(), NULL, 0);1918 process_client_pipe(dvbapi_client, NULL, 0); 1838 1919 1839 1920 unsigned char mask[12]; … … 1855 1936 client->thread=pthread_self(); 1856 1937 pthread_setspecific(getclient, cli); 1938 dvbapi_client=cli; 1939 1857 1940 struct timeb tp; 1858 1941 cs_ftime(&tp); -
trunk/module-dvbapi.h
r3524 r3581 102 102 ushort srvid; 103 103 ushort chid; 104 ushort ecmpid; 105 ushort mapcaid; 106 ulong mapprovid; 107 int delay; 108 int force; 104 109 struct s_dvbapi_priority *next; 105 106 110 }; 107 111 … … 193 197 int dvbapi_stop_filternum(int demux_index, int num); 194 198 int dvbapi_stop_filter(int demux_index, int type); 199 struct s_dvbapi_priority *dvbapi_check_prio_match(int demux_id, int pidindex, char type); 195 200 196 201 #ifdef WITH_STAPI -
trunk/oscam-config.c
r3580 r3581 1260 1260 } 1261 1261 1262 if(!strcmp(token, "services")) { 1263 chk_services(value, &cfg->dvbapi_sidtabok, &cfg->dvbapi_sidtabno); 1264 return; 1265 } 1266 1267 //obsolete 1262 1268 if (!strcmp(token, "priority")) { 1263 dvbapi_chk_caidtab(value, &cfg->dvbapi_prioritytab);1269 dvbapi_chk_caidtab(value, 'p'); 1264 1270 return; 1265 1271 } 1266 1272 1267 1273 if (!strcmp(token, "ignore")) { 1268 dvbapi_chk_caidtab(value, &cfg->dvbapi_ignoretab);1274 dvbapi_chk_caidtab(value, 'i'); 1269 1275 return; 1270 1276 } 1271 1277 1272 1278 if (!strcmp(token, "cw_delay")) { 1273 dvbapi_chk_caidtab(value, &cfg->dvbapi_delaytab);1279 dvbapi_chk_caidtab(value, 'd'); 1274 1280 return; 1275 1281 } … … 2053 2059 fprintf_conf(f, CONFVARWIDTH, "boxtype", "%s\n", boxdesc[cfg->dvbapi_boxtype]); 2054 2060 fprintf_conf(f, CONFVARWIDTH, "user", "%s\n", cfg->dvbapi_usr); 2055 fprintf_conf(f, CONFVARWIDTH, "pmt_mode", "%d\n", cfg->dvbapi_pmtmode); 2056 2057 ulong provid = 0; 2058 if(cfg->dvbapi_prioritytab.caid[0]) { 2059 fprintf_conf(f, CONFVARWIDTH, "priority", ""); 2060 i = 0; 2061 dot = ""; 2062 while(cfg->dvbapi_prioritytab.caid[i]) { 2063 fprintf(f, "%s%04X", dot, cfg->dvbapi_prioritytab.caid[i]); 2064 if(cfg->dvbapi_prioritytab.mask[i]) { 2065 provid = (cfg->dvbapi_prioritytab.cmap[i] << 8 | cfg->dvbapi_prioritytab.mask[i]); 2066 fprintf(f, ":%06lX", provid); 2067 } 2068 dot = ","; 2069 i++; 2070 } 2071 fprintf(f,"\n"); 2072 } 2073 2074 if(cfg->dvbapi_ignoretab.caid[0]) { 2075 provid = 0; 2076 fprintf_conf(f, CONFVARWIDTH, "ignore", ""); 2077 i = 0; 2078 dot = ""; 2079 while(cfg->dvbapi_ignoretab.caid[i]) { 2080 fprintf(f, "%s%04X", dot, cfg->dvbapi_ignoretab.caid[i]); 2081 if(cfg->dvbapi_ignoretab.mask[i]) { 2082 provid = (cfg->dvbapi_ignoretab.cmap[i] << 8 | cfg->dvbapi_ignoretab.mask[i]); 2083 fprintf(f, ":%06lX", provid); 2084 } 2085 dot = ","; 2086 i++; 2087 } 2088 fprintf(f,"\n"); 2089 } 2090 2091 if(cfg->dvbapi_delaytab.caid[0]) { 2092 fprintf_conf(f, CONFVARWIDTH, "cw_delay", ""); 2093 i = 0; 2094 dot = ""; 2095 while(cfg->dvbapi_delaytab.caid[i]) { 2096 fprintf(f, "%s%04X", dot, cfg->dvbapi_delaytab.caid[i]); 2097 fprintf(f, ":%d", cfg->dvbapi_delaytab.mask[i]); 2098 dot = ","; 2099 i++; 2100 } 2101 fprintf(f,"\n"); 2102 } 2061 fprintf_conf(f, CONFVARWIDTH, "pmt_mode", "%d\n", cfg->dvbapi_pmtmode); 2103 2062 2104 2063 fputc((int)'\n', f); -
trunk/oscam-http.c
r3560 r3581 572 572 int i; 573 573 if (strcmp(getParam(params, "action"),"execute") == 0) { 574 //clear tables575 clear_caidtab(&cfg->dvbapi_prioritytab);576 clear_caidtab(&cfg->dvbapi_ignoretab);577 clear_caidtab(&cfg->dvbapi_delaytab);578 574 for(i = 0; i < (*params).paramcount; ++i) { 579 575 if ((strcmp((*params).params[i], "part")) && (strcmp((*params).params[i], "action"))) { … … 605 601 tpl_printf(vars, 0, "TMP", "PMTMODESELECTED%d", cfg->dvbapi_pmtmode); 606 602 tpl_addVar(vars, 0, tpl_getVar(vars, "TMP"), "selected"); 607 608 i = 0;609 char *dot = "";610 ulong provid = 0;611 while(cfg->dvbapi_prioritytab.caid[i]) {612 tpl_printf(vars, 1, "PRIORITY", "%s%04X", dot, cfg->dvbapi_prioritytab.caid[i]);613 if(cfg->dvbapi_prioritytab.mask[i]){614 provid = (cfg->dvbapi_prioritytab.cmap[i] << 8 | cfg->dvbapi_prioritytab.mask[i]);615 tpl_printf(vars, 1, "PRIORITY", ":%06lX", provid);616 }617 dot = ",";618 i++;619 }620 621 i = 0;622 dot = "";623 provid = 0;624 while(cfg->dvbapi_ignoretab.caid[i]) {625 tpl_printf(vars, 1, "IGNORE", "%s%04X", dot, cfg->dvbapi_ignoretab.caid[i]);626 if(cfg->dvbapi_ignoretab.mask[i]) {627 provid = (cfg->dvbapi_ignoretab.cmap[i] << 8 | cfg->dvbapi_ignoretab.mask[i]);628 tpl_printf(vars, 1, "IGNORE", ":%06lX", provid);629 }630 dot = ",";631 i++;632 }633 634 i = 0;635 dot = "";636 while(cfg->dvbapi_delaytab.caid[i]) {637 tpl_printf(vars, 1, "CWDELAY", "%s%04X", dot, cfg->dvbapi_delaytab.caid[i]);638 tpl_printf(vars, 1, "CWDELAY", ":%d", cfg->dvbapi_delaytab.mask[i]);639 dot = ",";640 i++;641 }642 603 643 604 fputs(tpl_getTpl(vars, "CONFIGDVBAPI"), f); -
trunk/oscam-http.h
r3553 r3581 1152 1152 <option value=\"3\" ##PMTMODESELECTED3##>3 - read PMT file on startup only</option>\n\ 1153 1153 </SELECT></TD></TR>\n\ 1154 <TR><TD>Priority:</TD> <TD><textarea name=\"priority\" cols=\"98\" rows=\"4\" class=\"bt\">##PRIORITY##</textarea></TD></TR>\n\1155 <TR><TD>Ignore:</TD> <TD><textarea name=\"ignore\" cols=\"98\" rows=\"4\" class=\"bt\">##IGNORE##</textarea></TD></TR>\n\1156 <TR><TD>Cw_delay:</TD><TD><input name=\"cw_delay\" type=\"text\" size=\"100\" maxlength=\"200\" value=\"##CWDELAY##\"></TD></TR>\n\1157 1154 <TR><TD colspan=\"2\" align=\"right\"><input type=\"submit\" value=\"OK\" ##BTNDISABLED##>\n</TD></TR>\n\ 1158 1155 </TABLE>\n\
Note:
See TracChangeset
for help on using the changeset viewer.