Changeset 140 in code
- Timestamp:
- Mar 25, 2020, 8:47:26 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/bridge.go
r139 r140 27 27 28 28 // TODO: rpl_topicwhotime 29 sendNames(dc, ch) 30 } 29 31 32 func sendNames(dc *downstreamConn, ch *upstreamChannel) { 30 33 // TODO: send multiple members in each message 34 35 downstreamName := dc.marshalChannel(ch.conn, ch.Name) 36 31 37 for nick, membership := range ch.Members { 32 38 s := membership.String() + dc.marshalNick(ch.conn, nick) -
trunk/downstream.go
r139 r140 914 914 }) 915 915 } 916 case "NAMES": 917 if len(msg.Params) == 0 { 918 dc.SendMessage(&irc.Message{ 919 Prefix: dc.srv.prefix(), 920 Command: irc.RPL_ENDOFNAMES, 921 Params: []string{dc.nick, "*", "End of /NAMES list"}, 922 }) 923 return nil 924 } 925 926 channels := strings.Split(msg.Params[0], ",") 927 for _, channel := range channels { 928 uc, upstreamChannel, err := dc.unmarshalEntity(channel) 929 if err != nil { 930 return err 931 } 932 933 ch, ok := uc.channels[upstreamChannel] 934 if ok { 935 sendNames(dc, ch) 936 } else { 937 // NAMES on a channel we have not joined, ask upstream 938 uc.SendMessage(&irc.Message{ 939 Command: "NAMES", 940 Params: []string{upstreamChannel}, 941 }) 942 } 943 } 916 944 case "WHO": 917 945 if len(msg.Params) == 0 { … … 920 948 Prefix: dc.srv.prefix(), 921 949 Command: irc.RPL_ENDOFWHO, 922 Params: []string{dc.nick, "*", "End of /WHO list ."},950 Params: []string{dc.nick, "*", "End of /WHO list"}, 923 951 }) 924 952 return nil -
trunk/upstream.go
r139 r140 652 652 return err 653 653 } 654 ch, err := uc.getChannel(name) 655 if err != nil { 656 return err 654 655 ch, ok := uc.channels[name] 656 if !ok { 657 // NAMES on a channel we have not joined, forward to downstream 658 uc.forEachDownstream(func(dc *downstreamConn) { 659 channel := dc.marshalChannel(uc, name) 660 members := strings.Split(members, " ") 661 for i, member := range members { 662 membership, nick := uc.parseMembershipPrefix(member) 663 members[i] = membership.String() + dc.marshalNick(uc, nick) 664 } 665 memberStr := strings.Join(members, " ") 666 667 dc.SendMessage(&irc.Message{ 668 Prefix: dc.srv.prefix(), 669 Command: irc.RPL_NAMREPLY, 670 Params: []string{dc.nick, statusStr, channel, memberStr}, 671 }) 672 }) 673 return nil 657 674 } 658 675 … … 672 689 return err 673 690 } 674 ch, err := uc.getChannel(name) 675 if err != nil { 676 return err 691 692 ch, ok := uc.channels[name] 693 if !ok { 694 // NAMES on a channel we have not joined, forward to downstream 695 uc.forEachDownstream(func(dc *downstreamConn) { 696 channel := dc.marshalChannel(uc, name) 697 698 dc.SendMessage(&irc.Message{ 699 Prefix: dc.srv.prefix(), 700 Command: irc.RPL_ENDOFNAMES, 701 Params: []string{dc.nick, channel, "End of /NAMES list"}, 702 }) 703 }) 704 return nil 677 705 } 678 706
Note:
See TracChangeset
for help on using the changeset viewer.