Working on Wii System Update SOAP emulation...

This commit is contained in:
givememystuffplease 2009-08-06 02:37:39 +00:00
parent 94d0178987
commit 1624f99973
3 changed files with 233 additions and 37 deletions

View File

@ -30,7 +30,7 @@
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.TMDButton = new System.Windows.Forms.Button();
this.Extrasbtn = new System.Windows.Forms.Button();
this.titleidbox = new System.Windows.Forms.TextBox();
this.downloadstartbtn = new System.Windows.Forms.Button();
this.statusbox = new System.Windows.Forms.TextBox();
@ -65,6 +65,8 @@
this.WiiWareMenuList = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.RegionCodesList = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.updateDatabaseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.truchabox = new System.Windows.Forms.CheckBox();
this.tmdgpbox = new System.Windows.Forms.GroupBox();
this.tmdversiontrucha = new System.Windows.Forms.TextBox();
@ -107,24 +109,31 @@
this.radioButton1 = new System.Windows.Forms.RadioButton();
this.radioButton2 = new System.Windows.Forms.RadioButton();
this.button17 = new System.Windows.Forms.Button();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.updateDatabaseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.extrasStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.loadInfoFromTMDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
this.emulateUpdate = new System.Windows.Forms.ToolStripMenuItem();
this.uSANTSCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.europePALToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.japanNTSCJToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.koreaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.databaseStrip.SuspendLayout();
this.tmdgpbox.SuspendLayout();
this.ticketgpbox.SuspendLayout();
this.contentModBox.SuspendLayout();
this.extrasStrip.SuspendLayout();
this.SuspendLayout();
//
// TMDButton
// Extrasbtn
//
this.TMDButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.TMDButton.Location = new System.Drawing.Point(128, 12);
this.TMDButton.Name = "TMDButton";
this.TMDButton.Size = new System.Drawing.Size(50, 20);
this.TMDButton.TabIndex = 0;
this.TMDButton.Text = "TMD...";
this.TMDButton.UseVisualStyleBackColor = true;
this.TMDButton.Click += new System.EventHandler(this.button1_Click);
this.Extrasbtn.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.Extrasbtn.Location = new System.Drawing.Point(125, 12);
this.Extrasbtn.Name = "Extrasbtn";
this.Extrasbtn.Size = new System.Drawing.Size(55, 20);
this.Extrasbtn.TabIndex = 0;
this.Extrasbtn.Text = "Extras...";
this.Extrasbtn.UseVisualStyleBackColor = true;
this.Extrasbtn.Click += new System.EventHandler(this.button1_Click);
//
// titleidbox
//
@ -218,6 +227,7 @@
// label2
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.Transparent;
this.label2.Location = new System.Drawing.Point(9, 16);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(113, 13);
@ -281,9 +291,9 @@
// databaseButton
//
this.databaseButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
this.databaseButton.Location = new System.Drawing.Point(184, 12);
this.databaseButton.Location = new System.Drawing.Point(186, 12);
this.databaseButton.Name = "databaseButton";
this.databaseButton.Size = new System.Drawing.Size(78, 20);
this.databaseButton.Size = new System.Drawing.Size(76, 20);
this.databaseButton.TabIndex = 20;
this.databaseButton.Text = "Database...";
this.databaseButton.UseVisualStyleBackColor = true;
@ -302,7 +312,7 @@
this.updateDatabaseToolStripMenuItem});
this.databaseStrip.Name = "databaseStrip";
this.databaseStrip.ShowItemToolTips = false;
this.databaseStrip.Size = new System.Drawing.Size(164, 170);
this.databaseStrip.Size = new System.Drawing.Size(164, 148);
//
// SystemMenuList
//
@ -419,6 +429,18 @@
this.RegionCodesList.Text = "Region Codes";
this.RegionCodesList.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.RegionCodesList_DropDownItemClicked);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(160, 6);
//
// updateDatabaseToolStripMenuItem
//
this.updateDatabaseToolStripMenuItem.Name = "updateDatabaseToolStripMenuItem";
this.updateDatabaseToolStripMenuItem.Size = new System.Drawing.Size(163, 22);
this.updateDatabaseToolStripMenuItem.Text = "Update Database";
this.updateDatabaseToolStripMenuItem.Click += new System.EventHandler(this.updateDatabaseToolStripMenuItem_Click);
//
// truchabox
//
this.truchabox.AutoSize = true;
@ -877,17 +899,63 @@
this.button17.UseVisualStyleBackColor = true;
this.button17.Click += new System.EventHandler(this.button17_Click);
//
// toolStripSeparator2
// extrasStrip
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(160, 6);
this.extrasStrip.AllowMerge = false;
this.extrasStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.loadInfoFromTMDToolStripMenuItem,
this.toolStripSeparator3,
this.emulateUpdate});
this.extrasStrip.Name = "extrasStrip";
this.extrasStrip.Size = new System.Drawing.Size(220, 76);
//
// updateDatabaseToolStripMenuItem
// loadInfoFromTMDToolStripMenuItem
//
this.updateDatabaseToolStripMenuItem.Name = "updateDatabaseToolStripMenuItem";
this.updateDatabaseToolStripMenuItem.Size = new System.Drawing.Size(163, 22);
this.updateDatabaseToolStripMenuItem.Text = "Update Database";
this.updateDatabaseToolStripMenuItem.Click += new System.EventHandler(this.updateDatabaseToolStripMenuItem_Click);
this.loadInfoFromTMDToolStripMenuItem.Name = "loadInfoFromTMDToolStripMenuItem";
this.loadInfoFromTMDToolStripMenuItem.Size = new System.Drawing.Size(219, 22);
this.loadInfoFromTMDToolStripMenuItem.Text = "Load Info from TMD";
this.loadInfoFromTMDToolStripMenuItem.Click += new System.EventHandler(this.loadInfoFromTMDToolStripMenuItem_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(216, 6);
//
// emulateUpdate
//
this.emulateUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.uSANTSCToolStripMenuItem,
this.europePALToolStripMenuItem,
this.japanNTSCJToolStripMenuItem,
this.koreaToolStripMenuItem});
this.emulateUpdate.Name = "emulateUpdate";
this.emulateUpdate.Size = new System.Drawing.Size(219, 22);
this.emulateUpdate.Text = "Emulate Wii System Update";
this.emulateUpdate.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.emulateUpdate_DropDownItemClicked);
//
// uSANTSCToolStripMenuItem
//
this.uSANTSCToolStripMenuItem.Name = "uSANTSCToolStripMenuItem";
this.uSANTSCToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
this.uSANTSCToolStripMenuItem.Text = "USA (NTSC)";
//
// europePALToolStripMenuItem
//
this.europePALToolStripMenuItem.Name = "europePALToolStripMenuItem";
this.europePALToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
this.europePALToolStripMenuItem.Text = "Europe (PAL)";
//
// japanNTSCJToolStripMenuItem
//
this.japanNTSCJToolStripMenuItem.Name = "japanNTSCJToolStripMenuItem";
this.japanNTSCJToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
this.japanNTSCJToolStripMenuItem.Text = "Japan (NTSC-J)";
//
// koreaToolStripMenuItem
//
this.koreaToolStripMenuItem.Name = "koreaToolStripMenuItem";
this.koreaToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
this.koreaToolStripMenuItem.Text = "Korea";
//
// Form1
//
@ -922,7 +990,7 @@
this.Controls.Add(this.statusbox);
this.Controls.Add(this.downloadstartbtn);
this.Controls.Add(this.titleidbox);
this.Controls.Add(this.TMDButton);
this.Controls.Add(this.Extrasbtn);
this.Controls.Add(this.button6);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
@ -938,6 +1006,7 @@
this.ticketgpbox.ResumeLayout(false);
this.ticketgpbox.PerformLayout();
this.contentModBox.ResumeLayout(false);
this.extrasStrip.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@ -945,7 +1014,7 @@
#endregion
private System.Windows.Forms.Button TMDButton;
private System.Windows.Forms.Button Extrasbtn;
private System.Windows.Forms.TextBox titleidbox;
private System.Windows.Forms.Button downloadstartbtn;
private System.Windows.Forms.TextBox statusbox;
@ -1024,6 +1093,14 @@
private System.Windows.Forms.Button button17;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem updateDatabaseToolStripMenuItem;
private System.Windows.Forms.ContextMenuStrip extrasStrip;
private System.Windows.Forms.ToolStripMenuItem loadInfoFromTMDToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
private System.Windows.Forms.ToolStripMenuItem emulateUpdate;
private System.Windows.Forms.ToolStripMenuItem uSANTSCToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem europePALToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem japanNTSCJToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem koreaToolStripMenuItem;
}
}

