Exemplo n.º 1
0
void Connector::tryNextServiceOrFallback() {
	if (queriedAllServices) {
		SWIFT_LOG(debug) << "Queried all services" << std::endl;
		finish(boost::shared_ptr<Connection>());
	}
	else if (serviceQueryResults.empty()) {
		SWIFT_LOG(debug) << "Falling back on A resolution" << std::endl;
		// Fall back on simple address resolving
		queriedAllServices = true;
		queryAddress(hostname);
	}
	else {
		SWIFT_LOG(debug) << "Querying next address" << std::endl;
		queryAddress(serviceQueryResults.front().hostname);
	}
}
Exemplo n.º 2
0
void Connector::start() {
    SWIFT_LOG(debug) << "Starting connector for " << hostname << std::endl;
    assert(!currentConnection);
    assert(!serviceQuery);
    assert(!timer);
    queriedAllServices = false;
    auto hostAddress = HostAddress::fromString(hostname);
    if (timeoutMilliseconds > 0) {
        timer = timerFactory->createTimer(timeoutMilliseconds);
        timer->onTick.connect(boost::bind(&Connector::handleTimeout, shared_from_this()));
    }
    if (serviceLookupPrefix) {
        serviceQuery = resolver->createServiceQuery(*serviceLookupPrefix, hostname);
        serviceQuery->onResult.connect(boost::bind(&Connector::handleServiceQueryResult, shared_from_this(), _1));
        serviceQuery->run();
    }
    else if (hostAddress) {
        // hostname is already a valid address; skip name lookup.
        foundSomeDNS = true;
        addressQueryResults.push_back(hostAddress.get());
        tryNextAddress();
    } else {
        queryAddress(hostname);
    }
}
Exemplo n.º 3
0
void Connector::start() {
	SWIFT_LOG(debug) << "Starting connector for " << hostname << std::endl;
	//std::cout << "Connector::start()" << std::endl;
	assert(!currentConnection);
	assert(!serviceQuery);
	assert(!timer);
	queriedAllServices = false;
	if (doServiceLookups) {
		serviceQuery = resolver->createServiceQuery("_xmpp-client._tcp." + hostname);
		serviceQuery->onResult.connect(boost::bind(&Connector::handleServiceQueryResult, shared_from_this(), _1));
		if (timeoutMilliseconds > 0) {
			timer = timerFactory->createTimer(timeoutMilliseconds);
			timer->onTick.connect(boost::bind(&Connector::handleTimeout, shared_from_this()));
			timer->start();
		}
		serviceQuery->run();
	}
	else {
		queryAddress(hostname);
	}
}