connector = asyncCall(93,3, "Adaptation::Icap::Xaction::noteCommConnected",
ConnectDialer(this, &Adaptation::Icap::Xaction::noteCommConnected));
- ConnOpener *cs = new ConnOpener(connection, connector);
+ ConnOpener *cs = new ConnOpener(connection, connector, TheConfig.connect_timeout(service().cfg().bypass));
cs->setHost(s.cfg().host.termedBuf());
- cs->connect_timeout = TheConfig.connect_timeout(service().cfg().bypass);
AsyncJob::AsyncStart(cs);
}
*/
#include "config.h"
+#include "base/TextException.h"
#include "comm/ConnOpener.h"
#include "comm/Connection.h"
#include "comm.h"
CBDATA_CLASS_INIT(ConnOpener);
-ConnOpener::ConnOpener(Comm::ConnectionPointer &c, AsyncCall::Pointer handler) :
+ConnOpener::ConnOpener(Comm::ConnectionPointer &c, AsyncCall::Pointer &handler, time_t ctimeout) :
AsyncJob("ConnOpener"),
- connect_timeout(Config.Timeout.connect),
+ connect_timeout(ctimeout),
host(NULL),
solo(c),
callback(handler),
ConnOpener::doneAll() const
{
// is the conn to be opened still waiting?
- if (solo != NULL)
+ if (solo != NULL) {
+ debugs(5, 6, HERE << " ConnOpener::doneAll() ? NO. 'solo' is still set");
return false;
+ }
// is the callback still to be called?
- if (callback != NULL)
+ if (callback != NULL) {
+ debugs(5, 6, HERE << " ConnOpener::doneAll() ? NO. callback is still set");
return false;
+ }
+ debugs(5, 6, HERE << " ConnOpener::doneAll() ? YES.");
return true;
}
virtual bool doneAll() const;
virtual void swanSong();
+public:
// ****** ConnOpener API iplementation ******
/** attempt to open a connection. */
- ConnOpener(Comm::ConnectionPointer &, AsyncCall::Pointer handler);
+ ConnOpener(Comm::ConnectionPointer &, AsyncCall::Pointer &handler, time_t connect_timeout);
~ConnOpener();
void setHost(const char *); ///< set the hostname note for this connection
// As soon as comm IO accepts Async calls we can use a ConnOpener::connect call
static void ConnectRetry(int fd, void *data);
-public:
+private:
/**
* time at which to abandon the connection.
* the connection-done callback will be passed COMM_TIMEOUT
*/
time_t connect_timeout;
-private:
char *host; ///< domain name we are trying to connect to.
Comm::ConnectionPointer solo; ///< single connection currently being opened.
AsyncCall::Pointer call = commCbCall(78,3, "idnsInitVCConnected", CommConnectCbPtrFun(idnsInitVCConnected, vc));
- ConnOpener *cs = new ConnOpener(conn, call);
+ ConnOpener *cs = new ConnOpener(conn, call, Config.Timeout.connect);
cs->setHost("DNS TCP Socket");
AsyncJob::AsyncStart(cs);
}
#endif
AsyncCall::Pointer call = commCbCall(17,3, "fwdConnectDoneWrapper", CommConnectCbPtrFun(fwdConnectDoneWrapper, this));
- ConnOpener *cs = new ConnOpener(paths[0], call);
+ ConnOpener *cs = new ConnOpener(paths[0], call, ctimeout);
cs->setHost(host);
- cs->connect_timeout = ctimeout;
AsyncJob::AsyncStart(cs);
}
conn->fd = fd;
AsyncCall::Pointer call = commCbCall(9,3, "FtpStateData::ftpPasvCallback", CommConnectCbPtrFun(FtpStateData::ftpPasvCallback, ftpState));
- ConnOpener *cs = new ConnOpener(conn, call);
+ ConnOpener *cs = new ConnOpener(conn, call, Config.Timeout.connect);
cs->setHost(ftpState->data.host);
AsyncJob::AsyncStart(cs);
}
conn->fd = ftpState->data.fd;
AsyncCall::Pointer call = commCbCall(9,3, "FtpStateData::ftpPasvCallback", CommConnectCbPtrFun(FtpStateData::ftpPasvCallback, ftpState));
- ConnOpener *cs = new ConnOpener(conn, call);
+ ConnOpener *cs = new ConnOpener(conn, call, Config.Timeout.connect);
cs->setHost(ftpState->data.host);
- cs->connect_timeout = Config.Timeout.connect;
AsyncJob::AsyncStart(cs);
}
hash_join(ident_hash, &state->hash);
AsyncCall::Pointer call = commCbCall(30,3, "Ident::ConnectDone", CommConnectCbPtrFun(Ident::ConnectDone, state));
- ConnOpener *cs = new ConnOpener(state->conn, call);
- cs->connect_timeout = Ident::TheConfig.timeout;
- AsyncJob::AsyncStart(cs);
+ AsyncJob::AsyncStart(new ConnOpener(state->conn, call, Ident::TheConfig.timeout));
}
void
p->testing_now++;
AsyncCall::Pointer call = commCbCall(15,3, "peerProbeConnectDone", CommConnectCbPtrFun(peerProbeConnectDone, p));
- ConnOpener *cs = new ConnOpener(conn, call);
- cs->connect_timeout = ctimeout;
+ ConnOpener *cs = new ConnOpener(conn, call, ctimeout);
cs->setHost(p->host);
AsyncJob::AsyncStart(cs);
}
if (status != COMM_TIMEOUT && tunnelState->paths.size() > 0) {
/* Try another IP of this destination host */
AsyncCall::Pointer call = commCbCall(26,3, "tunnelConnectDone", CommConnectCbPtrFun(tunnelConnectDone, tunnelState));
- ConnOpener *cs = new ConnOpener(tunnelState->paths[0], call);
+ ConnOpener *cs = new ConnOpener(tunnelState->paths[0], call, Config.Timeout.connect);
cs->setHost(tunnelState->url);
- cs->connect_timeout = Config.Timeout.connect;
AsyncJob::AsyncStart(cs);
} else {
err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE, request);
}
AsyncCall::Pointer call = commCbCall(26,3, "tunnelConnectDone", CommConnectCbPtrFun(tunnelConnectDone, tunnelState));
- ConnOpener *cs = new ConnOpener(tunnelState->paths[0], call);
+ ConnOpener *cs = new ConnOpener(tunnelState->paths[0], call, Config.Timeout.connect);
cs->setHost(tunnelState->url);
- cs->connect_timeout = Config.Timeout.connect;
AsyncJob::AsyncStart(cs);
}