Beispiel #1
0
 public Item(string key, ByteVector value)
 {
     this.key = key;
     this.type = ItemType.Binary;
     this.data = value as ReadOnlyByteVector;
     if (this.data == null)
     {
         this.data = new ReadOnlyByteVector(value);
     }
 }
 static FrameHeader()
 {
     ReadOnlyByteVector[] vectorArray1 = new ReadOnlyByteVector[,] { 
         { "BUF", "RBUF" }, { "CNT", "PCNT" }, { "COM", "COMM" }, { "CRA", "AENC" }, { "ETC", "ETCO" }, { "GEO", "GEOB" }, { "IPL", "TIPL" }, { "MCI", "MCDI" }, { "MLL", "MLLT" }, { "PIC", "APIC" }, { "POP", "POPM" }, { "REV", "RVRB" }, { "SLT", "SYLT" }, { "STC", "SYTC" }, { "TAL", "TALB" }, { "TBP", "TBPM" }, 
         { "TCM", "TCOM" }, { "TCO", "TCON" }, { "TCP", "TCMP" }, { "TCR", "TCOP" }, { "TDA", "TDAT" }, { "TIM", "TIME" }, { "TDY", "TDLY" }, { "TEN", "TENC" }, { "TFT", "TFLT" }, { "TKE", "TKEY" }, { "TLA", "TLAN" }, { "TLE", "TLEN" }, { "TMT", "TMED" }, { "TOA", "TOAL" }, { "TOF", "TOFN" }, { "TOL", "TOLY" }, 
         { "TOR", "TDOR" }, { "TOT", "TOAL" }, { "TP1", "TPE1" }, { "TP2", "TPE2" }, { "TP3", "TPE3" }, { "TP4", "TPE4" }, { "TPA", "TPOS" }, { "TPB", "TPUB" }, { "TRC", "TSRC" }, { "TRK", "TRCK" }, { "TSS", "TSSE" }, { "TT1", "TIT1" }, { "TT2", "TIT2" }, { "TT3", "TIT3" }, { "TXT", "TOLY" }, { "TXX", "TXXX" }, 
         { "TYE", "TDRC" }, { "UFI", "UFID" }, { "ULT", "USLT" }, { "WAF", "WOAF" }, { "WAR", "WOAR" }, { "WAS", "WOAS" }, { "WCM", "WCOM" }, { "WCP", "WCOP" }, { "WPB", "WPUB" }, { "WXX", "WXXX" }, { "XRV", "RVA2" }
      };
     version2_frames = vectorArray1;
     ReadOnlyByteVector[] vectorArray2 = new ReadOnlyByteVector[,] { { "TORY", "TDOR" }, { "TYER", "TDRC" }, { "XRVA", "RVA2" } };
     version3_frames = vectorArray2;
 }
        public FrameHeader(ByteVector data, byte version)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            this.flags = FrameFlags.None;
            this.frame_size = 0;
            if ((version < 2) || (version > 4))
            {
                throw new CorruptFileException("Unsupported tag version.");
            }
            if (data.Count < ((version != 2) ? 4 : 3))
            {
                throw new CorruptFileException("Data must contain at least a frame ID.");
            }
            switch (version)
            {
                case 2:
                    this.frame_id = ConvertId(data.Mid(0, 3), version, false);
                    if (data.Count >= 6)
                    {
                        this.frame_size = data.Mid(3, 3).ToUInt();
                        return;
                    }
                    return;

                case 3:
                    this.frame_id = ConvertId(data.Mid(0, 4), version, false);
                    if (data.Count >= 10)
                    {
                        this.frame_size = data.Mid(4, 4).ToUInt();
                        this.flags = (FrameFlags) ((ushort) ((((data[8] << 7) & 0x7000) | ((data[9] >> 4) & 12)) | ((data[9] << 1) & 0x40)));
                        return;
                    }
                    return;

                case 4:
                    this.frame_id = new ReadOnlyByteVector(data.Mid(0, 4));
                    if (data.Count >= 10)
                    {
                        this.frame_size = SynchData.ToUInt(data.Mid(4, 4));
                        this.flags = (FrameFlags) data.Mid(8, 2).ToUShort();
                        return;
                    }
                    return;
            }
            throw new CorruptFileException("Unsupported tag version.");
        }
