#include <FwdState.h>

Inheritance diagram for FwdState:
Collaboration diagram for FwdState:

Public Types

typedef RefCount< FwdStatePointer
 

Public Member Functions

virtual ~FwdState ()
 
void startConnectionOrFail ()
 
void fail (ErrorState *err)
 
void unregister (Comm::ConnectionPointer &conn)
 
void unregister (int fd)
 
void complete ()
 
void handleUnregisteredServerEnd ()
 
int reforward ()
 
bool reforwardableStatus (const Http::StatusCode s) const
 
void serverClosed (int fd)
 
void connectStart ()
 
void connectDone (const Comm::ConnectionPointer &conn, Comm::Flag status, int xerrno)
 
void connectTimeout (int fd)
 
bool checkRetry ()
 
bool checkRetriable ()
 Whether we may try sending this request again after a failure. More...
 
void dispatch ()
 
Comm::ConnectionPointer pconnPop (const Comm::ConnectionPointer &dest, const char *domain)
 
void pconnPush (Comm::ConnectionPointer &conn, const char *domain)
 
bool dontRetry ()
 
void dontRetry (bool val)
 
Comm::ConnectionPointer const & serverConnection () const
 
void startSelectingDestinations (HttpRequest *request, const AccessLogEntry::Pointer &ale, StoreEntry *entry)
 
virtual void * toCbdata ()=0
 

Static Public Member Functions

static void initModule ()
 
static void Start (const Comm::ConnectionPointer &client, StoreEntry *, HttpRequest *, const AccessLogEntryPointer &alp)
 Initiates request forwarding to a peer or origin server. More...
 
static void fwdStart (const Comm::ConnectionPointer &client, StoreEntry *, HttpRequest *)
 Same as Start() but no master xaction info (AccessLogEntry) available. More...
 
static time_t ForwardTimeout (const time_t fwdStart)
 time left to finish the whole forwarding process (which started at fwdStart) More...
 
static bool EnoughTimeToReForward (const time_t fwdStart)
 
static void abort (void *)
 

Public Attributes

StoreEntryentry
 
HttpRequestrequest
 
AccessLogEntryPointer al
 info for the future access.log entry More...
 
bool subscribed = false
 whether noteDestination() and noteDestinationsEnd() calls are allowed More...
 
AsyncCall::Pointer connector
 a call linking us to the ConnOpener producing serverConn. More...
 
bool connected_okay
 TCP link ever opened properly. This affects retry of POST,PUT,CONNECT,etc. More...
 
bool dont_retry
 
bool forward_completed
 

Private Types

enum  PconnRace {
  raceImpossible,
  racePossible,
  raceHappened
}
 possible pconn race states More...
 

Private Member Functions

 CBDATA_CHILD (FwdState)
 
 FwdState (const Comm::ConnectionPointer &client, StoreEntry *, HttpRequest *, const AccessLogEntryPointer &alp)
 
void start (Pointer aSelf)
 
void stopAndDestroy (const char *reason)
 ends forwarding; relies on refcounting so the effect may not be immediate More...
 
virtual void noteDestination (Comm::ConnectionPointer conn) override
 called when a new unique destination has been found More...
 
virtual void noteDestinationsEnd (ErrorState *selectionError) override
 
void doneWithRetries ()
 
void completed ()
 
void retryOrBail ()
 
ErrorStatemakeConnectingError (const err_type type) const
 
void connectedToPeer (Security::EncryptorAnswer &answer)
 
void closeServerConnection (const char *reason)
 stops monitoring server connection for closure and updates pconn stats More...
 
void syncWithServerConn (const char *host)
 called when serverConn is set to an open to-peer connection More...
 
void syncHierNote (const Comm::ConnectionPointer &server, const char *host)
 

Static Private Member Functions

static void logReplyStatus (int tries, const Http::StatusCode status)
 
static void RegisterWithCacheManager (void)
 

Private Attributes

Pointer self
 
ErrorStateerr
 
Comm::ConnectionPointer clientConn
 a possibly open connection to the client. More...
 
time_t start_t
 
int n_tries
 
struct {
   AsyncCall::Pointer   connector
 a call linking us to the ConnOpener producing serverConn. More...
 
calls
 
struct {
   bool   connected_okay
 TCP link ever opened properly. This affects retry of POST,PUT,CONNECT,etc. More...
 
   bool   dont_retry
 
