Changeset 43 in code for trunk/upstream.go


Ignore:
Timestamp:
Feb 7, 2020, 11:36:02 AM (5 years ago)
Author:
contact
Message:

Add parseMessageParams helper

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/upstream.go

    r42 r43  
    107107                return nil
    108108        case "MODE":
    109                 if len(msg.Params) < 2 {
    110                         return newNeedMoreParamsError(msg.Command)
    111                 }
    112                 name := msg.Params[0]
    113                 modeStr := msg.Params[1]
     109                var name, modeStr string
     110                if err := parseMessageParams(msg, &name, &modeStr); err != nil {
     111                        return err
     112                }
    114113
    115114                if name == msg.Prefix.Name { // user mode change
     
    144143                }
    145144        case irc.RPL_MYINFO:
    146                 if len(msg.Params) < 5 {
    147                         return newNeedMoreParamsError(msg.Command)
    148                 }
    149                 c.serverName = msg.Params[1]
    150                 c.availableUserModes = msg.Params[3]
    151                 c.availableChannelModes = msg.Params[4]
     145                if err := parseMessageParams(msg, nil, &c.serverName, nil, &c.availableUserModes, &c.availableChannelModes); err != nil {
     146                        return err
     147                }
    152148                if len(msg.Params) > 5 {
    153149                        c.channelModesWithParam = msg.Params[5]
    154150                }
    155151        case "NICK":
    156                 if len(msg.Params) < 1 {
    157                         return newNeedMoreParamsError(msg.Command)
    158                 }
    159                 newNick := msg.Params[0]
     152                var newNick string
     153                if err := parseMessageParams(msg, &newNick); err != nil {
     154                        return err
     155                }
    160156
    161157                if msg.Prefix.Name == c.nick {
     
    175171                })
    176172        case "JOIN":
    177                 if len(msg.Params) < 1 {
    178                         return newNeedMoreParamsError(msg.Command)
    179                 }
    180 
    181                 for _, ch := range strings.Split(msg.Params[0], ",") {
     173                var channels string
     174                if err := parseMessageParams(msg, &channels); err != nil {
     175                        return err
     176                }
     177
     178                for _, ch := range strings.Split(channels, ",") {
    182179                        if msg.Prefix.Name == c.nick {
    183180                                c.logger.Printf("joined channel %q", ch)
     
    199196                })
    200197        case "PART":
    201                 if len(msg.Params) < 1 {
    202                         return newNeedMoreParamsError(msg.Command)
    203                 }
    204 
    205                 for _, ch := range strings.Split(msg.Params[0], ",") {
     198                var channels string
     199                if err := parseMessageParams(msg, &channels); err != nil {
     200                        return err
     201                }
     202
     203                for _, ch := range strings.Split(channels, ",") {
    206204                        if msg.Prefix.Name == c.nick {
    207205                                c.logger.Printf("parted channel %q", ch)
     
    220218                })
    221219        case irc.RPL_TOPIC, irc.RPL_NOTOPIC:
    222                 if len(msg.Params) < 3 {
    223                         return newNeedMoreParamsError(msg.Command)
    224                 }
    225                 ch, err := c.getChannel(msg.Params[1])
     220                var name, topic string
     221                if err := parseMessageParams(msg, nil, &name, &topic); err != nil {
     222                        return err
     223                }
     224                ch, err := c.getChannel(name)
    226225                if err != nil {
    227226                        return err
    228227                }
    229228                if msg.Command == irc.RPL_TOPIC {
    230                         ch.Topic = msg.Params[2]
     229                        ch.Topic = topic
    231230                } else {
    232231                        ch.Topic = ""
    233232                }
    234233        case "TOPIC":
    235                 if len(msg.Params) < 1 {
    236                         return newNeedMoreParamsError(msg.Command)
    237                 }
    238                 ch, err := c.getChannel(msg.Params[0])
     234                var name string
     235                if err := parseMessageParams(msg, nil, &name); err != nil {
     236                        return err
     237                }
     238                ch, err := c.getChannel(name)
    239239                if err != nil {
    240240                        return err
     
    246246                }
    247247        case rpl_topicwhotime:
    248                 if len(msg.Params) < 4 {
    249                         return newNeedMoreParamsError(msg.Command)
    250                 }
    251                 ch, err := c.getChannel(msg.Params[1])
    252                 if err != nil {
    253                         return err
    254                 }
    255                 ch.TopicWho = msg.Params[2]
    256                 sec, err := strconv.ParseInt(msg.Params[3], 10, 64)
     248                var name, who, timeStr string
     249                if err := parseMessageParams(msg, nil, &name, &who, &timeStr); err != nil {
     250                        return err
     251                }
     252                ch, err := c.getChannel(name)
     253                if err != nil {
     254                        return err
     255                }
     256                ch.TopicWho = who
     257                sec, err := strconv.ParseInt(timeStr, 10, 64)
    257258                if err != nil {
    258259                        return fmt.Errorf("failed to parse topic time: %v", err)
     
    260261                ch.TopicTime = time.Unix(sec, 0)
    261262        case irc.RPL_NAMREPLY:
    262                 if len(msg.Params) < 4 {
    263                         return newNeedMoreParamsError(msg.Command)
    264                 }
    265                 ch, err := c.getChannel(msg.Params[2])
    266                 if err != nil {
    267                         return err
    268                 }
    269 
    270                 status, err := parseChannelStatus(msg.Params[1])
     263                var name, statusStr, members string
     264                if err := parseMessageParams(msg, nil, &statusStr, &name, &members); err != nil {
     265                        return err
     266                }
     267                ch, err := c.getChannel(name)
     268                if err != nil {
     269                        return err
     270                }
     271
     272                status, err := parseChannelStatus(statusStr)
    271273                if err != nil {
    272274                        return err
     
    274276                ch.Status = status
    275277
    276                 for _, s := range strings.Split(msg.Params[3], " ") {
     278                for _, s := range strings.Split(members, " ") {
    277279                        membership, nick := parseMembershipPrefix(s)
    278280                        ch.Members[nick] = membership
    279281                }
    280282        case irc.RPL_ENDOFNAMES:
    281                 if len(msg.Params) < 2 {
    282                         return newNeedMoreParamsError(msg.Command)
    283                 }
    284                 ch, err := c.getChannel(msg.Params[1])
     283                var name string
     284                if err := parseMessageParams(msg, nil, &name); err != nil {
     285                        return err
     286                }
     287                ch, err := c.getChannel(name)
    285288                if err != nil {
    286289                        return err
     
    323326                Params:  []string{c.upstream.Nick},
    324327        }
    325 
    326328        c.messages <- &irc.Message{
    327329                Command: "USER",
Note: See TracChangeset for help on using the changeset viewer.