Inject version info into embedded xml and ignore local xml file by default.

Added check for 3.60 update pup.
This commit is contained in:
codestation
2016-10-23 11:56:54 -04:00
parent 4d1249bf08
commit 5a9dc39396
7 changed files with 3809 additions and 306 deletions

View File

@@ -21,6 +21,7 @@
#include "cmautils.h"
#include <locale.h>
#include <QCryptographicHash>
#include <QDateTime>
#include <QDebug>
#include <QDir>
@@ -31,6 +32,8 @@
QFile *CmaEvent::m_file = NULL;
const QString hash360 = "8cc2e2666626c4ff8f582bf209473526e825e2a5e38e39b259a8a46e25ef371c";
static metadata_t g_thumbmeta = {0, 0, 0, NULL, NULL, 0, 0, 0, Thumbnail, {{17, 240, 136, 0, 1, 1.0f, 2}}, NULL};
CmaEvent::CmaEvent(Database *db, vita_device_t *s_device) :
@@ -533,11 +536,17 @@ void CmaEvent::vitaEventSendHttpObjectFromURL(vita_event_t *cma_event, int event
QSettings settings;
bool offlineMode = settings.value("offlineMode", true).toBool();
bool ignorexml = settings.value("ignorexml", true).toBool();
bool ignorefile = false;
if(!file.open(QIODevice::ReadOnly)) {
// do not try to open the xml file if the flag is set
if(basename == "psp2-updatelist.xml" && ignorexml) {
ignorefile = true;
}
if(ignorefile || !file.open(QIODevice::ReadOnly)) {
if(offlineMode && basename == "psp2-updatelist.xml") {
qDebug("Found request for update list. Sending cached data");
messageSent(tr("The PSVita has requested an update check, sending embedded xml file (version 0.00)"));
qDebug("Found request for update list. Sending embedded xml file");
QFile res(":/main/resources/xml/psp2-updatelist.xml");
res.open(QIODevice::ReadOnly);
data = res.readAll();
@@ -555,6 +564,22 @@ void CmaEvent::vitaEventSendHttpObjectFromURL(vita_event_t *cma_event, int event
data.replace("<region id=\"us\">", qPrintable(regionTag));
}
QString versiontype = settings.value("versiontype", "zero").toString();
if(versiontype == "henkaku") {
qDebug("Setting XML version to 03.600.000");
data.replace("00.000.000", "03.600.000");
data.replace("label=\"0.00\"", "label=\"3.60\"");
} else if(versiontype == "custom") {
QString customVersion = settings.value("customversion", "00.000.000").toString();
QString customLabel = QString("label=\"%1\"").arg(customVersion.mid(1, 4));
qDebug("Setting XML version to %s", qPrintable(customVersion));
data.replace("00.000.000", qPrintable(customVersion));
data.replace("label=\"0.00\"", qPrintable(customLabel));
} else {
qDebug("Using default XML version: 00.000.000");
}
} else {
qWarning() << "No country code found in URL, defaulting to \"us\"";
}
@@ -595,8 +620,32 @@ void CmaEvent::vitaEventSendHttpObjectFromURL(vita_event_t *cma_event, int event
}
} else {
qDebug("Reading from local file");
messageSent(tr("The PSVita has requested an update check, sending local xml file"));
data = file.readAll();
if(basename == "psp2-updatelist.xml" && !ignorefile) {
messageSent(tr("The PSVita has requested an update check, sending local xml file and ignoring version settings"));
} else {
QString versiontype = settings.value("versiontype", "zero").toString();
QString customVersion = settings.value("customversion", "00.000.000").toString();
// verify that the update file is really the 3.60 pup
if(ignorexml && basename == "PSP2UPDAT.PUP" &&
(versiontype == "henkaku" ||
(versiontype == "custom" &&
customVersion == "03.600.000"))) {
QCryptographicHash crypto(QCryptographicHash::Sha256);
crypto.addData(data);
QString result = crypto.result().toHex();
if(result != hash360) {
qWarning("3.60 PUP SHA256 mismatch");
qWarning("> Actual: %s", qPrintable(result));
qWarning("> Expected: %s", qPrintable(hash360));
// notify the user
messageSent(tr("The XML version is set to 3.60 but the PUP file hash doesn't match, cancel the update if you don't want this"));
}
}
}
}
qDebug("Sending %i bytes of data for HTTP request %s", data.size(), url);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -64,6 +64,7 @@ void ConfigWidget::connectSignals()
connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
connect(ui->protocolModeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(protocolModeChanged(int)));
connect(ui->psversionBox, SIGNAL(currentIndexChanged(int)), this, SLOT(versionModeChanged(int)));
}
void ConfigWidget::protocolModeChanged(int index)
@@ -87,7 +88,25 @@ void ConfigWidget::protocolModeChanged(int index)
ui->protocolEdit->setEnabled(false);
break;
}
}
void ConfigWidget::versionModeChanged(int index)
{
switch(index)
{
case 0:
ui->psversionEdit->setEnabled(false);
break;
case 1:
ui->psversionEdit->setEnabled(false);
break;
case 2:
ui->psversionEdit->setEnabled(true);
break;
default:
ui->psversionEdit->setEnabled(false);
break;
}
}
void ConfigWidget::setDefaultData()
@@ -151,6 +170,23 @@ void ConfigWidget::setDefaultData()
ui->protocolEdit->setText(QString::number(protocol_version));
else
ui->protocolEdit->setText(QString::number(VITAMTP_PROTOCOL_MAX_VERSION));
bool ignorexml = settings.value("ignorexml", true).toBool();
ui->ignorexmlCheck->setChecked(ignorexml);
QString versiontype = settings.value("versiontype", "zero").toString();
QString customVersion = settings.value("customversion", "00.000.000").toString();
if(versiontype == "custom")
ui->psversionBox->setCurrentIndex(2);
else if(versiontype == "henkaku")
ui->psversionBox->setCurrentIndex(1);
else
ui->psversionBox->setCurrentIndex(0);
versionModeChanged(ui->psversionBox->currentIndex());
ui->psversionEdit->setText(customVersion);
}
ConfigWidget::~ConfigWidget()
@@ -241,6 +277,17 @@ void ConfigWidget::accept()
else if(ui->protocolModeBox->currentIndex() == 2)
settings.setValue("protocolMode", "custom");
if(ui->psversionBox->currentIndex() == 0)
settings.setValue("versiontype", "zero");
else if(ui->psversionBox->currentIndex() == 1)
settings.setValue("versiontype", "henkaku");
else if(ui->psversionBox->currentIndex() == 2)
settings.setValue("versiontype", "custom");
settings.setValue("ignorexml", ui->ignorexmlCheck->isChecked());
settings.setValue("customversion", ui->psversionEdit->text());
bool ok;
int protocol = ui->protocolEdit->text().toInt(&ok);

