diff --git a/src/mumble/NetworkConfig.cpp b/src/mumble/NetworkConfig.cpp
index 27eca696d..1e473a91c 100644
--- a/src/mumble/NetworkConfig.cpp
+++ b/src/mumble/NetworkConfig.cpp
@@ -59,6 +59,7 @@ QIcon NetworkConfig::icon() const {
void NetworkConfig::load(const Settings &r) {
loadCheckBox(qcbTcpMode, s.bTCPCompat);
+ loadCheckBox(qcbQoS, s.bQoS);
loadCheckBox(qcbAutoReconnect, s.bReconnect);
loadCheckBox(qcbSuppressIdentity, s.bSuppressIdentity);
loadComboBox(qcbType, s.ptProxyType);
@@ -84,6 +85,7 @@ void NetworkConfig::load(const Settings &r) {
void NetworkConfig::save() const {
s.bTCPCompat = qcbTcpMode->isChecked();
+ s.bQoS = qcbQoS->isChecked();
s.bReconnect = qcbAutoReconnect->isChecked();
s.bSuppressIdentity = qcbSuppressIdentity->isChecked();
@@ -152,6 +154,7 @@ void NetworkConfig::accept() const {
bool NetworkConfig::expert(bool b) {
qcbTcpMode->setVisible(b);
+ qcbQoS->setVisible(b);
qgbProxy->setVisible(b);
qcbUsage->setVisible(b);
diff --git a/src/mumble/NetworkConfig.ui b/src/mumble/NetworkConfig.ui
index c4249d9b1..2c40ea135 100644
--- a/src/mumble/NetworkConfig.ui
+++ b/src/mumble/NetworkConfig.ui
@@ -39,6 +39,19 @@
+ -
+
+
+ Enable QoS to prioritize packets
+
+
+ This will enable QoS, which will attempt to prioritize voice packets over other traffic.
+
+
+ Use Quality of Service
+
+
+
-
diff --git a/src/mumble/ServerHandler.cpp b/src/mumble/ServerHandler.cpp
index 59ba312e9..5244da6aa 100644
--- a/src/mumble/ServerHandler.cpp
+++ b/src/mumble/ServerHandler.cpp
@@ -403,7 +403,8 @@ void ServerHandler::serverConnectionClosed(const QString &reason) {
}
void ServerHandler::serverConnectionConnected() {
- cConnection->setToS();
+ if (g.s.bQoS)
+ cConnection->setToS();
qscCert = cConnection->peerCertificateChain();
qscCipher = cConnection->sessionCipher();
@@ -457,24 +458,26 @@ void ServerHandler::serverConnectionConnected() {
connect(qusUdp, SIGNAL(readyRead()), this, SLOT(udpReady()));
+ if (g.s.bQoS) {
#if defined(Q_OS_UNIX)
- int val = 0xe0;
- if (setsockopt(qusUdp->socketDescriptor(), IPPROTO_IP, IP_TOS, &val, sizeof(val)))
- qWarning("ServerHandler: Failed to set TOS for UDP Socket");
+ int val = 0xe0;
+ if (setsockopt(qusUdp->socketDescriptor(), IPPROTO_IP, IP_TOS, &val, sizeof(val)))
+ qWarning("ServerHandler: Failed to set TOS for UDP Socket");
#elif defined(Q_OS_WIN)
- if (hQoS != NULL) {
- struct sockaddr_in addr;
- memset(&addr, 0, sizeof(addr));
- addr.sin_family = AF_INET;
- addr.sin_port = htons(usPort);
- addr.sin_addr.s_addr = htonl(qhaRemote.toIPv4Address());
+ if (hQoS != NULL) {
+ struct sockaddr_in addr;
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(usPort);
+ addr.sin_addr.s_addr = htonl(qhaRemote.toIPv4Address());
- dwFlowUDP = 0;
- if (! QOSAddSocketToFlow(hQoS, qusUdp->socketDescriptor(), reinterpret_cast(&addr), QOSTrafficTypeVoice, QOS_NON_ADAPTIVE_FLOW, &dwFlowUDP))
- qWarning("ServerHandler: Failed to add UDP to QOS");
- }
+ dwFlowUDP = 0;
+ if (! QOSAddSocketToFlow(hQoS, qusUdp->socketDescriptor(), reinterpret_cast(&addr), QOSTrafficTypeVoice, QOS_NON_ADAPTIVE_FLOW, &dwFlowUDP))
+ qWarning("ServerHandler: Failed to add UDP to QOS");
+ }
#endif
+ }
}
emit connected();
diff --git a/src/mumble/Settings.cpp b/src/mumble/Settings.cpp
index fdcc1c7df..ffdf3259b 100644
--- a/src/mumble/Settings.cpp
+++ b/src/mumble/Settings.cpp
@@ -218,6 +218,7 @@ Settings::Settings() {
// Network settings
bTCPCompat = false;
+ bQoS = true;
bReconnect = true;
ptProxyType = NoProxy;
usProxyPort = 0;
@@ -367,6 +368,7 @@ void Settings::load() {
// Network settings
SAVELOAD(bTCPCompat, "net/tcponly");
+ SAVELOAD(bQoS, "net/qos");
SAVELOAD(bReconnect, "net/reconnect");
SAVELOAD(bSuppressIdentity, "net/suppress");
LOADENUM(ptProxyType, "net/proxytype");
@@ -541,6 +543,7 @@ void Settings::save() {
// Network settings
SAVELOAD(bTCPCompat, "net/tcponly");
+ SAVELOAD(bQoS, "net/qos");
SAVELOAD(bReconnect, "net/reconnect");
SAVELOAD(ptProxyType, "net/proxytype");
SAVELOAD(qsProxyHost, "net/proxyhost");
diff --git a/src/mumble/Settings.h b/src/mumble/Settings.h
index 236296c99..5546067fd 100644
--- a/src/mumble/Settings.h
+++ b/src/mumble/Settings.h
@@ -182,7 +182,9 @@ struct Settings {
// Network settings
enum ProxyType { NoProxy, HttpProxy, Socks5Proxy };
- bool bTCPCompat, bReconnect;
+ bool bTCPCompat;
+ bool bReconnect;
+ bool bQoS;
ProxyType ptProxyType;
QString qsProxyHost, qsProxyUsername, qsProxyPassword;
unsigned short usProxyPort;