degesch: shuffle some code
This commit is contained in:
parent
4970929f1d
commit
935d671a57
80
degesch.c
80
degesch.c
|
@ -1041,11 +1041,17 @@ struct server
|
||||||
SSL_CTX *ssl_ctx; ///< SSL context
|
SSL_CTX *ssl_ctx; ///< SSL context
|
||||||
SSL *ssl; ///< SSL connection
|
SSL *ssl; ///< SSL connection
|
||||||
|
|
||||||
// TODO: an output queue to prevent excess floods (this will be needed
|
// Events:
|
||||||
// especially for away status polling)
|
|
||||||
|
struct poller_timer ping_tmr; ///< We should send a ping
|
||||||
|
struct poller_timer timeout_tmr; ///< Connection seems to be dead
|
||||||
|
struct poller_timer reconnect_tmr; ///< We should reconnect now
|
||||||
|
|
||||||
// IRC:
|
// IRC:
|
||||||
|
|
||||||
|
// TODO: an output queue to prevent excess floods (this will be needed
|
||||||
|
// especially for away status polling)
|
||||||
|
|
||||||
struct str_map irc_users; ///< IRC user data
|
struct str_map irc_users; ///< IRC user data
|
||||||
struct str_map irc_channels; ///< IRC channel data
|
struct str_map irc_channels; ///< IRC channel data
|
||||||
struct str_map irc_buffer_map; ///< Maps IRC identifiers to buffers
|
struct str_map irc_buffer_map; ///< Maps IRC identifiers to buffers
|
||||||
|
@ -1075,12 +1081,6 @@ struct server
|
||||||
char *irc_chanuser_modes; ///< Channel user modes
|
char *irc_chanuser_modes; ///< Channel user modes
|
||||||
|
|
||||||
unsigned irc_max_modes; ///< Max parametrized modes per command
|
unsigned irc_max_modes; ///< Max parametrized modes per command
|
||||||
|
|
||||||
// Events:
|
|
||||||
|
|
||||||
struct poller_timer ping_tmr; ///< We should send a ping
|
|
||||||
struct poller_timer timeout_tmr; ///< Connection seems to be dead
|
|
||||||
struct poller_timer reconnect_tmr; ///< We should reconnect now
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void on_irc_timeout (void *user_data);
|
static void on_irc_timeout (void *user_data);
|
||||||
|
@ -1096,6 +1096,25 @@ server_init (struct server *self, struct poller *poller)
|
||||||
str_init (&self->read_buffer);
|
str_init (&self->read_buffer);
|
||||||
self->state = IRC_DISCONNECTED;
|
self->state = IRC_DISCONNECTED;
|
||||||
|
|
||||||
|
poller_timer_init (&self->timeout_tmr, poller);
|
||||||
|
self->timeout_tmr.dispatcher = on_irc_timeout;
|
||||||
|
self->timeout_tmr.user_data = self;
|
||||||
|
|
||||||
|
poller_timer_init (&self->ping_tmr, poller);
|
||||||
|
self->ping_tmr.dispatcher = on_irc_ping_timeout;
|
||||||
|
self->ping_tmr.user_data = self;
|
||||||
|
|
||||||
|
poller_timer_init (&self->reconnect_tmr, poller);
|
||||||
|
self->reconnect_tmr.dispatcher = (poller_timer_fn) irc_initiate_connect;
|
||||||
|
self->reconnect_tmr.user_data = self;
|
||||||
|
|
||||||
|
str_map_init (&self->irc_users);
|
||||||
|
self->irc_users.key_xfrm = irc_strxfrm;
|
||||||
|
str_map_init (&self->irc_channels);
|
||||||
|
self->irc_channels.key_xfrm = irc_strxfrm;
|
||||||
|
str_map_init (&self->irc_buffer_map);
|
||||||
|
self->irc_buffer_map.key_xfrm = irc_strxfrm;
|
||||||
|
|
||||||
str_init (&self->irc_user_mode);
|
str_init (&self->irc_user_mode);
|
||||||
|
|
||||||
// Defaults as per the RPL_ISUPPORT drafts, or RFC 1459
|
// Defaults as per the RPL_ISUPPORT drafts, or RFC 1459
|
||||||
|
@ -1115,30 +1134,13 @@ server_init (struct server *self, struct poller *poller)
|
||||||
self->irc_chanuser_modes = xstrdup ("ov");
|
self->irc_chanuser_modes = xstrdup ("ov");
|
||||||
|
|
||||||
self->irc_max_modes = 3;
|
self->irc_max_modes = 3;
|
||||||
|
|
||||||
str_map_init (&self->irc_users);
|
|
||||||
self->irc_users.key_xfrm = irc_strxfrm;
|
|
||||||
str_map_init (&self->irc_channels);
|
|
||||||
self->irc_channels.key_xfrm = irc_strxfrm;
|
|
||||||
str_map_init (&self->irc_buffer_map);
|
|
||||||
self->irc_buffer_map.key_xfrm = irc_strxfrm;
|
|
||||||
|
|
||||||
poller_timer_init (&self->timeout_tmr, poller);
|
|
||||||
self->timeout_tmr.dispatcher = on_irc_timeout;
|
|
||||||
self->timeout_tmr.user_data = self;
|
|
||||||
|
|
||||||
poller_timer_init (&self->ping_tmr, poller);
|
|
||||||
self->ping_tmr.dispatcher = on_irc_ping_timeout;
|
|
||||||
self->ping_tmr.user_data = self;
|
|
||||||
|
|
||||||
poller_timer_init (&self->reconnect_tmr, poller);
|
|
||||||
self->reconnect_tmr.dispatcher = (poller_timer_fn) irc_initiate_connect;
|
|
||||||
self->reconnect_tmr.user_data = self;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
server_free (struct server *self)
|
server_free (struct server *self)
|
||||||
{
|
{
|
||||||
|
free (self->name);
|
||||||
|
|
||||||
if (self->connector)
|
if (self->connector)
|
||||||
{
|
{
|
||||||
connector_free (self->connector);
|
connector_free (self->connector);
|
||||||
|
@ -1156,7 +1158,9 @@ server_free (struct server *self)
|
||||||
if (self->ssl_ctx)
|
if (self->ssl_ctx)
|
||||||
SSL_CTX_free (self->ssl_ctx);
|
SSL_CTX_free (self->ssl_ctx);
|
||||||
|
|
||||||
free (self->name);
|
str_map_free (&self->irc_users);
|
||||||
|
str_map_free (&self->irc_channels);
|
||||||
|
str_map_free (&self->irc_buffer_map);
|
||||||
|
|
||||||
if (self->irc_user)
|
if (self->irc_user)
|
||||||
user_unref (self->irc_user);
|
user_unref (self->irc_user);
|
||||||
|
@ -1174,10 +1178,6 @@ server_free (struct server *self)
|
||||||
|
|
||||||
free (self->irc_chanuser_prefixes);
|
free (self->irc_chanuser_prefixes);
|
||||||
free (self->irc_chanuser_modes);
|
free (self->irc_chanuser_modes);
|
||||||
|
|
||||||
str_map_free (&self->irc_users);
|
|
||||||
str_map_free (&self->irc_channels);
|
|
||||||
str_map_free (&self->irc_buffer_map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -3170,7 +3170,7 @@ on_irc_disconnected (struct server *s)
|
||||||
{
|
{
|
||||||
hard_assert (irc_is_connected (s));
|
hard_assert (irc_is_connected (s));
|
||||||
|
|
||||||
// Get rid of the dead socket and related things
|
// Get rid of the dead socket
|
||||||
if (s->ssl)
|
if (s->ssl)
|
||||||
{
|
{
|
||||||
SSL_free (s->ssl);
|
SSL_free (s->ssl);
|
||||||
|
@ -3183,6 +3183,13 @@ on_irc_disconnected (struct server *s)
|
||||||
s->socket = -1;
|
s->socket = -1;
|
||||||
s->state = IRC_DISCONNECTED;
|
s->state = IRC_DISCONNECTED;
|
||||||
|
|
||||||
|
s->read_event.closed = true;
|
||||||
|
poller_fd_reset (&s->read_event);
|
||||||
|
|
||||||
|
// All of our timers have lost their meaning now
|
||||||
|
irc_cancel_timers (s);
|
||||||
|
|
||||||
|
// Reset state bound to the connection
|
||||||
struct str_map_iter iter;
|
struct str_map_iter iter;
|
||||||
str_map_iter_init (&iter, &s->irc_channels);
|
str_map_iter_init (&iter, &s->irc_channels);
|
||||||
struct channel *channel;
|
struct channel *channel;
|
||||||
|
@ -3199,12 +3206,9 @@ on_irc_disconnected (struct server *s)
|
||||||
free (s->irc_user_host);
|
free (s->irc_user_host);
|
||||||
s->irc_user_host = NULL;
|
s->irc_user_host = NULL;
|
||||||
|
|
||||||
s->read_event.closed = true;
|
// TODO: reset RPL_ISUPPORT information
|
||||||
poller_fd_reset (&s->read_event);
|
|
||||||
|
|
||||||
// All of our timers have lost their meaning now
|
|
||||||
irc_cancel_timers (s);
|
|
||||||
|
|
||||||
|
// Take any relevant actions
|
||||||
if (s->ctx->quitting)
|
if (s->ctx->quitting)
|
||||||
try_finish_quit (s->ctx);
|
try_finish_quit (s->ctx);
|
||||||
else if (s->manual_disconnect)
|
else if (s->manual_disconnect)
|
||||||
|
|
Loading…
Reference in New Issue