- Timestamp:
- Feb 7, 2020, 12:08:27 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r45 r46 247 247 uc.messages <- msg 248 248 }) 249 case "MODE": 250 var name string 251 if err := parseMessageParams(msg, &name); err != nil { 252 return err 253 } 254 255 var modeStr string 256 if len(msg.Params) > 1 { 257 modeStr = msg.Params[1] 258 } 259 260 if msg.Prefix.Name != name { 261 ch, err := c.user.getChannel(name) 262 if err != nil { 263 return err 264 } 265 266 if modeStr != "" { 267 ch.conn.messages <- msg 268 } else { 269 c.messages <- &irc.Message{ 270 Prefix: c.srv.prefix(), 271 Command: irc.RPL_CHANNELMODEIS, 272 Params: []string{ch.Name, string(ch.modes)}, 273 } 274 } 275 } else { 276 if name != c.nick { 277 return ircError{&irc.Message{ 278 Command: irc.ERR_USERSDONTMATCH, 279 Params: []string{c.nick, "Cannot change mode for other users"}, 280 }} 281 } 282 283 if modeStr != "" { 284 c.user.forEachUpstream(func(uc *upstreamConn) { 285 uc.messages <- msg 286 }) 287 } else { 288 c.messages <- &irc.Message{ 289 Prefix: c.srv.prefix(), 290 Command: irc.RPL_UMODEIS, 291 Params: []string{""}, // TODO 292 } 293 } 294 } 249 295 default: 250 296 c.logger.Printf("unhandled message: %v", msg) -
trunk/server.go
r44 r46 58 58 } 59 59 u.lock.Unlock() 60 } 61 62 func (u *user) getChannel(name string) (*upstreamChannel, error) { 63 var channel *upstreamChannel 64 var err error 65 u.forEachUpstream(func(uc *upstreamConn) { 66 if err != nil { 67 return 68 } 69 if ch, ok := uc.channels[name]; ok { 70 if channel != nil { 71 err = fmt.Errorf("ambiguous channel name %q", name) 72 } else { 73 channel = ch 74 } 75 } 76 }) 77 if channel == nil { 78 return nil, fmt.Errorf("unknown channel %q", name) 79 } 80 return channel, nil 60 81 } 61 82 -
trunk/upstream.go
r45 r46 15 15 type upstreamChannel struct { 16 16 Name string 17 conn *upstreamConn 17 18 Topic string 18 19 TopicWho string … … 127 128 return err 128 129 } 129 130 c.user.forEachDownstream(func(dc *downstreamConn) { 131 dc.messages <- msg132 })133 } 130 } 131 132 c.user.forEachDownstream(func(dc *downstreamConn) { 133 dc.messages <- msg 134 }) 134 135 case "NOTICE": 135 136 c.logger.Print(msg) … … 183 184 c.channels[ch] = &upstreamChannel{ 184 185 Name: ch, 186 conn: c, 185 187 Members: make(map[string]membership), 186 188 }
Note:
See TracChangeset
for help on using the changeset viewer.