- Timestamp:
- Feb 6, 2020, 5:07:35 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/upstream.go
r16 r17 6 6 "io" 7 7 "net" 8 "strings" 8 9 9 10 "gopkg.in/irc.v3" … … 15 16 ) 16 17 18 type modeSet string 19 20 func (ms modeSet) Has(c byte) bool { 21 return strings.IndexByte(string(ms), c) >= 0 22 } 23 24 func (ms *modeSet) Add(c byte) { 25 if !ms.Has(c) { 26 *ms += modeSet(c) 27 } 28 } 29 30 func (ms *modeSet) Del(c byte) { 31 i := strings.IndexByte(string(*ms), c) 32 if i >= 0 { 33 *ms = (*ms)[:i] + (*ms)[i+1:] 34 } 35 } 36 37 func (ms *modeSet) Apply(s string) error { 38 var plusMinus byte 39 for i := 0; i < len(s); i++ { 40 switch c := s[i]; c { 41 case '+', '-': 42 plusMinus = c 43 default: 44 switch plusMinus { 45 case '+': 46 ms.Add(c) 47 case '-': 48 ms.Del(c) 49 default: 50 return fmt.Errorf("malformed modestring %q: missing plus/minus", s) 51 } 52 } 53 } 54 return nil 55 } 56 17 57 type upstreamConn struct { 18 58 upstream *Upstream … … 21 61 srv *Server 22 62 registered bool 63 modes modeSet 23 64 24 65 serverName string … … 36 77 Params: []string{c.srv.Hostname}, 37 78 }) 79 case "MODE": 80 if len(msg.Params) < 2 { 81 return newNeedMoreParamsError(msg.Command) 82 } 83 if nick := msg.Params[0]; nick != c.upstream.Nick { 84 return fmt.Errorf("received MODE message for unknow nick %q", nick) 85 } 86 return c.modes.Apply(msg.Params[1]) 38 87 case irc.RPL_WELCOME: 39 88 c.registered = true
Note:
See TracChangeset
for help on using the changeset viewer.