コード例 #1
0
ファイル: WowProtocol.cs プロジェクト: CarlosX/Kamilla.Wow
            /// <summary>
            /// Initializes a new instance of
            /// <see cref="Kamilla.Network.Protocols.DefaultProtocol.ItemData"/> class.
            /// </summary>
            /// <param name="item">
            /// The underlying instance of <see cref="Kamilla.Network.Viewing.ViewerItem"/> class.
            /// </param>
            /// <exception cref="System.ArgumentNullException">
            /// <c>item</c> is null.
            /// </exception>
            public ItemVisualData(ViewerItem item)
            {
                if (item == null)
                    throw new ArgumentNullException("item");

                m_item = item;
            }
コード例 #2
0
ファイル: TextContents.xaml.cs プロジェクト: CarlosX/Kamilla
        void IViewTab.Fill(Protocol protocol, ViewerItem item)
        {
            ((IViewTab)this).Reset();

            m_strings = ParsingHelper.ExtractStrings(protocol, item);
            m_binaryDatas = ParsingHelper.ExtractBinaryDatas(protocol, item);
            int nStrings = m_strings.Length;
            int count = nStrings + m_binaryDatas.Length;

            if (count > 0)
            {
                ui_cbDatas.Items.Clear();

                for (int i = 0; i < count; i++)
                {
                    var obj = i >= nStrings ? m_binaryDatas[i - nStrings].Item1 : m_strings[i].Item1;
                    ui_cbDatas.Items.Add(ParsingHelper.GetContentName(obj, i));
                }

                ui_cbDatas.SelectedIndex = 0;

                if (count > 1)
                    ui_cbDatas.IsEnabled = true;

                //this.SelectData(0);
            }

            this.IsFilled = true;
        }
コード例 #3
0
        void IViewTab.Fill(Protocol protocol, ViewerItem item)
        {
            var header = protocol.PacketContentsViewHeader(item);

            if (header != null && header != string.Empty)
                ui_tbMain.Text = header + Environment.NewLine + item.Packet.Data.ToHexDump();
            else
                ui_tbMain.Text = item.Packet.Data.ToHexDump();

            this.IsFilled = true;
        }
コード例 #4
0
ファイル: Protocol.cs プロジェクト: CarlosX/Kamilla
        public void CreateParser(ViewerItem item)
        {
            if (item == null)
                throw new ArgumentNullException("item");

            var parser = this.InternalCreateParser(item);
            if (parser == null)
                parser = new UndefinedPacketParser();

            parser.m_item = item;
            item.Parser = parser;
        }
コード例 #5
0
ファイル: ParsedText.xaml.cs プロジェクト: CarlosX/Kamilla
        void IViewTab.Fill(Protocol protocol, ViewerItem item)
        {
            var parser = item.Parser;
            if (parser == null)
            {
                protocol.CreateParser(item);
                parser = item.Parser;
            }

            if (!parser.IsParsed)
                parser.Parse();

            ui_tbMain.Text = parser.ParsedText ?? string.Empty;
            this.IsFilled = true;
        }
コード例 #6
0
        protected internal virtual void OnItemVisualDataQueried(ViewerItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException();
            }

            if (item.Viewer != this)
            {
                throw new ArgumentException();
            }

            if (this.ItemVisualDataQueried != null)
            {
                this.ItemVisualDataQueried(this, new ViewerItemEventArgs(item));
            }
        }
コード例 #7
0
        /// <summary>
        /// Fires the <see cref="Kamilla.Network.Viewing.NetworkLogViewerBase.ItemParsingDone"/> event
        /// with the specified <see cref="Kamilla.Network.Viewing.ViewerItem"/>.
        /// </summary>
        /// <param name="item">
        /// The <see cref="Kamilla.Network.Viewing.ViewerItem"/> whose parsing has finished.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        /// <c>item</c> is null.
        /// </exception>
        /// <exception cref="System.ArgumentException">
        /// <c>item</c> is invalid.
        /// </exception>
        protected internal virtual void OnItemParsingDone(ViewerItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException();
            }

            if (item.Viewer != this)
            {
                throw new ArgumentException();
            }

            if (this.ItemParsingDone != null)
            {
                this.ItemParsingDone(this, new ViewerItemEventArgs(item));
            }
        }
コード例 #8
0
        void IViewTab.Fill(Protocol protocol, ViewerItem item)
        {
            ((IViewTab)this).Reset();

            m_datas = ParsingHelper.ExtractBinaryDatas(protocol, item);
            int count = m_datas.Length;

            if (count > 0)
            {
                ui_cbDatas.Items.Clear();

                for (int i = 0; i < count; i++)
                    ui_cbDatas.Items.Add(ParsingHelper.GetContentName(m_datas[i].Item1, i));

                ui_cbDatas.SelectedIndex = 0;

                if (count > 1)
                    ui_cbDatas.IsEnabled = true;

                //this.SelectData(0);
            }

            this.IsFilled = true;
        }
