public override void WriteToStream(System.IO.Stream stream)
        {
            //Text encoding          $xx
            //MIME type              <text string> $00
            //Filename               <text string according to encoding> $00 (00)
            //Content description    <text string according to encóding> $00 (00)
            //Encapsulated object    <binary data>

            GeneralEncapsulatedObjectFrame frame = (GeneralEncapsulatedObjectFrame)this.FrameToWrite;
            List <Field> fields = new List <Field>();

            // Declare the fields to write.
            fields.Add(new SingleByteField((byte)this.Encoding));
            fields.Add(TextField.CreateTextField(frame.MimeType, EncodingScheme.Ascii));
            fields.Add(TextField.CreateTextField(frame.Filename, this.Encoding));
            fields.Add(TextField.CreateTextField(frame.ContentDescription, this.Encoding));
            fields.Add(new BinaryField(frame.BinaryData, 0, frame.BinaryData.Length));

            // Write the header
            int length = 0;

            foreach (Field f in fields)
            {
                length += f.Length;
            }
            HeaderWriter.WriteHeader(stream, new FrameHeader(this.FrameID, length));

            // Write the fields
            foreach (Field f in fields)
            {
                f.WriteToStream(stream);
            }
        }
Example #2
0
        /// <summary>
        ///    Gets a specified encapsulated object frame from the
        ///    specified tag, optionally creating it if it does not
        ///    exist.
        /// </summary>
        /// <param name="tag">
        ///    A <see cref="Tag" /> object to search in.
        /// </param>
        /// <param name="description">
        ///    A <see cref="string" /> specifying the description to
        ///    match.
        /// </param>
        /// <param name="create">
        ///    A <see cref="bool" /> specifying whether or not to create
        ///    and add a new frame to the tag if a match is not found.
        /// </param>
        /// <returns>
        ///    A <see cref="GeneralEncapsulatedObjectFrame" /> object
        ///    containing the matching frame, or <see langword="null" />
        ///    if a match wasn't found and <paramref name="create" /> is
        ///    <see langword="false" />.
        /// </returns>
        public static GeneralEncapsulatedObjectFrame Get(Tag tag,
                                                         string description,
                                                         bool create)
        {
            GeneralEncapsulatedObjectFrame geob;

            foreach (Frame frame in tag.GetFrames(FrameType.GEOB))
            {
                geob = frame as GeneralEncapsulatedObjectFrame;

                if (geob == null)
                {
                    continue;
                }

                if (geob.Description != description)
                {
                    continue;
                }

                return(geob);
            }

            if (!create)
            {
                return(null);
            }

            geob             = new GeneralEncapsulatedObjectFrame();
            geob.Description = description;
            tag.AddFrame(geob);
            return(geob);
        }
Example #3
0
        /// <summary>
        ///    Creates a deep copy of the current instance.
        /// </summary>
        /// <returns>
        ///    A new <see cref="Frame" /> object identical to the
        ///    current instance.
        /// </returns>
        public override Frame Clone()
        {
            GeneralEncapsulatedObjectFrame frame =
                new GeneralEncapsulatedObjectFrame();

            frame.encoding    = encoding;
            frame.mime_type   = mime_type;
            frame.file_name   = file_name;
            frame.description = description;
            if (data != null)
            {
                frame.data = new ByteVector(data);
            }
            return(frame);
        }
 public GeneralEncapsulatedObjectFrameWriter(GeneralEncapsulatedObjectFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }
 public GeneralEncapsulatedObjectFrameWriter(GeneralEncapsulatedObjectFrame frameToWrite, Writers.FrameHeaderWriter frameHeaderWriter, string frameID, EncodingScheme encoding)
     : base(frameToWrite, frameHeaderWriter, frameID, encoding)
 {
 }