2 * Copyright (C) 1996-2023 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_ICP_H
10 #define SQUID_SRC_ICP_H
13 \defgroup ServerProtocolICPAPI ICP
14 \ingroup ServerProtocol
17 #include "base/RefCount.h"
18 #include "comm/forward.h"
19 #include "icp_opcode.h"
20 #include "ip/Address.h"
22 #include "store_key_md5.h"
23 #include "StoreClient.h"
28 typedef RefCount
<AccessLogEntry
> AccessLogEntryPointer
;
31 * Wire-level ICP header.
32 * DO NOT add or move fields.
33 * DO NOT add virtual methods.
40 unsigned char version
;
41 /** total length (bytes) */
42 unsigned short length
;
43 /** req number (req'd for UDP) */
51 icp_common_t(char *buf
, unsigned int len
);
53 void handleReply(char *buf
, Ip::Address
&from
);
54 icp_opcode
getOpCode() const;
56 /// \returns newly allocated buffer with an ICP message, including header
57 static icp_common_t
*CreateMessage(icp_opcode opcode
, int flags
, const char *url
, int reqnum
, int pad
);
61 class ICPState
: public StoreClient
65 ICPState(icp_common_t
&aHeader
, HttpRequest
*aRequest
);
68 /// whether the cache contains the requested entry
77 mutable AccessLogEntryPointer al
;
81 LogTags
*loggingTags() const override
;
82 void fillChecklist(ACLFilledChecklist
&) const override
;
84 /// either confirms and starts processing a cache hit or returns false
85 bool confirmAndPrepHit(const StoreEntry
&) const;
88 extern Comm::ConnectionPointer icpIncomingConn
;
89 extern Comm::ConnectionPointer icpOutgoingConn
;
90 extern Ip::Address theIcpPublicHostID
;
92 /// \ingroup ServerProtocolICPAPI
93 HttpRequest
* icpGetRequest(char *url
, int reqnum
, int fd
, Ip::Address
&from
);
95 /// \ingroup ServerProtocolICPAPI
96 bool icpAccessAllowed(Ip::Address
&from
, HttpRequest
* icp_request
);
98 /// \ingroup ServerProtocolICPAPI
99 void icpCreateAndSend(icp_opcode
, int flags
, char const *url
, int reqnum
, int pad
, int fd
, const Ip::Address
&from
, AccessLogEntryPointer
);
101 /// \ingroup ServerProtocolICPAPI
102 icp_opcode
icpGetCommonOpcode();
104 /// \ingroup ServerProtocolICPAPI
105 void icpDenyAccess(Ip::Address
&from
, char *url
, int reqnum
, int fd
);
107 /// \ingroup ServerProtocolICPAPI
110 /// \ingroup ServerProtocolICPAPI
111 void icpHandleIcpV3(int, Ip::Address
&, char *, int);
113 /// \ingroup ServerProtocolICPAPI
114 void icpOpenPorts(void);
116 /// \ingroup ServerProtocolICPAPI
117 void icpConnectionShutdown(void);
119 /// \ingroup ServerProtocolICPAPI
120 void icpClosePorts(void);
122 /// \ingroup ServerProtocolICPAPI
123 int icpSetCacheKey(const cache_key
* key
);
125 /// \ingroup ServerProtocolICPAPI
126 const cache_key
*icpGetCacheKey(const char *url
, int reqnum
);
128 #endif /* SQUID_SRC_ICP_H */