]> git.ipfire.org Git - thirdparty/squid.git/blob - src/CachePeer.h
Prep for 3.3.12 and 3.4.4
[thirdparty/squid.git] / src / CachePeer.h
1 #ifndef SQUID_CACHEPEER_H_
2 #define SQUID_CACHEPEER_H_
3 /*
4 * SQUID Web Proxy Cache http://www.squid-cache.org/
5 * ----------------------------------------------------------
6 *
7 * Squid is the result of efforts by numerous individuals from
8 * the Internet community; see the CONTRIBUTORS file for full
9 * details. Many organizations have provided support for Squid's
10 * development; see the SPONSORS file for full details. Squid is
11 * Copyrighted (C) 2001 by the Regents of the University of
12 * California; see the COPYRIGHT file for full details. Squid
13 * incorporates software developed and/or copyrighted by other
14 * sources; see the CREDITS file for full details.
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 2 of the License, or
19 * (at your option) any later version.
20 *
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 *
26 * You should have received a copy of the GNU General Public License
27 * along with this program; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
29 *
30 */
31
32 #include "acl/forward.h"
33 #include "enums.h"
34 #include "icp_opcode.h"
35 #include "ip/Address.h"
36
37 //TODO: remove, it is unconditionally defined and always used.
38 #define PEER_MULTICAST_SIBLINGS 1
39
40 #if USE_SSL
41 #include <openssl/ssl.h>
42 #endif
43
44 class CachePeerDomainList;
45 class NeighborTypeDomainList;
46 class PeerDigest;
47
48 // currently a POD
49 class CachePeer
50 {
51 public:
52 u_int index;
53 char *name;
54 char *host;
55 peer_t type;
56
57 Ip::Address in_addr;
58
59 struct {
60 int pings_sent;
61 int pings_acked;
62 int fetches;
63 int rtt;
64 int ignored_replies;
65 int n_keepalives_sent;
66 int n_keepalives_recv;
67 time_t probe_start;
68 time_t last_query;
69 time_t last_reply;
70 time_t last_connect_failure;
71 time_t last_connect_probe;
72 int logged_state; /* so we can print dead/revived msgs */
73 int conn_open; /* current opened connections */
74 } stats;
75
76 struct {
77 int version;
78 int counts[ICP_END+1];
79 unsigned short port;
80 } icp;
81
82 #if USE_HTCP
83 struct {
84 double version;
85 int counts[2];
86 unsigned short port;
87 } htcp;
88 #endif
89
90 unsigned short http_port;
91 CachePeerDomainList *peer_domain;
92 NeighborTypeDomainList *typelist;
93 acl_access *access;
94
95 struct {
96 bool proxy_only;
97 bool no_query;
98 bool background_ping;
99 bool no_digest;
100 bool default_parent;
101 bool roundrobin;
102 bool weighted_roundrobin;
103 bool mcast_responder;
104 bool closest_only;
105 #if USE_HTCP
106 bool htcp;
107 bool htcp_oldsquid;
108 bool htcp_no_clr;
109 bool htcp_no_purge_clr;
110 bool htcp_only_clr;
111 bool htcp_forward_clr;
112 #endif
113 bool no_netdb_exchange;
114 #if USE_DELAY_POOLS
115 bool no_delay;
116 #endif
117 bool allow_miss;
118 bool carp;
119 struct {
120 bool set; //If false, whole url is to be used. Overrides others
121 bool scheme;
122 bool host;
123 bool port;
124 bool path;
125 bool params;
126 } carp_key;
127 #if USE_AUTH
128 bool userhash;
129 #endif
130 bool sourcehash;
131 bool originserver;
132 bool no_tproxy;
133 #if PEER_MULTICAST_SIBLINGS
134 bool mcast_siblings;
135 #endif
136 } options;
137
138 int weight;
139 int basetime;
140
141 struct {
142 double avg_n_members;
143 int n_times_counted;
144 int n_replies_expected;
145 int ttl;
146 int id;
147
148 struct {
149 bool count_event_pending;
150 bool counting;
151 } flags;
152 } mcast;
153 #if USE_CACHE_DIGESTS
154
155 PeerDigest *digest;
156 char *digest_url;
157 #endif
158
159 int tcp_up; /* 0 if a connect() fails */
160
161 Ip::Address addresses[10];
162 int n_addresses;
163 int rr_count;
164 CachePeer *next;
165 int testing_now;
166
167 struct {
168 unsigned int hash;
169 double load_multiplier;
170 double load_factor; /* normalized weight value */
171 } carp;
172 #if USE_AUTH
173 struct {
174 unsigned int hash;
175 double load_multiplier;
176 double load_factor; /* normalized weight value */
177 } userhash;
178 #endif
179 struct {
180 unsigned int hash;
181 double load_multiplier;
182 double load_factor; /* normalized weight value */
183 } sourcehash;
184
185 char *login; /* Proxy authorization */
186 time_t connect_timeout;
187 int connect_fail_limit;
188 int max_conn;
189 char *domain; /* Forced domain */
190 #if USE_SSL
191
192 int use_ssl;
193 char *sslcert;
194 char *sslkey;
195 int sslversion;
196 char *ssloptions;
197 char *sslcipher;
198 char *sslcafile;
199 char *sslcapath;
200 char *sslcrlfile;
201 char *sslflags;
202 char *ssldomain;
203 SSL_CTX *sslContext;
204 SSL_SESSION *sslSession;
205 #endif
206
207 int front_end_https;
208 int connection_auth;
209 };
210
211 #endif /* SQUID_CACHEPEER_H_ */