Skip to content

Commit

Permalink
ConnectDialog: use qpAddress for address list in ServerItem, and for …
Browse files Browse the repository at this point in the history
…qhDNSCache.

This is prepration for the implementation of the ServerResolver class.
(For SRV record resolving.)
  • Loading branch information
mkrautz committed Apr 11, 2017
1 parent eca5d03 commit e339127
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 29 deletions.
56 changes: 29 additions & 27 deletions src/mumble/ConnectDialog.cpp
Expand Up @@ -329,7 +329,7 @@ ServerItem::ServerItem(const ServerItem *si) {
qsUrl = si->qsUrl;
qsBonjourHost = si->qsBonjourHost;
brRecord = si->brRecord;
qlAddresses = si->qlAddresses;
qlAddressPorts = si->qlAddressPorts;
bCA = si->bCA;

uiVersion = si->uiVersion;
Expand Down Expand Up @@ -458,8 +458,9 @@ QVariant ServerItem::data(int column, int role) const {
}
} else if (role == Qt::ToolTipRole) {
QStringList qsl;
foreach(const QHostAddress &qha, qlAddresses)
qsl << Qt::escape(qha.toString());
foreach(const qpAddress &addr, qlAddressPorts) {
qsl << Qt::escape(addr.first.toString() + QLatin1String(":") + QString::number(static_cast<unsigned long>(addr.second)));
}

double ploss = 100.0;

Expand Down Expand Up @@ -1006,7 +1007,7 @@ ConnectDialog::~ConnectDialog() {

void ConnectDialog::accept() {
ServerItem *si = static_cast<ServerItem *>(qtwServers->currentItem());
if (! si || (bAllowHostLookup && si->qlAddresses.isEmpty()) || si->qsHostname.isEmpty()) {
if (! si || (bAllowHostLookup && si->qlAddressPorts.isEmpty()) || si->qsHostname.isEmpty()) {
qWarning() << "Invalid server";
return;
}
Expand Down Expand Up @@ -1118,7 +1119,7 @@ void ConnectDialog::on_qaFavoriteEdit_triggered() {
if ((cde->qsHostname != host) || (cde->usPort != si->usPort)) {
stopDns(si);

si->qlAddresses.clear();
si->qlAddressPorts.clear();
si->reset();

si->usPort = cde->usPort;
Expand Down Expand Up @@ -1235,7 +1236,7 @@ void ConnectDialog::on_qtwServers_currentItemChanged(QTreeWidgetItem *item, QTre
qpbEdit->setEnabled(false);
}

bool bOk = !si->qlAddresses.isEmpty();
bool bOk = !si->qlAddressPorts.isEmpty();
if (!bAllowHostLookup) {
bOk = true;
}
Expand Down Expand Up @@ -1377,7 +1378,7 @@ void ConnectDialog::timeTick() {
qtwServers->setCurrentItem(items.at(0));
if (g.s.bAutoConnect && bAutoConnect) {
siAutoConnect = static_cast<ServerItem *>(items.at(0));
if (! siAutoConnect->qlAddresses.isEmpty()) {
if (! siAutoConnect->qlAddressPorts.isEmpty()) {
accept();
return;
} else if (!bAllowHostLookup) {
Expand Down Expand Up @@ -1416,7 +1417,7 @@ void ConnectDialog::timeTick() {
if (si) {
QString host = si->qsHostname.toLower();

if (si->qlAddresses.isEmpty()) {
if (si->qlAddressPorts.isEmpty()) {
if (! host.isEmpty()) {
qlDNSLookup.removeAll(host);
qlDNSLookup.prepend(host);
Expand Down Expand Up @@ -1447,16 +1448,16 @@ void ConnectDialog::timeTick() {
expanded = expanded && p->isExpanded();
p = p->siParent;
}
} while (si->qlAddresses.isEmpty() || ! expanded);
} while (si->qlAddressPorts.isEmpty() || ! expanded);
}

if (si == current)
tCurrent.restart();
if (si == hover)
tHover.restart();

foreach(const QHostAddress &host, si->qlAddresses)
sendPing(host, si->usPort);
foreach(const qpAddress &addr, si->qlAddressPorts)
sendPing(addr.first.toAddress(), addr.second);
}


Expand All @@ -1467,20 +1468,21 @@ void ConnectDialog::startDns(ServerItem *si) {

QString host = si->qsHostname.toLower();

if (si->qlAddresses.isEmpty()) {
if (si->qlAddressPorts.isEmpty()) {
QHostAddress qha(si->qsHostname);
if (! qha.isNull())
si->qlAddresses.append(qha);
else
si->qlAddresses = qhDNSCache.value(host);
if (! qha.isNull()) {
si->qlAddressPorts.append(qpAddress(HostAddress(qha), si->usPort));
} else {
si->qlAddressPorts = qhDNSCache.value(host);
}
}

if (qtwServers->currentItem() == si)
qdbbButtonBox->button(QDialogButtonBox::Ok)->setEnabled(! si->qlAddresses.isEmpty());
qdbbButtonBox->button(QDialogButtonBox::Ok)->setEnabled(! si->qlAddressPorts.isEmpty());

if (! si->qlAddresses.isEmpty()) {
foreach(const QHostAddress &qha, si->qlAddresses) {
qhPings[qpAddress(HostAddress(qha), si->usPort)].insert(si);
if (! si->qlAddressPorts.isEmpty()) {
foreach(const qpAddress &addr, si->qlAddressPorts) {
qhPings[addr].insert(si);
}
return;
}
Expand Down Expand Up @@ -1509,8 +1511,7 @@ void ConnectDialog::stopDns(ServerItem *si) {
return;
}

foreach(const QHostAddress &qha, si->qlAddresses) {
qpAddress addr(HostAddress(qha), si->usPort);
foreach(const qpAddress &addr, si->qlAddressPorts) {
if (qhPings.contains(addr)) {
qhPings[addr].remove(si);
if (qhPings[addr].isEmpty()) {
Expand Down Expand Up @@ -1538,18 +1539,17 @@ void ConnectDialog::lookedUp(QHostInfo info) {
if (info.error() != QHostInfo::NoError)
return;

qlDNSLookup.removeAll(host);
qhDNSCache.insert(host, info.addresses());

QSet<qpAddress> qs;

foreach(ServerItem *si, qhDNSWait[host]) {
si->qlAddresses = info.addresses();
QList<qpAddress> addresses;
foreach(const QHostAddress &qha, info.addresses()) {
qpAddress addr(HostAddress(qha), si->usPort);
qpAddress addr(qha, si->usPort);
addresses.append(addr);
qs.insert(addr);
qhPings[addr].insert(si);
}
si->qlAddressPorts = addresses;

if (si == qtwServers->currentItem()) {
on_qtwServers_currentItemChanged(si, si);
Expand All @@ -1558,6 +1558,8 @@ void ConnectDialog::lookedUp(QHostInfo info) {
}
}

qlDNSLookup.removeAll(host);
qhDNSCache.insert(host, qs.toList());
qhDNSWait.remove(host);

if (bAllowPing) {
Expand Down
4 changes: 2 additions & 2 deletions src/mumble/ConnectDialog.h
Expand Up @@ -145,7 +145,7 @@ class ServerItem : public QTreeWidgetItem, public PingStats {
QString qsBonjourHost;
BonjourRecord brRecord;

QList<QHostAddress> qlAddresses;
QList<qpAddress> qlAddressPorts;

ItemType itType;

Expand Down Expand Up @@ -245,7 +245,7 @@ class ConnectDialog : public QDialog, public Ui::ConnectDialog {
QList<QString> qlDNSLookup;
QSet<QString> qsDNSActive;
QHash<QString, QSet<ServerItem *> > qhDNSWait;
QHash<QString, QList<QHostAddress> > qhDNSCache;
QHash<QString, QList<qpAddress> > qhDNSCache;

QHash<qpAddress, quint64> qhPingRand;
QHash<qpAddress, QSet<ServerItem *> > qhPings;
Expand Down

0 comments on commit e339127

Please sign in to comment.