/*
- * $Id: cache_cf.cc,v 1.207 1997/07/15 23:23:15 wessels Exp $
+ * $Id: cache_cf.cc,v 1.208 1997/07/16 04:48:27 wessels Exp $
*
* DEBUG: section 3 Configuration File Parsing
* AUTHOR: Harvest Derived
static void parse_wordlist _PARAMS((wordlist **));
static void default_all _PARAMS((void));
static int parse_line _PARAMS((char *));
-static cache_peer *configFindPeer _PARAMS((const char *name));
static void parseBytesLine _PARAMS((size_t * bptr, const char *units));
static size_t parseBytesUnits _PARAMS((const char *unit));
configDoConfigure(void)
{
LOCAL_ARRAY(char, buf, BUFSIZ);
- cache_peer *p;
memset(&Config2, '\0', sizeof(SquidConfig2));
if (Config.Accel.host) {
snprintf(buf, BUFSIZ, "http://%s:%d", Config.Accel.host, Config.Accel.port);
Config.appendDomainLen = 0;
safe_free(debug_options)
debug_options = xstrdup(Config.debugOptions);
- /* ICK */
- for (p = Config.peers; p; p = p->next) {
- neighborAdd(p->host,
- p->type,
- p->http,
- p->icp,
- p->options,
- p->weight,
- p->mcast_ttl);
- }
}
/* Parse a time specification from the config file. Store the
}
static void
-dump_cache_peer(cache_peer * p)
+dump_peer(peer * p)
{
assert(0);
}
static void
-parse_cache_peer(cache_peer ** head)
+parse_peer(peer ** head)
{
char *token = NULL;
- cache_peer peer;
- cache_peer *p;
+ peer *p;
int i;
- memset(&peer, '\0', sizeof(cache_peer));
- peer.http = CACHE_HTTP_PORT;
- peer.icp = CACHE_ICP_PORT;
- peer.weight = 1;
- if (!(peer.host = strtok(NULL, w_space)))
+ ushortlist *u;
+ const char *me = getMyHostname();
+ p = xcalloc(1, sizeof(peer));
+ p->http_port = CACHE_HTTP_PORT;
+ p->icp_port = CACHE_ICP_PORT;
+ p->weight = 1;
+ if ((token = strtok(NULL, w_space)) == NULL) {
+ debug(0,0)("bad hostname\n");
self_destruct();
- if (!(peer.type = strtok(NULL, w_space)))
+ }
+ p->host = xstrdup(token);
+ if ((token = strtok(NULL, w_space)) == NULL) {
+ debug(0,0)("bad type\n");
self_destruct();
+ }
+ p->type = parseNeighborType(token);
GetInteger(i);
- peer.http = (u_short) i;
+ p->http_port = (u_short) i;
GetInteger(i);
- peer.icp = (u_short) i;
+ p->icp_port = (u_short) i;
+ if (strcmp(p->host, me) == 0) {
+ for (u = Config.Port.http; u; u = u->next) {
+ if (p->http_port != u->i)
+ continue;
+ debug(15, 0) ("parse_peer: Peer looks like myself: %s %s/%d/%d\n",
+ p->type, p->host, p->http_port, p->icp_port);
+ self_destruct();
+ }
+ }
while ((token = strtok(NULL, w_space))) {
if (!strcasecmp(token, "proxy-only")) {
- peer.options |= NEIGHBOR_PROXY_ONLY;
+ p->options |= NEIGHBOR_PROXY_ONLY;
} else if (!strcasecmp(token, "no-query")) {
- peer.options |= NEIGHBOR_NO_QUERY;
+ p->options |= NEIGHBOR_NO_QUERY;
} else if (!strcasecmp(token, "multicast-responder")) {
- peer.options |= NEIGHBOR_MCAST_RESPONDER;
+ p->options |= NEIGHBOR_MCAST_RESPONDER;
} else if (!strncasecmp(token, "weight=", 7)) {
- peer.weight = atoi(token + 7);
+ p->weight = atoi(token + 7);
} else if (!strncasecmp(token, "ttl=", 4)) {
- peer.mcast_ttl = atoi(token + 4);
- if (peer.mcast_ttl < 0)
- peer.mcast_ttl = 0;
- if (peer.mcast_ttl > 128)
- peer.mcast_ttl = 128;
+ p->mcast.ttl = atoi(token + 4);
+ if (p->mcast.ttl < 0)
+ p->mcast.ttl = 0;
+ if (p->mcast.ttl > 128)
+ p->mcast.ttl = 128;
} else if (!strncasecmp(token, "default", 7)) {
- peer.options |= NEIGHBOR_DEFAULT_PARENT;
+ p->options |= NEIGHBOR_DEFAULT_PARENT;
} else if (!strncasecmp(token, "round-robin", 11)) {
- peer.options |= NEIGHBOR_ROUNDROBIN;
+ p->options |= NEIGHBOR_ROUNDROBIN;
} else {
- debug(3, 0) ("parse_cache_peer: token='%s'\n", token);
+ debug(3, 0) ("parse_peer: token='%s'\n", token);
self_destruct();
}
}
- if (peer.weight < 1)
- peer.weight = 1;
- p = xcalloc(1, sizeof(cache_peer));
- *p = peer;
- p->host = xstrdup(peer.host);
- p->type = xstrdup(peer.type);
+ if (p->weight < 1)
+ p->weight = 1;
+ p->icp_version = ICP_VERSION_CURRENT;
+ p->tcp_up = 1;
+ cbdataAdd(p);
while (*head != NULL)
head = &(*head)->next;
*head = p;
+ Config.npeers++;
}
static void
-free_cache_peer(cache_peer ** P)
+free_peer(peer ** P)
{
- cache_peer *p;
+ peer *p;
while ((p = *P)) {
*P = p->next;
- xfree(p->host);
- xfree(p->type);
- xfree(p);
+ peerDestroy(p);
}
}
if (!(host = strtok(NULL, w_space)))
self_destruct();
while ((aclname = strtok(NULL, list_sep))) {
- cache_peer *p;
+ peer *p;
acl_list *L = NULL;
acl_list **Tail = NULL;
acl *a = NULL;
- if ((p = configFindPeer(host)) == NULL) {
+ if ((p = peerFindByName(host)) == NULL) {
debug(15, 0) ("%s, line %d: No cache_host '%s'\n",
cfg_filename, config_lineno, host);
return;
}
}
-static cache_peer *
-configFindPeer(const char *name)
-{
- cache_peer *p = NULL;
- for (p = Config.peers; p; p = p->next) {
- if (!strcasecmp(name, p->host))
- break;
- }
- return p;
-}
-
static void
parse_hostdomain(void)
{
while ((domain = strtok(NULL, list_sep))) {
domain_ping *l = NULL;
domain_ping **L = NULL;
- cache_peer *p;
- if ((p = configFindPeer(host)) == NULL) {
+ peer *p;
+ if ((p = peerFindByName(host)) == NULL) {
debug(15, 0) ("%s, line %d: No cache_host '%s'\n",
cfg_filename, config_lineno, host);
continue;
while ((domain = strtok(NULL, list_sep))) {
domain_type *l = NULL;
domain_type **L = NULL;
- cache_peer *p;
- if ((p = configFindPeer(host)) == NULL) {
+ peer *p;
+ if ((p = peerFindByName(host)) == NULL) {
debug(15, 0) ("%s, line %d: No cache_host '%s'\n",
cfg_filename, config_lineno, host);
return;
# OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM
#-----------------------------------------------------------------------------
-NAME: cache_peer cache_host
-TYPE: cache_peer
+NAME: cache_peer
+TYPE: peer
DEFAULT: none
LOC: Config.peers
DOC_START
/*
- * $Id: main.cc,v 1.163 1997/07/15 23:23:28 wessels Exp $
+ * $Id: main.cc,v 1.164 1997/07/16 04:48:29 wessels Exp $
*
* DEBUG: section 1 Startup and Main Loop
* AUTHOR: Harvest Derived
{
debug(1, 0) ("Restarting Squid Cache (version %s)...\n", version_string);
/* Already called serverConnectionsClose and ipcacheShutdownServers() */
- neighborsDestroy();
parseConfigFile(ConfigFile);
_db_init(Config.Log.log, Config.debugOptions);
ipcache_restart(); /* clear stuck entries */
/*
- * $Id: neighbors.cc,v 1.151 1997/07/15 23:23:30 wessels Exp $
+ * $Id: neighbors.cc,v 1.152 1997/07/16 04:48:29 wessels Exp $
*
* DEBUG: section 15 Neighbor Routines
* AUTHOR: Harvest Derived
static u_short echo_port;
static int NLateReplies = 0;
-
-static struct {
- int n;
- peer *peers_head;
- peer *peers_tail;
- peer *first_ping;
- peer *removed;
-} Peers = {
-
- 0, NULL, NULL, NULL
-};
+static peer *first_ping = NULL;
char *
neighborTypeStr(const peer * p)
struct in_addr ip = from->sin_addr;
peer *p = NULL;
debug(15, 3) ("whichPeer: from %s port %d\n", inet_ntoa(ip), port);
- for (p = Peers.peers_head; p; p = p->next) {
+ for (p = Config.peers; p; p = p->next) {
for (j = 0; j < p->n_addresses; j++) {
if (ip.s_addr == p->addresses[j].s_addr && port == p->icp_port) {
return p;
{
peer *p = NULL;
int count = 0;
- for (p = Peers.peers_head; p; p = p->next)
+ for (p = Config.peers; p; p = p->next)
if (peerWouldBePinged(p, request))
count++;
debug(15, 3) ("neighborsCount: %d\n", count);
{
peer *p = NULL;
peer *q = NULL;
- for (q = Peers.peers_head; q; q = q->next) {
+ for (q = Config.peers; q; q = q->next) {
if (!peerHTTPOkay(q, request))
continue;
if (neighborType(q, request) != PEER_PARENT)
getFirstUpParent(request_t * request)
{
peer *p = NULL;
- for (p = Peers.peers_head; p; p = p->next) {
+ for (p = Config.peers; p; p = p->next) {
if (!neighborUp(p))
continue;
if (neighborType(p, request) != PEER_PARENT)
{
peer *p;
peer *q = NULL;
- for (p = Peers.peers_head; p; p = p->next) {
+ for (p = Config.peers; p; p = p->next) {
if (!BIT_TEST(p->options, NEIGHBOR_ROUNDROBIN))
continue;
if (neighborType(p, request) != PEER_PARENT)
getDefaultParent(request_t * request)
{
peer *p = NULL;
- for (p = Peers.peers_head; p; p = p->next) {
+ for (p = Config.peers; p; p = p->next) {
if (neighborType(p, request) != PEER_PARENT)
continue;
if (!BIT_TEST(p->options, NEIGHBOR_DEFAULT_PARENT))
peer *
getFirstPeer(void)
{
- return Peers.peers_head;
+ return Config.peers;
}
static void
{
peer *p = NULL;
peer **P = NULL;
- p = Peers.peers_head;
- P = &Peers.peers_head;
+ p = Config.peers;
+ P = &Config.peers;
while (p) {
if (target == p)
break;
}
if (p) {
*P = p->next;
- p->next = Peers.removed;
- Peers.removed = p;
- p->stats.ack_deficit = HIER_MAX_DEFICIT;
- Peers.n--;
- }
- Peers.first_ping = Peers.peers_head;
-}
-
-void
-neighborsDestroy(void)
-{
- peer *p = NULL;
- peer *next = NULL;
- debug(15, 3) ("neighborsDestroy: called\n");
- for (p = Peers.peers_head; p; p = next) {
- next = p->next;
peerDestroy(p);
- Peers.n--;
+ Config.npeers--;
}
- for (p = Peers.removed; p; p = next) {
- next = p->next;
- peerDestroy(p);
- }
- memset(&Peers, '\0', sizeof(Peers));
+ first_ping = Config.peers;
}
void
int queries_sent = 0;
int peers_pinged = 0;
- if (Peers.peers_head == NULL)
+ if (Config.peers == NULL)
return 0;
if (theOutIcpConnection < 0) {
debug(15, 0) ("neighborsUdpPing: There is no ICP socket!\n");
mem->start_ping = current_time;
mem->icp_reply_callback = callback;
mem->ircb_data = callback_data;
- for (i = 0, p = Peers.first_ping; i++ < Peers.n; p = p->next) {
+ for (i = 0, p = first_ping; i++ < Config.npeers; p = p->next) {
if (p == NULL)
- p = Peers.peers_head;
+ p = Config.peers;
debug(15, 5) ("neighborsUdpPing: Peer %s\n", p->host);
if (!peerWouldBePinged(p, request))
continue; /* next peer */
}
}
}
- if ((Peers.first_ping = Peers.first_ping->next) == NULL)
- Peers.first_ping = Peers.peers_head;
+ if ((first_ping = first_ping->next) == NULL)
+ first_ping = Config.peers;
/* only do source_ping if we have neighbors */
- if (Peers.n) {
+ if (Config.npeers) {
if (!Config.sourcePing) {
debug(15, 6) ("neighborsUdpPing: Source Ping is disabled.\n");
} else if ((ia = ipcache_gethostbyname(host, 0))) {
}
}
-void
-neighborAdd(const char *host,
- const char *type,
- int http_port,
- int icp_port,
- int options,
- int weight,
- int mcast_ttl)
-{
- peer *p = NULL;
- ushortlist *u;
- const char *me = getMyHostname();
- if (!strcmp(host, me)) {
- for (u = Config.Port.http; u; u = u->next) {
- if (http_port != u->i)
- continue;
- debug(15, 0) ("neighborAdd: skipping cache_host %s %s/%d/%d\n",
- type, host, http_port, icp_port);
- return;
- }
- }
- p = xcalloc(1, sizeof(peer));
- cbdataAdd(p);
- p->http_port = http_port;
- p->icp_port = icp_port;
- p->mcast.ttl = mcast_ttl;
- p->options = options;
- p->weight = weight;
- p->host = xstrdup(host);
- p->pinglist = NULL;
- p->typelist = NULL;
- p->acls = NULL;
- p->icp_version = ICP_VERSION_CURRENT;
- p->type = parseNeighborType(type);
- p->tcp_up = 1;
-
- /* Append peer */
- if (!Peers.peers_head)
- Peers.peers_head = p;
- if (Peers.peers_tail)
- Peers.peers_tail->next = p;
- Peers.peers_tail = p;
- Peers.n++;
- if (!Peers.first_ping)
- Peers.first_ping = p;
-}
-
peer *
-neighborFindByName(const char *name)
+peerFindByName(const char *name)
{
peer *p = NULL;
- for (p = Peers.peers_head; p; p = p->next) {
+ for (p = Config.peers; p; p = p->next) {
if (!strcasecmp(name, p->host))
break;
}
peerRefreshDNS(void *junk)
{
peer *p = NULL;
- peer *next = Peers.peers_head;
+ peer *next = Config.peers;
while ((p = next)) {
next = p->next;
p->ip_lookup_pending = 1;
extern void ipcache_init _PARAMS((void));
extern void stat_ipcache_get _PARAMS((StoreEntry *));
extern int ipcacheQueueDrain _PARAMS((void));
-extern void ipcacheOpenServers _PARAMS((void));
extern void ipcacheCycleAddr _PARAMS((const char *name));
extern void ipcacheRemoveBadAddr _PARAMS((const char *name, struct in_addr));
extern void ipcacheFreeMemory _PARAMS((void));
extern void neighborAdd _PARAMS((const char *, const char *, int, int, int, int, int));
extern void neighbors_open _PARAMS((int));
extern void neighborsDestroy _PARAMS((void));
-extern peer *neighborFindByName _PARAMS((const char *));
+extern peer *peerFindByName _PARAMS((const char *));
extern void neighbors_init _PARAMS((void));
extern peer *getDefaultParent _PARAMS((request_t * request));
extern peer *getRoundRobinParent _PARAMS((request_t * request));
/*
- * $Id: ssl.cc,v 1.56 1997/07/14 23:45:04 wessels Exp $
+ * $Id: ssl.cc,v 1.57 1997/07/16 04:48:31 wessels Exp $
*
* DEBUG: section 26 Secure Sockets Layer Proxy
* AUTHOR: Duane Wessels
sslState->port = request->port;
} else if (p->http_port != 0) {
sslState->port = p->http_port;
- } else if ((g = neighborFindByName(p->host))) {
+ } else if ((g = peerFindByName(p->host))) {
sslState->port = g->http_port;
} else {
sslState->port = CACHE_HTTP_PORT;
struct _relist *next;
};
-struct _cache_peer {
- char *host;
- char *type;
- u_short http;
- u_short icp;
- int options;
- int weight;
- int mcast_ttl;
- domain_ping *pinglist;
- domain_type *typelist;
- acl_list *acls;
- struct _cache_peer *next;
-};
-
struct _SquidConfig {
struct {
size_t maxSize;
wordlist *mcast_group_list;
wordlist *dns_testname_list;
relist *cache_stop_relist;
- cache_peer *peers;
- cache_peer *sslProxy;
- cache_peer *passProxy;
+ peer *peers;
+ int npeers;
struct {
int size;
int low;
/*
- * $Id: tunnel.cc,v 1.56 1997/07/14 23:45:04 wessels Exp $
+ * $Id: tunnel.cc,v 1.57 1997/07/16 04:48:31 wessels Exp $
*
* DEBUG: section 26 Secure Sockets Layer Proxy
* AUTHOR: Duane Wessels
sslState->port = request->port;
} else if (p->http_port != 0) {
sslState->port = p->http_port;
- } else if ((g = neighborFindByName(p->host))) {
+ } else if ((g = peerFindByName(p->host))) {
sslState->port = g->http_port;
} else {
sslState->port = CACHE_HTTP_PORT;
typedef struct _intlist intlist;
typedef struct _ushortlist ushortlist;
typedef struct _relist relist;
-typedef struct _cache_peer cache_peer;
typedef struct _SquidConfig SquidConfig;
typedef struct _SquidConfig2 SquidConfig2;
typedef struct _close_handler close_handler;