- Timestamp:
- Jun 5, 2021, 10:38:52 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r550 r551 188 188 caps map[string]bool 189 189 190 lastBatchRef uint64 191 190 192 saslServer sasl.Server 191 193 } … … 380 382 } 381 383 } 384 if !dc.caps["batch"] && msg.Tags["batch"] != "" { 385 msg = msg.Copy() 386 delete(msg.Tags, "batch") 387 } 382 388 if msg.Command == "JOIN" && !dc.caps["extended-join"] { 383 389 msg.Params = msg.Params[:1] … … 388 394 389 395 dc.conn.SendMessage(msg) 396 } 397 398 func (dc *downstreamConn) SendBatch(typ string, params []string, tags irc.Tags, f func(batchRef irc.TagValue)) { 399 dc.lastBatchRef++ 400 ref := fmt.Sprintf("%v", dc.lastBatchRef) 401 402 if dc.caps["batch"] { 403 dc.SendMessage(&irc.Message{ 404 Tags: tags, 405 Prefix: dc.srv.prefix(), 406 Command: "BATCH", 407 Params: append([]string{"+" + ref, typ}, params...), 408 }) 409 } 410 411 f(irc.TagValue(ref)) 412 413 if dc.caps["batch"] { 414 dc.SendMessage(&irc.Message{ 415 Prefix: dc.srv.prefix(), 416 Command: "BATCH", 417 Params: []string{"-" + ref}, 418 }) 419 } 390 420 } 391 421 … … 1084 1114 1085 1115 if dc.caps["soju.im/bouncer-networks-notify"] { 1086 dc.SendMessage(&irc.Message{ 1087 Prefix: dc.srv.prefix(), 1088 Command: "BATCH", 1089 Params: []string{"+networks", "soju.im/bouncer-networks"}, 1090 }) 1091 dc.user.forEachNetwork(func(network *network) { 1092 idStr := fmt.Sprintf("%v", network.ID) 1093 attrs := getNetworkAttrs(network) 1094 dc.SendMessage(&irc.Message{ 1095 Tags: irc.Tags{"batch": irc.TagValue("networks")}, 1096 Prefix: dc.srv.prefix(), 1097 Command: "BOUNCER", 1098 Params: []string{"NETWORK", idStr, attrs.String()}, 1099 }) 1100 }) 1101 dc.SendMessage(&irc.Message{ 1102 Prefix: dc.srv.prefix(), 1103 Command: "BATCH", 1104 Params: []string{"-networks"}, 1116 dc.SendBatch("soju.im/bouncer-networks", nil, nil, func(batchRef irc.TagValue) { 1117 dc.user.forEachNetwork(func(network *network) { 1118 idStr := fmt.Sprintf("%v", network.ID) 1119 attrs := getNetworkAttrs(network) 1120 dc.SendMessage(&irc.Message{ 1121 Tags: irc.Tags{"batch": batchRef}, 1122 Prefix: dc.srv.prefix(), 1123 Command: "BOUNCER", 1124 Params: []string{"NETWORK", idStr, attrs.String()}, 1125 }) 1126 }) 1105 1127 }) 1106 1128 } … … 1193 1215 } 1194 1216 1195 batchRef := "history" 1196 if dc.caps["batch"] { 1197 dc.SendMessage(&irc.Message{ 1198 Prefix: dc.srv.prefix(), 1199 Command: "BATCH", 1200 Params: []string{"+" + batchRef, "chathistory", dc.marshalEntity(net, target)}, 1201 }) 1202 } 1203 1204 for _, msg := range history { 1205 if !dc.messageSupportsHistory(msg) { 1206 continue 1207 } 1208 1209 if ch != nil && ch.Detached { 1210 if net.detachedMessageNeedsRelay(ch, msg) { 1211 dc.relayDetachedMessage(net, msg) 1212 } 1213 } else { 1214 if dc.caps["batch"] { 1215 msg.Tags["batch"] = irc.TagValue(batchRef) 1216 } 1217 dc.SendMessage(dc.marshalMessage(msg, net)) 1218 } 1219 } 1220 1221 if dc.caps["batch"] { 1222 dc.SendMessage(&irc.Message{ 1223 Prefix: dc.srv.prefix(), 1224 Command: "BATCH", 1225 Params: []string{"-" + batchRef}, 1226 }) 1227 } 1217 dc.SendBatch("chathistory", []string{dc.marshalEntity(net, target)}, nil, func(batchRef irc.TagValue) { 1218 for _, msg := range history { 1219 if !dc.messageSupportsHistory(msg) { 1220 continue 1221 } 1222 1223 if ch != nil && ch.Detached { 1224 if net.detachedMessageNeedsRelay(ch, msg) { 1225 dc.relayDetachedMessage(net, msg) 1226 } 1227 } else { 1228 if dc.caps["batch"] { 1229 msg.Tags["batch"] = irc.TagValue(batchRef) 1230 } 1231 dc.SendMessage(dc.marshalMessage(msg, net)) 1232 } 1233 } 1234 }) 1228 1235 } 1229 1236 … … 2108 2115 } 2109 2116 2110 batchRef := "history-targets" 2111 dc.SendMessage(&irc.Message{ 2112 Prefix: dc.srv.prefix(), 2113 Command: "BATCH", 2114 Params: []string{"+" + batchRef, "draft/chathistory-targets"}, 2115 }) 2116 2117 for _, target := range targets { 2118 if ch := uc.network.channels.Value(target.Name); ch != nil && ch.Detached { 2119 continue 2117 dc.SendBatch("draft/chathistory-targets", nil, nil, func(batchRef irc.TagValue) { 2118 for _, target := range targets { 2119 if ch := uc.network.channels.Value(target.Name); ch != nil && ch.Detached { 2120 continue 2121 } 2122 2123 dc.SendMessage(&irc.Message{ 2124 Tags: irc.Tags{"batch": batchRef}, 2125 Prefix: dc.srv.prefix(), 2126 Command: "CHATHISTORY", 2127 Params: []string{"TARGETS", target.Name, target.LatestMessage.UTC().Format(serverTimeLayout)}, 2128 }) 2120 2129 } 2121 2122 dc.SendMessage(&irc.Message{2123 Tags: irc.Tags{"batch": irc.TagValue(batchRef)},2124 Prefix: dc.srv.prefix(),2125 Command: "CHATHISTORY",2126 Params: []string{"TARGETS", target.Name, target.LatestMessage.UTC().Format(serverTimeLayout)},2127 })2128 }2129 2130 dc.SendMessage(&irc.Message{2131 Prefix: dc.srv.prefix(),2132 Command: "BATCH",2133 Params: []string{"-" + batchRef},2134 2130 }) 2135 2131 … … 2141 2137 } 2142 2138 2143 batchRef := "history" 2144 dc.SendMessage(&irc.Message{ 2145 Prefix: dc.srv.prefix(), 2146 Command: "BATCH", 2147 Params: []string{"+" + batchRef, "chathistory", target}, 2148 }) 2149 2150 for _, msg := range history { 2151 msg.Tags["batch"] = irc.TagValue(batchRef) 2152 dc.SendMessage(dc.marshalMessage(msg, uc.network)) 2153 } 2154 2155 dc.SendMessage(&irc.Message{ 2156 Prefix: dc.srv.prefix(), 2157 Command: "BATCH", 2158 Params: []string{"-" + batchRef}, 2139 dc.SendBatch("chathistory", []string{target}, nil, func(batchRef irc.TagValue) { 2140 for _, msg := range history { 2141 msg.Tags["batch"] = batchRef 2142 dc.SendMessage(dc.marshalMessage(msg, uc.network)) 2143 } 2159 2144 }) 2160 2145 case "BOUNCER": … … 2166 2151 switch strings.ToUpper(subcommand) { 2167 2152 case "LISTNETWORKS": 2168 dc.SendMessage(&irc.Message{ 2169 Prefix: dc.srv.prefix(), 2170 Command: "BATCH", 2171 Params: []string{"+networks", "soju.im/bouncer-networks"}, 2172 }) 2173 dc.user.forEachNetwork(func(network *network) { 2174 idStr := fmt.Sprintf("%v", network.ID) 2175 attrs := getNetworkAttrs(network) 2176 dc.SendMessage(&irc.Message{ 2177 Tags: irc.Tags{"batch": irc.TagValue("networks")}, 2178 Prefix: dc.srv.prefix(), 2179 Command: "BOUNCER", 2180 Params: []string{"NETWORK", idStr, attrs.String()}, 2153 dc.SendBatch("soju.im/bouncer-networks", nil, nil, func(batchRef irc.TagValue) { 2154 dc.user.forEachNetwork(func(network *network) { 2155 idStr := fmt.Sprintf("%v", network.ID) 2156 attrs := getNetworkAttrs(network) 2157 dc.SendMessage(&irc.Message{ 2158 Tags: irc.Tags{"batch": batchRef}, 2159 Prefix: dc.srv.prefix(), 2160 Command: "BOUNCER", 2161 Params: []string{"NETWORK", idStr, attrs.String()}, 2162 }) 2181 2163 }) 2182 })2183 dc.SendMessage(&irc.Message{2184 Prefix: dc.srv.prefix(),2185 Command: "BATCH",2186 Params: []string{"-networks"},2187 2164 }) 2188 2165 case "ADDNETWORK":
Note:
See TracChangeset
for help on using the changeset viewer.