@@ -32,8 +32,11 @@ NetworkClientSecure::NetworkClientSecure() {
3232 _connected = false ;
3333 _timeout = 30000 ; // Same default as ssl_client
3434
35- sslclient = new sslclient_context;
36- ssl_init (sslclient);
35+ sslclient.reset (new sslclient_context, [](struct sslclient_context *sslclient) {
36+ stop_ssl_socket (sslclient);
37+ delete sslclient;
38+ });
39+ ssl_init (sslclient.get ());
3740 sslclient->socket = -1 ;
3841 sslclient->handshake_timeout = 120000 ;
3942 _use_insecure = false ;
@@ -53,8 +56,11 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
5356 _lastReadTimeout = 0 ;
5457 _lastWriteTimeout = 0 ;
5558
56- sslclient = new sslclient_context;
57- ssl_init (sslclient);
59+ sslclient.reset (new sslclient_context, [](struct sslclient_context *sslclient) {
60+ stop_ssl_socket (sslclient);
61+ delete sslclient;
62+ });
63+ ssl_init (sslclient.get ());
5864 sslclient->socket = sock;
5965 sslclient->handshake_timeout = 120000 ;
6066
@@ -71,20 +77,10 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
7177 _alpn_protos = NULL ;
7278}
7379
74- NetworkClientSecure::~NetworkClientSecure () {
75- stop ();
76- delete sslclient;
77- }
78-
79- NetworkClientSecure &NetworkClientSecure::operator =(const NetworkClientSecure &other) {
80- stop ();
81- sslclient->socket = other.sslclient ->socket ;
82- _connected = other._connected ;
83- return *this ;
84- }
80+ NetworkClientSecure::~NetworkClientSecure () {}
8581
8682void NetworkClientSecure::stop () {
87- stop_ssl_socket (sslclient, _CA_cert, _cert, _private_key );
83+ stop_ssl_socket (sslclient. get () );
8884
8985 _connected = false ;
9086 _peek = -1 ;
@@ -130,10 +126,10 @@ int NetworkClientSecure::connect(const char *host, uint16_t port, const char *CA
130126}
131127
132128int NetworkClientSecure::connect (IPAddress ip, uint16_t port, const char *host, const char *CA_cert, const char *cert, const char *private_key) {
133- int ret = start_ssl_client (sslclient, ip, port, host, _timeout, CA_cert, _use_ca_bundle, cert, private_key, NULL , NULL , _use_insecure, _alpn_protos);
129+ int ret = start_ssl_client (sslclient. get () , ip, port, host, _timeout, CA_cert, _use_ca_bundle, cert, private_key, NULL , NULL , _use_insecure, _alpn_protos);
134130
135131 if (ret >= 0 && !_stillinPlainStart) {
136- ret = ssl_starttls_handshake (sslclient);
132+ ret = ssl_starttls_handshake (sslclient. get () );
137133 } else {
138134 log_i (" Actual TLS start postponed." );
139135 }
@@ -153,7 +149,7 @@ int NetworkClientSecure::startTLS() {
153149 int ret = 1 ;
154150 if (_stillinPlainStart) {
155151 log_i (" startTLS: starting TLS/SSL on this dplain connection" );
156- ret = ssl_starttls_handshake (sslclient);
152+ ret = ssl_starttls_handshake (sslclient. get () );
157153 if (ret < 0 ) {
158154 log_e (" startTLS: %d" , ret);
159155 stop ();
@@ -178,7 +174,7 @@ int NetworkClientSecure::connect(const char *host, uint16_t port, const char *ps
178174 return 0 ;
179175 }
180176
181- int ret = start_ssl_client (sslclient, address, port, host, _timeout, NULL , false , NULL , NULL , pskIdent, psKey, _use_insecure, _alpn_protos);
177+ int ret = start_ssl_client (sslclient. get () , address, port, host, _timeout, NULL , false , NULL , NULL , pskIdent, psKey, _use_insecure, _alpn_protos);
182178 _lastError = ret;
183179 if (ret < 0 ) {
184180 log_e (" start_ssl_client: connect failed %d" , ret);
@@ -213,7 +209,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
213209 }
214210
215211 if (_stillinPlainStart) {
216- return send_net_data (sslclient, buf, size);
212+ return send_net_data (sslclient. get () , buf, size);
217213 }
218214
219215 if (_lastWriteTimeout != _timeout) {
@@ -224,7 +220,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
224220 _lastWriteTimeout = _timeout;
225221 }
226222 }
227- int res = send_ssl_data (sslclient, buf, size);
223+ int res = send_ssl_data (sslclient. get () , buf, size);
228224 if (res < 0 ) {
229225 log_e (" Closing connection on failed write" );
230226 stop ();
@@ -235,7 +231,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
235231
236232int NetworkClientSecure::read (uint8_t *buf, size_t size) {
237233 if (_stillinPlainStart) {
238- return get_net_receive (sslclient, buf, size);
234+ return get_net_receive (sslclient. get () , buf, size);
239235 }
240236
241237 if (_lastReadTimeout != _timeout) {
@@ -268,7 +264,7 @@ int NetworkClientSecure::read(uint8_t *buf, size_t size) {
268264 buf++;
269265 peeked = 1 ;
270266 }
271- res = get_ssl_receive (sslclient, buf, size);
267+ res = get_ssl_receive (sslclient. get () , buf, size);
272268
273269 if (res < 0 ) {
274270 log_e (" Closing connection on failed read" );
@@ -280,14 +276,14 @@ int NetworkClientSecure::read(uint8_t *buf, size_t size) {
280276
281277int NetworkClientSecure::available () {
282278 if (_stillinPlainStart) {
283- return peek_net_receive (sslclient, 0 );
279+ return peek_net_receive (sslclient. get () , 0 );
284280 }
285281
286282 int peeked = (_peek >= 0 ), res = -1 ;
287283 if (!_connected) {
288284 return peeked;
289285 }
290- res = data_to_read (sslclient);
286+ res = data_to_read (sslclient. get () );
291287
292288 if (res < 0 && !_stillinPlainStart) {
293289 log_e (" Closing connection on failed available check" );
@@ -346,7 +342,7 @@ bool NetworkClientSecure::verify(const char *fp, const char *domain_name) {
346342 return false ;
347343 }
348344
349- return verify_ssl_fingerprint (sslclient, fp, domain_name);
345+ return verify_ssl_fingerprint (sslclient. get () , fp, domain_name);
350346}
351347
352348char *NetworkClientSecure::_streamLoad (Stream &stream, size_t size) {
0 commit comments