@@ -32,8 +32,11 @@ NetworkClientSecure::NetworkClientSecure() {
32
32
_connected = false ;
33
33
_timeout = 30000 ; // Same default as ssl_client
34
34
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 ());
37
40
sslclient->socket = -1 ;
38
41
sslclient->handshake_timeout = 120000 ;
39
42
_use_insecure = false ;
@@ -53,8 +56,11 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
53
56
_lastReadTimeout = 0 ;
54
57
_lastWriteTimeout = 0 ;
55
58
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 ());
58
64
sslclient->socket = sock;
59
65
sslclient->handshake_timeout = 120000 ;
60
66
@@ -71,20 +77,10 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
71
77
_alpn_protos = NULL ;
72
78
}
73
79
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 () {}
85
81
86
82
void NetworkClientSecure::stop () {
87
- stop_ssl_socket (sslclient, _CA_cert, _cert, _private_key );
83
+ stop_ssl_socket (sslclient. get () );
88
84
89
85
_connected = false ;
90
86
_peek = -1 ;
@@ -130,10 +126,10 @@ int NetworkClientSecure::connect(const char *host, uint16_t port, const char *CA
130
126
}
131
127
132
128
int 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);
134
130
135
131
if (ret >= 0 && !_stillinPlainStart) {
136
- ret = ssl_starttls_handshake (sslclient);
132
+ ret = ssl_starttls_handshake (sslclient. get () );
137
133
} else {
138
134
log_i (" Actual TLS start postponed." );
139
135
}
@@ -153,7 +149,7 @@ int NetworkClientSecure::startTLS() {
153
149
int ret = 1 ;
154
150
if (_stillinPlainStart) {
155
151
log_i (" startTLS: starting TLS/SSL on this dplain connection" );
156
- ret = ssl_starttls_handshake (sslclient);
152
+ ret = ssl_starttls_handshake (sslclient. get () );
157
153
if (ret < 0 ) {
158
154
log_e (" startTLS: %d" , ret);
159
155
stop ();
@@ -178,7 +174,7 @@ int NetworkClientSecure::connect(const char *host, uint16_t port, const char *ps
178
174
return 0 ;
179
175
}
180
176
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);
182
178
_lastError = ret;
183
179
if (ret < 0 ) {
184
180
log_e (" start_ssl_client: connect failed %d" , ret);
@@ -213,7 +209,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
213
209
}
214
210
215
211
if (_stillinPlainStart) {
216
- return send_net_data (sslclient, buf, size);
212
+ return send_net_data (sslclient. get () , buf, size);
217
213
}
218
214
219
215
if (_lastWriteTimeout != _timeout) {
@@ -224,7 +220,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
224
220
_lastWriteTimeout = _timeout;
225
221
}
226
222
}
227
- int res = send_ssl_data (sslclient, buf, size);
223
+ int res = send_ssl_data (sslclient. get () , buf, size);
228
224
if (res < 0 ) {
229
225
log_e (" Closing connection on failed write" );
230
226
stop ();
@@ -235,7 +231,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
235
231
236
232
int NetworkClientSecure::read (uint8_t *buf, size_t size) {
237
233
if (_stillinPlainStart) {
238
- return get_net_receive (sslclient, buf, size);
234
+ return get_net_receive (sslclient. get () , buf, size);
239
235
}
240
236
241
237
if (_lastReadTimeout != _timeout) {
@@ -268,7 +264,7 @@ int NetworkClientSecure::read(uint8_t *buf, size_t size) {
268
264
buf++;
269
265
peeked = 1 ;
270
266
}
271
- res = get_ssl_receive (sslclient, buf, size);
267
+ res = get_ssl_receive (sslclient. get () , buf, size);
272
268
273
269
if (res < 0 ) {
274
270
log_e (" Closing connection on failed read" );
@@ -280,14 +276,14 @@ int NetworkClientSecure::read(uint8_t *buf, size_t size) {
280
276
281
277
int NetworkClientSecure::available () {
282
278
if (_stillinPlainStart) {
283
- return peek_net_receive (sslclient, 0 );
279
+ return peek_net_receive (sslclient. get () , 0 );
284
280
}
285
281
286
282
int peeked = (_peek >= 0 ), res = -1 ;
287
283
if (!_connected) {
288
284
return peeked;
289
285
}
290
- res = data_to_read (sslclient);
286
+ res = data_to_read (sslclient. get () );
291
287
292
288
if (res < 0 && !_stillinPlainStart) {
293
289
log_e (" Closing connection on failed available check" );
@@ -346,7 +342,7 @@ bool NetworkClientSecure::verify(const char *fp, const char *domain_name) {
346
342
return false ;
347
343
}
348
344
349
- return verify_ssl_fingerprint (sslclient, fp, domain_name);
345
+ return verify_ssl_fingerprint (sslclient. get () , fp, domain_name);
350
346
}
351
347
352
348
char *NetworkClientSecure::_streamLoad (Stream &stream, size_t size) {
0 commit comments