Example #1
0
void SrvResolver::ndns_done()
{
#ifndef NO_NDNS
	QHostAddress r = d->ndns.result();
	int port = d->servers.first().port;
	d->servers.removeFirst();

	if(!r.isNull()) {
		d->resultAddress = d->ndns.result();
		d->resultPort = port;
		resultsReady();
	}
	else {
		// failed?  bail if last one
		if(d->servers.isEmpty()) {
			stop();
			resultsReady();
			return;
		}

		// otherwise try the next
		tryNext();
	}
#endif
}
Example #2
0
void SrvResolver::next()
{
	if(d->servers.isEmpty())
		return;

	tryNext();
}
Example #3
0
void SrvResolver::qdns_done()
{
	if(!d->qdns)
		return;

	// apparently we sometimes get this signal even though the results aren't ready
	if(d->qdns->isWorking())
		return;
	d->t.stop();

	SafeDeleteLock s(&d->sd);

	// grab the server list and destroy the qdns object
	QList<Q3Dns::Server> list;
	if(d->qdns->recordType() == Q3Dns::Srv)
		list = d->qdns->servers();
	d->qdns->disconnect(this);
	d->sd.deleteLater(d->qdns);
	d->qdns = 0;

	if(list.isEmpty()) {
		stop();
		resultsReady();
		return;
	}
	sortSRVList(list);
	d->servers = list;

	if(d->srvonly)
		resultsReady();
	else {
		// kick it off
		d->aaaa = true;
		tryNext();
	}
}
Example #4
0
void SrvResolver::nndns_resultsReady(const QList<XMPP::NameRecord> &results)
{
	if(!d->nndns_busy)
		return;

	d->t.stop();

	if(d->nntype == XMPP::NameRecord::Srv) {
		// grab the server list and destroy the qdns object
		QList<Q3Dns::Server> list;
		for(int n = 0; n < results.count(); ++n)
		{
			list += Q3Dns::Server(QString::fromLatin1(results[n].name()), results[n].priority(), results[n].weight(), results[n].port());
		}

		d->nndns_busy = false;
		d->nndns.stop();

		if(list.isEmpty()) {
			stop();
			resultsReady();
			return;
		}
		sortSRVList(list);
		d->servers = list;

		if(d->srvonly)
			resultsReady();
		else {
			// kick it off
			d->aaaa = true;
			tryNext();
		}
	}
	else {
		// grab the address list and destroy the qdns object
		QList<QHostAddress> list;
		if(d->nntype == XMPP::NameRecord::A || d->nntype == XMPP::NameRecord::Aaaa)
		{
			for(int n = 0; n < results.count(); ++n)
			{
				list += results[n].address();
			}
		}
		d->nndns_busy = false;
		d->nndns.stop();

		if(!list.isEmpty()) {
			int port = d->servers.first().port;
			d->servers.removeFirst();
			d->aaaa = true;

			d->resultAddress = list.first();
			d->resultPort = port;
			resultsReady();
		}
		else {
			if(!d->aaaa)
				d->servers.removeFirst();
			d->aaaa = !d->aaaa;

			// failed?  bail if last one
			if(d->servers.isEmpty()) {
				stop();
				resultsReady();
				return;
			}

			// otherwise try the next
			tryNext();
		}
	}
}
Example #5
0
void SrvResolver::ndns_done()
{
#ifndef NO_NDNS
	SafeDeleteLock s(&d->sd);

	QHostAddress r = d->ndns.result();
	int port = d->servers.first().port;
	d->servers.remove(d->servers.begin());

	if(!r.isNull()) {
		d->resultAddress = r;
		d->resultPort = port;
		resultsReady();
	}
	else {
		// failed?  bail if last one
		if(d->servers.isEmpty()) {
			stop();
			resultsReady();
			return;
		}

		// otherwise try the next
		tryNext();
	}
#else
	if(!d->qdns)
		return;

	// apparently we sometimes get this signal even though the results aren't ready
	if(d->qdns->isWorking())
		return;

	SafeDeleteLock s(&d->sd);

	// grab the address list and destroy the qdns object
	QList<QHostAddress> list;
	if(d->qdns->recordType() == Q3Dns::A || d->qdns->recordType() == Q3Dns::Aaaa)
		list = d->qdns->addresses();
	d->qdns->disconnect(this);
	d->sd.deleteLater(d->qdns);
	d->qdns = 0;

	if(!list.isEmpty()) {
		int port = d->servers.first().port;
		d->servers.remove(d->servers.begin());
		d->aaaa = true;

		d->resultAddress = list.first();
		d->resultPort = port;
		resultsReady();
	}
	else {
		if(!d->aaaa)
			d->servers.remove(d->servers.begin());
		d->aaaa = !d->aaaa;

		// failed?  bail if last one
		if(d->servers.isEmpty()) {
			stop();
			resultsReady();
			return;
		}

		// otherwise try the next
		tryNext();
	}
#endif
}