- Removed some old code (it's in SVN anyway)

- Added an exception catcher on the download function
This commit is contained in:
gb.luke 2010-07-08 17:28:24 +00:00
parent fbba04d759
commit 4197de03b7
2 changed files with 3 additions and 372 deletions

View File

@ -882,326 +882,17 @@ namespace NUS_Downloader
else else
wadName = WAD_Saveas_Filename; wadName = WAD_Saveas_Filename;
nusClient.DownloadTitle(titleidbox.Text, titleversion.Text, Path.Combine(CURRENT_DIR, "titles"), wadName, storeTypes);
WriteStatus("NUS Download Finished.");
/* THIS CODE WAD PRE-libWiiSharp
// Preparations for Downloading
Control.CheckForIllegalCrossThreadCalls = false; // this function would need major rewriting to get rid of this...
if (!(script_mode))
WriteStatus("Starting NUS Download. Please be patient!");
SetEnableforDownload(false);
downloadstartbtn.Text = "Starting NUS Download!";
// Creates the directory
if (!script_mode)
CreateTitleDirectory();
// Wii / DSi
bool wiimode = (consoleCBox.SelectedIndex == 0);
string activeNusUrl;
if (wiimode)
activeNusUrl = WII_NUS_URL;
else
activeNusUrl = DSI_NUS_URL;
string titleid = titleidbox.Text;
string title_v = titleversion.Text;
// WebClient configuration
WebClient nusWC = new WebClient();
nusWC = ConfigureWithProxy(nusWC);
nusWC.Headers.Add("User-Agent", "wii libnup/1.0"); // Set UserAgent to Wii value
// Create\Configure NusClient
libWiiSharp.NusClient nusClient = new libWiiSharp.NusClient();
nusClient.ConfigureNusClient(nusWC);
nusClient.UseLocalFiles = localuse.Checked;
// Get placement directory early...
string titledirectory;
if (titleversion.Text == "")
titledirectory = Path.Combine(CURRENT_DIR, titleid);
else
titledirectory = Path.Combine(CURRENT_DIR, (titleid + "v" + title_v));
if (script_mode)
titledirectory = Path.Combine(CURRENT_DIR, "output_" + Path.GetFileNameWithoutExtension(script_filename));
downloadstartbtn.Text = "Prerequisites: (0/2)";
// Windows 7? Windows 7 Taskbar progress can be used.
if (IsWin7())
dlprogress.ShowInTaskbar = true;
// Download TMD before the rest...
string tmdfull = "tmd";
if (String.IsNullOrEmpty(title_v) == false)
tmdfull += "." + title_v;
byte[] tmd;
try try
{ {
tmd = nusClient.DownloadTMD(titleid, title_v, activeNusUrl); nusClient.DownloadTitle(titleidbox.Text, titleversion.Text, Path.Combine(CURRENT_DIR, "titles"), wadName, storeTypes);
//DownloadNUSFile(titleid, tmdfull, titledirectory, 0, wiimode);
} }
catch (Exception ex) catch (Exception ex)
{ {
WriteStatus("Download Failed: " + tmdfull); WriteStatus("Uhoh, the download bombed: " + ex.Message + " ):");
WriteStatus(" - Reason: " + ex.Message.ToString().Replace("The remote server returned an error: ", ""));
SetEnableforDownload(true);
downloadstartbtn.Text = "Start NUS Download!";
dlprogress.Value = 0;
DeleteTitleDirectory();
return;
}
downloadstartbtn.Text = "Prerequisites: (1/2)";
dlprogress.Value = 50;
if (script_mode)
{
packbox.Checked = true;
packbox_CheckedChanged("scripted", new EventArgs());
keepenccontents.Checked = false;
wadnamebox.Enabled = false;
}
// Download cetk (ticket) after tmd...
//bool ticket_exists = true;
byte[] cetkbuf = new byte[0];
try
{
cetkbuf = nusClient.DownloadTicket(titleid, activeNusUrl);
//DownloadNUSFile(titleid, "cetk", titledirectory, 0, wiimode);
}
catch (Exception ex)
{
//WriteStatus("Download Failed: cetk");
WriteStatus("Ticket not found! Continuing, however WAD packing and decryption are not possible!");
WriteStatus(" - Reason: " +
ex.Message.ToString().Replace("The remote server returned an error: ", ""));
packbox.Checked = false;
decryptbox.Checked = false;
WAD_Saveas_Filename = String.Empty;
//ticket_exists = false;
}
downloadstartbtn.Text = "Prerequisites: (2/2)";
dlprogress.Value = 100;
//byte[] cetkbuf = new byte[0];
byte[] titlekey = new byte[0];
if ((cetkbuf.Length > 0) == true)
{
// Create ticket file holder
//cetkbuf = FileLocationToByteArray(Path.Combine(titledirectory, "cetk"));
// Obtain TitleKey
titlekey = new byte[16];
if (decryptbox.Checked == true)
{
// Load TitleKey into it's byte[]
// It is currently encrypted...
for (int i = 0; i < 16; i++)
{
titlekey[i] = cetkbuf[0x1BF + i];
}
// IV (TITLEID+0000s)
byte[] iv = new byte[16];
for (int i = 0; i < 8; i++)
{
iv[i] = cetkbuf[0x1DC + i];
}
for (int i = 0; i < 8; i++)
{
iv[i + 8] = 0x00;
}
// Standard/Korea Common Key
byte[] keyBytes;
if (cetkbuf[0x01F1] == 0x01)
{
WriteStatus("Key Type: Korean");
keyBytes = libWiiSharp.CommonKey.GetKoreanKey();
}
else
{
WriteStatus("Key Type: Standard");
if (wiimode)
keyBytes = libWiiSharp.CommonKey.GetStandardKey();
else
keyBytes = File.ReadAllBytes(Path.Combine(CURRENT_DIR, "dsikey.bin"));
}
initCrypt(iv, keyBytes);
WriteStatus("Title Key: " + DisplayBytes(Decrypt(titlekey), ""));
titlekey = Decrypt(titlekey);
}
}
// Read the tmd as a stream...
//byte[] tmd = FileLocationToByteArray(Path.Combine(titledirectory, tmdfull));
if ((cetkbuf.Length > 0) == true)
{
// Locate Certs **************************************
if (!(CertsValid()))
{
WriteStatus("Searching for certs...");
ScanForCerts(tmd);
ScanForCerts(cetkbuf);
}
else
WriteStatus("Using cached certs...");
// /Locate Cert **************************************
}
// Read Title Version...
if (String.IsNullOrEmpty(title_v))
{
string tmdversion = "";
for (int x = 476; x < 478; x++)
{
tmdversion += MakeProperLength(ConvertToHex(Convert.ToString(tmd[x])));
}
titleversion.Text = Convert.ToString(int.Parse(tmdversion, System.Globalization.NumberStyles.HexNumber));
title_v = tmdversion;
}
//Read System Version (Needed IOS)
string sysversion = IOSNeededFromTMD(tmd);
if (sysversion != "0")
WriteStatus("Requires: IOS" + sysversion);
// Read Content #...
string contentstrnum = "";
for (int x = 478; x < 480; x++)
{
contentstrnum += TrimLeadingZeros(Convert.ToString(tmd[x]));
}
WriteStatus("Content #: " + contentstrnum);
downloadstartbtn.Text = String.Format("Content: (0/{0})", contentstrnum);
dlprogress.Value = 0;
// Gather information...
string[] tmdcontents = GetContentNames(tmd, Convert.ToInt32(contentstrnum));
string[] tmdsizes = GetContentSizes(tmd, Convert.ToInt32(contentstrnum));
byte[] tmdhashes = GetContentHashes(tmd, Convert.ToInt32(contentstrnum));
byte[] tmdindices = GetContentIndices(tmd, Convert.ToInt32(contentstrnum));
// Progress bar total size tally info...
float totalcontentsize = 0;
float currentcontentlocation = 0;
for (int i = 0; i < tmdsizes.Length; i++)
{
totalcontentsize += int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber);
}
WriteStatus("Total Size: " + (long)totalcontentsize + " bytes");
// Write files from NUS out...
File.WriteAllBytes(Path.Combine(titledirectory, tmdfull), tmd);
File.WriteAllBytes(Path.Combine(titledirectory, "cetk"), cetkbuf);
// Download each content
for (int i = 0; i < tmdcontents.Length; i++)
{
byte[] contbuf;
try
{
// If it exists we leave it...
if ((nusClient.UseLocalFiles) && (File.Exists(Path.Combine(titledirectory, tmdcontents[i]))))
{
WriteStatus("Leaving local " + tmdcontents[i] + ".");
contbuf = File.ReadAllBytes(Path.Combine(titledirectory, tmdcontents[i]));
}
else
{
contbuf = nusClient.DownloadSingleContent(titleid, title_v, tmdcontents[i], activeNusUrl);
//DownloadNUSFile(titleid, tmdcontents[i], titledirectory,
//int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber), wiimode);
}
}
catch (Exception ex)
{
WriteStatus("Download Failed: " + tmdcontents[i]);
WriteStatus(" - Reason: " +
ex.Message.ToString().Replace("The remote server returned an error: ", ""));
SetEnableforDownload(true);
downloadstartbtn.Text = "Start NUS Download!";
dlprogress.Value = 0;
DeleteTitleDirectory();
return;
}
if (File.Exists(Path.Combine(titledirectory, tmdcontents[i])) == false)
File.WriteAllBytes(Path.Combine(titledirectory, tmdcontents[i]), contbuf);
// Progress reporting advances...
downloadstartbtn.Text = String.Format("Content: ({0} / {1})", (i + 1), contentstrnum);
currentcontentlocation += int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber);
// Decrypt stuff...
if (decryptbox.Checked == true)
{
// Create content file holder
//byte[] contbuf =
//FileLocationToByteArray(Path.Combine(titledirectory, tmdcontents[i]));
// IV (00+IDX+more000)
byte[] iv = new byte[16];
for (int x = 0; x < 16; x++)
{
iv[x] = 0x00;
}
iv[1] = tmdindices[i];
initCrypt(iv, titlekey);
FileStream decfs =
new FileStream(
Path.Combine(titledirectory, (tmdcontents[i] + ".app")),
FileMode.Create);
decfs.Write(Decrypt(contbuf), 0, int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber));
decfs.Close();
WriteStatus(" - Decrypted: " + tmdcontents[i] + ".app");
// Hash Check...
byte[] hash = new byte[20];
for (int x = 0; x < 20; x++)
{
hash[x] = tmdhashes[(i*20) + x];
}
byte[] deccont = Decrypt(contbuf);
Array.Resize(ref deccont, int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber));
if ((Convert.ToBase64String(ComputeSHA(deccont))) == Convert.ToBase64String(hash))
{
WriteStatus(" - Hash Check: Pass");
}
else
{
WriteStatus(" - Hash Check: Fail");
WriteStatus(" - True Hash: " + DisplayBytes(hash, ""));
WriteStatus(" - You Have: " + DisplayBytes(ComputeSHA(Decrypt(contbuf)), ""));
}
}
dlprogress.Value = Convert.ToInt32(((currentcontentlocation/totalcontentsize)*100));
} }
WriteStatus("NUS Download Finished."); WriteStatus("NUS Download Finished.");
if ((packbox.Checked == true) && (wiimode == true))
{
PackWAD(titleid, tmdfull, titledirectory);
} */
} }
void nusClient_Debug(object sender, libWiiSharp.MessageEventArgs e) void nusClient_Debug(object sender, libWiiSharp.MessageEventArgs e)
@ -3172,67 +2863,6 @@ namespace NUS_Downloader
return Bytes; return Bytes;
}*/ }*/
/*private void commonKeykeybinToolStripMenuItem_Click(object sender, EventArgs e)
{
BackgroundWorker keyFetcher = new BackgroundWorker();
keyFetcher.DoWork += new DoWorkEventHandler(RetrieveCommonKey);
keyFetcher.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CommonKey_Retrieved);
keyFetcher.RunWorkerAsync("key.bin");
}
private void koreanKeykkeybinToolStripMenuItem_Click(object sender, EventArgs e)
{
BackgroundWorker keyFetcher = new BackgroundWorker();
keyFetcher.DoWork += new DoWorkEventHandler(RetrieveCommonKey);
keyFetcher.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CommonKey_Retrieved);
keyFetcher.RunWorkerAsync("kkey.bin");
}
void CommonKey_Retrieved(object sender, RunWorkerCompletedEventArgs e)
{
BootChecks();
}
void RetrieveCommonKey(object sender, DoWorkEventArgs e)
{
WriteStatus(String.Format("Retrieving Key ({0})...", e.Argument.ToString()));
// Begin the epic grab for freedom
WebClient keyclient = new WebClient();
// Proxy
keyclient = ConfigureWithProxy(keyclient);
string htmlwithkey;
if (e.Argument.ToString() == "key.bin")
{
htmlwithkey = keyclient.DownloadString("http://hackmii.com/2008/04/keys-keys-keys/");
// Find our start point
string startofcommonkey = "Common key (";
htmlwithkey = htmlwithkey.Substring(
htmlwithkey.IndexOf(startofcommonkey) + startofcommonkey.Length, 32);
WriteStatus(" - Got the Common Key as: ");
WriteStatus(" " + htmlwithkey);
byte[] commonkey = HexStringToByteArray(htmlwithkey);
WriteCommonKey("key.bin", commonkey);
}
else if (e.Argument.ToString() == "kkey.bin")
{
htmlwithkey = keyclient.DownloadString("http://hackmii.com/2008/09/korean-wii/");
// Find our start point
string startofcommonkey = "those.</p>";
htmlwithkey = htmlwithkey.Substring(
htmlwithkey.IndexOf(startofcommonkey) + startofcommonkey.Length + 6, 47);
htmlwithkey = htmlwithkey.Replace(" ", "");
WriteStatus(" - Got the Korean Key as: ");
WriteStatus(" " + htmlwithkey);
byte[] commonkey = HexStringToByteArray(htmlwithkey);
WriteCommonKey("kkey.bin", commonkey);
}
}*/
string CombinePaths(params string[] parts) string CombinePaths(params string[] parts)
{ {
string result = String.Empty; string result = String.Empty;

View File

@ -310,6 +310,7 @@ namespace libWiiSharp
byte[] tmdFileWithCerts; byte[] tmdFileWithCerts;
try try
{ {
fireDebug(titleUrl + "/" + tmdFile);
tmdFileWithCerts = wcNus.DownloadData(titleUrl + tmdFile); tmdFileWithCerts = wcNus.DownloadData(titleUrl + tmdFile);
tmd = TMD.Load(tmdFileWithCerts); tmd = TMD.Load(tmdFileWithCerts);
} }