@@ -32,8 +32,12 @@ 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
+ });
40
+ ssl_init (sslclient.get ());
37
41
sslclient->socket = -1 ;
38
42
sslclient->handshake_timeout = 120000 ;
39
43
_use_insecure = false ;
@@ -53,8 +57,12 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
53
57
_lastReadTimeout = 0 ;
54
58
_lastWriteTimeout = 0 ;
55
59
56
- sslclient = new sslclient_context;
57
- ssl_init (sslclient);
60
+ sslclient.reset (new sslclient_context, [](struct sslclient_context *sslclient) {
61
+ stop_ssl_socket (sslclient);
62
+ delete sslclient;
63
+
64
+ });
65
+ ssl_init (sslclient.get ());
58
66
sslclient->socket = sock;
59
67
sslclient->handshake_timeout = 120000 ;
60
68
@@ -72,19 +80,10 @@ NetworkClientSecure::NetworkClientSecure(int sock) {
72
80
}
73
81
74
82
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
83
}
85
84
86
85
void NetworkClientSecure::stop () {
87
- stop_ssl_socket (sslclient, _CA_cert, _cert, _private_key );
86
+ stop_ssl_socket (sslclient. get () );
88
87
89
88
_connected = false ;
90
89
_peek = -1 ;
@@ -130,10 +129,10 @@ int NetworkClientSecure::connect(const char *host, uint16_t port, const char *CA
130
129
}
131
130
132
131
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);
132
+ 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
133
135
134
if (ret >= 0 && !_stillinPlainStart) {
136
- ret = ssl_starttls_handshake (sslclient);
135
+ ret = ssl_starttls_handshake (sslclient. get () );
137
136
} else {
138
137
log_i (" Actual TLS start postponed." );
139
138
}
@@ -153,7 +152,7 @@ int NetworkClientSecure::startTLS() {
153
152
int ret = 1 ;
154
153
if (_stillinPlainStart) {
155
154
log_i (" startTLS: starting TLS/SSL on this dplain connection" );
156
- ret = ssl_starttls_handshake (sslclient);
155
+ ret = ssl_starttls_handshake (sslclient. get () );
157
156
if (ret < 0 ) {
158
157
log_e (" startTLS: %d" , ret);
159
158
stop ();
@@ -178,7 +177,7 @@ int NetworkClientSecure::connect(const char *host, uint16_t port, const char *ps
178
177
return 0 ;
179
178
}
180
179
181
- int ret = start_ssl_client (sslclient, address, port, host, _timeout, NULL , false , NULL , NULL , pskIdent, psKey, _use_insecure, _alpn_protos);
180
+ int ret = start_ssl_client (sslclient. get () , address, port, host, _timeout, NULL , false , NULL , NULL , pskIdent, psKey, _use_insecure, _alpn_protos);
182
181
_lastError = ret;
183
182
if (ret < 0 ) {
184
183
log_e (" start_ssl_client: connect failed %d" , ret);
@@ -213,7 +212,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
213
212
}
214
213
215
214
if (_stillinPlainStart) {
216
- return send_net_data (sslclient, buf, size);
215
+ return send_net_data (sslclient. get () , buf, size);
217
216
}
218
217
219
218
if (_lastWriteTimeout != _timeout) {
@@ -224,7 +223,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
224
223
_lastWriteTimeout = _timeout;
225
224
}
226
225
}
227
- int res = send_ssl_data (sslclient, buf, size);
226
+ int res = send_ssl_data (sslclient. get () , buf, size);
228
227
if (res < 0 ) {
229
228
log_e (" Closing connection on failed write" );
230
229
stop ();
@@ -235,7 +234,7 @@ size_t NetworkClientSecure::write(const uint8_t *buf, size_t size) {
235
234
236
235
int NetworkClientSecure::read (uint8_t *buf, size_t size) {
237
236
if (_stillinPlainStart) {
238
- return get_net_receive (sslclient, buf, size);
237
+ return get_net_receive (sslclient. get () , buf, size);
239
238
}
240
239
241
240
if (_lastReadTimeout != _timeout) {
@@ -268,7 +267,7 @@ int NetworkClientSecure::read(uint8_t *buf, size_t size) {
268
267
buf++;
269
268
peeked = 1 ;
270
269
}
271
- res = get_ssl_receive (sslclient, buf, size);
270
+ res = get_ssl_receive (sslclient. get () , buf, size);
272
271
273
272
if (res < 0 ) {
274
273
log_e (" Closing connection on failed read" );
@@ -280,14 +279,14 @@ int NetworkClientSecure::read(uint8_t *buf, size_t size) {
280
279
281
280
int NetworkClientSecure::available () {
282
281
if (_stillinPlainStart) {
283
- return peek_net_receive (sslclient, 0 );
282
+ return peek_net_receive (sslclient. get () , 0 );
284
283
}
285
284
286
285
int peeked = (_peek >= 0 ), res = -1 ;
287
286
if (!_connected) {
288
287
return peeked;
289
288
}
290
- res = data_to_read (sslclient);
289
+ res = data_to_read (sslclient. get () );
291
290
292
291
if (res < 0 && !_stillinPlainStart) {
293
292
log_e (" Closing connection on failed available check" );
@@ -346,7 +345,7 @@ bool NetworkClientSecure::verify(const char *fp, const char *domain_name) {
346
345
return false ;
347
346
}
348
347
349
- return verify_ssl_fingerprint (sslclient, fp, domain_name);
348
+ return verify_ssl_fingerprint (sslclient. get () , fp, domain_name);
350
349
}
351
350
352
351
char *NetworkClientSecure::_streamLoad (Stream &stream, size_t size) {
0 commit comments