]> git.ipfire.org Git - thirdparty/squid.git/blob - src/tools.h
Source Format Enforcement (#532)
[thirdparty/squid.git] / src / tools.h
1 /*
2 * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
3 *
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.
7 */
8
9 /* DEBUG: section 21 Misc Functions */
10
11 #ifndef SQUID_TOOLS_H_
12 #define SQUID_TOOLS_H_
13
14 #include "sbuf/SBuf.h"
15 #include "typedefs.h"
16
17 class MemBuf;
18
19 extern int DebugSignal;
20
21 /// The Squid -n parameter service name.
22 /// Default is APP_SHORTNAME ('squid').
23 extern SBuf service_name;
24
25 void parseEtcHosts(void);
26 int getMyPort(void);
27 void setUmask(mode_t mask);
28 void strwordquote(MemBuf * mb, const char *str);
29
30 class Packable;
31
32 /* a common objPackInto interface; used by debugObj */
33 typedef void (*ObjPackMethod) (void *obj, Packable * p);
34
35 /* packs, then prints an object using debugs() */
36 void debugObj(int section, int level, const char *label, void *obj, ObjPackMethod pm);
37
38 /// callback type for signal handlers
39 typedef void SIGHDLR(int sig);
40
41 const char *getMyHostname(void);
42 const char *uniqueHostname(void);
43
44 void death(int sig);
45 void sigusr2_handle(int sig);
46 void sig_child(int sig);
47 void sig_shutdown(int sig); ///< handles shutdown notifications from kids
48 void leave_suid(void);
49 void enter_suid(void);
50 void no_suid(void);
51 void setMaxFD(void);
52 void setSystemLimits(void);
53 void squid_signal(int sig, SIGHDLR *, int flags);
54 void keepCapabilities(void);
55 void BroadcastSignalIfAny(int& sig);
56
57 /// whether the current process is the parent of all other Squid processes
58 bool IamMasterProcess();
59 /**
60 * whether the current process is dedicated to doing things that only
61 * a single process should do, such as PID file maintenance and WCCP
62 */
63 bool IamPrimaryProcess();
64 /// whether the current process coordinates worker processes
65 bool IamCoordinatorProcess();
66 /// whether the current process handles HTTP transactions and such
67 bool IamWorkerProcess();
68 /// whether the current process is dedicated to managing a cache_dir
69 bool IamDiskProcess();
70 /// Whether we are running in daemon mode
71 bool InDaemonMode(); // try using specific Iam*() checks above first
72 /// Whether there should be more than one worker process running
73 bool UsingSmp(); // try using specific Iam*() checks above first
74 /// number of Kid processes as defined in src/ipc/Kid.h
75 int NumberOfKids();
76 /// a string describing this process roles such as worker or coordinator
77 SBuf ProcessRoles();
78
79 void debug_trap(const char *);
80
81 void logsFlush(void);
82
83 void squid_getrusage(struct rusage *r);
84 double rusage_cputime(struct rusage *r);
85 int rusage_maxrss(struct rusage *r);
86 int rusage_pagefaults(struct rusage *r);
87 void releaseServerSockets(void);
88 void PrintRusage(void);
89 void dumpMallocStats(void);
90
91 #if _SQUID_NEXT_
92 typedef union wait PidStatus;
93 #else
94 typedef int PidStatus;
95 #endif
96
97 /**
98 * Compatibility wrapper function for waitpid
99 * \pid the pid of child proccess to wait for.
100 * \param status the exit status returned by waitpid
101 * \param flags WNOHANG or 0
102 */
103 pid_t WaitForOnePid(pid_t pid, PidStatus &status, int flags);
104
105 /**
106 * Wait for state changes in any of the kid processes.
107 * Equivalent to waitpid(-1, ...) system call
108 * \param status the exit status returned by waitpid
109 * \param flags WNOHANG or 0
110 */
111 inline pid_t WaitForAnyPid(PidStatus &status, int flags)
112 {
113 return WaitForOnePid(-1, status, flags);
114 }
115
116 #if _SQUID_WINDOWS_
117 /// xstrerror(errno) equivalent for Windows errors returned by GetLastError()
118 SBuf WindowsErrorMessage(DWORD errorId);
119 #endif // _SQUID_WINDOWS_
120
121 #endif /* SQUID_TOOLS_H_ */
122