]> git.ipfire.org Git - thirdparty/squid.git/blame - src/PeerDigest.h
Docs: Copyright updates for 2018 (#114)
[thirdparty/squid.git] / src / PeerDigest.h
CommitLineData
aa839030 1/*
5b74111a 2 * Copyright (C) 1996-2018 The Squid Software Foundation and contributors
aa839030 3 *
bbc27441
AJ
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
aa839030 7 */
8
9#ifndef SQUID_PEERDIGEST_H
10#define SQUID_PEERDIGEST_H
11
aa839030 12#if USE_CACHE_DIGESTS
13
14#include "cbdata.h"
e8baef82 15#include "StatCounters.h"
aa839030 16
1b2f0924
FC
17class Version
18{
4d5904f7 19public:
f53969cc
SM
20 short int current; /* current version */
21 short int required; /* minimal version that can safely handle current version */
aa839030 22};
23
24/* digest control block; used for transmission and storage */
25
26class StoreDigestCBlock
27{
26ac0430 28public:
aa839030 29 Version ver;
30 int capacity;
31 int count;
32 int del_count;
33 int mask_size;
34 unsigned char bits_per_entry;
35 unsigned char hash_func_count;
36 short int reserved_short;
37 int reserved[32 - 6];
38};
39
73a4878a 40class HttpRequest;
c6983ec7 41class PeerDigest;
73a4878a
AJ
42class store_client;
43
1b2f0924
FC
44class DigestFetchState
45{
a44986dc
AJ
46 CBDATA_CLASS(DigestFetchState);
47
efdc32f4 48public:
a44986dc
AJ
49 DigestFetchState(PeerDigest *,HttpRequest *);
50 ~DigestFetchState();
51
aa839030 52 PeerDigest *pd;
53 StoreEntry *entry;
54 StoreEntry *old_entry;
55 store_client *sc;
56 store_client *old_sc;
57 HttpRequest *request;
58 int offset;
831e953c 59 uint32_t mask_offset;
aa839030 60 time_t start_time;
61 time_t resp_time;
62 time_t expires;
63
26ac0430 64 struct {
aa839030 65 int msg;
66 int bytes;
a44986dc 67 } sent, recv;
aa839030 68
aa839030 69 char buf[SM_PAGE_SIZE];
70 ssize_t bufofs;
71 digest_read_state_t state;
72};
73
74class PeerDigest
75{
5c2f68b7 76 CBDATA_CLASS(PeerDigest);
aa839030 77
78public:
a3c6762c 79 CachePeer *peer; /**< pointer back to peer structure, argh */
e1f7507e
AJ
80 CacheDigest *cd; /**< actual digest structure */
81 String host; /**< copy of peer->host */
82 const char *req_result; /**< text status of the last request */
aa839030 83
26ac0430 84 struct {
be4d35dc
FC
85 bool needed; /**< there were requests for this digest */
86 bool usable; /**< can be used for lookups */
87 bool requested; /**< in process of receiving [fresh] digest */
3d0ac046 88 } flags;
aa839030 89
26ac0430 90 struct {
aa839030 91 /* all times are absolute unless augmented with _delay */
f53969cc
SM
92 time_t initialized; /* creation */
93 time_t needed; /* first lookup/use by a peer */
94 time_t next_check; /* next scheduled check/refresh event */
95 time_t retry_delay; /* delay before re-checking _invalid_ digest */
96 time_t requested; /* requested a fresh copy of a digest */
97 time_t req_delay; /* last request response time */
98 time_t received; /* received the current copy of a digest */
99 time_t disabled; /* disabled for good */
3d0ac046 100 } times;
aa839030 101
26ac0430 102 struct {
e8baef82 103 CacheDigestGuessStats guess;
aa839030 104 int used_count;
105
26ac0430 106 struct {
aa839030 107 int msgs;
a0864754 108 ByteCounter kbytes;
3d0ac046
HN
109 } sent, recv;
110 } stats;
aa839030 111};
112
113extern const Version CacheDigestVer;
e1f7507e 114
8a648e8d
FC
115PeerDigest *peerDigestCreate(CachePeer * p);
116void peerDigestNeeded(PeerDigest * pd);
117void peerDigestNotePeerGone(PeerDigest * pd);
118void peerDigestStatsReport(const PeerDigest * pd, StoreEntry * e);
fc54b8d2 119
e1f7507e 120#endif /* USE_CACHE_DIGESTS */
aa839030 121
122#endif /* SQUID_PEERDIGEST_H */
f53969cc 123