コード例 #9
0
 /// <summary>
 /// Flags the specified <see cref="Kamilla.Network.Viewing.ViewerItem"/> for parsing.
 /// </summary>
 /// <param name="item">
 /// The <see cref="Kamilla.Network.Viewing.ViewerItem"/> that should be flagged for parsing.
 /// </param>
 public abstract void EnqueueParsing(ViewerItem item);
コード例 #10
0
 protected internal virtual void OnItemParserChanged(ViewerItem item,
     PacketParser oldParser, PacketParser newParser)
 {
 }
コード例 #11
0
ファイル: WowProtocol.cs プロジェクト: CarlosX/Kamilla.Wow
        protected override PacketParser InternalCreateParser(ViewerItem item)
        {
            var packet = item.Packet as WowPacket;
            if (packet == null)
                return null;

            return XmlParser.GetParser(packet) ?? base.InternalCreateParser(item);
        }
コード例 #12
0
ファイル: ParsingHelper.cs プロジェクト: cuitaocrazy/Kamilla
        static PacketParser ParseIfNeed(Protocol protocol, ViewerItem item)
        {
            if (item == null)
                throw new ArgumentNullException("item");

            if (protocol == null)
                throw new ArgumentNullException("protocol");

            if (item.Parser == null)
                protocol.CreateParser(item);

            var parser = item.Parser;

            if (!parser.IsParsed)
                parser.Parse();

            return parser;
        }
コード例 #13
0
ファイル: ViewerItemEventArgs.cs プロジェクト: brecky/Kamilla
 /// <summary>
 /// Initializes a new instance of <see cref="Kamilla.Network.Viewing.ViewerItemEventArgs"/>
 /// for the specified <see cref="Kamilla.Network.Viewing.ViewerItem"/>.
 /// </summary>
 /// <param name="item">
 /// The <see cref="Kamilla.Network.Viewing.ViewerItem"/> related to the event.
 /// </param>
 public ViewerItemEventArgs(ViewerItem item)
 {
     m_item = item;
 }
コード例 #14
0
        protected override void OnItemParserChanged(ViewerItem item, PacketParser oldParser, PacketParser newParser)
        {
            base.OnItemParserChanged(item, oldParser, newParser);

            if (oldParser == null && newParser != null)
            {
                lock (m_parserItems)
                {
                    if (m_parserItems.Count >= s_maxAllocations)
                        m_parserItems.Dequeue().Parser = null;

                    m_parserItems.Enqueue(item);
                }
            }
        }
コード例 #15
0
        void m_currentLog_PacketAdded(object sender, PacketAddedEventArgs e)
        {
            var item = new ViewerItem(this, (NetworkLog)sender, e.Packet, m_items.Count);
            m_items.Add(item);

            if (this.ItemAdded != null)
                this.ItemAdded(this, new ViewerItemEventArgs(item));
        }
コード例 #16
0
ファイル: Protocol.cs プロジェクト: CarlosX/Kamilla
 public abstract string PacketContentsViewHeader(ViewerItem item);
コード例 #17
0
ファイル: DefaultProtocol.cs プロジェクト: CarlosX/Kamilla
 public override string PacketContentsViewHeader(ViewerItem item)
 {
     return string.Empty;
 }
コード例 #18
0
ファイル: DefaultProtocol.cs プロジェクト: CarlosX/Kamilla
 protected override PacketParser InternalCreateParser(ViewerItem item)
 {
     return null;
 }
コード例 #19
0
 /// <summary>
 /// Flags the specified <see cref="Kamilla.Network.Viewing.ViewerItem"/> for parsing.
 /// </summary>
 /// <param name="item">
 /// The <see cref="Kamilla.Network.Viewing.ViewerItem"/> that should be flagged for parsing.
 /// </param>
 public abstract void EnqueueParsing(ViewerItem item);
コード例 #20
0
 protected internal virtual void OnItemParserChanged(ViewerItem item,
                                                     PacketParser oldParser, PacketParser newParser)
 {
 }
コード例 #21
0
ファイル: WowProtocol.cs プロジェクト: CarlosX/Kamilla.Wow
 ItemVisualData CreateDataForItem(ViewerItem item)
 {
     return new ItemVisualData(item);
 }
