Changeset 260 in code for trunk


Ignore:
Timestamp:
Apr 16, 2020, 3:19:00 PM (5 years ago)
Author:
contact
Message:

Make downstreamConn.marshal{Entity,UserPrefix} take a network

This will be used when sending history while upstream is disconnected.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/bridge.go

    r259 r260  
    1717
    1818func sendTopic(dc *downstreamConn, ch *upstreamChannel) {
    19         downstreamName := dc.marshalEntity(ch.conn, ch.Name)
     19        downstreamName := dc.marshalEntity(ch.conn.network, ch.Name)
    2020
    2121        if ch.Topic != "" {
     
    3737        // TODO: send multiple members in each message
    3838
    39         downstreamName := dc.marshalEntity(ch.conn, ch.Name)
     39        downstreamName := dc.marshalEntity(ch.conn.network, ch.Name)
    4040
    4141        for nick, membership := range ch.Members {
    42                 s := membership.String() + dc.marshalEntity(ch.conn, nick)
     42                s := membership.String() + dc.marshalEntity(ch.conn.network, nick)
    4343
    4444                dc.SendMessage(&irc.Message{
  • trunk/downstream.go

    r259 r260  
    122122}
    123123
     124func isOurNick(net *network, nick string) bool {
     125        // TODO: this doesn't account for nick changes
     126        if net.conn != nil {
     127                return nick == net.conn.nick
     128        }
     129        // We're not currently connected to the upstream connection, so we don't
     130        // know whether this name is our nickname. Best-effort: use the network's
     131        // configured nickname and hope it was the one being used when we were
     132        // connected.
     133        return nick == net.Nick
     134}
     135
    124136// marshalEntity converts an upstream entity name (ie. channel or nick) into a
    125137// downstream entity name.
     
    127139// This involves adding a "/<network>" suffix if the entity isn't the current
    128140// user.
    129 func (dc *downstreamConn) marshalEntity(uc *upstreamConn, name string) string {
     141func (dc *downstreamConn) marshalEntity(net *network, name string) string {
    130142        if dc.network != nil {
    131                 if dc.network != uc.network {
     143                if dc.network != net {
    132144                        panic("soju: tried to marshal an entity for another network")
    133145                }
    134146                return name
    135147        }
    136         if name == uc.nick {
     148        if isOurNick(net, name) {
    137149                return dc.nick
    138150        }
    139         return name + "/" + uc.network.GetName()
    140 }
    141 
    142 func (dc *downstreamConn) marshalUserPrefix(uc *upstreamConn, prefix *irc.Prefix) *irc.Prefix {
    143         if prefix.Name == uc.nick {
     151        return name + "/" + net.GetName()
     152}
     153
     154func (dc *downstreamConn) marshalUserPrefix(net *network, prefix *irc.Prefix) *irc.Prefix {
     155        if isOurNick(net, prefix.Name) {
    144156                return dc.prefix()
    145157        }
    146158        if dc.network != nil {
    147                 if dc.network != uc.network {
     159                if dc.network != net {
    148160                        panic("soju: tried to marshal a user prefix for another network")
    149161                }
     
    151163        }
    152164        return &irc.Prefix{
    153                 Name: prefix.Name + "/" + uc.network.GetName(),
     165                Name: prefix.Name + "/" + net.GetName(),
    154166                User: prefix.User,
    155167                Host: prefix.Host,
     
    229241func (dc *downstreamConn) marshalMessage(msg *irc.Message, uc *upstreamConn) *irc.Message {
    230242        msg = msg.Copy()
    231         msg.Prefix = dc.marshalUserPrefix(uc, msg.Prefix)
     243        msg.Prefix = dc.marshalUserPrefix(uc.network, msg.Prefix)
    232244
    233245        switch msg.Command {
    234246        case "PRIVMSG", "NOTICE":
    235                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     247                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    236248        case "NICK":
    237249                // Nick change for another user
    238                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     250                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    239251        case "JOIN", "PART":
    240                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     252                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    241253        case "KICK":
    242                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
    243                 msg.Params[1] = dc.marshalEntity(uc, msg.Params[1])
     254                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
     255                msg.Params[1] = dc.marshalEntity(uc.network, msg.Params[1])
    244256        case "TOPIC":
    245                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     257                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    246258        case "MODE":
    247                 msg.Params[0] = dc.marshalEntity(uc, msg.Params[0])
     259                msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0])
    248260        case "QUIT":
    249261                // This space is intentinally left blank
     
    663675                                        Prefix:  dc.prefix(),
    664676                                        Command: "JOIN",
    665                                         Params:  []string{dc.marshalEntity(ch.conn, ch.Name)},
     677                                        Params:  []string{dc.marshalEntity(ch.conn.network, ch.Name)},
    666678                                })
    667679
     
    714726                                Prefix:  dc.srv.prefix(),
    715727                                Command: "BATCH",
    716                                 Params:  []string{"+" + batchRef, "chathistory", dc.marshalEntity(uc, target)},
     728                                Params:  []string{"+" + batchRef, "chathistory", dc.marshalEntity(net, target)},
    717729                        })
    718730                }
  • trunk/upstream.go

    r259 r260  
    765765
    766766                        uc.forEachDownstream(func(dc *downstreamConn) {
    767                                 params := []string{dc.nick, dc.marshalEntity(uc, channel), modeStr}
     767                                params := []string{dc.nick, dc.marshalEntity(uc.network, channel), modeStr}
    768768                                params = append(params, modeParams...)
    769769
     
    827827                                Prefix:  dc.srv.prefix(),
    828828                                Command: irc.RPL_LIST,
    829                                 Params:  []string{dc.nick, dc.marshalEntity(uc, channel), clients, topic},
     829                                Params:  []string{dc.nick, dc.marshalEntity(uc.network, channel), clients, topic},
    830830                        })
    831831                })
     
    845845                        // NAMES on a channel we have not joined, forward to downstream
    846846                        uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    847                                 channel := dc.marshalEntity(uc, name)
     847                                channel := dc.marshalEntity(uc.network, name)
    848848                                members := splitSpace(members)
    849849                                for i, member := range members {
    850850                                        membership, nick := uc.parseMembershipPrefix(member)
    851                                         members[i] = membership.String() + dc.marshalEntity(uc, nick)
     851                                        members[i] = membership.String() + dc.marshalEntity(uc.network, nick)
    852852                                }
    853853                                memberStr := strings.Join(members, " ")
     
    882882                        // NAMES on a channel we have not joined, forward to downstream
    883883                        uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    884                                 channel := dc.marshalEntity(uc, name)
     884                                channel := dc.marshalEntity(uc.network, name)
    885885
    886886                                dc.SendMessage(&irc.Message{
     
    923923                        channel := channel
    924924                        if channel != "*" {
    925                                 channel = dc.marshalEntity(uc, channel)
    926                         }
    927                         nick := dc.marshalEntity(uc, nick)
     925                                channel = dc.marshalEntity(uc.network, channel)
     926                        }
     927                        nick := dc.marshalEntity(uc.network, nick)
    928928                        dc.SendMessage(&irc.Message{
    929929                                Prefix:  dc.srv.prefix(),
     
    942942                        if name != "*" {
    943943                                // TODO: support WHO masks
    944                                 name = dc.marshalEntity(uc, name)
     944                                name = dc.marshalEntity(uc.network, name)
    945945                        }
    946946                        dc.SendMessage(&irc.Message{
     
    957957
    958958                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    959                         nick := dc.marshalEntity(uc, nick)
     959                        nick := dc.marshalEntity(uc.network, nick)
    960960                        dc.SendMessage(&irc.Message{
    961961                                Prefix:  dc.srv.prefix(),
     
    971971
    972972                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    973                         nick := dc.marshalEntity(uc, nick)
     973                        nick := dc.marshalEntity(uc.network, nick)
    974974                        dc.SendMessage(&irc.Message{
    975975                                Prefix:  dc.srv.prefix(),
     
    985985
    986986                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    987                         nick := dc.marshalEntity(uc, nick)
     987                        nick := dc.marshalEntity(uc.network, nick)
    988988                        dc.SendMessage(&irc.Message{
    989989                                Prefix:  dc.srv.prefix(),
     
    999999
    10001000                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    1001                         nick := dc.marshalEntity(uc, nick)
     1001                        nick := dc.marshalEntity(uc.network, nick)
    10021002                        params := []string{dc.nick, nick}
    10031003                        params = append(params, msg.Params[2:]...)
     
    10161016
    10171017                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    1018                         nick := dc.marshalEntity(uc, nick)
     1018                        nick := dc.marshalEntity(uc.network, nick)
    10191019                        channelList := make([]string, len(channels))
    10201020                        for i, channel := range channels {
    10211021                                prefix, channel := uc.parseMembershipPrefix(channel)
    1022                                 channel = dc.marshalEntity(uc, channel)
     1022                                channel = dc.marshalEntity(uc.network, channel)
    10231023                                channelList[i] = prefix.String() + channel
    10241024                        }
     
    10371037
    10381038                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    1039                         nick := dc.marshalEntity(uc, nick)
     1039                        nick := dc.marshalEntity(uc.network, nick)
    10401040                        dc.SendMessage(&irc.Message{
    10411041                                Prefix:  dc.srv.prefix(),
     
    10771077                uc.forEachDownstream(func(dc *downstreamConn) {
    10781078                        dc.SendMessage(&irc.Message{
    1079                                 Prefix:  dc.marshalUserPrefix(uc, msg.Prefix),
     1079                                Prefix:  dc.marshalUserPrefix(uc.network, msg.Prefix),
    10801080                                Command: "INVITE",
    1081                                 Params:  []string{dc.marshalEntity(uc, nick), dc.marshalEntity(uc, channel)},
     1081                                Params:  []string{dc.marshalEntity(uc.network, nick), dc.marshalEntity(uc.network, channel)},
    10821082                        })
    10831083                })
     
    10931093                                Prefix:  dc.srv.prefix(),
    10941094                                Command: irc.RPL_INVITING,
    1095                                 Params:  []string{dc.nick, dc.marshalEntity(uc, nick), dc.marshalEntity(uc, channel)},
     1095                                Params:  []string{dc.nick, dc.marshalEntity(uc.network, nick), dc.marshalEntity(uc.network, channel)},
    10961096                        })
    10971097                })
Note: See TracChangeset for help on using the changeset viewer.