Sort commands alphabetically, add few missing IRCv3 commands

This commit is contained in:
Alex 2020-07-11 21:39:12 +02:00
parent 081821c8bc
commit 74e13c4724
Signed by: caskd
GPG Key ID: F92BA85F61F4C173
2 changed files with 131 additions and 76 deletions

View File

@ -12,52 +12,67 @@
#define MBMASK_INVIS 4 /* 100 */
enum {
PASS = 10,
NICK,
USER,
SERVER,
OPER,
SERVICE,
QUIT,
SQUIT,
JOIN,
PART,
MODE,
TOPIC,
NAMES,
LIST,
INVITE,
KICK,
VERSION,
STATS,
LINKS,
TIME,
CONNECT,
TRACE,
ACCOUNT = 10, /* https://ircv3.net/specs/extensions/account-notify-3.1 */
ACC, /* https://github.com/ircv3/ircv3-specifications/pull/276 */
ACK, /* https://ircv3.net/specs/extensions/labeled-response */
ADMIN,
AUTHENTICATE, /* https://ircv3.net/specs/extensions/sasl-3.1 */
AWAY,
BATCH, /* https://ircv3.net/specs/extensions/batch-3.2 */
CAP, /* https://ircv3.net/specs/core/capability-negotiation */
CHGHOST, /* https://ircv3.net/specs/extensions/chghost-3.2 */
CONNECT,
DIE,
ERROR,
FAIL, /* https://ircv3.net/specs/extensions/standard-replies */
INFO,
SERVLIST,
SQUERY,
PRIVMSG,
NOTICE,
MOTD,
LUSERS,
WHO,
WHOIS,
WHOWAS,
INVITE,
ISON,
JOIN,
KICK,
KILL,
LINKS,
LIST,
LUSERS,
MODE,
MONITOR, /* https://ircv3.net/specs/core/monitor-3.2 */
MOTD,
NAMES,
NICK,
NOTE, /* https://ircv3.net/specs/extensions/standard-replies */
NOTICE,
OPER,
PART,
PASS,
PING,
PONG,
ERROR,
AWAY,
PRIVMSG,
QUIT,
REHASH,
DIE,
RENAME, /* https://github.com/ircv3/ircv3-specifications/pull/420 */
RESTART,
RESUME, /* https://github.com/ircv3/ircv3-specifications/pull/306 */
SERVER,
SERVICE,
SERVLIST,
SETNAME, /* https://ircv3.net/specs/extensions/setname */
SQUERY,
SQUIT,
STATS,
SUMMON,
USERS,
WALLOPS,
TIME,
TOPIC,
TRACE,
USER,
USERHOST,
ISON
USERS,
VERSION,
WALLOPS,
WARN, /* https://ircv3.net/specs/extensions/standard-replies */
WEBIRC, /* https://ircv3.net/specs/extensions/webirc */
WHO,
WHOIS,
WHOWAS
};
enum {
RPL_WELCOME = 1,
@ -65,6 +80,16 @@ enum {
RPL_CREATED = 3,
RPL_MYINFO = 4,
RPL_BOUNCE = 5,
/* TO IRCv3 WG:
* please, stop complicating implementations
* get people in the WG that actually care about the protocol and understand why and how standards are written
*
* TO LIBRARY USERS:
* Read the above and go speak with them, or just don't use IRCv3 :)
*/
RPL_ISUPPORT = 5,
RPL_TRACELINK = 200,
RPL_TRACECONNECTING = 201,
RPL_TRACEHANDSHAKE = 202,
@ -182,6 +207,26 @@ enum {
ERR_CANTKILLSERVER = 483,
ERR_NOOPERHOST = 491,
ERR_UMODEUNKNOWNFLAG = 501,
ERR_USERSDONTMATCH = 502
ERR_USERSDONTMATCH = 502,
/* https://ircv3.net/registry */
RPL_STARTTLS = 670,
ERR_STARTTLS = 691,
RPL_MONONLINE = 730,
RPL_MONOFFLINE = 731,
RPL_MONLIST = 732,
RPL_ENDOFMONLIST = 733,
ERR_MOLISTFULL = 734,
RPL_LOGGEDIN = 900,
RPL_LOGGEDOUT = 901,
ERR_NICKLOCKED = 902,
RPL_SASLSUCCESS = 903,
ERR_SASLFAIL = 904,
ERR_SASLTOOLONG = 905,
ERR_SASLABORTED = 906,
ERR_SASLALREADY = 907,
ERR_SASLMECHS = 908
};
#endif

View File

@ -18,52 +18,62 @@
#include "uirc.h"
const char* const uirc_ircmd[] = {
[PASS] = "PASS",
[NICK] = "NICK",
[USER] = "USER",
[SERVER] = "SERVER",
[OPER] = "OPER",
[SERVICE] = "SERVICE",
[QUIT] = "QUIT",
[SQUIT] = "SQUIT",
[JOIN] = "JOIN",
[PART] = "PART",
[MODE] = "MODE",
[TOPIC] = "TOPIC",
[NAMES] = "NAMES",
[LIST] = "LIST",
[INVITE] = "INVITE",
[KICK] = "KICK",
[VERSION] = "VERSION",
[STATS] = "STATS",
[LINKS] = "LINKS",
[TIME] = "TIME",
[CONNECT] = "CONNECT",
[TRACE] = "TRACE",
[ACCOUNT] = "ACCOUNT",
[ACC] = "ACC",
[ACK] = "ACK",
[ADMIN] = "ADMIN",
[AUTHENTICATE] = "AUTHENTICATE",
[AWAY] = "AWAY",
[BATCH] = "BATCH",
[CAP] = "CAP",
[CHGHOST] = "CHGHOST",
[CONNECT] = "CONNECT",
[DIE] = "DIE",
[ERROR] = "ERROR",
[INFO] = "INFO",
[SERVLIST] = "SERVLIST",
[SQUERY] = "SQUERY",
[PRIVMSG] = "PRIVMSG",
[NOTICE] = "NOTICE",
[MOTD] = "MOTD",
[LUSERS] = "LUSERS",
[WHO] = "WHO",
[WHOIS] = "WHOIS",
[WHOWAS] = "WHOWAS",
[INVITE] = "INVITE",
[ISON] = "ISON",
[JOIN] = "JOIN",
[KICK] = "KICK",
[KILL] = "KILL",
[LINKS] = "LINKS",
[LIST] = "LIST",
[LUSERS] = "LUSERS",
[MODE] = "MODE",
[MOTD] = "MOTD",
[NAMES] = "NAMES",
[NICK] = "NICK",
[NOTICE] = "NOTICE",
[OPER] = "OPER",
[PART] = "PART",
[PASS] = "PASS",
[PING] = "PING",
[PONG] = "PONG",
[ERROR] = "ERROR",
[AWAY] = "AWAY",
[PRIVMSG] = "PRIVMSG",
[QUIT] = "QUIT",
[REHASH] = "REHASH",
[DIE] = "DIE",
[RENAME] = "RENAME",
[RESTART] = "RESTART",
[RESUME] = "RESUME",
[SERVER] = "SERVER",
[SERVICE] = "SERVICE",
[SERVLIST] = "SERVLIST",
[SQUERY] = "SQUERY",
[SQUIT] = "SQUIT",
[STATS] = "STATS",
[SUMMON] = "SUMMON",
[USERS] = "USERS",
[WALLOPS] = "WALLOPS",
[TIME] = "TIME",
[TOPIC] = "TOPIC",
[TRACE] = "TRACE",
[USERHOST] = "USERHOST",
[ISON] = "ISON"};
[USERS] = "USERS",
[USER] = "USER",
[VERSION] = "VERSION",
[WALLOPS] = "WALLOPS",
[WEBIRC] = "WEBIRC",
[WHOIS] = "WHOIS",
[WHOWAS] = "WHOWAS",
[WHO] = "WHO"};
struct tagmapping {
const char* name;
@ -73,7 +83,7 @@ signed int Ircmd_stoi(char* str)
{
if (str == NULL)
return ERR_UIRC_NULL_ARGS;
for (unsigned short i = PASS; i <= ISON; i++) {
for (unsigned short i = ACCOUNT; i <= WHO; i++) {
if ((uirc_ircmd[i] != NULL) && (strcmp(uirc_ircmd[i], str) == 0))
return i;
}