Update examples with dh_params

This commit is contained in:
Alex Hultman
2018-09-20 19:12:31 +02:00
parent 5378487797
commit 099f162576
5 changed files with 12 additions and 11 deletions
+49
View File
@@ -0,0 +1,49 @@
#include <experimental/filesystem>
#include <map>
#include <fstream>
struct FileCache {
private:
std::map<std::string_view, std::string_view> cache;
void cacheFile(std::string file, std::string root) {
std::cout << "Caching file: " << file << std::endl;
std::ifstream fin(root + file, std::ios::binary);
std::ostringstream oss;
oss << fin.rdbuf();
if (file == "/index.html") {
file = "/";
}
char *cachedFile = (char *) malloc(oss.str().size());
memcpy(cachedFile, oss.str().data(), oss.str().size());
char *key = (char *) malloc(file.length());
memcpy(key, file.data(), file.length());
std::cout << "Size: " << oss.str().size() << std::endl;
cache[std::string_view(key, file.length())] = std::string_view(cachedFile, oss.str().size());
}
public:
FileCache(std::string root) {
for(auto &p : std::experimental::filesystem::recursive_directory_iterator(root)) {
cacheFile(p.path().string().substr(root.length()), root);
}
}
std::string_view getFile(std::string_view file) {
auto it = cache.find(file);
if (it == cache.end()) {
//std::cout << "Did not find file: " << file << std::endl;
return "<h1>Nope!</h1>";
} else {
//std::cout << "Did find file: " << file << std::endl;
return it->second;
}
}
};
+19
View File
@@ -0,0 +1,19 @@
/* Middleware to fill out content-type */
inline bool hasExt(std::string_view file, std::string_view ext) {
if (ext.size() > file.size()) {
return false;
}
return std::equal(ext.rbegin(), ext.rend(), file.rbegin());
}
/* This should be a filter / middleware like app.use(handler) */
template <bool SSL>
uWS::HttpResponse<SSL> *serveFile(uWS::HttpResponse<SSL> *res, uWS::HttpRequest *req) {
res->writeStatus(uWS::HTTP_200_OK);
if (hasExt(req->getUrl(), ".svg")) {
res->writeHeader("Content-Type", "image/svg+xml");
}
return res;
}