예제 #1
0
 protected SwfTagData ReadEmbeddedTagData(string resourceName, SwfTagType type)
 {
     var resourcePath = GetType().Namespace + "." + resourceName;
     var stream = GetType().Assembly.GetManifestResourceStream(resourcePath);
     var data = new byte[stream.Length];
     stream.Read(data, 0, data.Length);
     return new SwfTagData { Data = data, Type = type };
 }
예제 #2
0
        public SwfTagBase ReadTag(SwfTagType type, ISwfStreamReader reader)
        {
            var tag = _factory.Create(type);

            tag.AcceptVistor(this, reader);
            tag.RestData = reader.BytesLeft > 0 ? reader.ReadRest() : null;
            return(tag);
        }
예제 #3
0
        protected SwfTagData ReadEmbeddedTagData(string resourceName, SwfTagType type)
        {
            var resourcePath = GetType().Namespace + "." + resourceName;
            var stream       = GetType().Assembly.GetManifestResourceStream(resourcePath);
            var data         = new byte[stream.Length];

            stream.Read(data, 0, data.Length);
            return(new SwfTagData {
                Data = data, Type = type
            });
        }
예제 #4
0
        protected static byte[] GetTagPayload(byte[] data)
        {
            ushort     typeAndSize = (ushort)(data[0] | (data[1] << 8));
            SwfTagType type        = (SwfTagType)(typeAndSize >> 6);
            int        size        = typeAndSize & 0x3f;
            int        startIndex  = 2;

            if (size >= 0x3f)
            {
                size       = (data[2] | (data[3] << 8) | (data[4] << 16) | (data[5] << 24));
                startIndex = 6;
            }
            byte[] payload = new byte[size];
            Array.Copy(data, startIndex, payload, 0, size);
            return(payload);
        }
예제 #5
0
        protected IEnumerable <SwfTagData> GetTagBinariesFromSwfResource(string resourceName)
        {
            var             file   = new SwfFile();
            var             stream = OpenEmbeddedResource(resourceName);
            SwfStreamReader reader = new SwfStreamReader(stream);

            file.FileInfo = reader.ReadSwfFileInfo();
            stream        = DecompressIfNeeded(file.FileInfo, stream);
            stream.Seek(8, SeekOrigin.Begin);
            reader      = new SwfStreamReader(stream);
            file.Header = reader.ReadSwfHeader();

            while (stream.Position < stream.Length)
            {
                ushort     typeAndSize = reader.ReadUInt16();
                SwfTagType type        = (SwfTagType)(typeAndSize >> 6);
                int        shortSize   = typeAndSize & 0x3f;
                int        size        = shortSize < 0x3f ? shortSize : reader.ReadInt32();
                yield return(new SwfTagData {
                    Type = type, Data = reader.ReadBytes(size)
                });
            }
        }
예제 #6
0
 /// <summary>
 /// Sets the type of the tag.
 /// </summary>
 /// <param name="type">The type.</param>
 public void SetTagType(SwfTagType type)
 {
     _type = type;
 }
예제 #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UnknownTag"/> class.
 /// </summary>
 /// <param name="type">The type.</param>
 public UnknownTag(SwfTagType type)
 {
     _type = type;
 }
