proxygen
FizzAcceptorHandshakeHelper.h
Go to the documentation of this file.
1 /*
2  * Copyright 2016-present Facebook, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #pragma once
17 
23 
24 namespace wangle {
25 
27  public:
29 };
30 
35  public:
37  public:
38  virtual ~LoggingCallback() = default;
39  virtual void logFizzHandshakeSuccess(
41  virtual void logFizzHandshakeError(const fizz::server::AsyncFizzServer&,
42  const folly::exception_wrapper&) = 0;
43  };
44 
46  std::shared_ptr<fizz::server::FizzServerContext> context,
47  const folly::SocketAddress& clientAddr,
48  std::chrono::steady_clock::time_point acceptTime,
49  wangle::TransportInfo& tinfo,
50  LoggingCallback* loggingCallback,
51  const std::shared_ptr<fizz::extensions::TokenBindingContext>&
52  tokenBindingContext)
53  : context_(context),
54  tokenBindingContext_(tokenBindingContext),
55  clientAddr_(clientAddr),
56  acceptTime_(acceptTime),
57  tinfo_(tinfo),
58  loggingCallback_(loggingCallback) {}
59 
60  void start(
63 
66  sslError_ = reason;
67  if (transport_) {
68  transport_->closeNow();
69  return;
70  }
71  if (sslSocket_) {
72  sslSocket_->closeNow();
73  return;
74  }
75  }
76 
77  protected:
78  virtual fizz::server::AsyncFizzServer::UniquePtr createFizzServer(
80  const std::shared_ptr<fizz::server::FizzServerContext>& fizzContext,
81  const std::shared_ptr<fizz::ServerExtensions>& extensions);
82 
83  virtual folly::AsyncSSLSocket::UniquePtr createSSLSocket(
84  const std::shared_ptr<folly::SSLContext>& sslContext,
85  folly::EventBase* evb,
86  int fd);
87 
88  // AsyncFizzServer::HandshakeCallback API
89  void fizzHandshakeSuccess(
90  fizz::server::AsyncFizzServer* transport) noexcept override;
91  void fizzHandshakeError(fizz::server::AsyncFizzServer* transport,
92  folly::exception_wrapper ex) noexcept override;
93  void fizzHandshakeAttemptFallback(
94  std::unique_ptr<folly::IOBuf> clientHello) override;
95 
96  // AsyncSSLSocket::HandshakeCallback API
97  void handshakeSuc(folly::AsyncSSLSocket* sock) noexcept override;
98  void handshakeErr(folly::AsyncSSLSocket* sock,
99  const folly::AsyncSocketException& ex) noexcept override;
100 
101  std::shared_ptr<fizz::server::FizzServerContext> context_;
102  std::shared_ptr<folly::SSLContext> sslContext_;
103  std::shared_ptr<fizz::extensions::TokenBindingContext> tokenBindingContext_;
104  std::shared_ptr<fizz::extensions::TokenBindingServerExtension> extension_;
109  std::chrono::steady_clock::time_point acceptTime_;
113 };
114 
117  public:
119  : wangle::PeekingAcceptorHandshakeHelper::PeekCallback(0) {}
120 
121  std::shared_ptr<fizz::server::FizzServerContext> getContext() const {
122  return context_;
123  }
124 
125  void setContext(std::shared_ptr<fizz::server::FizzServerContext> context) {
126  context_ = std::move(context);
127  }
128 
129  std::shared_ptr<fizz::extensions::TokenBindingContext>
131  return tokenBindingContext_;
132  }
133 
135  std::shared_ptr<fizz::extensions::TokenBindingContext> context) {
136  tokenBindingContext_ = std::move(context);
137  }
138 
141  loggingCallback_ = loggingCallback;
142  }
143 
145  const std::vector<uint8_t>& /* bytes */,
146  const folly::SocketAddress& clientAddr,
147  std::chrono::steady_clock::time_point acceptTime,
148  wangle::TransportInfo& tinfo) override {
150  new FizzAcceptorHandshakeHelper(context_,
151  clientAddr,
152  acceptTime,
153  tinfo,
154  loggingCallback_,
155  tokenBindingContext_));
156  }
157 
158  protected:
159  std::shared_ptr<fizz::server::FizzServerContext> context_;
160  std::shared_ptr<fizz::extensions::TokenBindingContext> tokenBindingContext_;
162 };
163 }
void setTokenBindingContext(std::shared_ptr< fizz::extensions::TokenBindingContext > context)
std::shared_ptr< fizz::server::FizzServerContext > context_
SSLException(int sslError, unsigned long errError, int sslOperationReturnValue, int errno_copy)
Definition: SSLErrors.cpp:105
SSLErrorEnum
Definition: SSLUtil.h:42
context
Definition: CMakeCache.txt:563
std::shared_ptr< folly::SSLContext > sslContext_
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
std::shared_ptr< fizz::extensions::TokenBindingContext > getTokenBindingContext() const
std::shared_ptr< fizz::server::FizzServerContext > getContext() const
wangle::AcceptorHandshakeHelper::Callback * callback_
requires E e noexcept(noexcept(s.error(std::move(e))))
std::unique_ptr< AsyncSSLSocket, Destructor > UniquePtr
FizzAcceptorHandshakeHelper(std::shared_ptr< fizz::server::FizzServerContext > context, const folly::SocketAddress &clientAddr, std::chrono::steady_clock::time_point acceptTime, wangle::TransportInfo &tinfo, LoggingCallback *loggingCallback, const std::shared_ptr< fizz::extensions::TokenBindingContext > &tokenBindingContext)
std::shared_ptr< fizz::extensions::TokenBindingContext > tokenBindingContext_
fizz::server::AsyncFizzServer::UniquePtr transport_
std::shared_ptr< fizz::extensions::TokenBindingServerExtension > extension_
AsyncSSLSocket::UniquePtr sslSocket_
folly::AsyncSSLSocket::UniquePtr sslSocket_
std::shared_ptr< fizz::server::FizzServerContext > context_
void setContext(std::shared_ptr< fizz::server::FizzServerContext > context)
auto start
std::unique_ptr< AsyncFizzServerT, folly::DelayedDestruction::Destructor > UniquePtr
std::shared_ptr< fizz::extensions::TokenBindingContext > tokenBindingContext_
AsyncFizzClient::UniquePtr transport_
std::chrono::steady_clock::time_point acceptTime_
std::unique_ptr< AcceptorHandshakeHelper, folly::DelayedDestruction::Destructor > UniquePtr
wangle::AcceptorHandshakeHelper::UniquePtr getHelper(const std::vector< uint8_t > &, const folly::SocketAddress &clientAddr, std::chrono::steady_clock::time_point acceptTime, wangle::TransportInfo &tinfo) override
void setLoggingCallback(FizzAcceptorHandshakeHelper::LoggingCallback *loggingCallback)
void dropConnection(wangle::SSLErrorEnum reason=wangle::SSLErrorEnum::NO_ERROR) override