private void Complete(List <string> ips) { ListViewItem li = null; List <TreeNode> rem = new List <TreeNode>(); foreach (string s in ips) { lvIPs.Items.Add(s); } foreach (TreeNode n in tv.Nodes) { if (n.Nodes.Count == 0) { rem.Add(n); } else { n.Text += " (" + n.Nodes.Count + ")"; foreach (TreeNode nn in n.Nodes) { DataBlock db = (DataBlock)nn.Tag; db.DetectType(); if (db.DataType != DataBlock.DataTypes.dtBinary) { nn.Text = db.HttpFirstLine; if (db.DataType == DataBlock.DataTypes.dtHttpReq) { li = lv.Items.Add(db.HttpFirstLine); li.Tag = nn; } else {//we have some extra display room with just short HTTP response code, so lets use it.. nn.Text = " " + nn.Text + string.Format(" - 0x{0:x} bytes", db.length); if (db.isGZip) { nn.Text += " w/gzip"; } } } } } } foreach (TreeNode n in rem) { tv.Nodes.Remove(n); } lvDNS.Columns[0].Text = "DNS Requests: " + lvDNS.Items.Count; lv.Columns[0].Text = "Web Requests: " + lv.Items.Count; TimeSpan totalTime = (DateTime.Now - startTime); this.Text = " Pcap size: " + FileSizeToHumanReadable(txtPcap.Text) + string.Format(" Processing time: {0} seconds", totalTime.TotalSeconds); }
private void Complete(List <string> ips) { ListViewItem li = null; List <TreeNode> rem = new List <TreeNode>(); int ii = 0; if (rm.ErrorMessage.Length > 0) { this.Text = rm.ErrorMessage; this.Refresh(); return; } this.Text = "Loading Complete now parsing..."; this.Refresh(); foreach (string s in ips) { lvIPs.Items.Add(s); } if (ConglomerateToolStripMenuItem.Checked) { this.Text = "Conglomerating streams option checked..."; this.Refresh(); Application.DoEvents(); startOver: ii = 0; foreach (TreeNode n in tv.Nodes) { ii++; if (ii % 2 == 0) { setpb(ii, tv.Nodes.Count); } foreach (TreeNode n2 in tv.Nodes) { if (n2 != n) { if (n2.Text == n.Text) { foreach (TreeNode n3 in n2.Nodes) { TreeNode n4 = n.Nodes.Add(n3.Text); n4.Tag = n3.Tag; } tv.Nodes.Remove(n2); goto startOver; //or you get invalid object reference..removing from treeviews is tricky.. } } } } } this.Text = "Scanning for http content.."; this.Refresh(); ii = 0; foreach (TreeNode n in tv.Nodes)//parent node shows stream info.. { ii++; if (ii % 2 == 0) { setpb(ii, tv.Nodes.Count); } int st = Environment.TickCount; if (n.Nodes.Count == 0) { rem.Add(n); } else { n.Text += " (" + n.Nodes.Count + ")"; /*tv.Refresh(); * this.Refresh(); * Application.DoEvents();*/ setpb(0, 0, 2); int ni = 0; foreach (TreeNode nn in n.Nodes) //each subnode holds the actual data stream details.. { //if (System.Diagnostics.Debugger.IsAttached && (Environment.TickCount - st) > 5000) System.Diagnostics.Debugger.Break(); ni++; if (ni % 10 == 0) { setpb(ni, n.Nodes.Count, 2); } DataBlock db = (DataBlock)nn.Tag; db.DetectType(); if (db.DataType != DataBlock.DataTypes.dtBinary) { nn.Text = db.HttpFirstLine; if (db.DataType == DataBlock.DataTypes.dtHttpReq) { li = lv.Items.Add(db.HttpFirstLine); li.Tag = nn; } else {//we have some extra display room with just short HTTP response code, so lets use it.. nn.Text = " " + nn.Text + string.Format(" - 0x{0:x} bytes", db.length); if (db.isChunked) { nn.Text += " chunked "; } if (db.isGZip) { nn.Text += " w/gzip"; } } } } } } this.Text = "Pruning tree..."; this.Refresh(); foreach (TreeNode n in rem) { tv.Nodes.Remove(n); } lvDNS.Columns[0].Text = "DNS Requests: " + lvDNS.Items.Count; lv.Columns[0].Text = "Web Requests: " + lv.Items.Count; TimeSpan totalTime = (DateTime.Now - startTime); this.Text = " Pcap size: " + FileSizeToHumanReadable(txtPcap.Text) + string.Format(" Processing time: {0} seconds", totalTime.TotalSeconds); pb.Value = 0; pb2.Value = 0; }