/// <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; }
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; }
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; }
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; }
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; }
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)); } }
/// <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)); } }
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; }
/// <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);
protected internal virtual void OnItemParserChanged(ViewerItem item, PacketParser oldParser, PacketParser newParser) { }
protected override PacketParser InternalCreateParser(ViewerItem item) { var packet = item.Packet as WowPacket; if (packet == null) return null; return XmlParser.GetParser(packet) ?? base.InternalCreateParser(item); }
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; }
/// <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; }
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); } } }
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)); }
public abstract string PacketContentsViewHeader(ViewerItem item);
public override string PacketContentsViewHeader(ViewerItem item) { return string.Empty; }
protected override PacketParser InternalCreateParser(ViewerItem item) { return null; }
ItemVisualData CreateDataForItem(ViewerItem item) { return new ItemVisualData(item); }
/// <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)); }
void FinishSearch(ViewerItem item) { if (item != null) this.SelectedItem = item; else MessageWindow.Show(this, Strings.Menu_Search, Strings.Search_NotFound); }
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)); }
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(); }
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; }
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(); }
public override void EnqueueParsing(ViewerItem item) { lock (m_parsingQueue) m_parsingQueue.Enqueue(item); this.StartParsing(); }
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(); }
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); } } }
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(); }
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); }