Simplified the sample code.

This commit is contained in:
yhirose 2012-09-25 23:21:57 -04:00
parent ace3bb6caf
commit 7c803330e0
2 changed files with 39 additions and 66 deletions

View file

@ -10,81 +10,23 @@
using namespace httpsvrkit; using namespace httpsvrkit;
std::string dump_request(Context& cxt)
{
std::string s;
char buf[BUFSIZ];
s += "================================\n";
sprintf(buf, "Method: %s\n", cxt.request.method.c_str());
s += buf;
sprintf(buf, "URL: %s\n", cxt.request.url.c_str());
s += buf;
std::string query;
for (auto it = cxt.request.query.begin(); it != cxt.request.query.end(); ++it) {
const auto& x = *it;
sprintf(buf, "(%s:%s)", x.first.c_str(), x.second.c_str());
query += buf;
}
sprintf(buf, "QUERY: %s\n", query.c_str());
s += buf;
//for (const auto& x : cxt.request.headers) {
for (auto it = cxt.request.headers.begin(); it != cxt.request.headers.end(); ++it) {
const auto& x = *it;
sprintf(buf, "%s: %s\n", x.first.c_str(), x.second.c_str());
s += buf;
}
s += "================================\n";
return s;
}
int main(void) int main(void)
{ {
if (true) { const char* hi = "/hi";
const char* s = "abcde";
// DSL style HTTP_SERVER("localhost", 1234) {
HTTP_SERVER("localhost", 1234) {
GET("/", { GET("/", {
res.set_redirect("/home"); res.set_redirect(hi);
});
GET("/home", {
res.set_content(dump_request(cxt));
});
GET("/abcde", {
res.set_content(s);
});
}
} else {
// Regular style
Server svr("localhost", 1234);
svr.get("/", [](Context& cxt) {
cxt.response.set_redirect("/home");
}); });
svr.get("/home", [](Context& cxt) { GET("/hi", {
cxt.response.set_content(dump_request(cxt)); res.set_content("Hello World!");
}); });
svr.post("/item", [](Context& cxt) { GET("/dump", {
cxt.response.set_content(dump_request(cxt)); res.set_content(dump_request(cxt));
}); });
svr.get("/item/([^/]+)", [](Context& cxt) {
cxt.response.set_content(dump_request(cxt));
});
svr.run();
} }
} }

View file

@ -170,6 +170,35 @@ inline void close_socket(socket_t sock)
#endif #endif
} }
std::string dump_request(Context& cxt)
{
const auto& req = cxt.request;
std::string s;
char buf[BUFSIZ];
s += "================================\n";
sprintf(buf, "%s %s", req.method.c_str(), req.url.c_str());
s += buf;
std::string query;
for (auto it = req.query.begin(); it != req.query.end(); ++it) {
const auto& x = *it;
sprintf(buf, "%c%s=%s", (it == req.query.begin()) ? '?' : '&', x.first.c_str(), x.second.c_str());
query += buf;
}
sprintf(buf, "%s\n", query.c_str());
s += buf;
for (auto it = req.headers.begin(); it != req.headers.end(); ++it) {
const auto& x = *it;
sprintf(buf, "%s: %s\n", x.first.c_str(), x.second.c_str());
s += buf;
}
return s;
}
void Response::set_redirect(const char* url) void Response::set_redirect(const char* url)
{ {
headers.insert(std::make_pair("Location", url)); headers.insert(std::make_pair("Location", url));
@ -379,6 +408,8 @@ inline void Server::process_request(FILE* fp_read, FILE* fp_write)
// Read headers // Read headers
read_headers(fp_read, cxt.request.headers); read_headers(fp_read, cxt.request.headers);
printf("%s", dump_request(cxt).c_str());
// Routing // Routing
cxt.response.status = 404; cxt.response.status = 404;