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 }
void SrvResolver::next() { if(d->servers.isEmpty()) return; tryNext(); }
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(); } }
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(); } } }
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 }