Triforce: Rename IPOverrides to IPRedirections.

This commit is contained in:
Jordan Woyak
2026-02-15 23:13:18 -06:00
parent cbd43914a5
commit c28ec7a6d3
6 changed files with 111 additions and 108 deletions
@@ -144,9 +144,10 @@ QTableWidgetItem* GetSocketName(s32 host_fd)
return new QTableWidgetItem(QStringLiteral("%1->%2").arg(sock_name).arg(peer_name));
}
QTableWidgetItem* GetSocketRedirections(s32 host_fd, const AMMediaboard::IPOverrides& ip_overrides)
QTableWidgetItem* GetSocketRedirections(s32 host_fd,
const AMMediaboard::IPRedirections& ip_redirections)
{
if (host_fd < 0 || ip_overrides.empty())
if (host_fd < 0 || ip_redirections.empty())
return new QTableWidgetItem();
sockaddr_in sock_addr;
@@ -167,7 +168,7 @@ QTableWidgetItem* GetSocketRedirections(s32 host_fd, const AMMediaboard::IPOverr
QStringList sock_rules;
QStringList peer_rules;
for (const auto& rule : ip_overrides)
for (const auto& rule : ip_redirections)
{
if (rule.replacement.IsMatch(sock_ip_port))
sock_rules << QString::fromStdString(rule.ToString());
@@ -294,7 +295,7 @@ void NetworkWidget::UpdateWiiSocketTable(Core::System& system)
{
// Show Wii socket blocking state
m_socket_table->showColumn(4);
// Hide Triforce IP overrides
// Hide Triforce IP redirections
m_socket_table->hideColumn(6);
auto* ios = system.GetIOS();
@@ -339,9 +340,9 @@ void NetworkWidget::UpdateTriforceSocketTable()
{
// No easy way to get socket blocking state on Windows
m_socket_table->hideColumn(4);
// Show active IP overrides
// Show active IP redirections
m_socket_table->showColumn(6);
const auto ip_overrides = AMMediaboard::GetIPOverrides();
const auto ip_redirections = AMMediaboard::GetIPRedirections();
for (s32 triforce_fd = 0; triforce_fd != AMMediaboard::SOCKET_FD_MAX; ++triforce_fd)
{
m_socket_table->insertRow(triforce_fd);
@@ -352,7 +353,7 @@ void NetworkWidget::UpdateTriforceSocketTable()
m_socket_table->setItem(triforce_fd, 3, GetSocketState(host_fd));
m_socket_table->setItem(triforce_fd, 4, new QTableWidgetItem(QTableWidget::tr("Unknown")));
m_socket_table->setItem(triforce_fd, 5, GetSocketName(host_fd));
m_socket_table->setItem(triforce_fd, 6, GetSocketRedirections(host_fd, ip_overrides));
m_socket_table->setItem(triforce_fd, 6, GetSocketRedirections(host_fd, ip_redirections));
}
}
+69 -67
View File
@@ -29,10 +29,10 @@ constexpr int COLUMN_EMULATED = 0;
constexpr int COLUMN_REAL = 1;
constexpr int COLUMN_DESCRIPTION = 2;
class IPAddressOverridesDialog final : public QDialog
class IPRedirectionsDialog final : public QDialog
{
public:
explicit IPAddressOverridesDialog(QWidget* parent);
explicit IPRedirectionsDialog(QWidget* parent);
private:
void LoadConfig();
@@ -41,7 +41,7 @@ private:
void LoadDefault();
void OnClear();
QTableWidget* m_ip_overrides_table;
QTableWidget* m_ip_redirections_table;
};
} // namespace
@@ -65,45 +65,46 @@ TriforcePane::TriforcePane()
window->show();
});
auto* const ip_override_group = new QGroupBox{tr("IP Address Overrides")};
main_layout->addWidget(ip_override_group);
auto* const ip_redirection_group = new QGroupBox{tr("IP Address Redirections")};
main_layout->addWidget(ip_redirection_group);
auto* const ip_override_layout = new QVBoxLayout{ip_override_group};
auto* const ip_redirection_layout = new QVBoxLayout{ip_redirection_group};
auto* const configure_ip_overrides_button = new NonDefaultQPushButton{tr("Configure")};
ip_override_layout->addWidget(configure_ip_overrides_button);
auto* const configure_ip_redirections_button = new NonDefaultQPushButton{tr("Configure")};
ip_redirection_layout->addWidget(configure_ip_redirections_button);
connect(configure_ip_overrides_button, &QPushButton::clicked, this, [this] {
auto* const ip_overrides = new IPAddressOverridesDialog{this};
ip_overrides->setAttribute(Qt::WA_DeleteOnClose);
ip_overrides->open();
connect(configure_ip_redirections_button, &QPushButton::clicked, this, [this] {
auto* const ip_redirections = new IPRedirectionsDialog{this};
ip_redirections->setAttribute(Qt::WA_DeleteOnClose);
ip_redirections->open();
});
main_layout->addStretch(1);
}
IPAddressOverridesDialog::IPAddressOverridesDialog(QWidget* parent) : QDialog{parent}
IPRedirectionsDialog::IPRedirectionsDialog(QWidget* parent) : QDialog{parent}
{
setWindowTitle(tr("IP Address Overrides"));
setWindowTitle(tr("IP Address Redirections"));
auto* const main_layout = new QVBoxLayout{this};
auto* const load_default_button = new QPushButton(tr("Default"));
connect(load_default_button, &QPushButton::clicked, this, &IPAddressOverridesDialog::LoadDefault);
connect(load_default_button, &QPushButton::clicked, this, &IPRedirectionsDialog::LoadDefault);
auto* const clear_button = new QPushButton(tr("Clear"));
connect(clear_button, &QPushButton::clicked, this, &IPAddressOverridesDialog::OnClear);
connect(clear_button, &QPushButton::clicked, this, &IPRedirectionsDialog::OnClear);
m_ip_overrides_table = new QTableWidget;
main_layout->addWidget(m_ip_overrides_table);
m_ip_redirections_table = new QTableWidget;
main_layout->addWidget(m_ip_redirections_table);
m_ip_overrides_table->setColumnCount(3);
m_ip_overrides_table->setHorizontalHeaderLabels({tr("Emulated"), tr("Real"), tr("Description")});
m_ip_overrides_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
m_ip_overrides_table->setSizeAdjustPolicy(QTableWidget::AdjustToContents);
m_ip_redirections_table->setColumnCount(3);
m_ip_redirections_table->setHorizontalHeaderLabels(
{tr("Emulated"), tr("Real"), tr("Description")});
m_ip_redirections_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
m_ip_redirections_table->setSizeAdjustPolicy(QTableWidget::AdjustToContents);
m_ip_overrides_table->setEditTriggers(QAbstractItemView::DoubleClicked |
QAbstractItemView::EditKeyPressed);
m_ip_redirections_table->setEditTriggers(QAbstractItemView::DoubleClicked |
QAbstractItemView::EditKeyPressed);
auto* const button_box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
main_layout->addWidget(button_box);
@@ -111,75 +112,76 @@ IPAddressOverridesDialog::IPAddressOverridesDialog(QWidget* parent) : QDialog{pa
button_box->addButton(load_default_button, QDialogButtonBox::ActionRole);
button_box->addButton(clear_button, QDialogButtonBox::ActionRole);
connect(button_box, &QDialogButtonBox::accepted, this, &IPAddressOverridesDialog::accept);
connect(button_box, &QDialogButtonBox::rejected, this, &IPAddressOverridesDialog::reject);
connect(button_box, &QDialogButtonBox::accepted, this, &IPRedirectionsDialog::accept);
connect(button_box, &QDialogButtonBox::rejected, this, &IPRedirectionsDialog::reject);
connect(this, &IPAddressOverridesDialog::accepted, this, &IPAddressOverridesDialog::SaveConfig);
connect(this, &IPRedirectionsDialog::accepted, this, &IPRedirectionsDialog::SaveConfig);
connect(m_ip_overrides_table, &QTableWidget::itemChanged, this, [this](QTableWidgetItem* item) {
const int row_count = m_ip_overrides_table->rowCount();
const bool is_last_row = item->row() == row_count - 1;
if (is_last_row)
{
if (!item->text().isEmpty())
m_ip_overrides_table->insertRow(row_count);
}
else if (item->column() != COLUMN_DESCRIPTION && item->text().isEmpty())
{
// Just remove inner rows that have text erased.
// This UX could be less weird, but it's good enough for now.
m_ip_overrides_table->removeRow(item->row());
}
});
connect(m_ip_redirections_table, &QTableWidget::itemChanged, this,
[this](QTableWidgetItem* item) {
const int row_count = m_ip_redirections_table->rowCount();
const bool is_last_row = item->row() == row_count - 1;
if (is_last_row)
{
if (!item->text().isEmpty())
m_ip_redirections_table->insertRow(row_count);
}
else if (item->column() != COLUMN_DESCRIPTION && item->text().isEmpty())
{
// Just remove inner rows that have text erased.
// This UX could be less weird, but it's good enough for now.
m_ip_redirections_table->removeRow(item->row());
}
});
LoadConfig();
QtUtils::AdjustSizeWithinScreen(this);
}
void IPAddressOverridesDialog::LoadConfig()
void IPRedirectionsDialog::LoadConfig()
{
m_ip_overrides_table->setRowCount(0);
m_ip_redirections_table->setRowCount(0);
// Add the final empty row.
m_ip_overrides_table->insertRow(0);
m_ip_redirections_table->insertRow(0);
int row = 0;
const auto ip_overrides_str = Config::Get(Config::MAIN_TRIFORCE_IP_OVERRIDES);
for (auto&& ip_pair : ip_overrides_str | std::views::split(','))
const auto ip_redirections_str = Config::Get(Config::MAIN_TRIFORCE_IP_REDIRECTIONS);
for (auto&& ip_pair : ip_redirections_str | std::views::split(','))
{
const auto ip_pair_str = std::string_view{ip_pair};
const auto parsed = AMMediaboard::ParseIPOverride(ip_pair_str);
const auto parsed = AMMediaboard::ParseIPRedirection(ip_pair_str);
if (!parsed.has_value())
{
ERROR_LOG_FMT(COMMON, "Bad IP pair string: {}", ip_pair_str);
ERROR_LOG_FMT(COMMON, "Bad IP redirection string: {}", ip_pair_str);
continue;
}
m_ip_overrides_table->insertRow(row);
m_ip_redirections_table->insertRow(row);
m_ip_overrides_table->setItem(row, COLUMN_EMULATED,
new QTableWidgetItem(QString::fromUtf8(parsed->original)));
m_ip_overrides_table->setItem(row, COLUMN_REAL,
new QTableWidgetItem(QString::fromUtf8(parsed->replacement)));
m_ip_overrides_table->setItem(row, COLUMN_DESCRIPTION,
new QTableWidgetItem(QString::fromUtf8(parsed->description)));
m_ip_redirections_table->setItem(row, COLUMN_EMULATED,
new QTableWidgetItem(QString::fromUtf8(parsed->original)));
m_ip_redirections_table->setItem(row, COLUMN_REAL,
new QTableWidgetItem(QString::fromUtf8(parsed->replacement)));
m_ip_redirections_table->setItem(row, COLUMN_DESCRIPTION,
new QTableWidgetItem(QString::fromUtf8(parsed->description)));
++row;
}
}
void IPAddressOverridesDialog::SaveConfig() const
void IPRedirectionsDialog::SaveConfig() const
{
// Ignore our empty row.
const int row_count = m_ip_overrides_table->rowCount() - 1;
const int row_count = m_ip_redirections_table->rowCount() - 1;
std::vector<std::string> replacements(row_count);
for (int row = 0; row < row_count; ++row)
{
auto* const original_item = m_ip_overrides_table->item(row, COLUMN_EMULATED);
auto* const replacement_item = m_ip_overrides_table->item(row, COLUMN_REAL);
auto* const original_item = m_ip_redirections_table->item(row, COLUMN_EMULATED);
auto* const replacement_item = m_ip_redirections_table->item(row, COLUMN_REAL);
// Skip incomplete rows.
if (original_item == nullptr || replacement_item == nullptr)
@@ -188,7 +190,7 @@ void IPAddressOverridesDialog::SaveConfig() const
replacements[row] = fmt::format("{}={}", StripWhitespace(original_item->text().toStdString()),
replacement_item->text().toStdString());
auto* const description_item = m_ip_overrides_table->item(row, COLUMN_DESCRIPTION);
auto* const description_item = m_ip_redirections_table->item(row, COLUMN_DESCRIPTION);
if (description_item == nullptr)
continue;
@@ -198,22 +200,22 @@ void IPAddressOverridesDialog::SaveConfig() const
(replacements[row] += ' ') += description;
}
Config::SetBaseOrCurrent(Config::MAIN_TRIFORCE_IP_OVERRIDES,
Config::SetBaseOrCurrent(Config::MAIN_TRIFORCE_IP_REDIRECTIONS,
fmt::format("{}", fmt::join(replacements, ",")));
}
void IPAddressOverridesDialog::LoadDefault()
void IPRedirectionsDialog::LoadDefault()
{
// This alters the config before "OK" is pressed. Bad UX..
Config::SetBaseOrCurrent(Config::MAIN_TRIFORCE_IP_OVERRIDES, Config::DefaultState{});
Config::SetBaseOrCurrent(Config::MAIN_TRIFORCE_IP_REDIRECTIONS, Config::DefaultState{});
LoadConfig();
}
void IPAddressOverridesDialog::OnClear()
void IPRedirectionsDialog::OnClear()
{
m_ip_overrides_table->setRowCount(0);
m_ip_redirections_table->setRowCount(0);
// Add the final empty row.
m_ip_overrides_table->insertRow(0);
m_ip_redirections_table->insertRow(0);
}