From 6451cc3220118373202c471b7a81ec12d31f0442 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen Date: Mon, 1 Aug 2022 13:26:59 +0300 Subject: [PATCH] Add -stunServer arg for on-premises STUN --- common/network/iceip.cxx | 13 +++++++++---- common/rfb/ServerCore.cxx | 6 +++++- common/rfb/ServerCore.h | 1 + unix/xserver/hw/vnc/Xvnc.man | 6 ++++++ 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/common/network/iceip.cxx b/common/network/iceip.cxx index 2dc23b7..9519208 100644 --- a/common/network/iceip.cxx +++ b/common/network/iceip.cxx @@ -170,10 +170,15 @@ void getPublicIP() { abort(); unsigned i; - for (i = 0; i < sizeof(servers) / sizeof(servers[0]); i++) { - if (tryserver(servers[i], sock)) - break; - vlog.info("STUN server %u didn't work, trying next...", i); + if (rfb::Server::stunServer[0]) { + if (strlen(rfb::Server::stunServer) < PATH_MAX) + tryserver(rfb::Server::stunServer, sock); + } else { + for (i = 0; i < sizeof(servers) / sizeof(servers[0]); i++) { + if (tryserver(servers[i], sock)) + break; + vlog.info("STUN server %u didn't work, trying next...", i); + } } close(sock); diff --git a/common/rfb/ServerCore.cxx b/common/rfb/ServerCore.cxx index 5f01dae..f32ceca 100644 --- a/common/rfb/ServerCore.cxx +++ b/common/rfb/ServerCore.cxx @@ -221,6 +221,10 @@ rfb::StringParameter rfb::Server::publicIP ("publicIP", "The server's public IP, for UDP negotiation. If not set, will be queried via the internet.", ""); +rfb::StringParameter rfb::Server::stunServer +("stunServer", + "Use this STUN server for querying the server's public IP. If not set, a hardcoded list is used.", + ""); rfb::IntParameter rfb::Server::udpFullFrameFrequency ("udpFullFrameFrequency", @@ -236,4 +240,4 @@ static void bandwidthPreset() { rfb::PresetParameter rfb::Server::preferBandwidth ("PreferBandwidth", "Set various options for lower bandwidth use. The default is off, aka to prefer quality.", - false, bandwidthPreset); \ No newline at end of file + false, bandwidthPreset); diff --git a/common/rfb/ServerCore.h b/common/rfb/ServerCore.h index 9ddfba6..aeebb8f 100644 --- a/common/rfb/ServerCore.h +++ b/common/rfb/ServerCore.h @@ -63,6 +63,7 @@ namespace rfb { static IntParameter udpFullFrameFrequency; static StringParameter kasmPasswordFile; static StringParameter publicIP; + static StringParameter stunServer; static BoolParameter printVideoArea; static BoolParameter protocol3_3; static BoolParameter alwaysShared; diff --git a/unix/xserver/hw/vnc/Xvnc.man b/unix/xserver/hw/vnc/Xvnc.man index d0ea160..2bbd2e9 100644 --- a/unix/xserver/hw/vnc/Xvnc.man +++ b/unix/xserver/hw/vnc/Xvnc.man @@ -127,6 +127,12 @@ The server's public IP, for UDP negotiation. If not set, will be queried via the Default unset. . .TP +.B \-StunServer \fIsrv\fP +Use this STUN server for querying the server's public IP. If not set, a hardcoded list of +STUN servers is used. +Default unset. +. +.TP .B \-udpFullFrameFrequency \fIframes\fP Send a full frame every N frames for clients using UDP. 0 to disable. Default \fI0\fP. .