- Timestamp:
- Mar 20, 2020, 9:11:27 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r128 r129 151 151 } 152 152 153 func (dc *downstreamConn) marshalEntity(uc *upstreamConn, name string) string { 154 for _, r := range name { 155 switch r { 156 // TODO: support upstream ISUPPORT channel prefixes 157 case '#', '&', '+', '!': 158 return dc.marshalChannel(uc, name) 159 } 160 break 161 } 162 return dc.marshalNick(uc, name) 153 func (dc *downstreamConn) marshalEntity(uc *upstreamConn, entity string) string { 154 if uc.isChannel(entity) { 155 return dc.marshalChannel(uc, entity) 156 } 157 return dc.marshalNick(uc, entity) 163 158 } 164 159 … … 853 848 } 854 849 case "MODE": 855 if msg.Prefix == nil {856 return fmt.Errorf("missing prefix")857 }858 859 850 var name string 860 851 if err := parseMessageParams(msg, &name); err != nil { … … 867 858 } 868 859 869 if msg.Prefix.Name != name { 870 uc, upstreamName, err := dc.unmarshalEntity(name) 871 if err != nil { 872 return err 873 } 874 860 uc, upstreamName, err := dc.unmarshalEntity(name) 861 if err != nil { 862 return err 863 } 864 865 if uc.isChannel(upstreamName) { 866 // TODO: handle MODE channel mode arguments 875 867 if modeStr != "" { 876 868 uc.SendMessage(&irc.Message{ … … 883 875 return ircError{&irc.Message{ 884 876 Command: irc.ERR_NOSUCHCHANNEL, 885 Params: []string{ name, "No such channel"},877 Params: []string{dc.nick, name, "No such channel"}, 886 878 }} 887 879 } … … 890 882 Prefix: dc.srv.prefix(), 891 883 Command: irc.RPL_CHANNELMODEIS, 892 Params: []string{ name, string(ch.modes)},884 Params: []string{dc.nick, name, string(ch.modes)}, 893 885 }) 894 886 } … … 912 904 Prefix: dc.srv.prefix(), 913 905 Command: irc.RPL_UMODEIS, 914 Params: []string{ ""}, // TODO906 Params: []string{dc.nick, ""}, // TODO 915 907 }) 916 908 } -
trunk/upstream.go
r128 r129 135 135 } 136 136 137 func (uc *upstreamConn) isChannel(entity string) bool { 138 for _, r := range entity { 139 switch r { 140 // TODO: support upstream ISUPPORT channel prefixes 141 case '#', '&', '+', '!': 142 return true 143 } 144 break 145 } 146 return false 147 } 148 137 149 func (uc *upstreamConn) handleMessage(msg *irc.Message) error { 138 150 switch msg.Command { … … 144 156 return nil 145 157 case "MODE": 146 if msg.Prefix == nil {147 return fmt.Errorf("missing prefix")148 }149 150 158 var name, modeStr string 151 159 if err := parseMessageParams(msg, &name, &modeStr); err != nil { … … 153 161 } 154 162 155 if name == msg.Prefix.Name{ // user mode change163 if !uc.isChannel(name) { // user mode change 156 164 if name != uc.nick { 157 return fmt.Errorf("received MODE message for unknow nick %q", name)165 return fmt.Errorf("received MODE message for unknown nick %q", name) 158 166 } 159 167 return uc.modes.Apply(modeStr) 160 168 } else { // channel mode change 169 // TODO: handle MODE channel mode arguments 161 170 ch, err := uc.getChannel(name) 162 171 if err != nil {
Note:
See TracChangeset
for help on using the changeset viewer.