12 #include <boost/thread.hpp> 20 template <
typename HandlerType>
41 }
catch (
const std::exception& ex) {
43 .
status(500,
"Internal Server Error")
48 .
status(500,
"Internal Server Error")
49 .
body(
"Unknown exception thrown")
64 template <
typename HandlerType>
94 template <
typename HandlerType>
95 static std::unique_ptr<ScopedHTTPServer>
start(
99 std::unique_ptr<wangle::SSLContextConfig> sslCfg =
nullptr);
104 static std::unique_ptr<ScopedHTTPServer>
start(
112 return getAddresses()[0].address.getPort();
119 auto addresses = server_->addresses();
120 CHECK(!addresses.empty());
131 std::unique_ptr<HTTPServer> server)
140 template <
typename HandlerType>
145 std::unique_ptr<wangle::SSLContextConfig> sslCfg) {
147 std::unique_ptr<RequestHandlerFactory>
f =
148 std::make_unique<ScopedHandlerFactory<HandlerType>>(
handler);
153 inline std::unique_ptr<ScopedHTTPServer>
154 ScopedHTTPServer::start<std::unique_ptr<RequestHandlerFactory>>(
155 std::unique_ptr<RequestHandlerFactory>
f,
158 std::unique_ptr<wangle::SSLContextConfig> sslCfg) {
169 cfg.sslConfigs.push_back(*sslCfg);
178 inline std::unique_ptr<ScopedHTTPServer>
183 std::vector<HTTPServer::IPConfig> IPs = {
std::move(cfg) };
185 auto server = std::make_unique<HTTPServer>(
std::move(options));
189 std::exception_ptr eptr;
190 auto barrier = std::make_shared<boost::barrier>(2);
192 std::thread
t = std::thread([&, barrier] () {
198 [&, barrier] (std::exception_ptr ex) {
209 std::rethrow_exception(eptr);
212 return std::unique_ptr<ScopedHTTPServer>(
void append(std::unique_ptr< folly::IOBuf > &&buf, bool pack=false)
folly::IOBufQueue requestBody_
ResponseBuilder & status(uint16_t code, const std::string &message)
void setFromLocalPort(uint16_t port)
constexpr detail::Map< Move > move
std::unique_ptr< folly::IOBuf > move()
ResponseBuilder & body(std::unique_ptr< folly::IOBuf > bodyIn)
requires E e noexcept(noexcept(s.error(std::move(e))))
ScopedHandler(HandlerType *ptr)
std::unique_ptr< HTTPServer > server_
void handler(int, siginfo_t *, void *)
void onBody(std::unique_ptr< folly::IOBuf > body) noexceptoverride
ScopedHTTPServer(std::thread thread, std::unique_ptr< HTTPServer > server)
std::vector< std::unique_ptr< RequestHandlerFactory > > handlerFactories
RequestHandler * onRequest(RequestHandler *, HTTPMessage *) noexceptoverride
void requestComplete() noexceptoverride
void onRequest(std::unique_ptr< HTTPMessage > headers) noexceptoverride
static std::unique_ptr< ScopedHTTPServer > start(HandlerType handler, int port=0, int numThreads=4, std::unique_ptr< wangle::SSLContextConfig > sslCfg=nullptr)
void onError(ProxygenError) noexceptoverride
void onServerStart(folly::EventBase *) noexceptoverride
std::vector< HTTPServer::IPConfig > getAddresses() const
bool setThreadName(std::thread::id tid, StringPiece name)
std::unique_ptr< HTTPMessage > request_
HandlerType *const handlerPtr_
ScopedHandlerFactory(HandlerType handler)
void onEOM() noexceptoverride
void onServerStop() noexceptoverride
void onUpgrade(proxygen::UpgradeProtocol) noexceptoverride
ResponseHandler * downstream_
ThreadPoolListHook * addr