Open
Description
I need to register a node callback with a object member function
I created a class to hold all my https request callbacks functions and I want to pass those functions to ResourceNode constructor and register in my server.
Some of my files
https_handler.h
#ifndef HTTPS_HANDLER_H
#define HTTPS_HANDLER_H
#include "Arduino.h"
#include <HTTPSServer.hpp>
#include "SSLCert.hpp"
#include <HTTPRequest.hpp>
#include <HTTPResponse.hpp>
using namespace httpsserver;
class HttpsHandler {
public:
HttpsHandler();
~HttpsHandler();
void root(HTTPRequest * req, HTTPResponse * res);
private:
};
#endif
https_handler.cpp
#include "https_handler.h"
void HttpsHandler::root(HTTPRequest * req, HTTPResponse * res) {
// We want to deliver an HTML page, so we set the content type
res->setHeader("Content-Type", "text/html");
// The response implements the Print interface, so you can use it just like
// you would write to Serial etc.
res->println("<!DOCTYPE html>");
res->println("<html>");
res->println("<head><title>Hello World!</title></head>");
res->println("<body>");
res->println("<h1>Hello World!</h1>");
res->print("<p>... from your ESP32!</p>");
res->println("</body>");
res->println("</html>");
}
my_server.h
#ifndef MY_SERVER_H
#define MY_SERVER_H
#include "../ssl_certificate/cert.h"
#include "../ssl_certificate/private_key.h"
#include "handlers/https_handler.h"
#include <HTTPSServer.hpp>
#include "SSLCert.hpp"
#include <HTTPRequest.hpp>
#include <HTTPResponse.hpp>
using namespace httpsserver;
class MyServer {
public:
MyServer();
~MyServer();
void setup();
void loop();
private:
SSLCert cert = SSLCert(
example_crt_DER, // DER-formatted certificate data
example_crt_DER_len, // length of the certificate data
example_key_DER, // private key for that certificate
example_key_DER_len // Length of the private key
);
HTTPSServer secureServer = HTTPSServer(&cert);
HttpsHandler *handler;
void configureNodes();
};
#endif
my_server.cpp
#include "my_server.h"
MyServer::MyServer(/* args */) { }
MyServer::~MyServer() { }
void MyServer::setup() {
Serial.println("MyServer::start");
secureServer.start();
configureNodes();
};
void MyServer::loop() {
secureServer.loop();
}
void MyServer::configureNodes() {
ResourceNode * nodeRoot = new ResourceNode("/", "GET", &HttpsHandler::root);
secureServer.registerNode(nodeRoot);
}
platformio.ini
[env:development]
platform = espressif32@2.1.0
board = esp32doit-devkit-v1
framework = arduino
upload_speed = 115200
board_build.flash_mode = dio
build_flags =
-DHTTPS_LOGLEVEL=2
-DHTTPS_LOGTIMESTAMP
-DHTTPS_DISABLE_SELFSIGNING
lib_deps =
fhessel/esp32_https_server
Here the error logs
src/system/communication/protocols/HTTPS/my_server.cpp:23:77: error: no matching function for call to 'httpsserver::ResourceNode::ResourceNode(const char [2], const char [4], void (HttpsHandler::*)(httpsserver::HTTPRequest*, httpsserver::HTTPResponse*))'
ResourceNode * nodeRoot = new ResourceNode("/", "GET", &HttpsHandler::root);
^
In file included from .pio/libdeps/esp01_1m/esp32_https_server/src/HTTPServer.hpp:20:0,
from .pio/libdeps/esp01_1m/esp32_https_server/src/HTTPSServer.hpp:15,
from src/system/communication/protocols/HTTPS/handlers/https_handler.h:4,
from src/system/communication/protocols/HTTPS/my_server.h:6,
from src/system/communication/protocols/HTTPS/my_server.cpp:1:
.pio/libdeps/esp01_1m/esp32_https_server/src/ResourceNode.hpp:18:3: note: candidate: httpsserver::ResourceNode::ResourceNode(const string&, const string&, void (*)(httpsserver::HTTPRequest*, httpsserver::HTTPResponse*), const string&)
ResourceNode(const std::string &path, const std::string &method, const HTTPSCallbackFunction * callback, const std::string &tag = "");
^
.pio/libdeps/esp01_1m/esp32_https_server/src/ResourceNode.hpp:18:3: note: no known conversion for argument 3 from 'void (HttpsHandler::*)(httpsserver::HTTPRequest*, httpsserver::HTTPResponse*)' to 'void (*)(httpsserver::HTTPRequest*, httpsserver::HTTPResponse*)'
.pio/libdeps/esp01_1m/esp32_https_server/src/ResourceNode.hpp:16:7: note: candidate: httpsserver::ResourceNode::ResourceNode(const httpsserver::ResourceNode&)
class ResourceNode : public HTTPNode {
^
.pio/libdeps/esp01_1m/esp32_https_server/src/ResourceNode.hpp:16:7: note: candidate expects 1 argument, 3 provided
*** [.pio/build/esp01_1m/src/system/communication/protocols/HTTPS/my_server.cpp.o] Error 1
Is it possible to do what I am proposing? how?
I'm a beginner in CPP
thanks in advance
ESP32-D0WDQ6 (revision 1)
- Flash Size: 4MB
Tools
- IDE and Version: vscode 1.51.1
- OS: Ubuntu 18.04.4 LTS