   bool   forward_completed
 
flags
 
Comm::ConnectionList serverDestinations
 
Comm::ConnectionPointer serverConn
 a successfully opened connection to a server. More...
 
AsyncCall::Pointer closeHandler
 The serverConn close handler. More...
 
PconnRace pconnRace
 current pconn race state More...
 

Detailed Description

Definition at line 59 of file FwdState.h.

Member Typedef Documentation

Definition at line 64 of file FwdState.h.

Member Enumeration Documentation

enum FwdState::PconnRace
private
Enumerator
raceImpossible 
racePossible 
raceHappened 

Definition at line 169 of file FwdState.h.

Constructor & Destructor Documentation

FwdState::FwdState ( const Comm::ConnectionPointer client,
StoreEntry e,
HttpRequest r,
const AccessLogEntryPointer alp 
)
private

Member Function Documentation

void FwdState::abort ( void *  d)
static
FwdState::CBDATA_CHILD ( FwdState  )
private
bool FwdState::checkRetriable ( )
void FwdState::closeServerConnection ( const char *  reason)
private
void FwdState::complete ( )
void FwdState::doneWithRetries ( )
private

Definition at line 707 of file FwdState.cc.

References Http::Message::body_pipe, BodyPipe::expectNoConsumption(), NULL, and request.

Referenced by retryOrBail(), and ~FwdState().

void FwdState::dontRetry ( bool  val)
inline

Definition at line 104 of file FwdState.h.

References flags.

bool FwdState::EnoughTimeToReForward ( const time_t  fwdStart)
static

Whether there is still time to re-try after a previous connection failure.

Parameters
fwdStartThe start time of the peer selection/connection process.

Definition at line 417 of file FwdState.cc.

References ForwardTimeout().

Referenced by checkRetry(), and TunnelStateData::noteConnectFailure().

time_t FwdState::ForwardTimeout ( const time_t  fwdStart)
static
void FwdState::fwdStart ( const Comm::ConnectionPointer client,
StoreEntry entry,
HttpRequest request 
)
static
void FwdState::handleUnregisteredServerEnd ( )

Definition at line 715 of file FwdState.cc.

References assert, debugs, entry, err, HERE(), Comm::IsConnOpen(), retryOrBail(), serverConn, and StoreEntry::url().

Referenced by Client::swanSong().

void FwdState::initModule ( )
static

Definition at line 1237 of file FwdState.cc.

References RegisterWithCacheManager().

Referenced by mainInitialize().

void FwdState::logReplyStatus ( int  tries,
const Http::StatusCode  status 
)
staticprivate

Definition at line 1249 of file FwdState.cc.

References assert, FwdReplyCodes, MAX_FWD_STATS_IDX, and Http::scInvalidHeader.

Referenced by complete().

ErrorState * FwdState::makeConnectingError ( const err_type  type) const
private

Create "503 Service Unavailable" or "504 Gateway Timeout" error depending on whether this is a validation request. RFC 2616 says that we MUST reply with "504 Gateway Timeout" if validation fails and cached reply has proxy-revalidate, must-revalidate or s-maxage Cache-Control directive.

Definition at line 1138 of file FwdState.cc.

References HttpRequest::flags, RequestFlags::needValidation, request, Http::scGatewayTimeout, and Http::scServiceUnavailable.

Referenced by connectDone().

void FwdState::noteDestination ( Comm::ConnectionPointer  path)
overrideprivatevirtual

Implements PeerSelectionInitiator.

Definition at line 552 of file FwdState.cc.

References serverDestinations, and startConnectionOrFail().

void FwdState::noteDestinationsEnd ( ErrorState error)
overrideprivatevirtual

called when there will be no more noteDestination() calls

Parameters
erroris a possible reason why no destinations were found; it is guaranteed to be nil if there was at least one noteDestination() call

Implements PeerSelectionInitiator.

Definition at line 563 of file FwdState.cc.

References debugs, err, fail(), Must, serverDestinations, startConnectionOrFail(), and PeerSelectionInitiator::subscribed.

Comm::ConnectionPointer FwdState::pconnPop ( const Comm::ConnectionPointer dest,
const char *  domain 
)

Pops a connection from connection pool if available. If not checks the peer stand-by connection pool for available connection.

Definition at line 1216 of file FwdState.cc.

References SquidConfig::accessList, allow_t::allowed(), checkRetriable(), Config, conn, ACLChecklist::fastCheck(), Comm::Connection::getPeer(), Comm::IsConnOpen(), NULL, PconnPool::pop(), request, and SquidConfig::serverPconnForNonretriable.

Referenced by connectStart().

void FwdState::pconnPush ( Comm::ConnectionPointer conn,
const char *  domain 
)

Decide where details need to be gathered to correctly describe a persistent connection. What is needed:

