progress: Worked on some more of the packet decoding
This commit is contained in:
parent
aacf61b849
commit
378d121566
@ -1,16 +0,0 @@
|
||||
package connector
|
||||
|
||||
import (
|
||||
"io"
|
||||
)
|
||||
|
||||
// This is the size that Netty apparently uses to read from the incoming
|
||||
// connection at a time
|
||||
//
|
||||
// This is documented in a mod that removes this limit:
|
||||
// https://www.curseforge.com/minecraft/mc-mods/xl-packets
|
||||
const nettyMaxPacketSize = 2_097_152 // 16MiB
|
||||
|
||||
func handleGameConnection(conn io.Reader) {
|
||||
panic("Unhandled game traffic")
|
||||
}
|
@ -1,11 +1,13 @@
|
||||
package connector
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
|
||||
mcnet "github.com/Tnze/go-mc/net"
|
||||
pk "github.com/Tnze/go-mc/net/packet"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
@ -46,32 +48,61 @@ var ProxyPortCommand = &cobra.Command{
|
||||
},
|
||||
}
|
||||
|
||||
func handleConn(conn net.Conn) {
|
||||
defer conn.Close()
|
||||
log.Infof("Received connection from %v", conn.RemoteAddr())
|
||||
func handleConn(clientConn net.Conn) {
|
||||
defer log.Info("Closed all connections")
|
||||
defer clientConn.Close()
|
||||
log.Infof("Received connection from %v", clientConn.RemoteAddr())
|
||||
// Open a connection to the remote server
|
||||
serverConn, err := net.Dial("tcp", fmt.Sprintf(":%d", outputPort))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
log.Errorf("Could not connect to remote server: %v", err)
|
||||
return
|
||||
}
|
||||
defer serverConn.Close()
|
||||
|
||||
var sidecarServerDataStream bytes.Buffer
|
||||
// Wrap the server's connection into a mc conn to read packets
|
||||
wrappedServerConn := mcnet.WrapConn(serverConn)
|
||||
defer wrappedServerConn.Close()
|
||||
|
||||
// Divert any data read from the server to be copied into the sidecar data stream
|
||||
serverReader := io.TeeReader(serverConn, &sidecarServerDataStream)
|
||||
// Writes to the client connection any data read from the server connection
|
||||
wrappedServerConn.Reader = io.TeeReader(wrappedServerConn.Reader, clientConn)
|
||||
|
||||
go handleGameConnection(&sidecarServerDataStream)
|
||||
|
||||
// Start copying data from the server to the client
|
||||
go func() {
|
||||
if _, err := io.Copy(conn, serverReader); err != nil {
|
||||
panic(err)
|
||||
log.Info("Listening for packets")
|
||||
var p pk.Packet
|
||||
for {
|
||||
if err := wrappedServerConn.ReadPacket(&p); err != nil {
|
||||
if errors.Is(err, io.EOF) {
|
||||
return
|
||||
}
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// log.Infof("Received packet with id %.2x", p.ID)
|
||||
|
||||
switch p.ID {
|
||||
case 0x20:
|
||||
panic("Incoming chunk")
|
||||
// From here: https://wiki.vg/Protocol#Chunk_Data_and_Update_Light
|
||||
case 0x25:
|
||||
var (
|
||||
// chunkX pk.Int
|
||||
// chunkZ pk.Int
|
||||
// heightmaps struct {
|
||||
// MotionBlocking []int64 `nbt:"MOTION_BLOCKING"`
|
||||
// WorldSurface []pk.NBTField `nbt:"WORLD_SURFACE"`
|
||||
// }
|
||||
// heightmaps nbt.RawMessage
|
||||
// chunkData pk.ByteArray
|
||||
)
|
||||
panic("Chunk upload called")
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// Copy data from the client to the server
|
||||
if _, err := io.Copy(serverConn, conn); err != nil {
|
||||
// Now, we need to copy the network data from the client to the server
|
||||
log.Info("Copying data from the client to the server")
|
||||
if _, err := io.Copy(wrappedServerConn, clientConn); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
16
docker-compose.yaml
Normal file
16
docker-compose.yaml
Normal file
@ -0,0 +1,16 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
mc:
|
||||
image: itzg/minecraft-server
|
||||
tty: true
|
||||
stdin_open: true
|
||||
ports:
|
||||
- "25565:25565"
|
||||
environment:
|
||||
EULA: "TRUE"
|
||||
VERSION: "1.20.2"
|
||||
ONLINE_MODE: "false"
|
||||
NETWORK_COMPRESSION_THRESHOLD: "-1"
|
||||
volumes:
|
||||
- ./data:/data
|
2
go.mod
2
go.mod
@ -3,6 +3,7 @@ module git.nicholasnovak.io/nnovak/spatial-db
|
||||
go 1.21.3
|
||||
|
||||
require (
|
||||
github.com/Tnze/go-mc v1.19.4
|
||||
github.com/charmbracelet/bubbletea v0.24.2
|
||||
github.com/charmbracelet/lipgloss v0.9.1
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
@ -12,6 +13,7 @@ require (
|
||||
require (
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect
|
||||
github.com/google/uuid v1.3.0 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.18 // indirect
|
||||
|
11
go.sum
11
go.sum
@ -1,3 +1,5 @@
|
||||
github.com/Tnze/go-mc v1.19.4 h1:9qtxH+xRJWswOYnlf/dsFY4EI2f5jsFhtqTYOObaGIE=
|
||||
github.com/Tnze/go-mc v1.19.4/go.mod h1:c1znJQglgqa1Jjs3Dr29woN/msguiJrlNtWXhKedh2U=
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
|
||||
github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY=
|
||||
@ -7,6 +9,10 @@ github.com/charmbracelet/lipgloss v0.9.1/go.mod h1:1mPmG4cxScwUQALAAnacHaigiiHB9
|
||||
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY=
|
||||
github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
|
||||
@ -30,6 +36,7 @@ github.com/muesli/termenv v0.15.1 h1:UzuTb/+hhlBugQz28rpzey4ZuKcZ03MeKsoG7IJZIxs
|
||||
github.com/muesli/termenv v0.15.1/go.mod h1:HeAQPTzpfs016yGtA4g00CsdYnVLJvxsS4ANqrZs2sQ=
|
||||
github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
|
||||
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
@ -40,8 +47,11 @@ github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
||||
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
@ -52,4 +62,5 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
Loading…
Reference in New Issue
Block a user