Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThorvald Natvig <slicer@users.sourceforge.net>2009-06-22 02:39:17 +0400
committerThorvald Natvig <slicer@users.sourceforge.net>2009-06-22 02:39:38 +0400
commitc1c460bab3c95cc0aa422835e533c3ec60e54987 (patch)
tree92c57c83e48c43e3c17c4c7edf254a0b35ec5ea2 /src
parent3c8745fe8e1efefa136adb223d60443c8651df2e (diff)
Allow IPv6 control connections
Diffstat (limited to 'src')
-rw-r--r--src/Net.cpp10
-rw-r--r--src/Net.h2
-rw-r--r--src/murmur/Meta.cpp6
-rw-r--r--src/murmur/Server.cpp25
-rw-r--r--src/murmur/Server.h2
5 files changed, 30 insertions, 15 deletions
diff --git a/src/Net.cpp b/src/Net.cpp
index 0cbadedd9..43dc69bbc 100644
--- a/src/Net.cpp
+++ b/src/Net.cpp
@@ -117,6 +117,16 @@ quint32 qHash(const HostAddress &ha) {
return (ha.hash[0] ^ ha.hash[1] ^ ha.hash[2] ^ ha.hash[3]);
}
+QString HostAddress::toString() const {
+ if (isV6()) {
+ QString qs;
+ qs.sprintf("[%x:%x:%x:%x:%x:%x:%x:%x]", ntohs(shorts[0]), ntohs(shorts[1]), ntohs(shorts[2]), ntohs(shorts[3]), ntohs(shorts[4]), ntohs(shorts[5]), ntohs(shorts[6]), ntohs(shorts[7]));
+ return qs.replace(QRegExp(QLatin1String("(:0)+")),QLatin1String(":"));
+ } else {
+ return QHostAddress(ntohl(hash[3])).toString();
+ }
+}
+
bool Ban::operator <(const Ban &other) const {
return haAddress < other.haAddress;
}
diff --git a/src/Net.h b/src/Net.h
index 86c372bdb..be1351fdf 100644
--- a/src/Net.h
+++ b/src/Net.h
@@ -54,6 +54,8 @@ struct HostAddress {
bool operator == (const HostAddress &) const;
bool match(const HostAddress &, int) const;
+
+ QString toString() const;
std::string toStdString() const;
QHostAddress toAddress() const;
diff --git a/src/murmur/Meta.cpp b/src/murmur/Meta.cpp
index a6ac9f978..6c2a1d6d4 100644
--- a/src/murmur/Meta.cpp
+++ b/src/murmur/Meta.cpp
@@ -53,7 +53,7 @@ MetaParams::MetaParams() {
qsDBusService = "net.sourceforge.mumble.murmur";
qsDBDriver = "QSQLITE";
qsLogfile = "murmur.log";
- qhaBind = QHostAddress(QHostAddress::Any);
+ qhaBind = QHostAddress(QHostAddress::AnyIPv6);
iLogDays = 31;
@@ -129,12 +129,12 @@ void MetaParams::read(QString fname) {
if (! qhaBind.setAddress(qsHost)) {
QHostInfo hi = QHostInfo::fromName(qsHost);
foreach(QHostAddress qha, hi.addresses()) {
- if (qha.protocol() == QAbstractSocket::IPv4Protocol) {
+ if ((qha.protocol() == QAbstractSocket::IPv4Protocol) || (qha.protocol() == QAbstractSocket::IPv6Protocol)) {
qhaBind = qha;
break;
}
}
- if ((qhaBind == QHostAddress::Any) || (qhaBind.isNull())) {
+ if ((qhaBind == QHostAddress::AnyIPv6) || (qhaBind.isNull())) {
qFatal("Lookup of bind hostname %s failed", qPrintable(qsHost));
}
diff --git a/src/murmur/Server.cpp b/src/murmur/Server.cpp
index cfe4b9b15..378b80b2e 100644
--- a/src/murmur/Server.cpp
+++ b/src/murmur/Server.cpp
@@ -219,12 +219,12 @@ void Server::readParams() {
if (! qhaBind.setAddress(qsHost)) {
QHostInfo hi = QHostInfo::fromName(qsHost);
foreach(QHostAddress qha, hi.addresses()) {
- if (qha.protocol() == QAbstractSocket::IPv4Protocol) {
+ if ((qha.protocol() == QAbstractSocket::IPv4Protocol) || (qha.protocol() == QAbstractSocket::IPv6Protocol)) {
qhaBind = qha;
break;
}
}
- if ((qhaBind == QHostAddress::Any) || (qhaBind.isNull())) {
+ if ((qhaBind == QHostAddress::AnyIPv6) || (qhaBind.isNull())) {
log(QString("Lookup of bind hostname %1 failed").arg(qsHost));
qhaBind = Meta::mp.qhaBind;
}
@@ -652,7 +652,7 @@ void Server::newClient() {
QHostAddress adr = sock->peerAddress();
if (meta->banCheck(adr)) {
- log(QString("Ignoring connection: %1:%2 (Global ban)").arg(addressToString(sock->peerAddress())).arg(sock->peerPort()));
+ log(QString("Ignoring connection: %1 (Global ban)").arg(addressToString(sock->peerAddress(), sock->peerPort())));
sock->disconnectFromHost();
sock->deleteLater();
return;
@@ -662,7 +662,7 @@ void Server::newClient() {
foreach(const Ban &ban, qlBans) {
if (ban.haAddress.match(ha, ban.iMask)) {
- log(QString("Ignoring connection: %1:%2 (Server ban)").arg(addressToString(sock->peerAddress())).arg(sock->peerPort()));
+ log(QString("Ignoring connection: %1 (Server ban)").arg(addressToString(sock->peerAddress(), sock->peerPort())));
sock->disconnectFromHost();
sock->deleteLater();
return;
@@ -697,7 +697,7 @@ void Server::newClient() {
connect(u, SIGNAL(handleSslErrors(const QList<QSslError> &)), this, SLOT(sslError(const QList<QSslError> &)));
connect(u, SIGNAL(encrypted()), this, SLOT(encrypted()));
- log(u, QString("New connection: %1:%2").arg(addressToString(sock->peerAddress())).arg(sock->peerPort()));
+ log(u, QString("New connection: %1").arg(addressToString(sock->peerAddress(), sock->peerPort())));
u->setToS();
@@ -1003,14 +1003,17 @@ void Server::clearACLCache(User *p) {
}
}
-QString Server::addressToString(const QHostAddress &adr) {
- if (Meta::mp.iObfuscate == 0)
- return adr.toString();
+QString Server::addressToString(const QHostAddress &adr, unsigned short port) {
+ HostAddress ha(adr);
- quint32 num = adr.toIPv4Address() ^ Meta::mp.iObfuscate;
+ if ((Meta::mp.iObfuscate != 0) && adr.protocol() == QAbstractSocket::IPv4Protocol) {
+ quint32 num = adr.toIPv4Address() ^ Meta::mp.iObfuscate;
- QHostAddress n(num);
- return n.toString();
+ QHostAddress n(num);
+ ha = HostAddress(n);
+ }
+ QString p = QString::number(port);
+ return QString("%1:%2").arg(ha.toString(), p);
}
bool Server::validateUserName(const QString &name) {
diff --git a/src/murmur/Server.h b/src/murmur/Server.h
index ba0359389..51cd8c9ad 100644
--- a/src/murmur/Server.h
+++ b/src/murmur/Server.h
@@ -253,7 +253,7 @@ class Server : public QThread {
void setLiveConf(const QString &key, const QString &value);
- QString addressToString(const QHostAddress &);
+ QString addressToString(const QHostAddress &, unsigned short port);
void log(const QString &);
void log(ServerUser *u, const QString &);