summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHubert Hirtz <hubert@hirtzfr.eu>2020-08-16 21:43:55 +0200
committerHubert Hirtz <hubert@hirtzfr.eu>2020-08-16 21:43:55 +0200
commitca56268c5aa99c99ebc9dcdbd8dc3c6913fda6ef (patch)
tree3664138b5b6977c960964f81420b9987e1fa6f12
parentHandle RPL_TOPICWHOTIME (diff)
irc: Use a bool instead of an error for validation
-rw-r--r--irc/states.go8
-rw-r--r--irc/tokens.go143
2 files changed, 37 insertions, 114 deletions
diff --git a/irc/states.go b/irc/states.go
index 0896dca..4e70ac3 100644
--- a/irc/states.go
+++ b/irc/states.go
@@ -194,14 +194,8 @@ func NewSession(conn io.ReadWriteCloser, params SessionParams) (s Session, err e
for r.Scan() {
line := r.Text()
-
msg, err := Tokenize(line)
- if err != nil {
- continue
- }
-
- err = msg.Validate()
- if err != nil {
+ if err != nil || !msg.IsValid() {
continue
}
diff --git a/irc/tokens.go b/irc/tokens.go
index 04b1d86..5c156b3 100644
--- a/irc/tokens.go
+++ b/irc/tokens.go
@@ -232,131 +232,60 @@ func (msg *Message) String() string {
return sb.String()
}
-func (msg *Message) Validate() (err error) {
+func (msg *Message) IsValid() bool {
switch msg.Command {
- case rplWelcome:
- if len(msg.Params) < 1 {
- err = errNotEnoughParams
- }
- case rplIsupport:
- if len(msg.Params) < 3 {
- err = errNotEnoughParams
- }
+ case "AUTHENTICATE", "PING", "PONG":
+ return 1 <= len(msg.Params)
+ case rplEndofnames, rplLoggedout, rplMotd, rplNotopic, rplWelcome, rplYourhost:
+ return 2 <= len(msg.Params)
+ case rplIsupport, rplLoggedin, rplTopic:
+ return 3 <= len(msg.Params)
+ case rplNamreply:
+ return 4 <= len(msg.Params)
case rplWhoreply:
- if len(msg.Params) < 8 {
- err = errNotEnoughParams
- }
- case rplMotd:
- if len(msg.Params) < 2 {
- err = errNotEnoughParams
- }
- case "AUTHENTICATE":
- if len(msg.Params) < 1 {
- err = errNotEnoughParams
- }
- case rplLoggedin:
- if len(msg.Params) < 3 {
- err = errNotEnoughParams
- }
- case rplLoggedout:
- if len(msg.Params) < 2 {
- err = errNotEnoughParams
- }
- case "CAP":
- if len(msg.Params) < 3 {
- err = errNotEnoughParams
- } else if msg.Params[1] == "LS" {
- } else if msg.Params[1] == "LIST" {
- } else if msg.Params[1] == "ACK" {
- } else if msg.Params[1] == "NAK" {
- } else if msg.Params[1] == "NEW" {
- } else if msg.Params[1] == "DEL" {
- } else {
- err = errUnknownCommand
- }
- case "JOIN":
- if len(msg.Params) < 1 {
- err = errNotEnoughParams
- } else if msg.Prefix == "" {
- err = errNoPrefix
- }
- case "PART":
- if len(msg.Params) < 1 {
- err = errNotEnoughParams
- } else if msg.Prefix == "" {
- err = errNoPrefix
- }
+ return 8 <= len(msg.Params)
+ case "JOIN", "PART", "TAGMSG":
+ return 1 <= len(msg.Params) && msg.Prefix != ""
+ case "PRIVMSG", "NOTICE", "TOPIC":
+ return 2 <= len(msg.Params) && msg.Prefix != ""
case "QUIT":
- if msg.Prefix == "" {
- err = errNoPrefix
- }
- case rplNamreply:
- if len(msg.Params) < 4 {
- err = errNotEnoughParams
- }
- case rplTopic:
- if len(msg.Params) < 3 {
- err = errNotEnoughParams
- }
+ return msg.Prefix != ""
+ case "CAP":
+ return 3 <= len(msg.Params) &&
+ (msg.Params[1] == "LS" ||
+ msg.Params[1] == "LIST" ||
+ msg.Params[1] == "ACK" ||
+ msg.Params[1] == "NAK" ||
+ msg.Params[1] == "NEW" ||
+ msg.Params[1] == "DEL")
case rplTopicwhotime:
if len(msg.Params) < 4 {
- err = errNotEnoughParams
- } else if _, err := strconv.ParseInt(msg.Params[3], 10, 64); err != nil {
- err = errIncompleteMessage
- }
- case rplNotopic:
- if len(msg.Params) < 2 {
- err = errNotEnoughParams
- }
- case "TOPIC":
- if len(msg.Params) < 2 {
- err = errNotEnoughParams
- } else if msg.Prefix == "" {
- err = errNoPrefix
- }
- case "PRIVMSG", "NOTICE":
- if len(msg.Params) < 2 {
- err = errNotEnoughParams
- } else if msg.Prefix == "" {
- err = errNoPrefix
- }
- case "TAGMSG":
- if len(msg.Params) < 1 {
- err = errNotEnoughParams
- } else if msg.Prefix == "" {
- err = errNoPrefix
+ return false
}
+ _, err := strconv.ParseInt(msg.Params[3], 10, 64)
+ return err != nil
case "BATCH":
if len(msg.Params) < 1 {
- err = errNotEnoughParams
- break
+ return false
}
if len(msg.Params[0]) < 2 {
- err = errEmptyBatchID
- break
+ return false
}
if msg.Params[0][0] == '+' {
if len(msg.Params) < 2 {
- err = errNotEnoughParams
- break
+ return false
}
- if msg.Params[1] == "chathistory" && len(msg.Params) < 3 {
- err = errNotEnoughParams
+ switch msg.Params[1] {
+ case "chathistory":
+ return 3 <= len(msg.Params)
+ default:
+ return false
}
- } else if msg.Params[0][0] != '-' {
- err = errEmptyBatchID
- }
- case "PING":
- if len(msg.Params) < 1 {
- err = errNotEnoughParams
- }
- case "PONG":
- if len(msg.Params) < 1 {
- err = errNotEnoughParams
}
+ return msg.Params[0][0] == '-'
default:
+ return false
}
- return
}
func (msg *Message) Time() (t time.Time, ok bool) {