Changeset 216 in code for trunk/downstream.go
- Timestamp:
- Apr 3, 2020, 6:48:23 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r215 r216 72 72 negociatingCaps bool 73 73 capVersion int 74 caps map[string]bool75 74 76 75 saslServer sasl.Server … … 78 77 lock sync.Mutex 79 78 ourMessages map[*irc.Message]struct{} 79 caps map[string]bool 80 80 } 81 81 … … 86 86 id: id, 87 87 ringConsumers: make(map[*network]*RingConsumer), 88 ourMessages: make(map[*irc.Message]struct{}), 88 89 caps: make(map[string]bool), 89 ourMessages: make(map[*irc.Message]struct{}),90 90 } 91 91 dc.hostname = netConn.RemoteAddr().String() … … 210 210 } 211 211 212 func (dc *downstreamConn) getCap(name string) bool { 213 dc.lock.Lock() 214 defer dc.lock.Unlock() 215 return dc.caps[name] 216 } 217 212 218 func (dc *downstreamConn) SendMessage(msg *irc.Message) { 213 // TODO: strip tags if the client doesn't support them (see runNetwork) 219 if !dc.getCap("message-tags") { 220 msg = msg.Copy() 221 for name := range msg.Tags { 222 supported := false 223 switch name { 224 case "time": 225 supported = dc.getCap("server-time") 226 } 227 if !supported { 228 delete(msg.Tags, name) 229 } 230 } 231 } 232 214 233 dc.conn.SendMessage(msg) 215 234 } … … 259 278 } 260 279 case "AUTHENTICATE": 261 if !dc. caps["sasl"]{280 if !dc.getCap("sasl") { 262 281 return ircError{&irc.Message{ 263 282 Command: irc.ERR_SASLFAIL, … … 400 419 case "LIST": 401 420 var caps []string 421 dc.lock.Lock() 402 422 for name := range dc.caps { 403 423 caps = append(caps, name) 404 424 } 425 dc.lock.Unlock() 405 426 406 427 // TODO: multi-line replies … … 420 441 caps := strings.Fields(args[0]) 421 442 ack := true 443 dc.lock.Lock() 422 444 for _, name := range caps { 423 445 name = strings.ToLower(name) … … 439 461 } 440 462 } 463 dc.lock.Unlock() 441 464 442 465 reply := "NAK" … … 664 687 } 665 688 666 // TODO: can't be enabled/disabled on-the-fly667 msgTagsEnabled := dc.caps["message-tags"]668 serverTimeEnabled := dc.caps["server-time"]669 echoMessageEnabled := dc.caps["echo-message"]670 671 689 consumer, ch := net.ring.NewConsumer(seqPtr) 672 690 … … 694 712 delete(dc.ourMessages, msg) 695 713 dc.lock.Unlock() 696 if ours && ! echoMessageEnabled{714 if ours && !dc.getCap("echo-message") { 697 715 // The message comes from our connection, don't echo it 698 716 // back … … 708 726 default: 709 727 panic("expected to consume a PRIVMSG message") 710 }711 712 if !msgTagsEnabled {713 for name := range msg.Tags {714 supported := false715 switch name {716 case "time":717 supported = serverTimeEnabled718 }719 if !supported {720 delete(msg.Tags, name)721 }722 }723 728 } 724 729
Note:
See TracChangeset
for help on using the changeset viewer.