Have reserved sockopt to disable TSOCKS
authorPetr Lapukhov <petr@fb.com>
Wed, 21 Jun 2017 14:41:46 +0000 (07:41 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Wed, 21 Jun 2017 14:42:12 +0000 (07:42 -0700)
Summary: as title, similar to TTLS

Reviewed By: djwatson

Differential Revision: D5284200

fbshipit-source-id: 7eb95668740b239349c6e73f3b152e6506671072

folly/io/async/AsyncSocket.cpp
folly/io/async/AsyncSocket.h

index 2ecfbb49811abc0d32adae475978df4a7aa7241e..46cc0d3b811be983c429a870f05d6b12099127bd 100644 (file)
@@ -520,6 +520,11 @@ int AsyncSocket::socketConnect(const struct sockaddr* saddr, socklen_t len) {
     // Ignore return value, errors are ok
     setsockopt(fd_, SOL_SOCKET, SO_NO_TRANSPARENT_TLS, nullptr, 0);
   }
+  if (noTSocks_) {
+    VLOG(4) << "Disabling TSOCKS for fd " << fd_;
+    // Ignore return value, errors are ok
+    setsockopt(fd_, SOL_SOCKET, SO_NO_TSOCKS, nullptr, 0);
+  }
 #endif
   int rv = fsp::connect(fd_, saddr, len);
   if (rv < 0) {
index 1bf1b4debd9a075f3752321781b06ef2136033c2..4b0fd0695fc11b5a175ba0deff2261eb75ba9343 100644 (file)
@@ -68,6 +68,10 @@ namespace folly {
 #define SO_NO_TRANSPARENT_TLS 200
 #endif
 
+#if defined __linux__ && !defined SO_NO_TSOCKS
+#define SO_NO_TSOCKS 201
+#endif
+
 #ifdef _MSC_VER
 // We do a dynamic_cast on this, in
 // AsyncTransportWrapper::getUnderlyingTransport so be safe and
@@ -761,6 +765,10 @@ class AsyncSocket : virtual public AsyncTransportWrapper {
     noTransparentTls_ = true;
   }
 
+  void disableTSocks() {
+    noTSocks_ = true;
+  }
+
   enum class StateEnum : uint8_t {
     UNINIT,
     CONNECTING,
@@ -1157,6 +1165,7 @@ class AsyncSocket : virtual public AsyncTransportWrapper {
   bool tfoAttempted_{false};
   bool tfoFinished_{false};
   bool noTransparentTls_{false};
+  bool noTSocks_{false};
   // Whether to track EOR or not.
   bool trackEor_{false};