Inheritance diagram for Ftp::Relay:
Collaboration diagram for Ftp::Relay:

Public Types

enum  {
  BEGIN,
  SENT_USER,
  SENT_PASS,
  SENT_TYPE,
  SENT_MDTM,
  SENT_SIZE,
  SENT_EPRT,
  SENT_PORT,
  SENT_EPSV_ALL,
  SENT_EPSV_1,
  SENT_EPSV_2,
  SENT_PASV,
  SENT_CWD,
  SENT_LIST,
  SENT_NLST,
  SENT_REST,
  SENT_RETR,
  SENT_STOR,
  SENT_QUIT,
  READING_DATA,
  WRITING_DATA,
  SENT_MKDIR,
  SENT_FEAT,
  SENT_PWD,
  SENT_CDUP,
  SENT_DATA_REQUEST,
  SENT_COMMAND,
  END
}
 
typedef CbcPointer< AsyncJobPointer
 
typedef CbcPointer< BodyProducerPointer
 
typedef CbcPointer< BodyConsumerPointer
 

Public Member Functions

 Relay (FwdState *const fwdState)
 
virtual ~Relay ()
 
virtual void timeout (const CommTimeoutCbParams &io)
 read timeout handler More...
 
virtual void maybeReadVirginBody ()
 read response data from the network More...
 
void writeCommand (const char *buf)
 
bool handlePasvReply (Ip::Address &remoteAddr)
 
bool handleEpsvReply (Ip::Address &remoteAddr)
 
bool sendEprt ()
 
bool sendPort ()
 
bool sendPassive ()
 
void connectDataChannel ()
 
bool openListenSocket ()
 
void switchTimeoutToDataChannel ()
 
virtual void noteMoreBodyDataAvailable (BodyPipe::Pointer)
 
virtual void noteBodyProductionEnded (BodyPipe::Pointer)
 
virtual void noteBodyProducerAborted (BodyPipe::Pointer)
 
virtual HttpRequestPointer originalRequest ()
 a hack to reach HttpStateData::orignal_request More...
 
virtual void noteAdaptationAnswer (const Adaptation::Answer &answer)
 
virtual void noteAdaptationAclCheckDone (Adaptation::ServiceGroupPointer group)
 
virtual void noteMoreBodySpaceAvailable (BodyPipe::Pointer)
 
virtual void noteBodyConsumerAborted (BodyPipe::Pointer)
 
virtual bool getMoreRequestBody (MemBuf &buf)
 either fill buf with available [encoded] request body bytes or return false More...
 
virtual bool doneAll () const
 whether positive goal has been reached 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
 

Static Public Member Functions

static Pointer Start (AsyncJob *job)
 starts a freshly created job (i.e., makes the job asynchronous) More...
 

Public Attributes

CtrlChannel ctrl
 FTP control channel state. More...
 
DataChannel data
 FTP data channel state. More...
 
enum Ftp::Client:: { ... }  ftp_state_t
 
int state
 
char * old_request
 
char * old_reply
 
StoreEntryentry = nullptr
 
FwdState::Pointer fwd
 
HttpRequestPointer request
 
wordlistmessage
 reply message, one wordlist entry per message line More...
 
char * lastCommand
 the command caused the reply More...
 
char * lastReply
 last line of reply: reply status plus message More...
 
int replyCode
 the reply status More...
 

Protected Types

typedef void(Relay::* PreliminaryCb) ()
 
typedef void(Relay::* SM_FUNC) ()
 

Protected Member Functions

const Ftp::MasterStatemaster () const
 A const variant of updateMaster(). More...
 
Ftp::MasterStateupdateMaster ()
 
Ftp::ServerState serverState () const
 
void serverState (const Ftp::ServerState newState)
 Changes server state and debugs about that important event. More...
 
virtual void failed (err_type error=ERR_NONE, int xerrno=0, ErrorState *ftperr=nullptr)
 handle a fatal transaction error, closing the control connection More...
 
virtual void dataChannelConnected (const CommConnectCbParams &io)
 
virtual void serverComplete ()
 
virtual void handleControlReply ()
 
virtual void processReplyBody ()
 
virtual void handleRequestBodyProducerAborted ()
 
virtual bool mayReadVirginReplyBody () const
 whether we may receive more virgin response body bytes More...
 
virtual void completeForwarding ()
 
virtual bool abortOnData (const char *reason)
 
virtual void start ()
 called by AsyncStart; do not call directly More...
 
virtual void swanSong ()
 
void forwardReply ()
 
void forwardError (err_type error=ERR_NONE, int xerrno=0)
 
void failedErrorMessage (err_type error, int xerrno)
 
