]> git.ipfire.org Git - thirdparty/squid.git/blob - src/helper.h
Merged from trunk
[thirdparty/squid.git] / src / helper.h
1 /*
2 * DEBUG: section 84 Helper process maintenance
3 * AUTHOR: Harvest Derived?
4 *
5 * SQUID Web Proxy Cache http://www.squid-cache.org/
6 * ----------------------------------------------------------
7 *
8 * Squid is the result of efforts by numerous individuals from
9 * the Internet community; see the CONTRIBUTORS file for full
10 * details. Many organizations have provided support for Squid's
11 * development; see the SPONSORS file for full details. Squid is
12 * Copyrighted (C) 2001 by the Regents of the University of
13 * California; see the COPYRIGHT file for full details. Squid
14 * incorporates software developed and/or copyrighted by other
15 * sources; see the CREDITS file for full details.
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
30 *
31 */
32
33 #ifndef SQUID_HELPER_H
34 #define SQUID_HELPER_H
35
36 #include "squid.h"
37 #include "cbdata.h"
38 #include "ip/IpAddress.h"
39
40 class helper_request;
41
42 typedef struct _helper helper;
43
44 typedef struct _helper_stateful statefulhelper;
45
46 typedef struct _helper_server helper_server;
47
48 typedef struct _helper_stateful_server helper_stateful_server;
49
50 typedef struct _helper_flags helper_flags;
51
52 typedef struct _helper_stateful_flags helper_stateful_flags;
53
54 typedef stateful_helper_callback_t HLPSCB(void *, void *lastserver, char *buf);
55
56 struct _helper {
57 wordlist *cmdline;
58 dlink_list servers;
59 dlink_list queue;
60 const char *id_name;
61 int n_to_start; ///< Configuration setting of how many helper children should be running
62 int n_running; ///< Total helper children objects currently existing
63 int n_active; ///< Count of helper children active (not shutting down)
64 int ipc_type;
65 IpAddress addr;
66 unsigned int concurrency;
67 time_t last_queue_warn;
68 time_t last_restart;
69
70 struct {
71 int requests;
72 int replies;
73 int queue_size;
74 int avg_svc_time;
75 } stats;
76 };
77
78 struct _helper_stateful {
79 wordlist *cmdline;
80 dlink_list servers;
81 dlink_list queue;
82 const char *id_name;
83 int n_to_start; ///< Configuration setting of how many helper children should be running
84 int n_running; ///< Total helper children objects currently existing
85 int n_active; ///< Count of helper children active (not shutting down)
86 int ipc_type;
87 IpAddress addr;
88 MemAllocator *datapool;
89 HLPSAVAIL *IsAvailable;
90 HLPSONEQ *OnEmptyQueue;
91 time_t last_queue_warn;
92 time_t last_restart;
93
94 struct {
95 int requests;
96 int replies;
97 int queue_size;
98 int avg_svc_time;
99 } stats;
100 };
101
102 struct _helper_server {
103 int index;
104 int pid;
105 IpAddress addr;
106 int rfd;
107 int wfd;
108 MemBuf *wqueue;
109 MemBuf *writebuf;
110 char *rbuf;
111 size_t rbuf_sz;
112 size_t roffset;
113
114 struct timeval dispatch_time;
115
116 struct timeval answer_time;
117
118 dlink_node link;
119 helper *parent;
120 helper_request **requests;
121
122 struct _helper_flags {
123 unsigned int writing:1;
124 unsigned int closing:1;
125 unsigned int shutdown:1;
126 } flags;
127
128 struct {
129 int uses;
130 unsigned int pending;
131 } stats;
132
133 void *hIpc;
134 };
135
136 class helper_stateful_request;
137
138 struct _helper_stateful_server {
139 int index;
140 int pid;
141 IpAddress addr;
142 int rfd;
143 int wfd;
144 /* MemBuf wqueue; */
145 /* MemBuf writebuf; */
146 char *rbuf;
147 size_t rbuf_sz;
148 size_t roffset;
149
150 struct timeval dispatch_time;
151
152 struct timeval answer_time;
153
154 dlink_node link;
155 dlink_list queue;
156 statefulhelper *parent;
157 helper_stateful_request *request;
158
159 struct _helper_stateful_flags {
160 unsigned int busy:1;
161 unsigned int closing:1;
162 unsigned int shutdown:1;
163 stateful_helper_reserve_t reserved;
164 } flags;
165
166 struct {
167 int uses;
168 int submits;
169 int releases;
170 int deferbyfunc;
171 int deferbycb;
172 } stats;
173 int deferred_requests; /* current number of deferred requests */
174 void *data; /* State data used by the calling routines */
175 void *hIpc;
176 };
177
178 class helper_request
179 {
180
181 public:
182 MEMPROXY_CLASS(helper_request);
183 char *buf;
184 HLPCB *callback;
185 void *data;
186
187 struct timeval dispatch_time;
188 };
189
190 MEMPROXY_CLASS_INLINE(helper_request);
191
192 class helper_stateful_request
193 {
194
195 public:
196 MEMPROXY_CLASS(helper_stateful_request);
197 char *buf;
198 HLPSCB *callback;
199 int placeholder; /* if 1, this is a dummy request waiting for a stateful helper to become available for deferred requests.*/
200 void *data;
201 };
202
203 MEMPROXY_CLASS_INLINE(helper_stateful_request);
204
205 /* helper.c */
206 SQUIDCEXTERN void helperOpenServers(helper * hlp);
207 SQUIDCEXTERN void helperStatefulOpenServers(statefulhelper * hlp);
208 SQUIDCEXTERN void helperSubmit(helper * hlp, const char *buf, HLPCB * callback, void *data);
209 SQUIDCEXTERN void helperStatefulSubmit(statefulhelper * hlp, const char *buf, HLPSCB * callback, void *data, helper_stateful_server * lastserver);
210 SQUIDCEXTERN void helperStats(StoreEntry * sentry, helper * hlp, const char *label = NULL);
211 SQUIDCEXTERN void helperStatefulStats(StoreEntry * sentry, statefulhelper * hlp, const char *label = NULL);
212 SQUIDCEXTERN void helperShutdown(helper * hlp);
213 SQUIDCEXTERN void helperStatefulShutdown(statefulhelper * hlp);
214 SQUIDCEXTERN helper *helperCreate(const char *);
215 SQUIDCEXTERN statefulhelper *helperStatefulCreate(const char *);
216 SQUIDCEXTERN void helperFree(helper *);
217 SQUIDCEXTERN void helperStatefulFree(statefulhelper *);
218 SQUIDCEXTERN void helperStatefulReset(helper_stateful_server * srv);
219 SQUIDCEXTERN void helperStatefulReleaseServer(helper_stateful_server * srv);
220 SQUIDCEXTERN void *helperStatefulServerGetData(helper_stateful_server * srv);
221 SQUIDCEXTERN helper_stateful_server *helperStatefulDefer(statefulhelper *);
222
223
224
225 #endif /* SQUID_HELPER_H */