Improved IP address parsing

This commit is contained in:
Christophe Dumez 2010-11-07 11:36:37 +00:00
parent da95d5e0df
commit 41a61ced89
2 changed files with 40 additions and 7 deletions

View file

@ -35,6 +35,7 @@
#include <QFile>
#include <QDataStream>
#include <QStringList>
#include <QHostAddress>
#include <libtorrent/session.hpp>
#include <libtorrent/ip_filter.hpp>
@ -61,6 +62,14 @@ private:
QString filePath;
protected:
QString cleanupIPAddress(QString _ip) {
QHostAddress ip(_ip.trimmed());
if(ip.isNull()) {
return QString();
}
return ip.toString();
}
void run(){
qDebug("Processing filter file");
if(filePath.endsWith(".dat", Qt::CaseInsensitive)) {
@ -125,14 +134,24 @@ public:
}
boost::system::error_code ec;
const QString strStartIP = IPs.at(0).trimmed();
const QString strStartIP = cleanupIPAddress(IPs.at(0));
if(strStartIP.isEmpty()) {
qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
qDebug("Start IP of the range is malformated: %s", qPrintable(strStartIP));
continue;
}
libtorrent::address startAddr = libtorrent::address::from_string(qPrintable(strStartIP), ec);
if(ec) {
qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
qDebug("Start IP of the range is malformated: %s", qPrintable(strStartIP));
continue;
}
const QString strEndIP = IPs.at(1).trimmed();
const QString strEndIP = cleanupIPAddress(IPs.at(1));
if(strEndIP.isEmpty()) {
qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
qDebug("End IP of the range is malformated: %s", qPrintable(strEndIP));
continue;
}
libtorrent::address endAddr = libtorrent::address::from_string(qPrintable(strEndIP), ec);
if(ec) {
qDebug("Ipfilter.dat: line %d is malformed.", nbLine);
@ -197,14 +216,24 @@ public:
continue;
}
boost::system::error_code ec;
QString strStartIP = IPs.at(0).trimmed();
QString strStartIP = cleanupIPAddress(IPs.at(0));
if(strStartIP.isEmpty()) {
qDebug("p2p file: line %d is malformed.", nbLine);
qDebug("Start IP is invalid: %s", qPrintable(strStartIP));
continue;
}
libtorrent::address startAddr = libtorrent::address::from_string(qPrintable(strStartIP), ec);
if(ec) {
qDebug("p2p file: line %d is malformed.", nbLine);
qDebug("Start IP is invalid: %s", qPrintable(strStartIP));
continue;
}
QString strEndIP = IPs.at(1).trimmed();
QString strEndIP = cleanupIPAddress(IPs.at(1));
if(strEndIP.isEmpty()) {
qDebug("p2p file: line %d is malformed.", nbLine);
qDebug("End IP is invalid: %s", qPrintable(strStartIP));
continue;
}
libtorrent::address endAddr = libtorrent::address::from_string(qPrintable(strEndIP), ec);
if(ec) {
qDebug("p2p file: line %d is malformed.", nbLine);

View file

@ -60,7 +60,12 @@ public:
~PeerAdditionDlg(){}
QString getIP() const {
return lineIP->text();
QHostAddress ip(lineIP->text());
if(!ip.isNull()) {
// QHostAddress::toString() cleans up the IP for libtorrent
return ip.toString();
}
return QString();
}
unsigned short getPort() const {
@ -87,8 +92,7 @@ public:
protected slots:
void validateInput() {
QHostAddress ip(getIP());
if(ip.isNull()) {
if(getIP().isEmpty()) {
QMessageBox::warning(this, tr("Invalid IP"),
tr("The IP you provided is invalid."),
QMessageBox::Ok);