0
0
mirror of https://github.com/Doodle3D/doodle3d-firmware.git synced 2024-07-01 05:31:23 +02:00
doodle3d-firmware/src/network/signin.lua
Wouter R c3756f5348 Fix return values in printer api.
Pass along chunk metadata in printer api.
Move wifi station mode check from main.lua to signin.lua so it is always run past.
Only log postresponsequeue if it is not empty.

Conflicts:
	src/rest/api/api_printer.lua
2016-01-08 22:26:36 +01:00

115 lines
3.2 KiB
Lua

--
-- This file is part of the Doodle3D project (http://doodle3d.com).
--
-- @copyright 2013, Doodle3D
-- @license This software is licensed under the terms of the GNU GPL v2 or later.
-- See file LICENSE.txt or visit http://www.gnu.org/licenses/gpl.html for full license details.
---
-- TODO: document
local log = require('util.logger')
local utils = require('util.utils')
local uci = require('uci').cursor()
local iwinfo = require('iwinfo')
local settings = require('util.settings')
local wifi = require("network.wlanconfig")
local urlcode = require('util.urlcode')
local status = require('util.status')
local M = {}
local STATUS_FILE = "signinstatus"
local MOD_ABBR = "NTSI"
local IDLE_STATUS = 1
local SIGNING_IN_STATUS = 2
--- Signin to connect.doodle3d.com server
--
function M.signin()
log:verbose(MOD_ABBR, "signin:signin");
local code, msg = M.getStatus()
--log:verbose(MOD_ABBR, " status: "..utils.dump(code).." "..utils.dump(msg));
-- if we are already signin in, skip
if(code == SIGNING_IN_STATUS) then
log:verbose(MOD_ABBR, " already signing in, skipping")
return
end
local ds = wifi.getDeviceState()
log:verbose(MOD_ABBR, " wifi deviceState.mode: "..utils.dump(ds.mode))
if ds.mode ~= "sta" then
log:verbose(MOD_ABBR, " wifi not in station mode, skipping signin")
return
end
M.setStatus(SIGNING_IN_STATUS,"signing in")
local baseurl = "http://connect.doodle3d.com/api/signin.php"
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:verbose(MOD_ABBR, " signin attempt "..utils.dump(attempt).."/"..utils.dump(maxAttempts))
local signedin = false
local localip = wifi.getLocalIP();
--log:verbose(MOD_ABBR, " 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:verbose(MOD_ABBR, " signin response: \n"..utils.dump(signinResponse))
local success = signinResponse:match('"status":"success"')
log:verbose(MOD_ABBR, " success: "..utils.dump(success))
if success ~= nil then
signedin = true
else
log:warning(MOD_ABBR, "signin failed, request failed (response: "..utils.dump(signinResponse)..")")
end
else
log:warning(MOD_ABBR, "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
M.setStatus(IDLE_STATUS,"idle")
return string.len(signinResponse) > 0, signinResponse
end
function M.getStatus()
return status.get(STATUS_FILE);
end
function M.setStatus(code,msg)
log:info(MOD_ABBR, "signin:setStatus: "..code.." | "..msg)
status.set(STATUS_FILE,code,msg);
end
return M