View File

@ -8,6 +8,7 @@ using System.Drawing;
using System.Text.RegularExpressions;
using System.ComponentModel;
using System.Threading;
using System.Text;
namespace NUS_Downloader
@ -17,7 +18,7 @@ namespace NUS_Downloader
const string NUSURL = "http://nus.cdn.shop.wii.com/ccs/download/";
const string DSiNUSURL = "http://nus.cdn.t.shop.nintendowifi.net/ccs/download/";
// TODO: Always remember to change version!
string version = "v1.2";
string version = "v1.3";
WebClient generalWC = new WebClient();
static RijndaelManaged rijndaelCipher;
static bool dsidecrypt = false;
@ -156,8 +157,6 @@ namespace NUS_Downloader
{
this.Text = "NUSD - " + version + " - WB3000";
this.Size = this.MinimumSize;
}
private bool BootChecks()
@ -235,8 +234,8 @@ namespace NUS_Downloader
{
WriteStatus("Database.xml not found. Title database not usable!");
databaseButton.Visible = false;
TMDButton.Size = new System.Drawing.Size(134, 20);
TMDButton.Anchor = AnchorStyles.Right;
Extrasbtn.Size = new System.Drawing.Size(134, 20);
Extrasbtn.Anchor = AnchorStyles.Right;
}
else
{
@ -268,6 +267,12 @@ namespace NUS_Downloader
}
private void button1_Click(object sender, EventArgs e)
{
// Show extras menu
extrasStrip.Show(Extrasbtn, 2, 2);
}
private void LoadTitleFromTMD()
{
// Show dialog for opening TMD file...
OpenFileDialog opentmd = new OpenFileDialog();
@ -324,7 +329,7 @@ namespace NUS_Downloader
byte[] hash = new byte[20];
for (int x = 0; x < 20; x++)
{
hash[x] = tmdhashes[(i*20)+x];
hash[x] = tmdhashes[(i * 20) + x];
}
WriteStatus(" - Hash: " + DisplayBytes(hash, "").Substring(0, 8) + "...");
WriteStatus(" - Index: " + tmdindices[i]);
@ -2207,7 +2212,7 @@ namespace NUS_Downloader
downloadstartbtn.Enabled = enabled;
titleidbox.Enabled = enabled;
titleversion.Enabled = enabled;
TMDButton.Enabled = enabled;
Extrasbtn.Enabled = enabled;
databaseButton.Enabled = enabled;
packbox.Enabled = enabled;
localuse.Enabled = enabled;
@ -3167,7 +3172,9 @@ namespace NUS_Downloader
{
// Retrieve Wiibrew database page source code
WebClient databasedl = new WebClient();
statusbox.Refresh();
string wiibrewsource = databasedl.DownloadString("http://www.wiibrew.org/wiki/NUS_Downloader/database");
statusbox.Refresh();
// Strip out HTML
wiibrewsource = Regex.Replace(wiibrewsource, @"<(.|\n)*?>", "");
@ -3178,11 +3185,11 @@ namespace NUS_Downloader
wiibrewsource = wiibrewsource.Substring(wiibrewsource.IndexOf(startofdatabase), wiibrewsource.Length - wiibrewsource.IndexOf(startofdatabase));
wiibrewsource = wiibrewsource.Substring(0, wiibrewsource.IndexOf(endofdatabase) + endofdatabase.Length);
// Fix ", <, and >
// Fix ", <, >, and spaces
wiibrewsource = wiibrewsource.Replace("&lt;","<");
wiibrewsource = wiibrewsource.Replace("&gt;",">");
wiibrewsource = wiibrewsource.Replace("&quot;",'"'.ToString());
wiibrewsource = wiibrewsource.Replace("&nbsp;", ""); // Shouldn't occur, but they happen...
wiibrewsource = wiibrewsource.Replace("&nbsp;", " "); // Shouldn't occur, but they happen...
// Return parsed xml database...
return wiibrewsource;
@ -3192,13 +3199,13 @@ namespace NUS_Downloader
{
statusbox.Text = "";
WriteStatus("Updating your database.xml from Wiibrew.org");
WriteStatus(" - Database successfully parsed!");
string database = RetrieveNewDatabase();
string currentversion = GetDatabaseVersion("database.xml");
string onlineversion = GetDatabaseVersion(database);
WriteStatus(" - Current Database Version: " + currentversion);
WriteStatus(" - Online Database Version: " + onlineversion);
WriteStatus(" - Database successfully parsed!");
WriteStatus(" - Current Database Version: " + currentversion);
WriteStatus(" - Online Database Version: " + onlineversion);
if (currentversion == onlineversion)
{
@ -3216,5 +3223,114 @@ namespace NUS_Downloader
WriteStatus("Database successfully updated!");
}
private void loadInfoFromTMDToolStripMenuItem_Click(object sender, EventArgs e)
{
// Extras menu -> Load TMD...
LoadTitleFromTMD();
}
public string SendSOAPRequest(string soap_xml)
{
System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("http://nus.shop.wii.com:80/nus/services/NetUpdateSOAP");
req.Method = "POST";
req.UserAgent = "wii libnup/1.0";
req.Headers.Add("SOAPAction", '"' + "urn:nus.wsapi.broadon.com/" + '"');
Stream writeStream = req.GetRequestStream();
UTF8Encoding encoding = new UTF8Encoding();
byte[] bytes = encoding.GetBytes(soap_xml);
req.ContentType = "text/xml; charset=utf-8";
//req.ContentLength = bytes.Length;
writeStream.Write(bytes, 0, bytes.Length);
writeStream.Close();
Application.DoEvents();
try
{
string result;
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse();
using (Stream responseStream = resp.GetResponseStream())
{
using (StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8))
{
result = readStream.ReadToEnd();
}
}
req.Abort();
Application.DoEvents();
return result;
}
catch (Exception ex)
{
req.Abort();
return ex.Message.ToString();
}
}
private void emulateUpdate_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
// Begin Wii System Update
WriteStatus("Starting Wii System Update...");
extrasStrip.Close();
string deviceID = "4362227770";
string messageID = "13198105123219138";
string attr = "2";
string RegionID = "USA";
string CountryCode = "US";
// TODO: Specific region/ccodes
string soap_req = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"" +
" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
"<soapenv:Body>\n<GetSystemUpdateRequest xmlns=\"urn:nus.wsapi.broadon.com\">\n" +
"<Version>1.0</Version>\n<MessageId>" + messageID + "</MessageId>\n<DeviceId>" + deviceID + "</DeviceId>\n" +
"<RegionId>" + RegionID + "</RegionId>\n<CountryCode>" + CountryCode + "</CountryCode>\n<TitleVersion>\n<TitleId>0000000100000001</TitleId>\n" +
"<Version>2</Version>\n</TitleVersion>\n<TitleVersion>\n<TitleId>0000000100000002</TitleId>\n" +
"<Version>33</Version>\n</TitleVersion>\n<TitleVersion>\n<TitleId>0000000100000009</TitleId>\n" +
"<Version>516</Version>\n</TitleVersion>\n<Attribute>" + attr + "</Attribute>\n<AuditData></AuditData>\n" +
"</GetSystemUpdateRequest>\n</soapenv:Body>\n</soapenv:Envelope>";
WriteStatus(" - Sending SOAP Request to NUS...");
string update_xml = SendSOAPRequest(soap_req);
if (update_xml != null)
WriteStatus(" - Recieved Update Info!");
else
{
WriteStatus(" - Fail.");
return;
}
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(update_xml);
XmlNodeList TitleList = xDoc.GetElementsByTagName("TitleVersion");
for (int a = 0; a < TitleList.Count; a++)
{
XmlNodeList TitleInfo = TitleList[a].ChildNodes;
string TitleID = "";
string Version = "";
for (int b = 0; b < TitleInfo.Count; b++)
{
switch (TitleInfo[b].Name)
{
case "TitleId":
TitleID = TitleInfo[b].InnerText;
break;
case "Version":
Version = TitleInfo[b].InnerText;
break;
default:
break;
}
}
WriteStatus(String.Format("{0}v{1}", TitleID, Version));
}
}
}
}

View File

@ -330,6 +330,9 @@
1sV/DvoUn9RT8j8FdlkrvvDH+0eqk6iKjzT6K8x9ib8G3pPIf5i62eYpA0TWAAAAAElFTkSuQmCC
</value>
</data>
<metadata name="extrasStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>285, 17</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAUAEBAAAAAAIABoBAAAVgAAACAgAAAAACAAqBAAAL4EAAAwMAAAAAAgAKglAABmFQAAQEAAAAAA