Changeset 540 in code for trunk/downstream.go
- Timestamp:
- May 25, 2021, 6:24:45 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r537 r540 123 123 "sasl": "PLAIN", 124 124 "server-time": "", 125 "setname": "", 125 126 126 127 "soju.im/bouncer-networks": "", … … 155 156 "MAXTARGETS": true, 156 157 "MODES": true, 158 "NAMELEN": true, 157 159 "NETWORK": true, 158 160 "NICKLEN": true, … … 380 382 if msg.Command == "JOIN" && !dc.caps["extended-join"] { 381 383 msg.Params = msg.Params[:1] 384 } 385 if msg.Command == "SETNAME" && !dc.caps["setname"] { 386 return 382 387 } 383 388 … … 460 465 case "TOPIC": 461 466 msg.Params[0] = dc.marshalEntity(net, msg.Params[0]) 462 case "QUIT" :467 case "QUIT", "SETNAME": 463 468 // This space is intentionally left blank 464 469 default: … … 867 872 dc.nick = uc.nick 868 873 dc.nickCM = casemapASCII(dc.nick) 874 } 875 } 876 877 func (dc *downstreamConn) updateRealname() { 878 if uc := dc.upstream(); uc != nil && uc.realname != dc.realname && dc.caps["setname"] { 879 dc.SendMessage(&irc.Message{ 880 Prefix: dc.prefix(), 881 Command: "SETNAME", 882 Params: []string{uc.realname}, 883 }) 884 dc.realname = uc.realname 869 885 } 870 886 } … … 1063 1079 1064 1080 dc.updateNick() 1081 dc.updateRealname() 1065 1082 dc.updateSupportedCaps() 1066 1083 … … 1343 1360 dc.nick = nick 1344 1361 dc.nickCM = casemapASCII(dc.nick) 1362 } 1363 case "SETNAME": 1364 var realname string 1365 if err := parseMessageParams(msg, &realname); err != nil { 1366 return err 1367 } 1368 1369 var storeErr error 1370 var needUpdate []Network 1371 dc.forEachNetwork(func(n *network) { 1372 // We only need to call updateNetwork for upstreams that don't 1373 // support setname 1374 if uc := n.conn; uc != nil && uc.caps["setname"] { 1375 uc.SendMessageLabeled(dc.id, &irc.Message{ 1376 Command: "SETNAME", 1377 Params: []string{realname}, 1378 }) 1379 1380 n.Realname = realname 1381 if err := dc.srv.db.StoreNetwork(dc.user.ID, &n.Network); err != nil { 1382 dc.logger.Printf("failed to store network realname: %v", err) 1383 storeErr = err 1384 } 1385 return 1386 } 1387 1388 record := n.Network // copy network record because we'll mutate it 1389 record.Realname = realname 1390 needUpdate = append(needUpdate, record) 1391 }) 1392 1393 // Walk the network list as a second step, because updateNetwork 1394 // mutates the original list 1395 for _, record := range needUpdate { 1396 if _, err := dc.user.updateNetwork(&record); err != nil { 1397 dc.logger.Printf("failed to update network realname: %v", err) 1398 storeErr = err 1399 } 1400 } 1401 if storeErr != nil { 1402 return ircError{&irc.Message{ 1403 Command: "FAIL", 1404 Params: []string{"SETNAME", "CANNOT_CHANGE_REALNAME", "Failed to update realname"}, 1405 }} 1406 } 1407 1408 if dc.upstream() == nil && dc.caps["setname"] { 1409 dc.SendMessage(&irc.Message{ 1410 Prefix: dc.prefix(), 1411 Command: "SETNAME", 1412 Params: []string{realname}, 1413 }) 1345 1414 } 1346 1415 case "JOIN":
Note:
See TracChangeset
for help on using the changeset viewer.