mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-19 13:09:39 -07:00
Finish PS5 Regist
This commit is contained in:
parent
20a7e9d123
commit
05812b7b7a
11 changed files with 122 additions and 51 deletions
|
@ -38,12 +38,13 @@ static bool operator<(const HostMAC &a, const HostMAC &b) { return a.GetValue()
|
||||||
class RegisteredHost
|
class RegisteredHost
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
ChiakiTarget target;
|
||||||
QString ap_ssid;
|
QString ap_ssid;
|
||||||
QString ap_bssid;
|
QString ap_bssid;
|
||||||
QString ap_key;
|
QString ap_key;
|
||||||
QString ap_name;
|
QString ap_name;
|
||||||
HostMAC ps4_mac;
|
HostMAC server_mac;
|
||||||
QString ps4_nickname;
|
QString server_nickname;
|
||||||
char rp_regist_key[CHIAKI_SESSION_AUTH_SIZE];
|
char rp_regist_key[CHIAKI_SESSION_AUTH_SIZE];
|
||||||
uint32_t rp_key_type;
|
uint32_t rp_key_type;
|
||||||
uint8_t rp_key[0x10];
|
uint8_t rp_key[0x10];
|
||||||
|
@ -54,8 +55,9 @@ class RegisteredHost
|
||||||
|
|
||||||
RegisteredHost(const ChiakiRegisteredHost &chiaki_host);
|
RegisteredHost(const ChiakiRegisteredHost &chiaki_host);
|
||||||
|
|
||||||
const HostMAC &GetPS4MAC() const { return ps4_mac; }
|
ChiakiTarget GetTarget() const { return target; }
|
||||||
const QString &GetPS4Nickname() const { return ps4_nickname; }
|
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 GetRPRegistKey() const { return QByteArray(rp_regist_key, sizeof(rp_regist_key)); }
|
||||||
const QByteArray GetRPKey() const { return QByteArray((const char *)rp_key, sizeof(rp_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; }
|
bool GetRegistered() const { return registered; }
|
||||||
HostMAC GetMAC() const { return registered_mac; }
|
HostMAC GetMAC() const { return registered_mac; }
|
||||||
|
|
||||||
void Register(const RegisteredHost ®istered_host) { this->registered = true; this->registered_mac = registered_host.GetPS4MAC(); }
|
void Register(const RegisteredHost ®istered_host) { this->registered = true; this->registered_mac = registered_host.GetServerMAC(); }
|
||||||
|
|
||||||
void SaveToSettings(QSettings *settings) const;
|
void SaveToSettings(QSettings *settings) const;
|
||||||
static ManualHost LoadFromSettings(QSettings *settings);
|
static ManualHost LoadFromSettings(QSettings *settings);
|
||||||
|
|
|
@ -15,8 +15,8 @@ RegisteredHost::RegisteredHost(const RegisteredHost &o)
|
||||||
ap_bssid(o.ap_bssid),
|
ap_bssid(o.ap_bssid),
|
||||||
ap_key(o.ap_key),
|
ap_key(o.ap_key),
|
||||||
ap_name(o.ap_name),
|
ap_name(o.ap_name),
|
||||||
ps4_mac(o.ps4_mac),
|
server_mac(o.server_mac),
|
||||||
ps4_nickname(o.ps4_nickname),
|
server_nickname(o.server_nickname),
|
||||||
rp_key_type(o.rp_key_type)
|
rp_key_type(o.rp_key_type)
|
||||||
{
|
{
|
||||||
memcpy(rp_regist_key, o.rp_regist_key, sizeof(rp_regist_key));
|
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)
|
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_ssid = chiaki_host.ap_ssid;
|
||||||
ap_bssid = chiaki_host.ap_bssid;
|
ap_bssid = chiaki_host.ap_bssid;
|
||||||
ap_key = chiaki_host.ap_key;
|
ap_key = chiaki_host.ap_key;
|
||||||
ap_name = chiaki_host.ap_name;
|
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));
|
memcpy(rp_regist_key, chiaki_host.rp_regist_key, sizeof(rp_regist_key));
|
||||||
rp_key_type = chiaki_host.rp_key_type;
|
rp_key_type = chiaki_host.rp_key_type;
|
||||||
memcpy(rp_key, chiaki_host.rp_key, sizeof(rp_key));
|
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
|
void RegisteredHost::SaveToSettings(QSettings *settings) const
|
||||||
{
|
{
|
||||||
|
settings->setValue("target", (int)target);
|
||||||
settings->setValue("ap_ssid", ap_ssid);
|
settings->setValue("ap_ssid", ap_ssid);
|
||||||
settings->setValue("ap_bssid", ap_bssid);
|
settings->setValue("ap_bssid", ap_bssid);
|
||||||
settings->setValue("ap_key", ap_key);
|
settings->setValue("ap_key", ap_key);
|
||||||
settings->setValue("ap_name", ap_name);
|
settings->setValue("ap_name", ap_name);
|
||||||
settings->setValue("ps4_nickname", ps4_nickname);
|
settings->setValue("server_nickname", server_nickname);
|
||||||
settings->setValue("ps4_mac", QByteArray((const char *)ps4_mac.GetMAC(), 6));
|
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_regist_key", QByteArray(rp_regist_key, sizeof(rp_regist_key)));
|
||||||
settings->setValue("rp_key_type", rp_key_type);
|
settings->setValue("rp_key_type", rp_key_type);
|
||||||
settings->setValue("rp_key", QByteArray((const char *)rp_key, sizeof(rp_key)));
|
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 RegisteredHost::LoadFromSettings(QSettings *settings)
|
||||||
{
|
{
|
||||||
RegisteredHost r;
|
RegisteredHost r;
|
||||||
|
r.target = (ChiakiTarget)settings->value("target").toInt();
|
||||||
r.ap_ssid = settings->value("ap_ssid").toString();
|
r.ap_ssid = settings->value("ap_ssid").toString();
|
||||||
r.ap_bssid = settings->value("ap_bssid").toString();
|
r.ap_bssid = settings->value("ap_bssid").toString();
|
||||||
r.ap_key = settings->value("ap_key").toString();
|
r.ap_key = settings->value("ap_key").toString();
|
||||||
r.ap_name = settings->value("ap_name").toString();
|
r.ap_name = settings->value("ap_name").toString();
|
||||||
r.ps4_nickname = settings->value("ps4_nickname").toString();
|
r.server_nickname = settings->value("server_nickname").toString();
|
||||||
auto ps4_mac = settings->value("ps4_mac").toByteArray();
|
auto server_mac = settings->value("server_mac").toByteArray();
|
||||||
if(ps4_mac.size() == 6)
|
if(server_mac.size() == 6)
|
||||||
r.ps4_mac = HostMAC((const uint8_t *)ps4_mac.constData());
|
r.server_mac = HostMAC((const uint8_t *)server_mac.constData());
|
||||||
auto rp_regist_key = settings->value("rp_regist_key").toByteArray();
|
auto rp_regist_key = settings->value("rp_regist_key").toByteArray();
|
||||||
if(rp_regist_key.size() == sizeof(r.rp_regist_key))
|
if(rp_regist_key.size() == sizeof(r.rp_regist_key))
|
||||||
memcpy(r.rp_regist_key, rp_regist_key.constData(), sizeof(r.rp_regist_key));
|
memcpy(r.rp_regist_key, rp_regist_key.constData(), sizeof(r.rp_regist_key));
|
||||||
|
|
|
@ -112,7 +112,7 @@ int real_main(int argc, char *argv[])
|
||||||
if(args[0] == "list")
|
if(args[0] == "list")
|
||||||
{
|
{
|
||||||
for(const auto &host : settings.GetRegisteredHosts())
|
for(const auto &host : settings.GetRegisteredHosts())
|
||||||
printf("Host: %s \n", host.GetPS4Nickname().toLocal8Bit().constData());
|
printf("Host: %s \n", host.GetServerNickname().toLocal8Bit().constData());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if(args[0] == "stream")
|
if(args[0] == "stream")
|
||||||
|
@ -131,7 +131,7 @@ int real_main(int argc, char *argv[])
|
||||||
parser.showHelp(1);
|
parser.showHelp(1);
|
||||||
for(const auto &temphost : settings.GetRegisteredHosts())
|
for(const auto &temphost : settings.GetRegisteredHosts())
|
||||||
{
|
{
|
||||||
if(temphost.GetPS4Nickname() == args[1])
|
if(temphost.GetServerNickname() == args[1])
|
||||||
{
|
{
|
||||||
morning = temphost.GetRPKey();
|
morning = temphost.GetRPKey();
|
||||||
regist_key = temphost.GetRPRegistKey();
|
regist_key = temphost.GetRPRegistKey();
|
||||||
|
|
|
@ -38,7 +38,7 @@ ManualHostDialog::ManualHostDialog(Settings *settings, int id, QWidget *parent)
|
||||||
registered_host_combo_box->addItem(tr("Register on first Connection"));
|
registered_host_combo_box->addItem(tr("Register on first Connection"));
|
||||||
auto registered_hosts = settings->GetRegisteredHosts();
|
auto registered_hosts = settings->GetRegisteredHosts();
|
||||||
for(const auto ®istered_host : registered_hosts)
|
for(const auto ®istered_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);
|
form_layout->addRow(tr("Registered Console:"), registered_host_combo_box);
|
||||||
|
|
||||||
button_box = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Discard, this);
|
button_box = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Discard, this);
|
||||||
|
|
|
@ -205,14 +205,14 @@ void RegistExecuteDialog::Finished()
|
||||||
|
|
||||||
void RegistExecuteDialog::Success(RegisteredHost host)
|
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;
|
this->registered_host = host;
|
||||||
|
|
||||||
if(settings->GetRegisteredHostRegistered(host.GetPS4MAC()))
|
if(settings->GetRegisteredHostRegistered(host.GetServerMAC()))
|
||||||
{
|
{
|
||||||
int r = QMessageBox::question(this,
|
int r = QMessageBox::question(this,
|
||||||
tr("Console already registered"),
|
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)
|
if(r == QMessageBox::No)
|
||||||
{
|
{
|
||||||
accept();
|
accept();
|
||||||
|
@ -222,7 +222,7 @@ void RegistExecuteDialog::Success(RegisteredHost host)
|
||||||
|
|
||||||
settings->AddRegisteredHost(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();
|
accept();
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ void ServerItemWidget::Update(const DisplayServer &display_server)
|
||||||
|
|
||||||
if(display_server.discovered || display_server.registered)
|
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());
|
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)
|
if(display_server.discovered || display_server.registered)
|
||||||
{
|
{
|
||||||
top_text += "\n" + tr("ID: %1 (%2)").arg(
|
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"));
|
display_server.registered ? tr("registered") : tr("unregistered"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,67 @@
|
||||||
|
|
||||||
#include <chiaki/config.h>
|
#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)
|
Settings::Settings(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
|
MigrateSettings(&settings);
|
||||||
manual_hosts_id_next = 0;
|
manual_hosts_id_next = 0;
|
||||||
settings.setValue("version", SETTINGS_VERSION);
|
settings.setValue("version", SETTINGS_VERSION);
|
||||||
LoadRegisteredHosts();
|
LoadRegisteredHosts();
|
||||||
|
@ -183,7 +240,7 @@ void Settings::LoadRegisteredHosts()
|
||||||
{
|
{
|
||||||
settings.setArrayIndex(i);
|
settings.setArrayIndex(i);
|
||||||
RegisteredHost host = RegisteredHost::LoadFromSettings(&settings);
|
RegisteredHost host = RegisteredHost::LoadFromSettings(&settings);
|
||||||
registered_hosts[host.GetPS4MAC()] = host;
|
registered_hosts[host.GetServerMAC()] = host;
|
||||||
}
|
}
|
||||||
settings.endArray();
|
settings.endArray();
|
||||||
}
|
}
|
||||||
|
@ -203,7 +260,7 @@ void Settings::SaveRegisteredHosts()
|
||||||
|
|
||||||
void Settings::AddRegisteredHost(const RegisteredHost &host)
|
void Settings::AddRegisteredHost(const RegisteredHost &host)
|
||||||
{
|
{
|
||||||
registered_hosts[host.GetPS4MAC()] = host;
|
registered_hosts[host.GetServerMAC()] = host;
|
||||||
SaveRegisteredHosts();
|
SaveRegisteredHosts();
|
||||||
emit RegisteredHostsUpdated();
|
emit RegisteredHostsUpdated();
|
||||||
}
|
}
|
||||||
|
|
|
@ -348,8 +348,8 @@ void SettingsDialog::UpdateRegisteredHosts()
|
||||||
auto hosts = settings->GetRegisteredHosts();
|
auto hosts = settings->GetRegisteredHosts();
|
||||||
for(const auto &host : hosts)
|
for(const auto &host : hosts)
|
||||||
{
|
{
|
||||||
auto item = new QListWidgetItem(QString("%1 (%2)").arg(host.GetPS4MAC().ToString(), host.GetPS4Nickname()));
|
auto item = new QListWidgetItem(QString("%1 (%2)").arg(host.GetServerMAC().ToString(), host.GetServerNickname()));
|
||||||
item->setData(Qt::UserRole, QVariant::fromValue(host.GetPS4MAC()));
|
item->setData(Qt::UserRole, QVariant::fromValue(host.GetServerMAC()));
|
||||||
registered_hosts_list_widget->addItem(item);
|
registered_hosts_list_widget->addItem(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,12 +37,13 @@ typedef struct chiaki_regist_info_t
|
||||||
|
|
||||||
typedef struct chiaki_registered_host_t
|
typedef struct chiaki_registered_host_t
|
||||||
{
|
{
|
||||||
|
ChiakiTarget target;
|
||||||
char ap_ssid[0x30];
|
char ap_ssid[0x30];
|
||||||
char ap_bssid[0x20];
|
char ap_bssid[0x20];
|
||||||
char ap_key[0x50];
|
char ap_key[0x50];
|
||||||
char ap_name[0x20];
|
char ap_name[0x20];
|
||||||
uint8_t ps4_mac[6];
|
uint8_t server_mac[6];
|
||||||
char ps4_nickname[0x20];
|
char server_nickname[0x20];
|
||||||
char rp_regist_key[CHIAKI_SESSION_AUTH_SIZE]; // must be completely filled (pad with \0)
|
char rp_regist_key[CHIAKI_SESSION_AUTH_SIZE]; // must be completely filled (pad with \0)
|
||||||
uint32_t rp_key_type;
|
uint32_t rp_key_type;
|
||||||
uint8_t rp_key[0x10];
|
uint8_t rp_key[0x10];
|
||||||
|
|
|
@ -633,20 +633,22 @@ static ChiakiErrorCode regist_parse_response_payload(ChiakiRegist *regist, Chiak
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(host, 0, sizeof(*host));
|
memset(host, 0, sizeof(*host));
|
||||||
|
host->target = regist->info.target;
|
||||||
|
|
||||||
bool mac_found = false;
|
bool mac_found = false;
|
||||||
bool regist_key_found = false;
|
bool regist_key_found = false;
|
||||||
bool key_found = false;
|
bool key_found = false;
|
||||||
|
bool ps5 = chiaki_target_is_ps5(regist->info.target);
|
||||||
|
|
||||||
for(ChiakiHttpHeader *header=headers; header; header=header->next)
|
for(ChiakiHttpHeader *header=headers; header; header=header->next)
|
||||||
{
|
{
|
||||||
#define COPY_STRING(name, key_str) \
|
#define COPY_STRING(name, key_str) \
|
||||||
if(strcmp(header->key, key_str) == 0) \
|
if(strcmp(header->key, (key_str)) == 0) \
|
||||||
{ \
|
{ \
|
||||||
size_t len = strlen(header->value); \
|
size_t len = strlen(header->value); \
|
||||||
if(len >= sizeof(host->name)) \
|
if(len >= sizeof(host->name)) \
|
||||||
{ \
|
{ \
|
||||||
CHIAKI_LOGE(regist->log, "Regist value for " key_str " in response is too long"); \
|
CHIAKI_LOGE(regist->log, "Regist value for %s in response is too long", (key_str)); \
|
||||||
continue; \
|
continue; \
|
||||||
} \
|
} \
|
||||||
memcpy(host->name, header->value, len); \
|
memcpy(host->name, header->value, len); \
|
||||||
|
@ -657,10 +659,10 @@ static ChiakiErrorCode regist_parse_response_payload(ChiakiRegist *regist, Chiak
|
||||||
COPY_STRING(ap_bssid, "AP-Bssid")
|
COPY_STRING(ap_bssid, "AP-Bssid")
|
||||||
COPY_STRING(ap_key, "AP-Key")
|
COPY_STRING(ap_key, "AP-Key")
|
||||||
COPY_STRING(ap_name, "AP-Name")
|
COPY_STRING(ap_name, "AP-Name")
|
||||||
COPY_STRING(ps4_nickname, "PS4-Nickname")
|
COPY_STRING(server_nickname, ps5 ? "PS5-Nickname" : "PS4-Nickname")
|
||||||
#undef COPY_STRING
|
#undef COPY_STRING
|
||||||
|
|
||||||
if(strcmp(header->key, "PS4-RegistKey") == 0)
|
if(strcmp(header->key, ps5 ? "PS5-RegistKey" : "PS4-RegistKey") == 0)
|
||||||
{
|
{
|
||||||
memset(host->rp_regist_key, 0, sizeof(host->rp_regist_key));
|
memset(host->rp_regist_key, 0, sizeof(host->rp_regist_key));
|
||||||
size_t buf_size = sizeof(host->rp_regist_key);
|
size_t buf_size = sizeof(host->rp_regist_key);
|
||||||
|
@ -693,14 +695,14 @@ static ChiakiErrorCode regist_parse_response_payload(ChiakiRegist *regist, Chiak
|
||||||
key_found = true;
|
key_found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(strcmp(header->key, "PS4-Mac") == 0)
|
else if(strcmp(header->key, ps5 ? "PS5-Mac" : "PS4-Mac") == 0)
|
||||||
{
|
{
|
||||||
size_t buf_size = sizeof(host->ps4_mac);
|
size_t buf_size = sizeof(host->server_mac);
|
||||||
err = parse_hex((uint8_t *)host->ps4_mac, &buf_size, header->value, strlen(header->value));
|
err = parse_hex((uint8_t *)host->server_mac, &buf_size, header->value, strlen(header->value));
|
||||||
if(err != CHIAKI_ERR_SUCCESS || buf_size != sizeof(host->ps4_mac))
|
if(err != CHIAKI_ERR_SUCCESS || buf_size != sizeof(host->server_mac))
|
||||||
{
|
{
|
||||||
CHIAKI_LOGE(regist->log, "Regist received invalid MAC Address in response");
|
CHIAKI_LOGE(regist->log, "Regist received invalid MAC Address in response");
|
||||||
memset(host->ps4_mac, 0, sizeof(host->ps4_mac));
|
memset(host->server_mac, 0, sizeof(host->server_mac));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#define SESSION_EXPECT_TIMEOUT_MS 5000
|
#define SESSION_EXPECT_TIMEOUT_MS 5000
|
||||||
|
|
||||||
static void *session_thread_func(void *arg);
|
static void *session_thread_func(void *arg);
|
||||||
static bool session_thread_request_session(ChiakiSession *session, ChiakiTarget *target_out);
|
static ChiakiErrorCode session_thread_request_session(ChiakiSession *session, ChiakiTarget *target_out);
|
||||||
|
|
||||||
const char *chiaki_rp_application_reason_string(uint32_t reason)
|
const char *chiaki_rp_application_reason_string(uint32_t reason)
|
||||||
{
|
{
|
||||||
|
@ -369,20 +369,20 @@ static void *session_thread_func(void *arg)
|
||||||
CHIAKI_LOGI(session->log, "Starting session request");
|
CHIAKI_LOGI(session->log, "Starting session request");
|
||||||
|
|
||||||
ChiakiTarget server_target = session->connect_info.ps5 ? CHIAKI_TARGET_PS5_UNKNOWN : CHIAKI_TARGET_PS4_UNKNOWN;
|
ChiakiTarget server_target = session->connect_info.ps5 ? CHIAKI_TARGET_PS5_UNKNOWN : CHIAKI_TARGET_PS4_UNKNOWN;
|
||||||
success = session_thread_request_session(session, &server_target);
|
success = session_thread_request_session(session, &server_target) == CHIAKI_ERR_SUCCESS;
|
||||||
|
|
||||||
if(!success && chiaki_target_is_unknown(server_target))
|
if(!success && chiaki_target_is_unknown(server_target))
|
||||||
{
|
{
|
||||||
CHIAKI_LOGI(session->log, "Attempting to re-request session with Server's RP-Version");
|
CHIAKI_LOGI(session->log, "Attempting to re-request session with Server's RP-Version");
|
||||||
session->target = server_target;
|
session->target = server_target;
|
||||||
success = session_thread_request_session(session, &server_target);
|
success = session_thread_request_session(session, &server_target) == CHIAKI_ERR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!success && chiaki_target_is_unknown(server_target))
|
if(!success && chiaki_target_is_unknown(server_target))
|
||||||
{
|
{
|
||||||
CHIAKI_LOGI(session->log, "Attempting to re-request session even harder with Server's RP-Version!!!");
|
CHIAKI_LOGI(session->log, "Attempting to re-request session even harder with Server's RP-Version!!!");
|
||||||
session->target = server_target;
|
session->target = server_target;
|
||||||
success = session_thread_request_session(session, NULL);
|
success = session_thread_request_session(session, NULL) == CHIAKI_ERR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!success)
|
if(!success)
|
||||||
|
@ -569,7 +569,7 @@ static void parse_session_response(SessionResponse *response, ChiakiHttpResponse
|
||||||
/**
|
/**
|
||||||
* @param target_out if NULL, version mismatch means to fail the entire session, otherwise report the target here
|
* @param target_out if NULL, version mismatch means to fail the entire session, otherwise report the target here
|
||||||
*/
|
*/
|
||||||
static bool session_thread_request_session(ChiakiSession *session, ChiakiTarget *target_out)
|
static ChiakiErrorCode session_thread_request_session(ChiakiSession *session, ChiakiTarget *target_out)
|
||||||
{
|
{
|
||||||
chiaki_socket_t session_sock = CHIAKI_INVALID_SOCKET;
|
chiaki_socket_t session_sock = CHIAKI_INVALID_SOCKET;
|
||||||
for(struct addrinfo *ai=session->connect_info.host_addrinfos; ai; ai=ai->ai_next)
|
for(struct addrinfo *ai=session->connect_info.host_addrinfos; ai; ai=ai->ai_next)
|
||||||
|
@ -690,6 +690,12 @@ static bool session_thread_request_session(ChiakiSession *session, ChiakiTarget
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *rp_version_str = chiaki_rp_version_string(session->target);
|
const char *rp_version_str = chiaki_rp_version_string(session->target);
|
||||||
|
if(!rp_version_str)
|
||||||
|
{
|
||||||
|
CHIAKI_LOGE(session->log, "Failed to get version for target, probably invalid target value");
|
||||||
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
||||||
|
return CHIAKI_ERR_INVALID_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
char buf[512];
|
char buf[512];
|
||||||
int request_len = snprintf(buf, sizeof(buf), session_request_fmt,
|
int request_len = snprintf(buf, sizeof(buf), session_request_fmt,
|
||||||
|
@ -698,7 +704,7 @@ static bool session_thread_request_session(ChiakiSession *session, ChiakiTarget
|
||||||
{
|
{
|
||||||
CHIAKI_SOCKET_CLOSE(session_sock);
|
CHIAKI_SOCKET_CLOSE(session_sock);
|
||||||
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
||||||
return false;
|
return CHIAKI_ERR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHIAKI_LOGI(session->log, "Sending session request");
|
CHIAKI_LOGI(session->log, "Sending session request");
|
||||||
|
@ -710,7 +716,7 @@ static bool session_thread_request_session(ChiakiSession *session, ChiakiTarget
|
||||||
CHIAKI_LOGE(session->log, "Failed to send session request");
|
CHIAKI_LOGE(session->log, "Failed to send session request");
|
||||||
CHIAKI_SOCKET_CLOSE(session_sock);
|
CHIAKI_SOCKET_CLOSE(session_sock);
|
||||||
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
||||||
return false;
|
return CHIAKI_ERR_NETWORK;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t header_size;
|
size_t header_size;
|
||||||
|
@ -731,7 +737,7 @@ static bool session_thread_request_session(ChiakiSession *session, ChiakiTarget
|
||||||
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
||||||
}
|
}
|
||||||
CHIAKI_SOCKET_CLOSE(session_sock);
|
CHIAKI_SOCKET_CLOSE(session_sock);
|
||||||
return false;
|
return CHIAKI_ERR_NETWORK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChiakiHttpResponse http_response;
|
ChiakiHttpResponse http_response;
|
||||||
|
@ -743,7 +749,7 @@ static bool session_thread_request_session(ChiakiSession *session, ChiakiTarget
|
||||||
CHIAKI_LOGE(session->log, "Failed to parse session request response");
|
CHIAKI_LOGE(session->log, "Failed to parse session request response");
|
||||||
CHIAKI_SOCKET_CLOSE(session_sock);
|
CHIAKI_SOCKET_CLOSE(session_sock);
|
||||||
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
session->quit_reason = CHIAKI_QUIT_REASON_SESSION_REQUEST_UNKNOWN;
|
||||||
return false;
|
return CHIAKI_ERR_NETWORK;
|
||||||
}
|
}
|
||||||
|
|
||||||
SessionResponse response;
|
SessionResponse response;
|
||||||
|
@ -802,7 +808,7 @@ static bool session_thread_request_session(ChiakiSession *session, ChiakiTarget
|
||||||
|
|
||||||
chiaki_http_response_fini(&http_response);
|
chiaki_http_response_fini(&http_response);
|
||||||
CHIAKI_SOCKET_CLOSE(session_sock);
|
CHIAKI_SOCKET_CLOSE(session_sock);
|
||||||
return response.success;
|
return response.success ? CHIAKI_ERR_SUCCESS : CHIAKI_ERR_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHIAKI_EXPORT ChiakiErrorCode chiaki_session_goto_bed(ChiakiSession *session)
|
CHIAKI_EXPORT ChiakiErrorCode chiaki_session_goto_bed(ChiakiSession *session)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue