#include <ConnOpener.h>

Inheritance diagram for Comm::ConnOpener:
Collaboration diagram for Comm::ConnOpener:

Classes

struct  Calls
 handles to calls which we may need to cancel. More...
 

Public Types

typedef CbcPointer< ConnOpenerPointer
 

Public Member Functions

void noteAbort ()
 
virtual bool doneAll () const
 whether positive goal has been reached More...
 
 ConnOpener (Comm::ConnectionPointer &, AsyncCall::Pointer &handler, time_t connect_timeout)
 
 ~ConnOpener ()
 
void setHost (const char *)
 set the hostname note for this connection More...
 
const char * getHost () const
 get the hostname noted for this connection 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...
 

Protected Member Functions

virtual void start ()
 called by AsyncStart; do not call directly More...
 
virtual void swanSong ()
 
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...
 

Protected Attributes

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 (ConnOpener)
 
 ConnOpener (const ConnOpener &)
 
ConnOpeneroperator= (const ConnOpener &c)
 
void earlyAbort (const CommCloseCbParams &)
 
void timeout (const CommTimeoutCbParams &)
 
void sendAnswer (Comm::Flag errFlag, int xerrno, const char *why)
 
void doConnect ()
 Make an FD connection attempt. More...
 
void connected ()
 
void lookupLocalAddress ()
 
void retrySleep ()
 Close and wait a little before trying to open and connect again. More...
 
void restart ()
 called at the end of Comm::ConnOpener::DelayedConnectRetry event More...
 
bool createFd ()
 
void closeFd ()
 cleans I/O state and ends I/O for temporaryFd_ More...
 
void keepFd ()
 cleans I/O state and moves temporaryFd_ to the conn_ for long-term use More...
 
void cleanFd ()
 
void cancelSleep ()
 cleans up this job sleep state More...
 

Static Private Member Functions

static void InProgressConnectRetry (int fd, void *data)
 
static void DelayedConnectRetry (void *data)
 

Private Attributes

char * host_
 domain name we are trying to connect to. More...
 
int temporaryFd_
 the FD being opened. Do NOT set conn_->fd until it is fully open. More...
 
Comm::ConnectionPointer conn_
 single connection currently to be opened. More...
 
AsyncCall::Pointer callback_
 handler to be called on connection completion. More...
 
int totalTries_
 total number of connection attempts over all destinations so far. More...
 
int failRetries_
 number of retries current destination has been tried. More...
 
time_t deadline_
 if we are not done by then, we will call back with Comm::TIMEOUT More...
 
struct Comm::ConnOpener::Calls calls_
 

Detailed Description

Async-opener of a Comm connection.

Definition at line 25 of file ConnOpener.h.

Member Typedef Documentation

Definition at line 32 of file ConnOpener.h.

Constructor & Destructor Documentation

Comm::ConnOpener::ConnOpener ( Comm::ConnectionPointer c,
AsyncCall::Pointer handler,
time_t  connect_timeout 
)

Definition at line 33 of file ConnOpener.cc.

References debugs.

Comm::ConnOpener::~ConnOpener ( )

Definition at line 46 of file ConnOpener.cc.

References safe_free.

Comm::ConnOpener::ConnOpener ( const ConnOpener )
private

Member Function Documentation

void AsyncJob::callEnd ( )
virtualinherited
void AsyncJob::callStart ( AsyncCall call)
inherited
bool AsyncJob::canBeCalled ( AsyncCall call) const
inherited

Definition at line 101 of file AsyncJob.cc.

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

void Comm::ConnOpener::cancelSleep ( )
private

Definition at line 388 of file ConnOpener.cc.

References debugs.

Comm::ConnOpener::CBDATA_CLASS ( ConnOpener  )
private
void Comm::ConnOpener::cleanFd ( )
private

cleans up this job I/O state without closing temporaryFd required before closing temporaryFd or keeping it in conn_ leaves FD bare so must only be called via closeFd() or keepFd()

Definition at line 153 of file ConnOpener.cc.

References comm_remove_close_handler(), COMM_SELECT_WRITE, debugs, fd_table, HERE(), Must, NULL, Comm::SetSelect(), fde::timeout, fde::timeoutHandler, fde::write_data, and fde::write_handler.

void Comm::ConnOpener::closeFd ( )
private

Definition at line 199 of file ConnOpener.cc.

References comm_close.

void Comm::ConnOpener::connected ( )
private

Definition at line 306 of file ConnOpener.cc.

References fd_table, Must, and Comm::OK.

bool Comm::ConnOpener::createFd ( )
private

Create a socket for the future connection or return false. If false is returned, done() is guaranteed to return true and end the job.

Definition at line 258 of file ConnOpener.cc.

References assert, comm_add_close_handler(), comm_openex(), debugs, earlyAbort(), Comm::ERR_CONNECT, fd_table, CachePeer::flags, JobCallback, Must, NULL, CachePeer::params, Ip::Qos::setSockNfmark(), Ip::Qos::setSockTos(), squid_curtime, Squid_MaxFD, and timeout().

void Comm::ConnOpener::DelayedConnectRetry ( void *  data)
staticprivate

Definition at line 472 of file ConnOpener.cc.

