Beispiel #1
0
 protected bool Equals(BytesHighlightning other)
 {
     if (ReferenceEquals(other, null))
     {
         return(false);
     }
     return(Offset == other.Offset && Length == other.Length);
 }
Beispiel #2
0
        public void PopulatePacketTree(XElement rootElement)
        {
            _bytesHiglightnings.Clear();
            this.Dispatcher.Invoke((Action)(() =>
            {
                // Clean up
                previewTree.Items.Clear();

                Dictionary <XElement, TreeViewItem> elementNodes = new Dictionary <XElement, TreeViewItem>();
                IEnumerable <XElement> initialNodes = rootElement.Nodes().Where(node => node is XElement).Cast <XElement>();
                Stack <XElement> elements = new Stack <XElement>(initialNodes);
                while (elements.Count > 0)
                {
                    XElement nextElem = elements.Pop();

                    // Check if this element hidden in wireshark, hide it as well
                    XAttribute hideAttr = nextElem.GetAttribute("hide");
                    if (hideAttr.ValueIs("yes"))
                    {
                        continue;
                    }

                    bool isGeneralInfo = nextElem.GetAttribute("showname").ValueIs("General information");
                    if (isGeneralInfo)
                    {
                        continue;
                    }

                    foreach (XNode subNode in nextElem.Nodes())
                    {
                        if (subNode is XElement)
                        {
                            elements.Push(subNode as XElement);
                        }
                    }

                    bool isFakeFieldWrapper = nextElem.GetAttribute("name").ValueIs("fake-field-wrapper");
                    if (isFakeFieldWrapper)
                    {
                        continue;
                    }

                    TreeViewItem parentNode = null;
                    string showname = nextElem.GetAttribute("showname")?.Value ?? nextElem.GetAttribute("name")?.Value ?? "UNKNOWN FIELD!";

                    bool isLowercaseData = showname.Equals("data", StringComparison.CurrentCulture); // Do NOT ignore case!
                    XElement lengthSubNode = nextElem
                                             .ElementNodes().FirstOrDefault(element => element.GetAttribute("showname")?.Value.StartsWith("Length") == true);
                    bool containsLengthSubNode = lengthSubNode != null;
                    if (isLowercaseData && containsLengthSubNode)
                    {
                        string length = new string(lengthSubNode.GetAttribute("showname")?.Value?.SkipWhile(c => c != ' ')
                                                   .ToArray());
                        length = length.Trim();
                        showname = $"Data ({length} bytes)";
                    }


                    XElement parent = nextElem.Parent;
                    bool hasParent = (parent != null && elementNodes.TryGetValue(parent, out parentNode));

                    bool isProtocolNode = !hasParent;

                    TreeViewItem nextNode = new TreeViewItem
                    {
                        Header = showname,
                        Background = isProtocolNode ? _protoBrush : _fieldBrush,
                        Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 0)),
                        ToolTip = null,
                        VerticalContentAlignment = VerticalAlignment.Center,
                        HorizontalContentAlignment = HorizontalAlignment.Left
                    };
                    string bytesIndexStr = nextElem.GetAttribute("pos")?.Value ?? "0";
                    int.TryParse(bytesIndexStr, out var bytesIndex);
                    string bytesLengthStr = nextElem.GetAttribute("size")?.Value ?? "0";
                    int.TryParse(bytesLengthStr, out var bytesLength);

                    // Save aside the bite highlighting instructions
                    BytesHighlightning bHighlightning = new BytesHighlightning(bytesIndex, bytesLength);
                    if (bytesLength == 0)
                    {
                        bHighlightning.Offset = 0;
                    }
                    _bytesHiglightnings[nextNode] = bHighlightning;

                    nextNode.Selected += TreeItem_Selected;

                    elementNodes[nextElem] = nextNode;
                    if (hasParent)
                    {
                        // Insert in parent's nodes list
                        parentNode.Items.Insert(0, nextNode);
                    }
                    else
                    {
                        // Insert at root level
                        previewTree.Items.Insert(0, nextNode);
                    }
                }
            }));
        }
Beispiel #3
0
 public PacketTreeSelectionChangedArgs(BytesHighlightning bytesHiglightning)
 {
     BytesHiglightning = bytesHiglightning;
 }