diff options
| author | Osmium Sorcerer <os@sof.beauty> | 2026-03-22 17:57:13 +0000 |
|---|---|---|
| committer | Osmium Sorcerer <os@sof.beauty> | 2026-03-29 22:22:25 +0000 |
| commit | 79c2262cae02b513aee70943f7e07a9205316bdf (patch) | |
| tree | 02efb824bad180a11bd1b68c41508088c167434b /src/lobby.cpp | |
| parent | 06f34c776972542222623ca4f91880de97993fbf (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.cpp | 39 |
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++; |
