Skip to content

Commit e64e32b

Browse files
committed
Fix regression in WiFiClientSecure, update HTTPS test case (#2150)
1 parent da17d54 commit e64e32b

File tree

3 files changed

+35
-25
lines changed

3 files changed

+35
-25
lines changed

libraries/ESP8266WiFi/src/WiFiClientSecure.cpp

+18-8
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ static int s_pk_refcnt = 0;
5757
uint8_t* default_certificate = 0;
5858
uint32_t default_certificate_len = 0;
5959
static bool default_certificate_dynamic = false;
60-
static ClientContext* s_io_ctx = nullptr;
6160

6261
static void clear_private_key();
6362
static void clear_certificate();
@@ -82,6 +81,8 @@ class SSLContext {
8281
if (_ssl_ctx_refcnt == 0) {
8382
ssl_ctx_free(_ssl_ctx);
8483
}
84+
85+
s_io_ctx = nullptr;
8586
}
8687

8788
void ref() {
@@ -95,6 +96,7 @@ class SSLContext {
9596
}
9697

9798
void connect(ClientContext* ctx, const char* hostName, uint32_t timeout_ms) {
99+
s_io_ctx = ctx;
98100
_ssl = ssl_client_new(_ssl_ctx, 0, nullptr, 0, hostName);
99101
uint32_t t = millis();
100102

@@ -107,6 +109,10 @@ class SSLContext {
107109
}
108110
}
109111

112+
void stop() {
113+
s_io_ctx = nullptr;
114+
}
115+
110116
bool connected() {
111117
return _ssl != nullptr && ssl_handshake_status(_ssl) == SSL_OK;
112118
}
@@ -173,6 +179,10 @@ class SSLContext {
173179
return _ssl;
174180
}
175181

182+
static ClientContext* getIOContext(int fd) {
183+
return s_io_ctx;
184+
}
185+
176186
protected:
177187
int _readAll() {
178188
if (!_ssl)
@@ -201,18 +211,18 @@ class SSLContext {
201211
int _refcnt = 0;
202212
const uint8_t* _read_ptr = nullptr;
203213
size_t _available = 0;
214+
static ClientContext* s_io_ctx;
204215
};
205216

206217
SSL_CTX* SSLContext::_ssl_ctx = nullptr;
207218
int SSLContext::_ssl_ctx_refcnt = 0;
208-
219+
ClientContext* SSLContext::s_io_ctx = nullptr;
209220

210221
WiFiClientSecure::WiFiClientSecure() {
211222
++s_pk_refcnt;
212223
}
213224

214225
WiFiClientSecure::~WiFiClientSecure() {
215-
s_io_ctx = nullptr;
216226
if (_ssl) {
217227
_ssl->unref();
218228
}
@@ -264,8 +274,6 @@ int WiFiClientSecure::_connectSSL(const char* hostName) {
264274
_ssl = nullptr;
265275
}
266276

267-
s_io_ctx = _client;
268-
269277
_ssl = new SSLContext;
270278
_ssl->ref();
271279
_ssl->connect(_client, hostName, 5000);
@@ -371,7 +379,9 @@ uint8_t WiFiClientSecure::connected() {
371379
}
372380

373381
void WiFiClientSecure::stop() {
374-
s_io_ctx = nullptr;
382+
if (_ssl) {
383+
_ssl->stop();
384+
}
375385
WiFiClient::stop();
376386
}
377387

@@ -525,7 +535,7 @@ static void clear_certificate() {
525535
}
526536

527537
extern "C" int ax_port_read(int fd, uint8_t* buffer, size_t count) {
528-
ClientContext* _client = s_io_ctx;
538+
ClientContext* _client = SSLContext::getIOContext(fd);
529539
if (!_client || _client->state() != ESTABLISHED && !_client->getSize()) {
530540
errno = EIO;
531541
return -1;
@@ -542,7 +552,7 @@ extern "C" int ax_port_read(int fd, uint8_t* buffer, size_t count) {
542552
}
543553

544554
extern "C" int ax_port_write(int fd, uint8_t* buffer, size_t count) {
545-
ClientContext* _client = s_io_ctx;
555+
ClientContext* _client = SSLContext::getIOContext(fd);
546556
if (!_client || _client->state() != ESTABLISHED) {
547557
errno = EIO;
548558
return -1;
+16-16
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
-----BEGIN CERTIFICATE-----
2-
MIICzzCCAbcCCQCUajf39FoF8jANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtj
3-
YS50bHMudGVzdDAeFw0xNjA0MjIxMTU1MTlaFw0xNzA0MjIxMTU1MTlaMD0xITAf
4-
BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAwwPc2VydmVy
5-
LnRscy50ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwhyGSO13
6-
/ozG0rL6FxDaaxYgMyPVK3hIhTHfKOK/eRZFRDFAhYudz9NbkvUMIF1SToED9FBh
7-
MbJrkPzCU3cLC1zgnTLseoOS3FKC8xVfJVwsWD8YjMvyQUV/Uo9TAHQSA4SfOB4W
8-
JjRBMX2GCoWLK5wVzxX+XGd5DnqME4n/CG+Il1t8mB+ACeA1FKwVPTi1wGvDzuCo
9-
swSEX3J08JB9rP5dix7t+Fezgr6PkvUcnAcu4utAw6f6c0LoHk0SnyXJg1jTdKrl
10-
J8dIyWQR0cvaxbF+04hvpDepx/62CP+aRs1zcC37eEQ3BVf4phJXbwuXbT7a1CUf
11-
XQ0cWnJg8mdfcQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBV7ZiwVM8alxPN9vd/
12-
Ze8EiidSuztkbtZX3mhHfkcJ2Q5c+tZ0Oxy4/g6oISe1+NOQJDMrsARrdWVPmmsb
13-
ihSHNdS6t0DTcWR5h+i/rnGh+cGiWOJKfhNWvpCVuU6YRZWhYOztL8p6iHoG3ZBi
14-
+zo9GD71FNSRQxMois9sR9q/IgOmkm8CjQgYsv9bQ+Le4mRqfaOCOSoQvsRyLoam
15-
lNl85gzvVygHYPP9ypiia8btyOHwDSHiV8UhKaERSGKFqznPmTTwTQNXEtQylCXG
16-
C+13mMGVr49yP4cuYaM8mfL8Rg7Im8Mfa0GXq5PBwEFFYpR9xnbBouQv5erYTQdl
17-
Oxqk
2+
MIIC3zCCAccCCQCUajf39FoF9jANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtj
3+
YS50bHMudGVzdDAeFw0xNjA2MTUwMjQ2MzFaFw0xNzA2MTUwMjQ2MzFaME0xCzAJ
4+
BgNVBAYTAkNOMREwDwYDVQQIDAhTaGFuZ2hhaTESMBAGA1UECgwJRXNwcmVzc2lm
5+
MRcwFQYDVQQDDA4xOTIuMTY4Ljc3LjIwODCCASIwDQYJKoZIhvcNAQEBBQADggEP
6+
ADCCAQoCggEBAMIchkjtd/6MxtKy+hcQ2msWIDMj1St4SIUx3yjiv3kWRUQxQIWL
7+
nc/TW5L1DCBdUk6BA/RQYTGya5D8wlN3Cwtc4J0y7HqDktxSgvMVXyVcLFg/GIzL
8+
8kFFf1KPUwB0EgOEnzgeFiY0QTF9hgqFiyucFc8V/lxneQ56jBOJ/whviJdbfJgf
9+
gAngNRSsFT04tcBrw87gqLMEhF9ydPCQfaz+XYse7fhXs4K+j5L1HJwHLuLrQMOn
10+
+nNC6B5NEp8lyYNY03Sq5SfHSMlkEdHL2sWxftOIb6Q3qcf+tgj/mkbNc3At+3hE
11+
NwVX+KYSV28Ll20+2tQlH10NHFpyYPJnX3ECAwEAATANBgkqhkiG9w0BAQsFAAOC
12+
AQEAMzNNwXnhp1OyNinGk700jRfe6zwdkpo1ZkclUD7fVEfnWxBj6j2lXReC6WT1
13+
isWXe/M9k+HS0fK7rTqDumeZYgp/Ui5LKgD2JTvLX91toG7apATWqLM1XPtLEGub
14+
webPO2CW/7aRfkPlXvP4Ss/QbqawxkmUKW3kJ4Lw1mmklu9ULGfiHPPUKvY5Qbe9
15+
9aDC/aTrjiaDmNoToZfAWuFBnxz95bKqFdbij35ZYzyVSNpezePtdOaDBR2mOMYd
16+
P54ENzFbOjVRm3K+7I9S+xa/lUPWnfjVJ026JDw/3/HVWvnwkZI8xNWVOk5CbdPH
17+
7d5Md13cmF1VQ0VNDqvqI3TZ5g==
1818
-----END CERTIFICATE-----

tests/device/test_http_client/test_http_client.ino

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ void setup()
1919
BS_RUN(Serial);
2020
}
2121

22-
const char* fp = "40 A3 6C E3 8A DF A2 D4 13 B0 32 5C 87 44 54 28 0B CE C5 A4";
22+
const char* fp = "44 40 9E 34 92 2D E4 61 A4 89 A8 D5 7F 71 B7 62 B3 FD DD E1";
2323

2424
TEST_CASE("HTTP GET & POST requests", "[HTTPClient]")
2525
{

0 commit comments

Comments
 (0)