
The internal header directory conflicted with in-source builds causing a build failure. This is fixed by renaming the internal header directory to something other than maxscale. The renaming pointed out a few problems in a couple of source files that appeared to include internal headers when the headers were in fact public headers. Fixed maxctrl in-source builds by making the copying of the sources optional.
122 lines
2.5 KiB
C++
122 lines
2.5 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.
|
|
*/
|
|
|
|
#include <maxscale/cppdefs.hh>
|
|
|
|
#include <string>
|
|
#include <microhttpd.h>
|
|
|
|
#include <maxscale/thread.h>
|
|
|
|
class Client
|
|
{
|
|
Client(const Client&);
|
|
Client& operator=(const Client&);
|
|
|
|
public:
|
|
|
|
enum state
|
|
{
|
|
OK,
|
|
FAILED,
|
|
INIT,
|
|
CLOSED
|
|
};
|
|
|
|
/**
|
|
* @brief Create a new client
|
|
*
|
|
* @param connection The connection handle for this client
|
|
*/
|
|
Client(MHD_Connection *connection):
|
|
m_connection(connection),
|
|
m_state(INIT)
|
|
{
|
|
}
|
|
|
|
~Client()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* @brief Process a client request
|
|
*
|
|
* This function can be called multiple times if a PUT/POST/PATCH
|
|
* uploads a large amount of data.
|
|
*
|
|
* @param url Requested URL
|
|
* @param method Request method
|
|
* @param data Pointer to request data
|
|
* @param size Size of request data
|
|
*
|
|
* @return MHD_YES on success, MHD_NO on error
|
|
*/
|
|
int process(std::string url, std::string method, const char* data, size_t *size);
|
|
|
|
/**
|
|
* @brief Authenticate the client
|
|
*
|
|
* @param connection The MHD connection object
|
|
* @param url Requested URL
|
|
* @param method The request method
|
|
*
|
|
* @return True if authentication was successful
|
|
*/
|
|
bool auth(MHD_Connection* connection, const char* url, const char* method);
|
|
|
|
/**
|
|
* Get client state
|
|
*
|
|
* @return The client state
|
|
*/
|
|
state get_state() const
|
|
{
|
|
return m_state;
|
|
}
|
|
|
|
/**
|
|
* Close the client connection
|
|
*
|
|
* All further requests will be rejected immediately
|
|
*/
|
|
void close()
|
|
{
|
|
m_state = CLOSED;
|
|
}
|
|
|
|
private:
|
|
MHD_Connection* m_connection; /**< Connection handle */
|
|
std::string m_data; /**< Uploaded data */
|
|
state m_state; /**< Client state */
|
|
};
|
|
|
|
/**
|
|
* @brief Start the administrative interface
|
|
*
|
|
* @return True if the interface was successfully started
|
|
*/
|
|
bool mxs_admin_init();
|
|
|
|
/**
|
|
* @brief Shutdown the administrative interface
|
|
*/
|
|
void mxs_admin_shutdown();
|
|
|
|
/**
|
|
* @brief Check if admin interface uses HTTPS protocol
|
|
*
|
|
* @return True if HTTPS is enabled
|
|
*/
|
|
bool mxs_admin_https_enabled();
|