This commit is contained in:
ailin-nemui 2018-11-25 13:11:57 +01:00
parent 882ff0d976
commit 5c63ce1a2e
6 changed files with 63 additions and 39 deletions

View File

@ -206,8 +206,8 @@ SIGNAL_REGISTER(session_save_channel, 3, (CHANNEL_REC *channel, CONFIG_REC *conf
channel, config, node)
SIGNAL_REGISTER(session_save_server, 3, (SERVER_REC *server, CONFIG_REC *config, CONFIG_NODE *node),
server, config, node)
SIGNAL_REGISTER(session_restore_nick, 2, (CHANNEL_REC *channel, NICK_REC *nick),
channel, nick)
SIGNAL_REGISTER(session_restore_nick, 2, (CHANNEL_REC *channel, CONFIG_NODE *node),
channel, node)
SIGNAL_REGISTER(session_restore_channel, 2, (CHANNEL_REC *channel, CONFIG_NODE *node),
channel, node)
SIGNAL_REGISTER(session_restore_server, 2, (SERVER_REC *server, CONFIG_NODE *node),

View File

@ -122,7 +122,7 @@
"session save nick", CHANNEL_REC, NICK_REC, CONFIG_REC, CONFIG_NODE
"session save channel", CHANNEL_REC, CONFIG_REC, CONFIG_NODE
"session save server", SERVER_REC, CONFIG_REC, CONFIG_NODE
"session restore nick", CHANNEL_REC, NICK_REC
"session restore nick", CHANNEL_REC, CONFIG_NODE
"session restore channel", CHANNEL_REC, CONFIG_NODE
"session restore server", SERVER_REC, CONFIG_NODE
"session restore", CONFIG_REC

View File

@ -98,8 +98,9 @@ static gboolean parse_cap_name(char *name, char **key, char **val)
return TRUE;
}
static void event_cap (IRC_SERVER_REC *server, char *args, char *nick, char *address)
static void event_cap (SERVER_REC *gserver, const char *args, const char *nick, const char *address)
{
IRC_SERVER_REC *server;
GSList *tmp;
GString *cmd;
char *params, *evt, *list, *star, **caps;
@ -109,6 +110,9 @@ static void event_cap (IRC_SERVER_REC *server, char *args, char *nick, char *add
if (params == NULL)
return;
if ((server = IRC_SERVER(gserver)) == NULL)
return;
/* Multiline responses have an additional parameter and we have to do
* this stupid dance to parse them */
if (!g_ascii_strcasecmp(evt, "LS") && !strcmp(star, "*")) {
@ -279,8 +283,12 @@ static void event_cap (IRC_SERVER_REC *server, char *args, char *nick, char *add
g_free(params);
}
static void event_invalid_cap (IRC_SERVER_REC *server, const char *data, const char *from)
static void event_invalid_cap (SERVER_REC *gserver, const char *data, const char *from, const char *u0)
{
IRC_SERVER_REC *server;
if ((server = IRC_SERVER(gserver)) == NULL)
return;
/* The server didn't understand one (or more) requested caps, terminate the negotiation.
* This could be handled in a graceful way but since it shouldn't really ever happen this seems a
* good way to deal with 410 errors. */
@ -290,8 +298,8 @@ static void event_invalid_cap (IRC_SERVER_REC *server, const char *data, const c
void cap_init (void)
{
signal_add_first__event_cap(event_cap);
signal_add_first__event_410(event_invalid_cap);
signal_add_first__event_("cap", event_cap);
signal_add_first__event_("410", event_invalid_cap);
}
void cap_deinit (void)

View File

@ -32,11 +32,14 @@
#include "sasl.h"
/* Fill information to connection from server setup record */
static void sig_server_setup_fill_reconn(IRC_SERVER_CONNECT_REC *conn,
IRC_SERVER_SETUP_REC *sserver)
static void sig_server_setup_fill_reconn(SERVER_CONNECT_REC *gconn,
SERVER_SETUP_REC *gsserver)
{
if (!IS_IRC_SERVER_CONNECT(conn) ||
!IS_IRC_SERVER_SETUP(sserver))
IRC_SERVER_CONNECT_REC *conn;
IRC_SERVER_SETUP_REC *sserver;
if ((conn = IRC_SERVER_CONNECT(gconn)) == NULL ||
(sserver = IRC_SERVER_SETUP(gsserver)) == NULL)
return;
if (sserver->cmd_queue_speed > 0)
@ -47,11 +50,12 @@ static void sig_server_setup_fill_reconn(IRC_SERVER_CONNECT_REC *conn,
conn->max_query_chans = sserver->max_query_chans;
}
static void sig_server_setup_fill_connect(IRC_SERVER_CONNECT_REC *conn)
static void sig_server_setup_fill_connect(SERVER_CONNECT_REC *gconn)
{
IRC_SERVER_CONNECT_REC *conn;
const char *value;
if (!IS_IRC_SERVER_CONNECT(conn))
if ((conn = IRC_SERVER_CONNECT(gconn)) == NULL)
return;
value = settings_get_str("alternate_nick");
@ -63,12 +67,16 @@ static void sig_server_setup_fill_connect(IRC_SERVER_CONNECT_REC *conn)
g_strdup(value) : NULL;
}
static void sig_server_setup_fill_chatnet(IRC_SERVER_CONNECT_REC *conn,
IRC_CHATNET_REC *ircnet)
static void sig_server_setup_fill_chatnet(SERVER_CONNECT_REC *gconn,
CHATNET_REC *gircnet)
{
if (!IS_IRC_SERVER_CONNECT(conn))
IRC_SERVER_CONNECT_REC *conn;
IRC_CHATNET_REC *ircnet;
if ((conn = IRC_SERVER_CONNECT(gconn)) == NULL)
return;
if ((ircnet = IRCNET(gircnet)) == NULL)
return;
g_return_if_fail(IS_IRCNET(ircnet));
if (ircnet->alternate_nick != NULL) {
g_free_and_null(conn->alternate_nick);
@ -164,12 +172,13 @@ static void init_userinfo(void)
SIGNAL_EMIT(irssi_init_userinfo_changed, GUINT_TO_POINTER(changed));
}
static void sig_server_setup_read(IRC_SERVER_SETUP_REC *rec, CONFIG_NODE *node)
static void sig_server_setup_read(SERVER_SETUP_REC *grec, CONFIG_NODE *node)
{
IRC_SERVER_SETUP_REC *rec;
g_return_if_fail(rec != NULL);
g_return_if_fail(node != NULL);
if (!IS_IRC_SERVER_SETUP(rec))
if ((rec = IRC_SERVER_SETUP(grec)) == NULL)
return;
rec->max_cmds_at_once = config_node_get_int(node, "cmds_max_at_once", 0);
@ -177,10 +186,11 @@ static void sig_server_setup_read(IRC_SERVER_SETUP_REC *rec, CONFIG_NODE *node)
rec->max_query_chans = config_node_get_int(node, "max_query_chans", 0);
}
static void sig_server_setup_saved(IRC_SERVER_SETUP_REC *rec,
static void sig_server_setup_saved(SERVER_SETUP_REC *grec,
CONFIG_NODE *node)
{
if (!IS_IRC_SERVER_SETUP(rec))
IRC_SERVER_SETUP_REC *rec;
if ((rec = IRC_SERVER_SETUP(grec)) == NULL)
return;
if (rec->max_cmds_at_once > 0)

View File

@ -21,6 +21,7 @@
#include "module.h"
#include "signals.h"
#include "signal-registry.h"
#include "core/signal-registry.h"
#include "net-sendbuffer.h"
#include "lib-config/iconfig.h"
#include "misc.h"
@ -38,14 +39,15 @@ static void session_isupport_foreach(char *key, char *value, struct _isupport_da
config_node_set_str(data->config, data->node, key, value);
}
static void sig_session_save_server(IRC_SERVER_REC *server, CONFIG_REC *config,
static void sig_session_save_server(SERVER_REC *gserver, CONFIG_REC *config,
CONFIG_NODE *node)
{
IRC_SERVER_REC *server;
GSList *tmp;
CONFIG_NODE *isupport;
struct _isupport_data isupport_data;
if (!IS_IRC_SERVER(server))
if ((server = IRC_SERVER(gserver)) == NULL)
return;
/* send all non-redirected commands to server immediately */
@ -80,12 +82,13 @@ static void sig_session_save_server(IRC_SERVER_REC *server, CONFIG_REC *config,
g_hash_table_foreach(server->isupport, (GHFunc) session_isupport_foreach, &isupport_data);
}
static void sig_session_restore_server(IRC_SERVER_REC *server,
static void sig_session_restore_server(SERVER_REC *gserver,
CONFIG_NODE *node)
{
IRC_SERVER_REC *server;
GSList *tmp;
if (!IS_IRC_SERVER(server))
if ((server = IRC_SERVER(gserver)) == NULL)
return;
if (server->real_address == NULL)
@ -126,15 +129,16 @@ static void sig_session_restore_server(IRC_SERVER_REC *server,
}
static void sig_session_restore_nick(IRC_CHANNEL_REC *channel,
static void sig_session_restore_nick(CHANNEL_REC *gchannel,
CONFIG_NODE *node)
{
IRC_CHANNEL_REC *channel;
const char *nick, *prefixes;
int op, halfop, voice;
char newprefixes[MAX_USER_PREFIXES + 1];
int i;
if (!IS_IRC_CHANNEL(channel))
if ((channel = IRC_CHANNEL(gchannel)) == NULL)
return;
nick = config_node_get_str(node, "nick", NULL);
@ -175,12 +179,13 @@ static void session_restore_channel(IRC_CHANNEL_REC *channel)
g_free(data);
}
static void sig_connected(IRC_SERVER_REC *server)
static void sig_connected(SERVER_REC *gserver)
{
IRC_SERVER_REC *server;
GSList *tmp;
char *str, *addr;
if (!IS_IRC_SERVER(server) || !server->session_reconnect)
if ((server = IRC_SERVER(gserver)) == NULL || !server->session_reconnect)
return;
str = g_strdup_printf("%s :Restoring connection to %s",

View File

@ -302,9 +302,10 @@ static void sasl_disconnected(IRC_SERVER_REC *server)
sasl_timeout_stop(server);
}
static void sig_sasl_over(IRC_SERVER_REC *server)
static void sig_sasl_over(SERVER_REC *gserver, const char *u0, const char *u1, const char *u2)
{
if (!IS_IRC_SERVER(server))
IRC_SERVER_REC *server;
if ((server = IRC_SERVER(gserver)) == NULL)
return;
/* The negotiation has now been terminated, if we didn't manage to
@ -333,18 +334,18 @@ void sasl_init(void)
{
settings_add_bool("server", "sasl_disconnect_on_failure", TRUE);
signal_add_first__event_001(sig_sasl_over);
signal_add_first__event_("001", sig_sasl_over);
/* this event can get us connected on broken ircds, see irc-servers.c */
signal_add_first__event_375(sig_sasl_over);
signal_add_first__event_("375", sig_sasl_over);
signal_add_first__server_cap_ack_sasl(sasl_start);
signal_add_first__server_cap_end(sig_sasl_over);
signal_add_first__event_authenticate(sasl_step);
signal_add_first__event_903(sasl_success);
signal_add_first__event_902(sasl_fail);
signal_add_first__event_904(sasl_fail);
signal_add_first__event_905(sasl_fail);
signal_add_first__event_906(sasl_fail);
signal_add_first__event_907(sasl_already);
signal_add_first__event_("903", sasl_success);
signal_add_first__event_("902", sasl_fail);
signal_add_first__event_("904", sasl_fail);
signal_add_first__event_("905", sasl_fail);
signal_add_first__event_("906", sasl_fail);
signal_add_first__event_("907", sasl_already);
signal_add_first__server_disconnected(sasl_disconnected);
}