diff --git a/src/main.lua b/src/main.lua index 49ddc8c..4cee85b 100644 --- a/src/main.lua +++ b/src/main.lua @@ -59,7 +59,7 @@ local function setupAutoWifiMode() return nil, "autowifi: could not scan wifi networks (" .. msg .. ")" end - log:info("current wifi name/mode: " .. (netName or "") .. "/" .. netMode .. ", ssid of self: " .. apSsid) + log:info("current wifi name: " .. (netName or "") .. ", mode: " .. netMode .. ", ssid of self: " .. apSsid) local visNet, knownNet = {}, {} for _,sn in ipairs(scanList) do table.insert(visNet, sn.ssid) @@ -93,6 +93,7 @@ local function setupAutoWifiMode() return nil, "autowifi: could not associate with ssid '" .. connectWith .. "' (" .. msg .. ")" end elseif netMode ~= 'ap' or netName ~= apSsid then + log:info("falling back to access point mode") local rv,msg = netconf.setupAccessPoint(apSsid) if rv then return true, "autowifi: configured as access point with ssid '" .. apSsid .. "'" diff --git a/src/network/netconfig.lua b/src/network/netconfig.lua index 08efd2a..5a1424c 100644 --- a/src/network/netconfig.lua +++ b/src/network/netconfig.lua @@ -95,7 +95,7 @@ function M.reloadComponent(c, silent, boot) os.execute(cmd) else rv = utils.captureCommandOutput(cmd) - log:info(" result reloading component '" .. c .. "' (cmd: '"..cmd.."'): \n"..utils.dump(rv)) + log:debug(" result reloading component '" .. c .. "' (cmd: '"..cmd.."'): \n"..utils.dump(rv)) end end @@ -375,13 +375,6 @@ function M.associateSsid(ssid, passphrase, recreate, boot) return nil,msg end - log:info(" waiting for network configuration to finish") - local waitTime = 1 - local endTime = os.time() + waitTime - while os.time() <= endTime do - -- waiting... - end - M.setStatus(M.CONNECTED,"Connected"); -- signin to connect.doodle3d.com diff --git a/src/network/signin.lua b/src/network/signin.lua index 0b78d4e..8d0a808 100644 --- a/src/network/signin.lua +++ b/src/network/signin.lua @@ -42,24 +42,57 @@ function M.signin() M.setStatus(SIGNING_IN_STATUS,"signing in") local baseurl = "http://connect.doodle3d.com/api/signin.php" - - local localip = wifi.getLocalIP(); - if localip == nil then - log:error("signin failed no local ip found") - M.setStatus(IDLE_STATUS,"idle") - return false + + local attemptInterval = 1 + local maxAttempts = 20 + local attempt = 0 + + local nextAttemptTime = os.time() + + local localip = "" + local signinResponse = "" + while true do + if os.time() > nextAttemptTime then + log:debug("signin attempt "..utils.dump(attempt).."/"..utils.dump(maxAttempts)) + local signedin = false + local localip = wifi.getLocalIP(); + log:debug(" localip: "..utils.dump(localip)) + if localip ~= nil then + + local wifiboxid = wifi.getSubstitutedSsid(settings.get('network.cl.wifiboxid')) + wifiboxid = urlcode.escape(wifiboxid) + + local cmd = "wget -q -T 2 -t 1 -O - "..baseurl.."?wifiboxid="..wifiboxid.."\\&localip="..localip; + signinResponse = utils.captureCommandOutput(cmd); + log:debug(" signin response: \n"..utils.dump(signinResponse)) + local success = signinResponse:match('"status":"success"') + log:debug(" success: "..utils.dump(success)) + if success ~= nil then + signedin = true + else + log:warn("signin failed request failed (response: "..utils.dump(signinResponse)..")") + end + else + log:warn("signin failed no local ip found (attempt: "..utils.dump(attempt).."/"..utils.dump(maxAttempts)..")") + end + + if signedin then + break + else + attempt = attempt+1 + if attempt >= maxAttempts then + -- still no localIP; fail + M.setStatus(IDLE_STATUS,"idle") + return false + else + nextAttemptTime = os.time() + attemptInterval + end + end + end end - - local wifiboxid = wifi.getSubstitutedSsid(settings.get('network.cl.wifiboxid')) - wifiboxid = urlcode.escape(wifiboxid) - - local cmd = "wget -q -T 2 -t 1 -O - "..baseurl.."?wifiboxid="..wifiboxid.."\\&localip="..localip; - local output = utils.captureCommandOutput(cmd); - log:info("signin: "..output) - + M.setStatus(IDLE_STATUS,"idle") - - return string.len(output) > 0, output + return string.len(signinResponse) > 0, signinResponse end function M.getStatus() diff --git a/src/network/wlanconfig.lua b/src/network/wlanconfig.lua index f93564b..ab42bcd 100644 --- a/src/network/wlanconfig.lua +++ b/src/network/wlanconfig.lua @@ -124,6 +124,7 @@ end --returns the wireless local ip address function M.getLocalIP() local ifconfig, rv = utils.captureCommandOutput("ifconfig wlan0"); + --log:debug(" ifconfig: \n"..utils.dump(ifconfig)); local localip = ifconfig:match('inet addr:([%d\.]+)') return localip; end diff --git a/src/script/wifibox_init b/src/script/wifibox_init index cde12ea..4eeac31 100644 --- a/src/script/wifibox_init +++ b/src/script/wifibox_init @@ -15,9 +15,6 @@ boot() { $LOGGER "Invoking Doodle3D WiFi box network auto-initialization..." /usr/share/lua/wifibox/script/d3dapi autowifi - - $LOGGER "Start signing in..." - /usr/share/lua/wifibox/script/signin.sh > /dev/null 2> /dev/null & } start() {