summaryrefslogtreecommitdiff
path: root/classic
diff options
context:
space:
mode:
authorraven <citrons@mondecitronne.com>2026-03-21 20:17:53 -0500
committerraven <citrons@mondecitronne.com>2026-03-21 20:21:41 -0500
commitbb868d2d0d4d5a16d798d01d4a2ca8573ddc8a60 (patch)
treef75915236301829ae875965d1e025dd4d79aef5a /classic
parent64902c31382443086010f8d65d4b18df91d7e9a7 (diff)
support CPE
Diffstat (limited to 'classic')
-rw-r--r--classic/cpe.go17
-rw-r--r--classic/packets.go19
2 files changed, 29 insertions, 7 deletions
diff --git a/classic/cpe.go b/classic/cpe.go
new file mode 100644
index 0000000..222ec74
--- /dev/null
+++ b/classic/cpe.go
@@ -0,0 +1,17 @@
+package classic
+
+type ExtInfo struct {
+ AppName String
+ ExtensionCount int16
+}
+func (e *ExtInfo) PacketId() byte {
+ return 0x10
+}
+
+type ExtEntry struct {
+ ExtName String
+ Version int32
+}
+func (e *ExtEntry) PacketId() byte {
+ return 0x11
+}
diff --git a/classic/packets.go b/classic/packets.go
index c1f650e..48ea80d 100644
--- a/classic/packets.go
+++ b/classic/packets.go
@@ -21,6 +21,10 @@ const (
NonOpUser = 0x00
OpUser = 0x64
)
+const (
+ NoCpe = 0x00
+ UseCpe = 0x42
+)
type PlayerId struct {
Version byte
@@ -161,7 +165,7 @@ func (p *UpdateUserType) PacketId() byte {
return 0x0f
}
-func createPacketType(packetId byte, client bool) Packet {
+func createPacketType(packetId byte, client bool, ext map[string]bool) Packet {
switch packetId {
case 0x00:
if client {
@@ -188,7 +192,8 @@ func createPacketType(packetId byte, client bool) Packet {
}
}
-func readPacket(rd io.Reader, client bool) (Packet, error) {
+func readPacket(
+ rd io.Reader, client bool, ext map[string]bool) (Packet, error) {
var b [1]byte
_, err := io.ReadFull(rd, b[:])
if err != nil {
@@ -196,7 +201,7 @@ func readPacket(rd io.Reader, client bool) (Packet, error) {
}
packetId := b[0]
- packet := createPacketType(packetId, client)
+ packet := createPacketType(packetId, client, ext)
if packet == nil {
return nil, fmt.Errorf("Unknown packet type: 0x%02x", packetId)
}
@@ -207,12 +212,12 @@ func readPacket(rd io.Reader, client bool) (Packet, error) {
return packet, nil
}
-func SReadPacket(rd io.Reader) (Packet, error) {
- return readPacket(rd, false)
+func SReadPacket(rd io.Reader, ext map[string]bool) (Packet, error) {
+ return readPacket(rd, false, ext)
}
-func CReadPacket(rd io.Reader) (Packet, error) {
- return readPacket(rd, true)
+func CReadPacket(rd io.Reader, ext map[string]bool) (Packet, error) {
+ return readPacket(rd, true, ext)
}
func WritePacket(wr io.Writer, packet Packet) error {