📄 cache_cf.c
字号:
storeAppendPrintf(entry, " %s", a->name); storeAppendPrintf(entry, "\n"); var = var->next; }}static voidparse_denyinfo(acl_deny_info_list ** var){ aclParseDenyInfoLine(var);}voidfree_denyinfo(acl_deny_info_list ** list){ acl_deny_info_list *a = NULL; acl_deny_info_list *a_next = NULL; acl_name_list *l = NULL; acl_name_list *l_next = NULL; for (a = *list; a; a = a_next) { for (l = a->acl_list; l; l = l_next) { l_next = l->next; safe_free(l); } a_next = a->next; safe_free(a); } *list = NULL;}static voidparse_peer_access(void){ char *host = NULL; peer *p; if (!(host = strtok(NULL, w_space))) self_destruct(); if ((p = peerFindByName(host)) == NULL) { debug(15, 0) ("%s, line %d: No cache_peer '%s'\n", cfg_filename, config_lineno, host); return; } aclParseAccessLine(&p->access);}static voidparse_hostdomain(void){ char *host = NULL; char *domain = NULL; if (!(host = strtok(NULL, w_space))) self_destruct(); while ((domain = strtok(NULL, list_sep))) { domain_ping *l = NULL; domain_ping **L = NULL; peer *p; if ((p = peerFindByName(host)) == NULL) { debug(15, 0) ("%s, line %d: No cache_peer '%s'\n", cfg_filename, config_lineno, host); continue; } l = xcalloc(1, sizeof(domain_ping)); l->do_ping = 1; if (*domain == '!') { /* check for !.edu */ l->do_ping = 0; domain++; } l->domain = xstrdup(domain); for (L = &(p->peer_domain); *L; L = &((*L)->next)); *L = l; }}static voidparse_hostdomaintype(void){ char *host = NULL; char *type = NULL; char *domain = NULL; if (!(host = strtok(NULL, w_space))) self_destruct(); if (!(type = strtok(NULL, w_space))) self_destruct(); while ((domain = strtok(NULL, list_sep))) { domain_type *l = NULL; domain_type **L = NULL; peer *p; if ((p = peerFindByName(host)) == NULL) { debug(15, 0) ("%s, line %d: No cache_peer '%s'\n", cfg_filename, config_lineno, host); return; } l = xcalloc(1, sizeof(domain_type)); l->type = parseNeighborType(type); l->domain = xstrdup(domain); for (L = &(p->typelist); *L; L = &((*L)->next)); *L = l; }}static voiddump_ushortlist(StoreEntry * entry, const char *name, ushortlist * u){ while (u) { storeAppendPrintf(entry, "%s %d\n", name, (int) u->i); u = u->next; }}static intcheck_null_ushortlist(ushortlist * u){ return u == NULL;}static voidparse_ushortlist(ushortlist ** P){ char *token; int i; ushortlist *u; ushortlist **U; while ((token = strtok(NULL, w_space))) { if (sscanf(token, "%d", &i) != 1) self_destruct(); if (i < 0) i = 0; u = xcalloc(1, sizeof(ushortlist)); u->i = (u_short) i; for (U = P; *U; U = &(*U)->next); *U = u; }}static voidfree_ushortlist(ushortlist ** P){ ushortlist *u; while ((u = *P) != NULL) { *P = u->next; xfree(u); }}static voiddump_int(StoreEntry * entry, const char *name, int var){ storeAppendPrintf(entry, "%s %d\n", name, var);}static voidparse_int(int *var){ char *token; int i; GetInteger(i); *var = i;}static voidfree_int(int *var){ *var = 0;}static voiddump_onoff(StoreEntry * entry, const char *name, int var){ storeAppendPrintf(entry, "%s %s\n", name, var ? "on" : "off");}static voidparse_onoff(int *var){ char *token = strtok(NULL, w_space); if (token == NULL) self_destruct(); if (!strcasecmp(token, "on") || !strcasecmp(token, "enable")) *var = 1; else *var = 0;}#define free_onoff free_int#define free_httpanonymizer free_int#define dump_eol dump_string#define free_eol free_stringstatic voiddump_refreshpattern(StoreEntry * entry, const char *name, refresh_t * head){ while (head != NULL) { storeAppendPrintf(entry, "%s%s %s %d %d%% %d\n", name, head->flags.icase ? " -i" : null_string, head->pattern, (int) head->min / 60, (int) (100.0 * head->pct + 0.5), (int) head->max / 60);#if HTTP_VIOLATIONS if (head->flags.override_expire) storeAppendPrintf(entry, " override-expire"); if (head->flags.override_lastmod) storeAppendPrintf(entry, " override-lastmod"); if (head->flags.reload_into_ims) storeAppendPrintf(entry, " reload-into-ims"); if (head->flags.ignore_reload) storeAppendPrintf(entry, " ignore-reload");#endif storeAppendPrintf(entry, "\n"); head = head->next; }}static voidparse_refreshpattern(refresh_t ** head){ char *token; char *pattern; time_t min = 0; double pct = 0.0; time_t max = 0;#if HTTP_VIOLATIONS int override_expire = 0; int override_lastmod = 0; int reload_into_ims = 0; int ignore_reload = 0;#endif int i; refresh_t *t; regex_t comp; int errcode; int flags = REG_EXTENDED | REG_NOSUB; if ((token = strtok(NULL, w_space)) == NULL) self_destruct(); if (strcmp(token, "-i") == 0) { flags |= REG_ICASE; token = strtok(NULL, w_space); } else if (strcmp(token, "+i") == 0) { flags &= ~REG_ICASE; token = strtok(NULL, w_space); } if (token == NULL) self_destruct(); pattern = xstrdup(token); GetInteger(i); /* token: min */ min = (time_t) (i * 60); /* convert minutes to seconds */ GetInteger(i); /* token: pct */ pct = (double) i / 100.0; GetInteger(i); /* token: max */ max = (time_t) (i * 60); /* convert minutes to seconds */ /* Options */ while ((token = strtok(NULL, w_space)) != NULL) {#if HTTP_VIOLATIONS if (!strcmp(token, "override-expire")) override_expire = 1; else if (!strcmp(token, "override-lastmod")) override_lastmod = 1; else if (!strcmp(token, "reload-into-ims")) { reload_into_ims = 1; refresh_nocache_hack = 1; /* tell client_side.c that this is used */ } else if (!strcmp(token, "ignore-reload")) { ignore_reload = 1; refresh_nocache_hack = 1; /* tell client_side.c that this is used */ } else#endif debug(22, 0) ("redreshAddToList: Unknown option '%s': %s\n", pattern, token); } if ((errcode = regcomp(&comp, pattern, flags)) != 0) { char errbuf[256]; regerror(errcode, &comp, errbuf, sizeof errbuf); debug(22, 0) ("%s line %d: %s\n", cfg_filename, config_lineno, config_input_line); debug(22, 0) ("refreshAddToList: Invalid regular expression '%s': %s\n", pattern, errbuf); return; } pct = pct < 0.0 ? 0.0 : pct; max = max < 0 ? 0 : max; t = xcalloc(1, sizeof(refresh_t)); t->pattern = (char *) xstrdup(pattern); t->compiled_pattern = comp; t->min = min; t->pct = pct; t->max = max; if (flags & REG_ICASE) t->flags.icase = 1;#if HTTP_VIOLATIONS if (override_expire) t->flags.override_expire = 1; if (override_lastmod) t->flags.override_lastmod = 1; if (reload_into_ims) t->flags.reload_into_ims = 1; if (ignore_reload) t->flags.ignore_reload = 1;#endif t->next = NULL; while (*head) head = &(*head)->next; *head = t; safe_free(pattern);}static voidfree_refreshpattern(refresh_t ** head){ refresh_t *t; while ((t = *head) != NULL) { *head = t->next; safe_free(t->pattern); regfree(&t->compiled_pattern); safe_free(t); }}static voiddump_string(StoreEntry * entry, const char *name, char *var){ if (var != NULL) storeAppendPrintf(entry, "%s %s\n", name, var);}static voidparse_string(char **var){ char *token = strtok(NULL, w_space); safe_free(*var); if (token == NULL) self_destruct(); *var = xstrdup(token);}static voidfree_string(char **var){ safe_free(*var);}static voidparse_eol(char *volatile *var){ char *token = strtok(NULL, null_string); safe_free(*var); if (token == NULL) self_destruct(); *var = xstrdup(token);}static voiddump_time_t(StoreEntry * entry, const char *name, time_t var){ storeAppendPrintf(entry, "%s %d seconds\n", name, (int) var);}static voidparse_time_t(time_t * var){ parseTimeLine(var, T_SECOND_STR);}static voidfree_time_t(time_t * var){ *var = 0;}static voiddump_size_t(StoreEntry * entry, const char *name, size_t var){ storeAppendPrintf(entry, "%s %d\n", name, (int) var);}static voiddump_b_size_t(StoreEntry * entry, const char *name, size_t var){ storeAppendPrintf(entry, "%s %d %s\n", name, (int) var, B_BYTES_STR);}static voiddump_kb_size_t(StoreEntry * entry, const char *name, size_t var){ storeAppendPrintf(entry, "%s %d %s\n", name, (int) var, B_KBYTES_STR);}static voidparse_size_t(size_t * var){ char *token; int i; GetInteger(i); *var = (size_t) i;}static voidparse_b_size_t(size_t * var){ parseBytesLine(var, B_BYTES_STR);}static voidparse_kb_size_t(size_t * var){ parseBytesLine(var, B_KBYTES_STR);}static voidfree_size_t(size_t * var){ *var = 0;}#define free_b_size_t free_size_t#define free_kb_size_t free_size_t#define free_mb_size_t free_size_t#define free_gb_size_t free_size_tstatic voiddump_ushort(StoreEntry * entry, const char *name, u_short var){ storeAppendPrintf(entry, "%s %d\n", name, var);}static voidfree_ushort(u_short * u){ *u = 0;}static voidparse_ushort(u_short * var){ char *token; int i; GetInteger(i); if (i < 0) i = 0; *var = (u_short) i;}static voiddump_wordlist(StoreEntry * entry, const char *name, wordlist * list){ while (list != NULL) { storeAppendPrintf(entry, "%s %s\n", name, list->key); list = list->next; }}static voidparse_wordlist(wordlist ** list){ char *token; while ((token = strtok(NULL, w_space))) wordlistAdd(list, token);}static intcheck_null_wordlist(wordlist * w){ return w == NULL;}static intcheck_null_acl_access(acl_access * a){ return a == NULL;}#define free_wordlist wordlistDestroy#define free_uri_whitespace free_intstatic voidparse_uri_whitespace(int *var){ char *token = strtok(NULL, w_space); if (token == NULL) self_destruct(); if (!strcasecmp(token, "deny")) *var = URI_WHITESPACE_DENY; else if (!strcasecmp(token, "allow")) *var = URI_WHITESPACE_ALLOW; else if (!strcasecmp(token, "encode")) *var = URI_WHITESPACE_ENCODE; else if (!strcasecmp(token, "chop")) *var = URI_WHITESPACE_CHOP; else self_destruct();}static voiddump_uri_whitespace(StoreEntry * entry, const char *name, int var){ char *s; if (var == URI_WHITESPACE_ALLOW) s = "allow"; else if (var == URI_WHITESPACE_ENCODE) s = "encode"; else if (var == URI_WHITESPACE_CHOP) s = "chop"; else s = "deny"; storeAppendPrintf(entry, "%s %s\n", name, s);}#include "cf_parser.c"peer_tparseNeighborType(const char *s){ if (!strcasecmp(s, "parent")) return PEER_PARENT; if (!strcasecmp(s, "neighbor")) return PEER_SIBLING; if (!strcasecmp(s, "neighbour")) return PEER_SIBLING; if (!strcasecmp(s, "sibling")) return PEER_SIBLING; if (!strcasecmp(s, "multicast")) return PEER_MULTICAST; debug(15, 0) ("WARNING: Unknown neighbor type: %s\n", s); return PEER_SIBLING;}voidconfigFreeMemory(void){ free_all();}static voidrequirePathnameExists(const char *name, const char *path){ struct stat sb; assert(path != NULL); if (stat(path, &sb) < 0) fatalf("%s: %s", path, xstrerror());}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -