]>
Commit | Line | Data |
---|---|---|
582c2af2 | 1 | #include "squid.h" |
f9b72e0c | 2 | #include "comm/Connection.h" |
b0469965 | 3 | #include "CommCalls.h" |
582c2af2 FC |
4 | #include "fde.h" |
5 | #include "globals.h" | |
b0469965 | 6 | |
7 | /* CommCommonCbParams */ | |
8 | ||
9 | CommCommonCbParams::CommCommonCbParams(void *aData): | |
3e4bebf8 | 10 | data(cbdataReference(aData)), conn(), flag(COMM_OK), xerrno(0), fd(-1) |
b0469965 | 11 | { |
12 | } | |
13 | ||
14 | CommCommonCbParams::CommCommonCbParams(const CommCommonCbParams &p): | |
3e4bebf8 | 15 | data(cbdataReference(p.data)), conn(p.conn), flag(p.flag), xerrno(p.xerrno), fd(p.fd) |
b0469965 | 16 | { |
17 | } | |
18 | ||
19 | CommCommonCbParams::~CommCommonCbParams() | |
20 | { | |
21 | cbdataReferenceDone(data); | |
22 | } | |
23 | ||
24 | void | |
25 | CommCommonCbParams::print(std::ostream &os) const | |
26 | { | |
7957e704 AJ |
27 | if (conn != NULL) |
28 | os << conn; | |
29 | else | |
30 | os << "FD " << fd; | |
31 | ||
b0469965 | 32 | if (xerrno) |
33 | os << ", errno=" << xerrno; | |
34 | if (flag != COMM_OK) | |
35 | os << ", flag=" << flag; | |
36 | if (data) | |
37 | os << ", data=" << data; | |
38 | } | |
39 | ||
b0469965 | 40 | /* CommAcceptCbParams */ |
41 | ||
b9ddfca2 | 42 | CommAcceptCbParams::CommAcceptCbParams(void *aData): |
94bfd31f | 43 | CommCommonCbParams(aData), xaction() |
b0469965 | 44 | { |
94bfd31f AJ |
45 | } |
46 | ||
47 | void | |
48 | CommAcceptCbParams::print(std::ostream &os) const | |
49 | { | |
50 | CommCommonCbParams::print(os); | |
51 | ||
52 | if (xaction != NULL) | |
53 | os << ", " << xaction->id; | |
b0469965 | 54 | } |
55 | ||
b0469965 | 56 | /* CommConnectCbParams */ |
57 | ||
58 | CommConnectCbParams::CommConnectCbParams(void *aData): | |
26ac0430 | 59 | CommCommonCbParams(aData) |
b0469965 | 60 | { |
61 | } | |
62 | ||
4c3ba68d AR |
63 | bool |
64 | CommConnectCbParams::syncWithComm() | |
65 | { | |
66 | // drop the call if the call was scheduled before comm_close but | |
67 | // is being fired after comm_close | |
68 | if (fd >= 0 && fd_table[fd].closing()) { | |
2aecafa9 | 69 | debugs(5, 3, HERE << "dropping late connect call: FD " << fd); |
4c3ba68d AR |
70 | return false; |
71 | } | |
72 | return true; // now we are in sync and can handle the call | |
73 | } | |
b0469965 | 74 | |
75 | /* CommIoCbParams */ | |
76 | ||
77 | CommIoCbParams::CommIoCbParams(void *aData): CommCommonCbParams(aData), | |
26ac0430 | 78 | buf(NULL), size(0) |
b0469965 | 79 | { |
80 | } | |
81 | ||
4c3ba68d | 82 | bool |
82ec8dfc AR |
83 | CommIoCbParams::syncWithComm() |
84 | { | |
85 | // change parameters if the call was scheduled before comm_close but | |
86 | // is being fired after comm_close | |
68077594 | 87 | if ((conn->fd < 0 || fd_table[conn->fd].closing()) && flag != COMM_ERR_CLOSING) { |
a138c8fc | 88 | debugs(5, 3, HERE << "converting late call to COMM_ERR_CLOSING: " << conn); |
26ac0430 | 89 | flag = COMM_ERR_CLOSING; |
82ec8dfc | 90 | } |
4c3ba68d | 91 | return true; // now we are in sync and can handle the call |
26ac0430 | 92 | } |
82ec8dfc | 93 | |
b0469965 | 94 | void |
95 | CommIoCbParams::print(std::ostream &os) const | |
96 | { | |
97 | CommCommonCbParams::print(os); | |
98 | if (buf) { | |
99 | os << ", size=" << size; | |
100 | os << ", buf=" << (void*)buf; | |
26ac0430 | 101 | } |
b0469965 | 102 | } |
103 | ||
b0469965 | 104 | /* CommCloseCbParams */ |
105 | ||
106 | CommCloseCbParams::CommCloseCbParams(void *aData): | |
26ac0430 | 107 | CommCommonCbParams(aData) |
b0469965 | 108 | { |
109 | } | |
110 | ||
111 | /* CommTimeoutCbParams */ | |
112 | ||
113 | CommTimeoutCbParams::CommTimeoutCbParams(void *aData): | |
26ac0430 | 114 | CommCommonCbParams(aData) |
b0469965 | 115 | { |
116 | } | |
117 | ||
a17bf806 AJ |
118 | /* FdeCbParams */ |
119 | ||
120 | FdeCbParams::FdeCbParams(void *aData): | |
121 | CommCommonCbParams(aData) | |
122 | { | |
123 | } | |
80463bb4 | 124 | |
b0469965 | 125 | /* CommAcceptCbPtrFun */ |
126 | ||
127 | CommAcceptCbPtrFun::CommAcceptCbPtrFun(IOACB *aHandler, | |
26ac0430 AJ |
128 | const CommAcceptCbParams &aParams): |
129 | CommDialerParamsT<CommAcceptCbParams>(aParams), | |
130 | handler(aHandler) | |
b0469965 | 131 | { |
132 | } | |
133 | ||
b9ddfca2 AJ |
134 | CommAcceptCbPtrFun::CommAcceptCbPtrFun(const CommAcceptCbPtrFun &o): |
135 | CommDialerParamsT<CommAcceptCbParams>(o.params), | |
136 | handler(o.handler) | |
137 | { | |
138 | } | |
139 | ||
b0469965 | 140 | void |
141 | CommAcceptCbPtrFun::dial() | |
142 | { | |
449f0115 | 143 | handler(params); |
b0469965 | 144 | } |
145 | ||
146 | void | |
147 | CommAcceptCbPtrFun::print(std::ostream &os) const | |
148 | { | |
149 | os << '('; | |
150 | params.print(os); | |
151 | os << ')'; | |
152 | } | |
153 | ||
b0469965 | 154 | /* CommConnectCbPtrFun */ |
155 | ||
156 | CommConnectCbPtrFun::CommConnectCbPtrFun(CNCB *aHandler, | |
26ac0430 AJ |
157 | const CommConnectCbParams &aParams): |
158 | CommDialerParamsT<CommConnectCbParams>(aParams), | |
159 | handler(aHandler) | |
b0469965 | 160 | { |
161 | } | |
162 | ||
163 | void | |
164 | CommConnectCbPtrFun::dial() | |
165 | { | |
aed188fd | 166 | handler(params.conn, params.flag, params.xerrno, params.data); |
b0469965 | 167 | } |
168 | ||
169 | void | |
170 | CommConnectCbPtrFun::print(std::ostream &os) const | |
171 | { | |
172 | os << '('; | |
173 | params.print(os); | |
174 | os << ')'; | |
175 | } | |
176 | ||
b0469965 | 177 | /* CommIoCbPtrFun */ |
178 | ||
179 | CommIoCbPtrFun::CommIoCbPtrFun(IOCB *aHandler, const CommIoCbParams &aParams): | |
26ac0430 AJ |
180 | CommDialerParamsT<CommIoCbParams>(aParams), |
181 | handler(aHandler) | |
b0469965 | 182 | { |
183 | } | |
184 | ||
185 | void | |
186 | CommIoCbPtrFun::dial() | |
187 | { | |
a138c8fc | 188 | handler(params.conn, params.buf, params.size, params.flag, params.xerrno, params.data); |
b0469965 | 189 | } |
190 | ||
191 | void | |
192 | CommIoCbPtrFun::print(std::ostream &os) const | |
193 | { | |
194 | os << '('; | |
195 | params.print(os); | |
196 | os << ')'; | |
197 | } | |
198 | ||
b0469965 | 199 | /* CommCloseCbPtrFun */ |
200 | ||
575d05c4 | 201 | CommCloseCbPtrFun::CommCloseCbPtrFun(CLCB *aHandler, |
26ac0430 AJ |
202 | const CommCloseCbParams &aParams): |
203 | CommDialerParamsT<CommCloseCbParams>(aParams), | |
204 | handler(aHandler) | |
b0469965 | 205 | { |
206 | } | |
207 | ||
208 | void | |
209 | CommCloseCbPtrFun::dial() | |
210 | { | |
575d05c4 | 211 | handler(params); |
b0469965 | 212 | } |
213 | ||
214 | void | |
215 | CommCloseCbPtrFun::print(std::ostream &os) const | |
216 | { | |
217 | os << '('; | |
218 | params.print(os); | |
219 | os << ')'; | |
220 | } | |
221 | ||
222 | /* CommTimeoutCbPtrFun */ | |
223 | ||
8d77a37c | 224 | CommTimeoutCbPtrFun::CommTimeoutCbPtrFun(CTCB *aHandler, |
26ac0430 AJ |
225 | const CommTimeoutCbParams &aParams): |
226 | CommDialerParamsT<CommTimeoutCbParams>(aParams), | |
227 | handler(aHandler) | |
b0469965 | 228 | { |
229 | } | |
230 | ||
231 | void | |
232 | CommTimeoutCbPtrFun::dial() | |
233 | { | |
8d77a37c | 234 | handler(params); |
b0469965 | 235 | } |
236 | ||
237 | void | |
238 | CommTimeoutCbPtrFun::print(std::ostream &os) const | |
239 | { | |
240 | os << '('; | |
241 | params.print(os); | |
242 | os << ')'; | |
243 | } | |
a17bf806 AJ |
244 | |
245 | /* FdeCbPtrFun */ | |
246 | ||
247 | FdeCbPtrFun::FdeCbPtrFun(FDECB *aHandler, const FdeCbParams &aParams) : | |
248 | CommDialerParamsT<FdeCbParams>(aParams), | |
249 | handler(aHandler) | |
250 | { | |
251 | } | |
252 | ||
253 | void | |
254 | FdeCbPtrFun::dial() | |
255 | { | |
256 | handler(params); | |
257 | } | |
258 | ||
259 | void | |
260 | FdeCbPtrFun::print(std::ostream &os) const | |
261 | { | |
262 | os << '('; | |
263 | params.print(os); | |
264 | os << ')'; | |
265 | } |