proxygen
proxygen::ScopedHandler< HandlerType > Class Template Reference

#include <ScopedHTTPServer.h>

Inheritance diagram for proxygen::ScopedHandler< HandlerType >:
proxygen::RequestHandler

Public Member Functions

 ScopedHandler (HandlerType *ptr)
 
void onRequest (std::unique_ptr< HTTPMessage > headers) noexceptoverride
 
void onBody (std::unique_ptr< folly::IOBuf > body) noexceptoverride
 
void onUpgrade (proxygen::UpgradeProtocol) noexceptoverride
 
void onEOM () noexceptoverride
 
void requestComplete () noexceptoverride
 
void onError (ProxygenError) noexceptoverride
 
- Public Member Functions inherited from proxygen::RequestHandler
virtual void setResponseHandler (ResponseHandler *handler) noexcept
 
virtual void onEgressPaused () noexcept
 
virtual void onEgressResumed () noexcept
 
virtual bool canHandleExpect () noexcept
 
virtual ExMessageHandlergetExHandler () noexcept
 
virtual ResponseHandlergetDownstream () noexcept
 
virtual ~RequestHandler ()
 

Private Attributes

HandlerType *const handlerPtr_ {nullptr}
 
std::unique_ptr< HTTPMessagerequest_
 
folly::IOBufQueue requestBody_
 

Additional Inherited Members

- Protected Attributes inherited from proxygen::RequestHandler
ResponseHandlerdownstream_ {nullptr}
 

Detailed Description

template<typename HandlerType>
class proxygen::ScopedHandler< HandlerType >

Definition at line 21 of file ScopedHTTPServer.h.

Constructor & Destructor Documentation

template<typename HandlerType >
proxygen::ScopedHandler< HandlerType >::ScopedHandler ( HandlerType *  ptr)
inlineexplicit

Definition at line 23 of file ScopedHTTPServer.h.

23  : handlerPtr_(ptr) {
24  }
void * ptr
HandlerType *const handlerPtr_

Member Function Documentation

template<typename HandlerType >
void proxygen::ScopedHandler< HandlerType >::onBody ( std::unique_ptr< folly::IOBuf body)
inlineoverridevirtualnoexcept

Invoked when we get part of body for the request.

Implements proxygen::RequestHandler.

Definition at line 30 of file ScopedHTTPServer.h.

References folly::IOBufQueue::append(), folly::gen::move, and proxygen::ScopedHandler< HandlerType >::requestBody_.

30  {
32  }
void append(std::unique_ptr< folly::IOBuf > &&buf, bool pack=false)
Definition: IOBufQueue.cpp:143
folly::IOBufQueue requestBody_
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
template<typename HandlerType >
void proxygen::ScopedHandler< HandlerType >::onEOM ( )
inlineoverridevirtualnoexcept

Invoked when we finish receiving the body.

Implements proxygen::RequestHandler.

Definition at line 36 of file ScopedHTTPServer.h.

References proxygen::ResponseBuilder::body(), proxygen::RequestHandler::downstream_, folly::IOBufQueue::move(), proxygen::ScopedHandler< HandlerType >::request_, proxygen::ScopedHandler< HandlerType >::requestBody_, proxygen::ResponseBuilder::sendWithEOM(), and proxygen::ResponseBuilder::status().

36  {
37  try {
38  ResponseBuilder r(downstream_);
39  (*handlerPtr_)(*request_, requestBody_.move(), r);
40  r.sendWithEOM();
41  } catch (const std::exception& ex) {
42  ResponseBuilder(downstream_)
43  .status(500, "Internal Server Error")
44  .body(ex.what())
45  .sendWithEOM();
46  } catch (...) {
47  ResponseBuilder(downstream_)
48  .status(500, "Internal Server Error")
49  .body("Unknown exception thrown")
50  .sendWithEOM();
51  }
52  }
folly::IOBufQueue requestBody_
std::unique_ptr< folly::IOBuf > move()
Definition: IOBufQueue.h:459
std::unique_ptr< HTTPMessage > request_
ResponseHandler * downstream_
template<typename HandlerType >
void proxygen::ScopedHandler< HandlerType >::onError ( ProxygenError  err)
inlineoverridevirtualnoexcept

Request failed. Maybe because of read/write error on socket or client not being able to send request in time.

NOTE: Can be invoked at any time (except for before onRequest).

No more callbacks will be invoked after this. You should clean up after yourself.

Implements proxygen::RequestHandler.

Definition at line 56 of file ScopedHTTPServer.h.

56 { delete this; }
template<typename HandlerType >
void proxygen::ScopedHandler< HandlerType >::onRequest ( std::unique_ptr< HTTPMessage headers)
inlineoverridevirtualnoexcept

Invoked when we have successfully fetched headers from client. This will always be the first callback invoked on your handler.

Implements proxygen::RequestHandler.

Definition at line 26 of file ScopedHTTPServer.h.

References folly::gen::move, and proxygen::ScopedHandler< HandlerType >::request_.

26  {
27  request_ = std::move(headers);
28  }
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
std::unique_ptr< HTTPMessage > request_
template<typename HandlerType >
void proxygen::ScopedHandler< HandlerType >::onUpgrade ( proxygen::UpgradeProtocol  prot)
inlineoverridevirtualnoexcept

Invoked when the session has been upgraded to a different protocol

Implements proxygen::RequestHandler.

Definition at line 34 of file ScopedHTTPServer.h.

34 {}
template<typename HandlerType >
void proxygen::ScopedHandler< HandlerType >::requestComplete ( )
inlineoverridevirtualnoexcept

Invoked when request processing has been completed and nothing more needs to be done. This may be a good place to log some stats and clean up resources. This is distinct from onEOM() because it is invoked after the response is fully sent. Once this callback has been received, downstream_ should be considered invalid.

Implements proxygen::RequestHandler.

Definition at line 54 of file ScopedHTTPServer.h.

54 { delete this; }

Member Data Documentation

template<typename HandlerType >
HandlerType* const proxygen::ScopedHandler< HandlerType >::handlerPtr_ {nullptr}
private

Definition at line 58 of file ScopedHTTPServer.h.

template<typename HandlerType >
std::unique_ptr<HTTPMessage> proxygen::ScopedHandler< HandlerType >::request_
private
template<typename HandlerType >
folly::IOBufQueue proxygen::ScopedHandler< HandlerType >::requestBody_
private

The documentation for this class was generated from the following file: