11#include <promeki/config.h>
22PROMEKI_NAMESPACE_BEGIN
57class SslSocket :
public TcpSocket {
58 PROMEKI_OBJECT(SslSocket, TcpSocket)
61 using List = ::promeki::List<SslSocket *>;
64 explicit SslSocket(ObjectBase *parent =
nullptr);
67 ~SslSocket()
override;
77 void setSslContext(SslContext ctx);
80 SslContext sslContext()
const {
return _ctx; }
95 Error startEncryption(
const String &hostname = String());
105 Error startServerEncryption();
122 Error continueHandshake();
125 bool isEncrypted()
const {
return _state == Encrypted; }
133 String peerCertificateSubject()
const;
139 int64_t read(
void *data, int64_t maxSize)
override;
140 int64_t write(
const void *data, int64_t maxSize)
override;
141 int64_t bytesAvailable()
const override;
142 Error close()
override;
145 PROMEKI_SIGNAL(encrypted);
159 PROMEKI_SIGNAL(sslErrors, StringList);
178 SslState _state = NotEncrypted;
187 bool _isClient =
true;
189 Error performHandshakeStep();