
The state of each individual listener is now displayed in the REST API. Created common functions for printing the listener state and took them into use. Added the new state into MaxCtrl output.
134 lines
4.2 KiB
C
134 lines
4.2 KiB
C
#pragma once
|
|
/*
|
|
* Copyright (c) 2016 MariaDB Corporation Ab
|
|
*
|
|
* Use of this software is governed by the Business Source License included
|
|
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
|
|
*
|
|
* Change Date: 2020-01-01
|
|
*
|
|
* On the date above, in accordance with the Business Source License, use
|
|
* of this software will be governed by version 2 or later of the General
|
|
* Public License.
|
|
*/
|
|
|
|
/**
|
|
* @file listener.h
|
|
*/
|
|
|
|
#include <maxscale/cdefs.h>
|
|
#include <maxscale/protocol.h>
|
|
#include <maxscale/ssl.h>
|
|
#include <maxscale/hashtable.h>
|
|
#include <maxscale/jansson.h>
|
|
|
|
MXS_BEGIN_DECLS
|
|
|
|
struct dcb;
|
|
struct service;
|
|
|
|
/**
|
|
* The servlistener structure is used to link a service to the protocols that
|
|
* are used to support that service. It defines the name of the protocol module
|
|
* that should be loaded to support the client connection and the port that the
|
|
* protocol should use to listen for incoming client connections.
|
|
*/
|
|
typedef struct servlistener
|
|
{
|
|
char *name; /**< Name of the listener */
|
|
char *protocol; /**< Protocol module to load */
|
|
unsigned short port; /**< Port to listen on */
|
|
char *address; /**< Address to listen with */
|
|
char *authenticator; /**< Name of authenticator */
|
|
char *auth_options; /**< Authenticator options */
|
|
void *auth_instance; /**< Authenticator instance created in MXS_AUTHENTICATOR::initialize() */
|
|
SSL_LISTENER *ssl; /**< Structure of SSL data or NULL */
|
|
struct dcb *listener; /**< The DCB for the listener */
|
|
struct users *users; /**< The user data for this listener */
|
|
struct service* service; /**< The service which used by this listener */
|
|
SPINLOCK lock;
|
|
int active; /**< True if the port has not been deleted */
|
|
struct servlistener *next; /**< Next service protocol */
|
|
} SERV_LISTENER; // TODO: Rename to LISTENER
|
|
|
|
typedef struct listener_iterator
|
|
{
|
|
SERV_LISTENER* current;
|
|
} LISTENER_ITERATOR;
|
|
|
|
/**
|
|
* @brief Serialize a listener to a file
|
|
*
|
|
* This converts @c listener into an INI format file. This allows created listeners
|
|
* to be persisted to disk. This will replace any existing files with the same
|
|
* name.
|
|
*
|
|
* @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);
|
|
|
|
/**
|
|
* @brief Convert listener to JSON
|
|
*
|
|
* @param listener Listener to convert
|
|
*
|
|
* @return Converted listener
|
|
*/
|
|
json_t* listener_to_json(const SERV_LISTENER* listener);
|
|
|
|
SERV_LISTENER* listener_alloc(struct service* service, const char* name, const char *protocol,
|
|
const char *address, unsigned short port, const char *authenticator,
|
|
const char* auth_options, SSL_LISTENER *ssl);
|
|
void listener_free(SERV_LISTENER* listener);
|
|
int listener_set_ssl_version(SSL_LISTENER *ssl_listener, char* version);
|
|
void listener_set_certificates(SSL_LISTENER *ssl_listener, char* cert, char* key, char* ca_cert);
|
|
int listener_init_SSL(SSL_LISTENER *ssl_listener);
|
|
|
|
/**
|
|
* @brief Check if listener is active
|
|
*
|
|
* @param listener Listener to check
|
|
*
|
|
* @return True if listener is active
|
|
*/
|
|
bool listener_is_active(SERV_LISTENER* listener);
|
|
|
|
/**
|
|
* @brief Modify listener active state
|
|
*
|
|
* @param listener Listener to modify
|
|
* @param active True to activate, false to disable
|
|
*/
|
|
void listener_set_active(SERV_LISTENER* listener, bool active);
|
|
|
|
/**
|
|
* @brief Initialize a listener iterator for iterating service listeners
|
|
*
|
|
* @param service Service whose listeners are iterated
|
|
* @param iter Pointer to iterator to initialize
|
|
*
|
|
* @return The first value pointed by the iterator
|
|
*/
|
|
SERV_LISTENER* listener_iterator_init(const struct service* service, LISTENER_ITERATOR* iter);
|
|
|
|
/**
|
|
* @brief Get the next listener
|
|
*
|
|
* @param iter Listener iterator
|
|
*
|
|
* @return The next listener or NULL on end of list
|
|
*/
|
|
SERV_LISTENER* listener_iterator_next(LISTENER_ITERATOR* iter);
|
|
|
|
/**
|
|
* Get listener state as a string
|
|
*
|
|
* @param listener Listener to inspect
|
|
*
|
|
* @return State of the listener as a string
|
|
*/
|
|
const char* listener_state_to_string(const SERV_LISTENER* listener);
|
|
|
|
MXS_END_DECLS
|