mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-09-26 21:07:56 +00:00
fix(webconfig): read the LAN address after pinning the route
startLanMode() took the caller's IP, read before the route lock. A Wi-Fi/Ethernet switch in between left WebConfig locked to the new link while advertising the old link's address. It now reads the selected link's address after lockSwitching(), as startOTAUpdate() already does.
This commit is contained in:
@@ -1512,8 +1512,7 @@ bool MyMesh::startWebConfig(bool force_ap, char* reply) {
|
||||
}
|
||||
_webconfig->startSetupMode(reply);
|
||||
} else if (activeNetworkLink().isConnected()) {
|
||||
_webconfig->startLanMode(activeNetworkLink().localIP(),
|
||||
!mqttNetworkSetupComplete(_cli.getObserverPrefs()), reply);
|
||||
_webconfig->startLanMode(!mqttNetworkSetupComplete(_cli.getObserverPrefs()), reply);
|
||||
} else if (!mqttNetworkSetupComplete(_cli.getObserverPrefs())) {
|
||||
_webconfig->startSetupMode(reply);
|
||||
} else {
|
||||
|
||||
@@ -1314,8 +1314,7 @@ bool MyMesh::startWebConfig(bool force_ap, char* reply) {
|
||||
}
|
||||
_webconfig->startSetupMode(reply);
|
||||
} else if (activeNetworkLink().isConnected()) {
|
||||
_webconfig->startLanMode(activeNetworkLink().localIP(),
|
||||
!mqttNetworkSetupComplete(_cli.getObserverPrefs()), reply);
|
||||
_webconfig->startLanMode(!mqttNetworkSetupComplete(_cli.getObserverPrefs()), reply);
|
||||
} else if (!mqttNetworkSetupComplete(_cli.getObserverPrefs())) {
|
||||
_webconfig->startSetupMode(reply);
|
||||
} else {
|
||||
|
||||
@@ -301,7 +301,7 @@ bool WebConfigServer::startSetupMode(char reply[]) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebConfigServer::startLanMode(IPAddress ip, bool initial_setup, char reply[]) {
|
||||
bool WebConfigServer::startLanMode(bool initial_setup, char reply[]) {
|
||||
if (_mode != MODE_OFF || _stopping) {
|
||||
strcpy(reply, "Err: webconfig busy");
|
||||
return false;
|
||||
@@ -313,6 +313,8 @@ bool WebConfigServer::startLanMode(IPAddress ip, bool initial_setup, char reply[
|
||||
}
|
||||
activeNetworkLink().lockSwitching();
|
||||
_network_locked = true;
|
||||
// Read the address only once the route is pinned, so it names the locked link.
|
||||
const IPAddress ip = activeNetworkLink().localIP();
|
||||
if (!activeNetworkLink().isConnected() || ip == IPAddress()) {
|
||||
activeNetworkLink().unlockSwitching();
|
||||
_network_locked = false;
|
||||
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
static bool isRebootPending();
|
||||
|
||||
bool startSetupMode(char reply[]); // open SoftAP + DNS captive portal
|
||||
bool startLanMode(IPAddress ip, bool initial_setup, char reply[]);
|
||||
bool startLanMode(bool initial_setup, char reply[]); // bind to the selected network
|
||||
void requestStop(); // stop listening and detach this session
|
||||
void tick(uint32_t now); // call every loop iteration
|
||||
|
||||
|
||||
Reference in New Issue
Block a user