static void ecmwhitelist_fn(const char *token, char *value, void *setting, FILE *f) { struct s_reader *rdr = setting; if(value) { if(strlen(value)) chk_ecm_whitelist(value, &rdr->ecm_whitelist); else ecm_whitelist_clear(&rdr->ecm_whitelist); return; } value = mk_t_ecm_whitelist(&rdr->ecm_whitelist); if(strlen(value) > 0 || cfg.http_full_cfg) { fprintf_conf(f, token, "%s\n", value); } free_mk_t(value); }
void chk_ecm_whitelist(char *value, ECM_WHITELIST *ecm_whitelist) { ecm_whitelist_clear(ecm_whitelist); char *ptr, *saveptr1 = NULL; for(ptr = strtok_r(value, ";", &saveptr1); ptr; ptr = strtok_r(NULL, ";", &saveptr1)) { ECM_WHITELIST_DATA d; memset(&d, 0, sizeof(d)); char *caid_end_ptr = strchr(ptr, ':'); // caid_end_ptr + 1 -> headers char *provid_ptr = strchr(ptr, '@'); // provid_ptr + 1 -> provid char *headers = ptr; if(caid_end_ptr) { caid_end_ptr[0] = '\0'; if (provid_ptr) { provid_ptr[0] = '\0'; provid_ptr++; d.ident = a2i(provid_ptr, 6); } d.caid = dyn_word_atob(ptr); headers = caid_end_ptr + 1; // -> headers } else if(provid_ptr) { provid_ptr[0] = '\0'; d.ident = a2i(provid_ptr, 6); } if (d.caid == 0xffff) d.caid = 0; if (d.ident == 0xffff) d.ident = 0; char *len_ptr, *savelen_ptr = NULL; for(len_ptr = strtok_r(headers, ",", &savelen_ptr); len_ptr; len_ptr = strtok_r(NULL, ",", &savelen_ptr)) { d.len = dyn_word_atob(len_ptr); if (d.len == 0xffff) continue; ecm_whitelist_add(ecm_whitelist, &d); } } }