HttpReplycreateHttpReply (const Http::StatusCode httpStatus, const int64_t clen=0)
 
void handleDataRequest ()
 
void startDataDownload ()
 
void startDataUpload ()
 
bool startDirTracking ()
 
void stopDirTracking ()
 
bool weAreTrackingDir () const
 
void forwardPreliminaryReply (const PreliminaryCb cb)
 
void proceedAfterPreliminaryReply ()
 
void readGreeting ()
 
void sendCommand ()
 
void readReply ()
 
void readFeatReply ()
 
void readPasvReply ()
 
void readDataReply ()
 
void readTransferDoneReply ()
 
void readEpsvReply ()
 
void readCwdOrCdupReply ()
 
void readUserOrPassReply ()
 
void scheduleReadControlReply ()
 
void stopOriginWait (int code)
 Inform Ftp::Server that we are done if originWaitInProgress. More...
 
virtual void closeServer ()
 
virtual bool doneWithServer () const
 
virtual const Comm::ConnectionPointerdataConnection () const
 
virtual void abortAll (const char *reason)
 abnormal transaction termination; reason is for debugging only More...
 
virtual Http::StatusCode failedHttpStatus (err_type &error)
 
void ctrlClosed (const CommCloseCbParams &io)
 handler called by Comm when FTP control channel is closed unexpectedly More...
 
void scheduleReadControlReply (int buffered_ok)
 
void readControlReply (const CommIoCbParams &io)
 
void writeCommandCallback (const CommIoCbParams &io)
 
void dataRead (const CommIoCbParams &io)
 
void dataComplete ()
 
AsyncCall::Pointer dataCloser ()
 creates a data channel Comm close callback More...
 
virtual void dataClosed (const CommCloseCbParams &io)
 handler called by Comm when FTP data channel is closed unexpectedly More...
 
void initReadBuf ()
 
virtual void sentRequestBody (const CommIoCbParams &io)
 
virtual void doneSendingRequestBody ()
 
virtual void haveParsedReplyHeaders ()
 called when we have final (possibly adapted) reply headers; kids extend More...
 
bool startRequestBodyFlow ()
 
void handleMoreRequestBodyAvailable ()
 
void handleRequestBodyProductionEnded ()
 
void sendMoreRequestBody ()
 
bool abortOnBadEntry (const char *abortReason)
 Entry-dependent callbacks use this check to quit if the entry went bad. More...
 
bool blockCaching ()
 whether to prevent caching of an otherwise cachable response More...
 
void startAdaptation (const Adaptation::ServiceGroupPointer &group, HttpRequest *cause)
 Initiate an asynchronous adaptation transaction which will call us back. More...
 
void adaptVirginReplyBody (const char *buf, ssize_t len)
 
void cleanAdaptation ()
 
virtual bool doneWithAdaptation () const
 
void handleMoreAdaptedBodyAvailable ()
 
void handleAdaptedBodyProductionEnded ()
 
void handleAdaptedBodyProducerAborted ()
 
void handleAdaptedHeader (Http::Message *msg)
 
void handleAdaptationCompleted ()
 
void handleAdaptationBlocked (const Adaptation::Answer &answer)
 
void handleAdaptationAborted (bool bypassable=false)
 
bool handledEarlyAdaptationAbort ()
 
void resumeBodyStorage ()
 called by StoreEntry when it has more buffer space available More...
 
void endAdaptedBodyConsumption ()
 called when the entire adapted response body is consumed More...
 
const HttpReplyvirginReply () const
 
HttpReplyvirginReply ()
 
HttpReplysetVirginReply (HttpReply *r)
 
HttpReplyfinalReply ()
 
HttpReplysetFinalReply (HttpReply *r)
 
void adaptOrFinalizeReply ()
 
void addVirginReplyBody (const char *buf, ssize_t len)
 
void storeReplyBody (const char *buf, ssize_t len)
 
size_t replyBodySpace (const MemBuf &readBuf, const size_t minSpace) const
 
size_t calcBufferSpaceToReserve (const size_t space, const size_t wantSpace) const
 determine how much space the buffer needs to reserve More...
 
void adjustBodyBytesRead (const int64_t delta)
 initializes bodyBytesRead stats if needed and applies delta More...
 
CbcPointer< Initiate > initiateAdaptation (Initiate *x)
 < starts freshly created initiate and returns a safe pointer to it More...
 
void clearAdaptation (CbcPointer< Initiate > &x)
 clears the pointer (does not call announceInitiatorAbort) More...
 
void announceInitiatorAbort (CbcPointer< Initiate > &x)
 inform the transaction about abnormal termination and clear the pointer More...
 
