54#if HAVE_SYS_CAPABILITY_H
55#include <sys/capability.h>
65#define LINK_TO_SQUID squid_link
71Win32__WSAFDIsSet(
int fd, fd_set FAR * set)
74 SOCKET s =
F->win32.handle;
76 return __WSAFDIsSet(s, set);
82#define LINK_TO_SQUID 1
86using 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.");
247main(
int argc,
char *argv[])
249 std::cerr << argv[0] <<
": ICMP support not compiled in." << std::endl;
static void NameThisHelper(const char *name)
void Recv(void) override
Handle ICMP responses.
int Open() override
Start pinger helper and initiate control channel.
int Open() override
Start pinger helper and initiate control channel.
void Recv(void) override
Handle ICMP requests from squid, passing to helpers.
void Close() override
Shutdown pinger helper and control channel.
int Open() override
Start and initiate control channel to squid.
virtual void Close()
Shutdown pinger helper and control channel.
Clock::duration total() const
A const & max(A const &lhs, A const &rhs)
#define debugs(SECTION, LEVEL, CONTENT)
static uint32 F(uint32 X, uint32 Y, uint32 Z)
void ProbeTransport(void)
Probe to discover IPv6 capabilities.
IcmpPinger control
pinger helper contains one of these as a global object.
static const auto PingerTimeout
Icmp6 icmp6
pinger helper contains one of these as a global object.
Icmp4 icmp4
pinger helper contains one of these as a global object.
time_t getCurrentTime() STUB_RETVAL(0) int tvSubUsec(struct timeval
const char * xstrerr(int error)