Exemplo n.º 1
0
 public static void OverwriteSequenceNumbers(TagLib.Ogg.File file, long position, IDictionary<uint, int> shiftTable)
 {
     if (file == null)
     {
         throw new ArgumentNullException("file");
     }
     if (shiftTable == null)
     {
         throw new ArgumentNullException("shiftTable");
     }
     bool flag = true;
     IEnumerator<KeyValuePair<uint, int>> enumerator = shiftTable.GetEnumerator();
     try
     {
         while (enumerator.MoveNext())
         {
             KeyValuePair<uint, int> current = enumerator.Current;
             if (current.Value != 0)
             {
                 flag = false;
                 goto Label_0065;
             }
         }
     }
     finally
     {
         if (enumerator == null)
         {
         }
         enumerator.Dispose();
     }
 Label_0065:
     if (flag)
     {
         return;
     }
     while (position < (file.Length - 0x1bL))
     {
         PageHeader header = new PageHeader(file, position);
         int length = (int) (header.Size + header.DataSize);
         if (shiftTable.ContainsKey(header.StreamSerialNumber) && (shiftTable[header.StreamSerialNumber] != 0))
         {
             file.Seek(position);
             ByteVector vector = file.ReadBlock(length);
             ByteVector data = ByteVector.FromUInt(header.PageSequenceNumber + ((uint) ((long) shiftTable[header.StreamSerialNumber])), false);
             for (int i = 0x12; i < 0x16; i++)
             {
                 vector[i] = data[i - 0x12];
             }
             for (int j = 0x16; j < 0x1a; j++)
             {
                 vector[j] = 0;
             }
             data.Add(ByteVector.FromUInt(vector.Checksum, false));
             file.Seek(position + 0x12L);
             file.WriteBlock(data);
         }
         position += length;
     }
 }