int recovery_filecopytophone(string *args, struct shell_state *sh) { CFStringRef file = CFStringCreateWithCString(NULL, args[1].c_str(), kCFStringEncodingMacRoman); mach_error_t retval = sendFileToDevice( sh->recovery_dev, file ); CFRelease(file); ifNotQuiet cout << "filecopytophone: " << retval << endl; //cout << "filecopytophone: " << filecopytophone(sh->recovery_dev, cline.c_str(), 0x09000000) << " bytes copied" << endl; return SHELL_CONTINUE; }
void recovery_connect_callback(am_recovery_device *rdev) { Status = RecoveryConnected; XLOG(3, "device connected in recovery mode"); if(Stage == 2) { fprintf(stdout, "Sorry, but you did not follow the instructions correctly. Please try again.\n"); cleanup_and_exit(); } else if(Stage != 3) { return; } XLOG(3, "sendCommandToDevice(setenv auto-boot) returned: %d", sendCommandToDevice(rdev, CFSTR("setenv auto-boot true"), 0)); XLOG(3, "sendCommandToDevice(saveenv) returned: %d", sendCommandToDevice(rdev, CFSTR("saveenv"), 0)); XLOG(3, "sendCommandToDevice(setenv idle-off) returned: %d", sendCommandToDevice(rdev, CFSTR("setenv idle-off false"), 0)); XLOG(3, "sendFileToDevice(bootimage) returned: %d", sendFileToDevice(rdev, CFStringCreateWithCString(NULL, bootImagePath, kCFStringEncodingASCII))); XLOG(3, "sendCommandToDevice(setpicture) returned: %d", sendCommandToDevice(rdev, CFSTR("setpicture 0"), 0)); XLOG(3, "sendCommandToDevice(bgcolor) returned: %d", sendCommandToDevice(rdev, CFSTR("bgcolor 0 0 0"), 0)); fprintf(stdout, "Please use iTunes to restore your iPhone/iPod with a custom IPSW now. You may now let go of the home button.\n"); fflush(stdout); cleanup_and_exit(); }
int recovery_grestore(string *args, struct shell_state *sh) { int ret; if (args[1] == "") { ifNotQuiet cout << "args[1] must be RestoreBundlePath" << endl; return SHELL_CONTINUE; } // check for trailing / if ( args[1].at(args[1].length() - 1) != '/' ) args[1] = args[1] + '/'; // firmware 1.0 // string temp = args[1] + "694-5259-38.dmg"; // firmware 1.0.1 // string temp = args[1] + "009-7662-6.dmg"; // firmware 1.0.2 string temp = args[1] + "009-7698-4.dmg"; // firmware 1.1.1? // string temp = args[1] + "022-3629-9.dmg"; ifNotQuiet cout << "Entering G-Restore ... " << endl; // Send ramdisk to the phone ifVerbose cout << "Sending ramdisk '"<< temp << "'" << endl; CFStringRef ramdisk = CFStringCreateWithCString(kCFAllocatorDefault, temp.c_str(), kCFStringEncodingMacRoman); ret = sendFileToDevice(sh->recovery_dev, ramdisk); CFRelease(ramdisk); ifVerbose cout << "sendFileToDevice: " << ret << endl; if (ret != 0) { ifNotQuiet cout << "Send ramdisk failed. Aborting." << endl; return SHELL_CONTINUE; } // load ramdisk on the phone ifVerbose cout << "Loading ramdisk." << endl; ret = sendCommandToDevice(sh->recovery_dev, CFSTR("ramdisk")); ifVerbose cout << "sendCommandToDevice 'ramdisk': " << ret << endl; if (ret != 0) { ifNotQuiet cout << "Load ramdisk failed. Aborting." << endl; return SHELL_CONTINUE; } // firmware 1.0 // temp = args[1] + "kernelcache.restore.release.s5l8900xrb"; // firmware 1.0.1, 1.0.2, 1.1.1 temp = args[1]+ "kernelcache.release.s5l8900xrb"; // Send the kernelcache ifVerbose cout << "Sending kernelcache '"<< temp << "'" << endl; CFStringRef kerncache = CFStringCreateWithCString(kCFAllocatorDefault, temp.c_str(), kCFStringEncodingMacRoman); ret = sendFileToDevice(sh->recovery_dev, kerncache); CFRelease(kerncache); ifVerbose cout << "sendFileToDevice: " << ret << endl; if (ret != 0) { ifNotQuiet cout << "Send kernelcache failed. Aborting." << endl; return SHELL_CONTINUE; } //check for custom bootargs if( args[2] != "" ) D("grestore does not yet except custom bootargs."); ifVerbose cout << "Setting bootargs: setenv boot-args rd=md0 -v" << endl; ret = sendCommandToDevice(sh->recovery_dev, CFSTR("setenv boot-args rd=md0 -v")); ifVerbose cout << "sendCommandToDevice: " << ret << endl; if (ret != 0) { ifNotQuiet cout << "Setevn command failed. Aborting." << endl; return SHELL_CONTINUE; } ifVerbose cout << "Loading kernelcache (command: bootx)" << endl; ret = sendCommandToDevice(sh->recovery_dev, CFSTR("bootx")); ifVerbose cout << "sendCommandToDevice: " << ret << endl; if (ret != 0) { ifNotQuiet cout << "failed (" << ret << ") Aborting." << endl; return SHELL_CONTINUE; } ifNotQuiet cout << "G-Restore Completed. \nExit iPHUC or reconnect in order to continue in restore mode." << endl; return SHELL_CONTINUE; }