Browse Source

Improved hostname resolution code

adaptive-webui-19844
Christophe Dumez 14 years ago
parent
commit
105de3161a
  1. 9
      src/peerlistwidget.cpp
  2. 14
      src/reverseresolution.h

9
src/peerlistwidget.cpp

@ -187,8 +187,8 @@ void PeerListWidget::showPeerListMenu(QPoint) {
void PeerListWidget::banSelectedPeers(QStringList peer_ips) { void PeerListWidget::banSelectedPeers(QStringList peer_ips) {
// Confirm first // Confirm first
int ret = QMessageBox::question(this, tr("Are you sure? -- qBittorrent"), tr("Are you sure you want to ban permanently the selected peers?"), int ret = QMessageBox::question(this, tr("Are you sure? -- qBittorrent"), tr("Are you sure you want to ban permanently the selected peers?"),
tr("&Yes"), tr("&No"), tr("&Yes"), tr("&No"),
QString(), 0, 1); QString(), 0, 1);
if(ret) return; if(ret) return;
foreach(const QString &ip, peer_ips) { foreach(const QString &ip, peer_ips) {
qDebug("Banning peer %s...", ip.toLocal8Bit().data()); qDebug("Banning peer %s...", ip.toLocal8Bit().data());
@ -313,7 +313,8 @@ void PeerListWidget::loadPeers(const QTorrentHandle &h, bool force_hostname_reso
if(host.isNull()) { if(host.isNull()) {
resolver->resolve(peer.ip); resolver->resolve(peer.ip);
} else { } else {
peerItems.value(peer_ip)->setData(host); qDebug("Got peer IP from cache");
handleResolved(peer_ip, host);
} }
} }
} }
@ -394,6 +395,8 @@ void PeerListWidget::updatePeer(QString ip, peer_info peer) {
void PeerListWidget::handleResolved(QString ip, QString hostname) { void PeerListWidget::handleResolved(QString ip, QString hostname) {
QStandardItem *item = peerItems.value(ip, 0); QStandardItem *item = peerItems.value(ip, 0);
if(item) { if(item) {
qDebug("Resolved %s -> %s", qPrintable(ip), qPrintable(hostname));
item->setData(hostname); item->setData(hostname);
//listModel->setData(listModel->index(item->row(), IP), hostname);
} }
} }

14
src/reverseresolution.h

@ -83,10 +83,16 @@ signals:
protected: protected:
void run() { void run() {
try { try {
libtorrent::asio::ip::tcp::resolver::iterator it = resolver.resolve(ip); boost::system::error_code ec;
if(stopped) return; libtorrent::asio::ip::tcp::resolver::iterator it = resolver.resolve(ip, ec);
libtorrent::asio::ip::tcp::endpoint endpoint = *it; if(ec || stopped) return;
emit ip_resolved(misc::toQString(endpoint.address().to_string()), misc::toQString((*it).host_name())); const std::string ip_str = ip.address().to_string(ec);
if(ec) return;
const QString host_name = misc::toQString(it->host_name());
const QString ip_qstr = misc::toQString(ip_str);
if(host_name != ip_qstr) {
emit ip_resolved(ip_qstr, host_name);
}
} catch(std::exception/* &e*/) { } catch(std::exception/* &e*/) {
/*std::cerr << "Hostname resolution failed, reason: " << e.what() << std::endl;*/ /*std::cerr << "Hostname resolution failed, reason: " << e.what() << std::endl;*/
std::cerr << "Hostname resolution error." << std::endl; std::cerr << "Hostname resolution error." << std::endl;

Loading…
Cancel
Save