mirror of
https://github.com/dashpay/dash.git
synced 2024-12-30 22:35:51 +01:00
3c5dcb036a
084e17cebd424b8e8ced674bc810eef4e6ee5d3b Remove unused includes (practicalswift) Pull request description: As requested by MarcoFalke in https://github.com/bitcoin/bitcoin/pull/16273#issuecomment-521332089: This PR removes unused includes. Please note that in contrast to #16273 I'm limiting the scope to the trivial cases of pure removals (i.e. no includes added) to make reviewing easier. I'm seeking "Concept ACK":s for this obviously non-urgent minor cleanup. Rationale: * Avoids unnecessary re-compiles in case of header changes. * Makes reasoning about code dependencies easier. * Reduces compile-time memory usage. * Reduces compilation time. * Warm fuzzy feeling of being lean :-) ACKs for top commit: ryanofsky: Code review ACK 084e17cebd424b8e8ced674bc810eef4e6ee5d3b. PR only removes include lines and it still compiles. In the worst case someone might have to explicitly add an include later for something now included implicitly. But maybe some effort was taken to avoid this, and it wouldn't be a tragedy anyway. Tree-SHA512: 89de56edc6ceea4696e9579bccff10c80080821685b9fb4e8c5ef593b6e43cf662f358788701bb09f84867693f66b2e4db035b92b522a0a775f50b7ecffd6a6d
151 lines
4.1 KiB
C++
151 lines
4.1 KiB
C++
// Copyright (c) 2015 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_HTTPSERVER_H
|
|
#define BITCOIN_HTTPSERVER_H
|
|
|
|
#include <string>
|
|
#include <functional>
|
|
|
|
static const int DEFAULT_HTTP_THREADS=4;
|
|
static const int DEFAULT_HTTP_WORKQUEUE=16;
|
|
static const int DEFAULT_HTTP_SERVER_TIMEOUT=30;
|
|
|
|
struct evhttp_request;
|
|
struct event_base;
|
|
class CService;
|
|
class HTTPRequest;
|
|
|
|
/** Initialize HTTP server.
|
|
* Call this before RegisterHTTPHandler or EventBase().
|
|
*/
|
|
bool InitHTTPServer();
|
|
/** Start HTTP server.
|
|
* This is separate from InitHTTPServer to give users race-condition-free time
|
|
* to register their handlers between InitHTTPServer and StartHTTPServer.
|
|
*/
|
|
void StartHTTPServer();
|
|
/** Interrupt HTTP server threads */
|
|
void InterruptHTTPServer();
|
|
/** Stop HTTP server */
|
|
void StopHTTPServer();
|
|
|
|
/** Change logging level for libevent. Removes BCLog::LIBEVENT from log categories if
|
|
* libevent doesn't support debug logging.*/
|
|
bool UpdateHTTPServerLogging(bool enable);
|
|
|
|
/** Handler for requests to a certain HTTP path */
|
|
typedef std::function<bool(HTTPRequest* req, const std::string &)> HTTPRequestHandler;
|
|
/** Register handler for prefix.
|
|
* If multiple handlers match a prefix, the first-registered one will
|
|
* be invoked.
|
|
*/
|
|
void RegisterHTTPHandler(const std::string &prefix, bool exactMatch, const HTTPRequestHandler &handler);
|
|
/** Unregister handler for prefix */
|
|
void UnregisterHTTPHandler(const std::string &prefix, bool exactMatch);
|
|
|
|
/** Return evhttp event base. This can be used by submodules to
|
|
* queue timers or custom events.
|
|
*/
|
|
struct event_base* EventBase();
|
|
|
|
/** In-flight HTTP request.
|
|
* Thin C++ wrapper around evhttp_request.
|
|
*/
|
|
class HTTPRequest
|
|
{
|
|
private:
|
|
struct evhttp_request* req;
|
|
bool replySent;
|
|
|
|
public:
|
|
explicit HTTPRequest(struct evhttp_request* req);
|
|
~HTTPRequest();
|
|
|
|
enum RequestMethod {
|
|
UNKNOWN,
|
|
GET,
|
|
POST,
|
|
HEAD,
|
|
PUT
|
|
};
|
|
|
|
/** Get requested URI.
|
|
*/
|
|
std::string GetURI() const;
|
|
|
|
/** Get CService (address:ip) for the origin of the http request.
|
|
*/
|
|
CService GetPeer() const;
|
|
|
|
/** Get request method.
|
|
*/
|
|
RequestMethod GetRequestMethod() const;
|
|
|
|
/**
|
|
* Get the request header specified by hdr, or an empty string.
|
|
* Return a pair (isPresent,string).
|
|
*/
|
|
std::pair<bool, std::string> GetHeader(const std::string& hdr) const;
|
|
|
|
/**
|
|
* Read request body.
|
|
*
|
|
* @note As this consumes the underlying buffer, call this only once.
|
|
* Repeated calls will return an empty string.
|
|
*/
|
|
std::string ReadBody();
|
|
|
|
/**
|
|
* Write output header.
|
|
*
|
|
* @note call this before calling WriteErrorReply or Reply.
|
|
*/
|
|
void WriteHeader(const std::string& hdr, const std::string& value);
|
|
|
|
/**
|
|
* Write HTTP reply.
|
|
* nStatus is the HTTP status code to send.
|
|
* strReply is the body of the reply. Keep it empty to send a standard message.
|
|
*
|
|
* @note Can be called only once. As this will give the request back to the
|
|
* main thread, do not call any other HTTPRequest methods after calling this.
|
|
*/
|
|
void WriteReply(int nStatus, const std::string& strReply = "");
|
|
};
|
|
|
|
/** Event handler closure.
|
|
*/
|
|
class HTTPClosure
|
|
{
|
|
public:
|
|
virtual void operator()() = 0;
|
|
virtual ~HTTPClosure() {}
|
|
};
|
|
|
|
/** Event class. This can be used either as a cross-thread trigger or as a timer.
|
|
*/
|
|
class HTTPEvent
|
|
{
|
|
public:
|
|
/** Create a new event.
|
|
* deleteWhenTriggered deletes this event object after the event is triggered (and the handler called)
|
|
* handler is the handler to call when the event is triggered.
|
|
*/
|
|
HTTPEvent(struct event_base* base, bool deleteWhenTriggered, const std::function<void()>& handler);
|
|
~HTTPEvent();
|
|
|
|
/** Trigger the event. If tv is 0, trigger it immediately. Otherwise trigger it after
|
|
* the given time has elapsed.
|
|
*/
|
|
void trigger(struct timeval* tv);
|
|
|
|
bool deleteWhenTriggered;
|
|
std::function<void()> handler;
|
|
private:
|
|
struct event* ev;
|
|
};
|
|
|
|
#endif // BITCOIN_HTTPSERVER_H
|