diff --git a/.gitignore b/.gitignore index b4e58a8..99d000d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ tags example/server example/client example/hello +example/simplesvr test/test test/test.xcodeproj/xcuser* test/test.xcodeproj/*/xcuser* diff --git a/example/Makefile b/example/Makefile index 7a90336..5269311 100644 --- a/example/Makefile +++ b/example/Makefile @@ -9,7 +9,7 @@ CC = g++ CFLAGS = -std=c++11 -g endif -all: server client hello +all: server client hello simplesvr server : server.cc ../httplib.h $(CC) -o server $(CFLAGS) -I.. server.cc @@ -19,3 +19,6 @@ client : client.cc ../httplib.h hello : hello.cc ../httplib.h $(CC) -o hello $(CFLAGS) -I.. hello.cc + +simplesvr : simplesvr.cc ../httplib.h + $(CC) -o simplesvr $(CFLAGS) -I.. simplesvr.cc diff --git a/example/simplesvr.cc b/example/simplesvr.cc new file mode 100644 index 0000000..977b3d3 --- /dev/null +++ b/example/simplesvr.cc @@ -0,0 +1,88 @@ +// +// simplesvr.cc +// +// Copyright (c) 2013 Yuji Hirose. All rights reserved. +// The Boost Software License 1.0 +// + +#include +#include +#include + +using namespace httplib; +using namespace std; + +string dump_headers(const MultiMap& headers) +{ + string s; + char buf[BUFSIZ]; + + for (const auto& x: headers) { + snprintf(buf, sizeof(buf), "%s: %s\n", x.first.c_str(), x.second.c_str()); + s += buf; + } + + return s; +} + +string log(const Request& req, const Response& res) +{ + string s; + char buf[BUFSIZ]; + + s += "================================\n"; + + snprintf(buf, sizeof(buf), "%s %s", req.method.c_str(), req.url.c_str()); + s += buf; + + string query; + for (auto it = req.params.begin(); it != req.params.end(); ++it) { + const auto& x = *it; + snprintf(buf, sizeof(buf), "%c%s=%s", + (it == req.params.begin()) ? '?' : '&', x.first.c_str(), x.second.c_str()); + query += buf; + } + snprintf(buf, sizeof(buf), "%s\n", query.c_str()); + s += buf; + + s += dump_headers(req.headers); + + s += "--------------------------------\n"; + + snprintf(buf, sizeof(buf), "%d\n", res.status); + s += buf; + s += dump_headers(res.headers); + + return s; +} + +int main(int argc, const char** argv) +{ + Server svr; + + svr.set_error_handler([](const Request& req, Response& res) { + const char* fmt = "

Error Status: %d

"; + char buf[BUFSIZ]; + snprintf(buf, sizeof(buf), fmt, res.status); + res.set_content(buf, "text/html"); + }); + + svr.set_logger([](const Request& req, const Response& res) { + cout << log(req, res); + }); + + int port = 8080; + if (argc > 1) { + port = atoi(argv[1]); + } + + if (argc > 2) { + svr.set_base_dir(argv[2]); + } + + svr.listen("localhost", port); + + return 0; +} + +// vim: et ts=4 sw=4 cin cino={1s ff=unix