apply clang-tidy modernize-use-override
[folly.git] / folly / io / async / DecoratedAsyncTransportWrapper.h
1 /*
2  * Copyright 2017 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
18 #include <folly/io/async/AsyncTransport.h>
19
20 namespace folly {
21
22 /**
23  * Convenience class so that AsyncTransportWrapper can be decorated without
24  * having to redefine every single method.
25  */
26 template<class T>
27 class DecoratedAsyncTransportWrapper : public folly::AsyncTransportWrapper {
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(
47       folly::AsyncTransportWrapper::WriteCallback* callback,
48       const void* buf,
49       size_t bytes,
50       folly::WriteFlags flags = folly::WriteFlags::NONE) override {
51     transport_->write(callback, buf, bytes, flags);
52   }
53
54   void writeChain(
55       folly::AsyncTransportWrapper::WriteCallback* callback,
56       std::unique_ptr<folly::IOBuf>&& buf,
57       folly::WriteFlags flags = folly::WriteFlags::NONE) override {
58     transport_->writeChain(callback, std::move(buf), flags);
59   }
60
61   void writev(
62       folly::AsyncTransportWrapper::WriteCallback* callback,
63       const iovec* vec,
64       size_t bytes,
65       folly::WriteFlags flags = folly::WriteFlags::NONE) override {
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
123   folly::ssl::X509UniquePtr getPeerCert() const override {
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
175   std::string getApplicationProtocol() noexcept override {
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
187   void setReplaySafetyCallback(
188       folly::AsyncTransport::ReplaySafetyCallback* callback) override {
189     transport_->setReplaySafetyCallback(callback);
190   }
191
192  protected:
193   ~DecoratedAsyncTransportWrapper() override {}
194
195   typename T::UniquePtr transport_;
196 };
197
198 }