{ hunk ./iris/irisnet/legacy/srvresolver.cpp 23 #include "srvresolver.h" +#include + #ifndef NO_NDNS # include "ndns.h" #endif hunk ./iris/irisnet/legacy/srvresolver.cpp 31 // CS_NAMESPACE_BEGIN -static void sortSRVList(QList &list) +bool serverLessThan(const Q3Dns::Server &s1, const Q3Dns::Server &s2) { hunk ./iris/irisnet/legacy/srvresolver.cpp 33 - QList tmp = list; - list.clear(); + int a = s1.priority; + int b = s2.priority; + int j = s1.weight; + int k = s2.weight; + return a < b || (a == b && j < k); +} hunk ./iris/irisnet/legacy/srvresolver.cpp 40 - while(!tmp.isEmpty()) { - QList::Iterator p = tmp.end(); - for(QList::Iterator it = tmp.begin(); it != tmp.end(); ++it) { - if(p == tmp.end()) - p = it; - else { - int a = (*it).priority; - int b = (*p).priority; - int j = (*it).weight; - int k = (*p).weight; - if(a < b || (a == b && j < k)) - p = it; - } - } - list.append(*p); - tmp.erase(p); - } + +static void sortSRVList(QList &list) +{ + qStableSort(list.begin(), list.end(), serverLessThan); } class SrvResolver::Private hunk ./iris/irisnet/legacy/srvresolver.cpp 93 delete d; } -void SrvResolver::resolve(const QString &server, const QString &type, const QString &proto) +void SrvResolver::resolve(const QString &server, const QString &type, const QString &proto, bool srvOnly) { stop(); hunk ./iris/irisnet/legacy/srvresolver.cpp 98 d->failed = false; - d->srvonly = false; + d->srvonly = srvOnly; d->srv = QString("_") + type + "._" + proto + '.' + server; d->t.setSingleShot(true); d->t.start(15000); hunk ./iris/irisnet/legacy/srvresolver.cpp 107 d->nndns.start(d->srv.toLatin1(), d->nntype); } -void SrvResolver::resolveSrvOnly(const QString &server, const QString &type, const QString &proto) +void SrvResolver::resolve(const QString &server, const QString &type, const QString &proto) { hunk ./iris/irisnet/legacy/srvresolver.cpp 109 - stop(); + resolve(server, type, proto, false); +} hunk ./iris/irisnet/legacy/srvresolver.cpp 112 - d->failed = false; - d->srvonly = true; - d->srv = QString("_") + type + "._" + proto + '.' + server; - d->t.setSingleShot(true); - d->t.start(15000); - d->nndns_busy = true; - d->nntype = XMPP::NameRecord::Srv; - d->nndns.start(d->srv.toLatin1(), d->nntype); +void SrvResolver::resolveSrvOnly(const QString &server, const QString &type, const QString &proto) +{ + resolve(server, type, proto, true); } void SrvResolver::next() hunk ./iris/irisnet/legacy/srvresolver.cpp 274 d->servers.removeFirst(); if(!r.isNull()) { - d->resultAddress = d->ndns.result(); + d->resultAddress = r; d->resultPort = port; resultsReady(); } }