]> git.ipfire.org Git - thirdparty/squid.git/blame - src/helper.h
Accept libtool 2.x
[thirdparty/squid.git] / src / helper.h
CommitLineData
51ee7c82 1/*
51ee7c82 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.
26ac0430 21 *
51ee7c82 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.
26ac0430 26 *
51ee7c82 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"
aa839030 37#include "cbdata.h"
9837e5f0 38#include "ip/IpAddress.h"
aa839030 39
40class helper_request;
41
42typedef struct _helper helper;
43
44typedef struct _helper_stateful statefulhelper;
45
46typedef struct _helper_server helper_server;
47
48typedef struct _helper_stateful_server helper_stateful_server;
49
50typedef struct _helper_flags helper_flags;
51
52typedef struct _helper_stateful_flags helper_stateful_flags;
53
54typedef stateful_helper_callback_t HLPSCB(void *, void *lastserver, char *buf);
55
26ac0430 56struct _helper {
aa839030 57 wordlist *cmdline;
58 dlink_list servers;
59 dlink_list queue;
60 const char *id_name;
d974a072
AJ
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)
aa839030 64 int ipc_type;
ad61a2b4 65 IpAddress addr;
aa839030 66 unsigned int concurrency;
67 time_t last_queue_warn;
68 time_t last_restart;
69
26ac0430 70 struct {
aa839030 71 int requests;
72 int replies;
73 int queue_size;
74 int avg_svc_time;
2fadd50d 75 } stats;
aa839030 76};
77
26ac0430 78struct _helper_stateful {
aa839030 79 wordlist *cmdline;
80 dlink_list servers;
81 dlink_list queue;
82 const char *id_name;
d974a072
AJ
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)
aa839030 86 int ipc_type;
ad61a2b4 87 IpAddress addr;
a3efa961 88 MemAllocator *datapool;
aa839030 89 HLPSAVAIL *IsAvailable;
90 HLPSONEQ *OnEmptyQueue;
91 time_t last_queue_warn;
92 time_t last_restart;
93
26ac0430 94 struct {
aa839030 95 int requests;
96 int replies;
97 int queue_size;
98 int avg_svc_time;
2fadd50d 99 } stats;
aa839030 100};
101
26ac0430 102struct _helper_server {
aa839030 103 int index;
104 int pid;
ad61a2b4 105 IpAddress addr;
aa839030 106 int rfd;
107 int wfd;
108 MemBuf *wqueue;
109 MemBuf *writebuf;
110 char *rbuf;
111 size_t rbuf_sz;
57d55dfa 112 size_t roffset;
aa839030 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
26ac0430 122 struct _helper_flags {
3d0ac046
HN
123 unsigned int writing:1;
124 unsigned int closing:1;
125 unsigned int shutdown:1;
126 } flags;
aa839030 127
26ac0430 128 struct {
aa839030 129 int uses;
130 unsigned int pending;
3d0ac046 131 } stats;
cc192b50 132
9d88e312 133 void *hIpc;
aa839030 134};
135
136class helper_stateful_request;
137
26ac0430 138struct _helper_stateful_server {
aa839030 139 int index;
140 int pid;
ad61a2b4 141 IpAddress addr;
aa839030 142 int rfd;
143 int wfd;
144 /* MemBuf wqueue; */
145 /* MemBuf writebuf; */
146 char *rbuf;
147 size_t rbuf_sz;
57d55dfa 148 size_t roffset;
aa839030 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
26ac0430 159 struct _helper_stateful_flags {
3d0ac046
HN
160 unsigned int busy:1;
161 unsigned int closing:1;
162 unsigned int shutdown:1;
aa839030 163 stateful_helper_reserve_t reserved;
3d0ac046 164 } flags;
aa839030 165
26ac0430 166 struct {
aa839030 167 int uses;
168 int submits;
169 int releases;
170 int deferbyfunc;
171 int deferbycb;
3d0ac046 172 } stats;
aa839030 173 int deferred_requests; /* current number of deferred requests */
174 void *data; /* State data used by the calling routines */
9d88e312 175 void *hIpc;
aa839030 176};
51ee7c82 177
178class helper_request
179{
180
181public:
b001e822 182 MEMPROXY_CLASS(helper_request);
51ee7c82 183 char *buf;
184 HLPCB *callback;
185 void *data;
186
187 struct timeval dispatch_time;
51ee7c82 188};
189
d85b8894 190MEMPROXY_CLASS_INLINE(helper_request);
b001e822 191
51ee7c82 192class helper_stateful_request
193{
194
195public:
b001e822 196 MEMPROXY_CLASS(helper_stateful_request);
51ee7c82 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;
51ee7c82 201};
202
d85b8894 203MEMPROXY_CLASS_INLINE(helper_stateful_request);
b001e822 204
aa839030 205/* helper.c */
206SQUIDCEXTERN void helperOpenServers(helper * hlp);
207SQUIDCEXTERN void helperStatefulOpenServers(statefulhelper * hlp);
208SQUIDCEXTERN void helperSubmit(helper * hlp, const char *buf, HLPCB * callback, void *data);
209SQUIDCEXTERN void helperStatefulSubmit(statefulhelper * hlp, const char *buf, HLPSCB * callback, void *data, helper_stateful_server * lastserver);
9522b380 210SQUIDCEXTERN void helperStats(StoreEntry * sentry, helper * hlp, const char *label = NULL);
211SQUIDCEXTERN void helperStatefulStats(StoreEntry * sentry, statefulhelper * hlp, const char *label = NULL);
aa839030 212SQUIDCEXTERN void helperShutdown(helper * hlp);
213SQUIDCEXTERN void helperStatefulShutdown(statefulhelper * hlp);
214SQUIDCEXTERN helper *helperCreate(const char *);
215SQUIDCEXTERN statefulhelper *helperStatefulCreate(const char *);
216SQUIDCEXTERN void helperFree(helper *);
217SQUIDCEXTERN void helperStatefulFree(statefulhelper *);
218SQUIDCEXTERN void helperStatefulReset(helper_stateful_server * srv);
219SQUIDCEXTERN void helperStatefulReleaseServer(helper_stateful_server * srv);
220SQUIDCEXTERN void *helperStatefulServerGetData(helper_stateful_server * srv);
221SQUIDCEXTERN helper_stateful_server *helperStatefulDefer(statefulhelper *);
222
223
224
51ee7c82 225#endif /* SQUID_HELPER_H */