⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cache_cf.c

📁 -
💻 C
📖 第 1 页 / 共 3 页
字号:
	    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 + -