예제 #8
0
        /// <summary>
        /// Creates an instance of swf tag by its type.
        /// </summary>
        /// <param name="tagType"></param>
        /// <returns></returns>
        public SwfTagBase Create(SwfTagType tagType)
        {
            switch (tagType)
            {
            case SwfTagType.End:
                return(new EndTag());

            case SwfTagType.ShowFrame:
                return(new ShowFrameTag());

            case SwfTagType.DefineShape:
                return(new DefineShapeTag());

            case SwfTagType.PlaceObject:
                return(new PlaceObjectTag());

            case SwfTagType.RemoveObject:
                return(new RemoveObjectTag());

            case SwfTagType.DefineBits:
                return(new DefineBitsTag());

            case SwfTagType.DefineButton:
                return(new DefineButtonTag());

            case SwfTagType.JPEGTables:
                return(new JPEGTablesTag());

            case SwfTagType.SetBackgroundColor:
                return(new SetBackgroundColorTag());

            case SwfTagType.DefineFont:
                return(new DefineFontTag());

            case SwfTagType.DefineText:
                return(new DefineTextTag());

            case SwfTagType.DoAction:
                return(new DoActionTag());

            case SwfTagType.DefineFontInfo:
                return(new DefineFontInfoTag());

            case SwfTagType.DefineSound:
                return(new DefineSoundTag());

            case SwfTagType.StartSound:
                return(new StartSoundTag());

            case SwfTagType.DefineButtonSound:
                return(new DefineButtonSoundTag());

            case SwfTagType.SoundStreamHead:
                return(new SoundStreamHeadTag());

            case SwfTagType.SoundStreamBlock:
                return(new SoundStreamBlockTag());

            case SwfTagType.DefineBitsLossless:
                return(new DefineBitsLosslessTag());

            case SwfTagType.DefineBitsJPEG2:
                return(new DefineBitsJPEG2Tag());

            case SwfTagType.DefineShape2:
                return(new DefineShape2Tag());

            case SwfTagType.DefineButtonCxform:
                return(new DefineButtonCxformTag());

            case SwfTagType.Protect:
                return(new ProtectTag());

            case SwfTagType.PlaceObject2:
                return(new PlaceObject2Tag());

            case SwfTagType.RemoveObject2:
                return(new RemoveObject2Tag());

            case SwfTagType.DefineShape3:
                return(new DefineShape3Tag());

            case SwfTagType.DefineText2:
                return(new DefineText2Tag());

            case SwfTagType.DefineButton2:
                return(new DefineButton2Tag());

            case SwfTagType.DefineBitsJPEG3:
                return(new DefineBitsJPEG3Tag());

            case SwfTagType.DefineBitsLossless2:
                return(new DefineBitsLossless2Tag());

            case SwfTagType.DefineEditText:
                return(new DefineEditTextTag());

            case SwfTagType.DefineSprite:
                return(new DefineSpriteTag());

            case SwfTagType.FrameLabel:
                return(new FrameLabelTag());

            case SwfTagType.SoundStreamHead2:
                return(new SoundStreamHead2Tag());

            case SwfTagType.DefineMorphShape:
                return(new DefineMorphShapeTag());

            case SwfTagType.DefineFont2:
                return(new DefineFont2Tag());

            case SwfTagType.ExportAssets:
                return(new ExportAssetsTag());

            case SwfTagType.ImportAssets:
                return(new ImportAssetsTag());

            case SwfTagType.EnableDebugger:
                return(new EnableDebuggerTag());

            case SwfTagType.DoInitAction:
                return(new DoInitActionTag());

            case SwfTagType.DefineVideoStream:
                return(new DefineVideoStreamTag());

            case SwfTagType.VideoFrame:
                return(new VideoFrameTag());

            case SwfTagType.DefineFontInfo2:
                return(new DefineFontInfo2Tag());

            case SwfTagType.EnableDebugger2:
                return(new EnableDebugger2Tag());

            case SwfTagType.ScriptLimits:
                return(new ScriptLimitsTag());

            case SwfTagType.SetTabIndex:
                return(new SetTabIndexTag());

            case SwfTagType.FileAttributes:
                return(new FileAttributesTag());

            case SwfTagType.PlaceObject3:
                return(new PlaceObject3Tag());

            case SwfTagType.ImportAssets2:
                return(new ImportAssets2Tag());

            case SwfTagType.DoABCDefine:
                return(new DoABCDefineTag());

            case SwfTagType.DefineFontAlignZones:
                return(new DefineFontAlignZonesTag());

            case SwfTagType.CSMTextSettings:
                return(new CSMTextSettingsTag());

            case SwfTagType.DefineFont3:
                return(new DefineFont3Tag());

            case SwfTagType.SymbolClass:
                return(new SymbolClassTag());

            case SwfTagType.Metadata:
                return(new MetadataTag());

            case SwfTagType.DefineScalingGrid:
                return(new DefineScalingGridTag());

            case SwfTagType.DoABC:
                return(new DoABCTag());

            case SwfTagType.DefineShape4:
                return(new DefineShape4Tag());

            case SwfTagType.DefineMorphShape2:
                return(new DefineMorphShape2Tag());

            case SwfTagType.DefineSceneAndFrameLabelData:
                return(new DefineSceneAndFrameLabelDataTag());

            case SwfTagType.DefineBinaryData:
                return(new DefineBinaryDataTag());

            case SwfTagType.DefineFontName:
                return(new DefineFontNameTag());

            case SwfTagType.StartSound2:
                return(new StartSound2Tag());

            case SwfTagType.DefineBitsJPEG4:
                return(new DefineBitsJPEG4Tag());

            case SwfTagType.DefineFont4:
                return(new DefineFont4Tag());

            default:
                return(new UnknownTag(tagType));
            }
        }
