- Timestamp:
- Apr 16, 2020, 3:19:00 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/bridge.go
r259 r260 17 17 18 18 func sendTopic(dc *downstreamConn, ch *upstreamChannel) { 19 downstreamName := dc.marshalEntity(ch.conn , ch.Name)19 downstreamName := dc.marshalEntity(ch.conn.network, ch.Name) 20 20 21 21 if ch.Topic != "" { … … 37 37 // TODO: send multiple members in each message 38 38 39 downstreamName := dc.marshalEntity(ch.conn , ch.Name)39 downstreamName := dc.marshalEntity(ch.conn.network, ch.Name) 40 40 41 41 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) 43 43 44 44 dc.SendMessage(&irc.Message{ -
trunk/downstream.go
r259 r260 122 122 } 123 123 124 func 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 124 136 // marshalEntity converts an upstream entity name (ie. channel or nick) into a 125 137 // downstream entity name. … … 127 139 // This involves adding a "/<network>" suffix if the entity isn't the current 128 140 // user. 129 func (dc *downstreamConn) marshalEntity( uc *upstreamConn, name string) string {141 func (dc *downstreamConn) marshalEntity(net *network, name string) string { 130 142 if dc.network != nil { 131 if dc.network != uc.network{143 if dc.network != net { 132 144 panic("soju: tried to marshal an entity for another network") 133 145 } 134 146 return name 135 147 } 136 if name == uc.nick{148 if isOurNick(net, name) { 137 149 return dc.nick 138 150 } 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 154 func (dc *downstreamConn) marshalUserPrefix(net *network, prefix *irc.Prefix) *irc.Prefix { 155 if isOurNick(net, prefix.Name) { 144 156 return dc.prefix() 145 157 } 146 158 if dc.network != nil { 147 if dc.network != uc.network{159 if dc.network != net { 148 160 panic("soju: tried to marshal a user prefix for another network") 149 161 } … … 151 163 } 152 164 return &irc.Prefix{ 153 Name: prefix.Name + "/" + uc.network.GetName(),165 Name: prefix.Name + "/" + net.GetName(), 154 166 User: prefix.User, 155 167 Host: prefix.Host, … … 229 241 func (dc *downstreamConn) marshalMessage(msg *irc.Message, uc *upstreamConn) *irc.Message { 230 242 msg = msg.Copy() 231 msg.Prefix = dc.marshalUserPrefix(uc , msg.Prefix)243 msg.Prefix = dc.marshalUserPrefix(uc.network, msg.Prefix) 232 244 233 245 switch msg.Command { 234 246 case "PRIVMSG", "NOTICE": 235 msg.Params[0] = dc.marshalEntity(uc , msg.Params[0])247 msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0]) 236 248 case "NICK": 237 249 // 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]) 239 251 case "JOIN", "PART": 240 msg.Params[0] = dc.marshalEntity(uc , msg.Params[0])252 msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0]) 241 253 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]) 244 256 case "TOPIC": 245 msg.Params[0] = dc.marshalEntity(uc , msg.Params[0])257 msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0]) 246 258 case "MODE": 247 msg.Params[0] = dc.marshalEntity(uc , msg.Params[0])259 msg.Params[0] = dc.marshalEntity(uc.network, msg.Params[0]) 248 260 case "QUIT": 249 261 // This space is intentinally left blank … … 663 675 Prefix: dc.prefix(), 664 676 Command: "JOIN", 665 Params: []string{dc.marshalEntity(ch.conn , ch.Name)},677 Params: []string{dc.marshalEntity(ch.conn.network, ch.Name)}, 666 678 }) 667 679 … … 714 726 Prefix: dc.srv.prefix(), 715 727 Command: "BATCH", 716 Params: []string{"+" + batchRef, "chathistory", dc.marshalEntity( uc, target)},728 Params: []string{"+" + batchRef, "chathistory", dc.marshalEntity(net, target)}, 717 729 }) 718 730 } -
trunk/upstream.go
r259 r260 765 765 766 766 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} 768 768 params = append(params, modeParams...) 769 769 … … 827 827 Prefix: dc.srv.prefix(), 828 828 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}, 830 830 }) 831 831 }) … … 845 845 // NAMES on a channel we have not joined, forward to downstream 846 846 uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) { 847 channel := dc.marshalEntity(uc , name)847 channel := dc.marshalEntity(uc.network, name) 848 848 members := splitSpace(members) 849 849 for i, member := range members { 850 850 membership, nick := uc.parseMembershipPrefix(member) 851 members[i] = membership.String() + dc.marshalEntity(uc , nick)851 members[i] = membership.String() + dc.marshalEntity(uc.network, nick) 852 852 } 853 853 memberStr := strings.Join(members, " ") … … 882 882 // NAMES on a channel we have not joined, forward to downstream 883 883 uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) { 884 channel := dc.marshalEntity(uc , name)884 channel := dc.marshalEntity(uc.network, name) 885 885 886 886 dc.SendMessage(&irc.Message{ … … 923 923 channel := channel 924 924 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) 928 928 dc.SendMessage(&irc.Message{ 929 929 Prefix: dc.srv.prefix(), … … 942 942 if name != "*" { 943 943 // TODO: support WHO masks 944 name = dc.marshalEntity(uc , name)944 name = dc.marshalEntity(uc.network, name) 945 945 } 946 946 dc.SendMessage(&irc.Message{ … … 957 957 958 958 uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) { 959 nick := dc.marshalEntity(uc , nick)959 nick := dc.marshalEntity(uc.network, nick) 960 960 dc.SendMessage(&irc.Message{ 961 961 Prefix: dc.srv.prefix(), … … 971 971 972 972 uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) { 973 nick := dc.marshalEntity(uc , nick)973 nick := dc.marshalEntity(uc.network, nick) 974 974 dc.SendMessage(&irc.Message{ 975 975 Prefix: dc.srv.prefix(), … … 985 985 986 986 uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) { 987 nick := dc.marshalEntity(uc , nick)987 nick := dc.marshalEntity(uc.network, nick) 988 988 dc.SendMessage(&irc.Message{ 989 989 Prefix: dc.srv.prefix(), … … 999 999 1000 1000 uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) { 1001 nick := dc.marshalEntity(uc , nick)1001 nick := dc.marshalEntity(uc.network, nick) 1002 1002 params := []string{dc.nick, nick} 1003 1003 params = append(params, msg.Params[2:]...) … … 1016 1016 1017 1017 uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) { 1018 nick := dc.marshalEntity(uc , nick)1018 nick := dc.marshalEntity(uc.network, nick) 1019 1019 channelList := make([]string, len(channels)) 1020 1020 for i, channel := range channels { 1021 1021 prefix, channel := uc.parseMembershipPrefix(channel) 1022 channel = dc.marshalEntity(uc , channel)1022 channel = dc.marshalEntity(uc.network, channel) 1023 1023 channelList[i] = prefix.String() + channel 1024 1024 } … … 1037 1037 1038 1038 uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) { 1039 nick := dc.marshalEntity(uc , nick)1039 nick := dc.marshalEntity(uc.network, nick) 1040 1040 dc.SendMessage(&irc.Message{ 1041 1041 Prefix: dc.srv.prefix(), … … 1077 1077 uc.forEachDownstream(func(dc *downstreamConn) { 1078 1078 dc.SendMessage(&irc.Message{ 1079 Prefix: dc.marshalUserPrefix(uc , msg.Prefix),1079 Prefix: dc.marshalUserPrefix(uc.network, msg.Prefix), 1080 1080 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)}, 1082 1082 }) 1083 1083 }) … … 1093 1093 Prefix: dc.srv.prefix(), 1094 1094 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)}, 1096 1096 }) 1097 1097 })
Note:
See TracChangeset
for help on using the changeset viewer.