summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
c72b52a)
Summary: EOR flag was hardcoded to "false" in folly::AsyncSocket. This diff enables changing EOR flag using AsyncSocket::setEorTracking() method.
Reviewed By: yfeldblum
Differential Revision:
D4421966
fbshipit-source-id:
2e1b9b19ced6555845396ec33bfd3d5feb710640
-bool AsyncSSLSocket::isEorTrackingEnabled() const {
- return trackEor_;
-}
-
void AsyncSSLSocket::setEorTracking(bool track) {
void AsyncSSLSocket::setEorTracking(bool track) {
- if (trackEor_ != track) {
- trackEor_ = track;
+ if (isEorTrackingEnabled() != track) {
+ AsyncSocket::setEorTracking(track);
appEorByteNo_ = 0;
minEorRawByteNo_ = 0;
}
appEorByteNo_ = 0;
minEorRawByteNo_ = 0;
}
int AsyncSSLSocket::eorAwareSSLWrite(SSL *ssl, const void *buf, int n,
bool eor) {
int AsyncSSLSocket::eorAwareSSLWrite(SSL *ssl, const void *buf, int n,
bool eor) {
- if (eor && trackEor_) {
+ if (eor && isEorTrackingEnabled()) {
if (appEorByteNo_) {
// cannot track for more than one app byte EOR
CHECK(appEorByteNo_ == appBytesWritten_ + n);
if (appEorByteNo_) {
// cannot track for more than one app byte EOR
CHECK(appEorByteNo_ == appBytesWritten_ + n);
tsslSock = reinterpret_cast<AsyncSSLSocket*>(appData);
CHECK(tsslSock);
tsslSock = reinterpret_cast<AsyncSSLSocket*>(appData);
CHECK(tsslSock);
- if (tsslSock->trackEor_ && tsslSock->minEorRawByteNo_ &&
+ if (tsslSock->isEorTrackingEnabled() && tsslSock->minEorRawByteNo_ &&
tsslSock->minEorRawByteNo_ <= BIO_number_written(b) + inl) {
flags = MSG_EOR;
}
tsslSock->minEorRawByteNo_ <= BIO_number_written(b) + inl) {
flags = MSG_EOR;
}
virtual std::string getSecurityProtocol() const override { return "TLS"; }
virtual std::string getSecurityProtocol() const override { return "TLS"; }
- bool isEorTrackingEnabled() const override;
virtual void setEorTracking(bool track) override;
virtual size_t getRawBytesWritten() const override;
virtual size_t getRawBytesReceived() const override;
virtual void setEorTracking(bool track) override;
virtual size_t getRawBytesWritten() const override;
virtual size_t getRawBytesReceived() const override;
// whether the SSL session was resumed using session ID or not
bool sessionIDResumed_{false};
// whether the SSL session was resumed using session ID or not
bool sessionIDResumed_{false};
- // Whether to track EOR or not.
- bool trackEor_{false};
-
// The app byte num that we are tracking for the MSG_EOR
// Only one app EOR byte can be tracked.
size_t appEorByteNo_{0};
// The app byte num that we are tracking for the MSG_EOR
// Only one app EOR byte can be tracked.
size_t appEorByteNo_{0};
void getPeerAddress(
folly::SocketAddress* address) const override;
void getPeerAddress(
folly::SocketAddress* address) const override;
- bool isEorTrackingEnabled() const override { return false; }
+ bool isEorTrackingEnabled() const override {
+ return trackEor_;
+ }
- void setEorTracking(bool /*track*/) override {}
+ void setEorTracking(bool track) override {
+ trackEor_ = track;
+ }
bool connecting() const override {
return (state_ == StateEnum::CONNECTING);
bool connecting() const override {
return (state_ == StateEnum::CONNECTING);
bool tfoAttempted_{false};
bool tfoFinished_{false};
bool noTransparentTls_{false};
bool tfoAttempted_{false};
bool tfoFinished_{false};
bool noTransparentTls_{false};
+ // Whether to track EOR or not.
+ bool trackEor_{false};
std::unique_ptr<EvbChangeCallback> evbChangeCb_{nullptr};
};
std::unique_ptr<EvbChangeCallback> evbChangeCb_{nullptr};
};
ReadCallback rcb;
acceptedSocket->setReadCB(&rcb);
ReadCallback rcb;
acceptedSocket->setReadCB(&rcb);
+ // Check if EOR tracking flag can be set and reset.
+ EXPECT_FALSE(socket->isEorTrackingEnabled());
+ socket->setEorTracking(true);
+ EXPECT_TRUE(socket->isEorTrackingEnabled());
+ socket->setEorTracking(false);
+ EXPECT_FALSE(socket->isEorTrackingEnabled());
+
// Write a simple buffer to the socket
constexpr size_t simpleBufLength = 5;
char simpleBuf[simpleBufLength];
// Write a simple buffer to the socket
constexpr size_t simpleBufLength = 5;
char simpleBuf[simpleBufLength];