Fix request initialization to handle autowifi command-line invocation correctly; fix installation and execution of openwrt init script; partially implement autowifi switching; fixes to package (de-)installation.

This commit is contained in:
Wouter R 2013-08-20 22:38:16 +02:00
parent 6f431942cc
commit d59d2da938
8 changed files with 98 additions and 26 deletions

View File

@ -16,7 +16,7 @@ IncludeWithNewlines = $(subst
# Name and release number of this package # Name and release number of this package
PKG_NAME := wifibox PKG_NAME := wifibox
PKG_VERSION := 0.1.0 PKG_VERSION := 0.1.0
PKG_RELEASE := 6 PKG_RELEASE := 7
# This specifies the directory where we're going to build the program. # This specifies the directory where we're going to build the program.
# The root build directory, $(BUILD_DIR), is by default the build_mipsel # The root build directory, $(BUILD_DIR), is by default the build_mipsel
@ -85,7 +85,6 @@ define Package/wifibox/install
$(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/rest/api $(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/rest/api
$(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/script $(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/script
$(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/util $(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/util
$(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/www
$(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/www/cgi-bin $(INSTALL_DIR) $(1)/www/cgi-bin
@ -98,11 +97,12 @@ define Package/wifibox/install
$(CP) $(WIFIBOX_BASE_DIR)/rest/api/*.lua $(1)/$(TGT_LUA_DIR_SUFFIX)/rest/api/ $(CP) $(WIFIBOX_BASE_DIR)/rest/api/*.lua $(1)/$(TGT_LUA_DIR_SUFFIX)/rest/api/
$(CP) $(WIFIBOX_BASE_DIR)/util/*.lua $(1)/$(TGT_LUA_DIR_SUFFIX)/util/ $(CP) $(WIFIBOX_BASE_DIR)/util/*.lua $(1)/$(TGT_LUA_DIR_SUFFIX)/util/
$(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/wifibox_init $(1)/$(TGT_LUA_DIR_SUFFIX)/script $(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/wifibox_init $(1)/etc/init.d/wifibox # copy directly to init dir (required for post-inst enabling)
$(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/d3dapi $(1)/$(TGT_LUA_DIR_SUFFIX)/script $(INSTALL_BIN) $(WIFIBOX_BASE_DIR)/script/d3dapi $(1)/$(TGT_LUA_DIR_SUFFIX)/script
# $(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/www
# $(CP) $(WIFIBOX_BASE_DIR)/www/* $(1)/$(TGT_LUA_DIR_SUFFIX)/www/ # $(CP) $(WIFIBOX_BASE_DIR)/www/* $(1)/$(TGT_LUA_DIR_SUFFIX)/www/
$(CP) $(WIFIBOX_BASE_DIR)/www/* $(1)/www/ #copy www files directly to /www $(CP) $(WIFIBOX_BASE_DIR)/www/* $(1)/www/ #copy www files directly to /www
ifeq ($(CONFIG_WIFIBOX_DEVEL_PACKAGE),y) ifeq ($(CONFIG_WIFIBOX_DEVEL_PACKAGE),y)
# $(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/misc # $(INSTALL_DIR) $(1)/$(TGT_LUA_DIR_SUFFIX)/misc
@ -115,9 +115,7 @@ endif
### create links elsewhere in the system (autowifi) ### create links elsewhere in the system (autowifi)
$(LN) -s /$(TGT_LUA_DIR_SUFFIX)/script/d3dapi $(1)/www/cgi-bin $(LN) -s /$(TGT_LUA_DIR_SUFFIX)/script/d3dapi $(1)/www/cgi-bin
$(LN) -s /$(TGT_LUA_DIR_SUFFIX)/script/wifibox_init $(1)/etc/init.d/wifibox
### install gpx utility ### install gpx utility
$(INSTALL_DIR) $(1)/usr/bin $(INSTALL_DIR) $(1)/usr/bin

View File

@ -49,7 +49,7 @@ EOM
fi fi
### Add some convenience aliases to root's profile ### Add some convenience aliases to root's profile
mkdir $IPKG_INSTROOT/root mkdir -p $IPKG_INSTROOT/root
grep '^# DO NOT MODIFY.*wifibox package.$' $IPKG_INSTROOT/root/.profile >/dev/null 2>&1 grep '^# DO NOT MODIFY.*wifibox package.$' $IPKG_INSTROOT/root/.profile >/dev/null 2>&1
if [ $? -gt 0 ]; then if [ $? -gt 0 ]; then
cat <<-EOM >> $IPKG_INSTROOT/root/.profile cat <<-EOM >> $IPKG_INSTROOT/root/.profile
@ -63,7 +63,7 @@ fi
### Finally make sure basic configuration is set correctly ### Finally make sure basic configuration is set correctly
/etc/init.d/wifibox enable $IPKG_INSTROOT/etc/init.d/wifibox enable
if [ -z "$IPKG_INSTROOT" ]; then if [ -z "$IPKG_INSTROOT" ]; then
echo "Enabling wifi device..." echo "Enabling wifi device..."

View File

@ -4,15 +4,25 @@ if [ -f /etc/banner.default ]; then
mv /etc/banner.default /etc/banner mv /etc/banner.default /etc/banner
fi fi
rmdir /usr/share/lua/wifibox/www/wifibox
rmdir /usr/share/lua/wifibox/www
rmdir /usr/share/lua/wifibox/network rmdir /usr/share/lua/wifibox/network
rmdir /usr/share/lua/wifibox/rest/api
rmdir /usr/share/lua/wifibox/rest rmdir /usr/share/lua/wifibox/rest
rmdir /usr/share/lua/wifibox/script rmdir /usr/share/lua/wifibox/script
rmdir /usr/share/lua/wifibox/test/www 2> /dev/null
rmdir /usr/share/lua/wifibox/test 2> /dev/null
rmdir /usr/share/lua/wifibox/util rmdir /usr/share/lua/wifibox/util
rmdir /usr/share/lua/wifibox rmdir /usr/share/lua/wifibox
rmdir /usr/share/lua rmdir /usr/share/lua
# Try to remove all www directories used by the package, and intentionally leave anything non-empty alone
rmdir /www/js/libs
rmdir /www/js
rmdir /www/img/buttons
rmdir /www/img
rmdir /www/css
rm /www/test 2> /dev/null
rmdir /www/cgi-bin
echo "The wifibox banner has been removed. Changes to the root profile however, have" echo "The wifibox banner has been removed. Changes to the root profile however, have"
echo "not been reverted, as haven't the wlan firewall zone and the radio0 device state." echo "not been reverted, as haven't the wlan firewall zone and the radio0 device state."
echo "NOTE: config changes have not been implemented yet." echo "NOTE: config changes have not been implemented yet."

View File

@ -1,7 +1,5 @@
#!/bin/sh #!/bin/sh
if [ -z "$$IPKG_INSTROOT" ]; then $IPKG_INSTROOT/etc/init.d/wifibox disable
/etc/init.d/wifibox disable
fi
exit 0 exit 0

View File

@ -1,8 +1,9 @@
package.path = package.path .. ';/usr/share/lua/wifibox/?.lua' package.path = package.path .. ';/usr/share/lua/wifibox/?.lua'
local confDefaults = require('conf_defaults') local confDefaults = require('conf_defaults')
local util = require('util.utils')
local log = require('util.logger') local log = require('util.logger')
local settings = require('util.settings')
local util = require('util.utils')
local wifi = require('network.wlanconfig') local wifi = require('network.wlanconfig')
local netconf = require('network.netconfig') local netconf = require('network.netconfig')
local RequestClass = require('rest.request') local RequestClass = require('rest.request')
@ -11,8 +12,66 @@ local ResponseClass = require('rest.response')
local postData = nil local postData = nil
-- expects list with tables containing 'ssid' key as values and returns index key if found or nil if not found
local function findSsidInList(list, name)
for k,v in ipairs(list) do
if v.ssid == name then return k end
end
return nil
end
local function setupAutoWifiMode() local function setupAutoWifiMode()
io.write("--TODO: join known network if present, fall back to access point otherwise\n") local wifiState = wifi.getDeviceState()
local netName, netMode = wifiState.ssid, wifiState.mode
local apSsid = wifi.getSubstitutedSsid(settings.get('network.ap.ssid'))
local apMode = (apSsid == netName) and netMode == 'ap'
local scanList,msg = wifi.getScanInfo()
local knownSsids = wifi.getConfigs()
if not scanList then
return nil, "autowifi: could not scan wifi networks (" .. msg .. ")"
end
-- START TEMP -- mode should be ap or sta
print("wifi name: " .. netName .. ", wifi mode: " .. netMode .. ", expected AP ssid: " .. apSsid .. ", apmode: " .. (apMode and "yes" or "no"))
for _,sn in ipairs(scanList) do
print("avl net: " .. sn.ssid)
end
for _,kn in ipairs(knownSsids) do
print("known net: " .. kn.ssid .. " (mode: " .. kn.mode .. ")")
end
-- END TEMP
-- if the currently active network is client mode and is also visible, do nothing since it will connect automatically further along the boot process
if netMode == 'sta' and findSsidInList(scanList, netName) then
return true, "autowifi: no action - existing configuration found for currently wifi visible network (" .. netName .. ")"
end
-- try to find a known network which is also visible (ordered by known network definitions)
local connectWith = nil
for _,kn in ipairs(knownSsids) do
if findSsidInList(scanList, kn.ssid) then
connectWith = kn.ssid
break
end
end
if connectWith then
print("connectWith: " .. connectWith) --TEMP
-- TODO: refactor connect stuff into network:connect() function and adapt api_network_associate as well (and others?)
-- TODO: connect with network
-- return true, "autowifi: associated -- client mode with ssid '" .. connectWith .. "'"
elseif netMode ~= 'ap' then
print("shouldBeAp") --TEMP
-- TODO: setup AP (refactor into network like with client connect)
-- return true, "autowifi: configured as access point with ssid '" .. apSsid .. "'"
else
return true, "autowifi: no action - no known networks found, already in access point mode"
end
return nil, "autowifi: uh oh - bad situation in autowifi function"
end end
local function init() local function init()
@ -57,7 +116,14 @@ end
end end
if rq:getRequestMethod() == 'CMDLINE' and rq:get('autowifi') ~= nil then if rq:getRequestMethod() == 'CMDLINE' and rq:get('autowifi') ~= nil then
setupAutoWifiMode() log:info("running in autowifi mode")
local rv,msg = setupAutoWifiMode()
if rv then
log:info("autowifi setup done (" .. msg .. ")")
else
log:error("autowifi setup failed (" .. msg .. ")")
end
elseif rq:getRequestMethod() ~= 'CMDLINE' or confDefaults.DEBUG_API then elseif rq:getRequestMethod() ~= 'CMDLINE' or confDefaults.DEBUG_API then
local response, err = rq:handle() local response, err = rq:handle()

View File

@ -174,8 +174,8 @@ function M.new(postData, debugEnabled)
self.postArgs = kvTableFromUrlEncodedString(postData) self.postArgs = kvTableFromUrlEncodedString(postData)
self.pathArgs = arrayFromPath(os.getenv('PATH_INFO')) self.pathArgs = arrayFromPath(os.getenv('PATH_INFO'))
-- override path arguments with command line parameter and allow to emulate GET/POST if debugging is enabled -- override path arguments with command line parameter and allow to emulate GET/POST if debugging is enabled *and* if the autowifi special command wasn't mentioned
if debugEnabled and self.requestMethod == 'CMDLINE' then if debugEnabled and self.requestMethod == 'CMDLINE' and self:get('autowifi') == nil then
self.pathArgs = arrayFromPath(self.cmdLineArgs['p']) self.pathArgs = arrayFromPath(self.cmdLineArgs['p'])
if self.cmdLineArgs['r'] == 'GET' or self.cmdLineArgs['r'] == nil then if self.cmdLineArgs['r'] == 'GET' or self.cmdLineArgs['r'] == nil then

View File

@ -4,14 +4,14 @@ START=18
LOGGER="logger -s -t autowifi -p 6" LOGGER="logger -s -t autowifi -p 6"
boot() { boot() {
$LOGGER "dummy boot" $LOGGER "Invoking Doodle3D WiFi box network auto-initialization..."
/usr/share/lua/wifibox/script/d3dapi autowifi /usr/share/lua/wifibox/script/d3dapi autowifi
} }
start() { #start() {
$LOGGER "dummy start" # $LOGGER "dummy start"
} #}
stop() { #stop() {
$LOGGER "dummy stop" # $LOGGER "dummy stop"
} #}

View File

@ -10,7 +10,7 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
/* these includes are for ioctl() and cfmakeraw() but disabled to avoid conflicts with asm/* includes */ //these includes are for ioctl() and cfmakeraw() but disabled to avoid conflicts with asm/* includes
//#include <sys/ioctl.h> //#include <sys/ioctl.h>
//#include <termios.h> //#include <termios.h>