| 
					
				 | 
			
			
				@@ -21,221 +21,31 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class ElegantOtaClass{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        void setID(const char* id){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _id = id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // ESP8266 Codebase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #if defined(ESP8266) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            void begin(ESP8266WebServer *server, const char * username = "", const char * password = ""){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                _server = server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(strlen(username) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _username = username; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _password = password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_server->on("/update", HTTP_GET, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (!_server->authenticate(_username.c_str(), _password.c_str())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						  return _server->requestAuthentication(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_server->sendHeader("Content-Encoding", "gzip"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_server->send_P(200, "text/html", (const char*)ELEGANT_HTML, ELEGANT_HTML_SIZE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _server->on("/update/identity", HTTP_GET, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (!_server->authenticate(_username.c_str(), _password.c_str())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						  return _server->requestAuthentication(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #if defined(ESP8266) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            _server->send(200, "application/json", "{\"id\": "+_id+", \"hardware\": \"ESP8266\"}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #elif defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            _server->send(200, "application/json", "{\"id\": "+_id+", \"hardware\": \"ESP32\"}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _httpUpdater.setup(server, "/update", _username.c_str(), _password.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_server->on("/update", HTTP_GET, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_server->sendHeader("Content-Encoding", "gzip"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_server->send_P(200, "text/html", (const char*)ELEGANT_HTML, ELEGANT_HTML_SIZE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _server->on("/update/identity", HTTP_GET, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #if defined(ESP8266) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            _server->send(200, "application/json", "{\"id\": "+_id+", \"hardware\": \"ESP8266\"}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #elif defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            _server->send(200, "application/json", "{\"id\": "+_id+", \"hardware\": \"ESP32\"}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//TODO: handle MD5 paramter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _httpUpdater.setup(server, "/update"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // ESP32 Codebase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #elif defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            void begin(WebServer *server, const char * username = "", const char * password = ""){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                _server = server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(strlen(username) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _username = username; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _password = password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_server->on("/update", HTTP_GET, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (!_server->authenticate(_username.c_str(), _password.c_str())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						  return _server->requestAuthentication(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_server->sendHeader("Content-Encoding", "gzip"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_server->send_P(200, "text/html", (const char*)ELEGANT_HTML, ELEGANT_HTML_SIZE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _server->on("/update/identity", HTTP_GET, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (!_server->authenticate(_username.c_str(), _password.c_str())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						  return _server->requestAuthentication(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #if defined(ESP8266) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            _server->send(200, "application/json", "{\"id\": \""+_id+"\", \"hardware\": \"ESP8266\"}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #elif defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            _server->send(200, "application/json", "{\"id\": \""+_id+"\", \"hardware\": \"ESP32\"}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _server->on("/update", HTTP_POST, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        // Check Authentication before processing request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (!_server->authenticate(_username.c_str(), _password.c_str())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						  return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        _server->sendHeader("Connection", "close"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        _server->send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        ESP.restart(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        // Check Authentication before processing request 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (!_server->authenticate(_username.c_str(), _password.c_str())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						  return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						//TODO: handle MD5 paramter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        // Perform upload 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        HTTPUpload& upload = _server->upload(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (upload.status == UPLOAD_FILE_START) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Serial.setDebugOutput(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Serial.printf("Update: %s\n", upload.filename.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (upload.name == "filesystem") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if (!Update.begin(UPDATE_SIZE_UNKNOWN, U_SPIFFS)) { //start with max available size 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    Update.printError(Serial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if (!Update.begin(UPDATE_SIZE_UNKNOWN, U_FLASH)) { //start with max available size 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    Update.printError(Serial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } else if (upload.status == UPLOAD_FILE_WRITE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                Update.printError(Serial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } else if (upload.status == UPLOAD_FILE_END) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (Update.end(true)) { //true to set the size to the current progress 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                Update.printError(Serial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Serial.setDebugOutput(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Serial.printf("Update Failed Unexpectedly (likely broken connection): status=%d\n", upload.status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					_server->on("/update", HTTP_GET, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_server->sendHeader("Content-Encoding", "gzip"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						_server->send_P(200, "text/html", (const char*)ELEGANT_HTML, ELEGANT_HTML_SIZE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _server->on("/update/identity", HTTP_GET, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #if defined(ESP8266) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            _server->send(200, "application/json", "{\"id\": \""+_id+"\", \"hardware\": \"ESP8266\"}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #elif defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            _server->send(200, "application/json", "{\"id\": \""+_id+"\", \"hardware\": \"ESP32\"}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    _server->on("/update", HTTP_POST, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        _server->sendHeader("Connection", "close"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        _server->send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        ESP.restart(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }, [&](){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						//TODO: handle MD5 paramter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        // Perform upload 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        HTTPUpload& upload = _server->upload(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (upload.status == UPLOAD_FILE_START) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Serial.setDebugOutput(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (upload.name == "filesystem") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if (!Update.begin(UPDATE_SIZE_UNKNOWN, U_SPIFFS)) { //start with max available size 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    Update.printError(Serial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if (!Update.begin(UPDATE_SIZE_UNKNOWN, U_FLASH)) { //start with max available size 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    Update.printError(Serial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } else if (upload.status == UPLOAD_FILE_WRITE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                Update.printError(Serial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } else if (upload.status == UPLOAD_FILE_END) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (Update.end(true)) { //true to set the size to the current progress 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                Update.printError(Serial); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Serial.setDebugOutput(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            Serial.printf("Update Failed Unexpectedly (likely broken connection): status=%d\n", upload.status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #if defined(ESP8266) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ESP8266WebServer *_server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ESP8266HTTPUpdateServer _httpUpdater; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #if defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            WebServer *_server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String getID(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            String id = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #if defined(ESP8266) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                id = String(ESP.getChipId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #elif defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                id = String((uint32_t)ESP.getEfuseMac(), HEX); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            id.toUpperCase(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String _username; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String _password; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String _id = getID(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  public: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      void setID(const char* id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      #if defined(ESP8266)       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        void begin(ESP8266WebServer *server, const char * username = "", const char * password = ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      #elif defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        void begin(WebServer *server, const char * username = "", const char * password = ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      #if defined(ESP8266) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ESP8266WebServer *_server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ESP8266HTTPUpdateServer _httpUpdater; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      #if defined(ESP32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          WebServer *_server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const String getID(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      char _username[64]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      char _password[64]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      String _id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-ElegantOtaClass ElegantOTA; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+extern ElegantOtaClass ElegantOTA; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 |