23 VLOG(8) <<
"Received handshake message " 39 throw std::runtime_error(
"spliced handshake data");
49 VLOG(8) <<
"Received handshake message " 62 throw std::runtime_error(
"unknown content type");
69 auto msg = decode<T>(
std::move(handshakeMsg));
70 msg.originalEncoding =
std::move(original);
76 auto shlo = decode<ServerHello>(
std::move(handshakeMsg));
88 shlo.originalEncoding =
std::move(original);
97 if (!cursor.canAdvance(kHandshakeHeaderSize)) {
106 throw std::runtime_error(
"handshake record too big");
113 cursor.clone(handshakeMsg, length);
114 auto original = buf.
split(kHandshakeHeaderSize + length);
116 switch (handshakeType) {
122 return parse<EndOfEarlyData>(
125 return parse<NewSessionTicket>(
128 return parse<EncryptedExtensions>(
131 return parse<CertificateMsg>(
134 return parse<CompressedCertificate>(
137 return parse<CertificateRequest>(
140 return parse<CertificateVerify>(
147 throw std::runtime_error(
"unknown handshake type");
std::vector< Extension > extensions
std::unique_ptr< folly::IOBuf > split(size_t n)
const folly::IOBuf * front() const
folly::StringPiece toString(StateEnum state)
virtual bool hasUnparsedHandshakeData() const
void append(std::unique_ptr< folly::IOBuf > &&buf, bool pack=false)
size_t chainLength() const
static constexpr Random HrrRandom
boost::variant< ClientHello, ServerHello, EndOfEarlyData, HelloRetryRequest, EncryptedExtensions, CertificateRequest, CompressedCertificate, CertificateMsg, CertificateVerify, Finished, NewSessionTicket, KeyUpdate, Alert, Accept, Connect, AppData, AppWrite, EarlyAppWrite, WriteNewSessionTicket > Param
constexpr detail::Map< Move > move
Param parse< ServerHello >(Buf handshakeMsg, Buf original)
Buf legacy_session_id_echo
static Param parse(Buf handshakeMsg, Buf original)
constexpr size_t kMaxHandshakeSize
enum http_parser_type type
typename std::underlying_type< HandshakeType >::type HandshakeTypeType
static constexpr size_t kHandshakeHeaderSize
static folly::Optional< Param > decodeHandshakeMessage(folly::IOBufQueue &buf)
virtual folly::Optional< Param > readEvent(folly::IOBufQueue &socketBuf)
ProtocolVersion legacy_version
uint32_t readBits24(folly::io::Cursor &cursor)
folly::Optional< Buf > originalEncoding
decltype(auto) apply_visitor(Visitor &&visitor, const DiscriminatedPtr< Args... > &variant)
std::unique_ptr< folly::IOBuf > Buf
uint8_t legacy_compression_method
folly::IOBufQueue unparsedHandshakeData_
static constexpr size_t size
virtual folly::Optional< TLSMessage > read(folly::IOBufQueue &buf)=0