Manages a connection from an HTTP/1 or HTTP/0.9 client. More...

#include <Http1Server.h>

Inheritance diagram for Http::One::Server:
Collaboration diagram for Http::One::Server:

Public Types

typedef CbcPointer< AsyncJobPointer
 
typedef CbcPointer< BodyProducerPointer
 

Public Member Functions

 Server (const MasterXaction::Pointer &xact, const bool beHttpsServer)
 
virtual ~Server ()
 
void readSomeHttpData ()
 
bool reading () const
 whether Comm::Read() is scheduled More...
 
virtual void receivedFirstByte ()
 Update flags and timeout after the first byte received. More...
 
virtual bool handleReadData ()
 
virtual void afterClientRead ()
 processing to be done after a Comm::Read() More...
 
virtual void afterClientWrite (size_t)
 processing to sync state after a Comm::Write() More...
 
virtual void sendControlMsg (HttpControlMsg)
 called to send the 1xx message and notify the Source More...
 
virtual void doneWithControlMsg ()
 
bool clientParseRequests ()
 Traffic parsing. More...
 
void readNextRequest ()
 
void kick ()
 try to make progress on a transaction or read more I/O More...
 
bool isOpen () const
 
int64_t mayNeedToReadMoreBody () const
 
const Auth::UserRequest::PointergetAuth () const
 
void setAuth (const Auth::UserRequest::Pointer &aur, const char *cause)
 
bool transparent () const
 
const char * stoppedReceiving () const
 true if we stopped receiving the request More...
 
const char * stoppedSending () const
 true if we stopped sending the response More...
 
void stopReceiving (const char *error)
 note request receiving error and close as soon as we write the response More...
 
void stopSending (const char *error)
 note response sending error and close as soon as we read the request More...
 
void expectNoForwarding ()
 cleans up virgin request [body] forwarding state More...
 
BodyPipe::Pointer expectRequestBody (int64_t size)
 
bool handleRequestBodyData ()
 
void notePinnedConnectionBecameIdle (PinnedIdleContext pic)
 Called when a pinned connection becomes available for forwarding the next request. More...
 
void pinBusyConnection (const Comm::ConnectionPointer &pinServerConn, const HttpRequest::Pointer &request)
 
void unpinConnection (const bool andClose)
 Undo pinConnection() and, optionally, close the pinned connection. More...
 
Comm::ConnectionPointer borrowPinnedConnection (HttpRequest *request)
 Returns validated pinnned server connection (and stops its monitoring). More...
 
const Comm::ConnectionPointer validatePinnedConnection (HttpRequest *request)
 
CachePeerpinnedPeer () const
 
bool pinnedAuth () const
 
virtual void notePeerConnection (Comm::ConnectionPointer)
 called just before a FwdState-dispatched job starts using connection More...
 
virtual void clientPinnedConnectionClosed (const CommCloseCbParams &io)
 Our close handler called by Comm when the pinned connection is closed. More...
 
void clientReadFtpData (const CommIoCbParams &io)
 
void connStateClosed (const CommCloseCbParams &io)
 
void requestTimeout (const CommTimeoutCbParams &params)
 
virtual bool doneAll () const
 whether positive goal has been reached More...
 
virtual void swanSong ()
 
void quitAfterError (HttpRequest *request)
 
void stopPinnedConnectionMonitoring ()
 The caller assumes responsibility for connection closure detection. More...
 
void postHttpsAccept ()
 the second part of old httpsAccept, waiting for future HttpsServer home More...
 
void startPeekAndSplice ()
 Initializes and starts a peek-and-splice negotiation with the SSL client. More...
 
void doPeekAndSpliceStep ()
 
void httpsPeeked (PinnedIdleContext pic)
 called by FwdState when it is done bumping the server More...
 
bool splice ()
 Splice a bumped client connection on peek-and-splice mode. More...
 
void getSslContextStart ()
 Start to create dynamic Security::ContextPointer for host or uses static port SSL context. More...
 
void getSslContextDone (Security::ContextPointer &)
 finish configuring the newly created SSL context" More...
 
void sslCrtdHandleReply (const Helper::Reply &reply)
 Proccess response from ssl_crtd. More...
 
void switchToHttps (ClientHttpRequest *, Ssl::BumpMode bumpServerMode)
 
void parseTlsHandshake ()
 
bool switchedToHttps () const
 
Ssl::ServerBumpserverBump ()
 
void setServerBump (Ssl::ServerBump *srvBump)
 
const SBufsslCommonName () const
 
void resetSslCommonName (const char *name)
 
const SBuftlsClientSni () const
 
void buildSslCertGenerationParams (Ssl::CertificateProperties &certProperties)
 
bool serveDelayedError (Http::Stream *)
 
char * prepareTlsSwitchingURL (const Http1::RequestParserPointer &hp)
 
void consumeInput (const size_t byteCount)
 remove no longer needed leading bytes from the input buffer More...
 
Http::StreamabortRequestParsing (const char *const errUri)
 stop parsing the request and create context for relaying error info More...
 
bool fakeAConnectRequest (const char *reason, const SBuf &payload)
 
bool initiateTunneledRequest (HttpRequest::Pointer const &cause, Http::MethodType const method, const char *reason, const SBuf &payload)
 generates and sends to tunnel.cc a fake request with a given payload More...
 
bool mayTunnelUnsupportedProto ()
 whether tunneling of unsupported protocol is allowed for this connection More...
 
ClientHttpRequestbuildFakeRequest (Http::MethodType const method, SBuf &useHost, unsigned short usePort, const SBuf &payload)
 build a fake http request More...
 
virtual void startShutdown ()
 
virtual void endingShutdown ()
 
NotePairs::Pointer notes ()
 
bool hasNotes () const
 
const ProxyProtocol::HeaderPointerproxyProtocolHeader () const
 
