Go to the documentation of this file.
   11 #define SQUID_HELPER 1 
   57 #if HAVE_SYS_CAPABILITY_H 
   58 #include <sys/capability.h> 
   68 #define LINK_TO_SQUID squid_link 
   74 Win32__WSAFDIsSet(
int fd, fd_set FAR * set)
 
   77     SOCKET s = F->win32.handle;
 
   79     return __WSAFDIsSet(s, set);
 
   85 #define LINK_TO_SQUID   1 
   89 using namespace std::literals::chrono_literals;
 
  100 static std::ostream &
 
  103     if (std::current_exception())
 
  106         os << 
"An undetermined failure";
 
  114     static bool terminating = 
false;
 
  143     int icmp4_worker = -1;
 
  144     int icmp6_worker = -1;
 
  157     if (icmp4_worker < 0) {
 
  160     max_fd = 
max(max_fd, icmp4_worker);
 
  164     if (icmp6_worker <0 ) {
 
  167     max_fd = 
max(max_fd, icmp6_worker);
 
  171     if (icmp4_worker < 0 && icmp6_worker < 0) {
 
  182     max_fd = 
max(max_fd, squid_link);
 
  184     if (setgid(getgid()) < 0) {
 
  191     if (setuid(getuid()) < 0) {
 
  212         if (cap_set_proc(caps) != 0) {
 
  230         if (icmp4_worker >= 0) {
 
  231             FD_SET(icmp4_worker, &R);
 
  233         if (icmp6_worker >= 0) {
 
  234             FD_SET(icmp6_worker, &R);
 
  237         FD_SET(squid_link, &R);
 
  240         const auto x = 
xselect(max_fd+1, &R, 
nullptr, 
nullptr, &tv);
 
  250         if (FD_ISSET(squid_link, &R)) {
 
  254         if (icmp6_worker >= 0 && FD_ISSET(icmp6_worker, &R)) {
 
  257         if (icmp4_worker >= 0 && FD_ISSET(icmp4_worker, &R)) {
 
  261         const auto delay = std::chrono::duration_cast<std::chrono::seconds>(timer.
total());
 
  264                 debugs(42, 
DBG_CRITICAL, 
"Closing. No requests in last " << delay.count() << 
" seconds.");
 
  279 main(
int, 
char *argv[])
 
  281     std::cerr << argv[0] << 
": ICMP support not compiled in." << std::endl;
 
  
const char * xstrerr(int error)
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.
ssize_t xsend(int socketFd, const void *buf, size_t bufLength, int flags)
POSIX send(2) equivalent.
static std::ostream & TerminationReason(std::ostream &os)
reports std::terminate() cause (e.g., an uncaught or prohibited exception)
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)
static void PrepareToDie()
std::ostream & CurrentException(std::ostream &os)
prints active (i.e., thrown but not yet handled) exception
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 xselect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
POSIX select(2) equivalent.
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)
static void OnTerminate()