From 2f5b3c0c56cb1e7bf232a11882b869809e420abd Mon Sep 17 00:00:00 2001 From: MaValki <41691291+MaValki@users.noreply.github.com> Date: Wed, 25 Jul 2018 17:37:15 +0200 Subject: [PATCH] Functions _uploadReadByte and _parseForm were modified in order to (#1677) speed up uploading data. Now there is no need to call time consuming client.connected() method. --- libraries/WebServer/src/Parsing.cpp | 21 +++++++++++---------- libraries/WebServer/src/WebServer.h | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libraries/WebServer/src/Parsing.cpp b/libraries/WebServer/src/Parsing.cpp index 119c27bb..897b5b4a 100644 --- a/libraries/WebServer/src/Parsing.cpp +++ b/libraries/WebServer/src/Parsing.cpp @@ -359,14 +359,14 @@ void WebServer::_uploadWriteByte(uint8_t b){ _currentUpload->buf[_currentUpload->currentSize++] = b; } -uint8_t WebServer::_uploadReadByte(WiFiClient& client){ +int WebServer::_uploadReadByte(WiFiClient& client){ int res = client.read(); if(res == -1){ while(!client.available() && client.connected()) delay(2); res = client.read(); } - return (uint8_t)res; + return res; } bool WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t len){ @@ -477,19 +477,20 @@ bool WebServer::_parseForm(WiFiClient& client, String boundary, uint32_t len){ if(_currentHandler && _currentHandler->canUpload(_currentUri)) _currentHandler->upload(*this, _currentUri, *_currentUpload); _currentUpload->status = UPLOAD_FILE_WRITE; - uint8_t argByte = _uploadReadByte(client); + int argByte; readfile: - while(argByte != 0x0D){ - if (!client.connected()) return _parseFormUploadAborted(); - _uploadWriteByte(argByte); + + do{ argByte = _uploadReadByte(client); - } + if(argByte < 0) return _parseFormUploadAborted(); + _uploadWriteByte(argByte); + }while(argByte != 0x0D); argByte = _uploadReadByte(client); - if (!client.connected()) return _parseFormUploadAborted(); + if(argByte < 0) return _parseFormUploadAborted(); if (argByte == 0x0A){ argByte = _uploadReadByte(client); - if (!client.connected()) return _parseFormUploadAborted(); + if(argByte < 0) return _parseFormUploadAborted(); if ((char)argByte != '-'){ //continue reading the file _uploadWriteByte(0x0D); @@ -497,7 +498,7 @@ readfile: goto readfile; } else { argByte = _uploadReadByte(client); - if (!client.connected()) return _parseFormUploadAborted(); + if(argByte < 0) return _parseFormUploadAborted(); if ((char)argByte != '-'){ //continue reading the file _uploadWriteByte(0x0D); diff --git a/libraries/WebServer/src/WebServer.h b/libraries/WebServer/src/WebServer.h index adc754f8..aa7a00e2 100644 --- a/libraries/WebServer/src/WebServer.h +++ b/libraries/WebServer/src/WebServer.h @@ -147,7 +147,7 @@ protected: bool _parseForm(WiFiClient& client, String boundary, uint32_t len); bool _parseFormUploadAborted(); void _uploadWriteByte(uint8_t b); - uint8_t _uploadReadByte(WiFiClient& client); + int _uploadReadByte(WiFiClient& client); void _prepareHeader(String& response, int code, const char* content_type, size_t contentLength); bool _collectHeader(const char* headerName, const char* headerValue);