diff options
author | Himbeer <himbeer@disroot.org> | 2025-05-01 20:15:27 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2025-05-01 20:15:27 +0200 |
commit | eaf851280ef74fdcef84698ce51a04770c1b2b39 (patch) | |
tree | 30a6b1791e3311f2026afa89258d7a8ce2f15d44 | |
parent | 82a341e701a8c5e9870b0f74c8dd4c0fa5595392 (diff) |
Enforce no-singleplayer and user limit before adding client to player list
-rw-r--r-- | process.go | 46 |
1 files changed, 23 insertions, 23 deletions
@@ -92,18 +92,9 @@ func (cc *ClientConn) process(pkt mt.Pkt) { return } - ip := cc.RemoteAddr().(*net.UDPAddr).IP.String() - if DefaultAuth().Banned(ip, cc.Name()) { - cc.Log("<-", "banned") - cc.Kick("Banned by proxy.") - return - } - - playersMu.Lock() - _, ok := players[cc.Name()] - if ok { - cc.Log("<-", "already connected") - ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.AlreadyConnected}) + if cc.Name() == "singleplayer" { + cc.Log("<-", "name is singleplayer") + ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.BadName}) select { case <-cc.Closed(): @@ -111,16 +102,13 @@ func (cc *ClientConn) process(pkt mt.Pkt) { cc.Close() } - playersMu.Unlock() return } - players[cc.Name()] = struct{}{} - playersMu.Unlock() - - if cc.Name() == "singleplayer" { - cc.Log("<-", "name is singleplayer") - ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.BadName}) + // user limit + if len(players) >= Conf().UserLimit { + cc.Log("<-", "player limit reached") + ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.TooManyClts}) select { case <-cc.Closed(): @@ -131,10 +119,18 @@ func (cc *ClientConn) process(pkt mt.Pkt) { return } - // user limit - if len(players) >= Conf().UserLimit { - cc.Log("<-", "player limit reached") - ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.TooManyClts}) + ip := cc.RemoteAddr().(*net.UDPAddr).IP.String() + if DefaultAuth().Banned(ip, cc.Name()) { + cc.Log("<-", "banned") + cc.Kick("Banned by proxy.") + return + } + + playersMu.Lock() + _, ok := players[cc.Name()] + if ok { + cc.Log("<-", "already connected") + ack, _ := cc.SendCmd(&mt.ToCltKick{Reason: mt.AlreadyConnected}) select { case <-cc.Closed(): @@ -142,9 +138,13 @@ func (cc *ClientConn) process(pkt mt.Pkt) { cc.Close() } + playersMu.Unlock() return } + players[cc.Name()] = struct{}{} + playersMu.Unlock() + // reply if DefaultAuth().Exists(cc.Name()) { cc.auth.method = mt.SRP |