diff --git a/include/maxscale/listener.hh b/include/maxscale/listener.hh index 8ed8b7ff1..94886a33d 100644 --- a/include/maxscale/listener.hh +++ b/include/maxscale/listener.hh @@ -67,7 +67,7 @@ using SListener = std::shared_ptr; * @param listener Listener to serialize * @return True if the serialization of the listener was successful, false if it fails */ -bool listener_serialize(const SERV_LISTENER* listener); +bool listener_serialize(const SListener& listener); /** * @brief Convert listener to JSON @@ -76,7 +76,7 @@ bool listener_serialize(const SERV_LISTENER* listener); * * @return Converted listener */ -json_t* listener_to_json(const SERV_LISTENER* listener); +json_t* listener_to_json(const SListener& listener); /** * Create a new listener @@ -92,14 +92,14 @@ json_t* listener_to_json(const SERV_LISTENER* listener); * * @return New listener or nullptr on error */ -SERV_LISTENER* listener_alloc(SERVICE* service, - const char* name, - const char* protocol, - const char* address, - unsigned short port, - const char* authenticator, - const char* auth_options, - SSL_LISTENER* ssl); +SListener listener_alloc(SERVICE* service, + const char* name, + const char* protocol, + const char* address, + unsigned short port, + const char* authenticator, + const char* auth_options, + SSL_LISTENER* ssl); /** * @brief Free a listener @@ -108,7 +108,7 @@ SERV_LISTENER* listener_alloc(SERVICE* service, * * @param listener Listener to free */ -void listener_free(SERV_LISTENER* listener); +void listener_free(const SListener& listener); /** * Destroy a listener @@ -118,7 +118,7 @@ void listener_free(SERV_LISTENER* listener); * * @param listener Listener to destroy */ -void listener_destroy(SERV_LISTENER* listener); +void listener_destroy(const SListener& listener); /** * Stop a listener @@ -127,7 +127,7 @@ void listener_destroy(SERV_LISTENER* listener); * * @return True if listener was successfully stopped */ -bool listener_stop(SERV_LISTENER* listener); +bool listener_stop(const SListener& listener); /** * Start a stopped listener @@ -136,7 +136,7 @@ bool listener_stop(SERV_LISTENER* listener); * * @return True if listener was successfully started */ -bool listener_start(SERV_LISTENER* listener); +bool listener_start(const SListener& listener); /** * Find a listener @@ -191,7 +191,7 @@ void SSL_LISTENER_free(SSL_LISTENER* ssl); * * @return True if listener is active */ -bool listener_is_active(SERV_LISTENER* listener); +bool listener_is_active(const SListener& listener); /** * @brief Modify listener active state @@ -199,7 +199,7 @@ bool listener_is_active(SERV_LISTENER* listener); * @param listener Listener to modify * @param active True to activate, false to disable */ -void listener_set_active(SERV_LISTENER* listener, bool active); +void listener_set_active(const SListener& listener, bool active); /** * Get listener state as a string @@ -208,4 +208,4 @@ void listener_set_active(SERV_LISTENER* listener, bool active); * * @return State of the listener as a string */ -const char* listener_state_to_string(const SERV_LISTENER* listener); +const char* listener_state_to_string(const SListener& listener); diff --git a/server/core/listener.cc b/server/core/listener.cc index 892777914..84ec00dc8 100644 --- a/server/core/listener.cc +++ b/server/core/listener.cc @@ -74,14 +74,14 @@ SERV_LISTENER::~SERV_LISTENER() SSL_LISTENER_free(ssl); } -SERV_LISTENER* listener_alloc(SERVICE* service, - const char* name, - const char* protocol, - const char* address, - unsigned short port, - const char* authenticator, - const char* auth_options, - SSL_LISTENER* ssl) +SListener listener_alloc(SERVICE* service, + const char* name, + const char* protocol, + const char* address, + unsigned short port, + const char* authenticator, + const char* auth_options, + SSL_LISTENER* ssl) { if (!authenticator) { @@ -102,27 +102,25 @@ SERV_LISTENER* listener_alloc(SERVICE* service, return nullptr; } - auto listener = new(std::nothrow) SERV_LISTENER(service, name, address, port, protocol, authenticator, - auth_options, auth_instance, ssl); + SListener listener(new(std::nothrow) SERV_LISTENER(service, name, address, port, protocol, authenticator, + auth_options, auth_instance, ssl)); if (listener) { std::lock_guard guard(listener_lock); - all_listeners.emplace_back(listener); + all_listeners.push_back(listener); } return listener; } -void listener_free(SERV_LISTENER* listener) +void listener_free(const SListener& listener) { std::lock_guard guard(listener_lock); - all_listeners.remove_if([&](const SListener& l) { - return l.get() == listener; - }); + all_listeners.remove(listener); } -void listener_destroy(SERV_LISTENER* listener) +void listener_destroy(const SListener& listener) { listener_set_active(listener, false); listener_stop(listener); @@ -133,7 +131,7 @@ void listener_destroy(SERV_LISTENER* listener) listener->listener->fd = -1; } -bool listener_stop(SERV_LISTENER* listener) +bool listener_stop(const SListener& listener) { bool rval = false; mxb_assert(listener->listener); @@ -148,7 +146,7 @@ bool listener_stop(SERV_LISTENER* listener) return rval; } -bool listener_start(SERV_LISTENER* listener) +bool listener_start(const SListener& listener) { bool rval = true; mxb_assert(listener->listener); @@ -492,7 +490,7 @@ static RSA* tmp_rsa_callback(SSL* s, int is_export, int keylength) * @param filename Filename where configuration is written * @return True on success, false on error */ -static bool create_listener_config(const SERV_LISTENER* listener, const char* filename) +static bool create_listener_config(const SListener& listener, const char* filename) { int file = open(filename, O_EXCL | O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); @@ -530,7 +528,7 @@ static bool create_listener_config(const SERV_LISTENER* listener, const char* fi return true; } -bool listener_serialize(const SERV_LISTENER* listener) +bool listener_serialize(const SListener& listener) { bool rval = false; char filename[PATH_MAX]; @@ -572,7 +570,7 @@ bool listener_serialize(const SERV_LISTENER* listener) return rval; } -json_t* listener_to_json(const SERV_LISTENER* listener) +json_t* listener_to_json(const SListener& listener) { json_t* param = json_object(); json_object_set_new(param, "address", json_string(listener->address.c_str())); @@ -600,7 +598,7 @@ json_t* listener_to_json(const SERV_LISTENER* listener) if (listener->listener->authfunc.diagnostic_json) { - json_t* diag = listener->listener->authfunc.diagnostic_json(listener); + json_t* diag = listener->listener->authfunc.diagnostic_json(listener.get()); if (diag) { @@ -616,17 +614,17 @@ json_t* listener_to_json(const SERV_LISTENER* listener) return rval; } -void listener_set_active(SERV_LISTENER* listener, bool active) +void listener_set_active(const SListener& listener, bool active) { atomic_store_int32(&listener->active, active ? 1 : 0); } -bool listener_is_active(SERV_LISTENER* listener) +bool listener_is_active(const SListener& listener) { return atomic_load_int32(&listener->active); } -const char* listener_state_to_string(const SERV_LISTENER* listener) +const char* listener_state_to_string(const SListener& listener) { mxb_assert(listener);