#include <iostream>
#include <native/native.h>
#include <cstdio>
#include <cstring>
//using namespace native::http;
using native::http::http;
using native::http::response;
using native::http::request;
using native::http::url_obj;
using native::run;
int main() {
http server;
unsigned short port = 8080;
if(!server.listen("0.0.0.0", port, [](request& req, response& res) {
std::cout << "req.url().path() = " << req.url().path();
if (true) { //strcmp(req.url().path() == "/foo")) {
std::string body = req.get_body();
res.set_status(200);
res.set_header("Content-Type", "application/json");
res.end(req.url().path()); // Easy way to print current route
} else {
std::string body = req.get_body();
res.set_status(201);
res.set_header("Content-Type", "application/json");
res.end("{\"bar\": \"foo\"}");
}
})) return 1; // Failed to run server.
std::cout << "Server running at http://0.0.0.0:" << port << "/" << std::endl;
return run();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bmF0aXZlL25hdGl2ZS5oPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0cmluZz4KLy91c2luZyBuYW1lc3BhY2UgbmF0aXZlOjpodHRwOwoKdXNpbmcgbmF0aXZlOjpodHRwOjpodHRwOwp1c2luZyBuYXRpdmU6Omh0dHA6OnJlc3BvbnNlOwp1c2luZyBuYXRpdmU6Omh0dHA6OnJlcXVlc3Q7CnVzaW5nIG5hdGl2ZTo6aHR0cDo6dXJsX29iajsKdXNpbmcgbmF0aXZlOjpydW47CgppbnQgbWFpbigpIHsKICAgIGh0dHAgc2VydmVyOwogICAgdW5zaWduZWQgc2hvcnQgcG9ydCA9IDgwODA7CiAgICBpZighc2VydmVyLmxpc3RlbigiMC4wLjAuMCIsIHBvcnQsIFtdKHJlcXVlc3QmIHJlcSwgcmVzcG9uc2UmIHJlcykgewogICAgICAgIHN0ZDo6Y291dCA8PCAicmVxLnVybCgpLnBhdGgoKSA9ICIgPDwgcmVxLnVybCgpLnBhdGgoKTsKICAgICAgICBpZiAodHJ1ZSkgeyAvL3N0cmNtcChyZXEudXJsKCkucGF0aCgpID09ICIvZm9vIikpIHsKICAgICAgICAgICAgc3RkOjpzdHJpbmcgYm9keSA9IHJlcS5nZXRfYm9keSgpOwogICAgICAgICAgICByZXMuc2V0X3N0YXR1cygyMDApOwogICAgICAgICAgICByZXMuc2V0X2hlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKICAgICAgICAgICAgcmVzLmVuZChyZXEudXJsKCkucGF0aCgpKTsgICAgLy8gRWFzeSB3YXkgdG8gcHJpbnQgY3VycmVudCByb3V0ZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGJvZHkgPSByZXEuZ2V0X2JvZHkoKTsKICAgICAgICAgICAgcmVzLnNldF9zdGF0dXMoMjAxKTsKICAgICAgICAgICAgcmVzLnNldF9oZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICAgICAgICAgIHJlcy5lbmQoIntcImJhclwiOiBcImZvb1wifSIpOwogICAgICAgIH0KICAgIH0pKSByZXR1cm4gMTsgLy8gRmFpbGVkIHRvIHJ1biBzZXJ2ZXIuCgogICAgc3RkOjpjb3V0IDw8ICJTZXJ2ZXIgcnVubmluZyBhdCBodHRwOi8vMC4wLjAuMDoiIDw8IHBvcnQgPDwgIi8iIDw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiBydW4oKTsKfQ==