fix: start ota is now consistent across command sources
This commit is contained in:
+1
-1
@@ -123,7 +123,7 @@ Notes:
|
||||
- the panel still uses the repeater admin password for access
|
||||
- commands run with the same care as if you typed them into the repeater CLI directly
|
||||
- this is intended for local admin use on a trusted network
|
||||
- `start ota` releases the local HTTP redirect listener on port `80` so the OTA HTTP listener can take over without stopping the rest of the repeater services
|
||||
- `start ota` releases the local HTTP redirect listener on port `80` so the OTA HTTP listener can take over without stopping the rest of the repeater services, regardless of whether the command is run from the web panel, serial CLI, or a remote companion/app CLI session
|
||||
|
||||
## Companion WiFi Rescue Commands
|
||||
|
||||
|
||||
@@ -2056,6 +2056,9 @@ void MyMesh::clearStats() {
|
||||
}
|
||||
|
||||
void MyMesh::prepareForOTAStart() {
|
||||
#if defined(ESP_PLATFORM) && WITH_WEB_PANEL
|
||||
web.prepareForOTAStart();
|
||||
#endif
|
||||
}
|
||||
|
||||
void MyMesh::handleCommand(uint32_t sender_timestamp, char *command, char *reply) {
|
||||
|
||||
@@ -2816,11 +2816,6 @@ esp_err_t WebPanelServer::handleCommand(httpd_req_t* req) {
|
||||
|
||||
ctx->self->noteActivity();
|
||||
memset(reply, 0, kWebReplyBufferSize);
|
||||
if (strcmp(command, "start ota") == 0) {
|
||||
// OTA serves its own HTTP listener on port 80, so release the
|
||||
// web-panel redirect listener first or it will keep owning that port.
|
||||
ctx->self->stopRedirectServer();
|
||||
}
|
||||
ctx->self->_runner->runWebCommand(command, reply, kWebReplyBufferSize);
|
||||
httpd_resp_set_type(req, "text/plain; charset=utf-8");
|
||||
httpd_resp_set_hdr(req, "Cache-Control", "no-store");
|
||||
@@ -2937,6 +2932,9 @@ bool WebPanelServer::start() {
|
||||
void WebPanelServer::stop() {
|
||||
}
|
||||
|
||||
void WebPanelServer::stopRedirectServer() {
|
||||
}
|
||||
|
||||
bool WebPanelServer::isRunning() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ public:
|
||||
void setCommandRunner(WebPanelCommandRunner* runner);
|
||||
bool start();
|
||||
void stop();
|
||||
void stopRedirectServer();
|
||||
bool isRunning() const;
|
||||
bool hasSessionToken() const;
|
||||
bool shouldAutoLock(unsigned long now_ms) const;
|
||||
@@ -71,7 +72,6 @@ private:
|
||||
void refreshToken();
|
||||
bool isAuthorized(httpd_req_t* req) const;
|
||||
void noteActivity();
|
||||
void stopRedirectServer();
|
||||
#else
|
||||
WebPanelCommandRunner* _runner;
|
||||
#endif
|
||||
|
||||
@@ -26,6 +26,13 @@ void WebService::suspendForOTA() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void WebService::prepareForOTAStart() {
|
||||
#if defined(ESP_PLATFORM) && WITH_WEB_PANEL
|
||||
_suspended_for_ota = true;
|
||||
_panel.stopRedirectServer();
|
||||
#endif
|
||||
}
|
||||
|
||||
void WebService::loop() {
|
||||
#if defined(ESP_PLATFORM) && WITH_WEB_PANEL
|
||||
ensureWebServer();
|
||||
@@ -91,10 +98,16 @@ void WebService::formatWebStatusReply(char* reply, size_t reply_size) const {
|
||||
|
||||
#if defined(ESP_PLATFORM) && WITH_WEB_PANEL
|
||||
void WebService::ensureWebServer() {
|
||||
if (_suspended_for_ota || _runner == nullptr || _prefs.web_enabled == 0 || _network == nullptr || !_network->isWifiConnected()) {
|
||||
if (_runner == nullptr || _prefs.web_enabled == 0 || _network == nullptr || !_network->isWifiConnected()) {
|
||||
_panel.stop();
|
||||
return;
|
||||
}
|
||||
if (_suspended_for_ota) {
|
||||
if (_panel.isRunning()) {
|
||||
_panel.stopRedirectServer();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (_panel.isRunning()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ public:
|
||||
void end();
|
||||
void loop();
|
||||
void suspendForOTA();
|
||||
void prepareForOTAStart();
|
||||
|
||||
void setCommandRunner(WebPanelCommandRunner* runner);
|
||||
void setNetworkStateProvider(NetworkStateProvider* network) { _network = network; }
|
||||
|
||||
Referens i nytt ärende
Block a user