This commit is contained in:
f1she3 2018-02-21 17:00:43 +00:00 committed by GitHub
commit 3c80117d8e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 21 deletions

View file

@ -8,12 +8,16 @@
find_path(
MHD_INCLUDE_DIR
NAMES microhttpd.h
PATHS "${XMRIG_DEPS}" ENV "XMRIG_DEPS"
PATH_SUFFIXES "include"
DOC "microhttpd include dir"
)
find_library(
MHD_LIBRARY
NAMES microhttpd microhttpd-10 libmicrohttpd libmicrohttpd-dll
NAMES microhttpd libmicrohttpd
PATHS "${XMRIG_DEPS}" ENV "XMRIG_DEPS"
PATH_SUFFIXES "lib"
DOC "microhttpd library"
)
@ -34,6 +38,6 @@ if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(mhd DEFAULT_MSG MHD_INCLUDE_DIR MHD_LIBRARY)
find_package_handle_standard_args(MHD DEFAULT_MSG MHD_LIBRARY MHD_INCLUDE_DIR)
mark_as_advanced(MHD_INCLUDE_DIR MHD_LIBRARY)

View file

@ -1,5 +1,16 @@
find_path(UV_INCLUDE_DIR NAMES uv.h)
find_library(UV_LIBRARY NAMES uv libuv)
find_path(
UV_INCLUDE_DIR
NAMES uv.h
PATHS "${XMRIG_DEPS}" ENV "XMRIG_DEPS"
PATH_SUFFIXES "include"
)
find_library(
UV_LIBRARY
NAMES libuv.a uv libuv
PATHS "${XMRIG_DEPS}" ENV "XMRIG_DEPS"
PATH_SUFFIXES "lib"
)
set(UV_LIBRARIES ${UV_LIBRARY})
set(UV_INCLUDE_DIRS ${UV_INCLUDE_DIR})

View file

@ -4,7 +4,7 @@
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2016-2017 XMRig <support@xmrig.com>
* Copyright 2016-2018 XMRig <support@xmrig.com>
*
*
* This program is free software: you can redistribute it and/or modify
@ -29,12 +29,10 @@
ApiState *Api::m_state = nullptr;
uv_mutex_t Api::m_mutex;
bool Api::start()
{
uv_mutex_init(&m_mutex);
m_state = new ApiState();
return true;
@ -53,11 +51,7 @@ char *Api::get(const char *url, int *status)
return nullptr;
}
uv_mutex_lock(&m_mutex);
char *buf = m_state->get(url, status);
uv_mutex_unlock(&m_mutex);
return buf;
return m_state->get(url, status);
}
@ -67,9 +61,7 @@ void Api::tick(const Hashrate *hashrate)
return;
}
uv_mutex_lock(&m_mutex);
m_state->tick(hashrate);
uv_mutex_unlock(&m_mutex);
}
@ -79,7 +71,5 @@ void Api::tick(const NetworkState &network)
return;
}
uv_mutex_lock(&m_mutex);
m_state->tick(network);
uv_mutex_unlock(&m_mutex);
}

View file

@ -4,7 +4,7 @@
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2016-2017 XMRig <support@xmrig.com>
* Copyright 2016-2018 XMRig <support@xmrig.com>
*
*
* This program is free software: you can redistribute it and/or modify
@ -45,7 +45,6 @@ public:
private:
static ApiState *m_state;
static uv_mutex_t m_mutex;
};
#endif /* __API_H__ */

View file

@ -4,7 +4,7 @@
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2016-2017 XMRig <support@xmrig.com>
* Copyright 2016-2018 XMRig <support@xmrig.com>
*
*
* This program is free software: you can redistribute it and/or modify
@ -36,6 +36,18 @@ Httpd::Httpd(int port, const char *accessToken) :
m_port(port),
m_daemon(nullptr)
{
uv_idle_init(uv_default_loop(), &m_idle);
m_idle.data = this;
}
Httpd::~Httpd()
{
uv_idle_stop(&m_idle);
if (m_daemon) {
MHD_stop_daemon(m_daemon);
}
}
@ -45,12 +57,18 @@ bool Httpd::start()
return false;
}
m_daemon = MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, m_port, nullptr, nullptr, &Httpd::handler, this, MHD_OPTION_END);
unsigned int flags = 0;
if (MHD_is_feature_supported(MHD_FEATURE_EPOLL)) {
flags |= MHD_USE_EPOLL_LINUX_ONLY;
}
m_daemon = MHD_start_daemon(flags, m_port, nullptr, nullptr, &Httpd::handler, this, MHD_OPTION_END);
if (!m_daemon) {
LOG_ERR("HTTP Daemon failed to start.");
return false;
}
uv_idle_start(&m_idle, Httpd::onIdle);
return true;
}
@ -114,3 +132,9 @@ int Httpd::handler(void *cls, struct MHD_Connection *connection, const char *url
MHD_Response *rsp = MHD_create_response_from_buffer(strlen(buf), (void*) buf, MHD_RESPMEM_MUST_FREE);
return done(connection, status, rsp);
}
void Httpd::onIdle(uv_idle_t *handle)
{
MHD_run(static_cast<Httpd*>(handle->data)->m_daemon);
}

View file

@ -4,7 +4,7 @@
* Copyright 2014 Lucas Jones <https://github.com/lucasjones>
* Copyright 2014-2016 Wolf9466 <https://github.com/OhGodAPet>
* Copyright 2016 Jay D Dee <jayddee246@gmail.com>
* Copyright 2016-2017 XMRig <support@xmrig.com>
* Copyright 2016-2018 XMRig <support@xmrig.com>
*
*
* This program is free software: you can redistribute it and/or modify
@ -37,6 +37,7 @@ class Httpd
{
public:
Httpd(int port, const char *accessToken);
~Httpd();
bool start();
private:
@ -44,10 +45,12 @@ private:
static int done(MHD_Connection *connection, int status, MHD_Response *rsp);
static int handler(void *cls, MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls);
static void onIdle(uv_idle_t *handle);
const char *m_accessToken;
const int m_port;
MHD_Daemon *m_daemon;
uv_idle_t m_idle;
};
#endif /* __HTTPD_H__ */