0

I'm trying to write a simple WebSocket server in vb.net. I am able to establish connection and send data from server to client. I'm failing at decoding frames sent from client. I am able to decode only part of it.

I was trying to implement pseudo-code from this answer: How can I send and receive..., but as I've said - I am able to decode only part of the frame.

Messages from client Messages after decoding

This is my code for decoding frames from client:

bytesLen = netStream.Read(bytesArray, 0, bytesArray.Length)

If bytesArray.Length > 1 Then
    Msg("---------------------------------------------------")
    Msg("data type: " & bytesArray(0))

    Dim secondByte As Byte = bytesArray(1)
    Dim theLength As UInteger = secondByte And 127
    Dim indexFirstMask As Integer = 2
    If theLength = 126 Then
        indexFirstMask = 4
    ElseIf theLength = 127 Then
        indexFirstMask = 10
    End If
    Msg("indexFirstMask: " & indexFirstMask)
    Dim masks As New List(Of Byte)

    Dim x As Integer = indexFirstMask
    While (x < indexFirstMask + 4)
        masks.Add(bytesArray(x))
        x += 1
    End While

    Dim indexFirstDataByte = indexFirstMask + 4
    Dim decoded(bytesLen - indexFirstDataByte) As Byte

    Dim i As Integer = 0, j As Integer = 0
    For i = indexFirstDataByte To bytesLen Step 1
        Dim mask As Byte = masks(j Mod 4)
        Dim encodedByte As Byte = bytesArray(i)
        decoded(j) = (encodedByte Xor mask)
        j += 1
    Next

    Msg("FROM CLIENT: '" & System.Text.Encoding.UTF8.GetString(decoded) & "'")
    SendMessage(sck, "CONNECTION_OK")
End If

I've inspected this code many times and every time I couldn't find any differences between pseudo-code from the answer above.

What am I doing wrong?

Community
  • 1
  • 1
user3561694
  • 105
  • 1
  • 9

1 Answers1

0

I have fixed my problem myself. There's fix:

Dim indexFirstMask As Integer = 1
If theLength = 126 Then
    indexFirstMask = 3
ElseIf theLength = 127 Then
    indexFirstMask = 9
End If
user3561694
  • 105
  • 1
  • 9