MXS-2196: Move listener operations into listener sources

The operations that are done on a listener are now done in the correct
source file.
This commit is contained in:
Markus Mäkelä
2018-11-29 11:22:22 +02:00
parent 6c281d55e2
commit 5926ac2c3c
2 changed files with 50 additions and 47 deletions

View File

@ -41,6 +41,7 @@
#include <maxscale/alloc.h>
#include <maxscale/users.h>
#include <maxscale/service.hh>
#include <maxscale/poll.h>
static RSA* rsa_512 = NULL;
static RSA* rsa_1024 = NULL;
@ -81,17 +82,6 @@ SERV_LISTENER::~SERV_LISTENER()
SSL_LISTENER_free(ssl);
}
/**
* Create a new listener structure
*
* @param protocol The name of the protocol module
* @param address The address to listen with
* @param port The port to listen on
* @param authenticator Name of the authenticator to be used
* @param options Authenticator options
* @param ssl SSL configuration
* @return New listener object or NULL if unable to allocate
*/
SERV_LISTENER* listener_alloc(SERVICE* service,
const char* name,
const char* protocol,
@ -124,16 +114,52 @@ SERV_LISTENER* listener_alloc(SERVICE* service,
auth_options, auth_instance, ssl);
}
/**
* @brief Free a listener
*
* @param listener Listener to free
*/
void listener_free(SERV_LISTENER* listener)
{
delete listener;
}
void listener_destroy(SERV_LISTENER* listener)
{
listener_set_active(listener, false);
listener_stop(listener);
// TODO: This is not pretty but it works, revise when listeners are refactored. This is
// thread-safe as the listener is freed on the same thread that closes the socket.
close(listener->listener->fd);
listener->listener->fd = -1;
}
bool listener_stop(SERV_LISTENER* listener)
{
bool rval = false;
mxb_assert(listener->listener);
if (listener->listener->session->state == SESSION_STATE_LISTENER
&& poll_remove_dcb(listener->listener) == 0)
{
listener->listener->session->state = SESSION_STATE_LISTENER_STOPPED;
rval = true;
}
return rval;
}
bool listener_start(SERV_LISTENER* listener)
{
bool rval = true;
mxb_assert(listener->listener);
if (listener->listener->session->state == SESSION_STATE_LISTENER_STOPPED
&& poll_add_dcb(listener->listener) == 0)
{
listener->listener->session->state = SESSION_STATE_LISTENER;
rval = true;
}
return rval;
}
/**
* Set the maximum SSL/TLS version the listener will support
* @param ssl_listener Listener data to configure

View File

@ -596,9 +596,8 @@ bool serviceStopListener(SERVICE* svc, const char* name)
{
if (listener_is_active(listener) && listener->name == name)
{
if (poll_remove_dcb(listener->listener) == 0)
if (listener_stop(listener))
{
listener->listener->session->state = SESSION_STATE_LISTENER_STOPPED;
rval = true;
}
break;
@ -619,10 +618,8 @@ bool serviceStartListener(SERVICE* svc, const char* name)
{
if (listener_is_active(listener) && listener->name == name)
{
if (listener->listener && listener->listener->session->state == SESSION_STATE_LISTENER_STOPPED
&& poll_add_dcb(listener->listener) == 0)
if (listener_start(listener))
{
listener->listener->session->state = SESSION_STATE_LISTENER;
rval = true;
}
break;
@ -672,14 +669,9 @@ bool serviceStop(SERVICE* service)
for (SERV_LISTENER* listener = listener_iterator_init(service, &iter);
listener; listener = listener_iterator_next(&iter))
{
if (listener_is_active(listener)
&& listener->listener && listener->listener->session->state == SESSION_STATE_LISTENER)
if (listener_is_active(listener) && listener_stop(listener))
{
if (poll_remove_dcb(listener->listener) == 0)
{
listener->listener->session->state = SESSION_STATE_LISTENER_STOPPED;
listeners++;
}
listeners++;
}
}
@ -708,14 +700,9 @@ bool serviceStart(SERVICE* service)
for (SERV_LISTENER* listener = listener_iterator_init(service, &iter);
listener; listener = listener_iterator_next(&iter))
{
if (listener_is_active(listener)
&& listener->listener && listener->listener->session->state == SESSION_STATE_LISTENER_STOPPED)
if (listener_is_active(listener) && listener_start(listener))
{
if (poll_add_dcb(listener->listener) == 0)
{
listener->listener->session->state = SESSION_STATE_LISTENER;
listeners++;
}
listeners++;
}
}
@ -754,18 +741,8 @@ bool service_remove_listener(Service* service, const char* target)
{
if (listener_is_active(listener) && listener->name == target)
{
listener_set_active(listener, false);
if (poll_remove_dcb(listener->listener) == 0)
{
listener->listener->session->state = SESSION_STATE_LISTENER_STOPPED;
rval = true;
// TODO: This is not pretty but it works, revise when listeners are refactored. This is
// thread-safe as the listener is freed on the same thread that closes the socket.
close(listener->listener->fd);
listener->listener->fd = -1;
}
listener_destroy(listener);
rval = true;
break;
}
}