private void mNextOpcodeButton_Click(object pSender, EventArgs pArgs) { SessionForm session = DockPanel.ActiveDocument as SessionForm; if (session == null || mOpcodeCombo.SelectedIndex < 0) { return; } Pair <bool, ushort> search = (DockPanel.ActiveDocument as SessionForm).Opcodes[mOpcodeCombo.SelectedIndex]; int initialIndex = session.ListView.SelectedIndices.Count == 0 ? 0 : session.ListView.SelectedIndices[0] + 1; for (int index = initialIndex; index < session.ListView.Items.Count; ++index) { FiestaPacket packet = session.ListView.Items[index] as FiestaPacket; if (packet.Outbound == search.First && packet.Opcode == search.Second) { session.ListView.SelectedIndices.Clear(); session.ListView.SelectedIndices.Add(index); packet.EnsureVisible(); session.ListView.Focus(); return; } } MessageBox.Show("No further packets found with the selected opcode.", "End Of Search", MessageBoxButtons.OK, MessageBoxIcon.Information); session.ListView.Focus(); }
private void mPrevSeq_Click(object sender, EventArgs e) { SessionForm session = DockPanel.ActiveDocument as SessionForm; if (session == null) { return; } int initialIndex = session.ListView.SelectedIndices.Count == 0 ? 0 : session.ListView.SelectedIndices[0]; byte[] pattern = (mSequenceHex.ByteProvider as DynamicByteProvider).Bytes.ToArray(); long startIndex = MainForm.DataForm.HexBox.SelectionLength > 0 ? MainForm.DataForm.HexBox.SelectionStart : -1; for (int index = initialIndex; index >= 0; --index) { FiestaPacket packet = session.ListView.Items[index] as FiestaPacket; long searchIndex = startIndex + 1; bool found = false; while (searchIndex <= packet.InnerBuffer.Length - pattern.Length) { found = true; for (int patternIndex = 0; found && patternIndex < pattern.Length; ++patternIndex) { found = packet.InnerBuffer[searchIndex + patternIndex] == pattern[patternIndex]; } if (found) { break; } ++searchIndex; } if (found) { session.ListView.SelectedIndices.Clear(); session.ListView.SelectedIndices.Add(index); packet.EnsureVisible(); MainForm.DataForm.HexBox.SelectionStart = searchIndex; MainForm.DataForm.HexBox.SelectionLength = pattern.Length; MainForm.DataForm.HexBox.ScrollByteIntoView(); session.ListView.Focus(); return; } startIndex = -1; } MessageBox.Show("No further sequences found.", "End Of Search", MessageBoxButtons.OK, MessageBoxIcon.Information); session.ListView.Focus(); }