Browse Source

bundle darkhttp for testing

master
alistair 3 years ago
parent
commit
c7743beac8
  1. 2
      CMakeLists.txt
  2. 6
      main.cpp
  3. 41
      util.cpp
  4. 21
      util.h

2
CMakeLists.txt

@ -42,7 +42,7 @@ if(NOT TARGET spdlog) @@ -42,7 +42,7 @@ if(NOT TARGET spdlog)
endif()
ADD_EXECUTABLE(stgen3 util.cpp markdown.cpp main.cpp)
ADD_EXECUTABLE(stgen3 util.cpp darkhttpd.c markdown.cpp main.cpp)
target_include_directories(stgen3 PRIVATE include)

6
main.cpp

@ -735,5 +735,11 @@ int main(int argc, char **argv) { @@ -735,5 +735,11 @@ int main(int argc, char **argv) {
stgen::builder b (cmd_options);
b.build();
server s {};
s.serve_now("./llll", "8080", "127.0.0.1");
unsigned int microsecond = 1000000;
usleep(100000 * microsecond);//sleeps for 3 second
return 0;
}

41
util.cpp

@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
#include "util.h"
#include <signal.h>
#include <sys/wait.h>
std::string
file_ext(std::string path)
@ -20,9 +22,6 @@ std::string read_file(std::string const &fpath) { @@ -20,9 +22,6 @@ std::string read_file(std::string const &fpath) {
return sstr.str();
}
std::string
reformat_date(const std::string& date_time, const std::map<std::string, std::string> &properties)
{
@ -90,3 +89,39 @@ compute_url(fs::path path, std::map<std::string, std::string> properties) @@ -90,3 +89,39 @@ compute_url(fs::path path, std::map<std::string, std::string> properties)
return url.string();
}
};
void server::serve_now(std::string wroot, std::string port, std::string addr) {
if (spid) {
// already serving
return;
}
int pid;
if (!(pid = fork())) {
const char *argv[] = {"stgen3", wroot.c_str(), "--port", port.c_str(),
"--addr", addr.c_str()};
int argc = 6;
darkhttpd::darkhttpd_main(argc, argv);
} else {
this->spid = pid;
return;
}
}
void server::stop_serving() {
kill(spid, SIGTERM);
waitpid(spid, NULL, 0);
spid = 0;
}
server::~server() {
if (spid) {
stop_serving();
}
}

21
util.h

@ -51,5 +51,26 @@ compute_url(fs::path path, std::map<std::string, std::string> properties); @@ -51,5 +51,26 @@ compute_url(fs::path path, std::map<std::string, std::string> properties);
};
namespace darkhttpd {
extern "C" {
int darkhttpd_main(int argc, const char **argv);
}
};
class server {
int spid = 0;
public:
void serve_now(std::string wroot,std::string port,std::string addr);
void stop_serving();
~server();
};
#endif

Loading…
Cancel
Save