aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2024-12-08 12:40:41 +0800
committerRunxi Yu <me@runxiyu.org>2024-12-08 12:40:41 +0800
commita81162e4a5f830339cfb143eeb951a57868c52b3 (patch)
tree4c3781785259e9c43cfb0a6b0a1a12eb707934ec
parentErgo stuff is ISC, not MIT (diff)
downloadmeseircd-a81162e4a5f830339cfb143eeb951a57868c52b3.tar.gz
meseircd-a81162e4a5f830339cfb143eeb951a57868c52b3.tar.zst
meseircd-a81162e4a5f830339cfb143eeb951a57868c52b3.zip
NICK: Also delete old nick association when not fully registered
Diffstat (limited to '')
-rw-r--r--cmd_nick.go8
-rw-r--r--errors.go4
2 files changed, 7 insertions, 5 deletions
diff --git a/cmd_nick.go b/cmd_nick.go
index 0d844b8..9ac3cd8 100644
--- a/cmd_nick.go
+++ b/cmd_nick.go
@@ -22,11 +22,11 @@ func handleClientNick(msg RMsg, client *Client) error {
}
}
} else {
+ if !nickToClient.CompareAndDelete(client.Nick, client) {
+ slog.Error("nick inconsistent", "nick", client.Nick, "client", client)
+ return fmt.Errorf("%w: %v", ErrInconsistentClient, client)
+ }
if client.State == ClientStateRegistered {
- if !nickToClient.CompareAndDelete(client.Nick, client) {
- slog.Error("nick inconsistent", "nick", client.Nick, "client", client)
- return fmt.Errorf("%w: %v", ErrInconsistent, client)
- }
err := client.Send(MakeMsg(client, "NICK", msg.Params[0]))
if err != nil {
return err
diff --git a/errors.go b/errors.go
index 7c0a037..a65fdef 100644
--- a/errors.go
+++ b/errors.go
@@ -13,6 +13,8 @@ var (
ErrNotConnectedServer = errors.New("not connected server")
ErrSendToSelf = errors.New("attempt to send message to self")
ErrUIDBusy = errors.New("too many busy uids")
- ErrInconsistent = errors.New("inconsistent state")
ErrCallState = errors.New("invalid call state")
+ ErrInconsistentGlobal = errors.New("inconsistent global state")
+ ErrInconsistentClient = errors.New("inconsistent client state")
+ ErrRemoteClient = errors.New("operation not supported for a remote client")
)