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:
@ -41,6 +41,7 @@
|
|||||||
#include <maxscale/alloc.h>
|
#include <maxscale/alloc.h>
|
||||||
#include <maxscale/users.h>
|
#include <maxscale/users.h>
|
||||||
#include <maxscale/service.hh>
|
#include <maxscale/service.hh>
|
||||||
|
#include <maxscale/poll.h>
|
||||||
|
|
||||||
static RSA* rsa_512 = NULL;
|
static RSA* rsa_512 = NULL;
|
||||||
static RSA* rsa_1024 = NULL;
|
static RSA* rsa_1024 = NULL;
|
||||||
@ -81,17 +82,6 @@ SERV_LISTENER::~SERV_LISTENER()
|
|||||||
SSL_LISTENER_free(ssl);
|
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,
|
SERV_LISTENER* listener_alloc(SERVICE* service,
|
||||||
const char* name,
|
const char* name,
|
||||||
const char* protocol,
|
const char* protocol,
|
||||||
@ -124,16 +114,52 @@ SERV_LISTENER* listener_alloc(SERVICE* service,
|
|||||||
auth_options, auth_instance, ssl);
|
auth_options, auth_instance, ssl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Free a listener
|
|
||||||
*
|
|
||||||
* @param listener Listener to free
|
|
||||||
*/
|
|
||||||
void listener_free(SERV_LISTENER* listener)
|
void listener_free(SERV_LISTENER* listener)
|
||||||
{
|
{
|
||||||
delete 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
|
* Set the maximum SSL/TLS version the listener will support
|
||||||
* @param ssl_listener Listener data to configure
|
* @param ssl_listener Listener data to configure
|
||||||
|
@ -596,9 +596,8 @@ bool serviceStopListener(SERVICE* svc, const char* name)
|
|||||||
{
|
{
|
||||||
if (listener_is_active(listener) && listener->name == 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;
|
rval = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -619,10 +618,8 @@ bool serviceStartListener(SERVICE* svc, const char* name)
|
|||||||
{
|
{
|
||||||
if (listener_is_active(listener) && listener->name == name)
|
if (listener_is_active(listener) && listener->name == name)
|
||||||
{
|
{
|
||||||
if (listener->listener && listener->listener->session->state == SESSION_STATE_LISTENER_STOPPED
|
if (listener_start(listener))
|
||||||
&& poll_add_dcb(listener->listener) == 0)
|
|
||||||
{
|
{
|
||||||
listener->listener->session->state = SESSION_STATE_LISTENER;
|
|
||||||
rval = true;
|
rval = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -672,16 +669,11 @@ bool serviceStop(SERVICE* service)
|
|||||||
for (SERV_LISTENER* listener = listener_iterator_init(service, &iter);
|
for (SERV_LISTENER* listener = listener_iterator_init(service, &iter);
|
||||||
listener; listener = listener_iterator_next(&iter))
|
listener; listener = listener_iterator_next(&iter))
|
||||||
{
|
{
|
||||||
if (listener_is_active(listener)
|
if (listener_is_active(listener) && listener_stop(listener))
|
||||||
&& listener->listener && listener->listener->session->state == SESSION_STATE_LISTENER)
|
|
||||||
{
|
{
|
||||||
if (poll_remove_dcb(listener->listener) == 0)
|
|
||||||
{
|
|
||||||
listener->listener->session->state = SESSION_STATE_LISTENER_STOPPED;
|
|
||||||
listeners++;
|
listeners++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
service->state = SERVICE_STATE_STOPPED;
|
service->state = SERVICE_STATE_STOPPED;
|
||||||
}
|
}
|
||||||
@ -708,16 +700,11 @@ bool serviceStart(SERVICE* service)
|
|||||||
for (SERV_LISTENER* listener = listener_iterator_init(service, &iter);
|
for (SERV_LISTENER* listener = listener_iterator_init(service, &iter);
|
||||||
listener; listener = listener_iterator_next(&iter))
|
listener; listener = listener_iterator_next(&iter))
|
||||||
{
|
{
|
||||||
if (listener_is_active(listener)
|
if (listener_is_active(listener) && listener_start(listener))
|
||||||
&& listener->listener && listener->listener->session->state == SESSION_STATE_LISTENER_STOPPED)
|
|
||||||
{
|
{
|
||||||
if (poll_add_dcb(listener->listener) == 0)
|
|
||||||
{
|
|
||||||
listener->listener->session->state = SESSION_STATE_LISTENER;
|
|
||||||
listeners++;
|
listeners++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
service->state = SERVICE_STATE_STARTED;
|
service->state = SERVICE_STATE_STARTED;
|
||||||
}
|
}
|
||||||
@ -754,18 +741,8 @@ bool service_remove_listener(Service* service, const char* target)
|
|||||||
{
|
{
|
||||||
if (listener_is_active(listener) && listener->name == target)
|
if (listener_is_active(listener) && listener->name == target)
|
||||||
{
|
{
|
||||||
listener_set_active(listener, false);
|
listener_destroy(listener);
|
||||||
|
|
||||||
if (poll_remove_dcb(listener->listener) == 0)
|
|
||||||
{
|
|
||||||
listener->listener->session->state = SESSION_STATE_LISTENER_STOPPED;
|
|
||||||
rval = true;
|
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;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user