Revise interface of port forwarder

This eases the usage of port forwarder as the caller code doesn't need
to store previous used port and now can rely on port forwarder doing
all the hard work.

PR #17967.
This commit is contained in:
Chocobo1 2022-11-05 11:33:21 +08:00 committed by GitHub
parent be0f34a69e
commit 99b7663fa9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 75 additions and 49 deletions

View file

@ -50,25 +50,21 @@ void WebUI::configure()
{
m_isErrored = false; // clear previous error state
Preferences *const pref = Preferences::instance();
const quint16 oldPort = m_port;
m_port = pref->getWebUiPort();
const QString portForwardingProfile = u"webui"_qs;
const Preferences *pref = Preferences::instance();
const quint16 port = pref->getWebUiPort();
if (pref->isWebUiEnabled())
{
// UPnP/NAT-PMP
// Port forwarding
auto *portForwarder = Net::PortForwarder::instance();
if (pref->useUPnPForWebUIPort())
{
if (m_port != oldPort)
{
Net::PortForwarder::instance()->deletePort(oldPort);
Net::PortForwarder::instance()->addPort(m_port);
}
portForwarder->setPorts(portForwardingProfile, {port});
}
else
{
Net::PortForwarder::instance()->deletePort(oldPort);
portForwarder->removePorts(portForwardingProfile);
}
// http server
@ -81,7 +77,7 @@ void WebUI::configure()
else
{
if ((m_httpServer->serverAddress().toString() != serverAddressString)
|| (m_httpServer->serverPort() != m_port))
|| (m_httpServer->serverPort() != port))
m_httpServer->close();
}
@ -112,15 +108,15 @@ void WebUI::configure()
{
const auto address = ((serverAddressString == u"*") || serverAddressString.isEmpty())
? QHostAddress::Any : QHostAddress(serverAddressString);
bool success = m_httpServer->listen(address, m_port);
bool success = m_httpServer->listen(address, port);
if (success)
{
LogMsg(tr("Web UI: Now listening on IP: %1, port: %2").arg(serverAddressString).arg(m_port));
LogMsg(tr("Web UI: Now listening on IP: %1, port: %2").arg(serverAddressString).arg(port));
}
else
{
const QString errorMsg = tr("Web UI: Unable to bind to IP: %1, port: %2. Reason: %3")
.arg(serverAddressString).arg(m_port).arg(m_httpServer->errorString());
.arg(serverAddressString).arg(port).arg(m_httpServer->errorString());
LogMsg(errorMsg, Log::CRITICAL);
qCritical() << errorMsg;
@ -144,7 +140,7 @@ void WebUI::configure()
}
else
{
Net::PortForwarder::instance()->deletePort(oldPort);
Net::PortForwarder::instance()->removePorts(portForwardingProfile);
delete m_httpServer;
delete m_webapp;