  • the address/port details about this link
  • domain name of server at other end of this link (either peer or requested host)

Definition at line 1206 of file FwdState.cc.

References Comm::Connection::getPeer(), NULL, and PconnPool::push().

Referenced by HttpStateData::processReplyBody().

void FwdState::RegisterWithCacheManager ( void  )
staticprivate

Definition at line 1243 of file FwdState.cc.

References fwdStats, and Mgr::RegisterAction().

Referenced by initModule().

void FwdState::serverClosed ( int  fd)
Comm::ConnectionPointer const& FwdState::serverConnection ( ) const
inline

return a ConnectionPointer to the current server connection (may or may not be open)

Definition at line 107 of file FwdState.h.

References serverConn.

Referenced by abort(), Ftp::Client::Client(), complete(), connectDone(), connectedToPeer(), connectStart(), dispatch(), gopherStart(), HttpStateData::HttpStateData(), serverClosed(), unregister(), and whoisStart().

void FwdState::Start ( const Comm::ConnectionPointer clientConn,
StoreEntry entry,
HttpRequest request,
const AccessLogEntryPointer al 
)
static

This is the entry point for client-side to start forwarding a transaction. It is a static method that may or may not allocate a FwdState.

Note
client_addr == no_addr indicates this is an "internal" request from peer_digest.c, asn.c, netdb.c, etc and should always be allowed. yuck, I know.

Check if this host is allowed to fetch MISSES from us (miss_access). Intentionally replace the src_addr automatically selected by the checklist code we do NOT want the indirect client address to be tested here.

Definition at line 318 of file FwdState.cc.

References SquidConfig::accessList, aclGetDenyInfoPage(), AclMatchedName, HttpRequest::client_addr, Config, debugs, allow_t::denied(), SquidConfig::denyInfoList, ERR_FORWARDING_DENIED, ERR_NONE, ERR_SHUTTING_DOWN, errorAppendEntry(), ACLChecklist::fastCheck(), HttpRequest::flags, FwdState(), CacheManager::GetInstance(), URL::getScheme(), HERE(), RequestFlags::internal, internalStart(), Ip::Address::isNoAddr(), StoreEntry::mem_obj, SquidConfig::miss, NULL, AnyP::PROTO_CACHE_OBJECT, AnyP::PROTO_URN, request, MemObject::request, Http::scForbidden, Http::scServiceUnavailable, shutting_down, ACLFilledChecklist::src_addr, CacheManager::Start(), start(), HttpRequest::url, StoreEntry::url(), and urnStart().

Referenced by fwdStart(), clientReplyContext::processExpired(), clientReplyContext::processMiss(), and ConnStateData::startPeekAndSplice().

void FwdState::startConnectionOrFail ( )

This is the real beginning of server connection. Call it whenever the forwarding server destination has changed and a new one needs to be opened. Produces the cannot-forward error on fail if no better error exists.

Definition at line 423 of file FwdState.cc.

References HttpRequest::clearError(), connectStart(), debugs, entry, err, ERR_CANNOT_FORWARD, fail(), HERE(), URL::host(), NULL, request, Http::scInternalServerError, serverDestinations, stopAndDestroy(), PeerSelectionInitiator::subscribed, syncHierNote(), HttpRequest::url, and StoreEntry::url().

Referenced by complete(), noteDestination(), noteDestinationsEnd(), retryOrBail(), and start().

void PeerSelectionInitiator::startSelectingDestinations ( HttpRequest request,
const AccessLogEntry::Pointer ale,
StoreEntry entry 
)
inherited

Initiates asynchronous peer selection that eventually results in zero or more noteDestination() calls and exactly one noteDestinationsEnd() call.

Definition at line 182 of file peer_select.cc.

References peerSelect(), and PeerSelectionInitiator::subscribed.

Referenced by start(), and tunnelStart().

void FwdState::stopAndDestroy ( const char *  reason)
private
void FwdState::syncHierNote ( const Comm::ConnectionPointer server,
const char *  host 
)
private
void FwdState::syncWithServerConn ( const char *  host)
private
virtual void* CbdataParent::toCbdata ( )
pure virtualinherited
void FwdState::unregister ( int  fd)

Member Data Documentation

struct { ... } FwdState::calls

Referenced by connectStart(), and ~FwdState().

Comm::ConnectionPointer FwdState::clientConn
private

Definition at line 146 of file FwdState.h.

Referenced by connectDone(), and dispatch().

AsyncCall::Pointer FwdState::closeHandler
private

Definition at line 166 of file FwdState.h.

Referenced by closeServerConnection(), connectDone(), connectStart(), and unregister().

bool FwdState::connected_okay

Definition at line 156 of file FwdState.h.

AsyncCall::Pointer FwdState::connector

Definition at line 152 of file FwdState.h.

Referenced by connectDone().

bool FwdState::dont_retry

Definition at line 157 of file FwdState.h.

struct { ... } FwdState::flags
bool FwdState::forward_completed

Definition at line 158 of file FwdState.h.

int FwdState::n_tries
private

Definition at line 148 of file FwdState.h.

Referenced by checkRetry(), complete(), connectStart(), reforward(), and retryOrBail().

PconnRace FwdState::pconnRace
private

Definition at line 170 of file FwdState.h.

Referenced by connectStart(), fail(), and retryOrBail().

Pointer FwdState::self
private

Definition at line 144 of file FwdState.h.

Comm::ConnectionList FwdState::serverDestinations
private

connections to open, in order, until successful

Definition at line 162 of file FwdState.h.

Referenced by abort(), complete(), connectDone(), connectStart(), connectTimeout(), FwdState(), noteDestination(), noteDestinationsEnd(), reforward(), retryOrBail(), startConnectionOrFail(), and ~FwdState().

time_t FwdState::start_t
private

Definition at line 147 of file FwdState.h.

Referenced by checkRetry(), connectDone(), connectStart(), and retryOrBail().


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

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors