Skip to content

Commit 3d92ede

Browse files
authored
fix: NetworkClientSecure - copyability improvements (espressif#9632)
and _timeout shadowing fixed
1 parent c7b98a5 commit 3d92ede

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed

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

+14-16
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ void NetworkClientSecure::stop() {
8383
stop_ssl_socket(sslclient.get());
8484

8585
_connected = false;
86-
_peek = -1;
86+
sslclient->peek_buf = -1;
8787
_lastReadTimeout = 0;
8888
_lastWriteTimeout = 0;
8989
}
@@ -134,7 +134,7 @@ int NetworkClientSecure::connect(IPAddress ip, uint16_t port, const char *host,
134134
log_i("Actual TLS start postponed.");
135135
}
136136

137-
_lastError = ret;
137+
sslclient->last_error = ret;
138138

139139
if (ret < 0) {
140140
log_e("start_ssl_client: connect failed: %d", ret);
@@ -175,7 +175,7 @@ int NetworkClientSecure::connect(const char *host, uint16_t port, const char *ps
175175
}
176176

177177
int ret = start_ssl_client(sslclient.get(), address, port, host, _timeout, NULL, false, NULL, NULL, pskIdent, psKey, _use_insecure, _alpn_protos);
178-
_lastError = ret;
178+
sslclient->last_error = ret;
179179
if (ret < 0) {
180180
log_e("start_ssl_client: connect failed %d", ret);
181181
stop();
@@ -186,11 +186,11 @@ int NetworkClientSecure::connect(const char *host, uint16_t port, const char *ps
186186
}
187187

188188
int NetworkClientSecure::peek() {
189-
if (_peek >= 0) {
190-
return _peek;
189+
if (sslclient->peek_buf >= 0) {
190+
return sslclient->peek_buf;
191191
}
192-
_peek = timedRead();
193-
return _peek;
192+
sslclient->peek_buf = timedRead();
193+
return sslclient->peek_buf;
194194
}
195195

196196
size_t NetworkClientSecure::write(uint8_t data) {
@@ -253,9 +253,9 @@ int NetworkClientSecure::read(uint8_t *buf, size_t size) {
253253
if (!size) {
254254
return 0;
255255
}
256-
if (_peek >= 0) {
257-
buf[0] = _peek;
258-
_peek = -1;
256+
if (sslclient->peek_buf >= 0) {
257+
buf[0] = sslclient->peek_buf;
258+
sslclient->peek_buf = -1;
259259
size--;
260260
avail--;
261261
if (!size || !avail) {
@@ -279,7 +279,7 @@ int NetworkClientSecure::available() {
279279
return peek_net_receive(sslclient.get(), 0);
280280
}
281281

282-
int peeked = (_peek >= 0), res = -1;
282+
int peeked = (sslclient->peek_buf >= 0), res = -1;
283283
if (!_connected) {
284284
return peeked;
285285
}
@@ -399,11 +399,9 @@ bool NetworkClientSecure::loadPrivateKey(Stream &stream, size_t size) {
399399
}
400400

401401
int NetworkClientSecure::lastError(char *buf, const size_t size) {
402-
if (!_lastError) {
403-
return 0;
404-
}
405-
mbedtls_strerror(_lastError, buf, size);
406-
return _lastError;
402+
int lastError = sslclient->last_error;
403+
mbedtls_strerror(lastError, buf, size);
404+
return lastError;
407405
}
408406

409407
void NetworkClientSecure::setHandshakeTimeout(unsigned long handshake_timeout) {

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

-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ class NetworkClientSecure : public NetworkClient {
3030
protected:
3131
std::shared_ptr<sslclient_context> sslclient;
3232

33-
int _lastError = 0;
34-
int _peek = -1;
35-
int _timeout;
3633
bool _use_insecure;
3734
bool _stillinPlainStart = false;
3835
const char *_CA_cert;

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

+4
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ void ssl_init(sslclient_context *ssl_client) {
4848
mbedtls_ssl_init(&ssl_client->ssl_ctx);
4949
mbedtls_ssl_config_init(&ssl_client->ssl_conf);
5050
mbedtls_ctr_drbg_init(&ssl_client->drbg_ctx);
51+
ssl_client->peek_buf = -1;
5152
}
5253

5354
int start_ssl_client(
@@ -368,12 +369,15 @@ void stop_ssl_socket(sslclient_context *ssl_client) {
368369
// save only interesting fields
369370
int handshake_timeout = ssl_client->handshake_timeout;
370371
int socket_timeout = ssl_client->socket_timeout;
372+
int last_err = ssl_client->last_error;
371373

372374
// reset embedded pointers to zero
373375
memset(ssl_client, 0, sizeof(sslclient_context));
374376

375377
ssl_client->handshake_timeout = handshake_timeout;
376378
ssl_client->socket_timeout = socket_timeout;
379+
ssl_client->last_error = last_err;
380+
ssl_client->peek_buf = -1;
377381
}
378382

379383
int data_to_read(sslclient_context *ssl_client) {

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

+4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ typedef struct sslclient_context {
2626

2727
unsigned long socket_timeout;
2828
unsigned long handshake_timeout;
29+
30+
int last_error;
31+
int peek_buf;
32+
2933
} sslclient_context;
3034

3135
void ssl_init(sslclient_context *ssl_client);

0 commit comments

Comments
 (0)