static void ecmheaderwhitelist_fn(const char *token, char *value, void *setting, FILE *f) { struct s_reader *rdr = setting; if(value) { if(strlen(value)) chk_ecm_hdr_whitelist(value, &rdr->ecm_hdr_whitelist); else ecm_hdr_whitelist_clear(&rdr->ecm_hdr_whitelist); return; } value = mk_t_ecm_hdr_whitelist(&rdr->ecm_hdr_whitelist); if(strlen(value) > 0 || cfg.http_full_cfg) { fprintf_conf(f, token, "%s\n", value); } free_mk_t(value); }
void chk_ecm_hdr_whitelist(char *value, ECM_HDR_WHITELIST *ecm_hdr_whitelist) { ecm_hdr_whitelist_clear(ecm_hdr_whitelist); char *ptr, *saveptr = NULL; for(ptr = strtok_r(value, ";", &saveptr); ptr; ptr = strtok_r(NULL, ";", &saveptr)) { ECM_HDR_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.provid = 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.provid = a2i(provid_ptr, 6); } if (d.caid == 0xffff) d.caid = 0; if (d.provid == 0xffff) d.provid = 0; char *hdr_ptr, *savehdr_ptr = NULL; for(hdr_ptr = strtok_r(headers, ",", &savehdr_ptr); hdr_ptr; hdr_ptr = strtok_r(NULL, ",", &savehdr_ptr)) { hdr_ptr = trim(hdr_ptr); d.len = strlen(hdr_ptr); if (d.len / 2 > sizeof(d.header)) d.len = sizeof(d.header) * 2; if (d.len > 1) { key_atob_l(hdr_ptr, d.header, d.len); ecm_hdr_whitelist_add(ecm_hdr_whitelist, &d); } } } }