Changeset 276 in code for trunk/downstream.go


Ignore:
Timestamp:
Apr 29, 2020, 5:34:44 PM (5 years ago)
Author:
contact
Message:

Add support for away-notify

This makes use of cap-notify to dynamically advertise support for
away-notify. away-notify is advertised to downstream connections if all
upstreams support it.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r275 r276  
    5454// capabilities.
    5555var permanentDownstreamCaps = map[string]string{
    56         "batch": "",
    57         "cap-notify": "",
     56        "batch":        "",
     57        "cap-notify":   "",
    5858        "echo-message": "",
    5959        "message-tags": "",
    60         "sasl": "PLAIN",
    61         "server-time": "",
     60        "sasl":         "PLAIN",
     61        "server-time":  "",
    6262}
    6363
     
    8989        logger := &prefixLogger{srv.Logger, fmt.Sprintf("downstream %q: ", netConn.RemoteAddr())}
    9090        dc := &downstreamConn{
    91                 conn: *newConn(srv, netConn, logger),
    92                 id:   id,
     91                conn:          *newConn(srv, netConn, logger),
     92                id:            id,
    9393                supportedCaps: make(map[string]string),
    94                 caps: make(map[string]bool),
     94                caps:          make(map[string]bool),
    9595        }
    9696        dc.hostname = netConn.RemoteAddr().String()
     
    459459                for k, v := range dc.supportedCaps {
    460460                        if dc.capVersion >= 302 && v != "" {
    461                                 caps = append(caps, k + "=" + v)
     461                                caps = append(caps, k+"="+v)
    462462                        } else {
    463463                                caps = append(caps, k)
     
    594594                Params:  []string{replyTo, "DEL", name},
    595595        })
     596}
     597
     598func (dc *downstreamConn) updateSupportedCaps() {
     599        awayNotifySupported := true
     600        dc.forEachUpstream(func(uc *upstreamConn) {
     601                awayNotifySupported = awayNotifySupported && uc.awayNotifySupported
     602        })
     603
     604        if awayNotifySupported {
     605                dc.setSupportedCap("away-notify", "")
     606        } else {
     607                dc.unsetSupportedCap("away-notify")
     608        }
    596609}
    597610
Note: See TracChangeset for help on using the changeset viewer.