Skip to content

Commit

Permalink
Add retry function and call it by default + add setRetry(bool) to let…
Browse files Browse the repository at this point in the history
… user disable retry
  • Loading branch information
giulcioffi authored and aentinger committed Jan 28, 2021
1 parent f4c37bb commit c0f37d0
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 17 deletions.
54 changes: 37 additions & 17 deletions src/WiFiClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ extern "C" {

uint16_t WiFiClient::_srcport = 1024;

WiFiClient::WiFiClient() : _sock(NO_SOCKET_AVAIL) {
WiFiClient::WiFiClient() : _sock(NO_SOCKET_AVAIL), _retrySend(true) {
}

WiFiClient::WiFiClient(uint8_t sock) : _sock(sock) {
WiFiClient::WiFiClient(uint8_t sock) : _sock(sock), _retrySend(true) {
}

int WiFiClient::connect(const char* host, uint16_t port) {
Expand Down Expand Up @@ -210,31 +210,47 @@ size_t WiFiClient::write(const uint8_t *buf, size_t size) {
return 0;
}

bool success = false;
size_t written = 0;
for (int i=0; i<5; i++) {
written = ServerDrv::sendData(_sock, buf, size);
if (written) {
success = true;
break;
}
size_t written = ServerDrv::sendData(_sock, buf, size);
if (!written && _retrySend) {
written = retry(buf, size, true);
}
if (success) {
if (!ServerDrv::checkDataSent(_sock))
{
setWriteError();
return 0;
}
} else {
if(!written){
// close socket
ServerDrv::stopClient(_sock);
setWriteError();
return 0;
}

if (!ServerDrv::checkDataSent(_sock))
{
setWriteError();
return 0;
}

return written;
}

size_t WiFiClient::retry(const uint8_t *buf, size_t size, bool write) {
size_t rec_bytes = 0;

if (write) {

//RETRY WRITE
for (int i=0; i<5; i++) {
rec_bytes = ServerDrv::sendData(_sock, buf, size);
if (rec_bytes) {
break;
}
}
return rec_bytes;

} else {
//RETRY READ
// To be implemented, if needed
}

}

int WiFiClient::available() {
if (_sock != 255)
{
Expand Down Expand Up @@ -266,6 +282,10 @@ int WiFiClient::peek() {
return WiFiSocketBuffer.peek(_sock);
}

void WiFiClient::setRetry(bool retry) {
_retrySend = retry;
}

void WiFiClient::flush() {
// TODO: a real check to ensure transmission has been completed
}
Expand Down
3 changes: 3 additions & 0 deletions src/WiFiClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,12 @@ class WiFiClient : public Client {
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 size_t retry(const uint8_t *buf, size_t size, bool write);
virtual int available();
virtual int read();
virtual int read(uint8_t *buf, size_t size);
virtual int peek();
virtual void setRetry(bool retry);
virtual void flush();
virtual void stop();
virtual uint8_t connected();
Expand All @@ -61,6 +63,7 @@ class WiFiClient : public Client {
static uint16_t _srcport;
uint8_t _sock; //not used
uint16_t _socket;
bool _retrySend;
};

#endif

0 comments on commit c0f37d0

Please sign in to comment.