Browse Source

Improve parsing in BitTorrent::PeerAddress::parse

adaptive-webui-19844
Chocobo1 5 years ago
parent
commit
ccec50e18e
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 37
      src/base/bittorrent/peeraddress.cpp
  2. 2
      src/base/bittorrent/peeraddress.h

37
src/base/bittorrent/peeraddress.cpp

@ -29,30 +29,29 @@ @@ -29,30 +29,29 @@
#include "peeraddress.h"
#include <QString>
#include <QStringList>
BitTorrent::PeerAddress BitTorrent::PeerAddress::parse(QString peerAddressStr)
BitTorrent::PeerAddress BitTorrent::PeerAddress::parse(const QString &address)
{
PeerAddress addr;
QStringList ipPort;
QVector<QStringRef> ipPort;
if ((peerAddressStr[0] == '[') && (peerAddressStr.indexOf("]:") != -1)) // IPv6
ipPort = peerAddressStr.remove(QChar('[')).split("]:");
else if (peerAddressStr.indexOf(':') != -1) // IPv4
ipPort = peerAddressStr.split(':');
else
return addr;
if (address.startsWith('[') && address.contains("]:")) { // IPv6
ipPort = address.splitRef("]:");
ipPort[0] = ipPort[0].mid(1); // chop '['
}
else if (address.contains(':')) { // IPv4
ipPort = address.splitRef(':');
}
else {
return {};
}
QHostAddress ip(ipPort[0]);
const QHostAddress ip {ipPort[0].toString()};
if (ip.isNull())
return addr;
return {};
bool ok;
int port = ipPort[1].toInt(&ok);
if (!ok || (port < 1) || (port > 65535))
return addr;
const ushort port {ipPort[1].toUShort()};
if (port == 0)
return {};
addr.ip = ip;
addr.port = port;
return addr;
return {ip, port};
}

2
src/base/bittorrent/peeraddress.h

@ -39,6 +39,6 @@ namespace BitTorrent @@ -39,6 +39,6 @@ namespace BitTorrent
QHostAddress ip;
ushort port = 0;
static PeerAddress parse(QString peerAddressStr);
static PeerAddress parse(const QString &address);
};
}

Loading…
Cancel
Save