Browse Source

Special handle for favicon.ico

pull/1029/head
XMRig 5 years ago
parent
commit
3b91817caf
  1. 2
      res/app.rc
  2. 29
      src/api/Httpd.cpp
  3. 4
      src/base/net/http/HttpResponse.cpp
  4. 2
      src/base/net/http/HttpResponse.h

2
res/app.rc

@ -1,7 +1,7 @@
#include <windows.h>
#include "../src/version.h"
IDI_ICON1 ICON DISCARDABLE "app.ico"
101 ICON "app.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION APP_VER_MAJOR,APP_VER_MINOR,APP_VER_PATCH,0

29
src/api/Httpd.cpp

@ -40,6 +40,11 @@ namespace xmrig {
static const char *kAuthorization = "authorization";
static const char *kContentType = "content-type";
#ifdef _WIN32
static const char *favicon = nullptr;
static size_t faviconSize = 0;
#endif
} // namespace xmrig
@ -85,6 +90,17 @@ bool xmrig::Httpd::start()
m_port = static_cast<uint16_t>(rc);
# ifdef _WIN32
HRSRC src = FindResource(nullptr, MAKEINTRESOURCE(1), RT_ICON);
if (src != nullptr) {
HGLOBAL res = LoadResource(nullptr, src);
if (res != nullptr) {
favicon = static_cast<const char *>(LockResource(res));
faviconSize = SizeofResource(nullptr, src);
}
}
# endif
return true;
}
@ -118,6 +134,19 @@ void xmrig::Httpd::onHttpRequest(const HttpRequest &req)
return HttpApiResponse(req.id()).end();
}
if (req.method == HTTP_GET && req.url == "/favicon.ico") {
# ifdef _WIN32
if (favicon != nullptr) {
HttpResponse response(req.id());
response.setHeader("Content-Type", "image/x-icon");
return response.end(favicon, faviconSize);
}
# endif
return HttpResponse(req.id(), 404).end();
}
if (req.method > 4) {
return HttpApiResponse(req.id(), HTTP_STATUS_METHOD_NOT_ALLOWED).end();
}

4
src/base/net/http/HttpResponse.cpp

@ -43,9 +43,9 @@ static const char *kUserAgent = "user-agent";
} // namespace xmrig
xmrig::HttpResponse::HttpResponse(uint64_t id) :
xmrig::HttpResponse::HttpResponse(uint64_t id, int statusCode) :
m_id(id),
m_statusCode(HTTP_STATUS_OK)
m_statusCode(statusCode)
{
}

2
src/base/net/http/HttpResponse.h

@ -38,7 +38,7 @@ namespace xmrig {
class HttpResponse
{
public:
HttpResponse(uint64_t id);
HttpResponse(uint64_t id, int statusCode = 200);
inline int statusCode() const { return m_statusCode; }
inline void setHeader(const std::string &key, const std::string &value) { m_headers.insert({ key, value }); }

Loading…
Cancel
Save