2 * Copyright (C) 1996-2022 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_SRC_CLIENTS_HTTP_TUNNELERANSWER_H
10 #define SQUID_SRC_CLIENTS_HTTP_TUNNELERANSWER_H
12 #include "base/CbcPointer.h"
13 #include "comm/forward.h"
14 #include "http/StatusCode.h"
15 #include "sbuf/SBuf.h"
21 /// Three mutually exclusive answers are possible:
23 /// * Squid-generated error object (TunnelerAnswer::squidError);
24 /// * peer-generated error message (TunnelerAnswer::peerError);
25 /// * successful tunnel establishment (none of the above are present).
27 /// HTTP CONNECT tunnel setup results (supplied via a callback). The tunnel
28 /// through the peer was established if and only if the error member is nil.
33 ~TunnelerAnswer(); ///< deletes squidError if it is still set
35 bool positive() const { return !squidError
; }
37 // Destructor will erase squidError if it is still set. Answer recipients
38 // must clear this member to keep its info.
39 // XXX: We should refcount ErrorState instead of cbdata-protecting it.
40 CbcPointer
<ErrorState
> squidError
; ///< problem details (or nil)
42 SBuf leftovers
; ///< peer-generated bytes after a positive answer (or empty)
44 /// the status code of the successfully parsed CONNECT response (or scNone)
45 StatusCode peerResponseStatus
= scNone
;
47 Comm::ConnectionPointer conn
;
50 std::ostream
&operator <<(std::ostream
&, const TunnelerAnswer
&);
54 #endif /* SQUID_SRC_CLIENTS_HTTP_TUNNELERANSWER_H */