Beispiel #4
0
 private Item(Item item)
 {
     this.type = item.type;
     this.key = item.key;
     if (item.data != null)
     {
         this.data = new ReadOnlyByteVector(item.data);
     }
     if (item.text != null)
     {
         this.text = (string[]) item.text.Clone();
     }
     this.read_only = item.read_only;
     this.size_on_disk = item.size_on_disk;
 }
 static Footer()
 {
     FileIdentifier = "3DI";
 }
 static StreamHeader()
 {
     FileIdentifier = "MAC ";
 }
 static StreamHeader()
 {
     FileIdentifier = "COMM";
 }
 static Header()
 {
     FileIdentifier = "ID3";
 }
Beispiel #9
0
 protected void Parse(ByteVector data, int offset)
 {
     if (data == null)
     {
         throw new ArgumentNullException("data");
     }
     if (offset < 0)
     {
         throw new ArgumentOutOfRangeException("offset");
     }
     if (data.Count < (offset + 11))
     {
         throw new CorruptFileException("Not enough data for APE Item");
     }
     uint num = data.Mid(offset, 4).ToUInt(false);
     uint num2 = data.Mid(offset + 4, 4).ToUInt(false);
     this.ReadOnly = (num2 & 1) == 1;
     this.Type = ((ItemType) (num2 >> 1)) & (ItemType.Locator | ItemType.Binary);
     int num3 = data.Find(ByteVector.TextDelimiter(StringType.UTF8), offset + 8);
     this.key = data.ToString(StringType.UTF8, offset + 8, (num3 - offset) - 8);
     if (num > ((data.Count - num3) - 1))
     {
         throw new CorruptFileException("Invalid data length.");
     }
     this.size_on_disk = ((num3 + 1) + ((int) num)) - offset;
     if (this.Type == ItemType.Binary)
     {
         this.data = new ReadOnlyByteVector(data.Mid(num3 + 1, (int) num));
     }
     else
     {
         this.text = data.Mid(num3 + 1, (int) num).ToStrings(StringType.UTF8, 0);
     }
 }
Beispiel #10
0
 public ByteVector Render()
 {
     uint num = (uint) ((!this.ReadOnly ? 0 : 1) | (((int) this.Type) << 1));
     if (this.IsEmpty)
     {
         return new ByteVector();
     }
     ByteVector data = null;
     if (((this.type == ItemType.Binary) && (this.text == null)) && (this.data != null))
     {
         data = this.data;
     }
     if ((data == null) && (this.text != null))
     {
         data = new ByteVector();
         for (int i = 0; i < this.text.Length; i++)
         {
             if (i != 0)
             {
                 data.Add((byte) 0);
             }
             data.Add(ByteVector.FromString(this.text[i], StringType.UTF8));
         }
     }
     if ((data == null) || (data.Count == 0))
     {
         return new ByteVector();
     }
     ByteVector vector2 = new ByteVector();
     vector2.Add(ByteVector.FromUInt((uint) data.Count, false));
     vector2.Add(ByteVector.FromUInt(num, false));
     vector2.Add(ByteVector.FromString(this.key, StringType.UTF8));
     vector2.Add((byte) 0);
     vector2.Add(data);
     this.size_on_disk = vector2.Count;
     return vector2;
 }
 static StreamHeader()
 {
     sftable = new ushort[] { 0xac44, 0xbb80, 0x93a8, 0x7d00 };
     FileIdentifier = "MP+";
 }
 static XingHeader()
 {
     FileIdentifier = "Xing";
     Unknown = new XingHeader(0, 0);
 }
 static VBRIHeader()
 {
     FileIdentifier = "VBRI";
     Unknown = new VBRIHeader(0, 0);
 }