• Welcome to Valhalla Legends Archive.
 

help.how can i get the length of compress packet?

Started by 231131028705, March 14, 2009, 09:56 AM

Previous topic - Next topic

Spht

This is the most weird looking thread to scroll through

fataly

Quote from: Spht on March 16, 2009, 01:59 PM
This is the most weird looking thread to scroll through
Im totally same with you.

231131028705

#17
finally i get what i want and explaint how to work later.
it 's too long ,i do't know how make it short.


19/03/2009 22:32:1259-01-00-00-00-03-66-66-67-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
19/03/2009 22:32:12AA-00-01-00-00-00-0C-69-59-F9-FF-1F
19/03/2009 22:32:1276-00-01-00-00-00
19/03/2009 22:32:1294-0E-01-00-00-00-00-00-01-02-00-01-01-00-01-D9-00-01-DA-00-01-DB-00-01-DC-00-01-03-00-01-60-00-01-62-00-01-64-00-28-66-00-3B-6A-00-01-7D-00-15
19/03/2009 22:32:1221-00-00-01-00-00-00-B5-01-00-01-01
19/03/2009 22:32:1221-00-00-01-00-00-00-BA-01-00-01-01
19/03/2009 22:32:1222-00-1A-01-00-00-00-DC-00-93-13-00
19/03/2009 22:32:1222-00-1A-01-00-00-00-DA-00-B6-13-00
19/03/2009 22:32:1221-00-00-01-00-00-00-8F-00-00-05-01
19/03/2009 22:32:1221-00-00-01-00-00-00-8F-00-00-05-01
19/03/2009 22:32:1221-00-00-01-00-00-00-8F-00-00-05-01
19/03/2009 22:32:1221-00-00-01-00-00-00-8F-00-00-05-01
19/03/2009 22:32:1221-00-00-01-00-00-00-8F-00-00-05-01
19/03/2009 22:32:1227-01-01-00-00-00-01-6F-03-02-7C-0D-00-EB-DF-06-18-00-00-00-78-F5-22-01-00-EB-DF-06-00-5F-96-08-DC-E9-5C-11-18-00-00-00
19/03/2009 22:32:129B-6D-2A-80-43-00-00
19/03/2009 22:32:1223-00-01-00-00-00-01-6A-00-FF-FF-FF-FF
.........................

231131028705

fisrt seperate  the compressed packets.


For compressed messages:

(BYTE)      Message Size
(BYTE)      Decompressed Message ID
(VOID)      Message Data

actually
(BYTE)      Message Size
or
(word)      Message Size

case by case.i don't know how it work.


Public Sub gamedate(ByRef apacket() As Byte, ByVal alen As Long, Optional ByVal tcp As Byte = 4)
        Select Case apacket(0)
            Case &HAE
                subae(apacket, alen)
            Case &H6
                sub06(apacket, alen)
            Case &H7
                sub407(apacket, alen)
                If Me.this_game Is Nothing Then
                    this_game = New game
                Else
                    'Me.this_game.ongamestart()
                End If
            Case 0
                If apacket(1) <> 90 Then
                    Me.status = "proxy unable connect to gs"
                End If
            Case Else
                Dim J, llen, buffer_len As Integer
                Dim buffer(1024 * 64) As Byte
                llen = alen
                Do While llen > 0
                    buffer_len = (apacket(J) << 4 >> 4) * 256 + apacket(J + 1)
                    If apacket(J) < llen And buffer_len <= llen Then

                        llen -= buffer_len
                    Else
                        buffer_len = apacket(J)
                        llen -= buffer_len

                    End If
                    System.Array.Copy(apacket, J, buffer, 0, buffer_len)
                    J += buffer_len
                    pop_packet(buffer, buffer_len)
                Loop
        End Select

    End Sub

231131028705

sorry for my pool language.

Private Sub pop_packet(ByVal apacket() As Byte, ByVal alen As Integer)
        Dim buffer(1024 * 32) As Byte
        Dim result As Integer
        If alen = apacket(0) Then
            result = D2Packets.D2Packets.D2GSCompression.DecompressData(apacket, 1, alen - 1, buffer)
        Else
            result = D2Packets.D2Packets.D2GSCompression.DecompressData(apacket, 2, alen - 2, buffer)
        End If
        Dim i, len As Integer
        i = 0
        Do While i < result
            If buffer(i) < &HB4 Then
                If packetsize(buffer(i)) > 0 Then
                    len = packetsize(buffer(i))
                ElseIf packetsize(buffer(i)) = -1 Then
                    Select Case buffer(i)
                        Case &H26
                            Dim ll As Integer = 10
                            Dim xo As Byte = 0
                            Do Until xo = 2
                                ll = ll + 1
                                If buffer(i + ll) = 0 Then
                                    xo += 1
                                End If
                            Loop
                            len = ll + 1

                        Case &H5B
                            len = 36
                        Case &H94
                            len = buffer(i + 1) * 3 + 6
                        Case &HA8
                            len = buffer(i + 6)
                        Case &HAA
                            len = buffer(i + 6)
                        Case &HAC
                            len = buffer(i + 12)
                        Case &HAE
                            len = buffer(i + 6)
                        Case &H9C
                            len = buffer(i + 2)
                        Case &H9D
                            len = buffer(i + 2)
                        Case &HAC
                            len = buffer(i + 12)
                        Case &HAF
                            len = 2
                        Case Else
                            len = 2
                    End Select
                End If
                Dim tmp_packet(len - 1) As Byte
                System.Array.Copy(buffer, i, tmp_packet, 0, len)
                i = i + len
                this_game.onpacketreceive(tmp_packet, len)
            End If

        Loop
    End Sub