proxygen
DecoratedAsyncTransportWrapper.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-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 
19 
20 namespace folly {
21 
26 template <class T>
28  public:
29  explicit DecoratedAsyncTransportWrapper(typename T::UniquePtr transport)
30  : transport_(std::move(transport)) {}
31 
32  const AsyncTransportWrapper* getWrappedTransport() const override {
33  return transport_.get();
34  }
35 
36  // folly::AsyncTransportWrapper
37  ReadCallback* getReadCallback() const override {
38  return transport_->getReadCallback();
39  }
40 
41  void setReadCB(
42  folly::AsyncTransportWrapper::ReadCallback* callback) override {
43  transport_->setReadCB(callback);
44  }
45 
46  void write(
48  const void* buf,
49  size_t bytes,
51  transport_->write(callback, buf, bytes, flags);
52  }
53 
54  void writeChain(
56  std::unique_ptr<folly::IOBuf>&& buf,
58  transport_->writeChain(callback, std::move(buf), flags);
59  }
60 
61  void writev(
63  const iovec* vec,
64  size_t bytes,
66  transport_->writev(callback, vec, bytes, flags);
67  }
68 
69  // folly::AsyncSocketBase
70  folly::EventBase* getEventBase() const override {
71  return transport_->getEventBase();
72  }
73 
74  // folly::AsyncTransport
75  void attachEventBase(folly::EventBase* eventBase) override {
76  transport_->attachEventBase(eventBase);
77  }
78 
79  void close() override {
80  transport_->close();
81  }
82 
83  void closeNow() override {
84  transport_->closeNow();
85  }
86 
87  void closeWithReset() override {
88  transport_->closeWithReset();
89 
90  // This will likely result in 2 closeNow() calls on the decorated transport,
91  // but otherwise it is very easy to miss the derived class's closeNow().
92  closeNow();
93  }
94 
95  bool connecting() const override {
96  return transport_->connecting();
97  }
98 
99  void detachEventBase() override {
100  transport_->detachEventBase();
101  }
102 
103  bool error() const override {
104  return transport_->error();
105  }
106 
107  size_t getAppBytesReceived() const override {
108  return transport_->getAppBytesReceived();
109  }
110 
111  size_t getAppBytesWritten() const override {
112  return transport_->getAppBytesWritten();
113  }
114 
115  void getLocalAddress(folly::SocketAddress* address) const override {
116  return transport_->getLocalAddress(address);
117  }
118 
119  void getPeerAddress(folly::SocketAddress* address) const override {
120  return transport_->getPeerAddress(address);
121  }
122 
124  return transport_->getPeerCert();
125  }
126 
127  size_t getRawBytesReceived() const override {
128  return transport_->getRawBytesReceived();
129  }
130 
131  size_t getRawBytesWritten() const override {
132  return transport_->getRawBytesWritten();
133  }
134 
135  uint32_t getSendTimeout() const override {
136  return transport_->getSendTimeout();
137  }
138 
139  bool good() const override {
140  return transport_->good();
141  }
142 
143  bool isDetachable() const override {
144  return transport_->isDetachable();
145  }
146 
147  bool isEorTrackingEnabled() const override {
148  return transport_->isEorTrackingEnabled();
149  }
150 
151  bool readable() const override {
152  return transport_->readable();
153  }
154 
155  bool writable() const override {
156  return transport_->writable();
157  }
158 
159  void setEorTracking(bool track) override {
160  return transport_->setEorTracking(track);
161  }
162 
163  void setSendTimeout(uint32_t timeoutInMs) override {
164  transport_->setSendTimeout(timeoutInMs);
165  }
166 
167  void shutdownWrite() override {
168  transport_->shutdownWrite();
169  }
170 
171  void shutdownWriteNow() override {
172  transport_->shutdownWriteNow();
173  }
174 
176  return transport_->getApplicationProtocol();
177  }
178 
179  std::string getSecurityProtocol() const override {
180  return transport_->getSecurityProtocol();
181  }
182 
183  bool isReplaySafe() const override {
184  return transport_->isReplaySafe();
185  }
186 
188  folly::AsyncTransport::ReplaySafetyCallback* callback) override {
189  transport_->setReplaySafetyCallback(callback);
190  }
191 
193  return transport_->getPeerCertificate();
194  }
195 
197  return transport_->getSelfCertificate();
198  }
199 
200  protected:
202 
203  typename T::UniquePtr transport_;
204 };
205 
206 } // namespace folly
void setReplaySafetyCallback(folly::AsyncTransport::ReplaySafetyCallback *callback) override
std::string getApplicationProtocol() const noexceptoverride
flags
Definition: http_parser.h:127
std::unique_ptr< X509, X509Deleter > X509UniquePtr
void attachEventBase(folly::EventBase *eventBase) override
void setReadCB(folly::AsyncTransportWrapper::ReadCallback *callback) override
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
STL namespace.
void writev(folly::AsyncTransportWrapper::WriteCallback *callback, const iovec *vec, size_t bytes, folly::WriteFlags flags=folly::WriteFlags::NONE) override
—— Concurrent Priority Queue Implementation ——
Definition: AtomicBitSet.h:29
requires E e noexcept(noexcept(s.error(std::move(e))))
void getLocalAddress(folly::SocketAddress *address) const override
const AsyncTransportCertificate * getSelfCertificate() const override
Definition: Traits.h:588
folly::EventBase * getEventBase() const override
void write(folly::AsyncTransportWrapper::WriteCallback *callback, const void *buf, size_t bytes, folly::WriteFlags flags=folly::WriteFlags::NONE) override
const char * string
Definition: Conv.cpp:212
void setSendTimeout(uint32_t timeoutInMs) override
const
Definition: upload.py:398
void writeChain(folly::AsyncTransportWrapper::WriteCallback *callback, std::unique_ptr< folly::IOBuf > &&buf, folly::WriteFlags flags=folly::WriteFlags::NONE) override
const AsyncTransportCertificate * getPeerCertificate() const override
DecoratedAsyncTransportWrapper(typename T::UniquePtr transport)
folly::ssl::X509UniquePtr getPeerCert() const override
void getPeerAddress(folly::SocketAddress *address) const override
const AsyncTransportWrapper * getWrappedTransport() const override