aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2025-05-01 20:15:27 +0200
committerHimbeer <himbeer@disroot.org>2025-05-01 20:15:27 +0200
commiteaf851280ef74fdcef84698ce51a04770c1b2b39 (patch)
tree30a6b1791e3311f2026afa89258d7a8ce2f15d44
parent82a341e701a8c5e9870b0f74c8dd4c0fa5595392 (diff)
Enforce no-singleplayer and user limit before adding client to player list
-rw-r--r--process.go46
1 files changed, 23 insertions, 23 deletions
diff --git a/process.go b/process.go
index 208638a..01e27b1 100644
--- a/process.go
+++ b/process.go
@@ -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