Changeset 7787
- Timestamp:
- 10/22/12 22:19:12 (11 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-webif-pages.c
r7759 r7787 302 302 SFRTIFJFU0VSVkVEADs=" 303 303 304 #define ICEMM "data:image/png;base64,\ 305 iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAIAAAAmKNuZAAAAGXRFWHRTb2Z0d2Fy\ 306 ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm9JREFUeNqEVc9LG0EU3tkM+CvQKq5U\ 307 6krwEHuwFLQiSvHgP6DgRY9evAj+DV4kB/HiSfA/yNWLVEojeJBQMBZd0ZhGgpgt\ 308 jRXaU2t3Xp+Z3cnszuzmsYT3ZjLffG/eN29Ifnb2L2NGjAFAKAwcFp7A0CSE4vcP\ 309 mmYYJFhAdIvlUIzwQe57AAzhWHh/kogiD8oLuYeIVASg7JyApRpOpZBdhJH2pCJA\ 310 cqaRo6RGO1LvVlZejY+j45ZKX/b2jHi+IMPFWWZurndkBJ2uvj4BB7rcMaS8rHGH\ 311 EqIc6Al0QPhr8rOL0wEoRxkHJEKqraAqBa5pVb3RZLUSkde0cmyH9ZysWuw38/Nd\ 312 lvVYrbKnp+rRkQDhuEOTk7S7uzeT+Xl7+61QiOD6t4L/cgGOLS+/GB7GsHF1lR4c\ 313 lDm9XVoaW1x8advoP1QqCCdI+DKGgJfItHxw8H51FZ3+0VH8BFZ/NvshmxWhs7/v\ 314 SVT8fNVTb1xfF3d3k8V4vLNzf3bGmsURRccvtWDbEL62j7Ua7ex8KJftqSktVmFr\ 315 C7HqFxfqlCnvIPzayQlyPN7eVhd8yuXc8/Pvl5eR3sHP0ARJZYLzM2Kx+OPm5nMu\ 316 J2N93NhwHafuOLKkeMPkI1TG4vZ6YmJ6fT09MKBSm1lb485v1z3c3GxUKiBVA7hQ\ 317 ZCz0PcYsqaCypS1LOB6a8ipQtT2gXL/m8z2WFbR9o+UE63/V68zz1P0oKE/Jfal0\ 318 d3oKuiYIYaHJU6Q5q0k2rusmYLUuGeh6YVtS6huC99+/FclYah81pMfTVy8hfvvs\ 319 MM0/4QKpbyMhBP8KMS86p4ZORyr1X4ABAFELHy6c0nVMAAAAAElFTkSuQmCC" 320 304 321 #define TPLHEADER "\ 305 322 <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\ … … 995 1012 <TH>ECMs Filtered<br><span title=\"filtered by ECM Header Whitelist\"> Head </span>/<span title=\"filtered by ECM Whitelist\"> Len </span></TH>\n\ 996 1013 <TH>LB Weight</TH>\n\ 997 <TH COLSPAN=\" 5\">Action</TH>\n\1014 <TH COLSPAN=\"6\">Action</TH>\n\ 998 1015 </TR>\n\ 999 1016 ##READERLIST##\n\ … … 1012 1029 </select>\n\ 1013 1030 </TD>\n\ 1014 <TD COLSPAN=\" 5\" class=\"centered\"><input type=\"submit\" name=\"action\" value=\"Add\" ##BTNDISABLED##></TD>\n\1015 <TD COLSPAN=\" 5\"></TD>\n\1031 <TD COLSPAN=\"4\" class=\"centered\"><input type=\"submit\" name=\"action\" value=\"Add\" ##BTNDISABLED##></TD>\n\ 1032 <TD COLSPAN=\"6\"></TD>\n\ 1016 1033 </TR>\n\ 1017 1034 </TABLE>\n\ … … 1044 1061 <TD class=\"centered\">##ENTITLEMENT##</TD>\n\ 1045 1062 <TD class=\"centered\">##READERREFRESH##</TD>\n\ 1063 <TD class=\"centered\"><A HREF=\"emm.html?label=##READERNAMEENC##\" TITLE=\"Write EMM to this Reader\"><IMG CLASS=\"icon\" SRC=\"image?i=ICEMM\" ALT=\"Write EMM\"></A></TD>\n\ 1046 1064 <TD class=\"centered\"><A HREF=\"readerstats.html?label=##READERNAMEENC##&hide=4\" TITLE=\"Show loadbalancer statistics\"><IMG CLASS=\"icon\" SRC=\"image?i=ICSTA\" ALT=\"Loadbalancer statistics\"></A></TD>\n\ 1047 1065 <TD class=\"centered\"><A HREF=\"readers.html?label=##READERNAMEENC##&action=delete\" TITLE=\"Delete this Reader\"><IMG CLASS=\"icon\" SRC=\"image?i=ICDEL\" ALT=\"Delete Reader\"></A></TD>\n\ … … 1743 1761 </TD>\n\ 1744 1762 </TR>\n\ 1745 <TR><TD>##TPLHELPPREFIX##conf#lb_save##TPLHELPSUFFIX##Loadbalance save every:</A></TD><TD><input name=\"lb_save\" type=\"text\" size=\"5\" maxlength=\"5\" value=\"##LBSAVE##\"> ECM ´s</TD></TR>\n\1763 <TR><TD>##TPLHELPPREFIX##conf#lb_save##TPLHELPSUFFIX##Loadbalance save every:</A></TD><TD><input name=\"lb_save\" type=\"text\" size=\"5\" maxlength=\"5\" value=\"##LBSAVE##\"> ECM�s</TD></TR>\n\ 1746 1764 <TR><TD>##TPLHELPPREFIX##conf#lb_savepath##TPLHELPSUFFIX##Statistics save path:</A></TD><TD><input name=\"lb_savepath\" type=\"text\" size=\"63\" maxlength=\"128\" value=\"##LBSAVEPATH##\"></TD></TR>\n\ 1747 1765 <TR><TD>##TPLHELPPREFIX##conf#lb_nbest_readers##TPLHELPSUFFIX##Number of best readers:</A></TD><TD><input name=\"lb_nbest_readers\" type=\"text\" size=\"5\" maxlength=\"5\" value=\"##LBNBESTREADERS##\"></TD></TR>\n\ … … 2287 2305 #define TPLCACHEEXTABLEROW " <TR><TD> ##DIRECTIONIMG## </TD><TD>##TYPE##</TD><TD>##NAME##</TD><TD>##IP##</TD><TD>##NODE##</TD><TD>##LEVEL##</TD><TD>##PUSH##</TD><TD>##GOT##</TD><TD>##HIT##</TD><TD>##ERR##</TD><TD>##ERRCW##</TD></TR>\n" 2288 2306 2307 #define TPLASKEMM "\ 2308 ##TPLHEADER##\ 2309 ##TPLMENU##\ 2310 ##TPLMESSAGE##\ 2311 <BR><BR>\n\ 2312 <FORM action=\"emm_running.html\" method=\"get\"><INPUT TYPE=\"hidden\" NAME=\"label\" VALUE=\"##READER##\">\n\ 2313 <TABLE CLASS=\"stats\">\n\ 2314 <TR><TH COLSPAN=\"2\">Selected reader : ##READER##</TH></TR>\n\ 2315 <TR><TD>single EMM to write:</TD><TD><textarea name=\"ep\" cols=\"80\" rows=\"7\" maxlength=\"1024\"></textarea></TD></TR>\n\ 2316 <TR><TD>file path with EMMs:</TD><TD><input name=\"emmfile\" type=\"text\" size=\"70\" maxlength=\"256\"></TD></TR>\n\ 2317 <TR><TD colspan=\"2\" class=\"centered\"><input name=\"action\" type=\"submit\" value=\"Launch\" ##BTNDISABLED##></TD></TR>\n\ 2318 </TABLE>\n\ 2319 </FORM>\n\ 2320 ##TPLFOOTER##" 2321 2322 #define TPLEMM_RUNNING "\ 2323 ##TPLHEADER##\ 2324 ##TPLMENU##\ 2325 <BR><BR>\n\ 2326 ##TPLMESSAGE##\ 2327 <BR><BR>\n\ 2328 <form action=\"emm_running.html\" method=\"get\">\n\ 2329 <input name=\"service\" type=\"hidden\" value=\"##EP##\">\n\ 2330 <TABLE CLASS=\"stats\">\n\ 2331 <TR><TH COLSPAN=\"2\">Selected reader : ##READER##</TH></TR>\n\ 2332 <TR><TH COLSPAN=\"2\">SINGLE EMM</TH></TR>\n\ 2333 <TR><TD>EMM: </A></TD><TD><textarea name=\"ep\" readonly=\"readonly\" cols=\"80\" rows=\"7\">##EP##</textarea></TD></TR>\n\ 2334 <TR><TD>size: </A></TD><TD><input name=\"size\" readonly=\"readonly\" type=\"text\" size=\"63\" maxlength=\"160\" value=\"##SIZE##\"></TD></TR>\n\ 2335 <TR><TH COLSPAN=\"2\">EMM FILE</TH></TR>\n\ 2336 <TR><TD>file path: </A></TD><TD><input name=\"size\" readonly=\"readonly\" type=\"text\" size=\"63\" maxlength=\"160\" value=\"##FNAME##\"></TD></TR>\n\ 2337 <TR><TD>file size: </A></TD><TD><input name=\"size\" readonly=\"readonly\" type=\"text\" size=\"63\" maxlength=\"160\" value=\"##FSIZE##\"></TD></TR>\n\ 2338 <TR><TD>num of <BR>read lines: </A></TD><TD><input name=\"size\" readonly=\"readonly\" type=\"text\" size=\"63\" maxlength=\"160\" value=\"##NUMRLINE##\"></TD></TR>\n\ 2339 <TR><TD>lines with <BR>errors: </A></TD><TD><input name=\"size\" readonly=\"readonly\" type=\"text\" size=\"63\" maxlength=\"256\" value=\"##ERRLINE##\"></TD></TR>\n\ 2340 <TR><TD>num of <BR>written EMMs: </A></TD><TD><input name=\"size\" readonly=\"readonly\" type=\"text\" size=\"63\" maxlength=\"160\" value=\"##NUMWEMM##\"></TD></TR>\n\ 2341 </TABLE>\n\ 2342 </form>\n\ 2343 ##TPLFOOTER##" 2344 2289 2345 const char *templates[][3] = { 2290 2346 {"HEADER", TPLHEADER, ""} … … 2378 2434 ,{"SCRIPT", TPLSCRIPT, ""} 2379 2435 ,{"GRAPH", TPLGRAPH, ""} 2436 ,{"ASKEMM", TPLASKEMM, ""} 2437 ,{"EMM_RUNNING", TPLEMM_RUNNING, ""} 2380 2438 #ifdef HAVE_DVBAPI 2381 2439 ,{"CONFIGDVBAPI", TPLCONFIGDVBAPI, "HAVE_DVBAPI"} … … 2468 2526 ,{"ICRES", ICRES, ""} 2469 2527 ,{"ICSPAC", ICSPAC, ""} 2528 ,{"ICEMM", ICEMM, ""} 2470 2529 }; 2471 2530 -
trunk/module-webif.c
r7759 r7787 4054 4054 } 4055 4055 4056 static bool send_EMM(const struct s_reader *rdr, const unsigned char *emmhex, uint32_t len) { 4057 4058 if(NULL != rdr && NULL != emmhex && 0 != len ) { 4059 EMM_PACKET *emm_pack; 4060 4061 if(cs_malloc(&emm_pack, sizeof(EMM_PACKET))) { 4062 struct s_client *webif_client = cur_client(); 4063 webif_client->grp = 0xFF; /* to access to all readers */ 4064 4065 memset(emm_pack, '\0', sizeof(EMM_PACKET)); 4066 emm_pack->client = webif_client; 4067 emm_pack->l = len; 4068 memcpy(emm_pack->emm, emmhex, len); 4069 4070 cs_debug_mask(D_EMM, "emm is being sent to reader %s.", rdr->label); 4071 add_job(rdr->client, ACTION_READER_EMM, emm_pack, sizeof(EMM_PACKET)); 4072 return true; 4073 } 4074 } 4075 4076 return false; 4077 } 4078 4079 static bool process_single_emm(struct templatevars *vars, const struct s_reader *rdr, const char* ep) { 4080 4081 if(NULL !=vars && NULL != rdr && NULL != ep) 4082 { 4083 char emmdata[1025] = {'\0'}; /*1024 + '\0'*/ 4084 unsigned char emmhex[513] = {'\0'}; 4085 char buff[5] = {'\0'}; 4086 uint32_t len = 0; 4087 cs_strncpy(emmdata, ep, sizeof(emmdata)); 4088 remove_white_chars(emmdata); 4089 4090 if('\0' != emmdata[0]) { 4091 len = strlen(emmdata); 4092 tpl_addVar(vars, TPLADD, "EP", strtoupper(emmdata)); 4093 if (key_atob_l(emmdata, emmhex, len)) { 4094 tpl_addMsg(vars, "Single EMM has not been sent due to wrong value!"); 4095 } 4096 else { 4097 len /= 2; 4098 snprintf(buff, sizeof(buff), "0x%02X", len); 4099 tpl_addVar(vars, TPLADD, "EP", strtoupper(emmdata)); 4100 tpl_addVar(vars, TPLADD, "SIZE", buff); 4101 4102 if(send_EMM(rdr, emmhex, len)) { 4103 tpl_addMsg(vars, "Single EMM has been sent."); 4104 return true; 4105 } 4106 } 4107 } 4108 } 4109 tpl_addVar(vars, TPLADD, "SIZE", "0x00"); 4110 return false; 4111 } 4112 4113 static bool process_emm_file(struct templatevars *vars, const struct s_reader *rdr, const char* sFilePath) { 4114 4115 bool bret = false; 4116 uint32_t fsize = 0; 4117 uint32_t rlines = 0; 4118 uint32_t wemms = 0; 4119 uint32_t errsize = 0; 4120 char numerrl[256] = {'\0'}; 4121 char buff[20] = {'\0'}; 4122 4123 if(NULL != rdr && NULL != sFilePath && '\0' != sFilePath[0]) { 4124 char sMessage[128] = {0}; 4125 if(true == file_exists(sFilePath)) { 4126 FILE *fp; 4127 if( (fp = fopen(sFilePath, "r")) ) { 4128 char line[2048] = {'\0'}; 4129 unsigned char emmhex[513] = {'\0'}; 4130 uint32_t len = 0; 4131 4132 tpl_addMsg(vars, "EMM file has been processed."); 4133 while (fgets(line, sizeof(line), fp)) { 4134 ++rlines; 4135 len = strlen(remove_white_chars(line)); 4136 4137 // wrong emm 4138 if(len > (sizeof(emmhex) * 2) || 4139 key_atob_l(line, emmhex, len)) { 4140 errsize += snprintf(numerrl + errsize, sizeof(numerrl)-errsize, "%d, ", rlines); 4141 continue; 4142 } 4143 if(send_EMM(rdr, emmhex, len)) { 4144 ++wemms; 4145 /* Give time to process EMM, otherwise, too many jobs can be added*/ 4146 cs_sleepms(1000); //TODO: use oscam signal to catch reader answer 4147 } 4148 } 4149 fsize = ftell(fp); 4150 fclose(fp); 4151 } 4152 else { 4153 snprintf(sMessage, sizeof(sMessage), "Cannot open file '%s' (errno=%d: %s)\n", sFilePath, errno, strerror(errno)); 4154 tpl_addMsg(vars, sMessage); 4155 } 4156 } 4157 else { 4158 snprintf(sMessage, sizeof(sMessage), "FILE \"%s\" not found!", sFilePath); 4159 tpl_addMsg(vars, sMessage); 4160 } 4161 bret = true; 4162 } 4163 4164 snprintf(buff, sizeof(buff), "%d bytes", fsize); 4165 tpl_addVar(vars, TPLADD, "FSIZE", buff); 4166 snprintf(buff, sizeof(buff), "%d", rlines); 4167 tpl_addVar(vars, TPLADD, "NUMRLINE", buff); 4168 snprintf(buff, sizeof(buff), "%d", wemms); 4169 tpl_addVar(vars, TPLADD, "NUMWEMM", buff); 4170 tpl_addVar(vars, TPLADD, "ERRLINE", numerrl); 4171 4172 return bret; 4173 } 4174 4175 static char *send_oscam_EMM_running(struct templatevars *vars, struct uriparams *params) { 4176 4177 struct s_reader *rdr = NULL; 4178 4179 setActiveMenu(vars, MNU_READERS); 4180 tpl_addVar(vars, TPLADD, "READER", strtolower(getParam(params, "label"))); 4181 tpl_addVar(vars, TPLADD, "FNAME", getParam(params, "emmfile")); 4182 4183 rdr = get_reader_by_label(getParam(params, "label")); 4184 if (rdr) { 4185 process_single_emm(vars, rdr, getParam(params, "ep")); 4186 process_emm_file(vars, rdr, getParam(params, "emmfile")); 4187 } 4188 else 4189 { 4190 char sMessage[128] = {0}; 4191 snprintf(sMessage, sizeof(sMessage), "READER \"%s\" not found!", getParam(params, "label")); 4192 tpl_addMsg(vars, sMessage); 4193 tpl_addVar(vars, TPLADD, "READER", "reader not found"); 4194 } 4195 4196 return tpl_getTpl(vars, "EMM_RUNNING"); 4197 } 4198 4199 static char *send_oscam_EMM(struct templatevars *vars, struct uriparams *params) { 4200 4201 setActiveMenu(vars, MNU_READERS); 4202 tpl_addVar(vars, TPLADD, "READER", strtolower(getParam(params, "label"))); 4203 return tpl_getTpl(vars, "ASKEMM"); 4204 } 4205 4056 4206 static char *send_oscam_api(struct templatevars *vars, FILE *f, struct uriparams *params, int8_t *keepalive, int8_t apicall) { 4057 4207 if (strcmp(getParam(params, "part"), "status") == 0) { … … 4609 4759 "/oscamapi.xml", 4610 4760 "/cacheex.html", 4611 "/oscamapi.json" }; 4761 "/oscamapi.json", 4762 "/emm.html", 4763 "/emm_running.html" }; 4612 4764 4613 4765 int32_t pagescnt = sizeof(pages)/sizeof(char *); // Calculate the amount of items in array … … 4835 4987 #endif 4836 4988 case 24: result = send_oscam_api(vars, f, ¶ms, keepalive, 2); break; //oscamapi.json 4989 case 25: result = send_oscam_EMM(vars, ¶ms); break; //emm.html 4990 case 26: result = send_oscam_EMM_running(vars, ¶ms); break; //emm_running.html 4837 4991 default: result = send_oscam_status(vars, ¶ms, 0); break; 4838 4992 } -
trunk/oscam-string.c
r7655 r7787 74 74 } 75 75 return txt; 76 } 77 78 /* Converts the string txt to it's upper case representation. */ 79 char *strtoupper(char *txt) { 80 char *p; 81 for (p = txt; *p; p++) { 82 if (islower((uchar)*p)) 83 *p = toupper((uchar)*p); 84 } 85 return txt; 76 86 } 77 87 … … 91 101 for (p1 = txt + l - 1; l > 0 && ((*p1==' ') || (*p1=='\t') || (*p1=='\n') || (*p1=='\r')); *p1--='\0', l--) 92 102 ; 103 } 104 return txt; 105 } 106 107 char *remove_white_chars(char *txt) { 108 109 char *p1 = txt, *p2 = txt; 110 111 if(NULL != p1) { 112 while('\0' != *p1) { 113 if((' ' != *p1) && ('\t' != *p1) && 114 ('\n' != *p1) && ('\r' != *p1)) { 115 *p2++ = *p1; 116 } 117 p1++; 118 } 119 *p2 = '\0'; 93 120 } 94 121 return txt; -
trunk/oscam-string.h
r7655 r7787 8 8 void cs_strncpy(char *destination, const char *source, size_t num); 9 9 char *strtolower(char *txt); 10 char *strtoupper(char *txt); 10 11 char *trim(char *txt); 12 char *remove_white_chars(char *txt); 11 13 bool streq(const char *s1, const char *s2); 12 14
Note:
See TracChangeset
for help on using the changeset viewer.