*
* The individual processing actions are done by other Jobs which we
* kick off as needed.
+ *
+ * XXX: If an async call ends the ClientHttpRequest job, ClientSocketContext
+ * (and ConnStateData) may not know about it, leading to segfaults and
+ * assertions like areAllContextsForThisConnection(). This is difficult to fix
+ * because ClientHttpRequest lacks a good way to communicate its ongoing
+ * destruction back to the ClientSocketContext which pretends to "own" *http.
*/
class ClientSocketContext : public RefCountable
{
void keepaliveNextRequest();
Comm::ConnectionPointer clientConnection; /// details about the client connection socket.
- ClientHttpRequest *http; /* we own this */
+ ClientHttpRequest *http; /* we pretend to own that job */
HttpReply *reply;
char reqbuf[HTTP_REQBUF_SZ];
Pointer next;
} pinning;
/// Squid listening port details where this connection arrived.
- AnyP::PortCfg *port;
+ AnyP::PortCfgPointer port;
bool transparent() const;
bool reading() const;
bool switchedToHttps() const { return false; }
#endif
+ /* clt_conn_tag=tag annotation access */
+ const SBuf &connectionTag() const { return connectionTag_; }
+ void connectionTag(const char *aTag) { connectionTag_ = aTag; }
+
protected:
void startDechunkingRequest();
void finishDechunkingRequest(bool withSuccess);
AsyncCall::Pointer reader; ///< set when we are reading
BodyPipe::Pointer bodyPipe; // set when we are reading request body
+ SBuf connectionTag_; ///< clt_conn_tag=Tag annotation for client connection
+
CBDATA_CLASS2(ConnStateData);
};