Changeset 129 in code for trunk/downstream.go


Ignore:
Timestamp:
Mar 20, 2020, 9:11:27 AM (5 years ago)
Author:
delthas
Message:

Fix MODE downstream support

  • Fix replies without client as first argument
  • Replace wrong prefix check with a proper entity type check
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/downstream.go

    r128 r129  
    151151}
    152152
    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)
     153func (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)
    163158}
    164159
     
    853848                }
    854849        case "MODE":
    855                 if msg.Prefix == nil {
    856                         return fmt.Errorf("missing prefix")
    857                 }
    858 
    859850                var name string
    860851                if err := parseMessageParams(msg, &name); err != nil {
     
    867858                }
    868859
    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
    875867                        if modeStr != "" {
    876868                                uc.SendMessage(&irc.Message{
     
    883875                                        return ircError{&irc.Message{
    884876                                                Command: irc.ERR_NOSUCHCHANNEL,
    885                                                 Params:  []string{name, "No such channel"},
     877                                                Params:  []string{dc.nick, name, "No such channel"},
    886878                                        }}
    887879                                }
     
    890882                                        Prefix:  dc.srv.prefix(),
    891883                                        Command: irc.RPL_CHANNELMODEIS,
    892                                         Params:  []string{name, string(ch.modes)},
     884                                        Params:  []string{dc.nick, name, string(ch.modes)},
    893885                                })
    894886                        }
     
    912904                                        Prefix:  dc.srv.prefix(),
    913905                                        Command: irc.RPL_UMODEIS,
    914                                         Params:  []string{""}, // TODO
     906                                        Params:  []string{dc.nick, ""}, // TODO
    915907                                })
    916908                        }
Note: See TracChangeset for help on using the changeset viewer.