Skip to content

Commit c0f37d0

Browse files
giulcioffiaentinger
authored andcommitted
Add retry function and call it by default + add setRetry(bool) to let user disable retry
1 parent f4c37bb commit c0f37d0

File tree

2 files changed

+40
-17
lines changed

2 files changed

+40
-17
lines changed

src/WiFiClient.cpp

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ extern "C" {
3535

3636
uint16_t WiFiClient::_srcport = 1024;
3737

38-
WiFiClient::WiFiClient() : _sock(NO_SOCKET_AVAIL) {
38+
WiFiClient::WiFiClient() : _sock(NO_SOCKET_AVAIL), _retrySend(true) {
3939
}
4040

41-
WiFiClient::WiFiClient(uint8_t sock) : _sock(sock) {
41+
WiFiClient::WiFiClient(uint8_t sock) : _sock(sock), _retrySend(true) {
4242
}
4343

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

213-
bool success = false;
214-
size_t written = 0;
215-
for (int i=0; i<5; i++) {
216-
written = ServerDrv::sendData(_sock, buf, size);
217-
if (written) {
218-
success = true;
219-
break;
220-
}
213+
size_t written = ServerDrv::sendData(_sock, buf, size);
214+
if (!written && _retrySend) {
215+
written = retry(buf, size, true);
221216
}
222-
if (success) {
223-
if (!ServerDrv::checkDataSent(_sock))
224-
{
225-
setWriteError();
226-
return 0;
227-
}
228-
} else {
217+
if(!written){
229218
// close socket
230219
ServerDrv::stopClient(_sock);
231220
setWriteError();
232221
return 0;
233222
}
234223

224+
if (!ServerDrv::checkDataSent(_sock))
225+
{
226+
setWriteError();
227+
return 0;
228+
}
229+
235230
return written;
236231
}
237232

233+
size_t WiFiClient::retry(const uint8_t *buf, size_t size, bool write) {
234+
size_t rec_bytes = 0;
235+
236+
if (write) {
237+
238+
//RETRY WRITE
239+
for (int i=0; i<5; i++) {
240+
rec_bytes = ServerDrv::sendData(_sock, buf, size);
241+
if (rec_bytes) {
242+
break;
243+
}
244+
}
245+
return rec_bytes;
246+
247+
} else {
248+
//RETRY READ
249+
// To be implemented, if needed
250+
}
251+
252+
}
253+
238254
int WiFiClient::available() {
239255
if (_sock != 255)
240256
{
@@ -266,6 +282,10 @@ int WiFiClient::peek() {
266282
return WiFiSocketBuffer.peek(_sock);
267283
}
268284

285+
void WiFiClient::setRetry(bool retry) {
286+
_retrySend = retry;
287+
}
288+
269289
void WiFiClient::flush() {
270290
// TODO: a real check to ensure transmission has been completed
271291
}

src/WiFiClient.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ class WiFiClient : public Client {
4040
virtual int connectBearSSL(const char *host, uint16_t port);
4141
virtual size_t write(uint8_t);
4242
virtual size_t write(const uint8_t *buf, size_t size);
43+
virtual size_t retry(const uint8_t *buf, size_t size, bool write);
4344
virtual int available();
4445
virtual int read();
4546
virtual int read(uint8_t *buf, size_t size);
4647
virtual int peek();
48+
virtual void setRetry(bool retry);
4749
virtual void flush();
4850
virtual void stop();
4951
virtual uint8_t connected();
@@ -61,6 +63,7 @@ class WiFiClient : public Client {
6163
static uint16_t _srcport;
6264
uint8_t _sock; //not used
6365
uint16_t _socket;
66+
bool _retrySend;
6467
};
6568

6669
#endif

0 commit comments

Comments
 (0)