Skip to content

Commit ea27a98

Browse files
JAndrassyP-R-O-C-H-Ypre-commit-ci-lite[bot]
authored
NetworkClientSecure made copyable (#9612)
* NetworkClientSecure made copyable * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: Jan Procházka <[email protected]> Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent a04fcee commit ea27a98

File tree

4 files changed

+29
-32
lines changed

4 files changed

+29
-32
lines changed

Diff for: libraries/NetworkClientSecure/src/NetworkClientSecure.cpp

+23-27
Original file line numberDiff line numberDiff line change
@@ -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

8682
void 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

132128
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);
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

236232
int 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

281277
int 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

352348
char *NetworkClientSecure::_streamLoad(Stream &stream, size_t size) {

Diff for: libraries/NetworkClientSecure/src/NetworkClientSecure.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@
2424
#include "IPAddress.h"
2525
#include "Network.h"
2626
#include "ssl_client.h"
27+
#include <memory>
2728

2829
class NetworkClientSecure : public NetworkClient {
2930
protected:
30-
sslclient_context *sslclient;
31+
std::shared_ptr<sslclient_context> sslclient;
3132

3233
int _lastError = 0;
3334
int _peek = -1;
@@ -97,14 +98,14 @@ class NetworkClientSecure : public NetworkClient {
9798
return mbedtls_ssl_get_peer_cert(&sslclient->ssl_ctx);
9899
};
99100
bool getFingerprintSHA256(uint8_t sha256_result[32]) {
100-
return get_peer_fingerprint(sslclient, sha256_result);
101+
return get_peer_fingerprint(sslclient.get(), sha256_result);
101102
};
102103
int fd() const;
103104

104105
operator bool() {
105106
return connected();
106107
}
107-
NetworkClientSecure &operator=(const NetworkClientSecure &other);
108+
108109
bool operator==(const bool value) {
109110
return bool() == value;
110111
}

Diff for: libraries/NetworkClientSecure/src/ssl_client.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ int ssl_starttls_handshake(sslclient_context *ssl_client) {
344344
return ssl_client->socket;
345345
}
346346

347-
void stop_ssl_socket(sslclient_context *ssl_client, const char *rootCABuff, const char *cli_cert, const char *cli_key) {
347+
void stop_ssl_socket(sslclient_context *ssl_client) {
348348
log_v("Cleaning SSL connection.");
349349

350350
if (ssl_client->socket >= 0) {

Diff for: libraries/NetworkClientSecure/src/ssl_client.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ int start_ssl_client(
3434
const char *cli_cert, const char *cli_key, const char *pskIdent, const char *psKey, bool insecure, const char **alpn_protos
3535
);
3636
int ssl_starttls_handshake(sslclient_context *ssl_client);
37-
void stop_ssl_socket(sslclient_context *ssl_client, const char *rootCABuff, const char *cli_cert, const char *cli_key);
37+
void stop_ssl_socket(sslclient_context *ssl_client);
3838
int data_to_read(sslclient_context *ssl_client);
3939
int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, size_t len);
4040
int get_ssl_receive(sslclient_context *ssl_client, uint8_t *data, int length);

0 commit comments

Comments
 (0)