Changeset 8435


Ignore:
Timestamp:
02/27/13 14:34:37 (9 years ago)
Author:
gf
Message:

webif: Remove the need to save config info in struct templates.

Configuration data for templates was introduced in commit r7221
as a way to fix ticket #2665.

Basically we kept the configuration deps in the template and when we
loaded the template from file we checked if the config items are enabled.
If they weren't we ignorred the template like it didn't exist.

But now there is a better way. If config item was disabled when the
binary was built then the template does not exist in struct templates
at all.

So we can just check if the requested template exists in struct templates,
and if it doesn't exists we just don't try to load it from file, so the
problem in ticket #2665 is still solved but we remove lots of code (one
less place place that knows about configuration items, yay!) and lower
the binary size by ~1.4k.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/module-webif-tpl.c

    r8434 r8435  
    1717    const char *tpl_name;
    1818    const char *tpl_data;
    19     const char *tpl_deps;
    2019    uint32_t tpl_data_len;
    2120};
     
    3635        tpls[i].tpl_name      = templates[i].tpl_name;
    3736        tpls[i].tpl_data      = templates[i].tpl_data;
    38         tpls[i].tpl_deps      = templates[i].tpl_deps;
    3937        tpls[i].tpl_data_len  = templates[i].tpl_data_len;
    4038    }
     
    230228}
    231229
    232 #define check_conf(CONFIG_VAR, text) \
    233     if (config_enabled(CONFIG_VAR) && strncmp(#CONFIG_VAR, text, len) == 0) { ok = 1; break; }
    234 
    235230/* Returns an unparsed template either from disk or from internal templates.
    236231   Note: You must free() the result after using it and you may get NULL if an error occured!*/
    237232char *tpl_getUnparsedTpl(const char* name, int8_t removeHeader, const char* subdir) {
    238233    int32_t i;
     234    const struct tpl *tpl = NULL;
    239235    char *result;
    240236
    241     if (cfg.http_tpl) {
     237    uint32_t name_hash = jhash(name, strlen(name));
     238    for(i = 0; i < tpls_count; i++) {
     239        if (tpls[i].tpl_name_hash == name_hash) {
     240            tpl = &tpls[i];
     241            break;
     242        }
     243    }
     244
     245    if (tpl && cfg.http_tpl) {
    242246        char path[255];
    243247        if ((strlen(tpl_getFilePathInSubdir(cfg.http_tpl, subdir, name, ".tpl", path, 255)) > 0 && file_exists(path))
     
    267271                            readen -= offset;
    268272                            pch2[0] = '\0';
    269                             char *ptr1, *ptr2, *saveptr1 = NULL, *saveptr2 = NULL;
    270                             for (i = 0, ptr1 = strtok_r(pch1 + 10, ";", &saveptr1); (ptr1) && i < 4 ; ptr1 = strtok_r(NULL, ";", &saveptr1), i++)
    271                             {
    272                                 if (i == 3 && strlen(ptr1) > 2) {
    273                                     int8_t ok = 0;
    274                                     for (ptr2 = strtok_r(ptr1, ",", &saveptr2); (ptr2) && ok == 0 ; ptr2 = strtok_r(NULL, ",", &saveptr2))
    275                                     {
    276                                         size_t len = strlen(ptr2);
    277                                         check_conf(WITH_CARDREADER, ptr2);
    278                                         check_conf(CARDREADER_PHOENIX, ptr2);
    279                                         check_conf(CARDREADER_INTERNAL_AZBOX, ptr2);
    280                                         check_conf(CARDREADER_INTERNAL_COOLAPI, ptr2);
    281                                         check_conf(CARDREADER_INTERNAL_SCI, ptr2);
    282                                         check_conf(CARDREADER_SC8IN1, ptr2);
    283                                         check_conf(CARDREADER_MP35, ptr2);
    284                                         check_conf(CARDREADER_SMARGO, ptr2);
    285                                         check_conf(CARDREADER_PCSC, ptr2);
    286                                         check_conf(CARDREADER_SMART, ptr2);
    287                                         check_conf(CARDREADER_DB2COM, ptr2);
    288                                         check_conf(CARDREADER_STAPI, ptr2);
    289                                         check_conf(TOUCH, ptr2);
    290                                         check_conf(CS_ANTICASC, ptr2);
    291                                         check_conf(CS_CACHEEX, ptr2);
    292                                         check_conf(HAVE_DVBAPI, ptr2);
    293                                         check_conf(IPV6SUPPORT, ptr2);
    294                                         check_conf(IRDETO_GUESSING, ptr2);
    295                                         check_conf(LCDSUPPORT, ptr2);
    296                                         check_conf(LEDSUPPORT, ptr2);
    297                                         check_conf(MODULE_CAMD33, ptr2);
    298                                         check_conf(MODULE_CAMD35, ptr2);
    299                                         check_conf(MODULE_CAMD35_TCP, ptr2);
    300                                         check_conf(MODULE_CCCAM, ptr2);
    301                                         check_conf(MODULE_CCCSHARE, ptr2);
    302                                         check_conf(MODULE_CONSTCW, ptr2);
    303                                         check_conf(MODULE_GBOX, ptr2);
    304                                         check_conf(MODULE_GHTTP, ptr2);
    305                                         check_conf(MODULE_MONITOR, ptr2);
    306                                         check_conf(MODULE_NEWCAMD, ptr2);
    307                                         check_conf(MODULE_PANDORA, ptr2);
    308                                         check_conf(MODULE_RADEGAST, ptr2);
    309                                         check_conf(MODULE_SERIAL, ptr2);
    310                                         check_conf(READER_BULCRYPT, ptr2);
    311                                         check_conf(READER_CONAX, ptr2);
    312                                         check_conf(READER_CRYPTOWORKS, ptr2);
    313                                         check_conf(READER_GRIFFIN, ptr2);
    314                                         check_conf(READER_DGCRYPT, ptr2);
    315                                         check_conf(READER_DRE, ptr2);
    316                                         check_conf(READER_IRDETO, ptr2);
    317                                         check_conf(READER_NAGRA, ptr2);
    318                                         check_conf(READER_SECA, ptr2);
    319                                         check_conf(READER_TONGFANG, ptr2);
    320                                         check_conf(READER_VIACCESS, ptr2);
    321                                         check_conf(READER_VIDEOGUARD, ptr2);
    322                                         check_conf(WITH_CARDREADER, ptr2);
    323                                         check_conf(WITH_DEBUG, ptr2);
    324                                         check_conf(WITH_LB, ptr2);
    325                                         check_conf(WITH_LIBCRYPTO, ptr2);
    326                                         check_conf(WITH_SSL, ptr2);
    327                                         check_conf(WITH_STAPI, ptr2);
    328                                     } // for
    329                                     if (ok == 0) return result;
    330                                     break;
    331                                 } // if
    332                             } // for
    333273                        } // if
    334274                    } // if
     
    348288    } // if
    349289
    350     bool found = 0;
    351     uint32_t name_hash = jhash(name, strlen(name));
    352     for(i = 0; i < tpls_count; i++) {
    353         if (tpls[i].tpl_name_hash == name_hash) {
    354             found = 1;
    355             break;
    356         }
    357     }
    358 
    359     if (found) {
    360         const struct tpl *tpl = &tpls[i];
     290    if (tpl) {
    361291        if (!cs_malloc(&result, tpl->tpl_data_len + 1)) return NULL; // +1 to accomodate \0 at the end
    362292        memcpy(result, tpl->tpl_data, tpl->tpl_data_len);
     
    431361        if (strlen(tpl_getTplPath(tpl->tpl_name, path, tmp, 256)) > 0 && (fp = fopen(tmp,"w")) != NULL) {
    432362            if (strncmp(tpl->tpl_name, "IC", 2) != 0) {
    433                 fprintf(fp, "<!--OSCam;%lu;%s;%s;%s-->\n", crc32(0L, (unsigned char *)tpl->tpl_data, tpl->tpl_data_len), CS_VERSION, CS_SVN_VERSION, tpl->tpl_deps);
     363                fprintf(fp, "<!--OSCam;%lu;%s;%s-->\n", crc32(0L, (unsigned char *)tpl->tpl_data, tpl->tpl_data_len), CS_VERSION, CS_SVN_VERSION);
    434364            }
    435365            fwrite(tpl->tpl_data, tpl->tpl_data_len, 1, fp);
     
    453383            char *tplorg = tpl_getUnparsedTpl(tpl->tpl_name, 0, subdir);
    454384            unsigned long checksum = 0, curchecksum = crc32(0L, (unsigned char*)tpl->tpl_data, tpl->tpl_data_len);
    455             char *ifdefs = "", *pch1 = strstr(tplorg,"<!--OSCam");
     385            char *pch1 = strstr(tplorg,"<!--OSCam");
    456386            if (pch1 != NULL) {
    457387                char *version = "?", *revision = "?";
     
    465395                        else if (j == 1) version = ptr1;
    466396                        else if (j == 2) revision = ptr1;
    467                         else if (j == 3) ifdefs = ptr1;
    468397                    }
    469398                }
     
    472401                } else error = 0;
    473402            } else cs_log("WARNING: Your http disk template %s is in the old template format without revision info. Please consider upgrading it!", path);
    474             if (error) cs_log("If you are sure that it is current, add the following line at the beginning of the template to suppress this warning: <!--OSCam;%lu;%s;%s;%s-->", curchecksum, CS_VERSION, CS_SVN_VERSION, ifdefs);
     403            if (error) cs_log("If you are sure that it is current, add the following line at the beginning of the template to suppress this warning: <!--OSCam;%lu;%s;%s-->", curchecksum, CS_VERSION, CS_SVN_VERSION);
    475404            free(tplorg);
    476405        }
  • trunk/webif/pages_gen.c

    r8434 r8435  
    241241    }
    242242
    243     fprintf(output_file, "\t{ .tpl_name=\"%s\", .tpl_data=%s%s, .tpl_deps=\"%s\", .tpl_data_len=%u },\n",
     243    fprintf(output_file, "\t{ .tpl_name=\"%s\", .tpl_data=%s%s, .tpl_data_len=%u },\n",
    244244        ident,
    245245        templates.data[tpl_idx].type == TXT ? "TPL" : "", ident,
    246         deps,
    247246        templates.data[tpl_idx].data_len
    248247    );
     
    317316    fprintf(output_file, "  char *tpl_name;\n");
    318317    fprintf(output_file, "  char *tpl_data;\n");
    319     fprintf(output_file, "  char *tpl_deps;\n");
    320318    fprintf(output_file, "  uint32_t tpl_data_len;\n");
    321319    fprintf(output_file, "};\n");
Note: See TracChangeset for help on using the changeset viewer.