degesch: shuffle some code
This commit is contained in:
		
							
								
								
									
										80
									
								
								degesch.c
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								degesch.c
									
									
									
									
									
								
							@@ -1041,11 +1041,17 @@ struct server
 | 
			
		||||
	SSL_CTX *ssl_ctx;                   ///< SSL context
 | 
			
		||||
	SSL *ssl;                           ///< SSL connection
 | 
			
		||||
 | 
			
		||||
	// TODO: an output queue to prevent excess floods (this will be needed
 | 
			
		||||
	//   especially for away status polling)
 | 
			
		||||
	// 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
 | 
			
		||||
 | 
			
		||||
	// 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_channels;        ///< IRC channel data
 | 
			
		||||
	struct str_map irc_buffer_map;      ///< Maps IRC identifiers to buffers
 | 
			
		||||
@@ -1075,12 +1081,6 @@ struct server
 | 
			
		||||
	char *irc_chanuser_modes;           ///< Channel user modes
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
@@ -1096,6 +1096,25 @@ server_init (struct server *self, struct poller *poller)
 | 
			
		||||
	str_init (&self->read_buffer);
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
	// 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_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
 | 
			
		||||
server_free (struct server *self)
 | 
			
		||||
{
 | 
			
		||||
	free (self->name);
 | 
			
		||||
 | 
			
		||||
	if (self->connector)
 | 
			
		||||
	{
 | 
			
		||||
		connector_free (self->connector);
 | 
			
		||||
@@ -1156,7 +1158,9 @@ server_free (struct server *self)
 | 
			
		||||
	if (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)
 | 
			
		||||
		user_unref (self->irc_user);
 | 
			
		||||
@@ -1174,10 +1178,6 @@ server_free (struct server *self)
 | 
			
		||||
 | 
			
		||||
	free (self->irc_chanuser_prefixes);
 | 
			
		||||
	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
 | 
			
		||||
@@ -3170,7 +3170,7 @@ on_irc_disconnected (struct server *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)
 | 
			
		||||
	{
 | 
			
		||||
		SSL_free (s->ssl);
 | 
			
		||||
@@ -3183,6 +3183,13 @@ on_irc_disconnected (struct server *s)
 | 
			
		||||
	s->socket = -1;
 | 
			
		||||
	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;
 | 
			
		||||
	str_map_iter_init (&iter, &s->irc_channels);
 | 
			
		||||
	struct channel *channel;
 | 
			
		||||
@@ -3199,12 +3206,9 @@ on_irc_disconnected (struct server *s)
 | 
			
		||||
	free (s->irc_user_host);
 | 
			
		||||
	s->irc_user_host = NULL;
 | 
			
		||||
 | 
			
		||||
	s->read_event.closed = true;
 | 
			
		||||
	poller_fd_reset (&s->read_event);
 | 
			
		||||
 | 
			
		||||
	// All of our timers have lost their meaning now
 | 
			
		||||
	irc_cancel_timers (s);
 | 
			
		||||
	// TODO: reset RPL_ISUPPORT information
 | 
			
		||||
 | 
			
		||||
	// Take any relevant actions
 | 
			
		||||
	if (s->ctx->quitting)
 | 
			
		||||
		try_finish_quit (s->ctx);
 | 
			
		||||
	else if (s->manual_disconnect)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user