proxygen
proxygen::HTTPTransactionEgressSMData Class Reference

#include <HTTPTransactionEgressSM.h>

Public Types

enum  State : uint8_t {
  State::Start, State::HeadersSent, State::RegularBodySent, State::ChunkHeaderSent,
  State::ChunkBodySent, State::ChunkTerminatorSent, State::TrailersSent, State::EOMQueued,
  State::SendingDone
}
 
enum  Event : uint8_t {
  Event::sendHeaders, Event::sendBody, Event::sendChunkHeader, Event::sendChunkTerminator,
  Event::sendTrailers, Event::sendEOM, Event::eomFlushed
}
 

Static Public Member Functions

static State getInitialState ()
 
static std::pair< State, bool > find (State s, Event e)
 
static const std::string getName ()
 

Detailed Description

Definition at line 17 of file HTTPTransactionEgressSM.h.

Member Enumeration Documentation

Enumerator
sendHeaders 
sendBody 
sendChunkHeader 
sendChunkTerminator 
sendTrailers 
sendEOM 
eomFlushed 

Definition at line 32 of file HTTPTransactionEgressSM.h.

32  : uint8_t {
33  // API accessible transitions
34  sendHeaders,
35  sendBody,
36  sendChunkHeader,
37  sendChunkTerminator,
38  sendTrailers,
39  sendEOM,
40  // Internal state transitions
41  eomFlushed,
42  };
Enumerator
Start 
HeadersSent 
RegularBodySent 
ChunkHeaderSent 
ChunkBodySent 
ChunkTerminatorSent 
TrailersSent 
EOMQueued 
SendingDone 

Definition at line 20 of file HTTPTransactionEgressSM.h.

20  : uint8_t {
21  Start,
22  HeadersSent,
23  RegularBodySent,
24  ChunkHeaderSent,
25  ChunkBodySent,
26  ChunkTerminatorSent,
27  TrailersSent,
28  EOMQueued,
29  SendingDone
30  };

Member Function Documentation

std::pair< HTTPTransactionEgressSMData::State, bool > proxygen::HTTPTransactionEgressSMData::find ( HTTPTransactionEgressSMData::State  s,
HTTPTransactionEgressSMData::Event  e 
)
static

Definition at line 20 of file HTTPTransactionEgressSM.cpp.

References ChunkBodySent, ChunkHeaderSent, ChunkTerminatorSent, eomFlushed, EOMQueued, HeadersSent, RegularBodySent, sendBody, sendChunkHeader, sendChunkTerminator, sendEOM, sendHeaders, SendingDone, sendTrailers, Start, and TrailersSent.

Referenced by getInitialState().

21  {
24  using TransitionTable =
25  std::unordered_map<std::pair<State, Event>, State, folly::Hash>;
26 
27  // +--> ChunkHeaderSent -> ChunkBodySent
28  // | ^ v
29  // | | ChunkTerminatorSent -> TrailersSent
30  // | |__________| | |
31  // | | v
32  // Start -> HeadersSent +----> EOMQueued --> SendingDone
33  // | ^
34  // +------------> RegularBodySent -------+
35 
36  static const folly::Indestructible<TransitionTable> transitions{
37  TransitionTable{
39 
40  // For HTTP sending 100 response, then a regular response
41  {{State::HeadersSent, Event::sendHeaders}, State::HeadersSent},
42 
47 
48  {{State::RegularBodySent, Event::sendBody}, State::RegularBodySent},
49  {{State::RegularBodySent, Event::sendTrailers}, State::TrailersSent},
50  {{State::RegularBodySent, Event::sendEOM}, State::EOMQueued},
51 
53 
54  {{State::ChunkBodySent, Event::sendBody}, State::ChunkBodySent},
57 
59  State::ChunkHeaderSent},
60  {{State::ChunkTerminatorSent, Event::sendTrailers}, State::TrailersSent},
61  {{State::ChunkTerminatorSent, Event::sendEOM}, State::EOMQueued},
62 
63  {{State::TrailersSent, Event::sendEOM}, State::EOMQueued},
64 
66  }
67  };
68 
69  auto const &it = transitions->find(std::make_pair(s, e));
70  if (it == transitions->end()) {
71  return std::make_pair(s, false);
72  }
73 
74  return std::make_pair(it->second, true);
75 }
static set< string > s
static State proxygen::HTTPTransactionEgressSMData::getInitialState ( )
inlinestatic

Definition at line 44 of file HTTPTransactionEgressSM.h.

References find(), s, and Start.

static const std::string proxygen::HTTPTransactionEgressSMData::getName ( )
inlinestatic

Definition at line 50 of file HTTPTransactionEgressSM.h.

References proxygen::operator<<(), and s.

50  {
51  return "HTTPTransactionEgress";
52  }

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