View File

@@ -48,6 +48,7 @@ private:
private slots:
void protocolModeChanged(int index);
void versionModeChanged(int index);
void browseBtnPressed(int from);
void accept();
};

View File

@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>519</width>
<height>525</height>
<height>559</height>
</rect>
</property>
<property name="windowTitle">
@@ -305,16 +305,6 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_3">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Update database automatically when files on the PC are changed</string>
</property>
</widget>
</item>
<item>
<layout class="QFormLayout" name="formLayout">
<property name="fieldGrowthPolicy">
@@ -367,6 +357,16 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="ignorexmlCheck">
<property name="text">
<string>Ignore local file psp2-updatelist.xml on update folder</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4"/>
</item>
@@ -375,6 +375,32 @@
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>CMA protocol selection</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="protocolModeBox">
<item>
<property name="text">
<string>Latest</string>
</property>
</item>
<item>
<property name="text">
<string>Manual</string>
</property>
</item>
<item>
<property name="text">
<string>Custom</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
@@ -445,6 +471,13 @@
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>CMA custom version</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="protocolEdit">
<property name="inputMask">
@@ -455,23 +488,37 @@
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_11">
<item row="4" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>CMA protocol selection</string>
<string>Custom PS Vita version</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="protocolModeBox">
<item row="4" column="1">
<widget class="QLineEdit" name="psversionEdit">
<property name="text">
<string notr="true">03.600.000</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Use this version for updates</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="psversionBox">
<item>
<property name="text">
<string>Latest</string>
<string>FW 0.00 (Always up-to-date)</string>
</property>
</item>
<item>
<property name="text">
<string>Manual</string>
<string>FW 3.60 (HENkaku)</string>
</property>
</item>
<item>
@@ -481,13 +528,6 @@
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>CMA custom version</string>
</property>
</widget>
</item>
</layout>
</item>
<item>