Find all our projects in development below.
All source code is GNU General Public License (GPL)
Browsing frmPacketDisplay.vb (11.49 KB)
Option Explicit On
Imports System.Text
Imports System.Text.ASCIIEncoding
Imports javaSpy.clsPacketMonitor
Imports Be.Windows.Forms
Public Class frmPacketDisplay
Private thisPacket As clsPacket = Nothing
Private _Packet As DynamicByteProvider = Nothing
Private Const BytesPerLine As Integer = 11
Public Sub New(ByVal p As clsPacket)
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
thisPacket = p
End Sub
Private Sub _showWaitCursor(ByVal bShow As Boolean)
' show/hide the hourglass
If bShow Then
Me.Cursor = Cursors.WaitCursor
Me.UseWaitCursor = True
Else
Me.UseWaitCursor = False
Me.Cursor = Cursors.Arrow
End If
End Sub
Private Function LocationToClient(ByVal obj As Control) As Point
Dim offsetX As Integer = 0
Dim offsetY As Integer = 0
Do While Not (obj Is Nothing) AndAlso _
Not (obj.Equals(obj.TopLevelControl))
offsetX += obj.Left
offsetY += obj.Top
obj = obj.Parent
Loop
Return New Point(offsetX + 1, offsetY + 1)
End Function
Private Sub PrepareToolbar()
With hexPacket
Try
btnCut.Enabled = .CanCut
Catch
btnCut.Enabled = False
End Try
Try
btnCopy.Enabled = .CanCopy
Catch
btnCopy.Enabled = False
End Try
Try
btnPaste.Enabled = .CanPaste
Catch
btnPaste.Enabled = False
End Try
btnDelete.Enabled = .SelectionLength > 0
btnSelectAll.Enabled = .ByteProvider.Length > 0 And _
.ByteProvider.Length <> .SelectionLength
btnFind.Enabled = .ByteProvider.Length > 0
End With
End Sub
Private Sub frmPacketDisplay_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
splitMain.BackColor = Color.FromKnownColor(KnownColor.ControlDark)
End Sub
Private Sub frmPacketDisplay_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Deactivate
splitMain.BackColor = Color.FromKnownColor(KnownColor.InactiveBorder)
End Sub
Private Sub frmPacketDisplay_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
With lvPacket
.Items.Add(New ListViewItem(New String() {"Time", thisPacket.Time.ToString()}))
.Items.Add(New ListViewItem(New String() {"Source", thisPacket.Source}))
.Items.Add(New ListViewItem(New String() {"Destination", thisPacket.Destination}))
.Items.Add(New ListViewItem(New String() {"Protocol", thisPacket.Protocol.ToString()}))
.Items.Add(New ListViewItem(New String() {"Time To Live", thisPacket.TimeToLive.ToString()}))
.Items.Add(New ListViewItem(New String() {"Version", thisPacket.Version.ToString()}))
.Items.Add(New ListViewItem(New String() {"Header Length", thisPacket.HeaderLength.ToString()}))
.Items.Add(New ListViewItem(New String() {"Precedence", thisPacket.Precedence.ToString()}))
.Items.Add(New ListViewItem(New String() {"Delay", thisPacket.Delay.ToString()}))
.Items.Add(New ListViewItem(New String() {"Throughput", thisPacket.Throughput.ToString()}))
.Items.Add(New ListViewItem(New String() {"Reliability", thisPacket.Reliability.ToString()}))
.Items.Add(New ListViewItem(New String() {"Total Length", thisPacket.TotalLength.ToString()}))
.Items.Add(New ListViewItem(New String() {"Identification", thisPacket.Identification.ToString()}))
.Items.Add(New ListViewItem(New String() {"Checksum", thisPacket.Checksum(0).ToString("X2") + thisPacket.Checksum(1).ToString("X2")}))
End With
Dim _b() As Byte = {}
_Packet = New DynamicByteProvider(_b)
hexPacket.ByteProvider = _Packet
End Sub
Private Sub frmPacketDisplay_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
_Packet.Bytes.AddRange(thisPacket.Raw)
hexPacket.Refresh()
hexPacket.VScrollBarVisible = False
hexPacket.VScrollBarVisible = True
hexPacket.SelectionStart = 0
hexPacket.ScrollByteIntoView(0)
End Sub
Private Sub frmPacketDisplay_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
lvPacket.Columns(1).Width = Math.Round(Math.Abs(lvPacket.Width - _
lvPacket.Columns(0).Width - SystemInformation.VerticalScrollBarWidth - 6) / 2) * 2
If Me.MinimumSize.Width > 0 Then
Dim cols As Integer = BytesPerLine + Math.Round( _
(Me.Size.Width - Me.MinimumSize.Width - _
SystemInformation.FrameBorderSize.Width) / 36)
hexPacket.BytesPerLine = cols
End If
End Sub
Private Sub mnuCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCopy.Click
Try
Dim copyData As String = ""
For i As Integer = 0 To lvPacket.Items.Count - 1
copyData += lvPacket.Items(i).Text + vbTab + lvPacket.Items(i).SubItems(1).Text + vbCrLf
Next
Clipboard.SetText(copyData, TextDataFormat.Text)
Catch
End Try
End Sub
Private Sub hexPacket_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles hexPacket.KeyDown
If e.Control And e.KeyCode = Keys.X Then ' cut
btnCut_Click(Nothing, Nothing)
e.Handled = True
ElseIf e.Control And e.KeyCode = Keys.C Then ' copy
btnCopy_Click(Nothing, Nothing)
e.Handled = True
ElseIf e.Control And e.KeyCode = Keys.V Then ' paste
btnPaste_Click(Nothing, Nothing)
e.Handled = True
End If
End Sub
Private Sub hexPacket_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles hexPacket.KeyUp
If e.KeyCode = Keys.F3 Then btnFind_Click(Nothing, Nothing)
End Sub
Private Sub hexPacket_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles hexPacket.MouseEnter
pnlCmd.Location = LocationToClient(hexPacket)
PrepareToolbar()
pnlCmd.Visible = True
End Sub
Private Sub hexPacket_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles hexPacket.MouseLeave
Dim pnlRect As Rectangle = Me.RectangleToScreen( _
New Rectangle(pnlCmd.Left, pnlCmd.Top, _
pnlCmd.Width, pnlCmd.Height))
If Not pnlRect.Contains(Control.MousePosition) Then _
pnlCmd.Visible = False
End Sub
Private Sub hexPacket_SelectionLengthChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles hexPacket.SelectionLengthChanged
PrepareToolbar()
End Sub
Private Sub hexPacket_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles hexPacket.TextChanged
PrepareToolbar()
End Sub
Private Sub toolEdit_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles toolEdit.MouseEnter
PrepareToolbar()
End Sub
Private Sub toolEdit_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles toolEdit.MouseLeave
Dim hexRect As Rectangle = hexPacket.Parent.RectangleToScreen( _
New Rectangle(hexPacket.Left, hexPacket.Top, _
hexPacket.Width, hexPacket.Height))
If Not hexRect.Contains(Control.MousePosition) Then _
pnlCmd.Visible = False
End Sub
Private Sub btnCut_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCut.Click
Dim bCut As Boolean = False
Try
If hexPacket.CanCut Then
hexPacket.Cut()
bCut = True
End If
Catch
End Try
If bCut And hexPacket.SelectionLength > 0 Then
Try
hexPacket.ByteProvider.DeleteBytes( _
hexPacket.SelectionStart, hexPacket.SelectionLength)
Catch
End Try
hexPacket.SelectionLength = 0
hexPacket.Refresh()
End If
PrepareToolbar()
End Sub
Private Sub btnCopy_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCopy.Click
Try
If hexPacket.CanCopy Then hexPacket.Copy()
Catch
End Try
PrepareToolbar()
End Sub
Private Sub btnPaste_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPaste.Click
Try
If hexPacket.CanPaste Then hexPacket.Paste()
Catch
End Try
PrepareToolbar()
End Sub
Private Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDelete.Click
Try
hexPacket.ByteProvider.DeleteBytes( _
hexPacket.SelectionStart, hexPacket.SelectionLength)
Catch
End Try
hexPacket.SelectionLength = 0
hexPacket.Refresh()
PrepareToolbar()
End Sub
Private Sub btnSelectAll_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSelectAll.Click
Try
hexPacket.SelectionStart = 0
hexPacket.SelectionLength = hexPacket.ByteProvider.Length
Catch
End Try
PrepareToolbar()
End Sub
Private Sub btnFind_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFind.Click
Static lastFindText As String = ""
Dim findText As String = ""
If e Is Nothing And lastFindText <> "" Then
findText = lastFindText
Else
findText = InputBox("Enter the text to find:", Application.ProductName, lastFindText)
End If
If findText <> "" Then
_showWaitCursor(True)
Dim ret As Long = hexPacket.Find(Encoding.ASCII.GetBytes( _
findText), hexPacket.SelectionStart + IIf(hexPacket.SelectionLength > 0, 1, 0))
_showWaitCursor(False)
If ret = -1 Then
MessageBox.Show("Cannot find """ + findText + """", Application.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Information)
findText = ""
End If
End If
lastFindText = findText
End Sub
Private Sub btnStripNulls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStripNulls.Click
_showWaitCursor(True)
_Packet.Bytes.Clear()
_Packet.Bytes.AddRange(ASCII.GetBytes(ASCII.GetString(thisPacket.Raw).Replace(vbNullChar, "").ToCharArray()))
hexPacket.Refresh()
hexPacket.VScrollBarVisible = False
hexPacket.VScrollBarVisible = True
hexPacket.SelectionStart = hexPacket.ByteProvider.Length
hexPacket.ScrollByteIntoView(hexPacket.SelectionStart - 1)
_showWaitCursor(False)
btnStripNulls.Enabled = False
End Sub
End Class