Exemplo n.º 1
0
        // Token: 0x0600243F RID: 9279 RVA: 0x0007AE64 File Offset: 0x00079064
        private static void smethod_1(Class321 pd, BinaryWriter write_stream, uint offset_orig, uint offset_new, string filename, Stream stream_orig, uint orig_start, uint orig_end, Stream stream_new, uint new_start, uint new_end)
        {
            uint num  = new_end - new_start;
            uint num2 = orig_end - orig_start;

            using (Stream3 stream = new Stream3(stream_orig, (long)((ulong)orig_start), (long)((ulong)orig_end)))
            {
                using (Stream3 stream2 = new Stream3(stream_new, (long)((ulong)new_start), (long)((ulong)new_end)))
                {
                    if (num == num2 && Struct43.smethod_5(stream.smethod_2(), stream2.smethod_2()))
                    {
                        Class292.smethod_4(pd, write_stream, 0U, null, 0U, num2, offset_orig + orig_start);
                    }
                    else
                    {
                        Class292.smethod_12(pd, Class292.smethod_15(filename), write_stream, offset_orig + orig_start, offset_new + new_start, stream, stream2);
                    }
                }
            }
        }
 // Token: 0x060020AB RID: 8363 RVA: 0x0006E398 File Offset: 0x0006C598
 public void method_8(string filename, Struct43?passwordHash = null)
 {
     using (Stream stream = File.Open(filename, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
     {
         using (BinaryWriter binaryWriter = new BinaryWriter(stream))
         {
             binaryWriter.Write(Class132.byte_0);
             binaryWriter.Write(Class132.int_0);
             binaryWriter.smethod_28(this.ID);
             long position = stream.Position;
             binaryWriter.smethod_25(Struct43.struct43_0);
             binaryWriter.smethod_33(this.UpdateUri);
             binaryWriter.Write(this.Name);
             binaryWriter.Write(this.Author);
             binaryWriter.Write(this.Description);
             binaryWriter.smethod_26(this.Version);
             binaryWriter.smethod_26(this.MinimumVersion);
             if (passwordHash != null)
             {
                 binaryWriter.smethod_25(passwordHash.Value);
             }
             else if (string.IsNullOrEmpty(this.Password))
             {
                 binaryWriter.smethod_25(Struct43.struct43_0);
             }
             else
             {
                 binaryWriter.smethod_25(Encoding.Unicode.GetBytes(this.Password).smethod_0());
             }
             long position2 = stream.Position;
             binaryWriter.Write(0);
             if (this.Icon != null)
             {
                 Class157.smethod_11(this.Icon, stream, Color.Black, 100);
                 long position3 = stream.Position;
                 stream.Position = position2;
                 binaryWriter.Write((int)(position3 - position2 - 4L));
                 stream.Position = position3;
             }
             if (!this.LoaderPack)
             {
                 binaryWriter.Write(this.Data.MultiFileData.Count);
                 foreach (KeyValuePair <string, Class338> keyValuePair in ((IEnumerable <KeyValuePair <string, Class338> >) this.Data.MultiFileData))
                 {
                     binaryWriter.Write(keyValuePair.Key);
                     binaryWriter.smethod_25(keyValuePair.Value.Data.smethod_0());
                 }
                 position2 = stream.Position;
                 binaryWriter.Write(0);
                 using (Stream3 stream2 = new Stream3(stream, stream.Position))
                 {
                     using (BinaryWriter binaryWriter2 = new BinaryWriter(stream2))
                     {
                         this.Data.method_17(stream2, binaryWriter2);
                         this.DataHash = stream2.smethod_2();
                     }
                 }
                 long position3 = stream.Position;
                 stream.Position = position2;
                 binaryWriter.Write((int)(position3 - position2 - 4L));
                 stream.Position = position3;
                 position3       = stream.Position;
                 stream.Position = position;
                 binaryWriter.smethod_25(this.DataHash);
                 stream.Position = position3;
             }
         }
     }
 }
        // Token: 0x06001E4A RID: 7754 RVA: 0x000624D8 File Offset: 0x000606D8
        public void method_1(Stream stream_orig, Stream stream_patch, Stream stream_dest, uint?overrideExpectedStartingFileLength, Struct43 overrideExpectedStartingHash, uint?overrideExpectedResultingFileLength, Struct43 overrideExpectedResultingHash, bool validate_expected, bool validate_result)
        {
            using (Stream3 stream = new Stream3(stream_orig))
            {
                using (Stream3 stream2 = new Stream3(stream_patch))
                {
                    using (Stream3 stream3 = new Stream3(stream_dest))
                    {
                        using (BinaryReader binaryReader = new BinaryReader(stream))
                        {
                            using (BinaryReader binaryReader2 = new BinaryReader(stream2))
                            {
                                using (BinaryWriter binaryWriter = new BinaryWriter(stream3))
                                {
                                    binaryReader2.ReadUInt32();
                                    ushort   num     = binaryReader2.ReadUInt16();
                                    uint     num2    = binaryReader2.ReadUInt32();
                                    Struct43 @struct = binaryReader2.BaseStream.smethod_22();
                                    uint     num3    = binaryReader2.ReadUInt32();
                                    Struct43 struct2 = binaryReader2.BaseStream.smethod_22();
                                    uint     num4    = 0U;
                                    if (validate_expected)
                                    {
                                        if (stream.Length != (long)((ulong)num2) && (overrideExpectedStartingFileLength == null || overrideExpectedStartingFileLength.Value != num2))
                                        {
                                            throw new InvalidDataException(string.Format("The starting file size: '{0}' does not match the expected file size: '{1}'.", stream.Length, num2));
                                        }
                                        Struct43 struct3 = stream_orig.smethod_2();
                                        if (Struct43.smethod_6(struct3, @struct) && (Struct43.smethod_5(overrideExpectedStartingHash, Struct43.struct43_0) || Struct43.smethod_6(overrideExpectedStartingHash, struct3)))
                                        {
                                            throw new InvalidDataException(string.Format("The actual starting hash: '{0}' does not match the expected hash: '{1}'.", struct3, @struct));
                                        }
                                    }
                                    byte[] buffer = new byte[4096];
                                    int    num5   = 0;
                                    uint   num7;
                                    uint   num10;
                                    do
                                    {
                                        ushort num6 = (ushort)(num7 = (uint)binaryReader2.ReadUInt16());
                                        while (num6 > 0 && !binaryReader2.smethod_3())
                                        {
                                            int num8 = binaryReader2.Read(buffer, 0, (int)((num6 > 4096) ? 4096 : num6));
                                            binaryWriter.Write(buffer, 0, num8);
                                            num6 -= (ushort)num8;
                                            num4 += (uint)((ushort)num8);
                                            if (this.eventHandler_0 != null)
                                            {
                                                int num9 = EventArgs9.smethod_0((long)((ulong)num4), (long)((ulong)num3));
                                                if (num5 != num9)
                                                {
                                                    num5 = num9;
                                                    this.eventHandler_0(this, new EventArgs9((long)((ulong)num4), (long)((ulong)num3)));
                                                }
                                            }
                                        }
                                        num6 = (ushort)(num10 = (uint)binaryReader2.ReadUInt16());
                                        if (num6 > 0)
                                        {
                                            int num11 = binaryReader2.ReadInt32();
                                            if (num < 2)
                                            {
                                                binaryReader.BaseStream.Seek((long)num11, SeekOrigin.Begin);
                                            }
                                            else
                                            {
                                                binaryReader.BaseStream.Seek((long)num11, SeekOrigin.Current);
                                            }
                                            while (num6 > 0 && !binaryReader2.smethod_3())
                                            {
                                                int num8 = binaryReader.Read(buffer, 0, (int)((num6 > 4096) ? 4096 : num6));
                                                binaryWriter.Write(buffer, 0, num8);
                                                num6 -= (ushort)num8;
                                                num4 += (uint)((ushort)num8);
                                                if (this.eventHandler_0 != null)
                                                {
                                                    int num9 = EventArgs9.smethod_0((long)((ulong)num4), (long)((ulong)num3));
                                                    if (num5 != num9)
                                                    {
                                                        num5 = num9;
                                                        this.eventHandler_0(this, new EventArgs9((long)((ulong)num4), (long)((ulong)num3)));
                                                    }
                                                }
                                            }
                                        }
                                    }while (num10 != 0U || num7 != 0U);
                                    if (validate_result)
                                    {
                                        if (stream3.Length != (long)((ulong)num3))
                                        {
                                            if (overrideExpectedResultingFileLength != null)
                                            {
                                                uint?num12  = overrideExpectedResultingFileLength;
                                                long length = stream3.Length;
                                                if ((ulong)num12.GetValueOrDefault() == (ulong)length && num12 != null)
                                                {
                                                    goto IL_2D7;
                                                }
                                            }
                                            throw new InvalidDataException(string.Format("The resulting file length: '{0}' does not match the expected data length: '{1}'.", stream3.Length, num3));
                                        }
IL_2D7:
                                        Struct43 struct4 = stream3.smethod_2();
                                        if (Struct43.smethod_6(struct4, struct2) && (Struct43.smethod_5(overrideExpectedResultingHash, Struct43.struct43_0) || Struct43.smethod_6(overrideExpectedResultingHash, struct4)))
                                        {
                                            throw new InvalidDataException(string.Format("The resulting hash: '{0}' does not match the expected hash: '{1}'.", struct4, struct2));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }