diff --git a/server/entranceserver/entrance_server.go b/server/entranceserver/entrance_server.go index 706aac8b3..7639c33da 100644 --- a/server/entranceserver/entrance_server.go +++ b/server/entranceserver/entrance_server.go @@ -5,6 +5,7 @@ import ( "fmt" "io" "net" + "strings" "sync" "erupe-ce/config" @@ -112,7 +113,11 @@ func (s *Server) handleEntranceServerConnection(conn net.Conn) { s.logger.Debug("Got entrance server command:\n", zap.String("raw", hex.Dump(pkt))) - data := makeSv2Resp(s.erupeConfig, s) + local := false + if strings.Split(conn.RemoteAddr().String(), ":")[0] == "127.0.0.1" { + local = true + } + data := makeSv2Resp(s.erupeConfig, s, local) if len(pkt) > 5 { data = append(data, makeUsrResp(pkt, s)...) } diff --git a/server/entranceserver/make_resp.go b/server/entranceserver/make_resp.go index 0df241260..0c007c640 100644 --- a/server/entranceserver/make_resp.go +++ b/server/entranceserver/make_resp.go @@ -17,7 +17,7 @@ var season uint8 // Server Channels var currentplayers uint16 -func encodeServerInfo(config *config.Config, s *Server) []byte { +func encodeServerInfo(config *config.Config, s *Server, local bool) []byte { serverInfos := config.Entrance.Entries bf := byteframe.NewByteFrame() @@ -30,7 +30,11 @@ func encodeServerInfo(config *config.Config, s *Server) []byte { if si.IP == "" { si.IP = config.Host } - bf.WriteUint32(binary.LittleEndian.Uint32(net.ParseIP(si.IP).To4())) + if local { + bf.WriteUint32(0x0100007F) // 127.0.0.1 + } else { + bf.WriteUint32(binary.LittleEndian.Uint32(net.ParseIP(si.IP).To4())) + } bf.WriteUint16(16 + uint16(serverIdx)) bf.WriteUint16(0x0000) bf.WriteUint16(uint16(len(si.Channels))) @@ -85,9 +89,9 @@ func makeHeader(data []byte, respType string, entryCount uint16, key byte) []byt return bf.Data() } -func makeSv2Resp(config *config.Config, s *Server) []byte { +func makeSv2Resp(config *config.Config, s *Server, local bool) []byte { serverInfos := config.Entrance.Entries - rawServerData := encodeServerInfo(config, s) + rawServerData := encodeServerInfo(config, s, local) bf := byteframe.NewByteFrame() bf.WriteBytes(makeHeader(rawServerData, "SV2", uint16(len(serverInfos)), 0x00)) return bf.Data() diff --git a/server/signserver/dsgn_resp.go b/server/signserver/dsgn_resp.go index 9335de0c0..c44e9ccec 100644 --- a/server/signserver/dsgn_resp.go +++ b/server/signserver/dsgn_resp.go @@ -8,6 +8,7 @@ import ( "erupe-ce/server/channelserver" "fmt" "math/rand" + "strings" "time" "go.uber.org/zap" @@ -51,7 +52,11 @@ func (s *Session) makeSignInResp(uid int) []byte { ps.Uint8(bf, s.server.erupeConfig.PatchServerFile, false) } } - ps.Uint8(bf, fmt.Sprintf("%s:%d", s.server.erupeConfig.Host, s.server.erupeConfig.Entrance.Port), false) + if strings.Split(s.rawConn.RemoteAddr().String(), ":")[0] == "127.0.0.1" { + ps.Uint8(bf, fmt.Sprintf("127.0.0.1:%d", s.server.erupeConfig.Entrance.Port), false) + } else { + ps.Uint8(bf, fmt.Sprintf("%s:%d", s.server.erupeConfig.Host, s.server.erupeConfig.Entrance.Port), false) + } lastPlayed := uint32(0) for _, char := range chars {