diff --git a/src/AgApiClient.cpp b/src/AgApiClient.cpp index fe582a4..c49c0a3 100644 --- a/src/AgApiClient.cpp +++ b/src/AgApiClient.cpp @@ -2,13 +2,6 @@ #include "AgConfigure.h" #include "AirGradient.h" #include "Libraries/Arduino_JSON/src/Arduino_JSON.h" -#ifdef ESP8266 -#include -#include -#include -#else -#include -#endif AgApiClient::AgApiClient(Stream &debug, Configuration &config) : PrintLog(debug, "ApiClient"), config(config) {} @@ -58,6 +51,7 @@ bool AgApiClient::fetchServerConfiguration(void) { } #else HTTPClient client; + _setHttpClientTimeout(&client); if (client.begin(uri) == false) { getConfigFailed = true; return false; @@ -121,6 +115,7 @@ bool AgApiClient::postToServer(String data) { WiFiClient wifiClient; HTTPClient client; + _setHttpClientTimeout(&client); if (client.begin(wifiClient, uri.c_str()) == false) { logError("Init client failed"); return false; @@ -190,3 +185,12 @@ bool AgApiClient::sendPing(int rssi, int bootCount) { String AgApiClient::getApiRoot() const { return apiRoot; } void AgApiClient::setApiRoot(const String &apiRoot) { this->apiRoot = apiRoot; } + +/** + * @brief Set timeout to both connect to server and tcp connection timeout + * + */ +void AgApiClient::_setHttpClientTimeout(HTTPClient *httpClient) { + httpClient->setTimeout(timeoutMs); + httpClient->setConnectTimeout(timeoutMs); +} \ No newline at end of file diff --git a/src/AgApiClient.h b/src/AgApiClient.h index 7e6037d..8027d04 100644 --- a/src/AgApiClient.h +++ b/src/AgApiClient.h @@ -16,6 +16,14 @@ #include "Main/PrintLog.h" #include +#ifdef ESP8266 +#include +#include +#include +#else +#include +#endif + class AgApiClient : public PrintLog { private: Configuration &config; @@ -25,6 +33,9 @@ private: bool getConfigFailed; bool postToServerFailed; bool notAvailableOnDashboard = false; // Device not setup on Airgradient cloud dashboard. + uint16_t timeoutMs = 10000; // Default set to 10s + + void _setHttpClientTimeout(HTTPClient *httpClient); public: AgApiClient(Stream &stream, Configuration &config);