]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/HttpControlMsg.h
2 * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
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.
9 #ifndef SQUID_HTTP_CONTROL_MSG_H
10 #define SQUID_HTTP_CONTROL_MSG_H
12 #include "base/AsyncCall.h"
13 #include "HttpReply.h"
19 * This API exists to throttle forwarding of 1xx messages from the server
20 * side (Source == HttpStateData) to the client side (Sink == ConnStateData).
22 * Without throttling, Squid would have to drop some 1xx responses to
23 * avoid DoS attacks that send many 1xx responses without reading them.
24 * Dropping 1xx responses without violating HTTP is as complex as throttling.
27 /// sends a single control message, notifying the Sink
28 class HttpControlMsgSink
: public virtual AsyncJob
31 HttpControlMsgSink(): AsyncJob("unused") {}
33 /// called to send the 1xx message and notify the Source
34 virtual void sendControlMsg(HttpControlMsg msg
) = 0;
36 virtual void doneWithControlMsg();
38 /// callback to handle Comm::Write completion
39 void wroteControlMsg(const CommIoCbParams
&);
41 /// Call to schedule when the control msg has been sent
42 AsyncCall::Pointer cbControlMsgSent
;
45 /// bundles HTTP 1xx reply and the "successfully forwarded" callback
49 typedef AsyncCall::Pointer Callback
;
51 HttpControlMsg(const HttpReply::Pointer
&aReply
, const Callback
&aCallback
):
52 reply(aReply
), cbSuccess(aCallback
) {}
55 HttpReply::Pointer reply
; ///< the 1xx message being forwarded
56 Callback cbSuccess
; ///< called after successfully writing the 1xx message
58 // We could add an API to notify of send failures as well, but the
59 // current Source and Sink are tied via Store anyway, so the Source
60 // will know, eventually, if the Sink is gone or otherwise failed.
64 operator <<(std::ostream
&os
, const HttpControlMsg
&msg
)
66 return os
<< msg
.reply
<< ", " << msg
.cbSuccess
;
69 #endif /* SQUID_HTTP_CONTROL_MSG_H */