11#include <promeki/config.h>
21PROMEKI_NAMESPACE_BEGIN
56class SslSocket :
public TcpSocket {
57 PROMEKI_OBJECT(SslSocket, TcpSocket)
60 using List = ::promeki::List<SslSocket *>;
63 explicit SslSocket(ObjectBase *parent =
nullptr);
66 ~SslSocket()
override;
76 void setSslContext(SslContext ctx);
79 SslContext sslContext()
const {
return _ctx; }
94 Error startEncryption(
const String &hostname = String());
104 Error startServerEncryption();
121 Error continueHandshake();
124 bool isEncrypted()
const {
return _state == Encrypted; }
132 String peerCertificateSubject()
const;
138 int64_t read(
void *data, int64_t maxSize)
override;
139 int64_t write(
const void *data, int64_t maxSize)
override;
140 int64_t bytesAvailable()
const override;
141 Error close()
override;
144 PROMEKI_SIGNAL(encrypted);
158 PROMEKI_SIGNAL(sslErrors, StringList);
171 SslState _state = NotEncrypted;
173 Error performHandshakeStep();