Go to the documentation of this file.
11 #define SQUID_HELPER 1
54 #if HAVE_SYS_CAPABILITY_H
55 #include <sys/capability.h>
65 #define LINK_TO_SQUID squid_link
71 Win32__WSAFDIsSet(
int fd, fd_set FAR * set)
74 SOCKET s =
F->win32.handle;
76 return __WSAFDIsSet(s, set);
82 #define LINK_TO_SQUID 1
86 using namespace std::literals::chrono_literals;
111 int icmp4_worker = -1;
112 int icmp6_worker = -1;
125 if (icmp4_worker < 0) {
128 max_fd =
max(max_fd, icmp4_worker);
132 if (icmp6_worker <0 ) {
135 max_fd =
max(max_fd, icmp6_worker);
139 if (icmp4_worker < 0 && icmp6_worker < 0) {
150 max_fd =
max(max_fd, squid_link);
152 if (setgid(getgid()) < 0) {
159 if (setuid(getuid()) < 0) {
180 if (cap_set_proc(caps) != 0) {
198 if (icmp4_worker >= 0) {
199 FD_SET(icmp4_worker, &R);
201 if (icmp6_worker >= 0) {
202 FD_SET(icmp6_worker, &R);
205 FD_SET(squid_link, &R);
208 x = select(max_fd+1, &R,
nullptr,
nullptr, &tv);
218 if (FD_ISSET(squid_link, &R)) {
222 if (icmp6_worker >= 0 && FD_ISSET(icmp6_worker, &R)) {
225 if (icmp4_worker >= 0 && FD_ISSET(icmp4_worker, &R)) {
229 const auto delay = std::chrono::duration_cast<std::chrono::seconds>(timer.
total());
232 debugs(42,
DBG_CRITICAL,
"Closing. No requests in last " << delay.count() <<
" seconds.");
247 main(
int argc,
char *argv[])
249 std::cerr << argv[0] <<
": ICMP support not compiled in." << std::endl;
const char * xstrerr(int error)
static uint32 F(uint32 X, uint32 Y, uint32 Z)
const A & max(A const &lhs, A const &rhs)
int Open() override
Start pinger helper and initiate control channel.
virtual void Close()
Shutdown pinger helper and control channel.
time_t getCurrentTime() STUB_RETVAL(0) int tvSubUsec(struct timeval
int Open() override
Start pinger helper and initiate control channel.
static void NameThisHelper(const char *name)
Icmp6 icmp6
pinger helper contains one of these as a global object.
IcmpPinger control
pinger helper contains one of these as a global object.
static const auto PingerTimeout
void Recv(void) override
Handle ICMP responses.
int Open() override
Start and initiate control channel to squid.
void Close() override
Shutdown pinger helper and control channel.
Icmp4 icmp4
pinger helper contains one of these as a global object.
void Recv(void) override
Handle ICMP requests from squid, passing to helpers.
Clock::duration total() const
void ProbeTransport(void)
Probe to discover IPv6 capabilities.
#define debugs(SECTION, LEVEL, CONTENT)