Skip to content

Commit

Permalink
Fix regression in WiFiClientSecure, update HTTPS test case (#2150)
Browse files Browse the repository at this point in the history
  • Loading branch information
igrr committed Jun 15, 2016
1 parent da17d54 commit e64e32b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 25 deletions.
26 changes: 18 additions & 8 deletions libraries/ESP8266WiFi/src/WiFiClientSecure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ static int s_pk_refcnt = 0;
uint8_t* default_certificate = 0;
uint32_t default_certificate_len = 0;
static bool default_certificate_dynamic = false;
static ClientContext* s_io_ctx = nullptr;

static void clear_private_key();
static void clear_certificate();
Expand All @@ -82,6 +81,8 @@ class SSLContext {
if (_ssl_ctx_refcnt == 0) {
ssl_ctx_free(_ssl_ctx);
}

s_io_ctx = nullptr;
}

void ref() {
Expand All @@ -95,6 +96,7 @@ class SSLContext {
}

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

Expand All @@ -107,6 +109,10 @@ class SSLContext {
}
}

void stop() {
s_io_ctx = nullptr;
}

bool connected() {
return _ssl != nullptr && ssl_handshake_status(_ssl) == SSL_OK;
}
Expand Down Expand Up @@ -173,6 +179,10 @@ class SSLContext {
return _ssl;
}

static ClientContext* getIOContext(int fd) {
return s_io_ctx;
}

protected:
int _readAll() {
if (!_ssl)
Expand Down Expand Up @@ -201,18 +211,18 @@ class SSLContext {
int _refcnt = 0;
const uint8_t* _read_ptr = nullptr;
size_t _available = 0;
static ClientContext* s_io_ctx;
};

SSL_CTX* SSLContext::_ssl_ctx = nullptr;
int SSLContext::_ssl_ctx_refcnt = 0;

ClientContext* SSLContext::s_io_ctx = nullptr;

WiFiClientSecure::WiFiClientSecure() {
++s_pk_refcnt;
}

WiFiClientSecure::~WiFiClientSecure() {
s_io_ctx = nullptr;
if (_ssl) {
_ssl->unref();
}
Expand Down Expand Up @@ -264,8 +274,6 @@ int WiFiClientSecure::_connectSSL(const char* hostName) {
_ssl = nullptr;
}

s_io_ctx = _client;

_ssl = new SSLContext;
_ssl->ref();
_ssl->connect(_client, hostName, 5000);
Expand Down Expand Up @@ -371,7 +379,9 @@ uint8_t WiFiClientSecure::connected() {
}

void WiFiClientSecure::stop() {
s_io_ctx = nullptr;
if (_ssl) {
_ssl->stop();
}
WiFiClient::stop();
}

Expand Down Expand Up @@ -525,7 +535,7 @@ static void clear_certificate() {
}

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

extern "C" int ax_port_write(int fd, uint8_t* buffer, size_t count) {
ClientContext* _client = s_io_ctx;
ClientContext* _client = SSLContext::getIOContext(fd);
if (!_client || _client->state() != ESTABLISHED) {
errno = EIO;
return -1;
Expand Down
32 changes: 16 additions & 16 deletions tests/device/test_http_client/server.crt
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
-----BEGIN CERTIFICATE-----
MIICzzCCAbcCCQCUajf39FoF8jANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtj
YS50bHMudGVzdDAeFw0xNjA0MjIxMTU1MTlaFw0xNzA0MjIxMTU1MTlaMD0xITAf
BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEYMBYGA1UEAwwPc2VydmVy
LnRscy50ZXN0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwhyGSO13
/ozG0rL6FxDaaxYgMyPVK3hIhTHfKOK/eRZFRDFAhYudz9NbkvUMIF1SToED9FBh
MbJrkPzCU3cLC1zgnTLseoOS3FKC8xVfJVwsWD8YjMvyQUV/Uo9TAHQSA4SfOB4W
JjRBMX2GCoWLK5wVzxX+XGd5DnqME4n/CG+Il1t8mB+ACeA1FKwVPTi1wGvDzuCo
swSEX3J08JB9rP5dix7t+Fezgr6PkvUcnAcu4utAw6f6c0LoHk0SnyXJg1jTdKrl
J8dIyWQR0cvaxbF+04hvpDepx/62CP+aRs1zcC37eEQ3BVf4phJXbwuXbT7a1CUf
XQ0cWnJg8mdfcQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQBV7ZiwVM8alxPN9vd/
Ze8EiidSuztkbtZX3mhHfkcJ2Q5c+tZ0Oxy4/g6oISe1+NOQJDMrsARrdWVPmmsb
ihSHNdS6t0DTcWR5h+i/rnGh+cGiWOJKfhNWvpCVuU6YRZWhYOztL8p6iHoG3ZBi
+zo9GD71FNSRQxMois9sR9q/IgOmkm8CjQgYsv9bQ+Le4mRqfaOCOSoQvsRyLoam
lNl85gzvVygHYPP9ypiia8btyOHwDSHiV8UhKaERSGKFqznPmTTwTQNXEtQylCXG
C+13mMGVr49yP4cuYaM8mfL8Rg7Im8Mfa0GXq5PBwEFFYpR9xnbBouQv5erYTQdl
Oxqk
MIIC3zCCAccCCQCUajf39FoF9jANBgkqhkiG9w0BAQsFADAWMRQwEgYDVQQDDAtj
YS50bHMudGVzdDAeFw0xNjA2MTUwMjQ2MzFaFw0xNzA2MTUwMjQ2MzFaME0xCzAJ
BgNVBAYTAkNOMREwDwYDVQQIDAhTaGFuZ2hhaTESMBAGA1UECgwJRXNwcmVzc2lm
MRcwFQYDVQQDDA4xOTIuMTY4Ljc3LjIwODCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMIchkjtd/6MxtKy+hcQ2msWIDMj1St4SIUx3yjiv3kWRUQxQIWL
nc/TW5L1DCBdUk6BA/RQYTGya5D8wlN3Cwtc4J0y7HqDktxSgvMVXyVcLFg/GIzL
8kFFf1KPUwB0EgOEnzgeFiY0QTF9hgqFiyucFc8V/lxneQ56jBOJ/whviJdbfJgf
gAngNRSsFT04tcBrw87gqLMEhF9ydPCQfaz+XYse7fhXs4K+j5L1HJwHLuLrQMOn
+nNC6B5NEp8lyYNY03Sq5SfHSMlkEdHL2sWxftOIb6Q3qcf+tgj/mkbNc3At+3hE
NwVX+KYSV28Ll20+2tQlH10NHFpyYPJnX3ECAwEAATANBgkqhkiG9w0BAQsFAAOC
AQEAMzNNwXnhp1OyNinGk700jRfe6zwdkpo1ZkclUD7fVEfnWxBj6j2lXReC6WT1
isWXe/M9k+HS0fK7rTqDumeZYgp/Ui5LKgD2JTvLX91toG7apATWqLM1XPtLEGub
webPO2CW/7aRfkPlXvP4Ss/QbqawxkmUKW3kJ4Lw1mmklu9ULGfiHPPUKvY5Qbe9
9aDC/aTrjiaDmNoToZfAWuFBnxz95bKqFdbij35ZYzyVSNpezePtdOaDBR2mOMYd
P54ENzFbOjVRm3K+7I9S+xa/lUPWnfjVJ026JDw/3/HVWvnwkZI8xNWVOk5CbdPH
7d5Md13cmF1VQ0VNDqvqI3TZ5g==
-----END CERTIFICATE-----
2 changes: 1 addition & 1 deletion tests/device/test_http_client/test_http_client.ino
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ void setup()
BS_RUN(Serial);
}

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

TEST_CASE("HTTP GET & POST requests", "[HTTPClient]")
{
Expand Down

0 comments on commit e64e32b

Please sign in to comment.