bool initiated (const CbcPointer< AsyncJob > &job) const
 Must(initiated(initiate)) instead of Must(initiate.set()), for clarity. More...
 
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)
 
void stopConsumingFrom (RefCount< BodyPipe > &)
 

Static Protected Member Functions

static void abort (void *d)
 

Protected Attributes

PreliminaryCb thePreliminaryCb
 
bool forwardingCompleted
 completeForwarding() has been called More...
 
bool originWaitInProgress
 
struct {
   wordlist *   message
 reply message, one wordlist entry per message line More...
 
   char *   lastCommand
 the command caused the reply More...
 
   char *   lastReply
 last line of reply: reply status plus message More...
 
   int   replyCode
 the reply status More...
 
savedReply
 set and delayed while we are tracking using PWD More...
 
int64_t currentOffset = 0
 
MemBufresponseBodyBuffer = nullptr
 
BodyPipe::Pointer requestBodySource
 
AsyncCall::Pointer requestSender
 
BodyPipe::Pointer virginBodyDestination
 
CbcPointer< Adaptation::InitiateadaptedHeadSource
 
BodyPipe::Pointer adaptedBodySource
 
bool adaptationAccessCheckPending = false
 
bool startedAdaptation = false
 
bool receivedWholeRequestBody = false
 handleRequestBodyProductionEnded called More...
 
const char * doneWithFwd = nullptr
 
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...
 

Static Protected Attributes

static const SM_FUNC SM_FUNCS []
 

Private Member Functions

