aboutsummaryrefslogtreecommitdiff
path: root/src/lobby.cpp
diff options
context:
space:
mode:
authorOsmium Sorcerer <os@sof.beauty>2026-03-22 17:57:13 +0000
committerOsmium Sorcerer <os@sof.beauty>2026-03-29 22:22:25 +0000
commit79c2262cae02b513aee70943f7e07a9205316bdf (patch)
tree02efb824bad180a11bd1b68c41508088c167434b /src/lobby.cpp
parent06f34c776972542222623ca4f91880de97993fbf (diff)
Support Secure WebSocket
Add full WSS support to public server list (using wss_port, overriding insecure port), favorite servers list, and direct connections, and show which servers are secure. Revert the upstream's removal of `legacy` ServerInfo field, as I use it to filter out legacy servers. To differentiate schemes, the `scheme` field is used, either "ws" or "wss". I don't see the reason to add "tcp" protocol when we don't even support it. For the UI, add icons for secure and insecure connections. Highlight secure servers with a green background. In the favorite server dialog, a checkbox was added to select whether the server is using WSS. In the direct connection dialog, support "wss" scheme and default ports: 80 for WS, 443 for WSS, as per the WebSocket specification.
Diffstat (limited to 'src/lobby.cpp')
-rw-r--r--src/lobby.cpp39
1 files changed, 28 insertions, 11 deletions
diff --git a/src/lobby.cpp b/src/lobby.cpp
index 424f634..29101c6 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -471,19 +471,21 @@ void Lobby::list_servers()
QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_serverlist_tree);
treeItem->setData(0, Qt::DisplayRole, i);
- if (i_server.protocol == "tcp")
+ QIcon insecureIcon(":/data/icons/noencryption.svg");
+ QIcon secureIcon(":/data/icons/https.svg");
+ QColor secureColor(80, 120, 80);
+ treeItem->setText(1, i_server.name);
+ if (i_server.scheme == "wss")
{
- treeItem->setText(1, "(Legacy) " + i_server.name);
- treeItem->setBackground(0, Qt::darkRed);
- treeItem->setBackground(1, Qt::darkRed);
-
- QString tooltip = tr("Unable to connect to server. Server is missing WebSocket support.");
- treeItem->setToolTip(0, tooltip);
- treeItem->setToolTip(1, tooltip);
+ treeItem->setIcon(1, secureIcon);
+ treeItem->setToolTip(1, "Connection is secure.");
+ treeItem->setBackground(0, secureColor);
+ treeItem->setBackground(1, secureColor);
}
- else
+ else if (i_server.scheme == "ws")
{
- treeItem->setText(1, i_server.name);
+ treeItem->setIcon(1, insecureIcon);
+ treeItem->setToolTip(1, "Insecure. Traffic can be intercepted or modified.");
}
i++;
@@ -504,7 +506,7 @@ void Lobby::list_favorites()
QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_favorites_tree);
treeItem->setData(0, Qt::DisplayRole, i);
- if (i_server.protocol == "tcp")
+ if (i_server.legacy)
{
treeItem->setText(1, "(Legacy) " + i_server.name);
treeItem->setBackground(0, Qt::darkRed);
@@ -516,7 +518,22 @@ void Lobby::list_favorites()
}
else
{
+ QIcon insecureIcon(":/data/icons/noencryption.svg");
+ QIcon secureIcon(":/data/icons/https.svg");
+ QColor secureColor(80, 120, 80);
treeItem->setText(1, i_server.name);
+ if (i_server.scheme == "wss")
+ {
+ treeItem->setIcon(1, secureIcon);
+ treeItem->setToolTip(1, "Connection is secure.");
+ treeItem->setBackground(0, secureColor);
+ treeItem->setBackground(1, secureColor);
+ }
+ else if (i_server.scheme == "ws")
+ {
+ treeItem->setIcon(1, insecureIcon);
+ treeItem->setToolTip(1, "Insecure. Traffic can be intercepted or modified.");
+ }
}
i++;