Changeset 216 in code for trunk/downstream.go


Ignore:
Timestamp:
Apr 3, 2020, 6:48:23 PM (5 years ago)
Author:
contact
Message:

Add time tag to all messages

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r215 r216  
    7272        negociatingCaps bool
    7373        capVersion      int
    74         caps            map[string]bool
    7574
    7675        saslServer sasl.Server
     
    7877        lock        sync.Mutex
    7978        ourMessages map[*irc.Message]struct{}
     79        caps        map[string]bool
    8080}
    8181
     
    8686                id:            id,
    8787                ringConsumers: make(map[*network]*RingConsumer),
     88                ourMessages:   make(map[*irc.Message]struct{}),
    8889                caps:          make(map[string]bool),
    89                 ourMessages:   make(map[*irc.Message]struct{}),
    9090        }
    9191        dc.hostname = netConn.RemoteAddr().String()
     
    210210}
    211211
     212func (dc *downstreamConn) getCap(name string) bool {
     213        dc.lock.Lock()
     214        defer dc.lock.Unlock()
     215        return dc.caps[name]
     216}
     217
    212218func (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
    214233        dc.conn.SendMessage(msg)
    215234}
     
    259278                }
    260279        case "AUTHENTICATE":
    261                 if !dc.caps["sasl"] {
     280                if !dc.getCap("sasl") {
    262281                        return ircError{&irc.Message{
    263282                                Command: irc.ERR_SASLFAIL,
     
    400419        case "LIST":
    401420                var caps []string
     421                dc.lock.Lock()
    402422                for name := range dc.caps {
    403423                        caps = append(caps, name)
    404424                }
     425                dc.lock.Unlock()
    405426
    406427                // TODO: multi-line replies
     
    420441                caps := strings.Fields(args[0])
    421442                ack := true
     443                dc.lock.Lock()
    422444                for _, name := range caps {
    423445                        name = strings.ToLower(name)
     
    439461                        }
    440462                }
     463                dc.lock.Unlock()
    441464
    442465                reply := "NAK"
     
    664687        }
    665688
    666         // TODO: can't be enabled/disabled on-the-fly
    667         msgTagsEnabled := dc.caps["message-tags"]
    668         serverTimeEnabled := dc.caps["server-time"]
    669         echoMessageEnabled := dc.caps["echo-message"]
    670 
    671689        consumer, ch := net.ring.NewConsumer(seqPtr)
    672690
     
    694712                                delete(dc.ourMessages, msg)
    695713                                dc.lock.Unlock()
    696                                 if ours && !echoMessageEnabled {
     714                                if ours && !dc.getCap("echo-message") {
    697715                                        // The message comes from our connection, don't echo it
    698716                                        // back
     
    708726                                default:
    709727                                        panic("expected to consume a PRIVMSG message")
    710                                 }
    711 
    712                                 if !msgTagsEnabled {
    713                                         for name := range msg.Tags {
    714                                                 supported := false
    715                                                 switch name {
    716                                                 case "time":
    717                                                         supported = serverTimeEnabled
    718                                                 }
    719                                                 if !supported {
    720                                                         delete(msg.Tags, name)
    721                                                 }
    722                                         }
    723728                                }
    724729
Note: See TracChangeset for help on using the changeset viewer.