mirror of
https://github.com/tihmstar/futurerestore.git
synced 2025-04-22 14:46:19 +00:00
Opa fixes (#8)
* Fix --exit-recovery, improve message that gets printed * Fix latest flags for models that have multiple boardconfigs (iPhone SE, iPhone 6S...) * Fix windows compilation (again...)
This commit is contained in:
parent
38a3c0888a
commit
0ab9df3209
|
@ -163,11 +163,13 @@ void futurerestore::setAutoboot(bool val){
|
|||
retassure(_didInit, "did not init\n");
|
||||
|
||||
retassure(getDeviceMode(false) == MODE_RECOVERY, "can't set auto-boot, when device isn't in recovery mode\n");
|
||||
retassure(!_client->recovery && recovery_client_new(_client),"Could not connect to device in recovery mode.\n");
|
||||
if(!_client->recovery){
|
||||
retassure(!recovery_client_new(_client),"Could not connect to device in recovery mode.\n");
|
||||
}
|
||||
retassure(!recovery_set_autoboot(_client, val),"Setting auto-boot failed?!\n");
|
||||
}
|
||||
|
||||
void futurerestore::exitRecovery() {
|
||||
void futurerestore::exitRecovery(){
|
||||
setAutoboot(true);
|
||||
recovery_send_reset(_client);
|
||||
recovery_client_free(_client);
|
||||
|
@ -1321,7 +1323,7 @@ static void zip_directory(const std::string& inputdir, const std::string& output
|
|||
|
||||
void futurerestore::downloadLatestRose(){
|
||||
char * manifeststr = getLatestManifest();
|
||||
char *roseStr = (elemExists("Rap,RTKitOS", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Rap,RTKitOS", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *roseStr = (elemExists("Rap,RTKitOS", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Rap,RTKitOS", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
if(roseStr) {
|
||||
info("downloading Rose firmware\n\n");
|
||||
char roseStr1[PATH_MAX];
|
||||
|
@ -1339,7 +1341,7 @@ void futurerestore::downloadLatestRose(){
|
|||
|
||||
void futurerestore::downloadLatestSE(){
|
||||
char * manifeststr = getLatestManifest();
|
||||
char *seStr = (elemExists("SE,UpdatePayload", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("SE,UpdatePayload", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *seStr = (elemExists("SE,UpdatePayload", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("SE,UpdatePayload", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
if(seStr) {
|
||||
info("downloading SE firmware\n\n");
|
||||
char seStr1[PATH_MAX];
|
||||
|
@ -1357,16 +1359,16 @@ void futurerestore::downloadLatestSE(){
|
|||
|
||||
void futurerestore::downloadLatestSavage(){
|
||||
char * manifeststr = getLatestManifest();
|
||||
char *savageB0DevStr = (elemExists("Savage,B0-Dev-Patch", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,B0-Dev-Patch", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageB0DevVTStr = (elemExists("Savage,B0-Dev-PatchVT", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,B0-Dev-PatchVT", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageB0ProdStr = (elemExists("Savage,B0-Prod-Patch", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,B0-Prod-Patch", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageB0ProdVTStr = (elemExists("Savage,B0-Prod-PatchVT", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,B0-Prod-PatchVT", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageB2DevStr = (elemExists("Savage,B2-Dev-Patch", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,B2-Dev-Patch", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageB2DevVTStr = (elemExists("Savage,B2-Dev-PatchVT", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,B2-Dev-PatchVT", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageB2ProdStr = (elemExists("Savage,B2-Prod-Patch", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,B2-Prod-Patch", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageB2ProdVTStr = (elemExists("Savage,B2-Prod-PatchVT", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,B2-Prod-PatchVT", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageBADevStr = (elemExists("Savage,BA-Dev-Patch", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,BA-Dev-Patch", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageBAProdStr = (elemExists("Savage,BA-Prod-Patch", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("Savage,BA-Prod-Patch", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *savageB0DevStr = (elemExists("Savage,B0-Dev-Patch", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,B0-Dev-Patch", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageB0DevVTStr = (elemExists("Savage,B0-Dev-PatchVT", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,B0-Dev-PatchVT", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageB0ProdStr = (elemExists("Savage,B0-Prod-Patch", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,B0-Prod-Patch", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageB0ProdVTStr = (elemExists("Savage,B0-Prod-PatchVT", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,B0-Prod-PatchVT", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageB2DevStr = (elemExists("Savage,B2-Dev-Patch", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,B2-Dev-Patch", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageB2DevVTStr = (elemExists("Savage,B2-Dev-PatchVT", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,B2-Dev-PatchVT", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageB2ProdStr = (elemExists("Savage,B2-Prod-Patch", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,B2-Prod-Patch", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageB2ProdVTStr = (elemExists("Savage,B2-Prod-PatchVT", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,B2-Prod-PatchVT", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageBADevStr = (elemExists("Savage,BA-Dev-Patch", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,BA-Dev-Patch", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *savageBAProdStr = (elemExists("Savage,BA-Prod-Patch", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("Savage,BA-Prod-Patch", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
if(savageB0DevStr) {
|
||||
info("downloading Savage,B0-Dev-Patch\n\n");
|
||||
char savageB0DevStr1[PATH_MAX];
|
||||
|
@ -1501,8 +1503,8 @@ void futurerestore::downloadLatestSavage(){
|
|||
|
||||
void futurerestore::downloadLatestVeridian(){
|
||||
char * manifeststr = getLatestManifest();
|
||||
char *veridianStr = (elemExists("BMU,DigestMap", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("BMU,DigestMap", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *veridianFWMStr = (elemExists("BMU,FirmwareMap", manifeststr, getDeviceModelNoCopy(), 0) ? getPathOfElementInManifest("BMU,FirmwareMap", manifeststr, getDeviceModelNoCopy(), 0) : NULL);
|
||||
char *veridianStr = (elemExists("BMU,DigestMap", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("BMU,DigestMap", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
char *veridianFWMStr = (elemExists("BMU,FirmwareMap", manifeststr, getDeviceBoardNoCopy(), 0) ? getPathOfElementInManifest("BMU,FirmwareMap", manifeststr, getDeviceBoardNoCopy(), 0) : NULL);
|
||||
if(veridianStr) {
|
||||
info("downloading Veridian DigestMap\n\n");
|
||||
char veridianStr1[PATH_MAX];
|
||||
|
@ -1555,7 +1557,7 @@ void futurerestore::downloadLatestFirmwareComponents(){
|
|||
|
||||
void futurerestore::loadLatestBaseband(){
|
||||
char * manifeststr = getLatestManifest();
|
||||
char *pathStr = getPathOfElementInManifest("BasebandFirmware", manifeststr, getDeviceModelNoCopy(), 0);
|
||||
char *pathStr = getPathOfElementInManifest("BasebandFirmware", manifeststr, getDeviceBoardNoCopy(), 0);
|
||||
info("downloading Baseband\n\n");
|
||||
retassure(!downloadPartialzip(getLatestFirmwareUrl(), pathStr, _basebandPath = BASEBAND_TMP_PATH), "could not download baseband\n");
|
||||
saveStringToFile(manifeststr, BASEBAND_MANIFEST_TMP_PATH);
|
||||
|
@ -1565,7 +1567,7 @@ void futurerestore::loadLatestBaseband(){
|
|||
|
||||
void futurerestore::loadLatestSep(){
|
||||
char * manifeststr = getLatestManifest();
|
||||
char *pathStr = getPathOfElementInManifest("SEP", manifeststr, getDeviceModelNoCopy(), 0);
|
||||
char *pathStr = getPathOfElementInManifest("SEP", manifeststr, getDeviceBoardNoCopy(), 0);
|
||||
info("downloading SEP\n\n");
|
||||
retassure(!downloadPartialzip(getLatestFirmwareUrl(), pathStr, SEP_TMP_PATH), "could not download SEP\n");
|
||||
loadSep(SEP_TMP_PATH);
|
||||
|
@ -1722,13 +1724,13 @@ plist_t futurerestore::loadPlistFromFile(const char *path){
|
|||
return ret;
|
||||
}
|
||||
|
||||
char *futurerestore::getPathOfElementInManifest(const char *element, const char *manifeststr, const char *model, int isUpdateInstall){
|
||||
char *futurerestore::getPathOfElementInManifest(const char *element, const char *manifeststr, const char *boardConfig, int isUpdateInstall){
|
||||
char *pathStr = NULL;
|
||||
ptr_smart<plist_t> buildmanifest(NULL,plist_free);
|
||||
|
||||
plist_from_xml(manifeststr, (uint32_t)strlen(manifeststr), &buildmanifest);
|
||||
|
||||
if (plist_t identity = getBuildidentity(buildmanifest._p, model, isUpdateInstall))
|
||||
if (plist_t identity = getBuildidentityWithBoardconfig(buildmanifest._p, boardConfig, isUpdateInstall))
|
||||
if (plist_t manifest = plist_dict_get_item(identity, "Manifest"))
|
||||
if (plist_t elem = plist_dict_get_item(manifest, element))
|
||||
if (plist_t info = plist_dict_get_item(elem, "Info"))
|
||||
|
@ -1741,13 +1743,13 @@ noerror:
|
|||
return pathStr;
|
||||
}
|
||||
|
||||
bool futurerestore::elemExists(const char *element, const char *manifeststr, const char *model, int isUpdateInstall){
|
||||
bool futurerestore::elemExists(const char *element, const char *manifeststr, const char *boardConfig, int isUpdateInstall){
|
||||
char *pathStr = NULL;
|
||||
ptr_smart<plist_t> buildmanifest(NULL,plist_free);
|
||||
|
||||
plist_from_xml(manifeststr, (uint32_t)strlen(manifeststr), &buildmanifest);
|
||||
|
||||
if (plist_t identity = getBuildidentity(buildmanifest._p, model, isUpdateInstall))
|
||||
if (plist_t identity = getBuildidentityWithBoardconfig(buildmanifest._p, boardConfig, isUpdateInstall))
|
||||
if (plist_t manifest = plist_dict_get_item(identity, "Manifest"))
|
||||
if (plist_t elem = plist_dict_get_item(manifest, element))
|
||||
if (plist_t info = plist_dict_get_item(elem, "Info"))
|
||||
|
|
|
@ -128,8 +128,8 @@ public:
|
|||
static uint64_t getEcidFromSCAB(const char* scab, size_t scabSize);
|
||||
static plist_t loadPlistFromFile(const char *path);
|
||||
static void saveStringToFile(const char *str, const char *path);
|
||||
static char *getPathOfElementInManifest(const char *element, const char *manifeststr, const char *model, int isUpdateInstall);
|
||||
bool elemExists(const char *element, const char *manifeststr, const char *model, int isUpdateInstall);
|
||||
static char *getPathOfElementInManifest(const char *element, const char *manifeststr, const char *boardConfig, int isUpdateInstall);
|
||||
bool elemExists(const char *element, const char *manifeststr, const char *boardConfig, int isUpdateInstall);
|
||||
static std::string getGeneratorFromSHSH2(const plist_t shsh2);
|
||||
};
|
||||
|
||||
|
|
|
@ -195,7 +195,7 @@ int main_r(int argc, const char * argv[]) {
|
|||
}else if (argc == optind && flags & FLAG_WAIT) {
|
||||
info("User requested to only wait for ApNonce to match, but not for actually restoring\n");
|
||||
}else if (exitRecovery){
|
||||
info("Exiting to recovery mode\n");
|
||||
info("Exiting from recovery mode to normal mode\n");
|
||||
}else{
|
||||
error("argument parsing failed! agrc=%d optind=%d\n",argc,optind);
|
||||
if (idevicerestore_debug){
|
||||
|
|
Loading…
Reference in a new issue