 CBDATA_CLASS (Relay)
 

Detailed Description

An FTP client receiving native FTP commands from our FTP server (Ftp::Server), forwarding them to the next FTP hop, and then relaying FTP replies back to our FTP server.

Definition at line 33 of file FtpRelay.cc.

Member Typedef Documentation

◆ Pointer [1/3]

Definition at line 25 of file BodyPipe.h.

◆ Pointer [2/3]

Definition at line 34 of file AsyncJob.h.

◆ Pointer [3/3]

Definition at line 45 of file BodyPipe.h.

◆ PreliminaryCb

typedef void(Relay::* Ftp::Relay::PreliminaryCb) ()
protected

Definition at line 75 of file FtpRelay.cc.

◆ SM_FUNC

typedef void(Relay::* Ftp::Relay::SM_FUNC) ()
protected

Definition at line 80 of file FtpRelay.cc.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
inherited
Enumerator
BEGIN 
SENT_USER 
SENT_PASS 
SENT_TYPE 
SENT_MDTM 
SENT_SIZE 
SENT_EPRT 
SENT_PORT 
SENT_EPSV_ALL 
SENT_EPSV_1 
SENT_EPSV_2 
SENT_PASV 
SENT_CWD 
SENT_LIST 
SENT_NLST 
SENT_REST 
SENT_RETR 
SENT_STOR 
SENT_QUIT 
READING_DATA 
WRITING_DATA 
SENT_MKDIR 
SENT_FEAT 
SENT_PWD 
SENT_CDUP 
SENT_DATA_REQUEST 
SENT_COMMAND 
END 

Definition at line 127 of file FtpClient.h.

Constructor & Destructor Documentation

◆ Relay()

Ftp::Relay::Relay ( FwdState *const  fwdState)
explicit

◆ ~Relay()

Ftp::Relay::~Relay ( )
virtual

Definition at line 168 of file FtpRelay.cc.

References Ftp::Client::closeServer(), savedReply, wordlistDestroy(), and xfree.

Member Function Documentation

◆ abort()

void Ftp::Relay::abort ( void *  d)
staticprotected

◆ abortAll()

◆ abortOnBadEntry()

◆ abortOnData()

bool Ftp::Relay::abortOnData ( const char *  reason)
protectedvirtual

abnormal data transfer termination

Return values
truethe transaction will be terminated (abortAll called)
falsethe transaction will survive

Reimplemented from Client.

Definition at line 751 of file FtpRelay.cc.

References Client::adaptedBodySource, Ftp::Channel::conn, Ftp::Client::ctrl, Ftp::Client::data, Ftp::Client::dataComplete(), debugs, Comm::Connection::fd, Comm::IsConnOpen(), NULL, and BodyConsumer::stopConsumingFrom().

Referenced by processReplyBody(), and serverState().

◆ adaptOrFinalizeReply()

◆ adaptVirginReplyBody()

void Client::adaptVirginReplyBody ( const char *  buf,
ssize_t  len 
)
protectedinherited

◆ addVirginReplyBody()

◆ adjustBodyBytesRead()

void Client::adjustBodyBytesRead ( const int64_t  delta)
protectedinherited

◆ announceInitiatorAbort()

◆ blockCaching()

◆ calcBufferSpaceToReserve()

size_t Client::calcBufferSpaceToReserve ( const size_t  space,
const size_t  wantSpace 
) const
protectedinherited

◆ 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()

Ftp::Relay::CBDATA_CLASS ( Relay  )
private

◆ cleanAdaptation()

◆ clearAdaptation()

◆ closeServer()

void Ftp::Client::closeServer ( )
protectedvirtualinherited

◆ completeForwarding()

void Ftp::Relay::completeForwarding ( )
protectedvirtual

Ensure we do not double-complete on the forward entry. We complete forwarding when the response adaptation is over (but we may still be waiting for 226 from the FTP server) and also when we get that 226 from the server (and adaptation is done).

Todo:
Rewrite FwdState to ignore double completion?

Reimplemented from Client.

Definition at line 267 of file FtpRelay.cc.

References Client::completeForwarding(), debugs, and forwardingCompleted.

Referenced by serverState().

◆ connectDataChannel()

◆ createHttpReply()

◆ ctrlClosed()

void Ftp::Client::ctrlClosed ( const CommCloseCbParams io)
protectedinherited

◆ dataChannelConnected()

◆ dataClosed()

void Ftp::Client::dataClosed ( const CommCloseCbParams io)
protectedvirtualinherited

◆ dataCloser()

◆ dataComplete()

void Client::dataComplete ( )
protectedinherited

Close data channel, if any, to conserve resources while we wait.

Definition at line 991 of file FtpClient.cc.

References Ftp::Channel::close(), Ftp::Client::data, debugs, Ftp::Client::scheduleReadControlReply(), and AsyncJob::status().

Referenced by abort(), abortOnData(), Ftp::Client::dataRead(), Ftp::Client::doneSendingRequestBody(), and Ftp::Gateway::readStor().

◆ dataConnection()

const Comm::ConnectionPointer & Client::dataConnection ( ) const
protectedvirtualinherited
Returns
primary or "request data connection"

Implements Client.

Definition at line 883 of file FtpClient.cc.

References Ftp::Channel::conn, and Ftp::Client::data.

◆ dataRead()

◆ deleteThis()

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

◆ done()

◆ doneAll()

bool Client::doneAll ( ) const
virtualinherited

Reimplemented from AsyncJob.

Definition at line 197 of file Client.cc.

References AsyncJob::doneAll(), Client::doneWithAdaptation(), and Client::doneWithServer().

◆ doneSendingRequestBody()

void Ftp::Client::doneSendingRequestBody ( )
protectedvirtualinherited

called after we wrote the last byte of the request body

Implements Client.

Definition at line 1054 of file FtpClient.cc.

References Ftp::Client::dataComplete(), debugs, Client::doneSendingRequestBody(), and AsyncJob::status().

◆ doneWithAdaptation()

bool Client::doneWithAdaptation ( ) const
protectedvirtualinherited

◆ doneWithServer()

bool Ftp::Client::doneWithServer ( ) const
protectedvirtualinherited

Did we close all FTP server connection(s)?

Return values
trueBoth server control and data channels are closed. And not waiting for a new data connection to open.
falseEither control channel or data is still active.

Implements Client.

Definition at line 240 of file FtpClient.cc.

References Ftp::Channel::conn, Ftp::Client::ctrl, Ftp::Client::data, and Comm::IsConnOpen().

Referenced by failed(), Ftp::Gateway::haveControlChannel(), and Ftp::Gateway::mayReadVirginReplyBody().

◆ endAdaptedBodyConsumption()

void Client::endAdaptedBodyConsumption ( )
protectedinherited

◆ failed()

void Ftp::Relay::failed ( err_type  error = ERR_NONE,
int  xerrno = 0,
ErrorState ftperr = nullptr 
)
protectedvirtual

◆ failedErrorMessage()

void Ftp::Relay::failedErrorMessage ( err_type  error,
int  xerrno 
)
protected

◆ failedHttpStatus()

Http::StatusCode Client::failedHttpStatus ( err_type error)
protectedvirtualinherited

◆ finalReply()

HttpReply * Client::finalReply ( )
protectedinherited

Definition at line 130 of file Client.cc.

References assert, and Client::theFinalReply.

Referenced by HttpStateData::haveParsedReplyHeaders(), and HttpStateData::reusableReply().

◆ forwardError()

void Ftp::Relay::forwardError ( err_type  error = ERR_NONE,
int  xerrno = 0 
)
protected

Definition at line 419 of file FtpRelay.cc.

References failed().

Referenced by dataChannelConnected(), readEpsvReply(), readPasvReply(), and serverState().

◆ forwardPreliminaryReply()

◆ forwardReply()

◆ getMoreRequestBody()

bool Client::getMoreRequestBody ( MemBuf buf)
virtualinherited

◆ handleAdaptationAborted()

void Client::handleAdaptationAborted ( bool  bypassable = false)
protectedinherited

◆ handleAdaptationBlocked()

◆ handleAdaptationCompleted()

◆ handleAdaptedBodyProducerAborted()

◆ handleAdaptedBodyProductionEnded()

void Client::handleAdaptedBodyProductionEnded ( )
protectedinherited

◆ handleAdaptedHeader()

◆ handleControlReply()

◆ handleDataRequest()

void Ftp::Relay::handleDataRequest ( )
protected

◆ handledEarlyAdaptationAbort()

bool Client::handledEarlyAdaptationAbort ( )
protectedinherited

◆ handleEpsvReply()

◆ handleMoreAdaptedBodyAvailable()

◆ handleMoreRequestBodyAvailable()

void Client::handleMoreRequestBodyAvailable ( )
protectedinherited

◆ handlePasvReply()

bool Client::handlePasvReply ( Ip::Address remoteAddr)
inherited

◆ handleRequestBodyProducerAborted()

void Ftp::Relay::handleRequestBodyProducerAborted ( )
protectedvirtual

Implements Client.

Definition at line 359 of file FtpRelay.cc.

References ERR_READ_ERROR, failed(), and Client::handleRequestBodyProducerAborted().

Referenced by serverState().

◆ handleRequestBodyProductionEnded()

void Client::handleRequestBodyProductionEnded ( )
protectedinherited

◆ haveParsedReplyHeaders()

void Client::haveParsedReplyHeaders ( )
protectedvirtualinherited

◆ initiateAdaptation()

◆ initiated()

◆ initReadBuf()

void Client::initReadBuf ( )
protectedinherited

◆ master()

const Ftp::MasterState & Ftp::Relay::master ( ) const
protected

Definition at line 244 of file FtpRelay.cc.

References updateMaster().

Referenced by handleDataRequest(), processReplyBody(), readGreeting(), serverState(), and start().

◆ maybeReadVirginBody()

◆ mayReadVirginReplyBody()

bool Ftp::Relay::mayReadVirginReplyBody ( ) const
protectedvirtual

Implements Client.

Definition at line 367 of file FtpRelay.cc.

References Ftp::Channel::conn, Ftp::Client::data, and Comm::IsConnOpen().

Referenced by serverState().

◆ 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().

◆ noteAdaptationAclCheckDone()

void Client::noteAdaptationAclCheckDone ( Adaptation::ServiceGroupPointer  group)
virtualinherited

AccessCheck calls this back with a possibly nil service group to signal whether adaptation is needed and where it should start.

Reimplemented from Adaptation::Initiator.

Definition at line 910 of file Client.cc.

References Client::abortOnBadEntry(), Client::adaptationAccessCheckPending, debugs, HERE(), Client::originalRequest(), Client::processReplyBody(), Client::request, Client::sendBodyIsTooLargeError(), Client::setFinalReply(), Client::startAdaptation(), and Client::virginReply().

◆ noteAdaptationAnswer()

void Client::noteAdaptationAnswer ( const Adaptation::Answer answer)
virtualinherited

◆ noteBodyConsumerAborted()

void Client::noteBodyConsumerAborted ( BodyPipe::Pointer  )
virtualinherited

◆ noteBodyProducerAborted()

void Client::noteBodyProducerAborted ( BodyPipe::Pointer  bp)
virtualinherited

◆ noteBodyProductionEnded()

void Client::noteBodyProductionEnded ( BodyPipe::Pointer  bp)
virtualinherited

◆ noteMoreBodyDataAvailable()

void Client::noteMoreBodyDataAvailable ( BodyPipe::Pointer  bp)
virtualinherited

◆ noteMoreBodySpaceAvailable()

void Client::noteMoreBodySpaceAvailable ( BodyPipe::Pointer  )
virtualinherited

◆ openListenSocket()

bool Client::openListenSocket ( )
inherited

Definition at line 779 of file FtpClient.cc.

Referenced by Ftp::Client::sendEprt().

◆ originalRequest()

◆ proceedAfterPreliminaryReply()

void Ftp::Relay::proceedAfterPreliminaryReply ( )
protected

Definition at line 408 of file FtpRelay.cc.

References debugs, Must, NULL, and thePreliminaryCb.

Referenced by forwardPreliminaryReply().

◆ processReplyBody()

◆ readControlReply()

◆ readCwdOrCdupReply()

◆ readDataReply()

◆ readEpsvReply()

◆ readFeatReply()

void Ftp::Relay::readFeatReply ( )
protected

◆ readGreeting()

◆ readPasvReply()

◆ readReply()

◆ readTransferDoneReply()

void Ftp::Relay::readTransferDoneReply ( )
protected

◆ readUserOrPassReply()

void Ftp::Relay::readUserOrPassReply ( )
protected

◆ replyBodySpace()

size_t Client::replyBodySpace ( const MemBuf readBuf,
const size_t  minSpace 
) const
protectedinherited

◆ resumeBodyStorage()

◆ scheduleReadControlReply() [1/2]

void Ftp::Relay::scheduleReadControlReply ( )
protected

Definition at line 745 of file FtpRelay.cc.

References Ftp::Client::scheduleReadControlReply().

Referenced by readGreeting(), and readReply().

◆ scheduleReadControlReply() [2/2]

◆ sendCommand()

◆ sendEprt()

◆ sendMoreRequestBody()

◆ sendPassive()

bool Client::sendPassive ( )
inherited
Checks for EPSV ALL special conditions: If enabled to be sent, squid MUST NOT request any other connect methods. If 'ALL' is sent and fails the entire FTP Session fails. NP: By my reading exact EPSV protocols maybe attempted, but only EPSV method.

Closes any old FTP-Data connection which may exist. */

Checks for previous EPSV/PASV failures on this server/session. Diverts to EPRT immediately if they are not working.
Send EPSV (ALL,2,1) or PASV on the control channel.
  • EPSV ALL is used if enabled.
  • EPSV 2 is used if ALL is disabled and IPv6 is available and ctrl channel is IPv6.
  • EPSV 1 is used if EPSV 2 (IPv6) fails or is not available or ctrl channel is IPv4.
  • PASV is used if EPSV 1 fails.

Definition at line 637 of file FtpClient.cc.

References SquidConfig::accessList, Acl::Answer::allowed(), Packable::appendf(), Ftp::Channel::close(), Config, Ftp::Channel::conn, MemBuf::content(), Ftp::crlf, Ftp::Client::ctrl, Ftp::Client::data, DBG_IMPORTANT, debugs, SquidConfig::epsv_all, ERR_FTP_FAILURE, Ftp::Client::failed(), ACLChecklist::fastCheck(), SquidConfig::Ftp, SquidConfig::ftp_epsv, Client::fwd, Ip::Address::isIPv4(), Ip::Address::isIPv6(), Comm::Connection::local, Ftp::CtrlChannel::message, NULL, Ftp::CtrlChannel::offset, SquidConfig::passive, Comm::Connection::remote, FwdState::request, MemBuf::reset(), Ftp::Client::sendEprt(), Ftp::Client::SENT_EPSV_1, Ftp::Client::SENT_EPSV_2, Ftp::Client::SENT_EPSV_ALL, Ftp::Client::SENT_PASV, Ftp::Client::shortenReadTimeout, Ftp::Client::state, AsyncJob::status(), wordlistDestroy(), and Ftp::Client::writeCommand().

Referenced by ftpSendPassive(), Ftp::Client::handleEpsvReply(), and sendCommand().

◆ sendPort()

bool Client::sendPort ( )
inherited

Definition at line 630 of file FtpClient.cc.

References ERR_FTP_FAILURE, and Ftp::Client::failed().

Referenced by Ftp::Client::sendEprt().

◆ sentRequestBody()

void Client::sentRequestBody ( const CommIoCbParams io)
protectedvirtualinherited

◆ serverComplete()

void Ftp::Relay::serverComplete ( )
protectedvirtual

◆ serverState() [1/2]

◆ serverState() [2/2]

void Ftp::Relay::serverState ( const Ftp::ServerState  newState)
protected

Definition at line 251 of file FtpRelay.cc.

References debugs, Ftp::MasterState::serverState, and updateMaster().

◆ setFinalReply()

◆ setVirginReply()

◆ Start()

◆ start()

void Ftp::Relay::start ( )
protectedvirtual

◆ startAdaptation()

◆ startDataDownload()

◆ startDataUpload()

◆ startDirTracking()

◆ startRequestBodyFlow()

◆ status()

◆ stopConsumingFrom()

◆ stopDirTracking()

◆ stopOriginWait()

◆ stopProducingFor()

◆ storeReplyBody()

void Client::storeReplyBody ( const char *  buf,
ssize_t  len 
)
protectedinherited

Definition at line 998 of file Client.cc.

References Client::currentOffset, Client::entry, len, and StoreEntry::write().

Referenced by Client::addVirginReplyBody().

◆ swanSong()

void Ftp::Relay::swanSong ( )
protectedvirtual

Reimplemented from Client.

Definition at line 191 of file FtpRelay.cc.

References stopOriginWait(), and Client::swanSong().

Referenced by serverState().

◆ switchTimeoutToDataChannel()

void Ftp::Client::switchTimeoutToDataChannel ( )
inherited

◆ timeout()

◆ toCbdata()

virtual void* CbdataParent::toCbdata ( )
pure virtualinherited

◆ updateMaster()

Ftp::MasterState & Ftp::Relay::updateMaster ( )
protected

Safely returns the master state, with safety checks in case the Ftp::Server side of the master xact is gone.

Definition at line 228 of file FtpRelay.cc.

References HttpRequest::clientConnectionManager, debugs, Client::fwd, CbcPointer< Cbc >::get(), FwdState::request, and CbcPointer< Cbc >::valid().

Referenced by master(), readEpsvReply(), readGreeting(), readPasvReply(), serverState(), and stopDirTracking().

◆ virginReply() [1/2]

◆ virginReply() [2/2]

HttpReply * Client::virginReply ( )
protectedinherited

Definition at line 103 of file Client.cc.

References assert, and Client::theVirginReply.

◆ weAreTrackingDir()

bool Ftp::Relay::weAreTrackingDir ( ) const
inlineprotected

Definition at line 73 of file FtpRelay.cc.

References NULL, and savedReply.

Referenced by readCwdOrCdupReply(), and readUserOrPassReply().

◆ writeCommand()

◆ writeCommandCallback()

Member Data Documentation

◆ adaptationAccessCheckPending

◆ adaptedBodySource

◆ adaptedHeadSource

CbcPointer<Adaptation::Initiate> Client::adaptedHeadSource
protectedinherited

to get adapted response headers

Definition at line 174 of file Client.h.

Referenced by Client::cleanAdaptation(), Client::doneWithAdaptation(), Client::noteAdaptationAnswer(), and Client::startAdaptation().

◆ ctrl

CtrlChannel Ftp::Client::ctrl
inherited

Definition at line 124 of file FtpClient.h.

Referenced by Ftp::Client::abortAll(), abortOnData(), Ftp::Client::Client(), Ftp::Client::closeServer(), Ftp::Gateway::completedListing(), Ftp::Gateway::completeForwarding(), Ftp::Client::connectDataChannel(), createHttpReply(), Ftp::Client::ctrlClosed(), Ftp::Client::doneWithServer(), Ftp::Client::failed(), Ftp::Gateway::failedHttpStatus(), Ftp::Gateway::ftpAcceptDataConnection(), ftpFail(), ftpOpenListenSocket(), ftpReadCwd(), ftpReadEPRT(), ftpReadEPSV(), ftpReadList(), ftpReadMdtm(), ftpReadMkdir(), ftpReadPass(), ftpReadPORT(), ftpReadRest(), ftpReadRetr(), ftpReadSize(), ftpReadTransferDone(), ftpReadType(), ftpReadUser(), ftpReadWelcome(), ftpSendReply(), ftpWriteTransferDone(), Ftp::Gateway::hackShortcut(), handleControlReply(), Ftp::Gateway::handleControlReply(), Ftp::Client::handleControlReply(), Ftp::Client::handleEpsvReply(), Ftp::Client::handlePasvReply(), Ftp::Gateway::haveControlChannel(), Ftp::Gateway::listenForDataChannel(), Ftp::Gateway::loginFailed(), Ftp::Client::parseControlReply(), Ftp::Client::readControlReply(), readCwdOrCdupReply(), readDataReply(), readEpsvReply(), readFeatReply(), readGreeting(), readPasvReply(), readReply(), Ftp::Gateway::readStor(), readTransferDoneReply(), readUserOrPassReply(), Ftp::Client::scheduleReadControlReply(), Ftp::Client::sendPassive(), serverComplete(), Ftp::Gateway::start(), startDirTracking(), stopDirTracking(), Ftp::Client::switchTimeoutToDataChannel(), Ftp::Client::writeCommand(), and Ftp::Gateway::~Gateway().

◆ currentOffset

int64_t Client::currentOffset = 0
protectedinherited

Our current offset in the StoreEntry

Definition at line 160 of file Client.h.

Referenced by Client::handleMoreAdaptedBodyAvailable(), Client::haveParsedReplyHeaders(), and Client::storeReplyBody().

◆ data

◆ doneWithFwd

const char* Client::doneWithFwd = nullptr
protectedinherited

whether we should not be talking to FwdState; XXX: clear fwd instead points to a string literal which is used only for debugging

Definition at line 184 of file Client.h.

Referenced by Client::completeForwarding(), Ftp::Client::ctrlClosed(), HttpStateData::httpStateConnClosed(), and Client::swanSong().

◆ entry

StoreEntry* Client::entry = nullptr
inherited

Definition at line 164 of file Client.h.

Referenced by Client::abortOnBadEntry(), Ftp::Gateway::appendSuccessHeader(), Client::blockCaching(), HttpStateData::buildRequestPrefix(), Client::Client(), Ftp::Gateway::completedListing(), HttpStateData::continueAfterParsingHeader(), Ftp::Client::dataRead(), failed(), Ftp::Client::failed(), failedErrorMessage(), forwardReply(), Ftp::Gateway::ftpAcceptDataConnection(), ftpFail(), ftpSendReply(), ftpWriteTransferDone(), Ftp::Gateway::Gateway(), Client::handleAdaptationAborted(), Client::handleAdaptationBlocked(), Client::handleAdaptedBodyProducerAborted(), Client::handledEarlyAdaptationAbort(), Client::handleMoreAdaptedBodyAvailable(), HttpStateData::handleMoreRequestBodyAvailable(), HttpStateData::handleRequestBodyProducerAborted(), HttpStateData::haveParsedReplyHeaders(), Ftp::Gateway::haveParsedReplyHeaders(), HttpStateData::HttpStateData(), HttpStateData::httpTimeout(), HttpStateData::keepaliveAccounting(), Ftp::Gateway::listenForDataChannel(), Ftp::Gateway::loginFailed(), Ftp::Client::maybeReadVirginBody(), Ftp::Gateway::parseListing(), HttpStateData::peerSupportsConnectionPinning(), Ftp::Gateway::processHeadResponse(), processReplyBody(), HttpStateData::processReplyBody(), Ftp::Gateway::processReplyBody(), HttpStateData::processReplyHeader(), HttpStateData::processSurrogateControl(), Ftp::Client::readControlReply(), HttpStateData::readReply(), Relay(), HttpStateData::reusableReply(), Client::sentRequestBody(), Client::setFinalReply(), Ftp::Gateway::start(), HttpStateData::statusIfComplete(), Client::storeReplyBody(), Ftp::Client::timeout(), HttpStateData::wroteLast(), Client::~Client(), and Ftp::Gateway::~Gateway().

◆ forwardingCompleted

bool Ftp::Relay::forwardingCompleted
protected

Definition at line 100 of file FtpRelay.cc.

Referenced by completeForwarding().

◆ ftp_state_t

enum { ... } Ftp::Client::ftp_state_t

◆ fwd

◆ id

const InstanceId<AsyncJob> AsyncJob::id
protectedinherited

Definition at line 72 of file AsyncJob.h.

◆ inCall

◆ lastCommand

char* Ftp::Relay::lastCommand

Definition at line 108 of file FtpRelay.cc.

◆ lastReply

char* Ftp::Relay::lastReply

Definition at line 109 of file FtpRelay.cc.

◆ message

wordlist* Ftp::Relay::message

Definition at line 107 of file FtpRelay.cc.

◆ old_reply

char* Ftp::Client::old_reply
inherited

◆ old_request

char* Ftp::Client::old_request
inherited

◆ originWaitInProgress

bool Ftp::Relay::originWaitInProgress
protected

whether we are between Ftp::Server::startWaitingForOrigin() and Ftp::Server::stopWaitingForOrigin() calls

Definition at line 104 of file FtpRelay.cc.

Referenced by sendCommand(), and stopOriginWait().

◆ receivedWholeRequestBody

bool Client::receivedWholeRequestBody = false
protectedinherited

◆ replyCode

int Ftp::Relay::replyCode

Definition at line 110 of file FtpRelay.cc.

◆ request

◆ requestBodySource

◆ requestSender

◆ responseBodyBuffer

MemBuf* Client::responseBodyBuffer = nullptr
protectedinherited

◆ savedReply

struct { ... } Ftp::Relay::savedReply

◆ SM_FUNCS

◆ startedAdaptation

bool Client::startedAdaptation = false
protectedinherited

◆ state

◆ stopReason

const char* AsyncJob::stopReason
protectedinherited

◆ thePreliminaryCb

PreliminaryCb Ftp::Relay::thePreliminaryCb
protected

Definition at line 78 of file FtpRelay.cc.

Referenced by forwardPreliminaryReply(), and proceedAfterPreliminaryReply().

◆ typeName

◆ virginBodyDestination


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

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors