@@ -57,7 +57,6 @@ static int s_pk_refcnt = 0;
57
57
uint8_t * default_certificate = 0 ;
58
58
uint32_t default_certificate_len = 0 ;
59
59
static bool default_certificate_dynamic = false ;
60
- static ClientContext* s_io_ctx = nullptr ;
61
60
62
61
static void clear_private_key ();
63
62
static void clear_certificate ();
@@ -82,6 +81,8 @@ class SSLContext {
82
81
if (_ssl_ctx_refcnt == 0 ) {
83
82
ssl_ctx_free (_ssl_ctx);
84
83
}
84
+
85
+ s_io_ctx = nullptr ;
85
86
}
86
87
87
88
void ref () {
@@ -95,6 +96,7 @@ class SSLContext {
95
96
}
96
97
97
98
void connect (ClientContext* ctx, const char * hostName, uint32_t timeout_ms) {
99
+ s_io_ctx = ctx;
98
100
_ssl = ssl_client_new (_ssl_ctx, 0 , nullptr , 0 , hostName);
99
101
uint32_t t = millis ();
100
102
@@ -107,6 +109,10 @@ class SSLContext {
107
109
}
108
110
}
109
111
112
+ void stop () {
113
+ s_io_ctx = nullptr ;
114
+ }
115
+
110
116
bool connected () {
111
117
return _ssl != nullptr && ssl_handshake_status (_ssl) == SSL_OK;
112
118
}
@@ -173,6 +179,10 @@ class SSLContext {
173
179
return _ssl;
174
180
}
175
181
182
+ static ClientContext* getIOContext (int fd) {
183
+ return s_io_ctx;
184
+ }
185
+
176
186
protected:
177
187
int _readAll () {
178
188
if (!_ssl)
@@ -201,18 +211,18 @@ class SSLContext {
201
211
int _refcnt = 0 ;
202
212
const uint8_t * _read_ptr = nullptr ;
203
213
size_t _available = 0 ;
214
+ static ClientContext* s_io_ctx;
204
215
};
205
216
206
217
SSL_CTX* SSLContext::_ssl_ctx = nullptr ;
207
218
int SSLContext::_ssl_ctx_refcnt = 0 ;
208
-
219
+ ClientContext* SSLContext::s_io_ctx = nullptr ;
209
220
210
221
WiFiClientSecure::WiFiClientSecure () {
211
222
++s_pk_refcnt;
212
223
}
213
224
214
225
WiFiClientSecure::~WiFiClientSecure () {
215
- s_io_ctx = nullptr ;
216
226
if (_ssl) {
217
227
_ssl->unref ();
218
228
}
@@ -264,8 +274,6 @@ int WiFiClientSecure::_connectSSL(const char* hostName) {
264
274
_ssl = nullptr ;
265
275
}
266
276
267
- s_io_ctx = _client;
268
-
269
277
_ssl = new SSLContext;
270
278
_ssl->ref ();
271
279
_ssl->connect (_client, hostName, 5000 );
@@ -371,7 +379,9 @@ uint8_t WiFiClientSecure::connected() {
371
379
}
372
380
373
381
void WiFiClientSecure::stop () {
374
- s_io_ctx = nullptr ;
382
+ if (_ssl) {
383
+ _ssl->stop ();
384
+ }
375
385
WiFiClient::stop ();
376
386
}
377
387
@@ -525,7 +535,7 @@ static void clear_certificate() {
525
535
}
526
536
527
537
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) ;
529
539
if (!_client || _client->state () != ESTABLISHED && !_client->getSize ()) {
530
540
errno = EIO;
531
541
return -1 ;
@@ -542,7 +552,7 @@ extern "C" int ax_port_read(int fd, uint8_t* buffer, size_t count) {
542
552
}
543
553
544
554
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) ;
546
556
if (!_client || _client->state () != ESTABLISHED) {
547
557
errno = EIO;
548
558
return -1 ;
0 commit comments