rendered paste body{hunk ./iris/irisnet/legacy/srvresolver.cpp 23 #include "srvresolver.h" +#include <QtAlgorithms>+ #ifndef NO_NDNS # include "ndns.h" #endifhunk ./iris/irisnet/legacy/srvresolver.cpp 31 // CS_NAMESPACE_BEGIN -static void sortSRVList(QList<Q3Dns::Server> &list)+bool serverLessThan(const Q3Dns::Server &s1, const Q3Dns::Server &s2) {hunk ./iris/irisnet/legacy/srvresolver.cpp 33- QList<Q3Dns::Server> 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<Q3Dns::Server>::Iterator p = tmp.end();- for(QList<Q3Dns::Server>::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<Q3Dns::Server> &list)+{+ qStableSort(list.begin(), list.end(), serverLessThan); } class SrvResolver::Privatehunk ./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(); }}