--- a/libpurple/protocols/ircv3/purpleircv3constants.h Sun Nov 19 00:02:56 2023 -0600
+++ b/libpurple/protocols/ircv3/purpleircv3constants.h Sun Nov 19 00:05:16 2023 -0600
@@ -24,13 +24,211 @@
#define PURPLE_IRCV3_CONSTANTS_H
+ * PURPLE_IRCV3_ERR_NICKLOCKED: + * A constant for the IRC %NICKLOCKED error. +#define PURPLE_IRCV3_ERR_NICKLOCKED ("902") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_ERR_SASLABORTED: + * A constant for the IRC %SASLABORTED error. +#define PURPLE_IRCV3_ERR_SASLABORTED ("906") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_ERR_SASLALREADY: + * A constant for the IRC %SASLALREADY error. +#define PURPLE_IRCV3_ERR_SASLALREADY ("907") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_ERR_SASLFAIL: + * A constant for the IRC %SASLFAIL error. +#define PURPLE_IRCV3_ERR_SASLFAIL ("904") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_ERR_SASLTOOLONG: + * A constant for the IRC %SASLTOOLONG error. +#define PURPLE_IRCV3_ERR_SASLTOOLONG ("905") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV_MSG_AUTHENTICATE: + * A constant for the IRC %AUTHENTICATE message. +#define PURPLE_IRCV3_MSG_AUTHENTICATE ("AUTHENTICATE") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * A constant for the IRC %CAP message. +#define PURPLE_IRCV3_MSG_CAP ("CAP") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_MSG_NOTICE: + * A constant for the IRC %NOTICE message. +#define PURPLE_IRCV3_MSG_NOTICE ("NOTICE") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_MSG_PING: + * A constant for the IRC %PING message. +#define PURPLE_IRCV3_MSG_PING ("PING") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_MSG_PRIVMSG: + * A constant for the IRC %PRIVMSG message. +#define PURPLE_IRCV3_MSG_PRIVMSG ("PRIVMSG") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 * PURPLE_IRCV3_MSG_TOPIC:
* A constant for the IRC %TOPIC message.
-#define PURPLE_IRCV3_MSG_TOPIC ("TOPIC")
+#define PURPLE_IRCV3_MSG_TOPIC ("TOPIC") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_CREATED: + * A constant for the IRC %CREATED reply. +#define PURPLE_IRCV3_RPL_CREATED ("003") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_ENDOFMOTD: + * A constant for the IRC %ENDOFMOTD reply. +#define PURPLE_IRCV3_RPL_ENDOFMOTD ("376") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_LOGGEDIN: + * A constant for the IRC %LOGGEDIN reply. +#define PURPLE_IRCV3_RPL_LOGGEDIN ("900") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_LOGGEDOUT: + * A constant for the IRC %LOGGEDOUT reply. +#define PURPLE_IRCV3_RPL_LOGGEDOUT ("901") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_LUSERCHANNELS: + * A constant for the IRC %LUSERCHANNELS reply. +#define PURPLE_IRCV3_RPL_LUSERCHANNELS ("254") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_LUSERCLIENT: + * A constant for the IRC %LUSERCLIENT reply. +#define PURPLE_IRCV3_RPL_LUSERCLIENT ("251") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_LUSERME: + * A constant for the IRC %LUSERME reply. +#define PURPLE_IRCV3_RPL_LUSERME ("255") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_LUSEROP: + * A constant for the IRC %LUSEROP reply. +#define PURPLE_IRCV3_RPL_LUSEROP ("252") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_LUSERUNKNOWN: + * A constant for the IRC %LUSERUNKNOWN reply. +#define PURPLE_IRCV3_RPL_LUSERUNKNOWN ("253") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_MYINFO: + * A constant for the IRC %MYINFO reply. +#define PURPLE_IRCV3_RPL_MYINFO ("004") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_MOTD: + * A constant for the IRC %MOTD reply. +#define PURPLE_IRCV3_RPL_MOTD ("372") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_MOTDSTART: + * A constant for the IRC %MOTDSTART reply. +#define PURPLE_IRCV3_RPL_MOTDSTART ("375") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 * PURPLE_IRCV3_RPL_NOTOPIC:
@@ -39,7 +237,25 @@
-#define PURPLE_IRCV3_RPL_NOTOPIC ("331")
+#define PURPLE_IRCV3_RPL_NOTOPIC ("331") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_SASLMECHS: + * A constant for the IRC %SASLMECHS reply. +#define PURPLE_IRCV3_RPL_SASLMECHS ("908") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_SASLSUCCESS: + * A constant for the IRC %SASLSUCCESS reply. +#define PURPLE_IRCV3_RPL_SASLSUCCESS ("903") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 * PURPLE_IRCV3_RPL_TOPIC:
@@ -48,6 +264,24 @@
-#define PURPLE_IRCV3_RPL_TOPIC ("332")
+#define PURPLE_IRCV3_RPL_TOPIC ("332") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_WELCOME: + * A constant for the IRC %WELCOME reply. +#define PURPLE_IRCV3_RPL_WELCOME ("001") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 + * PURPLE_IRCV3_RPL_YOURHOST: + * A constant for the IRC %YOURHOST reply. +#define PURPLE_IRCV3_RPL_YOURHOST ("002") PURPLE_IRCV3_AVAILABLE_MACRO_IN_3_0 #endif /* PURPLE_IRCV3_CONSTANTS_H */
--- a/libpurple/protocols/ircv3/purpleircv3messagehandlers.c Sun Nov 19 00:02:56 2023 -0600
+++ b/libpurple/protocols/ircv3/purpleircv3messagehandlers.c Sun Nov 19 00:05:16 2023 -0600
@@ -190,7 +190,7 @@
- if(purple_strequal(command, "NOTICE")) {
+ if(purple_strequal(command, PURPLE_IRCV3_MSG_NOTICE)) { flags |= PURPLE_MESSAGE_NOTIFY;
--- a/libpurple/protocols/ircv3/purpleircv3parser.c Sun Nov 19 00:02:56 2023 -0600
+++ b/libpurple/protocols/ircv3/purpleircv3parser.c Sun Nov 19 00:05:16 2023 -0600
@@ -434,13 +434,13 @@
purple_ircv3_message_handler_fallback);
/* Core functionality. */
- purple_ircv3_parser_add_handler(parser, "CAP",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_MSG_CAP, purple_ircv3_capabilities_message_handler);
- purple_ircv3_parser_add_handler(parser, "NOTICE",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_MSG_NOTICE, purple_ircv3_message_handler_privmsg);
- purple_ircv3_parser_add_handler(parser, "PING",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_MSG_PING, purple_ircv3_message_handler_ping);
- purple_ircv3_parser_add_handler(parser, "PRIVMSG",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_MSG_PRIVMSG, purple_ircv3_message_handler_privmsg);
@@ -454,37 +454,50 @@
/* Post Registration Greetings */
purple_ircv3_parser_add_handlers(parser,
purple_ircv3_message_handler_status_ignore_param0,
- "001", "002", "003", "004", NULL);
+ PURPLE_IRCV3_RPL_WELCOME, + PURPLE_IRCV3_RPL_YOURHOST, + PURPLE_IRCV3_RPL_CREATED, + PURPLE_IRCV3_RPL_MYINFO, purple_ircv3_parser_add_handlers(parser,
purple_ircv3_message_handler_status_ignore_param0,
- "251", "252", "253", "254", "255", NULL);
+ PURPLE_IRCV3_RPL_LUSERCLIENT, + PURPLE_IRCV3_RPL_LUSEROP, + PURPLE_IRCV3_RPL_LUSERUNKNOWN, + PURPLE_IRCV3_RPL_LUSERCHANNELS, + PURPLE_IRCV3_RPL_LUSERME, purple_ircv3_parser_add_handlers(parser,
purple_ircv3_message_handler_status_ignore_param0,
- "372", "375", "376", NULL);
+ PURPLE_IRCV3_RPL_MOTDSTART, + PURPLE_IRCV3_RPL_ENDOFMOTD, - purple_ircv3_parser_add_handler(parser, "900",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_RPL_LOGGEDIN, purple_ircv3_sasl_logged_in);
- purple_ircv3_parser_add_handler(parser, "901",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_RPL_LOGGEDOUT, purple_ircv3_sasl_logged_out);
- purple_ircv3_parser_add_handler(parser, "902",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_ERR_NICKLOCKED, purple_ircv3_sasl_nick_locked);
- purple_ircv3_parser_add_handler(parser, "903",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_RPL_SASLSUCCESS, purple_ircv3_sasl_success);
- purple_ircv3_parser_add_handler(parser, "904",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_ERR_SASLFAIL, purple_ircv3_sasl_failed);
- purple_ircv3_parser_add_handler(parser, "905",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_ERR_SASLTOOLONG, purple_ircv3_sasl_message_too_long);
- purple_ircv3_parser_add_handler(parser, "906",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_ERR_SASLABORTED, purple_ircv3_sasl_aborted);
- purple_ircv3_parser_add_handler(parser, "907",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_ERR_SASLALREADY, purple_ircv3_sasl_already_authed);
- purple_ircv3_parser_add_handler(parser, "908",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_RPL_SASLMECHS, purple_ircv3_sasl_mechanisms);
- purple_ircv3_parser_add_handler(parser, "AUTHENTICATE",
+ purple_ircv3_parser_add_handler(parser, PURPLE_IRCV3_MSG_AUTHENTICATE, purple_ircv3_sasl_authenticate);
--- a/libpurple/protocols/ircv3/purpleircv3sasl.c Sun Nov 19 00:02:56 2023 -0600
+++ b/libpurple/protocols/ircv3/purpleircv3sasl.c Sun Nov 19 00:05:16 2023 -0600
@@ -24,6 +24,7 @@
#include "purpleircv3capabilities.h"
#include "purpleircv3connection.h"
+#include "purpleircv3constants.h" #include "purpleircv3core.h"
#define PURPLE_IRCV3_SASL_DATA_KEY ("sasl-data")
@@ -113,7 +114,8 @@
g_message("trying SASL '%s' mechanism", next_mechanism);
- purple_ircv3_connection_writef(connection, "AUTHENTICATE %s",
+ purple_ircv3_connection_writef(connection, "%s %s", + PURPLE_IRCV3_MSG_AUTHENTICATE, @@ -543,11 +545,13 @@
encoded = g_base64_encode(client_out, client_out_length);
g_clear_pointer(&client_out, g_free);
- purple_ircv3_connection_writef(connection, "AUTHENTICATE %s",
+ purple_ircv3_connection_writef(connection, "%s %s", + PURPLE_IRCV3_MSG_AUTHENTICATE, - purple_ircv3_connection_writef(connection, "AUTHENTICATE +");
+ purple_ircv3_connection_writef(connection, "%s +", + PURPLE_IRCV3_MSG_AUTHENTICATE); --- a/libpurple/protocols/ircv3/tests/test_ircv3_parser.c Sun Nov 19 00:02:56 2023 -0600
+++ b/libpurple/protocols/ircv3/tests/test_ircv3_parser.c Sun Nov 19 00:05:16 2023 -0600
@@ -20,6 +20,7 @@
+#include "../purpleircv3constants.h" #include "../purpleircv3message.h"
#include "../purpleircv3parser.h"
@@ -240,7 +241,7 @@
test_purple_ircv3_parser_with_source_and_trailing_colon(void) {
TestPurpleIRCv3ParserData data = {
+ .command = PURPLE_IRCV3_MSG_PRIVMSG, .params = {"bar", "lol :) "},
@@ -383,7 +384,7 @@
TestPurpleIRCv3ParserData data = {
.source = "coolguy!ag@net\x03" "5w\x03" "ork.admin",
+ .command = PURPLE_IRCV3_MSG_PRIVMSG, .params = {"foo", "bar baz"},
@@ -402,7 +403,7 @@
TestPurpleIRCv3ParserData data = {
.source = "coolguy!~ag@n\x02" "et\x03" "05w\x0f" "ork.admin",
+ .command = PURPLE_IRCV3_MSG_PRIVMSG, .params = {"foo", "bar baz"},
@@ -634,7 +635,7 @@
test_purple_ircv3_parser_message_tags_none(void) {
TestPurpleIRCv3ParserData data = {
.source = "nick!ident@host.com",
+ .command = PURPLE_IRCV3_MSG_PRIVMSG, .params = {"me", "Hello"},
@@ -649,7 +650,7 @@
test_purple_ircv3_parser_message_tags_3_tags(void) {
TestPurpleIRCv3ParserData data = {
.source = "nick!ident@host.com",
+ .command = PURPLE_IRCV3_MSG_PRIVMSG, .params = {"me", "Hello"},
@@ -670,7 +671,7 @@
test_purple_ircv3_parser_message_tags_client_only(void) {
TestPurpleIRCv3ParserData data = {
.source = "url_bot!bot@example.com",
+ .command = PURPLE_IRCV3_MSG_PRIVMSG, .params = {"#channel", "Example.com: A News Story"},