예제 #9
0
 /// <summary>
 /// Creates an instance of swf tag by its type.
 /// </summary>
 /// <param name="tagType"></param>
 /// <returns></returns>
 public SwfTagBase Create(SwfTagType tagType)
 {
     switch (tagType) {
         case SwfTagType.End:
             return new EndTag();
         case SwfTagType.ShowFrame:
             return new ShowFrameTag();
         case SwfTagType.DefineShape:
             return new DefineShapeTag();
         case SwfTagType.PlaceObject:
             return new PlaceObjectTag();
         case SwfTagType.RemoveObject:
             return new RemoveObjectTag();
         case SwfTagType.DefineBits:
             return new DefineBitsTag();
         case SwfTagType.DefineButton:
             return new DefineButtonTag();
         case SwfTagType.JPEGTables:
             return new JPEGTablesTag();
         case SwfTagType.SetBackgroundColor:
             return new SetBackgroundColorTag();
         case SwfTagType.DefineFont:
             return new DefineFontTag();
         case SwfTagType.DefineText:
             return new DefineTextTag();
         case SwfTagType.DoAction:
             return new DoActionTag();
         case SwfTagType.DefineFontInfo:
             return new DefineFontInfoTag();
         case SwfTagType.DefineSound:
             return new DefineSoundTag();
         case SwfTagType.StartSound:
             return new StartSoundTag();
         case SwfTagType.DefineButtonSound:
             return new DefineButtonSoundTag();
         case SwfTagType.SoundStreamHead:
             return new SoundStreamHeadTag();
         case SwfTagType.SoundStreamBlock:
             return new SoundStreamBlockTag();
         case SwfTagType.DefineBitsLossless:
             return new DefineBitsLosslessTag();
         case SwfTagType.DefineBitsJPEG2:
             return new DefineBitsJPEG2Tag();
         case SwfTagType.DefineShape2:
             return new DefineShape2Tag();
         case SwfTagType.DefineButtonCxform:
             return new DefineButtonCxformTag();
         case SwfTagType.Protect:
             return new ProtectTag();
         case SwfTagType.PlaceObject2:
             return new PlaceObject2Tag();
         case SwfTagType.RemoveObject2:
             return new RemoveObject2Tag();
         case SwfTagType.DefineShape3:
             return new DefineShape3Tag();
         case SwfTagType.DefineText2:
             return new DefineText2Tag();
         case SwfTagType.DefineButton2:
             return new DefineButton2Tag();
         case SwfTagType.DefineBitsJPEG3:
             return new DefineBitsJPEG3Tag();
         case SwfTagType.DefineBitsLossless2:
             return new DefineBitsLossless2Tag();
         case SwfTagType.DefineEditText:
             return new DefineEditTextTag();
         case SwfTagType.DefineSprite:
             return new DefineSpriteTag();
         case SwfTagType.FrameLabel:
             return new FrameLabelTag();
         case SwfTagType.SoundStreamHead2:
             return new SoundStreamHead2Tag();
         case SwfTagType.DefineMorphShape:
             return new DefineMorphShapeTag();
         case SwfTagType.DefineFont2:
             return new DefineFont2Tag();
         case SwfTagType.ExportAssets:
             return new ExportAssetsTag();
         case SwfTagType.ImportAssets:
             return new ImportAssetsTag();
         case SwfTagType.EnableDebugger:
             return new EnableDebuggerTag();
         case SwfTagType.DoInitAction:
             return new DoInitActionTag();
         case SwfTagType.DefineVideoStream:
             return new DefineVideoStreamTag();
         case SwfTagType.VideoFrame:
             return new VideoFrameTag();
         case SwfTagType.DefineFontInfo2:
             return new DefineFontInfo2Tag();
         case SwfTagType.EnableDebugger2:
             return new EnableDebugger2Tag();
         case SwfTagType.ScriptLimits:
             return new ScriptLimitsTag();
         case SwfTagType.SetTabIndex:
             return new SetTabIndexTag();
         case SwfTagType.FileAttributes:
             return new FileAttributesTag();
         case SwfTagType.PlaceObject3:
             return new PlaceObject3Tag();
         case SwfTagType.ImportAssets2:
             return new ImportAssets2Tag();
         case SwfTagType.DoABCDefine:
             return new DoABCDefineTag();
         case SwfTagType.DefineFontAlignZones:
             return new DefineFontAlignZonesTag();
         case SwfTagType.CSMTextSettings:
             return new CSMTextSettingsTag();
         case SwfTagType.DefineFont3:
             return new DefineFont3Tag();
         case SwfTagType.SymbolClass:
             return new SymbolClassTag();
         case SwfTagType.Metadata:
             return new MetadataTag();
         case SwfTagType.DefineScalingGrid:
             return new DefineScalingGridTag();
         case SwfTagType.DoABC:
             return new DoABCTag();
         case SwfTagType.DefineShape4:
             return new DefineShape4Tag();
         case SwfTagType.DefineMorphShape2:
             return new DefineMorphShape2Tag();
         case SwfTagType.DefineSceneAndFrameLabelData:
             return new DefineSceneAndFrameLabelDataTag();
         case SwfTagType.DefineBinaryData:
             return new DefineBinaryDataTag();
         case SwfTagType.DefineFontName:
             return new DefineFontNameTag();
         case SwfTagType.StartSound2:
             return new StartSound2Tag();
         case SwfTagType.DefineBitsJPEG4:
             return new DefineBitsJPEG4Tag();
         case SwfTagType.DefineFont4:
             return new DefineFont4Tag();
         default:
             return new UnknownTag(tagType);
     }
 }
예제 #10
0
 public static UnsupportedTag Create(SwfTagType tag_type)
 {
     return(new UnsupportedTag {
         _tagType = tag_type
     });
 }