Changeset 1019 for branches/monitor-improvement/oscam-http.c
- Timestamp:
- 01/01/10 13:39:54 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/monitor-improvement/oscam-http.c
r999 r1019 14 14 "2 = all procs, but viewing only, default", 15 15 "3 = all procs, reload of oscam.user possible", 16 "4 = complete access"}; 17 18 static char* uniq[] = { 19 "0 = none", 20 "1 = strict", 21 "2 = per IP"}; 22 16 "4 = complete access" 17 }; 23 18 24 19 void refresh_oscam(enum refreshtypes refreshtype){ … … 623 618 } 624 619 625 void send_oscam_reader( FILE *f) {620 void send_oscam_reader(struct templatevars *vars, FILE *f) { 626 621 int ridx; 627 622 char *ctyp; 628 623 629 fprintf(f,"<BR><BR><TABLE cellspacing=\"0\" cellpadding=\"10\">\r\n");630 fprintf(f,"<TR><TH>Label</TH><TH>Protocol</TH><TH>Action</TH></TR>");631 632 624 for(ridx=0;ridx<CS_MAXREADER;ridx++){ 633 625 if(!reader[ridx].device[0]) break; 634 635 switch(reader[ridx].typ) 636 { 626 switch(reader[ridx].typ){ 637 627 case R_MOUSE : ctyp="mouse"; break; 638 628 case R_INTERNAL: ctyp="intern"; break; … … 651 641 default : ctyp="unknown"; break; 652 642 } 653 654 fprintf(f,"\t<TR><TD>%s</TD><TD>%s</TD><TD><A HREF=\"readerconfig.html?user=%s\">Edit Settings</A></TD></TR>",reader[ridx].label, ctyp, reader[ridx].label); 655 } 656 fprintf(f,"</TABLE>\r\n"); 657 //kill(client[0].pid, SIGUSR1); 658 } 659 660 void send_oscam_reader_config(FILE *f, struct uriparams *params) { 661 int i,ridx; 662 663 fprintf(f,"<BR><BR>\r\n"); 643 tpl_addVar(vars, 0, "CTYP", ctyp); 644 tpl_addVar(vars, 0, "READERNAME", reader[ridx].label); 645 tpl_addVar(vars, 0, "READERNAMEENC", tpl_addTmp(vars, urlencode(reader[ridx].label))); 646 tpl_addVar(vars, 1, "READERLIST", tpl_getTpl(vars, "READERSBIT")); 647 } 648 fputs(tpl_getTpl(vars, "READERS"), f); 649 } 650 651 void send_oscam_reader_config(struct templatevars *vars, FILE *f, struct uriparams *params) { 652 int ridx; 664 653 char *reader_ = getParam(params, "reader"); 665 666 for(ridx=0;ridx<CS_MAXREADER;ridx++){ 667 if (!reader[ridx].device[0]){ 668 fprintf(f,"Reader %s not found", reader_); 669 return ; 670 } 671 if (!strcmp(reader_,reader[ridx].label)) break; 672 } 673 674 /*build form head*/ 675 fprintf(f,"<form action=\"/readerconfig_do.html\" method=\"get\"><input name=\"reader\" type=\"hidden\" value=\"%s\">\r\n", reader[ridx].label); 676 fprintf(f,"<TABLE cellspacing=\"0\">"); 677 fprintf(f,"<TH> </TH><TH>Edit Reader %s </TH>", reader[ridx].label); 678 679 /*build form fields*/ 680 fprintf(f,"<TR><TD>Device:</TD><TD><input name=\"device\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%s", reader[ridx].device); 681 if(reader[ridx].r_port) fprintf(f,",%d",reader[ridx].r_port); 682 if(reader[ridx].l_port) fprintf(f,",%d",reader[ridx].l_port); 683 fprintf(f,"\"></TD></TR>\r\n"); 654 for(ridx = 0; ridx < CS_MAXREADER && strcmp(reader_, reader[ridx].label) != 0; ++ridx); 655 if(ridx == CS_MAXREADER){ 656 tpl_addVar(vars, 0, "MESSAGE", "<BR><BR>Reader not found<BR><BR>"); 657 } else if(strcmp(getParam(params, "action"), "execute") == 0){ 658 tpl_addVar(vars, 0, "MESSAGE", "<BR><BR>Saving not yet implemented<BR><BR>"); 659 refresh_oscam(REFR_READERS); 660 } 661 int i; 662 tpl_addVar(vars, 0, "READERNAME", reader[ridx].label); 663 tpl_addVar(vars, 0, "DEVICE", reader[ridx].device); 664 tpl_addVar(vars, 0, "NCD_KEY", (char *)reader[ridx].ncd_key); 665 tpl_addVar(vars, 0, "PINCODE", reader[ridx].pincode); 666 tpl_addVar(vars, 0, "EMMFILE", (char *)reader[ridx].emmfile); 667 tpl_addVar(vars, 0, "GBOXPWD", (char *)reader[ridx].gbox_pwd); 668 tpl_printf(vars, 0, "INACTIVITYTIMEOUT", "%d", reader[ridx].tcp_ito); 669 tpl_printf(vars, 0, "RECEIVETIMEOUT", "%d", reader[ridx].tcp_rto); 670 tpl_printf(vars, 0, "DISABLESERVERFILTER", "%d", reader[ridx].ncd_disable_server_filt); 671 tpl_printf(vars, 0, "FALLBACK", "%d", reader[ridx].fallback); 672 tpl_printf(vars, 0, "LOGPORT", "%d", reader[ridx].log_port); 673 tpl_printf(vars, 0, "BOXID", "%ld", reader[ridx].boxid); 674 675 if(reader[ridx].r_port) tpl_printf(vars, 0, "R_PORT", "%d", reader[ridx].r_port); 676 if(reader[ridx].l_port) tpl_printf(vars, 0, "L_PORT", "%d", reader[ridx].l_port); 677 684 678 //Group 685 fprintf(f,"<TR><TD>Group:</TD><TD><input name=\"grp\" type=\"text\" size=\"10\" maxlength=\"10\" value=\"");686 679 /*restore the settings format of group from long over bitarray*/ 687 680 char *dot = ""; //flag for comma … … 690 683 for(i = 0; i < 32; i++){ 691 684 if (grpbit[i] == '1'){ 692 fprintf(f, "%s%d", dot, i+1);685 tpl_printf(vars, 1, "GRP", "%s%d", dot, i+1); 693 686 dot = ","; 694 687 } 695 688 } 696 fprintf(f,"\"></TD></TR>\r\n");697 fprintf(f,"<TR><TD>Key:</TD><TD><input name=\"key\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%s\"></TD></TR>\r\n", reader[ridx].ncd_key);698 //fprintf(f,"<TR><TD>Password:</TD><TD><input name=\"password\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%s\"></TD></TR>\r\n", reader[ridx].gbox_pwd);699 fprintf(f,"<TR><TD>Pincode:</TD><TD><input name=\"pincode\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%s\"></TD></TR>\r\n", reader[ridx].pincode);700 fprintf(f,"<TR><TD>Readnano:</TD><TD><input name=\"readnano\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%s\"></TD></TR>\r\n", reader[ridx].emmfile);701 689 702 690 //services … … 706 694 long2bitchar(reader[ridx].sidtabno,sidno); 707 695 struct s_sidtab *sidtab = cfg->sidtab; 708 fprintf(f,"<TR><TD>Services:</TD><TD><TABLE cellspacing=\"0\" class=\"invisible\">");709 int pos=0;710 char *chk;711 696 //build matrix 712 for (; sidtab; sidtab=sidtab->next){ 713 chk=""; 714 if(sidok[pos]=='1') chk="checked"; 715 fprintf(f,"<TR><TD><INPUT NAME=\"services\" TYPE=\"CHECKBOX\" VALUE=\"%s\" %s> %s</TD>", sidtab->label, chk, sidtab->label); 716 chk=""; 717 if(sidno[pos]=='1') chk="checked"; 718 fprintf(f,"<TD><INPUT NAME=\"services\" TYPE=\"CHECKBOX\" VALUE=\"!%s\" %s> !%s</TD></TR>\r\n", sidtab->label, chk, sidtab->label); 719 pos++; 720 } 721 fprintf(f,"</TD></TR></TABLE>\r\n"); 722 723 724 fprintf(f,"<TR><TD>Inactivitytimeout:</TD><TD><input name=\"inactivitytimeout\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%d\"></TD></TR>\r\n", reader[ridx].tcp_ito); 725 fprintf(f,"<TR><TD>Reconnecttimeout:</TD><TD><input name=\"reconnecttimeout\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%d\"></TD></TR>\r\n", reader[ridx].tcp_rto); 726 fprintf(f,"<TR><TD>Disableserverfilter:</TD><TD><input name=\"disableserverfilter\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%d\"></TD></TR>\r\n", reader[ridx].ncd_disable_server_filt); 727 fprintf(f,"<TR><TD>Fallback:</TD><TD><input name=\"fallback\" type=\"text\" size=\"3\" maxlength=\"3\" value=\"%d\"></TD></TR>\r\n", reader[ridx].fallback); 728 //fprintf(f,"<TR><TD>Logport:</TD><TD><input name=\"logport\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%d\"></TD></TR>\r\n", reader[ridx].log_port); 729 //fprintf(f,"<TR><TD>Caid:</TD><TD><input name=\"caid\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%s\"></TD></TR>\r\n", reader[ridx].log_port); 730 /*---------------------CAID----------------------------- 731 -------------------------------------------------------*/ 697 while(sidtab != NULL){ 698 tpl_addVar(vars, 0, "SIDLABEL", sidtab->label); 699 if(sidok[i]=='1') tpl_addVar(vars, 0, "CHECKED", "checked"); 700 else tpl_addVar(vars, 0, "CHECKED", ""); 701 tpl_addVar(vars, 1, "SIDS", tpl_getTpl(vars, "READERCONFIGSIDOKBIT")); 702 if(sidno[i]=='1') tpl_addVar(vars, 0, "CHECKED", "checked"); 703 else tpl_addVar(vars, 0, "CHECKED", ""); 704 tpl_addVar(vars, 1, "SIDS", tpl_getTpl(vars, "READERCONFIGSIDNOBIT")); 705 sidtab=sidtab->next; 706 } 707 708 // CAID 732 709 i = 0; 733 710 CAIDTAB *ctab = &reader[ridx].ctab; 734 735 fprintf(f,"<TR><TD>CAID:</TD><TD><input name=\"caid\" type=\"text\" size=\"50\" maxlength=\"50\" value=\"");736 /*make string from caidtab*/737 if (ctab->caid[i]){738 711 while(ctab->caid[i]) { 739 if (i==0) fprintf(f, "%04X", ctab->caid[i]);740 else fprintf(f, ",%04X", ctab->caid[i]);741 if(ctab->mask[i]) fprintf(f, "&%04X", ctab->mask[i]);712 if (i == 0) tpl_printf(vars, 1, "CAIDS", "%04X", ctab->caid[i]); 713 else tpl_printf(vars, 1, "CAIDS", ",%04X", ctab->caid[i]);; 714 if(ctab->mask[i]) tpl_printf(vars, 1, "CAIDS", "&%04X", ctab->mask[i]); 742 715 i++; 743 716 } 744 } 745 fprintf(f,"\"></TD></TR>\r\n"); 746 747 748 fprintf(f,"<TR><TD>Boxid:</TD><TD><input name=\"boxid\" type=\"text\" size=\"30\" maxlength=\"50\" value=\"%ld\"></TD></TR>\r\n", reader[ridx].boxid); 749 750 751 752 /*build form foot*/ 753 fprintf(f,"</TABLE>\r\n"); 754 fprintf(f,"<input type=\"submit\" value=\"OK\"></form>\r\n"); 755 756 fprintf(f,"<BR><BR>Reader not yet implemented - Nothing changes on click<BR><BR>"); 757 } 758 759 void send_oscam_reader_config_do(FILE *f, struct uriparams *params) { 760 int ridx; 761 762 fprintf(f,"<BR><BR>\r\n"); 763 char *reader_ = getParam(params, "reader"); 764 765 for(ridx=0;ridx<CS_MAXREADER;ridx++){ 766 if (!reader[ridx].device[0]){ 767 fprintf(f,"Reader %s not found", reader_); 768 return ; 769 } 770 if (!strcmp(reader_,reader[ridx].label)) break; 771 } 772 773 fprintf(f,"Reader: %s - Nothing changed", reader[ridx].label); 774 fprintf(f,"<BR><BR>Reader not yet implemented<BR><BR>"); 775 refresh_oscam(REFR_READERS); 776 } 777 778 void send_oscam_user_config_add(FILE *f, struct uriparams *params) { 779 struct s_auth *ptr; 780 struct s_auth *account; 781 int i, accidx=0; 782 783 char *newuser = getParam(params, "user"); 784 785 if (strlen(newuser) > 0) { 786 787 for (account=cfg->account; (account) ; account=account->next){ 788 //account already exist - show config for this account 789 if(!strcmp(newuser, account->usr)){ 790 (*params).params[0] = "user"; 791 (*params).values[0] = newuser; 792 (*params).paramcount = 1; 793 send_oscam_user_config(f, params); 794 return; 795 } 796 //last account reached 797 if(!account->next) break; 798 accidx++; 799 } 800 801 if (!(ptr=malloc(sizeof(struct s_auth)))) 802 { 717 fputs(tpl_getTpl(vars, "READERCONFIG"), f); 718 } 719 720 void send_oscam_user_config_edit(struct templatevars *vars, FILE *f, struct uriparams *params){ 721 struct s_auth *account, *ptr; 722 char *user = getParam(params, "user"); 723 int i, j; 724 725 for (account = cfg->account; account != NULL && strcmp(user, account->usr) != 0; account = account->next); 726 727 // Create a new user if it doesn't yet 728 if (account == NULL){ 729 if (!(account=malloc(sizeof(struct s_auth)))){ 803 730 cs_log("Error allocating memory (errno=%d)", errno); 804 731 return; 805 732 } 806 if (account) 807 account->next=ptr; 808 else 809 cfg->account=ptr;810 account=ptr; 733 if(cfg->account == NULL) cfg->account = account; 734 else { 735 for (ptr = cfg->account; ptr != NULL && ptr->next != NULL; ptr = ptr->next); 736 ptr->next = account; 737 } 811 738 memset(account, 0, sizeof(struct s_auth)); 812 strncpy((char *)account->usr, newuser, sizeof(account->usr)-1);739 strncpy((char *)account->usr, user, sizeof(account->usr)-1); 813 740 account->au=(-1); 814 741 account->monlvl=cfg->mon_level; … … 816 743 for (i=1; i<CS_MAXCAIDTAB; account->ctab.mask[i++]=0xffff); 817 744 for (i=1; i<CS_MAXTUNTAB; account->ttab.bt_srvid[i++]=0x0000); 818 accidx++;819 745 #ifdef CS_ANTICASC 820 746 account->ac_users=cfg->ac_users; 821 747 account->ac_penalty=cfg->ac_penalty; 822 account->ac_idx = accidx;748 account->ac_idx = account->ac_idx + 1; 823 749 #endif 750 tpl_addVar(vars, 1, "MESSAGE", "<b>New user has been added with default settings</b><BR>"); 751 if (write_userdb()==0) refresh_oscam(REFR_ACCOUNTS); 752 else tpl_addVar(vars, 1, "MESSAGE", "<b>Writing configuration to disk failed!</b><BR>"); 753 // need to reget account as writing to disk changes account! 754 for (account = cfg->account; account != NULL && strcmp(user, account->usr) != 0; account = account->next); 824 755 } 825 (*params).params[0] = "user"; 826 (*params).values[0] = newuser; 827 (*params).paramcount = 1; 828 send_oscam_user_config(f, params); 829 830 } 831 832 void send_oscam_user_config_delete(FILE *f, struct uriparams *params) { 833 834 int found = 0; 835 struct s_auth *account, *account2; 836 837 char *user = getParam(params, "user"); 838 839 account=cfg->account; 840 if(strcmp(account->usr, user) == 0){ 841 cfg->account = account->next; 842 free(account); 843 found = 1; 844 } else if (account->next != NULL){ 845 do{ 846 if(strcmp(account->next->usr, user) == 0){ 847 account2 = account->next; 848 account->next = account2->next; 849 free(account2); 850 found = 1; 851 break; 852 } 853 } while ((account = account->next) && (account->next != NULL)); 854 } 855 856 if (found>0){ 857 if (write_userdb()==0) 858 refresh_oscam(REFR_ACCOUNTS); 859 else 860 fprintf(f,"<B>Write Config failed</B><BR><BR>\r\n"); 861 } 862 else 863 fprintf(f,"<B>User not found</B><BR><BR>\r\n"); 864 (*params).paramcount = 0; 865 send_oscam_user_config(f, params); 866 } 867 868 void send_oscam_user_config_do(FILE *f, struct uriparams *params) { 869 870 struct s_auth *account; 871 int i; 756 757 if(strcmp(getParam(params, "action"), "execute") == 0){ 872 758 char servicelabels[255]=""; 873 874 //find username within params875 char *user = getParam(params, "user");876 877 //identfy useraccount878 for (account=cfg->account; (account) ; account=account->next){879 if(!strcmp(user, account->usr))880 break;881 }882 883 759 //clear group 884 760 account->grp = 0; 885 761 886 //fprintf(f,"<BR><BR>\r\n");887 888 762 for(i=0;i<(*params).paramcount;i++){ 889 763 if ((strcmp((*params).params[i], "action")) && (strcmp((*params).params[i], "user"))){ 890 //fprintf(f,"%s = %s<BR>\r\n", (*params).params[i], (*params).values[i]);891 764 if (!strcmp((*params).params[i], "services")) 892 765 sprintf(servicelabels + strlen(servicelabels), "%s,", (*params).values[i]); … … 894 767 chk_account((*params).params[i], (*params).values[i], account); 895 768 } 896 // else if (!strcmp((*params).params[i], "user")) 897 // fprintf(f,"<B>User %s is reconfigured as follow</B><BR><BR>\r\n", (*params).values[i]); 898 } 899 769 } 900 770 chk_account("services", servicelabels, account); 901 902 if (write_userdb()==0) 903 refresh_oscam(REFR_ACCOUNTS); 904 else 905 fprintf(f,"<B>Write Config failed</B><BR><BR>\r\n"); 906 (*params).paramcount = 0; 907 send_oscam_user_config(f, params); 908 } 909 910 void send_oscam_user_config(FILE *f, struct uriparams *params) { 911 912 int i; 913 struct s_auth *account; 914 char *action = getParam(params, "action"); 915 if ((*params).paramcount>0){ 916 if (!strcmp(action, "execute")) { 917 send_oscam_user_config_do(f, params); 918 return; 919 } else if (!strcmp(action, "adduser")) { 920 send_oscam_user_config_add(f, params); 921 return; 922 } else if (!strcmp(action, "delete")) { 923 send_oscam_user_config_delete(f, params); 924 return; 925 } 926 } else { 927 /* No Parameters given --> list accounts*/ 928 char *status = "offline"; 929 char *expired = ""; 930 char *classname="offline"; 931 char *lastchan=" "; 932 time_t now = time((time_t)0); 933 int isec=0; 934 935 fprintf(f,"<BR><BR><TABLE cellspacing=\"0\" cellpadding=\"10\">\r\n"); 936 fprintf(f,"<TR><TH>Label</TH>\r\n\t<TH>Status</TH>\r\n\t<TH>Last Channel</TH>\r\n\t<TH>Idle (Sec)</TH>\r\n\t<TH colspan=\"2\" align=\"center\">Action</TH>\r\n</TR>"); 937 for (account=cfg->account; (account) ; account=account->next){ 938 expired = ""; classname="offline"; 939 if(account->expirationdate && account->expirationdate<time(NULL)){ 940 expired = " (expired)"; 941 classname = "expired"; 942 } 943 status="offline"; 944 945 //search account in active clients 946 for (i=0; i<CS_MAXPID; i++) 947 if (!strcmp(client[i].usr, account->usr)){ 948 //30 secs without ecm is offline 949 if ((now - client[i].lastecm) < 30){ 950 status = "<b>online</b>";classname="online"; 951 lastchan = monitor_get_srvname(client[i].last_srvid); 952 isec = now - client[i].last; 953 } 954 } 955 fprintf(f,"<TR class=\"%s\">\r\n", classname); 956 fprintf(f,"\t<TD>%s</TD>\r\n\t<TD>%s%s</TD>\r\n\t<TD>%s</TD>\r\n\t<TD>%d</TD>\r\n\t<TD><A HREF=\"userconfig.html?user=%s\">Edit Settings</A></TD>\r\n",account->usr, status, expired, lastchan, isec, account->usr); 957 fprintf(f,"\t<TD><A HREF=\"userconfig.html?user=%s&action=delete\">Delete User</A></TD>\r\n",account->usr); 958 fprintf(f,"</TR>\r\n"); 959 isec = 0; 960 lastchan = " "; 961 } 962 fprintf(f,"<TR>\r\n"); 963 fprintf(f,"\t<FORM action=\"/userconfig.html\" method=\"get\">\r\n"); 964 fprintf(f,"\t<TD>New User:</TD>\r\n"); 965 fprintf(f,"\t<TD colspan=\"2\"><input name=\"user\" type=\"text\"></TD>\r\n"); 966 fprintf(f,"\t<input name=\"action\" type=\"hidden\" value=\"adduser\">\r\n"); 967 fprintf(f,"\t<TD colspan=\"3\" align=\"center\"><input type=\"submit\" value=\"Add User\"></TD>\r\n"); 968 fprintf(f,"\t</FORM>\r\n"); 969 fprintf(f,"<TR>\r\n"); 970 fprintf(f,"</TABLE>\r\n"); 971 972 return; 973 } 974 975 fprintf(f,"<BR><BR>\r\n"); 976 977 char *user = getParam(params, "user"); 978 979 /*identfy useraccount*/ 980 for (account=cfg->account; (account) ; account=account->next){ 981 if(!strcmp(user, account->usr)) 982 break; 983 } 984 985 fprintf(f,"<form action=\"/userconfig.html\" method=\"get\">"); 986 fprintf(f,"<input name=\"user\" type=\"hidden\" value=\"%s\">\r\n", account->usr); 987 fprintf(f,"<input name=\"action\" type=\"hidden\" value=\"execute\">\r\n"); 988 fprintf(f,"<TABLE cellspacing=\"0\">"); 989 fprintf(f,"<TH> </TH><TH>Edit User %s </TH>", account->usr); 990 //Password 991 fprintf(f,"<TR><TD>Password:</TD><TD><input name=\"pwd\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"%s\"></TD></TR>\r\n", account->pwd); 771 tpl_addVar(vars, 1, "MESSAGE", "<B>Settings updated</B><BR><BR>"); 772 if (write_userdb()==0) refresh_oscam(REFR_ACCOUNTS); 773 else tpl_addVar(vars, 1, "MESSAGE", "<B>Write Config failed</B><BR><BR>"); 774 } 775 776 tpl_addVar(vars, 0, "USERNAME", account->usr); 777 tpl_addVar(vars, 0, "PASSWORD", account->pwd); 778 992 779 //Expirationdate 993 780 struct tm * timeinfo = localtime (&account->expirationdate); 994 781 char buf [80]; 995 782 strftime (buf,80,"%Y-%m-%d",timeinfo); 996 if(strcmp(buf,"1970-01-01")) 997 fprintf(f,"<TR><TD>Exp. Date:</TD><TD><input name=\"expdate\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"%s\"></TD></TR>\r\n",buf); 998 else 999 fprintf(f,"<TR><TD>Exp. Date:</TD><TD><input name=\"expdate\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"\"></TD></TR>\r\n"); 783 if(strcmp(buf,"1970-01-01")) tpl_addVar(vars, 0, "EXPDATE", buf); 1000 784 //Group 1001 fprintf(f,"<TR><TD>Group:</TD><TD><input name=\"group\" type=\"text\" size=\"10\" maxlength=\"10\" value=\"");1002 785 /*restore the settings format of group from long over bitarray*/ 1003 786 char *dot = ""; //flag for comma … … 1006 789 for(i = 0; i < 32; i++){ 1007 790 if (grpbit[i] == '1'){ 1008 fprintf(f, "%s%d", dot, i+1);791 tpl_printf(vars, 1, "GROUPS", "%s%d", dot, i+1); 1009 792 dot = ","; 1010 793 } 1011 794 } 1012 fprintf(f,"\"></TD></TR>\r\n");1013 795 //Hostname 1014 if (strlen((char *)account->dyndns)>0)1015 fprintf(f,"<TR><TD>Hostname:</TD><TD><input name=\"hostname\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"%s\"></TD></TR>\r\n", account->dyndns);796 tpl_addVar(vars, 0, "DYNDNS", (char *)account->dyndns); 797 1016 798 //Uniq 1017 fprintf(f,"<TR><TD>Uniq:</TD><TD><select name=\"uniq\" >\r\n"); 1018 for(i = 0; i < 3; i++){ 1019 if(i == account->uniq) 1020 fprintf(f,"\t<option value=\"%d\" selected>%s</option>\r\n", i, uniq[i]); 1021 else 1022 fprintf(f,"\t<option value=\"%d\">%s</option>\r\n", i, uniq[i]); 1023 } 1024 fprintf(f,"</SELECT></TD></TR>\r\n"); 799 tpl_printf(vars, 0, "TMP", "UNIQSELECTED%d", account->uniq); 800 tpl_addVar(vars, 0, tpl_getVar(vars, "TMP"), "selected"); 801 1025 802 //Sleep 1026 if(!account->tosleep) 1027 fprintf(f,"<TR><TD>Sleep:</TD><TD><input name=\"sleep\" type=\"text\" size=\"4\" maxlength=\"4\" value=\"0\"></TD></TR>\r\n"); 1028 else 1029 fprintf(f,"<TR><TD>Sleep:</TD><TD><input name=\"sleep\" type=\"text\" size=\"4\" maxlength=\"4\" value=\"%d\"></TD></TR>\r\n", account->tosleep); 803 if(!account->tosleep) tpl_addVar(vars, 0, "SLEEP", "0"); 804 else tpl_printf(vars, 0, "SLEEP", "%d", account->tosleep); 1030 805 //Monlevel selector 1031 fprintf(f,"<TR><TD>Monlevel:</TD><TD><select name=\"monlevel\" >\r\n"); 1032 for(i = 0; i < 5; i++){ 1033 if(i == account->monlvl) 1034 fprintf(f,"\t<option value=\"%d\" selected>%s</option>\r\n", i, monlevel[i]); 1035 else 1036 fprintf(f,"\t<option value=\"%d\">%s</option>\r\n", i, monlevel[i]); 1037 } 1038 fprintf(f,"</select></TD></TR>\r\n"); 806 tpl_printf(vars, 0, "TMP", "MONSELECTED%d", account->monlvl); 807 tpl_addVar(vars, 0, tpl_getVar(vars, "TMP"), "selected"); 808 1039 809 //AU Selector 1040 fprintf(f,"<TR><TD>AU:</TD><TD><select name=\"au\" >\r\n"); 1041 if (!account->au) 1042 fprintf(f,"\t<option value=\" \" selected>none</option>\r\n"); 1043 else 1044 fprintf(f,"\t<option value=\" \">none</option>\r\n"); 1045 1046 if (account->autoau == 1) 1047 fprintf(f,"\t<option value=\"1\" selected>auto</option>\r\n"); 1048 else 1049 fprintf(f,"\t<option value=\"1\">auto</option>\r\n"); 1050 810 if (!account->au) tpl_addVar(vars, 0, "AUSELECTED", "selected"); 811 if (account->autoau == 1) tpl_addVar(vars, 0, "AUTOAUSELECTED", "selected"); 1051 812 int ridx; 1052 813 for (ridx=0; ridx<CS_MAXREADER; ridx++){ 1053 814 if(!reader[ridx].device[0]) break; 1054 1055 if (account->au == ridx) 1056 fprintf(f,"\t<option value=\"%s\" selected>%s</option>\r\n", reader[ridx].label, reader[ridx].label); 1057 else 1058 fprintf(f,"\t<option value=\"%s\">%s</option>\r\n", reader[ridx].label, reader[ridx].label); 1059 } 1060 fprintf(f,"</select></TD></TR>\r\n"); 1061 1062 /*---------------------SERVICES------------------------- 1063 -------------------------------------------------------*/ 815 tpl_addVar(vars, 0, "READERNAME", reader[ridx].label); 816 if (account->au == ridx) tpl_addVar(vars, 0, "SELECTED", "selected"); 817 else tpl_addVar(vars, 0, "SELECTED", ""); 818 tpl_addVar(vars, 1, "RDROPTION", tpl_getTpl(vars, "USEREDITRDRSELECTED")); 819 } 820 821 /* SERVICES */ 1064 822 //services - first we have to move the long sidtabok/sidtabno to a binary array 1065 823 char sidok[33]; … … 1068 826 long2bitchar(account->sidtabno,sidno); 1069 827 struct s_sidtab *sidtab = cfg->sidtab; 1070 fprintf(f,"<TR><TD>Services:</TD><TD><TABLE cellspacing=\"0\" class=\"invisible\">");1071 int pos=0;1072 char *chk;1073 828 //build matrix 1074 for (; sidtab; sidtab=sidtab->next){ 1075 chk=""; 1076 if(sidok[pos]=='1') chk="checked"; 1077 fprintf(f,"<TR><TD><INPUT NAME=\"services\" TYPE=\"CHECKBOX\" VALUE=\"%s\" %s> %s</TD>", sidtab->label, chk, sidtab->label); 1078 chk=""; 1079 if(sidno[pos]=='1') chk="checked"; 1080 fprintf(f,"<TD><INPUT NAME=\"services\" TYPE=\"CHECKBOX\" VALUE=\"!%s\" %s> !%s</TD></TR>\r\n", sidtab->label, chk, sidtab->label); 1081 pos++; 1082 } 1083 fprintf(f,"</TD></TR></TABLE>\r\n"); 1084 1085 /*---------------------CAID----------------------------- 1086 -------------------------------------------------------*/ 829 while(sidtab != NULL){ 830 tpl_addVar(vars, 0, "SIDLABEL", sidtab->label); 831 if(sidok[i]=='1') tpl_addVar(vars, 0, "CHECKED", "checked"); 832 else tpl_addVar(vars, 0, "CHECKED", ""); 833 tpl_addVar(vars, 1, "SIDS", tpl_getTpl(vars, "USEREDITSIDOKBIT")); 834 if(sidno[i]=='1') tpl_addVar(vars, 0, "CHECKED", "checked"); 835 else tpl_addVar(vars, 0, "CHECKED", ""); 836 tpl_addVar(vars, 1, "SIDS", tpl_getTpl(vars, "USEREDITSIDNOBIT")); 837 sidtab=sidtab->next; 838 } 839 /* CAID */ 840 dot=""; 1087 841 i = 0; 1088 842 CAIDTAB *ctab = &account->ctab; 1089 1090 fprintf(f,"<TR><TD>CAID:</TD><TD><input name=\"caid\" type=\"text\" size=\"50\" maxlength=\"50\" value=\"");1091 /*make string from caidtab*/1092 if (ctab->caid[i]){1093 843 while(ctab->caid[i]) { 1094 if (i==0) fprintf(f, "%04X", ctab->caid[i]); 1095 else fprintf(f, ",%04X", ctab->caid[i]); 1096 if(ctab->mask[i]) fprintf(f, "&%04X", ctab->mask[i]); 1097 i++; 1098 } 1099 } 1100 fprintf(f,"\"></TD></TR>\r\n"); 844 tpl_printf(vars, 1, "CAIDS", "%s%04X", dot, ctab->caid[i]); 845 if(ctab->mask[i]) tpl_printf(vars, 1, "CAIDS", "&%04X", ctab->mask[i]); 846 if(ctab->cmap[i]) tpl_printf(vars, 1, "CAIDS", ":%04X", ctab->cmap[i]); 847 dot=","; 848 ++i; 849 } 1101 850 1102 851 /*IDENT*/ 1103 fprintf(f,"<TR><TD>Ident:</TD><TD><input name=\"ident\" type=\"text\" size=\"50\" maxlength=\"50\" value=\"");1104 1105 int j;1106 852 dot=""; 1107 853 FTAB *ftab = &account->ftab; 1108 for (i=0;i<ftab->nfilts;i++){ 1109 fprintf(f, "%s%04X", dot, ftab->filts[i].caid); 1110 1111 for (j=0;j<ftab->filts[i].nprids;j++) 1112 fprintf(f, ":%06lX", ftab->filts[i].prids[j]); 1113 854 for (i = 0; i < ftab->nfilts; ++i){ 855 tpl_printf(vars, 1, "IDENTS", "%s%04X", dot, ftab->filts[i].caid); 856 dot=":"; 857 for (j = 0; j < ftab->filts[i].nprids; ++j) { 858 tpl_printf(vars, 1, "IDENTS", "%s%06lX", dot, ftab->filts[i].prids[j]); 859 dot=","; 860 } 1114 861 dot=";"; 1115 862 } 1116 fprintf(f,"\"></TD></TR>\r\n");1117 863 1118 864 /*Betatunnel*/ 865 dot=""; 1119 866 i = 0; 1120 867 TUNTAB *ttab = &account->ttab; 1121 1122 fprintf(f,"<TR><TD>Betatunnel:</TD><TD><input name=\"betatunnel\" type=\"text\" size=\"50\" maxlength=\"50\" value=\"");1123 /*make string from Betatunneltab*/1124 if (ttab->bt_caidfrom[i]) {1125 868 while(ttab->bt_caidfrom[i]) { 1126 if (i==0) fprintf(f, "%04X", ttab->bt_caidfrom[i]); 1127 else fprintf(f, ",%04X", ttab->bt_caidfrom[i]); 1128 if(ttab->bt_caidto[i]) fprintf(f, ".%04X", ttab->bt_caidto[i]); 1129 if(ttab->bt_srvid[i]) fprintf(f, ":%04X", ttab->bt_srvid[i]); 1130 i++; 1131 } 1132 } 1133 fprintf(f,"\"></TD></TR>\r\n"); 869 tpl_printf(vars, 1, "BETATUNNELS", "%s%04X", dot, ttab->bt_caidfrom[i]); 870 if(ttab->bt_srvid[i]) tpl_printf(vars, 1, "BETATUNNELS", ".%04X", ttab->bt_srvid[i]); 871 if(ttab->bt_caidto[i]) tpl_printf(vars, 1, "BETATUNNELS", ":%04X", ttab->bt_caidto[i]); 872 dot=","; 873 ++i; 874 } 1134 875 1135 876 #ifdef CS_ANTICASC 1136 fprintf(f,"<TR><TD>Anticascading numusers:</TD><TD><input name=\"numusers\" type=\"text\" size=\"3\" maxlength=\"3\" value=\"%d\"></TD></TR>\r\n", account->ac_users);1137 fprintf(f,"<TR><TD>Anticascading penalty:</TD><TD><input name=\"penalty\" type=\"text\" size=\"3\" maxlength=\"3\" value=\"%d\"></TD></TR>\r\n", account->ac_penalty);877 tpl_printf(vars, 0, "AC_USERS", "%d", account->ac_users); 878 tpl_printf(vars, 0, "AC_PENALTY", "%d", account->ac_penalty); 1138 879 #endif 1139 fprintf(f,"<TR><TD> </TD><TD align=\"right\"><input type=\"submit\" value=\"Save Settings\" title=\"Save settings and reload users\"></TD></TR>\r\n"); 1140 fprintf(f,"</TABLE>\r\n"); 1141 fprintf(f,"</form>\r\n"); 1142 } 1143 1144 void send_oscam_entitlement(FILE *f, struct uriparams *params) { 1145 1146 /*build entitlements from reader init history*/ 880 fputs(tpl_getTpl(vars, "USEREDIT"), f); 881 } 882 883 void send_oscam_user_config(struct templatevars *vars, FILE *f, struct uriparams *params) { 884 struct s_auth *account, *account2; 885 char *user = getParam(params, "user"); 886 int i, found = 0; 887 888 if (strcmp(getParam(params, "action"), "delete") == 0){ 889 account=cfg->account; 890 if(strcmp(account->usr, user) == 0){ 891 cfg->account = account->next; 892 free(account); 893 found = 1; 894 } else if (account->next != NULL){ 895 do{ 896 if(strcmp(account->next->usr, user) == 0){ 897 account2 = account->next; 898 account->next = account2->next; 899 free(account2); 900 found = 1; 901 break; 902 } 903 } while ((account = account->next) && (account->next != NULL)); 904 } 905 906 if (found > 0){ 907 tpl_addVar(vars, 1, "MESSAGE", "<b>Account has been deleted!</b><BR>"); 908 if (write_userdb()==0) refresh_oscam(REFR_ACCOUNTS); 909 else tpl_addVar(vars, 1, "MESSAGE", "<b>Writing configuration to disk failed!</b><BR>"); 910 } else tpl_addVar(vars, 1, "MESSAGE", "<b>Sorry but the specified user doesn't exist. No deletion will be made!</b><BR>"); 911 } 912 /* List accounts*/ 913 char *status = "offline"; 914 char *expired = ""; 915 char *classname="offline"; 916 char *lastchan=" "; 917 time_t now = time((time_t)0); 918 int isec=0; 919 920 for (account=cfg->account; (account) ; account=account->next){ 921 expired = ""; classname="offline"; 922 if(account->expirationdate && account->expirationdate<time(NULL)){ 923 expired = " (expired)"; 924 classname = "expired"; 925 } 926 status="offline"; 927 928 //search account in active clients 929 for (i=0; i<CS_MAXPID; i++) 930 if (!strcmp(client[i].usr, account->usr)){ 931 //30 secs without ecm is offline 932 if ((now - client[i].lastecm) < 30){ 933 status = "<b>online</b>";classname="online"; 934 lastchan = monitor_get_srvname(client[i].last_srvid); 935 isec = now - client[i].last; 936 } 937 } 938 tpl_addVar(vars, 0, "CLASSNAME", classname); 939 tpl_addVar(vars, 0, "USER", account->usr); 940 tpl_addVar(vars, 0, "USERENC", tpl_addTmp(vars, urlencode(account->usr))); 941 tpl_addVar(vars, 0, "STATUS", status); 942 tpl_addVar(vars, 0, "EXPIRED", expired); 943 tpl_addVar(vars, 0, "LASTCHANNEL", lastchan); 944 tpl_printf(vars, 0, "IDLESECS", "%d", isec); 945 tpl_addVar(vars, 1, "USERCONFIGS", tpl_getTpl(vars, "USERCONFIGLISTBIT")); 946 isec = 0; 947 lastchan = " "; 948 } 949 fputs(tpl_getTpl(vars, "USERCONFIGLIST"), f); 950 } 951 952 void send_oscam_entitlement(struct templatevars *vars, FILE *f, struct uriparams *params) { 953 /* build entitlements from reader init history */ 1147 954 int ridx; 1148 char *p, *ctyp; 1149 1150 if((*params).paramcount==0){ 1151 fprintf(f, "<BR><BR>\r\n"); 1152 fprintf(f,"<TABLE cellspacing=\"0\">"); 1153 fprintf(f,"<TR><TH>Reader</TH><TH>Protocol</TH><TH> </TH></TR>"); 1154 1155 for (ridx=0; ridx<CS_MAXREADER; ridx++){ 1156 1157 switch(reader[ridx].typ) 1158 { 1159 case R_MOUSE : ctyp="mouse"; break; 1160 case R_INTERNAL: ctyp="intern"; break; 1161 case R_SMART : ctyp="smartreader"; break; 1162 case R_CAMD35 : ctyp="camd 3.5x";break; 1163 case R_CAMD33 : ctyp="camd 3.3x";break; 1164 case R_NEWCAMD : ctyp="newcamd"; break; 1165 case R_RADEGAST: ctyp="radegast"; break; 1166 case R_SERIAL : ctyp="serial"; break; 1167 case R_GBOX : ctyp="gbox"; break; 1168 #ifdef HAVE_PCSC 1169 case R_PCSC : ctyp="pcsc"; break; 955 char *p; 956 char *reader_ = getParam(params, "reader"); 957 if(strlen(reader_) > 0){ 958 #ifdef CS_RDR_INIT_HIST 959 for (ridx=0; ridx<CS_MAXREADER && strcmp(reader_, reader[ridx].label) != 0; ridx++); 960 if(ridx<CS_MAXREADER){ 961 for (p=(char *)reader[ridx].init_history; *p; p+=strlen(p)+1){ 962 tpl_printf(vars, 1, "LOGHISTORY", "%s<BR>\n", p); 963 } 964 } 965 #else 966 tpl_addVar(vars, 0, "LOGHISTORY", "The flag CS_RDR_INIT_HIST is not set in your binary<BR>\n"); 1170 967 #endif 1171 case R_CCCAM : ctyp="cccam"; break; 1172 case R_CS378X : ctyp="cs378x"; break; 1173 default : ctyp="unknown"; break; 1174 } 1175 1176 if(!reader[ridx].device[0]) break; 1177 fprintf(f, "\t<TR><TD>%s</TD><TD>%s</TD><TD><A HREF=\"entitlements.html?user=%s\">Check</A></TD></TR>\r\n", reader[ridx].label, ctyp, reader[ridx].label); 1178 } 1179 fprintf(f, "</TABLE>\r\n"); 1180 } 1181 else { 1182 1183 char *user = getParam(params, "user"); 1184 1185 fprintf(f, "<BR><BR>Entitlement for %s<BR><BR>\r\n", user); 1186 1187 for (ridx=0; ridx<CS_MAXREADER; ridx++) 1188 if (!strcmp(user, reader[ridx].label)) break; 1189 1190 fprintf(f, "<DIV class=\"log\">"); 1191 #ifdef CS_RDR_INIT_HIST 1192 1193 for (p=(char *)reader[ridx].init_history; *p; p+=strlen(p)+1) 1194 fprintf(f, "%s<BR>\n",p); 1195 1196 #else 1197 1198 fprintf(f, "the flag CS_RDR_INIT_HIST is not set in your binary<BR>\n"); 1199 1200 #endif 1201 1202 fprintf(f, "</DIV>"); 1203 } 1204 1205 } 1206 1207 void monitor_client_status(struct templatevars *vars, char id, int i){ 1208 if (client[i].pid) { 968 tpl_addVar(vars, 0, "READERNAME", reader_); 969 } 970 fputs(tpl_getTpl(vars, "ENTITLEMENTS"), f); 971 } 972 973 void send_oscam_status(struct templatevars *vars, FILE *f) { 974 int i; 1209 975 char *usr; 1210 976 int lsec, isec, cnr, con, cau; 1211 977 time_t now = time((time_t)0); 1212 978 struct tm *lt; 1213 979 for (i=0; i<CS_MAXPID; i++) { 980 if (client[i].pid) { 1214 981 if ((cfg->mon_hideclient_to <= 0) || (((now-client[i].lastecm)/60)<cfg->mon_hideclient_to) || 1215 982 (((now-client[i].lastemm)/60)<cfg->mon_hideclient_to) || (client[i].typ!='c')){ … … 1221 988 1222 989 if (client[i].dup) con=2; 1223 else { 1224 if ((client[i].tosleep) && (now-client[i].lastswitch>client[i].tosleep)) con=1; 990 else if ((client[i].tosleep) && (now-client[i].lastswitch>client[i].tosleep)) con=1; 1225 991 else con=0; 1226 }1227 992 1228 993 if (i-cdiff>0) cnr=i-cdiff; … … 1255 1020 } 1256 1021 1257 void send_oscam_status(struct templatevars *vars, FILE *f) {1258 int i;1259 for (i=0; i<CS_MAXPID; i++) monitor_client_status(vars, client[i].pid, i);1260 1261 1022 #ifdef CS_LOGHISTORY 1262 1023 for (i=(*loghistidx+3) % CS_MAXLOGHIST; i!=*loghistidx; i=(i+1) % CS_MAXLOGHIST){ … … 1273 1034 } 1274 1035 1275 void send_oscam_s idtab(FILE *f) {1036 void send_oscam_services(struct templatevars *vars, FILE *f) { 1276 1037 struct s_sidtab *sidtab = cfg->sidtab; 1277 1278 fprintf(f,"<BR><BR><DIV class=\"log\">"); 1279 1280 for (; sidtab; sidtab=sidtab->next) 1281 { 1282 int i, comma; 1283 char buf[1024]; 1284 fprintf(f,"label=%s<BR>\r\n", sidtab->label); 1285 sprintf(buf, "caid(%d)=", sidtab->num_caid); 1286 comma=0; 1038 int i; 1039 1040 while(sidtab != NULL){ 1287 1041 for (i=0; i<sidtab->num_caid; i++){ 1288 if (comma==0){ 1289 sprintf(buf+strlen(buf), "%04X",sidtab->caid[i]); 1290 comma++; 1291 } 1292 else 1293 sprintf(buf+strlen(buf), ",%04X",sidtab->caid[i]); 1042 if (i==0) tpl_printf(vars, 0, "CAIDS", "%04X", sidtab->caid[i]); 1043 else tpl_printf(vars, 1, "CAIDS", ",%04X", sidtab->caid[i]); 1294 1044 } 1295 1045 1296 fprintf(f,"%s<BR>\r\n", buf);1297 sprintf(buf, "provider(%d)=", sidtab->num_provid);1298 comma=0;1299 1046 for (i=0; i<sidtab->num_provid; i++){ 1300 if (comma==0){ 1301 sprintf(buf+strlen(buf), "%ld08X", sidtab->provid[i]); 1302 comma++; 1303 } 1304 else 1305 sprintf(buf+strlen(buf), ",%ld08X", sidtab->provid[i]); 1047 if (i==0) tpl_printf(vars, 0, "PROVIDS", "%ld08X", sidtab->provid[i]); 1048 else tpl_printf(vars, 1, "PROVIDS", ",%ld08X", sidtab->provid[i]); 1306 1049 } 1307 1050 1308 fprintf(f,"%s<BR>\r\n", buf);1309 sprintf(buf, "services(%d)=", sidtab->num_srvid);1310 comma=0;1311 1051 for (i=0; i<sidtab->num_srvid; i++){ 1312 if (comma==0){ 1313 sprintf(buf+strlen(buf), "%04X", sidtab->srvid[i]); 1314 comma++; 1315 } 1316 else 1317 sprintf(buf+strlen(buf), ",%04X", sidtab->srvid[i]); 1318 } 1319 fprintf(f,"%s<BR><BR>\r\n", buf); 1052 if (i==0) tpl_printf(vars, 0, "SRVIDS", "%04X", sidtab->srvid[i]); 1053 else tpl_printf(vars, 1, "SRVIDS", ",%04X", sidtab->srvid[i]); 1054 } 1055 tpl_addVar(vars, 0, "LABEL", sidtab->label); 1056 tpl_printf(vars, 0, "CAIDNUM", "%d", sidtab->num_caid); 1057 tpl_printf(vars, 0, "PROVIDNUM", "%d",sidtab->num_provid); 1058 tpl_printf(vars, 0, "SRVIDNUM", "%d", sidtab->num_srvid); 1059 tpl_addVar(vars, 1, "SIDTABS", tpl_getTpl(vars, "SIDTABBIT")); 1060 sidtab=sidtab->next; 1320 1061 } 1321 fprintf(f,"</DIV>");1062 fputs(tpl_getTpl(vars, "SIDTAB"), f); 1322 1063 } 1323 1064 … … 1334 1075 char *pch; 1335 1076 char *pch2; 1336 /* list of possible pages*/1077 /* List of possible pages */ 1337 1078 char *pages[]={ "/config.html", 1338 1079 "/readers.html", … … 1341 1082 "/userconfig.html", 1342 1083 "/readerconfig.html", 1343 "/readerconfig_do.html",1344 1084 "/services.html", 1085 "/user_edit.html", 1345 1086 "/site.css"}; 1346 1087 int pagescnt = sizeof(pages)/sizeof(char *); // Calculate the amount of items in array … … 1357 1098 path = strtok(NULL, " "); 1358 1099 protocol = strtok(NULL, "\r"); 1359 /* Throw away references to anchors (these are dealt with by the browser and not the server!) */1360 path = strtok(path, "#");1361 1100 if(method == NULL || path == NULL || protocol == NULL) return -1; 1362 1101 … … 1395 1134 /* last value wasn't processed in the loop yet... */ 1396 1135 if(parsemode == -1 && params.paramcount <= MAXGETPARAMS){ 1136 urldecode(pch2); 1397 1137 params.values[params.paramcount-1] = pch2; 1398 1138 } … … 1422 1162 if(authok == 2) strcat(tmp, ", stale=true"); 1423 1163 send_headers(f, 401, "Unauthorized", tmp, "text/html"); 1424 return -1;1164 return 0; 1425 1165 } 1426 1166 1427 1167 /*build page*/ 1428 1168 send_headers(f, 200, "OK", NULL, "text/html"); 1429 if(pgidx == -1 || pgidx == 3){ 1169 if(pgidx == 8) send_css(f); 1170 else if(pgidx != 0){ 1430 1171 time_t t; 1431 1172 struct templatevars *vars = tpl_create(); … … 1436 1177 tpl_addVar(vars, 0, "CS_VERSION", CS_VERSION); 1437 1178 tpl_addVar(vars, 0, "CS_SVN_VERSION", CS_SVN_VERSION); 1179 if(cfg->http_refresh > 0 && (pgidx == 3 || pgidx == -1)){ 1438 1180 tpl_printf(vars, 0, "REFRESHTIME", "%d", cfg->http_refresh); 1181 tpl_addVar(vars, 0, "REFRESH", tpl_getTpl(vars, "REFRESH")); 1182 } 1439 1183 tpl_printf(vars, 0, "CURDATE", "%02d.%02d.%02d", lt->tm_mday, lt->tm_mon+1, lt->tm_year%100); 1440 1184 tpl_printf(vars, 0, "CURTIME", "%02d:%02d:%02d", lt->tm_hour, lt->tm_min, lt->tm_sec); 1441 send_oscam_status(vars, f); 1185 switch(pgidx){ 1186 case 0: break; 1187 case 1: send_oscam_reader(vars, f); break; 1188 case 2: send_oscam_entitlement(vars, f, ¶ms); break; 1189 case 3: send_oscam_status(vars, f); break; 1190 case 4: send_oscam_user_config(vars, f, ¶ms); break; 1191 case 5: send_oscam_reader_config(vars, f, ¶ms); break; 1192 case 6: send_oscam_services(vars, f); break; 1193 case 7: send_oscam_user_config_edit(vars, f, ¶ms); break; 1194 default: send_oscam_status(vars, f); break; 1195 } 1442 1196 tpl_clear(vars); 1443 1197 } else { 1444 if(pgidx == 8) send_css(f); 1445 else { 1446 1447 if (pgidx == 3) send_htmlhead(f, cfg->http_refresh); //status 1448 else send_htmlhead(f,0); 1449 1198 send_htmlhead(f,0); 1450 1199 send_oscam_menu(f); 1451 switch(pgidx){ 1452 case 0: send_oscam_config(f, ¶ms); break; 1453 case 1: send_oscam_reader(f); break; 1454 case 2: send_oscam_entitlement(f, ¶ms); break; 1455 case 3: break; 1456 case 4: send_oscam_user_config(f, ¶ms); break; 1457 case 5: send_oscam_reader_config(f, ¶ms); break; 1458 case 6: send_oscam_reader_config_do(f, ¶ms); break; 1459 case 7: send_oscam_sidtab(f); break; 1460 default: break; 1461 } 1462 1200 send_oscam_config(f, ¶ms); 1463 1201 send_footer(f); 1464 1202 fprintf(f, "</BODY></HTML>\r\n"); 1465 1203 } 1466 }1467 1204 return 0; 1468 1205 }
Note:
See TracChangeset
for help on using the changeset viewer.