コード例 #22
0
        /// <summary>
        /// Fires the <see cref="Kamilla.Network.Viewing.NetworkLogViewerBase.ItemParsingDone"/> event
        /// with the specified <see cref="Kamilla.Network.Viewing.ViewerItem"/>.
        /// </summary>
        /// <param name="item">
        /// The <see cref="Kamilla.Network.Viewing.ViewerItem"/> whose parsing has finished.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        /// <c>item</c> is null.
        /// </exception>
        /// <exception cref="System.ArgumentException">
        /// <c>item</c> is invalid.
        /// </exception>
        protected internal virtual void OnItemParsingDone(ViewerItem item)
        {
            if (item == null)
                throw new ArgumentNullException();

            if (item.Viewer != this)
                throw new ArgumentException();

            if (this.ItemParsingDone != null)
                this.ItemParsingDone(this, new ViewerItemEventArgs(item));
        }
コード例 #23
0
 void FinishSearch(ViewerItem item)
 {
     if (item != null)
         this.SelectedItem = item;
     else
         MessageWindow.Show(this, Strings.Menu_Search, Strings.Search_NotFound);
 }
コード例 #24
0
        protected internal virtual void OnItemVisualDataQueried(ViewerItem item)
        {
            if (item == null)
                throw new ArgumentNullException();

            if (item.Viewer != this)
                throw new ArgumentException();

            if (this.ItemVisualDataQueried != null)
                this.ItemVisualDataQueried(this, new ViewerItemEventArgs(item));
        }
コード例 #25
0
ファイル: ParsingHelper.cs プロジェクト: cuitaocrazy/Kamilla
        public static ValueTuple<object, ImageSource>[] ExtractImages(Protocol protocol, ViewerItem item,
            bool convertImages = false)
        {
            var parser = ParseIfNeed(protocol, item);

            var result = new List<ValueTuple<object, ImageSource>>(parser.ContainedData.Count);

            foreach (var obj in parser.ContainedData)
            {
                var img = obj as ImageSource;
                if (img != null)
                {
                    result.Add(new ValueTuple<object, ImageSource>(obj, img));
                    continue;
                }

                if (convertImages)
                {
                    var bytes = obj as byte[];
                    if (bytes != null)
                    {
                        try
                        {
                            using (var stream = new MemoryStream(bytes))
                            {
                                var decoder = BitmapDecoder.Create(stream,
                                    BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);

                                result.Add(new ValueTuple<object, ImageSource>(obj, decoder.Frames[0]));
                            }
                        }
                        catch
                        {
                        }
                        continue;
                    }
                }

                // cannot interpret this
            }

            return result.ToArray();
        }
コード例 #26
0
ファイル: Protocol.cs プロジェクト: CarlosX/Kamilla
        protected virtual PacketParser InternalCreateParser(ViewerItem item)
        {
            var packet = item.Packet as IPacketWithOpcode;
            if (packet == null)
                return null;

            Type parserType;
            if (m_wrapper.m_parsers.TryGetValue(packet.Opcode, out parserType))
                return (PacketParser)Activator.CreateInstance(parserType);

            return null;
        }
コード例 #27
0
ファイル: ParsingHelper.cs プロジェクト: cuitaocrazy/Kamilla
        public static ValueTuple<object, string>[] ExtractStrings(Protocol protocol, ViewerItem item,
            Encoding stringEncoding = null)
        {
            var parser = ParseIfNeed(protocol, item);

            var result = new List<ValueTuple<object, string>>(parser.ContainedData.Count);

            foreach (var obj in parser.ContainedData)
            {
                var str = obj as string;
                if (str != null)
                {
                    result.Add(new ValueTuple<object, string>(obj, str));
                    continue;
                }

                var chars = obj as char[];
                if (chars != null)
                {
                    result.Add(new ValueTuple<object, string>(obj, new string(chars)));
                    continue;
                }

                if (stringEncoding != null)
                {
                    var bytes = obj as byte[];
                    if (bytes != null)
                    {
                        try
                        {
                            result.Add(new ValueTuple<object, string>(obj, stringEncoding.GetString(bytes)));
                            continue;
                        }
                        catch
                        {
                        }
                    }
                }

                // cannot interpret this
            }

            return result.ToArray();
        }
コード例 #28
0
        public override void EnqueueParsing(ViewerItem item)
        {
            lock (m_parsingQueue)
                m_parsingQueue.Enqueue(item);

            this.StartParsing();
        }
