Skip to content

Commit

Permalink
Introduce WiFiBearSSLClient (offloaded to Nina)
Browse files Browse the repository at this point in the history
  • Loading branch information
facchinm committed Oct 20, 2020
1 parent 6054f43 commit c4ac183
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 1 deletion.
58 changes: 58 additions & 0 deletions src/WiFiClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,64 @@ int WiFiClient::connectSSL(const char *host, uint16_t port)
return 1;
}

int WiFiClient::connectBearSSL(IPAddress ip, uint16_t port)
{
if (_sock != NO_SOCKET_AVAIL)
{
stop();
}

_sock = ServerDrv::getSocket();
if (_sock != NO_SOCKET_AVAIL)
{
ServerDrv::startClient(uint32_t(ip), port, _sock, TLS_BEARSSL_MODE);

unsigned long start = millis();

// wait 4 second for the connection to close
while (!connected() && millis() - start < 10000)
delay(1);

if (!connected())
{
return 0;
}
} else {
Serial.println("No Socket available");
return 0;
}
return 1;
}

int WiFiClient::connectBearSSL(const char *host, uint16_t port)
{
if (_sock != NO_SOCKET_AVAIL)
{
stop();
}

_sock = ServerDrv::getSocket();
if (_sock != NO_SOCKET_AVAIL)
{
ServerDrv::startClient(host, strlen(host), uint32_t(0), port, _sock, TLS_BEARSSL_MODE);

unsigned long start = millis();

// wait 4 second for the connection to close
while (!connected() && millis() - start < 10000)
delay(1);

if (!connected())
{
return 0;
}
} else {
Serial.println("No Socket available");
return 0;
}
return 1;
}

size_t WiFiClient::write(uint8_t b) {
return write(&b, 1);
}
Expand Down
2 changes: 2 additions & 0 deletions src/WiFiClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ class WiFiClient : public Client {
virtual int connect(const char *host, uint16_t port);
virtual int connectSSL(IPAddress ip, uint16_t port);
virtual int connectSSL(const char *host, uint16_t port);
virtual int connectBearSSL(IPAddress ip, uint16_t port);
virtual int connectBearSSL(const char *host, uint16_t port);
virtual size_t write(uint8_t);
virtual size_t write(const uint8_t *buf, size_t size);
virtual int available();
Expand Down
20 changes: 20 additions & 0 deletions src/WiFiSSLClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,23 @@ int WiFiSSLClient::connect(const char* host, uint16_t port)
{
return WiFiClient::connectSSL(host, port);
}

WiFiBearSSLClient::WiFiBearSSLClient() :
WiFiClient()
{
}

WiFiBearSSLClient::WiFiBearSSLClient(uint8_t sock) :
WiFiClient()
{
}

int WiFiBearSSLClient::connect(IPAddress ip, uint16_t port)
{
return WiFiClient::connectBearSSL(ip, port);
}

int WiFiBearSSLClient::connect(const char* host, uint16_t port)
{
return WiFiClient::connectBearSSL(host, port);
}
10 changes: 10 additions & 0 deletions src/WiFiSSLClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,14 @@ class WiFiSSLClient : public WiFiClient {
virtual int connect(const char* host, uint16_t port);
};

class WiFiBearSSLClient : public WiFiClient {

public:
WiFiBearSSLClient();
WiFiBearSSLClient(uint8_t sock);

virtual int connect(IPAddress ip, uint16_t port);
virtual int connect(const char* host, uint16_t port);
};

#endif /* WIFISSLCLIENT_H */
2 changes: 1 addition & 1 deletion src/utility/server_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <inttypes.h>
#include "utility/wifi_spi.h"

typedef enum eProtMode {TCP_MODE, UDP_MODE, TLS_MODE, UDP_MULTICAST_MODE}tProtMode;
typedef enum eProtMode {TCP_MODE, UDP_MODE, TLS_MODE, UDP_MULTICAST_MODE, TLS_BEARSSL_MODE}tProtMode;

class ServerDrv
{
Expand Down

0 comments on commit c4ac183

Please sign in to comment.