degesch: shuffle some code

This commit is contained in:
Přemysl Eric Janouch 2015-06-20 21:10:50 +02:00
parent 4970929f1d
commit 935d671a57
1 changed files with 42 additions and 38 deletions

View File

@ -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)