diff --git a/example/Makefile b/example/Makefile index 575f062..385b7a5 100644 --- a/example/Makefile +++ b/example/Makefile @@ -4,7 +4,7 @@ CXXFLAGS = -std=c++14 -I.. -Wall -Wextra -lpthread OPENSSL_SUPPORT = -DCPPHTTPLIB_OPENSSL_SUPPORT -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib -lssl -lcrypto ZLIB_SUPPORT = -DCPPHTTPLIB_ZLIB_SUPPORT -lz -all: server client hello simplesvr benchmark +all: server client hello simplesvr redirect benchmark server : server.cc ../httplib.h Makefile $(CXX) -o server $(CXXFLAGS) server.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT) @@ -18,6 +18,9 @@ hello : hello.cc ../httplib.h Makefile simplesvr : simplesvr.cc ../httplib.h Makefile $(CXX) -o simplesvr $(CXXFLAGS) simplesvr.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT) +redirect : redirect.cc ../httplib.h Makefile + $(CXX) -o redirect $(CXXFLAGS) redirect.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT) + benchmark : benchmark.cc ../httplib.h Makefile $(CXX) -o benchmark $(CXXFLAGS) benchmark.cc $(OPENSSL_SUPPORT) $(ZLIB_SUPPORT) @@ -26,4 +29,4 @@ pem: openssl req -new -key key.pem | openssl x509 -days 3650 -req -signkey key.pem > cert.pem clean: - rm server client hello simplesvr *.pem + rm server client hello simplesvr redirect *.pem diff --git a/example/redirect.cc b/example/redirect.cc new file mode 100644 index 0000000..3db3672 --- /dev/null +++ b/example/redirect.cc @@ -0,0 +1,56 @@ +// +// redirect.cc +// +// Copyright (c) 2019 Yuji Hirose. All rights reserved. +// MIT License +// + +#include + +#define SERVER_CERT_FILE "./cert.pem" +#define SERVER_PRIVATE_KEY_FILE "./key.pem" + +using namespace httplib; + +int main(void) { + // HTTP server + Server http; + + http.Get("/test", [](const Request & /*req*/, Response &res) { + res.set_content("Test\n", "text/plain"); + }); + + http.set_error_handler([](const Request & /*req*/, Response &res) { + res.set_redirect("https://localhost:8081/"); + }); + + // HTTPS server + SSLServer https(SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE); + + https.Get("/", [=](const Request & /*req*/, Response &res) { + res.set_redirect("/hi"); + }); + + https.Get("/hi", [](const Request & /*req*/, Response &res) { + res.set_content("Hello World!\n", "text/plain"); + }); + + https.Get("/stop", [&](const Request & /*req*/, Response & /*res*/) { + https.stop(); + http.stop(); + }); + + // Run servers + auto httpThread = std::thread([&]() { + http.listen("localhost", 8080); + }); + + auto httpsThread = std::thread([&]() { + https.listen("localhost", 8081); + }); + + httpThread.join(); + httpsThread.join(); + + return 0; +}