2 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
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.
9 #ifndef SQUID_SRC_PEERDIGEST_H
10 #define SQUID_SRC_PEERDIGEST_H
15 #include "StatCounters.h"
20 short int current
; /* current version */
21 short int required
; /* minimal version that can safely handle current version */
24 /* digest control block; used for transmission and storage */
26 class StoreDigestCBlock
34 unsigned char bits_per_entry
;
35 unsigned char hash_func_count
;
36 short int reserved_short
;
44 class DigestFetchState
46 CBDATA_CLASS(DigestFetchState
);
49 DigestFetchState(PeerDigest
*,HttpRequest
*);
52 CbcPointer
<PeerDigest
> pd
;
54 StoreEntry
*old_entry
;
69 char buf
[SM_PAGE_SIZE
];
71 digest_read_state_t state
;
76 CBDATA_CLASS(PeerDigest
);
79 PeerDigest(CachePeer
*);
82 /// reacts to digest transfer completion
83 /// \prec DigestFetchState stats were finalized (by calling peerDigestFetchSetStats())
84 void noteFetchFinished(const DigestFetchState
&, const char *outcomeDescription
, bool sawError
);
86 CbcPointer
<CachePeer
> peer
; ///< pointer back to peer structure, argh
87 CacheDigest
*cd
= nullptr; /**< actual digest structure */
88 const SBuf host
; ///< copy of peer->host
89 const char *req_result
= nullptr; /**< text status of the last request */
92 bool needed
= false; /**< there were requests for this digest */
93 bool usable
= false; /**< can be used for lookups */
94 bool requested
= false; /**< in process of receiving [fresh] digest */
98 /* all times are absolute unless augmented with _delay */
99 time_t initialized
= 0; /* creation */
100 time_t needed
= 0; /* first lookup/use by a peer */
101 time_t next_check
= 0; /* next scheduled check/refresh event */
102 time_t retry_delay
= 0; /* delay before re-checking _invalid_ digest */
103 time_t requested
= 0; /* requested a fresh copy of a digest */
104 time_t req_delay
= 0; /* last request response time */
105 time_t received
= 0; /* received the current copy of a digest */
106 time_t disabled
= 0; /* disabled for good */
110 CacheDigestGuessStats guess
;
120 extern const Version CacheDigestVer
;
122 void peerDigestNeeded(PeerDigest
* pd
);
123 void peerDigestNotePeerGone(PeerDigest
* pd
);
124 void peerDigestStatsReport(const PeerDigest
* pd
, StoreEntry
* e
);
126 #endif /* USE_CACHE_DIGESTS */
128 #endif /* SQUID_SRC_PEERDIGEST_H */