Joseph Wu created MESOS-10010:
---------------------------------

             Summary: Implement an SSL socket for Windows, using OpenSSL 
directly
                 Key: MESOS-10010
                 URL: https://issues.apache.org/jira/browse/MESOS-10010
             Project: Mesos
          Issue Type: Task
          Components: libprocess
            Reporter: Joseph Wu
            Assignee: Joseph Wu


{code}
class WindowsSSLSocketImpl : public SocketImpl
{
public:
  // This will be the entry point for Socket::create(SSL).
  static Try<std::shared_ptr<SocketImpl>> create(int_fd s);

  WindowsSSLSocketImpl(int_fd _s);
  ~WindowsSSLSocketImpl() override;

  // Overrides for the 'SocketImpl' interface below.

  // Unreachable.
  Future<Nothing> connect(const Address& address) override;

  // This will initialize SSL objects then call windows::connect()
  // and chain that onto the appropriate call to SSL_do_handshake.
  Future<Nothing> connect(
      const Address& address,
      const openssl::TLSClientConfig& config) override;

  // These will call SSL_read or SSL_write as appropriate.
  // As long as the SSL context is set up correctly, these will be
  // thin wrappers.  (More details after the code block.)
  Future<size_t> recv(char* data, size_t size) override;
  Future<size_t> send(const char* data, size_t size) override;
  Future<size_t> sendfile(int_fd fd, off_t offset, size_t size) override;

  // Nothing SSL here, just a plain old listener.
  Try<Nothing> listen(int backlog) override;

  // This will initialize SSL objects then call windows::accept()
  // and then perform handshaking.  Any downgrading will
  // happen here.  Since we control the event loop, we can
  // easily peek at the first few bytes to check SSL-ness.
  Future<std::shared_ptr<SocketImpl>> accept() override;

  SocketImpl::Kind kind() const override { return SocketImpl::Kind::SSL; }
}
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to