Skip to content

Commit 388d905

Browse files
committed
Fix SSL client and available()
1 parent bedc0a7 commit 388d905

File tree

5 files changed

+64
-29
lines changed

5 files changed

+64
-29
lines changed

libraries/WiFi/src/WiFi.h

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ extern "C" {
2727
#include "Arduino.h"
2828
#include "api/IPAddress.h"
2929
#include "WiFiClient.h"
30+
//#include "WiFiSSLClient.h"
3031
#include "WiFiServer.h"
3132
#include "WiFiUdp.h"
3233

libraries/WiFi/src/WiFiClient.cpp

+18-6
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ int arduino::WiFiClient::connect(const char *host, uint16_t port) {
3434
}
3535
//sock->sigio(mbed::callback(this, &WiFiClient::getStatus));
3636
//sock->set_blocking(false);
37-
sock->set_timeout(5000);
38-
int ret = sock->connect(host, port);
37+
sock->set_timeout(1000);
38+
int ret = ((TCPSocket*)sock)->connect(host, port);
3939
if (ret == 0) {
4040
return 1;
4141
} else {
@@ -44,12 +44,22 @@ int arduino::WiFiClient::connect(const char *host, uint16_t port) {
4444
}
4545

4646
int arduino::WiFiClient::connectSSL(IPAddress ip, uint16_t port) {
47-
4847
}
4948

5049
int arduino::WiFiClient::connectSSL(const char *host, uint16_t port) {
51-
sock_ssl->open(WiFi.getNetwork());
52-
sock_ssl->connect(host, port);
50+
if (sock == NULL) {
51+
sock = new TLSSocket(WiFi.getNetwork());
52+
}
53+
if (beforeConnect) {
54+
beforeConnect();
55+
}
56+
sock->set_timeout(1000);
57+
int ret = ((TLSSocket*)sock)->connect(host, port);
58+
if (ret == 0) {
59+
return 1;
60+
} else {
61+
return 0;
62+
}
5363
}
5464

5565
size_t arduino::WiFiClient::write(uint8_t c) {
@@ -61,7 +71,9 @@ size_t arduino::WiFiClient::write(const uint8_t *buf, size_t size) {
6171
}
6272

6373
int arduino::WiFiClient::available() {
64-
getStatus();
74+
if (rxBuffer.available() == 0) {
75+
getStatus();
76+
}
6577
return rxBuffer.available();
6678
}
6779

libraries/WiFi/src/WiFiClient.h

+25-18
Original file line numberDiff line numberDiff line change
@@ -35,36 +35,43 @@ class WiFiClient : public arduino::Client {
3535
WiFiClient();
3636

3737
uint8_t status();
38-
virtual int connect(IPAddress ip, uint16_t port);
39-
virtual int connect(const char *host, uint16_t port);
40-
virtual int connectSSL(IPAddress ip, uint16_t port);
41-
virtual int connectSSL(const char *host, uint16_t port);
42-
virtual size_t write(uint8_t);
43-
virtual size_t write(const uint8_t *buf, size_t size);
44-
virtual int available();
45-
virtual int read();
46-
virtual int read(uint8_t *buf, size_t size);
47-
virtual int peek();
48-
virtual void flush();
49-
virtual void stop();
50-
virtual uint8_t connected();
51-
virtual operator bool() {
38+
int connect(IPAddress ip, uint16_t port);
39+
int connect(const char *host, uint16_t port);
40+
int connectSSL(IPAddress ip, uint16_t port);
41+
int connectSSL(const char *host, uint16_t port);
42+
size_t write(uint8_t);
43+
size_t write(const uint8_t *buf, size_t size);
44+
int available();
45+
int read();
46+
int read(uint8_t *buf, size_t size);
47+
int peek();
48+
void flush();
49+
void stop();
50+
uint8_t connected();
51+
operator bool() {
5252
return sock != NULL;
5353
}
5454

55-
virtual IPAddress remoteIP();
56-
virtual uint16_t remotePort();
55+
IPAddress remoteIP();
56+
uint16_t remotePort();
5757

5858
friend class WiFiServer;
59+
friend class WiFiSSLClient;
5960

6061
using Print::write;
6162

63+
protected:
64+
65+
void onBeforeConnect(mbed::Callback<int(void)> cb) {
66+
beforeConnect = cb;
67+
}
68+
6269
private:
6370
static uint16_t _srcport;
64-
TCPSocket* sock;
65-
TLSSocket* sock_ssl;
71+
Socket* sock;
6672
RingBufferN<256> rxBuffer;
6773
uint8_t _status;
74+
mbed::Callback<int(void)> beforeConnect;
6875

6976
void getStatus();
7077
};

libraries/WiFi/src/WiFiSSLClient.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include "WiFiSSLClient.h"
2+
3+
arduino::WiFiSSLClient::WiFiSSLClient() {
4+
onBeforeConnect(mbed::callback(this, &WiFiSSLClient::setRootCA));
5+
};

libraries/WiFi/src/WiFiSSLClient.h

+15-5
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,26 @@
2222

2323
#include "WiFiClient.h"
2424

25+
extern const char CA_CERTIFICATES[];
26+
2527
namespace arduino {
2628

2729
class WiFiSSLClient : public arduino::WiFiClient {
2830

2931
public:
30-
WiFiSSLClient();
31-
WiFiSSLClient(uint8_t sock);
32-
33-
virtual int connect(IPAddress ip, uint16_t port);
34-
virtual int connect(const char* host, uint16_t port);
32+
WiFiSSLClient();
33+
34+
int connect(IPAddress ip, uint16_t port) {
35+
return connectSSL(ip, port);
36+
}
37+
int connect(const char* host, uint16_t port) {
38+
return connectSSL(host, port);
39+
}
40+
41+
private:
42+
int setRootCA() {
43+
return ((TLSSocket*)sock)->set_root_ca_cert(CA_CERTIFICATES);
44+
}
3545
};
3646

3747
}

0 commit comments

Comments
 (0)