コード例 #29
0
ファイル: ParsingHelper.cs プロジェクト: cuitaocrazy/Kamilla
        public static ValueTuple<object, byte[]>[] ExtractBinaryDatas(Protocol protocol, ViewerItem item,
            Encoding stringEncoding = null, Type imageEncoderType = null)
        {
            var parser = ParseIfNeed(protocol, item);
            ConstructorInfo ctor = null;
            object[] ctorArgs = null;
            if (imageEncoderType != null)
            {
                ctor = imageEncoderType.GetConstructor(BindingFlags.Public, null,
                    new[] { typeof(Stream), typeof(BitmapCreateOptions), typeof(BitmapCacheOption) }, null);

                if (ctor == null)
                {
                    ctor = imageEncoderType.GetConstructor(BindingFlags.Public, null,
                        new[] { typeof(Stream) }, null);

                    ctorArgs = new object[]
                    {
                        null,
                        BitmapCreateOptions.PreservePixelFormat,
                        BitmapCacheOption.Default
                    };
                }
                else
                {
                    ctorArgs = new object[]
                    {
                        null
                    };
                }

                if (ctor == null)
                    throw new ArgumentException("imageEncoderType");
            }

            var result = new List<ValueTuple<object, byte[]>>(parser.ContainedData.Count);

            foreach (var obj in parser.ContainedData)
            {
                var bytes = obj as byte[];
                if (bytes != null)
                {
                    result.Add(new ValueTuple<object, byte[]>(obj, bytes));
                    continue;
                }

                if (stringEncoding != null)
                {
                    var str = obj as string;
                    if (str != null)
                    {
                        try
                        {
                            result.Add(new ValueTuple<object, byte[]>(obj, stringEncoding.GetBytes(str)));
                        }
                        catch
                        {
                        }
                        continue;
                    }
                }

                if (imageEncoderType != null)
                {
                    var img = obj as ImageSource;
                    if (img != null)
                    {
                        try
                        {
                            using (var stream = new MemoryStream())
                            {
                                ctorArgs[0] = stream;
                                var encoder = (BitmapEncoder)ctor.Invoke(ctorArgs);
                                encoder.Save(stream);
                                result.Add(new ValueTuple<object, byte[]>(obj, stream.ToArray()));
                            }
                        }
                        catch
                        {
                        }
                        continue;
                    }
                }

                // cannot interpret this
            }

            return result.ToArray();
        }
コード例 #30
0
        protected override void OnItemVisualDataChanged(ViewerItem item, object oldData, object newData)
        {
            base.OnItemVisualDataChanged(item, oldData, newData);

            if (oldData == null && newData != null)
            {
                lock (m_dataItems)
                {
                    if (m_dataItems.Count >= s_maxAllocations)
                        m_dataItems.Dequeue().VisualData = null;

                    m_dataItems.Enqueue(item);
                }
            }
        }
コード例 #31
0
ファイル: WowProtocol.cs プロジェクト: CarlosX/Kamilla.Wow
        public override string PacketContentsViewHeader(ViewerItem item)
        {
            var parser = item.Parser;
            var packet = item.Packet;
            var wowPacket = packet as WowPacket;
            var opcodePacket = packet as IPacketWithOpcode;

            int dataLength = packet.Data.Length;
            var builder = new StringBuilder(128);

            builder
                .Append("Packet ")
                .Append((packet.Direction == TransferDirection.ToServer) ? "C->S" : "S->C");

            if (opcodePacket != null)
            {
                var intOpcode = opcodePacket.Opcode;
                var opcode = (WowOpcodes)intOpcode;
                builder
                    .Append(", ").Append(opcode.ToString())
                    .Append(" (").Append(intOpcode)
                    .Append(", 0x").Append(intOpcode.ToString("X4"))
                    .Append(", ").Append(
                        (opcode.IsJamOpcode() ? "jam " + opcode.CondenseJamOpcode() :
                        (opcode.IsAuthOpcode() ? "auth " + opcode.CondenseAuthOpcode() :
                        (opcode.IsRegularOpcode() ? "cond " + opcode.CondenseOpcode() : "other")))
                        )
                    .Append(")");
            }

            builder
                .Append(", ").Append(dataLength)
                .Append(" bytes");

            if (packet.Flags != 0)
                builder.AppendLine().Append("Flags: ").Append(packet.Flags.ToString());

            if (wowPacket != null && wowPacket.WowFlags != 0)
                builder.AppendLine().Append("WoW Flags: ").Append(wowPacket.WowFlags.ToString());

            return builder.ToString();
        }
コード例 #32
0
ファイル: SearchWindow.xaml.cs プロジェクト: CarlosX/Kamilla
 void FinishSearch(ViewerItem item)
 {
     if (item != null)
     {
         m_window.ui_lvPackets.SelectedIndex = item.Index;
         m_window.ui_lvPackets.ScrollIntoView(item);
     }
     else
         MessageWindow.Show(this, Strings.Menu_Search, Strings.Search_NotFound);
 }
コード例 #33
0
 /// <summary>
 /// Initializes a new instance of <see cref="Kamilla.Network.Viewing.ViewerItemEventArgs"/>
 /// for the specified <see cref="Kamilla.Network.Viewing.ViewerItem"/>.
 /// </summary>
 /// <param name="item">
 /// The <see cref="Kamilla.Network.Viewing.ViewerItem"/> related to the event.
 /// </param>
 public ViewerItemEventArgs(ViewerItem item)
 {
     m_item = item;
 }