void readSomeData ()
 maybe grow the inBuf and schedule Comm::Read() More...
 
void stopReading ()
 cancels Comm::Read() if it is scheduled More...
 
virtual void writeSomeData ()
 maybe find some data to send and schedule a Comm::Write() More...
 
void write (MemBuf *mb)
 schedule some data for a Comm::Write() More...
 
void write (char *buf, int len)
 schedule some data for a Comm::Write() More...
 
bool writing () const
 whether Comm::Write() is scheduled More...
 
void maybeMakeSpaceAvailable ()
 grows the available read buffer space (if possible) More...
 
bool canBeCalled (AsyncCall &call) const
 whether we can be called More...
 
void callStart (AsyncCall &call)
 
virtual void callEnd ()
 called right after the called job method More...
 
virtual void callException (const std::exception &e)
 called when the job throws during an async call More...
 
virtual void * toCbdata ()=0
 
void wroteControlMsg (const CommIoCbParams &)
 callback to handle Comm::Write completion More...
 

Static Public Member Functions

static void sslCrtdHandleReplyWrapper (void *data, const Helper::Reply &reply)
 Callback function. It is called when squid receive message from ssl_crtd. More...
 
static Pointer Start (AsyncJob *job)
 starts a freshly created job (i.e., makes the job asynchronous) More...
 

Public Attributes

Http1::TeChunkedParserbodyParser
 parses HTTP/1.1 chunked request body More...
 
Ip::Address log_addr
 
struct {
   bool   readMore
 needs comm_read (for this request or new requests) More...
 
   bool   swanSang
 
flags
 
struct {
   Comm::ConnectionPointer   serverConnection
 
   char *   host
 
   int   port
 
   bool   pinned
 
   bool   auth
 
   bool   reading
 we are monitoring for peer connection closure More...
 
   bool   zeroReply
 server closed w/o response (ERR_ZERO_SIZE_OBJECT) More...
 
   CachePeer *   peer
 
   AsyncCall::Pointer   readHandler
 detects serverConnection closure More...
 
   AsyncCall::Pointer   closeHandler
 
pinning
 
Ssl::BumpMode sslBumpMode
 ssl_bump decision (Ssl::bumpEnd if n/a). More...
 
Security::HandshakeParser tlsParser
 
SBuf preservedClientData
 
Comm::ConnectionPointer clientConnection
 
AnyP::ProtocolVersion transferProtocol
 
SBuf inBuf
 read I/O buffer for the client connection More...
 
bool receivedFirstByte_
 true if at least one byte received on this connection More...
 
Pipeline pipeline
 set of requests waiting to be serviced More...
 
AsyncCall::Pointer cbControlMsgSent
 Call to schedule when the control msg has been sent. More...
 

Protected Member Functions

virtual Http::StreamparseOneRequest ()
 
virtual void processParsedRequest (Http::StreamPointer &context)
 start processing a freshly parsed request More...
 
virtual void handleReply (HttpReply *rep, StoreIOBuffer receivedData)
 
virtual bool writeControlMsgAndCall (HttpReply *rep, AsyncCall::Pointer &call)
 handle a control message received by context from a peer and call back More...
 
virtual time_t idleTimeout () const
 timeout to use when waiting for the next request More...
 
virtual void noteMoreBodySpaceAvailable (BodyPipe::Pointer)
 
virtual void noteBodyConsumerAborted (BodyPipe::Pointer)
 
virtual void start ()
 called by AsyncStart; do not call directly More...
 
void proceedAfterBodyContinuation (Http::StreamPointer context)
 
void startDechunkingRequest ()
 initialize dechunking state More...
 
void finishDechunkingRequest (bool withSuccess)
 put parsed content into input buffer and clean up More...
 
void abortChunkedRequestBody (const err_type error)
 quit on errors related to chunked request body handling More...
 
err_type handleChunkedRequestBody ()
 parses available chunked encoded body bytes, checks size, returns errors More...
 
void startPinnedConnectionMonitoring ()
 
void clientPinnedConnectionRead (const CommIoCbParams &io)
 
bool handleIdleClientPinnedTlsRead ()
 
virtual int pipelinePrefetchMax () const
 returning N allows a pipeline of 1+N requests (see pipeline_prefetch) More...
 
void whenClientIpKnown ()
 
void doClientRead (const CommIoCbParams &io)
 
void clientWriteDone (const CommIoCbParams &io)
 
void deleteThis (const char *aReason)
 
void mustStop (const char *aReason)
 
bool done () const
 the job is destroyed in callEnd() when done() More...
 
virtual const char * status () const
 internal cleanup; do not call directly More...
 
void stopProducingFor (RefCount< BodyPipe > &, bool atEof)
 

Protected Attributes

BodyPipe::Pointer bodyPipe
 set when we are reading request body More...
 
AsyncCall::Pointer reader
 set when we are reading More...
 
AsyncCall::Pointer writer
 set when we are writing More...
 
const char * stopReason
 reason for forcing done() to be true More...
 
const char * typeName
 kid (leaf) class name, for debugging More...
 
AsyncCall::Pointer inCall
 the asynchronous call being handled, if any More...
 
const InstanceId< AsyncJobid
 job identifier More...
 

Private Member Functions

