From: Amos Jeffries Date: Sun, 15 Nov 2015 13:24:11 +0000 (-0800) Subject: Replace ConnStateData::getCurrentContext() with Pipeline::front() X-Git-Tag: SQUID_4_0_3~5^2~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=efd5e784a819c0248beab1c149a4c51f10e9261d;p=thirdparty%2Fsquid.git Replace ConnStateData::getCurrentContext() with Pipeline::front() --- diff --git a/src/client_side.cc b/src/client_side.cc index d29a12a931..76f3cb995c 100644 --- a/src/client_side.cc +++ b/src/client_side.cc @@ -225,7 +225,7 @@ ClientSocketContext::removeFromConnectionList(ConnStateData * conn) { ClientSocketContext::Pointer *tempContextPointer; assert(conn != NULL && cbdataReferenceValid(conn)); - assert(conn->getCurrentContext() != NULL); + assert(conn->currentobject != NULL); /* Unlink us from the connection request list */ tempContextPointer = & conn->currentobject; @@ -843,13 +843,6 @@ clientIsRequestBodyTooLargeForPolicy(int64_t bodyLength) return 0; } -// careful: the "current" context may be gone if we wrote an early response -ClientSocketContext::Pointer -ConnStateData::getCurrentContext() const -{ - return currentobject; -} - void ClientSocketContext::deferRecipientForLater(clientStreamNode * node, HttpReply * rep, StoreIOBuffer receivedData) { @@ -1376,7 +1369,8 @@ clientSocketRecipient(clientStreamNode * node, ClientHttpRequest * http, /* TODO: check offset is what we asked for */ - if (context != http->getConn()->getCurrentContext()) + // TODO: enforces HTTP/1 MUST on pipeline order, but is irrelevant to HTTP/2 + if (context != http->getConn()->pipeline.front()) context->deferRecipientForLater(node, rep, receivedData); else http->getConn()->handleReply(rep, receivedData); @@ -1523,8 +1517,6 @@ ConnStateData::kick() return; } - ClientSocketContext::Pointer deferredRequest; - /** \par * At this point we either have a parsed request (which we've * kicked off the processing for) or not. If we have a deferred @@ -1532,8 +1524,8 @@ ConnStateData::kick() * then look at processing it. If not, simply kickstart * another read. */ - - if ((deferredRequest = getCurrentContext()).getRaw()) { + ClientSocketContext::Pointer deferredRequest = pipeline.front(); + if (deferredRequest != nullptr) { debugs(33, 3, clientConnection << ": calling PushDeferredIfNeeded"); ClientSocketContextPushDeferredIfNeeded(deferredRequest, this); } else if (flags.readMore) { @@ -3125,7 +3117,7 @@ ConnStateData::abortChunkedRequestBody(const err_type error) // but if we fail when the server connection is used already, the server may send // us its response too, causing various assertions. How to prevent that? #if WE_KNOW_HOW_TO_SEND_ERRORS - ClientSocketContext::Pointer context = getCurrentContext(); + ClientSocketContext::Pointer context = pipeline.front(); if (context != NULL && !context->http->out.offset) { // output nothing yet clientStreamNode *node = context->getClientReplyContext(); clientReplyContext *repContext = dynamic_cast(node->data.getRaw()); @@ -4069,7 +4061,7 @@ ConnStateData::splice() transferProtocol = Http::ProtocolVersion(); // inBuf still has the "CONNECT ..." request data, reset it to SSL hello message inBuf.append(rbuf.content(), rbuf.contentSize()); - ClientSocketContext::Pointer context = getCurrentContext(); + ClientSocketContext::Pointer context = pipeline.front(); ClientHttpRequest *http = context->http; tunnelStart(http); } @@ -4559,7 +4551,7 @@ ConnStateData::finishDechunkingRequest(bool withSuccess) Must(!bodyPipe); // we rely on it being nil after we are done with body if (withSuccess) { Must(myPipe->bodySizeKnown()); - ClientSocketContext::Pointer context = getCurrentContext(); + ClientSocketContext::Pointer context = pipeline.front(); if (context != NULL && context->http && context->http->request) context->http->request->setContentLength(myPipe->bodySize()); } @@ -4577,8 +4569,8 @@ ConnStateData::sendControlMsg(HttpControlMsg msg) return; } - ClientSocketContext::Pointer context = getCurrentContext(); - if (context != NULL) { + auto context = pipeline.front(); + if (context != nullptr) { context->writeControlMsg(msg); // will call msg.cbSuccess return; } diff --git a/src/client_side.h b/src/client_side.h index 0989be2dd1..f7f6be4b56 100644 --- a/src/client_side.h +++ b/src/client_side.h @@ -187,7 +187,6 @@ public: /// try to complete a transaction or read more I/O void kick(); - ClientSocketContext::Pointer getCurrentContext() const; bool isOpen() const; // HttpControlMsgSink API diff --git a/src/servers/FtpServer.cc b/src/servers/FtpServer.cc index d1bc08e04b..5c740a1cd0 100644 --- a/src/servers/FtpServer.cc +++ b/src/servers/FtpServer.cc @@ -124,9 +124,9 @@ void Ftp::Server::doProcessRequest() { // zero pipelinePrefetchMax() ensures that there is only parsed request - ClientSocketContext::Pointer context = getCurrentContext(); - Must(context != NULL); Must(pipeline.count() == 1); + ClientSocketContext::Pointer context = pipeline.front(); + Must(context != nullptr); ClientHttpRequest *const http = context->http; assert(http != NULL); @@ -288,8 +288,8 @@ void Ftp::Server::notePeerConnection(Comm::ConnectionPointer conn) { // find request - ClientSocketContext::Pointer context = getCurrentContext(); - Must(context != NULL); + ClientSocketContext::Pointer context = pipeline.front(); + Must(context != nullptr); ClientHttpRequest *const http = context->http; Must(http != NULL); HttpRequest *const request = http->request; @@ -761,8 +761,8 @@ void Ftp::Server::handleReply(HttpReply *reply, StoreIOBuffer data) { // the caller guarantees that we are dealing with the current context only - ClientSocketContext::Pointer context = getCurrentContext(); - assert(context != NULL); + ClientSocketContext::Pointer context = pipeline.front(); + assert(context != nullptr); if (context->http && context->http->al != NULL && !context->http->al->reply && reply) { @@ -800,7 +800,7 @@ Ftp::Server::handleReply(HttpReply *reply, StoreIOBuffer data) void Ftp::Server::handleFeatReply(const HttpReply *reply, StoreIOBuffer) { - if (getCurrentContext()->http->request->errType != ERR_NONE) { + if (pipeline.front()->http->request->errType != ERR_NONE) { writeCustomReply(502, "Server does not support FEAT", reply); return; } @@ -869,8 +869,8 @@ Ftp::Server::handleFeatReply(const HttpReply *reply, StoreIOBuffer) void Ftp::Server::handlePasvReply(const HttpReply *reply, StoreIOBuffer) { - ClientSocketContext::Pointer context = getCurrentContext(); - assert(context != NULL); + const ClientSocketContext::Pointer context(pipeline.front()); + assert(context != nullptr); if (context->http->request->errType != ERR_NONE) { writeCustomReply(502, "Server does not support PASV", reply); @@ -909,7 +909,7 @@ Ftp::Server::handlePasvReply(const HttpReply *reply, StoreIOBuffer) void Ftp::Server::handlePortReply(const HttpReply *reply, StoreIOBuffer) { - if (getCurrentContext()->http->request->errType != ERR_NONE) { + if (pipeline.front()->http->request->errType != ERR_NONE) { writeCustomReply(502, "Server does not support PASV (converted from PORT)", reply); return; } @@ -967,7 +967,7 @@ Ftp::Server::handleDataReply(const HttpReply *reply, StoreIOBuffer data) AsyncCall::Pointer call = JobCallback(33, 5, Dialer, this, Ftp::Server::wroteReplyData); Comm::Write(dataConn, &mb, call); - getCurrentContext()->noteSentBodyBytes(data.length); + pipeline.front()->noteSentBodyBytes(data.length); } /// called when we are done writing a chunk of the response data @@ -984,8 +984,8 @@ Ftp::Server::wroteReplyData(const CommIoCbParams &io) return; } - assert(getCurrentContext()->http); - getCurrentContext()->http->out.size += io.size; + assert(pipeline.front()->http); + pipeline.front()->http->out.size += io.size; replyDataWritingCheckpoint(); } @@ -993,10 +993,10 @@ Ftp::Server::wroteReplyData(const CommIoCbParams &io) void Ftp::Server::replyDataWritingCheckpoint() { - switch (getCurrentContext()->socketState()) { + switch (pipeline.front()->socketState()) { case STREAM_NONE: debugs(33, 3, "Keep going"); - getCurrentContext()->pullData(); + pipeline.front()->pullData(); return; case STREAM_COMPLETE: debugs(33, 3, "FTP reply data transfer successfully complete"); @@ -1044,7 +1044,7 @@ Ftp::Server::writeForwardedReply(const HttpReply *reply) void Ftp::Server::handleEprtReply(const HttpReply *reply, StoreIOBuffer) { - if (getCurrentContext()->http->request->errType != ERR_NONE) { + if (pipeline.front()->http->request->errType != ERR_NONE) { writeCustomReply(502, "Server does not support PASV (converted from EPRT)", reply); return; } @@ -1057,7 +1057,7 @@ Ftp::Server::handleEprtReply(const HttpReply *reply, StoreIOBuffer) void Ftp::Server::handleEpsvReply(const HttpReply *reply, StoreIOBuffer) { - if (getCurrentContext()->http->request->errType != ERR_NONE) { + if (pipeline.front()->http->request->errType != ERR_NONE) { writeCustomReply(502, "Cannot connect to server", reply); return; } @@ -1080,7 +1080,7 @@ Ftp::Server::handleEpsvReply(const HttpReply *reply, StoreIOBuffer) void Ftp::Server::writeErrorReply(const HttpReply *reply, const int scode) { - const HttpRequest *request = getCurrentContext()->http->request; + const HttpRequest *request = pipeline.front()->http->request; assert(request); MemBuf mb; @@ -1227,8 +1227,8 @@ Ftp::Server::wroteEarlyReply(const CommIoCbParams &io) return; } - ClientSocketContext::Pointer context = getCurrentContext(); - if (context != NULL && context->http) { + ClientSocketContext::Pointer context = pipeline.front(); + if (context != nullptr && context->http) { context->http->out.size += io.size; context->http->out.headers_sz += io.size; } @@ -1249,7 +1249,7 @@ Ftp::Server::wroteReply(const CommIoCbParams &io) return; } - ClientSocketContext::Pointer context = getCurrentContext(); + ClientSocketContext::Pointer context = pipeline.front(); assert(context->http); context->http->out.size += io.size; context->http->out.headers_sz += io.size; @@ -1494,7 +1494,7 @@ Ftp::Server::handleUploadRequest(String &, String &) return false; if (Config.accessList.forceRequestBodyContinuation) { - ClientHttpRequest *http = getCurrentContext()->http; + ClientHttpRequest *http = pipeline.front()->http; HttpRequest *request = http->request; ACLFilledChecklist bodyContinuationCheck(Config.accessList.forceRequestBodyContinuation, request, NULL); if (bodyContinuationCheck.fastCheck() == ACCESS_ALLOWED) { @@ -1598,7 +1598,7 @@ Ftp::Server::handleCdupRequest(String &, String &) void Ftp::Server::setDataCommand() { - ClientHttpRequest *const http = getCurrentContext()->http; + ClientHttpRequest *const http = pipeline.front()->http; assert(http != NULL); HttpRequest *const request = http->request; assert(request != NULL); @@ -1664,7 +1664,7 @@ Ftp::Server::connectedForData(const CommConnectCbParams ¶ms) if (params.conn != NULL) params.conn->close(); setReply(425, "Cannot open data connection."); - ClientSocketContext::Pointer context = getCurrentContext(); + ClientSocketContext::Pointer context = pipeline.front(); Must(context->http); Must(context->http->storeEntry() != NULL); } else { @@ -1679,7 +1679,7 @@ Ftp::Server::connectedForData(const CommConnectCbParams ¶ms) void Ftp::Server::setReply(const int code, const char *msg) { - ClientSocketContext::Pointer context = getCurrentContext(); + ClientSocketContext::Pointer context = pipeline.front(); ClientHttpRequest *const http = context->http; assert(http != NULL); assert(http->storeEntry() == NULL); diff --git a/src/servers/Http1Server.cc b/src/servers/Http1Server.cc index d01ba6e7ce..b03e65e175 100644 --- a/src/servers/Http1Server.cc +++ b/src/servers/Http1Server.cc @@ -242,8 +242,8 @@ void Http::One::Server::handleReply(HttpReply *rep, StoreIOBuffer receivedData) { // the caller guarantees that we are dealing with the current context only - ClientSocketContext::Pointer context = getCurrentContext(); - Must(context != NULL); + ClientSocketContext::Pointer context = pipeline.front(); + Must(context != nullptr); const ClientHttpRequest *http = context->http; Must(http != NULL); @@ -279,7 +279,7 @@ Http::One::Server::writeControlMsgAndCall(ClientSocketContext *context, HttpRepl // it is not clear what headers are required for control messages rep->header.removeHopByHopEntries(); rep->header.putStr(Http::HdrType::CONNECTION, "keep-alive"); - httpHdrMangleList(&rep->header, getCurrentContext()->http->request, ROR_REPLY); + httpHdrMangleList(&rep->header, pipeline.front()->http->request, ROR_REPLY); MemBuf *mb = rep->pack(); diff --git a/src/tunnel.cc b/src/tunnel.cc index cd5bbcccfd..35a6f9f1c4 100644 --- a/src/tunnel.cc +++ b/src/tunnel.cc @@ -1233,8 +1233,8 @@ switchToTunnel(HttpRequest *request, Comm::ConnectionPointer &clientConn, Comm:: ConnStateData *conn; if ((conn = request->clientConnectionManager.get())) { - ClientSocketContext::Pointer context = conn->getCurrentContext(); - if (context != NULL && context->http != NULL) { + ClientSocketContext::Pointer context = conn->pipeline.front()); + if (context != nullptr && context->http != nullptr) { tunnelState->logTag_ptr = &context->http->logType; tunnelState->server.size_ptr = &context->http->out.size;