mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-23 04:54:18 +00:00
Improve parsing in BitTorrent::PeerAddress::parse
This commit is contained in:
parent
cf47342cec
commit
ccec50e18e
@ -29,30 +29,29 @@
|
|||||||
#include "peeraddress.h"
|
#include "peeraddress.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QStringList>
|
|
||||||
|
|
||||||
BitTorrent::PeerAddress BitTorrent::PeerAddress::parse(QString peerAddressStr)
|
BitTorrent::PeerAddress BitTorrent::PeerAddress::parse(const QString &address)
|
||||||
{
|
{
|
||||||
PeerAddress addr;
|
QVector<QStringRef> ipPort;
|
||||||
QStringList ipPort;
|
|
||||||
|
|
||||||
if ((peerAddressStr[0] == '[') && (peerAddressStr.indexOf("]:") != -1)) // IPv6
|
if (address.startsWith('[') && address.contains("]:")) { // IPv6
|
||||||
ipPort = peerAddressStr.remove(QChar('[')).split("]:");
|
ipPort = address.splitRef("]:");
|
||||||
else if (peerAddressStr.indexOf(':') != -1) // IPv4
|
ipPort[0] = ipPort[0].mid(1); // chop '['
|
||||||
ipPort = peerAddressStr.split(':');
|
}
|
||||||
else
|
else if (address.contains(':')) { // IPv4
|
||||||
return addr;
|
ipPort = address.splitRef(':');
|
||||||
|
}
|
||||||
QHostAddress ip(ipPort[0]);
|
else {
|
||||||
if (ip.isNull())
|
return {};
|
||||||
return addr;
|
}
|
||||||
|
|
||||||
bool ok;
|
const QHostAddress ip {ipPort[0].toString()};
|
||||||
int port = ipPort[1].toInt(&ok);
|
if (ip.isNull())
|
||||||
if (!ok || (port < 1) || (port > 65535))
|
return {};
|
||||||
return addr;
|
|
||||||
|
const ushort port {ipPort[1].toUShort()};
|
||||||
addr.ip = ip;
|
if (port == 0)
|
||||||
addr.port = port;
|
return {};
|
||||||
return addr;
|
|
||||||
|
return {ip, port};
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,6 @@ namespace BitTorrent
|
|||||||
QHostAddress ip;
|
QHostAddress ip;
|
||||||
ushort port = 0;
|
ushort port = 0;
|
||||||
|
|
||||||
static PeerAddress parse(QString peerAddressStr);
|
static PeerAddress parse(const QString &address);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user