 CBDATA_CLASS (Server)
 
void processHttpRequest (Http::Stream *const context)
 
void handleHttpRequestData ()
 
bool buildHttpRequest (Http::StreamPointer &context)
 
void setReplyError (Http::StreamPointer &context, HttpRequest::Pointer &request, const HttpRequestMethod &method, err_type requestError, Http::StatusCode errStatusCode, const char *requestErrorBytes)
 

Private Attributes

Http1::RequestParserPointer parser_
 
HttpRequestMethod method_
 parsed HTTP method More...
 
const bool isHttpsServer
 temporary hack to avoid creating a true HttpsServer class More...
 

Detailed Description

Definition at line 20 of file Http1Server.h.

Member Typedef Documentation

◆ Pointer [1/2]

Definition at line 25 of file BodyPipe.h.

◆ Pointer [2/2]

Definition at line 34 of file AsyncJob.h.

Constructor & Destructor Documentation

◆ Server()

Server::Server ( const MasterXaction::Pointer xact,
const bool  beHttpsServer 
)

Definition at line 27 of file Http1Server.cc.

◆ ~Server()

Member Function Documentation

◆ abortChunkedRequestBody()

◆ abortRequestParsing()

◆ afterClientRead()

void ConnStateData::afterClientRead ( )
virtualinherited

Implements Server.

Definition at line 1953 of file client_side.cc.

References commIsHalfClosed(), debugs, fd_note(), and isOpen().

◆ afterClientWrite()

void ConnStateData::afterClientWrite ( size_t  )
virtualinherited

Reimplemented from Server.

Definition at line 996 of file client_side.cc.

References StatCounters::client_http, StatCounters::hit_kbytes_out, StatCounters::kbytes_out, size, and statCounter.

◆ borrowPinnedConnection()

Comm::ConnectionPointer ConnStateData::borrowPinnedConnection ( HttpRequest request)
inherited

◆ buildFakeRequest()

ClientHttpRequest * ConnStateData::buildFakeRequest ( Http::MethodType const  method,
SBuf useHost,
unsigned short  usePort,
const SBuf payload 
)
inherited

◆ buildHttpRequest()

◆ buildSslCertGenerationParams()

void ConnStateData::buildSslCertGenerationParams ( Ssl::CertificateProperties certProperties)
inherited

Fill the certAdaptParams with the required data for certificate adaptation and create the key for storing/retrieve the certificate to/from the cache

Definition at line 2703 of file client_side.cc.

References Ssl::algSetCommonName, Ssl::algSetValidAfter, Ssl::algSetValidBefore, Ssl::algSignEnd, Ssl::algSignTrusted, Ssl::algSignUntrusted, assert, SBuf::c_str(), cbdataReference, SquidConfig::cert_adapt, SquidConfig::cert_sign, Ssl::CertAdaptAlgorithmStr, Server::clientConnection, Ssl::CertificateProperties::commonName, Config, Ssl::ServerBump::connectedOk(), dash_str, debugs, Ssl::DefaultSignHash, Security::LockingPointer< T, UnLocker, Locker >::get(), RefCount< C >::getRaw(), HERE(), SBuf::isEmpty(), Ssl::CertificateProperties::mimicCert, NULL, ConnStateData::port, Ssl::ServerBump::request, Security::LockingPointer< T, UnLocker, Locker >::resetAndLock(), Comm::Connection::rfc931, Ssl::ServerBump::serverCert, Ssl::CertificateProperties::setCommonName, Ssl::CertificateProperties::setValidAfter, Ssl::CertificateProperties::setValidBefore, Ssl::CertificateProperties::signAlgorithm, ConnStateData::signAlgorithm, Ssl::CertificateProperties::signHash, Ssl::CertificateProperties::signWithPkey, Ssl::CertificateProperties::signWithX509, SquidConfig::ssl_client, ConnStateData::sslCommonName_, ConnStateData::sslConnectHostOrIp, Ssl::ServerBump::sslErrors(), ACLFilledChecklist::sslErrors, ConnStateData::sslServerBump, and String::termedBuf().

Referenced by ConnStateData::getSslContextStart().

◆ callEnd()

void AsyncJob::callEnd ( )
virtualinherited

◆ callException()

◆ callStart()

void AsyncJob::callStart ( AsyncCall call)
inherited

◆ canBeCalled()

bool AsyncJob::canBeCalled ( AsyncCall call) const
inherited

Definition at line 101 of file AsyncJob.cc.

References AsyncCall::cancel(), debugs, HERE(), AsyncJob::inCall, and NULL.

Referenced by AsyncJob::swanSong().

◆ CBDATA_CLASS()

Http::One::Server::CBDATA_CLASS ( Server  )
private

◆ clientParseRequests()

bool ConnStateData::clientParseRequests ( )
inherited

Attempt to parse one or more requests from the input buffer. Returns true after completing parsing of at least one request [header]. That includes cases where parsing ended with an error (e.g., a huge request).

Definition at line 1892 of file client_side.cc.

References clientLifetimeTimeout, commCbCall(), commSetConnTimeout(), Config, debugs, HERE(), SquidConfig::lifetime, SquidConfig::maxRequestHeaderSize, Must, and SquidConfig::Timeout.

◆ clientPinnedConnectionClosed()

void ConnStateData::clientPinnedConnectionClosed ( const CommCloseCbParams io)
virtualinherited

◆ clientPinnedConnectionRead()

void ConnStateData::clientPinnedConnectionRead ( const CommIoCbParams io)
protectedinherited

Our read handler called by Comm when the server either closes an idle pinned connection or perhaps unexpectedly sends something on that idle (from Squid p.o.v.) connection.

Definition at line 3853 of file client_side.cc.

References Server::clientConnection, Comm::Connection::close(), CommCommonCbParams::conn, debugs, Pipeline::empty(), Comm::ERR_CLOSING, CommCommonCbParams::flag, ConnStateData::handleIdleClientPinnedTlsRead(), Must, NULL, ConnStateData::pinning, Server::pipeline, and CommIoCbParams::size.

Referenced by ConnStateData::startPinnedConnectionMonitoring().

◆ clientReadFtpData()

void ConnStateData::clientReadFtpData ( const CommIoCbParams io)
inherited

◆ clientWriteDone()

void Server::clientWriteDone ( const CommIoCbParams io)
protectedinherited

callback handling the Comm::Write completion

Will call afterClientWrite(size_t) to sync the I/O state. Then writeSomeData() to initiate any followup writes that could be immediately done.

Definition at line 186 of file Server.cc.

References Server::afterClientWrite(), Server::clientConnection, CommCommonCbParams::conn, debugs, Comm::ERR_CLOSING, Comm::Connection::fd, CommCommonCbParams::flag, Pipeline::front(), Comm::IsConnOpen(), Must, Server::pipeline, CommIoCbParams::size, Server::writer, and Server::writeSomeData().

Referenced by Server::write().

◆ connStateClosed()

void ConnStateData::connStateClosed ( const CommCloseCbParams io)
inherited

Definition at line 495 of file client_side.cc.

Referenced by ConnStateData::start().

◆ consumeInput()

void ConnStateData::consumeInput ( const size_t  byteCount)
inherited

Definition at line 1444 of file client_side.cc.

References assert, and debugs.

Referenced by parseHttpRequest(), and Ftp::Server::parseOneRequest().

◆ deleteThis()

void AsyncJob::deleteThis ( const char *  aReason)
protectedinherited

◆ doClientRead()

◆ done()

◆ doneAll()

virtual bool ConnStateData::doneAll ( ) const
inlinevirtualinherited

Reimplemented from Server.

Definition at line 212 of file client_side.h.

References data, AsyncJob::doneAll(), and request().

◆ doneWithControlMsg()

void ConnStateData::doneWithControlMsg ( )
virtualinherited

◆ doPeekAndSpliceStep()

void ConnStateData::doPeekAndSpliceStep ( )
inherited

Called when a peek-and-splice step finished. For example after server SSL certificates received and fake server SSL certificates generated

Definition at line 3151 of file client_side.cc.

References assert, BIO_get_data(), Server::clientConnection, clientNegotiateSSL(), COMM_SELECT_WRITE, debugs, Comm::Connection::fd, fd_table, Ssl::ClientBio::hold(), Comm::SetSelect(), and ConnStateData::switchedToHttps_.

Referenced by ConnStateData::getSslContextStart(), and ConnStateData::sslCrtdHandleReply().

◆ endingShutdown()

void ConnStateData::endingShutdown ( )
virtualinherited

Called after shutdown_lifetime grace period ends and before stopping the main loop. At least one main loop iteration is guaranteed after this call. Meant for cleanup and state saving that may require other modules.

Reimplemented from RegisteredRunner.

Definition at line 1038 of file client_side.cc.

References Comm::IsConnOpen().

◆ expectNoForwarding()

void ConnStateData::expectNoForwarding ( )
inherited

◆ expectRequestBody()

BodyPipe::Pointer ConnStateData::expectRequestBody ( int64_t  size)
inherited

◆ fakeAConnectRequest()

◆ finishDechunkingRequest()

◆ getAuth()

const Auth::UserRequest::Pointer& ConnStateData::getAuth ( ) const
inlineinherited

Fetch the user details for connection based authentication NOTE: this is ONLY connection based because NTLM and Negotiate is against HTTP spec.

Definition at line 115 of file client_side.h.

Referenced by Auth::UserRequest::authenticate(), AuthenticateAcl(), authTryGetUser(), ConnStateData::buildFakeRequest(), ClientHttpRequest::calloutsError(), clientProcessRequest(), and constructHelperQuery().

◆ getSslContextDone()

◆ getSslContextStart()

◆ handleChunkedRequestBody()

err_type ConnStateData::handleChunkedRequestBody ( )
protectedinherited

◆ handleHttpRequestData()

void Http::One::Server::handleHttpRequestData ( )
private

Referenced by ~Server().

◆ handleIdleClientPinnedTlsRead()

bool ConnStateData::handleIdleClientPinnedTlsRead ( )
protectedinherited

Handles a ready-for-reading TLS squid-to-server connection that we thought was idle.

Returns
false if and only if the connection should be closed.

Definition at line 3812 of file client_side.cc.

References buf, DBG_IMPORTANT, debugs, error(), fd_table, Must, ConnStateData::pinning, and ConnStateData::startPinnedConnectionMonitoring().

Referenced by ConnStateData::clientPinnedConnectionRead().

◆ handleReadData()

bool ConnStateData::handleReadData ( )
virtualinherited

called when new request data has been read from the socket

Return values
falsecalled comm_close or setReplyToError (the caller should bail)
truewe did not call comm_close or setReplyToError

Implements Server.

Definition at line 1997 of file client_side.cc.

References NULL.

◆ handleReply()

void Server::handleReply ( HttpReply header,
StoreIOBuffer  receivedData 
)
protectedvirtual

◆ handleRequestBodyData()

bool ConnStateData::handleRequestBodyData ( )
inherited

called when new request body data has been buffered in inBuf may close the connection if we were closing and piped everything out

Return values
falsecalled comm_close or setReplyToError (the caller should bail)
truewe did not call comm_close or setReplyToError

Definition at line 2013 of file client_side.cc.

References assert, debugs, error(), HERE(), and NULL.

Referenced by clientProcessRequest(), and noteMoreBodySpaceAvailable().

◆ hasNotes()

bool ConnStateData::hasNotes ( ) const
inlineinherited

Definition at line 321 of file client_side.h.

Referenced by buildHttpRequest().

◆ httpsPeeked()

◆ idleTimeout()

time_t Server::idleTimeout ( ) const
protectedvirtual

Implements ConnStateData.

Definition at line 35 of file Http1Server.cc.

References SquidConfig::clientIdlePconn, Config, and SquidConfig::Timeout.

Referenced by ~Server().

◆ initiateTunneledRequest()

◆ isOpen()

◆ kick()

void ConnStateData::kick ( )
inherited
We are done with the response, and we are either still receiving request body (early response!) or have already stopped receiving anything.

If we are still receiving, then clientParseRequest() below will fail. (XXX: but then we will call readNextRequest() which may succeed and execute a smuggled request as we are not done with the current request).

If we stopped because we got everything, then try the next request.

If we stopped receiving because of an error, then close now to avoid getting stuck and to prevent accidental request smuggling.

Attempt to parse a request from the request buffer. If we've been fed a pipelined request it may already be in our read buffer.
This needs to fall through - if we're unlucky and parse the last request from our read buffer we may never re-register for another client read.
Either we need to kick-start another read or, if we have a half-closed connection, kill it after the last request. This saves waiting for half-closed connections to finished being half-closed AND then, sometimes, spending "Timeout" time in the keepalive "Waiting for next request" state.
At this point we either have a parsed request (which we've kicked off the processing for) or not. If we have a deferred request (parsed but deferred for pipeling processing reasons) then look at processing it. If not, simply kickstart another read.

Definition at line 891 of file client_side.cc.

References ClientSocketContextPushDeferredIfNeeded(), commIsHalfClosed(), DBG_IMPORTANT, debugs, Comm::IsConnOpen(), and MYNAME.

Referenced by ConnStateData::notePinnedConnectionBecameIdle(), Http::Stream::writeComplete(), and Ftp::Server::wroteReply().

◆ maybeMakeSpaceAvailable()

void Server::maybeMakeSpaceAvailable ( )
inherited

Prepare inBuf for I/O. This method balances several conflicting desires:

  1. Do not read too few bytes at a time.
  2. Do not waste too much buffer space.
  3. Do not [re]allocate or memmove the buffer too much.
  4. Obey Config.maxRequestBufferSize limit.

Definition at line 70 of file Server.cc.

References SBufReservationRequirements::allowShared, CLIENT_REQ_BUF_SZ, Config, debugs, SBufReservationRequirements::idealSpace, Server::inBuf, SBufReservationRequirements::maxCapacity, SquidConfig::maxRequestBufferSize, SBufReservationRequirements::minSpace, SBuf::reserve(), and SBuf::spaceSize().

Referenced by Server::doClientRead(), and Server::writing().

◆ mayNeedToReadMoreBody()

int64_t ConnStateData::mayNeedToReadMoreBody ( ) const
inherited

number of body bytes we need to comm_read for the "current" request

Return values
0We do not need to read any [more] body bytes
negativeMay need more but do not know how many; could be zero!
positiveNeed to read exactly that many more body bytes

Definition at line 3584 of file client_side.cc.

References ConnStateData::bodyPipe, BodyPipe::bodySizeKnown(), Server::inBuf, SBuf::length(), and BodyPipe::unproducedSize().

◆ mayTunnelUnsupportedProto()

bool ConnStateData::mayTunnelUnsupportedProto ( )
inherited

◆ mustStop()

void AsyncJob::mustStop ( const char *  aReason)
protectedinherited

Definition at line 69 of file AsyncJob.cc.

References debugs, AsyncJob::inCall, Must, NULL, AsyncJob::stopReason, and AsyncJob::typeName.

Referenced by HttpStateData::abortAll(), Ftp::Client::abortAll(), Comm::TcpAcceptor::acceptOne(), Adaptation::Ecap::XactionRep::adaptationAborted(), Adaptation::AccessCheck::callBack(), AsyncJob::callException(), Security::PeerConnector::connectionClosed(), HttpStateData::continueAfterParsingHeader(), Ftp::Client::ctrlClosed(), Adaptation::Iterator::handleAdaptationBlock(), Adaptation::Iterator::handleAdaptationError(), Log::TcpLogger::handleClosure(), Adaptation::Icap::Xaction::handleCommClosed(), Http::Tunneler::handleConnectionClosure(), Mgr::Forwarder::handleError(), Ipc::Forwarder::handleError(), Ipc::Forwarder::handleException(), Ipc::Inquirer::handleException(), HttpStateData::handleMoreRequestBodyAvailable(), Ipc::Inquirer::handleRemoteAck(), Ipc::Forwarder::handleTimeout(), HttpStateData::httpStateConnClosed(), HttpStateData::httpTimeout(), Comm::ConnOpener::noteAbort(), Adaptation::Icap::ModXact::noteBodyConsumerAborted(), Snmp::Forwarder::noteCommClosed(), Snmp::Inquirer::noteCommClosed(), Mgr::Inquirer::noteCommClosed(), Mgr::Forwarder::noteCommClosed(), Mgr::StoreToCommWriter::noteCommClosed(), Adaptation::Icap::Xaction::noteCommRead(), Rock::HeaderUpdater::noteDoneReading(), Adaptation::Iterator::noteInitiatorAborted(), Adaptation::Icap::Xaction::noteInitiatorAborted(), Adaptation::Ecap::XactionRep::noteInitiatorAborted(), HttpStateData::readReply(), Comm::ConnOpener::sendAnswer(), Rock::Rebuild::start(), Security::PeerConnector::start(), HttpStateData::start(), Ipc::UdsSender::timedout(), and HttpStateData::wroteLast().

◆ noteBodyConsumerAborted()

void Server::noteBodyConsumerAborted ( BodyPipe::Pointer  ptr)
protectedvirtual

Implements ConnStateData.

Definition at line 280 of file Http1Server.cc.

References ConnStateData::noteBodyConsumerAborted(), and ConnStateData::stopReceiving().

Referenced by ~Server().

◆ noteMoreBodySpaceAvailable()

void Server::noteMoreBodySpaceAvailable ( BodyPipe::Pointer  )
protectedvirtual

◆ notePeerConnection()

virtual void ConnStateData::notePeerConnection ( Comm::ConnectionPointer  )
inlinevirtualinherited

Reimplemented in Ftp::Server.

Definition at line 200 of file client_side.h.

Referenced by FwdState::successfullyConnectedToPeer().

◆ notePinnedConnectionBecameIdle()

◆ notes()

NotePairs::Pointer ConnStateData::notes ( )
inherited
Returns
existing non-empty connection annotations, creates and returns empty annotations otherwise

Definition at line 3986 of file client_side.cc.

References ConnStateData::theNotes.

Referenced by buildHttpRequest(), and UpdateRequestNotes().

◆ parseOneRequest()

Http::Stream * Server::parseOneRequest ( )
protectedvirtual

parse input buffer prefix into a single transfer protocol request return NULL to request more header bytes (after checking any limits) use abortRequestParsing() to handle parsing errors w/o creating request

Implements ConnStateData.

Definition at line 73 of file Http1Server.cc.

References clientProcessRequestFinished(), clientTunnelOnError(), conn, ConnStateData::mayTunnelUnsupportedProto(), method, parseHttpRequest(), parser_, PROF_start, PROF_stop, and request().

Referenced by ~Server().

◆ parseTlsHandshake()

◆ pinBusyConnection()

void ConnStateData::pinBusyConnection ( const Comm::ConnectionPointer pinServerConn,
const HttpRequest::Pointer request 
)
inherited

Forward future client requests using the given to-server connection. The connection is still being used by the current client request.

Definition at line 3724 of file client_side.cc.

References ConnStateData::pinConnection().

Referenced by Ftp::Server::notePeerConnection().

◆ pinnedAuth()

bool ConnStateData::pinnedAuth ( ) const
inlineinherited

Definition at line 197 of file client_side.h.

◆ pinnedPeer()

CachePeer* ConnStateData::pinnedPeer ( ) const
inlineinherited

returts the pinned CachePeer if exists, NULL otherwise

Definition at line 196 of file client_side.h.

◆ pipelinePrefetchMax()

int ConnStateData::pipelinePrefetchMax ( ) const
protectedvirtualinherited

Reimplemented in Ftp::Server.

Definition at line 1762 of file client_side.cc.

References Config, and SquidConfig::pipeline_max_prefetch.

◆ postHttpsAccept()

◆ prepareTlsSwitchingURL()

char * ConnStateData::prepareTlsSwitchingURL ( const Http1::RequestParserPointer hp)
inherited

◆ proceedAfterBodyContinuation()

void Server::proceedAfterBodyContinuation ( Http::StreamPointer  context)
protected

Definition at line 225 of file Http1Server.cc.

References clientProcessRequest(), debugs, RefCount< C >::getRaw(), and parser_.

Referenced by processParsedRequest(), and ~Server().

◆ processHttpRequest()

void Http::One::Server::processHttpRequest ( Http::Stream *const  context)
private

Referenced by ~Server().

◆ processParsedRequest()

◆ proxyProtocolHeader()

const ProxyProtocol::HeaderPointer& ConnStateData::proxyProtocolHeader ( ) const
inlineinherited

Definition at line 323 of file client_side.h.

Referenced by ClientHttpRequest::ClientHttpRequest().

◆ quitAfterError()

void ConnStateData::quitAfterError ( HttpRequest request)
inherited

Changes state so that we close the connection and quit after serving the client-side-detected error response instead of getting stuck.

Definition at line 1466 of file client_side.cc.

References debugs, HttpRequest::flags, HERE(), and RequestFlags::proxyKeepalive.

Referenced by clientProcessRequest(), Ftp::Server::parseOneRequest(), processParsedRequest(), and setReplyError().

◆ reading()

bool Server::reading ( ) const
inlineinherited

◆ readNextRequest()

void ConnStateData::readNextRequest ( )
inherited

Set the timeout BEFORE calling readSomeData().

Please don't do anything with the FD past here!

Definition at line 851 of file client_side.cc.

References commSetConnTimeout(), debugs, fd_note(), HERE(), JobCallback, and ConnStateData::requestTimeout().

◆ readSomeData()

◆ readSomeHttpData()

void Http::One::Server::readSomeHttpData ( )

Referenced by ~Server().

◆ receivedFirstByte()

void ConnStateData::receivedFirstByte ( )
virtualinherited

◆ requestTimeout()

◆ resetSslCommonName()

void ConnStateData::resetSslCommonName ( const char *  name)
inlineinherited

◆ sendControlMsg()

◆ serveDelayedError()

◆ serverBump()

◆ setAuth()

void ConnStateData::setAuth ( const Auth::UserRequest::Pointer aur,
const char *  cause 
)
inherited

Set the user details for connection-based authentication to use from now until connection closure.

Any change to existing credentials shows that something invalid has happened. Such as:

  • NTLM/Negotiate auth was violated by the per-request headers missing a revalidation token
  • NTLM/Negotiate auth was violated by the per-request headers being for another user
  • SSL-Bump CONNECT tunnel with persistent credentials has ended

Definition at line 502 of file client_side.cc.

References comm_reset_close(), debugs, and NULL.

Referenced by Auth::UserRequest::authenticate(), ProxyAuthLookup::LookupDone(), and ClientHttpRequest::sslBumpEstablish().

◆ setReplyError()

void Server::setReplyError ( Http::StreamPointer context,
HttpRequest::Pointer request,
const HttpRequestMethod method,
err_type  requestError,
Http::StatusCode  errStatusCode,
const char *  requestErrorBytes 
)
private

◆ setServerBump()

void ConnStateData::setServerBump ( Ssl::ServerBump srvBump)
inlineinherited

Definition at line 254 of file client_side.h.

References assert.

Referenced by ClientHttpRequest::doCallouts().

◆ splice()

◆ sslCommonName()

const SBuf& ConnStateData::sslCommonName ( ) const
inlineinherited

Definition at line 260 of file client_side.h.

◆ sslCrtdHandleReply()

◆ sslCrtdHandleReplyWrapper()

void ConnStateData::sslCrtdHandleReplyWrapper ( void *  data,
const Helper::Reply reply 
)
staticinherited

Definition at line 2653 of file client_side.cc.

References ConnStateData::sslCrtdHandleReply().

Referenced by ConnStateData::getSslContextStart().

◆ Start()

◆ start()

◆ startDechunkingRequest()

void ConnStateData::startDechunkingRequest ( )
protectedinherited

◆ startPeekAndSplice()

◆ startPinnedConnectionMonitoring()

void ConnStateData::startPinnedConnectionMonitoring ( )
protectedinherited

[re]start monitoring pinned connection for peer closures so that we can propagate them to an idle client pinned to that peer

Definition at line 3790 of file client_side.cc.

References ConnStateData::clientPinnedConnectionRead(), JobCallback, NULL, ConnStateData::pinning, and Comm::Read().

Referenced by ConnStateData::handleIdleClientPinnedTlsRead(), and ConnStateData::notePinnedConnectionBecameIdle().

◆ startShutdown()

void ConnStateData::startShutdown ( )
virtualinherited

Called after receiving a shutdown request and before stopping the main loop. At least one main loop iteration is guaranteed after this call. Meant for cleanup and state saving that may require other modules.

Reimplemented from RegisteredRunner.

Definition at line 1027 of file client_side.cc.

◆ status()

◆ stoppedReceiving()

const char* ConnStateData::stoppedReceiving ( ) const
inlineinherited

Definition at line 150 of file client_side.h.

Referenced by noteMoreBodySpaceAvailable(), and ConnStateData::stopReceiving().

◆ stoppedSending()

const char* ConnStateData::stoppedSending ( ) const
inlineinherited

Definition at line 152 of file client_side.h.

References error(), and size.

Referenced by ConnStateData::stopReceiving().

◆ stopPinnedConnectionMonitoring()

void ConnStateData::stopPinnedConnectionMonitoring ( )
inherited

◆ stopProducingFor()

◆ stopReading()

void Server::stopReading ( )
inherited

◆ stopReceiving()

◆ stopSending()

void ConnStateData::stopSending ( const char *  error)
inherited

Definition at line 972 of file client_side.cc.

References debugs, error(), and HERE().

Referenced by Http::Stream::initiateClose().

◆ swanSong()

void ConnStateData::swanSong ( )
virtualinherited

Reimplemented from Server.

Definition at line 583 of file client_side.cc.

References clientdbEstablished(), debugs, HERE(), NULL, and Server::swanSong().

◆ switchedToHttps()

bool ConnStateData::switchedToHttps ( ) const
inlineinherited

◆ switchToHttps()

◆ tlsClientSni()

const SBuf& ConnStateData::tlsClientSni ( ) const
inlineinherited

Definition at line 262 of file client_side.h.

◆ toCbdata()

virtual void* CbdataParent::toCbdata ( )
pure virtualinherited

◆ transparent()

◆ unpinConnection()

◆ validatePinnedConnection()

const Comm::ConnectionPointer ConnStateData::validatePinnedConnection ( HttpRequest request)
inherited

Checks if there is pinning info if it is valid. It can close the server side connection if pinned info is not valid.

Parameters
requestif it is not NULL also checks if the pinning info refers to the request client side HttpRequest
Returns
The details of the server side connection (may be closed if failures were present).

Definition at line 3882 of file client_side.cc.

References cbdataReferenceValid(), debugs, HERE(), AnyP::Uri::host(), Comm::IsConnOpen(), ConnStateData::pinning, AnyP::Uri::port(), ConnStateData::unpinConnection(), and HttpRequest::url.

Referenced by ConnStateData::borrowPinnedConnection().

◆ whenClientIpKnown()

◆ write() [1/2]

void Server::write ( MemBuf mb)
inlineinherited

◆ write() [2/2]

void Server::write ( char *  buf,
int  len 
)
inlineinherited

◆ writeControlMsgAndCall()

◆ writeSomeData()

virtual void Server::writeSomeData ( )
inlinevirtualinherited

Definition at line 66 of file Server.h.

Referenced by Server::clientWriteDone().

◆ writing()

bool Server::writing ( ) const
inlineinherited

Definition at line 86 of file Server.h.

References Server::maybeMakeSpaceAvailable(), NULL, and Server::writer.

◆ wroteControlMsg()

void HttpControlMsgSink::wroteControlMsg ( const CommIoCbParams params)
inherited

Member Data Documentation

◆ auth

bool ConnStateData::auth
inherited

Definition at line 139 of file client_side.h.

Referenced by clientCheckPinning().

◆ bodyParser

◆ bodyPipe

◆ cbControlMsgSent

AsyncCall::Pointer HttpControlMsgSink::cbControlMsgSent
inherited

◆ clientConnection

Comm::ConnectionPointer Server::clientConnection
inherited

Definition at line 97 of file Server.h.

Referenced by Ftp::Server::acceptDataConnection(), Format::Format::assemble(), Auth::UserRequest::authenticate(), ConnStateData::buildFakeRequest(), buildHttpRequest(), ConnStateData::buildSslCertGenerationParams(), Ftp::Server::callException(), ClientHttpRequest::calloutsError(), IdentLookup::checkForAsync(), clientAclChecklistFill(), ClientHttpRequest::ClientHttpRequest(), clientIdentDone(), clientNegotiateSSL(), Ftp::Server::clientPinnedConnectionClosed(), ConnStateData::clientPinnedConnectionClosed(), ConnStateData::clientPinnedConnectionRead(), clientProcessRequest(), clientProcessRequestFinished(), ClientSocketContextPushDeferredIfNeeded(), clientSocketRecipient(), clientTunnelOnError(), Server::clientWriteDone(), constructHelperQuery(), Ftp::Server::createDataConnection(), ClientHttpRequest::doCallouts(), Server::doClientRead(), Server::doneAll(), ConnStateData::doneWithControlMsg(), ConnStateData::doPeekAndSpliceStep(), ESIContext::fail(), ConnStateData::fakeAConnectRequest(), ConnStateData::getSslContextDone(), ConnStateData::getSslContextStart(), Ftp::Server::handlePasvReply(), Ftp::Server::handleRequest(), httpsCreate(), httpsEstablish(), httpsSslBumpAccessCheckDone(), httpsSslBumpStep2AccessCheckDone(), Ftp::Server::listenForDataConnection(), IdentLookup::LookupDone(), HttpRequest::manager(), ACLIdent::match(), ClientHttpRequest::noteAdaptationAclCheckDone(), ClientHttpRequest::noteBodyProducerAborted(), parseHttpRequest(), Ftp::Server::parseOneRequest(), ConnStateData::parseTlsHandshake(), ConnStateData::pinConnection(), ConnStateData::postHttpsAccept(), prepareAcceleratedURL(), prepareTransparentURL(), clientReplyContext::processExpired(), clientReplyContext::processMiss(), clientReplyContext::processOnlyIfCachedMiss(), processParsedRequest(), clientReplyContext::processReplyAccessResult(), clientReplyContext::purgeFoundObject(), clientReplyContext::purgeRequest(), Server::readSomeData(), PeerSelector::resolveSelected(), clientReplyContext::sendBodyTooLargeError(), ConnStateData::sendControlMsg(), clientReplyContext::sendPreconditionFailedError(), setReplyError(), Ftp::Server::shovelUploadData(), ConnStateData::splice(), ClientHttpRequest::sslBumpEstablish(), ClientHttpRequest::sslBumpStart(), ConnStateData::sslCrtdHandleReply(), start(), Ftp::Server::start(), ConnStateData::start(), ConnStateData::startPeekAndSplice(), statClientRequests(), Server::stopReading(), ConnStateData::stopReceiving(), ConnStateData::storeTlsContextToCache(), Server::swanSong(), ConnStateData::switchToHttps(), tlsAttemptHandshake(), ConnStateData::transparent(), tunnelStart(), TunnelStateData::TunnelStateData(), ConnStateData::whenClientIpKnown(), Server::write(), writeControlMsgAndCall(), Ftp::Server::writeEarlyReply(), Ftp::Server::writeForwardedReplyAndCall(), and Ftp::Server::writeReply().

◆ closeHandler

AsyncCall::Pointer ConnStateData::closeHandler
inherited

Definition at line 144 of file client_side.h.

◆ flags

◆ host

char* ConnStateData::host
inherited

Definition at line 136 of file client_side.h.

◆ id

const InstanceId<AsyncJob> AsyncJob::id
protectedinherited

Definition at line 72 of file AsyncJob.h.

◆ inBuf

◆ inCall

◆ isHttpsServer

const bool Http::One::Server::isHttpsServer
private

Definition at line 63 of file Http1Server.h.

Referenced by start().

◆ log_addr

Ip::Address ConnStateData::log_addr
inherited

◆ method_

HttpRequestMethod Http::One::Server::method_
private

Definition at line 60 of file Http1Server.h.

◆ parser_

Http1::RequestParserPointer Http::One::Server::parser_
private

◆ peer

CachePeer* ConnStateData::peer
inherited

Definition at line 142 of file client_side.h.

Referenced by clientHttpRequestStatus().

◆ pinned

bool ConnStateData::pinned
inherited

Definition at line 138 of file client_side.h.

Referenced by HttpRequest::pinnedConnection().

◆ pinning

◆ pipeline

◆ port

◆ preservedClientData

SBuf ConnStateData::preservedClientData
inherited

client data which may need to forward as-is to server after an on_unsupported_protocol tunnel decision.

Definition at line 312 of file client_side.h.

Referenced by Format::Format::assemble(), clientTunnelOnError(), parseHttpRequest(), ConnStateData::parseTlsHandshake(), and ConnStateData::splice().

◆ reader

AsyncCall::Pointer Server::reader
protectedinherited

◆ readHandler

AsyncCall::Pointer ConnStateData::readHandler
inherited

Definition at line 143 of file client_side.h.

◆ reading

bool ConnStateData::reading
inherited

Definition at line 140 of file client_side.h.

◆ readMore

bool ConnStateData::readMore
inherited

◆ receivedFirstByte_

bool Server::receivedFirstByte_
inherited

Definition at line 112 of file Server.h.

Referenced by Server::doClientRead(), and ConnStateData::switchToHttps().

◆ serverConnection

Comm::ConnectionPointer ConnStateData::serverConnection
inherited

Definition at line 135 of file client_side.h.

Referenced by clientCheckPinning().

◆ sslBumpMode

◆ stopReason

const char* AsyncJob::stopReason
protectedinherited

◆ swanSang

bool ConnStateData::swanSang
inherited

Definition at line 132 of file client_side.h.

◆ tlsParser

Security::HandshakeParser ConnStateData::tlsParser
inherited

Tls parser to use for client HELLO messages parsing on bumped connections.

Definition at line 276 of file client_side.h.

Referenced by ConnStateData::parseTlsHandshake().

◆ transferProtocol

AnyP::ProtocolVersion Server::transferProtocol
inherited

The transfer protocol currently being spoken on this connection. HTTP/1.x CONNECT, HTTP/1.1 Upgrade and HTTP/2 SETTINGS offer the ability to change protocols on the fly.

Definition at line 104 of file Server.h.

Referenced by buildUrlFromHost(), parseHttpRequest(), prepareAcceleratedURL(), prepareTransparentURL(), ConnStateData::splice(), and ConnStateData::switchToHttps().

◆ typeName

◆ writer

AsyncCall::Pointer Server::writer
protectedinherited

Definition at line 125 of file Server.h.

Referenced by Server::clientWriteDone(), Server::write(), and Server::writing().

◆ zeroReply

bool ConnStateData::zeroReply
inherited

Definition at line 141 of file client_side.h.


The documentation for this class was generated from the following files:

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors