fix: force-close user connections on removal, fix UDP upload/download counters, use self-hosted releases
CI / Test (push) Has been cancelled
CI / Build (amd64, linux) (push) Has been cancelled
CI / Build (arm64, linux) (push) Has been cancelled
CI / Build & Push Docker Image (push) Has been cancelled
CI / Release (push) Has been cancelled

- service.go: call CloseUserConnections() before RemoveUsers() so banned/reset
  users are disconnected immediately instead of waiting for natural timeout
  (upstream issue #32, PR pending 4+ months)

- conntracker.go: swap UnwrapPacketReader/Writer upload/download counters for
  UDP PacketConn path — Reader=upload, Writer=download to match TCP path
  (upstream issue #55)

- xbctl/main.go: change downloadBase to JP01 Gitea so xbctl upgrade pulls
  self-hosted patched releases instead of upstream
This commit is contained in:
2026-06-18 15:14:09 +09:00
parent 0a29338e1f
commit fce60b8ad3
3 changed files with 17 additions and 7 deletions
+12
View File
@@ -838,6 +838,18 @@ func (s *Service) applyUserDelta(ctx context.Context, action string, deltaUsers
return
}
// Force-close active connections for removed users before revoking
// credentials. Without this, existing long-lived connections
// (QUIC/TCP) persist until natural timeout — subscription resets
// and bans would not take immediate effect.
if s.kernel.Capabilities().ForceCloseUser {
for _, u := range deltaUsers {
if err := s.kernel.CloseUserConnections(ctx, u.UUID); err != nil {
nlog.Core().Debug(fmt.Sprintf("CloseUserConnections(%s): %v", u.UUID, err))
}
}
}
prevUsers, prevHash := s.prepareUserState(filtered)
removed, err := s.kernel.RemoveUsers(deltaUsers)
if err != nil {