/* * Copyright (c) 2011-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include namespace Swift { class HostAddressPort; class TLSContextFactory; class TLSContext; class SWIFTEN_API TLSConnection : public Connection { public: TLSConnection(Connection::ref connection, TLSContextFactory* tlsFactory, const TLSOptions&); virtual ~TLSConnection(); virtual void listen() {assert(false);} virtual void connect(const HostAddressPort& address); virtual void disconnect(); virtual void write(const SafeByteArray& data); virtual HostAddressPort getLocalAddress() const; virtual HostAddressPort getRemoteAddress() const; TLSContext* getTLSContext() const; private: void handleRawConnectFinished(bool error); void handleRawDisconnected(const boost::optional& error); void handleRawDataRead(std::shared_ptr data); void handleRawDataWritten(); void handleTLSConnectFinished(bool error); void handleTLSDataForNetwork(const SafeByteArray& data); void handleTLSDataForApplication(const SafeByteArray& data); private: std::unique_ptr context; Connection::ref connection; }; }