newUser(client);
}
}
+#define MATCH_COMMAND(s) else if(strcmp(command, s) == 0)
int irc_process_line(Client *client, char *source, char *command, int argc, char *args[]) {
(void)source;
databuf.clear();
- if(strcmp(command, "") == 0) {
+ if (command[0] == '\0') {
return 0;
- } else if(strcmp(command, "PING") == 0) {
+ } MATCH_COMMAND("PING") {
if (!args[0])
return err_needmoreparams(client, command), sendbuf(client), 0;
msg_pong(args[0]);
sendbuf(client);
- } else if(strcmp(command, "CAP") == 0) {
+ } MATCH_COMMAND("CAP") {
static const struct cap {
const char *name;
unsigned caps;
// FIXME: error 410
goto unknown;
}
- } else if(strcmp(command, "AUTHENTICATE") == 0) {
+ } MATCH_COMMAND("AUTHENTICATE") {
if (!args[0])
return err_needmoreparams(client, command), sendbuf(client), 0;
if (client->username && client->username[0] != '~')
return 0;
}
}
- } else if(strcmp(command, "NICK") == 0) {
+ } MATCH_COMMAND("NICK") {
// User now registered
if (!args[0])
return err_needmoreparams(client, command), sendbuf(client), 0;
abortf("strdup fail (nick_reg)\n");
newUser(client);
}
- } else if(strcmp(command, "USER") == 0) {
+ } MATCH_COMMAND("USER") {
if (argc < 4)
return err_needmoreparams(client, command), sendbuf(client), 0;
if (is_registered(client))
abortf("strdup fail (realname)\n");
// proceed with registration
newUser(client);
- } else if(strcmp(command, "PASS") == 0) {
+ } MATCH_COMMAND("PASS") {
if (is_registered(client))
return err_alreadyregistered(client), sendbuf(client), 0;
if (client->umode & UMODE_REGISTERED || client->passwait)
memset(args[0], 0, strlen(args[0]));
if (!client->pass_reg)
abortf("strdup fail (pass_reg)\n");
- } else if(strcmp(command, "WEBIRC") == 0) {
+ } MATCH_COMMAND("WEBIRC") {
if (is_registered(client))
return err_alreadyregistered(client), sendbuf(client), 0;
if (argc < 4)
job_password_check(client, args[1], args[0], getdatafile("webirc.txt"), cont_webirc);
memset(args[0], 0, strlen(args[0]));
}
- } else if(strcmp(command, "OPER") == 0) {
+ } MATCH_COMMAND("OPER") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc < 2)
stringlower(args[0]);
job_password_check(client, args[0], args[1], getdatafile("ops.txt"), cont_oper);
memset(args[1], 0, strlen(args[1]));
- } else if(strcmp(command, "NEWACC") == 0) {
+ } MATCH_COMMAND("NEWACC") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc < 2)
msg_notice_server(hostname, client->nick,
"Your information has been recorded. Contact IRCops for assistance with registration.");
sendbuf(client);
- } else if(strcmp(command, "GHOST") == 0) {
+ } MATCH_COMMAND("GHOST") {
if (!(client->umode & UMODE_REGISTERED))
return 0; // FIXME: error message
const char *desired_nick = client->username;
if (client == cl)
return err_nicknameinuse(client, desired_nick), sendbuf(client), 0;
killConnection(cl, 0);
- } else if(strcmp(command, "WALLOPS") == 0) {
+ } MATCH_COMMAND("WALLOPS") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc < 1)
for (auto cl : client_map)
if (cl->umode & UMODE_WALLOPS)
sendbuf(cl);
- } else if(strcmp(command, "KILL") == 0) {
+ } MATCH_COMMAND("KILL") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (!(client->umode & UMODE_OPER))
sendbuf(cl2);
// FIXME: add appropraite QUIT message
killConnection(cl, 0);
- } else if(strcmp(command, "JEDGAR") == 0) {
+ } MATCH_COMMAND("JEDGAR") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (!(client->umode & UMODE_OPER))
chan->o.add(client);
copy_strf(&databuf, ":cia!cia@cia.gov MODE %s +o %s\r\n", chan->name, client->nick);
sendbuf_chan(chan);
- } else if(strcmp(command, "JOIN") == 0) {
+ } MATCH_COMMAND("JOIN") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (!args[0])
*q++ = '\0';
channel_join(client, channel, key);
} while (p);
- } else if(strcmp(command, "PART") == 0) {
+ } MATCH_COMMAND("PART") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (!args[0])
return err_nosuchchannel(client, args[0]), sendbuf(client), 0;
channel_part(client, chan, args[1] ? args[1] : "", NULL);
} while (p);
- } else if(strcmp(command, "TOPIC") == 0) {
+ } MATCH_COMMAND("TOPIC") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (!args[0])
return 0; // FIXME: error 482
channel_topic(client, chan, args[1], client->nick, get_time());
}
- } else if(strcmp(command, "INVITE") == 0) {
+ } MATCH_COMMAND("INVITE") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (!args[0]) {
msg_invite(client, cl, chan);
sendbuf(cl);
sendbuf_chan_caps(chan, CAP_INVITENOTIFY, 0);
- } else if(strcmp(command, "KICK") == 0) {
+ } MATCH_COMMAND("KICK") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc < 2)
else
channel_part(cl, chan, args[2], client);
} while (p);
- } else if(strcmp(command, "PRIVMSG") == 0 || strcmp(command, "NOTICE") == 0) {
+ } MATCH_COMMAND("PRIVMSG") {
+ goto privmsg_notice_common;
+ } MATCH_COMMAND("NOTICE") {
+privmsg_notice_common:
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc < 2)
if (cl->away)
rpl_away(client, cl), sendbuf(client);
}
- } else if(strcmp(command, "QUIT") == 0) {
+ } MATCH_COMMAND("QUIT") {
msg_quit(client, "Quit: ", args[0] ? args[0] : "");
sendbuf_visible(client);
killConnection(client, 1);
return 1;
- } else if(strcmp(command, "PONG") == 0) {
+ } MATCH_COMMAND("PONG") {
// Do nothing
// Server Queries and Commands
- } else if(strcmp(command, "MOTD") == 0) {
+ } MATCH_COMMAND("MOTD") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (args[0] && strcmp(args[0], hostname) != 0)
return err_nosuchserver(client, args[0]), sendbuf(client), 0;
// Send welcome
sendMOTD(client);
- } else if(strcmp(command, "HELP") == 0) {
+ } MATCH_COMMAND("HELP") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
char line[512];
} else {
err_helpnotfound(client), sendbuf(client);
}
- } else if(strcmp(command, "VERSION") == 0) {
+ } MATCH_COMMAND("VERSION") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (args[0] && strcmp(args[0], hostname) != 0)
return err_nosuchserver(client, args[0]), sendbuf(client), 0;
rpl_version(client, PACKAGE_VERSION, PACKAGE_STRING), sendbuf(client);
rpl_isupport(client), sendbuf(client);
- } else if(strcmp(command, "ADMIN") == 0) {
+ } MATCH_COMMAND("ADMIN") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (args[0] && strcmp(args[0], hostname) != 0)
} else {
goto unknown;
}
- } else if(strcmp(command, "LUSERS") == 0) {
+ } MATCH_COMMAND("LUSERS") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
sendLUSERS(client);
- } else if(strcmp(command, "TIME") == 0) {
+ } MATCH_COMMAND("TIME") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (args[0] && strcmp(args[0], hostname) != 0)
return err_nosuchserver(client, args[0]), sendbuf(client), 0;
rpl_time(client, get_time()), sendbuf(client);
- } else if(strcmp(command, "MODE") == 0) {
+ } MATCH_COMMAND("MODE") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc == 0)
channel_mode(client, chan, args+1);
}
}
- } else if(strcmp(command, "LIST") == 0) {
+ } MATCH_COMMAND("LIST") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
rpl_liststart(client), sendbuf(client);
if (client->umode & UMODE_OPER || !(chan->dmode & DMODE_SECRET) || chan->members.has(client))
rpl_list(client, chan), sendbuf(client);
rpl_listend(client), sendbuf(client);
- } else if(strcmp(command, "NAMES") == 0) {
+ } MATCH_COMMAND("NAMES") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc == 0)
sendbuf(client);
}
} while (p);
- } else if(strcmp(command, "USERHOST") == 0) {
+ } MATCH_COMMAND("USERHOST") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc == 0)
rpl_userhost(client, cls, (int)(p - cls));
sendbuf(client);
// User-Based Queries
- } else if(strcmp(command, "WHO") == 0) {
+ } MATCH_COMMAND("WHO") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc == 0)
}
}
rpl_endofwho(client, args[0]), sendbuf(client);
- } else if(strcmp(command, "WHOIS") == 0) {
+ } MATCH_COMMAND("WHOIS") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc == 0)
err_nosuchnick(client, nick);
sendbuf(client);
}
- } else if(strcmp(command, "AWAY") == 0) {
+ } MATCH_COMMAND("AWAY") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (args[0]) {
msg_away(client);
int cookie = sendbuf_visible_caps(client, CAP_AWAYNOTIFY, 0);
sendbuf_monitor(client->key, cookie, CAP_AWAYNOTIFY|CAP_EXTENDEDMONITOR, 0);
- } else if(strcmp(command, "MONITOR") == 0) {
+ } MATCH_COMMAND("MONITOR") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc == 0)
default:
return err_needmoreparams(client, command), sendbuf(client), 0; /* FIXME: wrong error */
}
- } else if(strcmp(command, "SETNAME") == 0) {
+ } MATCH_COMMAND("SETNAME") {
if (!is_registered(client))
return err_notregistered(client), sendbuf(client), 0;
if (argc == 0)
if (client->cookie != cookie)
sendbuf(client);
#ifdef HAVE_LUA
- } else if(strcmp(command, "LUA") == 0) {
+ } MATCH_COMMAND("LUA") {
if (argc < 1)
return err_needmoreparams(client, command), sendbuf(client), 0;
return admin_command(client, source, args[0], argc-1, args+1);