示例#1
0
        public static void NUS(string[] args, bool SecondRun)
        {
            if (args.Length < 2)
            {
                NUS_help();
                return;
            }
            if (args[1].ToUpper() == "-H" || args[1].ToUpper() == "-HELP")
            {
                NUS_help();
                return;
            }

            //Set up variables
            string           id      = "";
            string           content = "";
            string           version = "";
            int              intver  = -1;
            string           output  = "";
            bool             local   = false;
            List <StoreType> store   = new List <StoreType>();
            bool             entered = false;
            bool             wad     = false;
            bool             NoOut   = false;
            string           ios     = "";
            string           temp    = Path.GetTempPath() + "Sharpii.tmp";
            bool             ContinueWithoutTicket = false;

            //Remove need for CETK
            if (SecondRun == true)
            {
                ContinueWithoutTicket = true;
            }

            //Get arguments
            for (int i = 1; i < args.Length; i++)
            {
                switch (args[i].ToUpper())
                {
                case "-ALL":
                    store.Add(StoreType.All);
                    entered = true;
                    break;

                case "-WAD":
                    store.Add(StoreType.WAD);
                    entered = true;
                    break;

                case "-ENCRYPT":
                    store.Add(StoreType.EncryptedContent);
                    entered = true;
                    break;

                case "-ENCRYPTED":
                    store.Add(StoreType.EncryptedContent);
                    entered = true;
                    break;

                case "-DECRYPT":
                    store.Add(StoreType.DecryptedContent);
                    entered = true;
                    break;

                case "-DECRYPTED":
                    store.Add(StoreType.DecryptedContent);
                    entered = true;
                    break;

                case "-LOCAL":
                    local = true;
                    break;

                case "-V":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No version set");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_VERSION");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8B);
                        }
                        else
                        {
                            Environment.Exit(0x0000000D);
                        }
                        return;
                    }
                    version = args[i + 1];
                    if (version.ToUpper() == "LATEST")
                    {
                        break;
                    }
                    if (!int.TryParse(version, out intver))
                    {
                        Console.WriteLine("Invalid version {0}...", args[i + 1]);
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_INVALID_VERSION");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8C);
                        }
                        else
                        {
                            Environment.Exit(0x0000000E);
                        }
                        return;
                    }
                    if (intver < 0 || intver > 65535)
                    {
                        Console.WriteLine("Invalid version {0}...", version);
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_INVALID_VERSION");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8C);
                        }
                        else
                        {
                            Environment.Exit(0x0000000E);
                        }
                        return;
                    }
                    break;

                case "-VERSION":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No version set");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_VERSION");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8B);
                        }
                        else
                        {
                            Environment.Exit(0x0000000D);
                        }
                        return;
                    }
                    version = args[i + 1];
                    if (version.ToUpper() == "LATEST")
                    {
                        break;
                    }
                    if (!int.TryParse(version, out intver))
                    {
                        Console.WriteLine("Invalid version {0}...", args[i + 1]);
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_INVALID_VERSION");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8C);
                        }
                        else
                        {
                            Environment.Exit(0x0000000E);
                        }
                        return;
                    }
                    if (intver < 0 || intver > 65535)
                    {
                        Console.WriteLine("Invalid version {0}...", version);
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_INVALID_VERSION");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8C);
                        }
                        else
                        {
                            Environment.Exit(0x0000000E);
                        }
                        return;
                    }
                    break;

                case "-O":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No output set");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_OUTPUT");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8D);
                        }
                        else
                        {
                            Environment.Exit(0x0000000F);
                        }
                        return;
                    }
                    output = args[i + 1];
                    break;

                case "-ID":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No ID specified");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_ID");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8E);
                        }
                        else
                        {
                            Environment.Exit(0x00000010);
                        }
                        return;
                    }
                    id = args[i + 1];
                    id = id.ToUpper();
                    break;

                case "-IOS":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No IOS specified");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_IOS");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E86);
                        }
                        else
                        {
                            Environment.Exit(0x00000008);
                        }
                        return;
                    }
                    id = "00000001000000" + Convert.ToInt32(args[i + 1]).ToString("X2");
                    break;

                case "-SINGLE":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No ID specified");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_ID");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8E);
                        }
                        else
                        {
                            Environment.Exit(0x00000010);
                        }
                        return;
                    }
                    content = args[i + 1];
                    break;

                case "-S":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No ID specified");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_ID");
                        if (OperatingSystem.Windows())
                        {
                            Environment.Exit(0x00003E8E);
                        }
                        else
                        {
                            Environment.Exit(0x00000010);
                        }
                        return;
                    }
                    content = args[i + 1];
                    break;
                }
            }

            //Error checking & stuff
            if (id == "")
            {
                Console.WriteLine("ERROR: No ID specified");
                Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_ID");
                if (OperatingSystem.Windows())
                {
                    Environment.Exit(0x00003E8E);
                }
                else
                {
                    Environment.Exit(0x00000010);
                }
                return;
            }

            if (version == "")
            {
                if (BeQuiet.quiet > 2)
                {
                    Console.WriteLine("No version specified, using latest", version);
                }
                version = "LATEST";
            }

            try
            {
                if (version.ToUpper() == "LATEST")
                {
                    //Grab the TMD and get the latest version
                    NusClient grabtmd = new NusClient();
                    TMD       tmd     = grabtmd.DownloadTMD(id, "");
                    version = tmd.TitleVersion.ToString();
                }
            }
            catch (Exception ex)
            {
                if (ex.Message == "Title ID must be 16 characters long!")
                {
                    Console.WriteLine("");
                    Console.WriteLine("The ID needs to be 16 Characters.");
                    Console.WriteLine("");
                    Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_BAD_ID");
                    Console.WriteLine("");
                    if (OperatingSystem.Windows())
                    {
                        Environment.Exit(0x00003E9C);
                    }
                    else
                    {
                        Environment.Exit(0x0000001E);
                    }
                    return;
                }
                if (ex.Message == "The remote server returned an error: (404) Not Found.")
                {
                    Console.WriteLine("");
                    Console.WriteLine("The remote server returned a 404 error. Check your Title ID.");
                    Console.WriteLine("");
                    Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_REMOTE_404");
                    Console.WriteLine("");
                    if (OperatingSystem.Windows())
                    {
                        Environment.Exit(0x00003E9E);
                    }
                    else
                    {
                        Environment.Exit(0x00000020);
                    }
                    return;
                }
                if (ExceptionListRan == 0)
                {
                    Console.WriteLine("An unknown error occured, please try again");
                    Console.WriteLine("");
                    Console.WriteLine("ERROR DETAILS: {0}", ex.Message);
                    Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_UNKNOWN");
                    if (OperatingSystem.Windows())
                    {
                        Environment.Exit(0x00003E82);
                    }
                    else
                    {
                        Environment.Exit(0x00000004);
                    }
                    return;
                }
            }
            if (BeQuiet.quiet > 2)
            {
                Console.WriteLine("Found latest version: v{0}", version);
            }

            if (entered == false) //Will only be false if no store type argument was given
            {
                store.Add(StoreType.All);
                if (BeQuiet.quiet > 2)
                {
                    Console.WriteLine("No store type specified, using all");
                }
            }

            if (id.Length == 16 && Convert.ToInt32(id.Substring(14, 2), 16) >= 3 && Convert.ToInt32(id.Substring(14, 2), 16) <= 255 && id.Substring(0, 14) == "00000001000000")
            {
                ios = "IOS" + Convert.ToInt32(id.Substring(14, 2), 16) + "-64-" + version + ".wad";
            }

            if ((((output.Length >= 4 && output.Substring(output.Length - 4, 4).ToUpper() == ".WAD") || output == "") && Array.IndexOf(store.ToArray(), StoreType.WAD) != -1 && store.ToArray().Length == 1) || (output == "" && ios != "" && Array.IndexOf(store.ToArray(), StoreType.WAD) != -1 && store.ToArray().Length == 1))
            {
                wad = true;
                if (Directory.Exists(temp) == true)
                {
                    DeleteADir.DeleteDirectory(temp);
                }

                Directory.CreateDirectory(temp);
            }

            if (output == "")
            {
                NoOut  = true;
                output = ios == "" ? id + "v" + version : ios[0..^ 4];
示例#2
0
        public static void NUS(string[] args)
        {
            if (args.Length < 2)
            {
                NUS_help();
                return;
            }
            if (args[1].ToUpper() == "-H" || args[1].ToUpper() == "-HELP")
            {
                NUS_help();
                return;
            }

            //Set up variables
            string           id      = "";
            string           content = "";
            string           version = "";
            int              intver  = -1;
            string           output  = "";
            bool             local   = false;
            List <StoreType> store   = new List <StoreType>();
            bool             entered = false;
            bool             wad     = false;
            bool             NoOut   = false;
            string           ios     = "";
            string           temp    = Path.GetTempPath() + "Sharpii.tmp";

            //Get arguments
            for (int i = 1; i < args.Length; i++)
            {
                switch (args[i].ToUpper())
                {
                case "-ALL":
                    store.Add(StoreType.All);
                    entered = true;
                    break;

                case "-WAD":
                    store.Add(StoreType.WAD);
                    entered = true;
                    break;

                case "-ENCRYPT":
                    store.Add(StoreType.EncryptedContent);
                    entered = true;
                    break;

                case "-ENCRYPTED":
                    store.Add(StoreType.EncryptedContent);
                    entered = true;
                    break;

                case "-DECRYPT":
                    store.Add(StoreType.DecryptedContent);
                    entered = true;
                    break;

                case "-DECRYPTED":
                    store.Add(StoreType.DecryptedContent);
                    entered = true;
                    break;

                case "-LOCAL":
                    local = true;
                    break;

                case "-V":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No version set");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_VERSION_01");
                        Environment.Exit(0x00003E8B);
                        return;
                    }
                    version = args[i + 1];
                    if (version.ToUpper() == "LATEST")
                    {
                        break;
                    }
                    if (!int.TryParse(version, out intver))
                    {
                        Console.WriteLine("Invalid version {0}...", args[i + 1]);
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_INVALID_VERSION_01");
                        Environment.Exit(0x00003E8C);
                        return;
                    }
                    if (intver < 0 || intver > 65535)
                    {
                        Console.WriteLine("Invalid version {0}...", version);
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_INVALID_VERSION_01");
                        Environment.Exit(0x00003E8C);
                        return;
                    }
                    break;

                case "-VERSION":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No version set");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_VERSION_01");
                        Environment.Exit(0x00003E8B);
                        return;
                    }
                    version = args[i + 1];
                    if (version.ToUpper() == "LATEST")
                    {
                        break;
                    }
                    if (!int.TryParse(version, out intver))
                    {
                        Console.WriteLine("Invalid version {0}...", args[i + 1]);
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_INVALID_VERSION_01");
                        Environment.Exit(0x00003E8C);
                        return;
                    }
                    if (intver < 0 || intver > 65535)
                    {
                        Console.WriteLine("Invalid version {0}...", version);
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_INVALID_VERSION_01");
                        Environment.Exit(0x00003E8C);
                        return;
                    }
                    break;

                case "-O":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No output set");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_OUTPUT_01");
                        Environment.Exit(0x00003E8D);
                        return;
                    }
                    output = args[i + 1];
                    break;

                case "-ID":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No ID specified");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_ID_01");
                        Environment.Exit(0x00003E8E);
                        return;
                    }
                    id = args[i + 1];
                    break;

                case "-IOS":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No IOS specified");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_IOS_01");
                        Environment.Exit(0x00003E86);
                        return;
                    }
                    id = "00000001000000" + Convert.ToInt32(args[i + 1]).ToString("X2");
                    break;

                case "-SINGLE":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No ID specified");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_ID_01");
                        Environment.Exit(0x00003E8E);
                        return;
                    }
                    content = args[i + 1];
                    break;

                case "-S":
                    if (i + 1 >= args.Length)
                    {
                        Console.WriteLine("ERROR: No ID specified");
                        Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_ID_01");
                        Environment.Exit(0x00003E8E);
                        return;
                    }
                    content = args[i + 1];
                    break;
                }
            }

            //Error checking & stuff
            if (id == "")
            {
                Console.WriteLine("ERROR: No ID specified");
                Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_NO_ID_01");
                Environment.Exit(0x00003E8E);
                return;
            }

            if (version == "")
            {
                if (BeQuiet.quiet > 2)
                {
                    Console.WriteLine("No version specified, using latest", version);
                }
                version = "LATEST";
            }

            try
            {
                if (version.ToUpper() == "LATEST")
                {
                    //Grab the TMD and get the latest version
                    NusClient grabtmd = new NusClient();
                    TMD       tmd     = grabtmd.DownloadTMD(id, "");
                    version = tmd.TitleVersion.ToString();
                }
            }
            catch (Exception ex)
            {
                if (ex.Message == "Title ID must be 16 characters long!")
                {
                    Console.WriteLine("");
                    Console.WriteLine("The ID needs to be 16 Characters.");
                    Console.WriteLine("");
                    Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_BAD_ID_01");
                    Console.WriteLine("");
                    Environment.Exit(0x00003E9C);
                    return;
                }
                if (ex.Message == "The remote server returned an error: (404) Not Found.")
                {
                    Console.WriteLine("");
                    Console.WriteLine("The ID is not a valid title ID");
                    Console.WriteLine("");
                    Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_BAD_ID_01");
                    Console.WriteLine("");
                    Environment.Exit(0x00003E9C);
                    return;
                }
            }
            if (BeQuiet.quiet > 2)
            {
                Console.WriteLine("Found latest version: v{0}", version);
            }

            if (entered == false) //Will only be false if no store type argument was given
            {
                store.Add(StoreType.All);
                if (BeQuiet.quiet > 2)
                {
                    Console.WriteLine("No store type specified, using all");
                }
            }

            if (id.Length == 16 && Convert.ToInt32(id.Substring(14, 2), 16) >= 3 && Convert.ToInt32(id.Substring(14, 2), 16) <= 255 && id.Substring(0, 14) == "00000001000000")
            {
                ios = "IOS" + Convert.ToInt32(id.Substring(14, 2), 16) + "-64-" + version + ".wad";
            }

            if ((((output.Length >= 4 && output.Substring(output.Length - 4, 4).ToUpper() == ".WAD") || output == "") && Array.IndexOf(store.ToArray(), StoreType.WAD) != -1 && store.ToArray().Length == 1) || (output == "" && ios != "" && Array.IndexOf(store.ToArray(), StoreType.WAD) != -1 && store.ToArray().Length == 1))
            {
                wad = true;
                if (Directory.Exists(temp) == true)
                {
                    DeleteADir.DeleteDirectory(temp);
                }

                Directory.CreateDirectory(temp);
            }

            if (output == "")
            {
                NoOut  = true;
                output = ios == "" ? id + "v" + version : ios.Substring(0, ios.Length - 4);
                if (BeQuiet.quiet > 2)
                {
                    Console.WriteLine("No output specified, using {0}", output);
                }
            }

            //Main part, catches random/unexpected exceptions
            try
            {
                NusClient nus = new NusClient();

                if (local == true)
                {
                    if (BeQuiet.quiet > 2)
                    {
                        Console.WriteLine("Using local files if present...");
                    }
                    nus.UseLocalFiles = true;
                }


                if (content != "")
                {
                    if (BeQuiet.quiet > 1)
                    {
                        Console.Write("Downloading content...");
                    }

                    nus.DownloadSingleContent(id, version, content, output);

                    if (BeQuiet.quiet > 1)
                    {
                        Console.Write("Done!\n");
                    }
                }
                else
                {
                    if (BeQuiet.quiet > 1)
                    {
                        Console.Write("Downloading title...");
                    }

                    string realout = output;
                    if (wad == true)
                    {
                        output = temp;
                    }

                    nus.DownloadTitle(id, version, output, store.ToArray());

                    WadIosNamingStuff(wad, temp, id, version, ios, NoOut, output, realout);

                    if (BeQuiet.quiet > 1)
                    {
                        Console.Write("Done!\n");
                    }
                }

                if (BeQuiet.quiet > 1)
                {
                    Console.WriteLine("Operation completed succesfully!");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("An unknown error occured, please try again");
                Console.WriteLine("");
                Console.WriteLine("ERROR DETAILS: {0}", ex.Message);
                Console.WriteLine("Error: SHARPII_NET_CORE_NUSD_UNKNOWN_01");
                Environment.Exit(0x00003E82);
                return;
            }

            return;
        }