Finish PS5 Regist

This commit is contained in:
Florian Märkl 2020-12-11 19:44:40 +01:00
commit 05812b7b7a
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
11 changed files with 122 additions and 51 deletions

View file

@ -38,12 +38,13 @@ static bool operator<(const HostMAC &a, const HostMAC &b) { return a.GetValue()
class RegisteredHost
{
private:
ChiakiTarget target;
QString ap_ssid;
QString ap_bssid;
QString ap_key;
QString ap_name;
HostMAC ps4_mac;
QString ps4_nickname;
HostMAC server_mac;
QString server_nickname;
char rp_regist_key[CHIAKI_SESSION_AUTH_SIZE];
uint32_t rp_key_type;
uint8_t rp_key[0x10];
@ -54,8 +55,9 @@ class RegisteredHost
RegisteredHost(const ChiakiRegisteredHost &chiaki_host);
const HostMAC &GetPS4MAC() const { return ps4_mac; }
const QString &GetPS4Nickname() const { return ps4_nickname; }
ChiakiTarget GetTarget() const { return target; }
const HostMAC &GetServerMAC() const { return server_mac; }
const QString &GetServerNickname() const { return server_nickname; }
const QByteArray GetRPRegistKey() const { return QByteArray(rp_regist_key, sizeof(rp_regist_key)); }
const QByteArray GetRPKey() const { return QByteArray((const char *)rp_key, sizeof(rp_key)); }
@ -81,7 +83,7 @@ class ManualHost
bool GetRegistered() const { return registered; }
HostMAC GetMAC() const { return registered_mac; }
void Register(const RegisteredHost &registered_host) { this->registered = true; this->registered_mac = registered_host.GetPS4MAC(); }
void Register(const RegisteredHost &registered_host) { this->registered = true; this->registered_mac = registered_host.GetServerMAC(); }
void SaveToSettings(QSettings *settings) const;
static ManualHost LoadFromSettings(QSettings *settings);

View file

@ -15,8 +15,8 @@ RegisteredHost::RegisteredHost(const RegisteredHost &o)
ap_bssid(o.ap_bssid),
ap_key(o.ap_key),
ap_name(o.ap_name),
ps4_mac(o.ps4_mac),
ps4_nickname(o.ps4_nickname),
server_mac(o.server_mac),
server_nickname(o.server_nickname),
rp_key_type(o.rp_key_type)
{
memcpy(rp_regist_key, o.rp_regist_key, sizeof(rp_regist_key));
@ -24,13 +24,14 @@ RegisteredHost::RegisteredHost(const RegisteredHost &o)
}
RegisteredHost::RegisteredHost(const ChiakiRegisteredHost &chiaki_host)
: ps4_mac(chiaki_host.ps4_mac)
: server_mac(chiaki_host.server_mac)
{
target = chiaki_host.target;
ap_ssid = chiaki_host.ap_ssid;
ap_bssid = chiaki_host.ap_bssid;
ap_key = chiaki_host.ap_key;
ap_name = chiaki_host.ap_name;
ps4_nickname = chiaki_host.ps4_nickname;
server_nickname = chiaki_host.server_nickname;
memcpy(rp_regist_key, chiaki_host.rp_regist_key, sizeof(rp_regist_key));
rp_key_type = chiaki_host.rp_key_type;
memcpy(rp_key, chiaki_host.rp_key, sizeof(rp_key));
@ -38,12 +39,13 @@ RegisteredHost::RegisteredHost(const ChiakiRegisteredHost &chiaki_host)
void RegisteredHost::SaveToSettings(QSettings *settings) const
{
settings->setValue("target", (int)target);
settings->setValue("ap_ssid", ap_ssid);
settings->setValue("ap_bssid", ap_bssid);
settings->setValue("ap_key", ap_key);
settings->setValue("ap_name", ap_name);
settings->setValue("ps4_nickname", ps4_nickname);
settings->setValue("ps4_mac", QByteArray((const char *)ps4_mac.GetMAC(), 6));
settings->setValue("server_nickname", server_nickname);
settings->setValue("server_mac", QByteArray((const char *)server_mac.GetMAC(), 6));
settings->setValue("rp_regist_key", QByteArray(rp_regist_key, sizeof(rp_regist_key)));
settings->setValue("rp_key_type", rp_key_type);
settings->setValue("rp_key", QByteArray((const char *)rp_key, sizeof(rp_key)));
@ -52,14 +54,15 @@ void RegisteredHost::SaveToSettings(QSettings *settings) const
RegisteredHost RegisteredHost::LoadFromSettings(QSettings *settings)
{
RegisteredHost r;
r.target = (ChiakiTarget)settings->value("target").toInt();
r.ap_ssid = settings->value("ap_ssid").toString();
r.ap_bssid = settings->value("ap_bssid").toString();
r.ap_key = settings->value("ap_key").toString();
r.ap_name = settings->value("ap_name").toString();
r.ps4_nickname = settings->value("ps4_nickname").toString();
auto ps4_mac = settings->value("ps4_mac").toByteArray();
if(ps4_mac.size() == 6)
r.ps4_mac = HostMAC((const uint8_t *)ps4_mac.constData());
r.server_nickname = settings->value("server_nickname").toString();
auto server_mac = settings->value("server_mac").toByteArray();
if(server_mac.size() == 6)
r.server_mac = HostMAC((const uint8_t *)server_mac.constData());
auto rp_regist_key = settings->value("rp_regist_key").toByteArray();
if(rp_regist_key.size() == sizeof(r.rp_regist_key))
memcpy(r.rp_regist_key, rp_regist_key.constData(), sizeof(r.rp_regist_key));

View file

@ -112,7 +112,7 @@ int real_main(int argc, char *argv[])
if(args[0] == "list")
{
for(const auto &host : settings.GetRegisteredHosts())
printf("Host: %s \n", host.GetPS4Nickname().toLocal8Bit().constData());
printf("Host: %s \n", host.GetServerNickname().toLocal8Bit().constData());
return 0;
}
if(args[0] == "stream")
@ -131,7 +131,7 @@ int real_main(int argc, char *argv[])
parser.showHelp(1);
for(const auto &temphost : settings.GetRegisteredHosts())
{
if(temphost.GetPS4Nickname() == args[1])
if(temphost.GetServerNickname() == args[1])
{
morning = temphost.GetRPKey();
regist_key = temphost.GetRPRegistKey();

View file

@ -38,7 +38,7 @@ ManualHostDialog::ManualHostDialog(Settings *settings, int id, QWidget *parent)
registered_host_combo_box->addItem(tr("Register on first Connection"));
auto registered_hosts = settings->GetRegisteredHosts();
for(const auto &registered_host : registered_hosts)
registered_host_combo_box->addItem(QString("%1 (%2)").arg(registered_host.GetPS4MAC().ToString(), registered_host.GetPS4Nickname()), QVariant::fromValue(registered_host.GetPS4MAC()));
registered_host_combo_box->addItem(QString("%1 (%2)").arg(registered_host.GetServerMAC().ToString(), registered_host.GetServerNickname()), QVariant::fromValue(registered_host.GetServerMAC()));
form_layout->addRow(tr("Registered Console:"), registered_host_combo_box);
button_box = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Discard, this);
@ -74,4 +74,4 @@ void ManualHostDialog::accept()
ManualHost host(host_id, host_edit->text().trimmed(), registered, registered_mac);
settings->SetManualHost(host);
QDialog::accept();
}
}

View file

@ -205,14 +205,14 @@ void RegistExecuteDialog::Finished()
void RegistExecuteDialog::Success(RegisteredHost host)
{
CHIAKI_LOGI(&log, "Successfully registered %s", host.GetPS4Nickname().toLocal8Bit().constData());
CHIAKI_LOGI(&log, "Successfully registered %s", host.GetServerNickname().toLocal8Bit().constData());
this->registered_host = host;
if(settings->GetRegisteredHostRegistered(host.GetPS4MAC()))
if(settings->GetRegisteredHostRegistered(host.GetServerMAC()))
{
int r = QMessageBox::question(this,
tr("Console already registered"),
tr("The console with ID %1 has already been registered. Should the previous record be overwritten?").arg(host.GetPS4MAC().ToString()));
tr("The console with ID %1 has already been registered. Should the previous record be overwritten?").arg(host.GetServerMAC().ToString()));
if(r == QMessageBox::No)
{
accept();
@ -222,7 +222,7 @@ void RegistExecuteDialog::Success(RegisteredHost host)
settings->AddRegisteredHost(host);
QMessageBox::information(this, tr("Console registered"), tr("The Console %1 with ID %2 has been successfully registered!").arg(host.GetPS4Nickname(), host.GetPS4MAC().ToString()));
QMessageBox::information(this, tr("Console registered"), tr("The Console %1 with ID %2 has been successfully registered!").arg(host.GetServerNickname(), host.GetServerMAC().ToString()));
accept();
}

View file

@ -76,7 +76,7 @@ void ServerItemWidget::Update(const DisplayServer &display_server)
if(display_server.discovered || display_server.registered)
{
top_text += (display_server.discovered ? display_server.discovery_host.host_name : display_server.registered_host.GetPS4Nickname()) + "\n";
top_text += (display_server.discovered ? display_server.discovery_host.host_name : display_server.registered_host.GetServerNickname()) + "\n";
}
top_text += tr("Address: %1").arg(display_server.GetHostAddr());
@ -84,7 +84,7 @@ void ServerItemWidget::Update(const DisplayServer &display_server)
if(display_server.discovered || display_server.registered)
{
top_text += "\n" + tr("ID: %1 (%2)").arg(
display_server.discovered ? display_server.discovery_host.GetHostMAC().ToString() : display_server.registered_host.GetPS4MAC().ToString(),
display_server.discovered ? display_server.discovery_host.GetHostMAC().ToString() : display_server.registered_host.GetServerMAC().ToString(),
display_server.registered ? tr("registered") : tr("unregistered"));
}

View file

@ -5,10 +5,67 @@
#include <chiaki/config.h>
#define SETTINGS_VERSION 1
#define SETTINGS_VERSION 2
static void MigrateSettingsTo2(QSettings *settings)
{
QList<QMap<QString, QVariant>> hosts;
int count = settings->beginReadArray("registered_hosts");
for(int i=0; i<count; i++)
{
settings->setArrayIndex(i);
QMap<QString, QVariant> host;
for(QString k : settings->allKeys())
host[k] = settings->value(k);
}
settings->endArray();
settings->beginWriteArray("registered_hosts");
int i=0;
for(const auto &host : hosts)
{
settings->setArrayIndex(i);
settings->setValue("target", (int)CHIAKI_TARGET_PS4_10);
for(auto it = host.constBegin(); it != host.constEnd(); it++)
{
QString k = it.key();
if(k == "ps4_nickname")
k = "server_nickname";
else if(k == "ps4_mac")
k = "server_mac";
settings->setValue(k, it.value());
}
i++;
}
settings->endArray();
}
static void MigrateSettings(QSettings *settings)
{
int version_prev = settings->value("version", 0).toInt();
if(version_prev < 1)
return;
if(version_prev > SETTINGS_VERSION)
{
CHIAKI_LOGE(NULL, "Settings version %d is higher than application one (%d)", version_prev, SETTINGS_VERSION);
return;
}
while(version_prev < 1)
{
version_prev++;
switch(version_prev)
{
case 2:
MigrateSettingsTo2(settings);
break;
default:
break;
}
}
}
Settings::Settings(QObject *parent) : QObject(parent)
{
MigrateSettings(&settings);
manual_hosts_id_next = 0;
settings.setValue("version", SETTINGS_VERSION);
LoadRegisteredHosts();
@ -183,7 +240,7 @@ void Settings::LoadRegisteredHosts()
{
settings.setArrayIndex(i);
RegisteredHost host = RegisteredHost::LoadFromSettings(&settings);
registered_hosts[host.GetPS4MAC()] = host;
registered_hosts[host.GetServerMAC()] = host;
}
settings.endArray();
}
@ -203,7 +260,7 @@ void Settings::SaveRegisteredHosts()
void Settings::AddRegisteredHost(const RegisteredHost &host)
{
registered_hosts[host.GetPS4MAC()] = host;
registered_hosts[host.GetServerMAC()] = host;
SaveRegisteredHosts();
emit RegisteredHostsUpdated();
}

View file

@ -348,8 +348,8 @@ void SettingsDialog::UpdateRegisteredHosts()
auto hosts = settings->GetRegisteredHosts();
for(const auto &host : hosts)
{
auto item = new QListWidgetItem(QString("%1 (%2)").arg(host.GetPS4MAC().ToString(), host.GetPS4Nickname()));
item->setData(Qt::UserRole, QVariant::fromValue(host.GetPS4MAC()));
auto item = new QListWidgetItem(QString("%1 (%2)").arg(host.GetServerMAC().ToString(), host.GetServerNickname()));
item->setData(Qt::UserRole, QVariant::fromValue(host.GetServerMAC()));
registered_hosts_list_widget->addItem(item);
}
}