References assert, data, JobCallback, restart(), ScheduleCallHere, and CbcPointer< Cbc >::valid().

Referenced by retrySleep().

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

Definition at line 90 of file AsyncJob.cc.

References AsyncJob::doneAll(), NULL, and AsyncJob::stopReason.

Referenced by AsyncJob::callEnd(), and Downloader::downloadFinished().

bool Comm::ConnOpener::doneAll ( ) const
virtual

Reimplemented from AsyncJob.

Definition at line 52 of file ConnOpener.cc.

References AsyncJob::doneAll(), Must, and NULL.

void Comm::ConnOpener::earlyAbort ( const CommCloseCbParams io)
private

Abort connection attempt. Handles the case(s) when a partially setup connection gets closed early.

Definition at line 430 of file ConnOpener.cc.

References CommCommonCbParams::conn, debugs, Comm::ERR_CLOSING, HERE(), NULL, and CommCommonCbParams::xerrno.

Referenced by createFd().

const char * Comm::ConnOpener::getHost ( ) const

Definition at line 101 of file ConnOpener.cc.

void Comm::ConnOpener::InProgressConnectRetry ( int  fd,
void *  data 
)
staticprivate

Definition at line 454 of file ConnOpener.cc.

References assert, data, doConnect(), JobCallback, ScheduleCallHere, and CbcPointer< Cbc >::valid().

Referenced by doConnect().

void Comm::ConnOpener::keepFd ( )
private

Definition at line 218 of file ConnOpener.cc.

References Must, and NULL.

void Comm::ConnOpener::lookupLocalAddress ( )
private

Lookup local-end address and port of the TCP link just opened. This ensure the connection local details are set correctly

Definition at line 409 of file ConnOpener.cc.

References addr, addrinfo::ai_addr, addrinfo::ai_addrlen, DBG_IMPORTANT, debugs, Ip::Address::FreeAddr(), HERE(), Ip::Address::InitAddr(), NULL, and xstrerr().

void Comm::ConnOpener::noteAbort ( )
inline

Definition at line 30 of file ConnOpener.h.

References AsyncJob::mustStop().

ConnOpener& Comm::ConnOpener::operator= ( const ConnOpener c)
private
void Comm::ConnOpener::restart ( )
private

Definition at line 246 of file ConnOpener.cc.

References debugs.

Referenced by DelayedConnectRetry().

void Comm::ConnOpener::retrySleep ( )
private

Definition at line 376 of file ConnOpener.cc.

References DelayedConnectRetry(), eventAdd(), and Must.

void Comm::ConnOpener::sendAnswer ( Comm::Flag  errFlag,
int  xerrno,
const char *  why 
)
private

Connection attempt are completed. One way or the other. Pass the results back to the external handler.

Definition at line 111 of file ConnOpener.cc.

References Config, debugs, ipcacheMarkBadAddr(), ipcacheMarkGoodAddr(), netdbDeleteAddrNetwork(), NULL, SquidConfig::onoff, CachePeer::params, ScheduleCallHere, and SquidConfig::test_reachability.

void Comm::ConnOpener::setHost ( const char *  new_host)
void Comm::ConnOpener::start ( )
protectedvirtual

Reimplemented from AsyncJob.

Definition at line 230 of file ConnOpener.cc.

References Ip::EnableIpv6, IPV6_SPECIAL_V4MAPPING, Must, and NULL.

void Comm::ConnOpener::swanSong ( )
protectedvirtual

Reimplemented from AsyncJob.

Definition at line 70 of file ConnOpener.cc.

References Comm::ERR_CONNECT, NULL, and AsyncJob::swanSong().

void Comm::ConnOpener::timeout ( const CommTimeoutCbParams )
private

Handles the case(s) when a partially setup connection gets timed out. NP: When commSetConnTimeout accepts generic CommCommonCbParams this can die.

Definition at line 443 of file ConnOpener.cc.

References debugs, HERE(), NULL, and Comm::TIMEOUT.

Referenced by createFd().

virtual void* CbdataParent::toCbdata ( )
pure virtualinherited

Member Data Documentation

AsyncCall::Pointer Comm::ConnOpener::callback_
private

Definition at line 74 of file ConnOpener.h.

struct Comm::ConnOpener::Calls Comm::ConnOpener::calls_
private
Comm::ConnectionPointer Comm::ConnOpener::conn_
private

Definition at line 73 of file ConnOpener.h.

time_t Comm::ConnOpener::deadline_
private

Definition at line 80 of file ConnOpener.h.

int Comm::ConnOpener::failRetries_
private

Definition at line 77 of file ConnOpener.h.

char* Comm::ConnOpener::host_
private

Definition at line 71 of file ConnOpener.h.

const InstanceId<AsyncJob> AsyncJob::id
protectedinherited

Definition at line 70 of file AsyncJob.h.

AsyncCall::Pointer AsyncJob::inCall
protectedinherited
const char* AsyncJob::stopReason
protectedinherited
int Comm::ConnOpener::temporaryFd_
private

Definition at line 72 of file ConnOpener.h.

int Comm::ConnOpener::totalTries_
private

Definition at line 76 of file ConnOpener.h.


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

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors