Projects

Find all our projects in development below.
All source code is GNU General Public License (GPL)

javaSpy

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

Download frmPacketDisplay.vb

Back to file list


Back to project page