Changeset 127 in code for trunk/downstream.go
- Timestamp:
- Mar 19, 2020, 11:29:03 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/downstream.go
r125 r127 170 170 } 171 171 172 func (dc *downstreamConn) unmarshal Channel(name string) (*upstreamConn, string, error) {172 func (dc *downstreamConn) unmarshalEntity(name string) (*upstreamConn, string, error) { 173 173 if uc := dc.upstream(); uc != nil { 174 174 return uc, name, nil 175 175 } 176 176 177 network := ""177 var conn *upstreamConn 178 178 if i := strings.LastIndexByte(name, '/'); i >= 0 { 179 network = name[i+1:]179 network := name[i+1:] 180 180 name = name[:i] 181 } 182 183 if network != "" { 184 var conn *upstreamConn 181 185 182 dc.forEachUpstream(func(uc *upstreamConn) { 186 183 if network != uc.network.GetName() { … … 189 186 conn = uc 190 187 }) 191 return conn, name, nil 192 } 193 194 var channel *upstreamChannel 195 var err error 196 dc.forEachUpstream(func(uc *upstreamConn) { 197 if err != nil { 198 return 199 } 200 if ch, ok := uc.channels[name]; ok { 201 if channel != nil { 202 err = fmt.Errorf("ambiguous channel name %q", name) 203 } else { 204 channel = ch 205 } 206 } 207 }) 208 if channel == nil { 188 } 189 190 if conn == nil { 209 191 return nil, "", ircError{&irc.Message{ 210 192 Command: irc.ERR_NOSUCHCHANNEL, … … 212 194 }} 213 195 } 214 return c hannel.conn, channel.Name, nil196 return conn, name, nil 215 197 } 216 198 … … 844 826 } 845 827 846 uc, upstreamName, err := dc.unmarshal Channel(name)828 uc, upstreamName, err := dc.unmarshalEntity(name) 847 829 if err != nil { 848 830 return ircError{&irc.Message{ … … 886 868 887 869 if msg.Prefix.Name != name { 888 uc, upstreamName, err := dc.unmarshal Channel(name)870 uc, upstreamName, err := dc.unmarshalEntity(name) 889 871 if err != nil { 890 872 return err … … 934 916 } 935 917 } 918 case "WHO": 919 if len(msg.Params) == 0 { 920 // TODO: support WHO without parameters 921 dc.SendMessage(&irc.Message{ 922 Prefix: dc.srv.prefix(), 923 Command: irc.RPL_ENDOFWHO, 924 Params: []string{dc.nick, "*", "End of /WHO list."}, 925 }) 926 return nil 927 } 928 929 // TODO: support WHO masks 930 entity := msg.Params[0] 931 932 uc, upstreamName, err := dc.unmarshalEntity(entity) 933 if err != nil { 934 return err 935 } 936 937 var params []string 938 if len(msg.Params) == 2 { 939 params = []string{upstreamName, msg.Params[1]} 940 } else { 941 params = []string{upstreamName} 942 } 943 944 uc.SendMessage(&irc.Message{ 945 Command: "WHO", 946 Params: params, 947 }) 936 948 case "PRIVMSG": 937 949 var targetsStr, text string … … 946 958 } 947 959 948 uc, upstreamName, err := dc.unmarshal Channel(name)960 uc, upstreamName, err := dc.unmarshalEntity(name) 949 961 if err != nil { 950 962 return err
Note:
See TracChangeset
for help on using the changeset viewer.