replay testdata

This commit is contained in:
adman
2026-05-08 19:17:09 +02:00
parent 60147fd4b6
commit 3bfa70d384
14 changed files with 108 additions and 1 deletions
+83
View File
@@ -0,0 +1,83 @@
package print_replay
import (
"bytes"
"encoding/binary"
"flag"
"fmt"
"io"
"os"
"reflect"
"github.com/admin-else/strom/proto"
"github.com/admin-else/strom/proto_base"
)
var (
cmd = flag.NewFlagSet("print-replay", flag.ContinueOnError)
FileFlag = cmd.String("file", "", "The tmcpr file to print")
ProtocolVersion = cmd.Int("protocol", -1, "The protocol version")
)
func UnpackPacket(r io.Reader) (packet proto_base.EncodeDecodeAble, err error) {
var timestamp, length uint32
err = binary.Read(r, binary.BigEndian, &timestamp)
if err != nil {
return
}
err = binary.Read(r, binary.BigEndian, &length)
if err != nil {
return
}
b := bytes.NewBuffer(nil)
_, err = io.CopyN(b, r, int64(length))
if err != nil {
return
}
packetId, err := proto_base.DecodeVarInt(b)
if err != nil {
return
}
i, ok := proto.LookUpTypeByPacketInfo(proto_base.ToClient, proto_base.Login, packetId, int32(*ProtocolVersion))
if !ok {
packet = &proto.UnCodablePacket{Err: proto.BadPacketIdErr, Data: b.Bytes(), Direction: proto_base.ToClient}
return
}
packet = reflect.New(reflect.TypeOf(i.Type).Elem()).Interface().(proto_base.EncodeDecodeAble)
err = packet.Decode(b)
if err != nil {
packet = &proto.UnCodablePacket{Err: err, Data: b.Bytes(), Direction: proto_base.ToClient}
err = nil
}
return
}
func Run(args []string) (err error) {
err = cmd.Parse(args)
if err != nil {
return
}
if *ProtocolVersion == -1 {
return fmt.Errorf("no protocol version specified")
}
if *FileFlag == "" {
return fmt.Errorf("no file specified")
}
f, err := os.Open(*FileFlag)
if err != nil {
return
}
defer f.Close()
for {
var packet proto_base.EncodeDecodeAble
packet, err = UnpackPacket(f)
if err != nil {
return
}
fmt.Printf("Packet: %#v\n", packet)
fmt.Printf("Packet lllll: %v\n", packet)
}
}