OpenWrt_Luci_Lua/Mi_Lua/luci/controller/api/xqnetwork.lua

1311 lines
43 KiB
Lua
Raw Normal View History

2015-05-09 10:48:46 +00:00
module("luci.controller.api.xqnetwork", package.seeall)
function index()
local page = node("api","xqnetwork")
page.target = firstchild()
page.title = ("")
page.order = 200
page.sysauth = "admin"
page.sysauth_authenticator = "jsonauth"
page.index = true
entry({"api", "xqnetwork"}, firstchild(), (""), 200)
entry({"api", "xqnetwork", "wifi_status"}, call("getWifiStatus"), (""), 201)
entry({"api", "xqnetwork", "wifi_detail"}, call("getWifiInfo"), (""), 202)
entry({"api", "xqnetwork", "wifi_detail_all"}, call("getAllWifiInfo"), (""), 202)
entry({"api", "xqnetwork", "wifi_connect_devices"}, call("getWifiConDev"), (""), 203)
entry({"api", "xqnetwork", "wifi_txpwr_channel"}, call("getWifiChTx"), (""), 204)
-- entry({"api", "xqnetwork", "set_wifi_txpwr_channel"}, call("setWifiChTx"), (""), 205)
entry({"api", "xqnetwork", "set_wifi_txpwr"}, call("setWifiTxpwr"), (""), 205)
entry({"api", "xqnetwork", "wifi_up"}, call("turnOnWifi"), (""), 206)
entry({"api", "xqnetwork", "wifi_down"}, call("shutDownWifi"), (""), 207)
entry({"api", "xqnetwork", "set_wifi"}, call("setWifi"), (""), 208)
--entry({"api", "xqnetwork", "get_scan_list"}, call("get_scan_list"), (""), 209, true)
--entry({"api", "xqnetwork", "wifi_ctl_scan"}, call("wifi_ctl_scan"), (""), 210)
--entry({"api", "xqnetwork", "get_bridge"}, call("get_bridge"), (""), 211, true)
--entry({"api", "xqnetwork", "set_bridge"}, call("set_bridge"), (""), 212)
entry({"api", "xqnetwork", "lan_info"}, call("getLanInfo"), (""), 213)
entry({"api", "xqnetwork", "wan_info"}, call("getWanInfo"), (""), 214)
entry({"api", "xqnetwork", "lan_dhcp"}, call("getLanDhcp"), (""), 215)
entry({"api", "xqnetwork", "wan_down"}, call("wanDown"), (""), 216)
entry({"api", "xqnetwork", "wan_up"}, call("wanUp"), (""), 217)
entry({"api", "xqnetwork", "check_wan_type"}, call("getAutoWanType"), (""), 218, 0x08)
entry({"api", "xqnetwork", "wan_statistics"}, call("getWanStatistics"), (""), 219)
--
entry({"api", "xqnetwork", "devices_statistics"}, call("getDevsStatistics"), (""), 220)
entry({"api", "xqnetwork", "device_statistics"}, call("getDevStatistics"), (""), 221)
--
entry({"api", "xqnetwork", "set_lan_ip"}, call("setLanIp"), (""), 222)
entry({"api", "xqnetwork", "set_wan"}, call("setWan"), (""), 223, 0x08)
entry({"api", "xqnetwork", "set_lan_dhcp"}, call("setLanDhcp"), (""), 224)
entry({"api", "xqnetwork", "mac_clone"}, call("setWanMac"), (""), 225)
entry({"api", "xqnetwork", "set_all_wifi"}, call("setAllWifi"), (""), 226)
entry({"api", "xqnetwork", "avaliable_channels"}, call("getChannels"), (""), 227)
-- WiFi macfilter
entry({"api", "xqnetwork", "wifi_macfilter_info"}, call("getWifiMacfilterInfo"), (""), 228)
entry({"api", "xqnetwork", "set_wifi_macfilter"}, call("setWifiMacfilter"), (""), 229)
entry({"api", "xqnetwork", "edit_device"}, call("editDevice"), (""), 230)
-- Mac bind
entry({"api", "xqnetwork", "mac_bind"}, call("macBind"), (""), 231)
entry({"api", "xqnetwork", "mac_unbind"}, call("macUnbind"), (""), 232)
entry({"api", "xqnetwork", "savebind"}, call("saveBind"), (""), 233)
entry({"api", "xqnetwork", "unbindall"}, call("unbindAll"), (""), 234)
entry({"api", "xqnetwork", "macbind_info"}, call("getMacBindInfo"), (""), 235)
-- PPPoE
entry({"api", "xqnetwork", "pppoe_status"}, call("pppoeStatus"), (""), 236)
entry({"api", "xqnetwork", "pppoe_stop"}, call("pppoeStop"), (""), 237)
entry({"api", "xqnetwork", "pppoe_start"}, call("pppoeStart"), (""), 238)
-- QoS
entry({"api", "xqnetwork", "qos_info"}, call("getQosInfo"), (""), 239)
entry({"api", "xqnetwork", "qos_switch"}, call("qosSwitch"), (""), 240)
entry({"api", "xqnetwork", "qos_mode"}, call("qosMode"), (""), 241)
entry({"api", "xqnetwork", "qos_limit"}, call("qosLimit"), (""), 242)
entry({"api", "xqnetwork", "qos_offlimit"}, call("qosOffLimit"), (""), 243)
entry({"api", "xqnetwork", "set_band"}, call("setBand"), (""), 244)
-- NAT
entry({"api", "xqnetwork", "portforward"}, call("portForward"), (""), 245)
entry({"api", "xqnetwork", "add_redirect"}, call("addRedirect"), (""), 246)
entry({"api", "xqnetwork", "add_range_redirect"}, call("addRangeRedirect"), (""), 247)
entry({"api", "xqnetwork", "delete_redirect"}, call("deleteRedirect"), (""), 248)
entry({"api", "xqnetwork", "redirect_apply"}, call("redirectApply"), (""), 249)
-- DMZ
entry({"api", "xqnetwork", "dmz"}, call("getDMZInfo"), (""), 250)
entry({"api", "xqnetwork", "set_dmz"}, call("setDMZ"), (""), 251)
entry({"api", "xqnetwork", "dmz_off"}, call("closeDMZ"), (""), 252)
entry({"api", "xqnetwork", "dmz_reload"}, call("reloadDMZ"), (""), 252)
-- DDNS
entry({"api", "xqnetwork", "ddns"}, call("ddnsStatus"), (""), 253)
entry({"api", "xqnetwork", "ddns_switch"}, call("ddnsSwitch"), (""), 254)
entry({"api", "xqnetwork", "add_server"}, call("addServer"), (""), 255)
entry({"api", "xqnetwork", "del_server"}, call("deleteServer"), (""), 256)
entry({"api", "xqnetwork", "server_switch"}, call("serverSwitch"), (""), 258)
entry({"api", "xqnetwork", "ddns_reload"}, call("ddnsReload"), (""), 259)
entry({"api", "xqnetwork", "ddns_edit"}, call("ddnsEdit"), (""), 260)
entry({"api", "xqnetwork", "get_server"}, call("getServer"), (""), 261)
end
local LuciHttp = require("luci.http")
local XQErrorUtil = require("xiaoqiang.util.XQErrorUtil")
function getWifiStatus()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local result = {}
local status = {}
table.insert(status,XQWifiUtil.getWifiStatus(1))
table.insert(status,XQWifiUtil.getWifiStatus(2))
result["code"] = 0
result["status"] = status
LuciHttp.write_json(result)
end
function getWifiInfo()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local result = {}
local code = 0
local index = tonumber(LuciHttp.formvalue("wifiIndex"))
if index and index < 3 then
result["info"] = XQWifiUtil.getAllWifiInfo()[index]
else
code = 1523
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
end
function getAllWifiInfo()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local result = {}
local code = 0
result["info"] = XQWifiUtil.getAllWifiInfo()
result["code"] = code
LuciHttp.write_json(result)
end
function getWifiConDev()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local result = {}
result["code"] = 0
result["list"] = XQWifiUtil.getAllWifiConnetDeviceList()
LuciHttp.write_json(result)
end
function getWifiChTx()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local result = {}
result["code"] = 0
result["list"] = XQWifiUtil.getWifiChannelTxpwrList()
LuciHttp.write_json(result)
end
function setWifiChTx()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local XQFunction = require("xiaoqiang.common.XQFunction")
local result = {}
local code = 0
local channel1 = LuciHttp.formvalue("channel1")
local txpwr1 = LuciHttp.formvalue("txpwr1")
local channel2 = LuciHttp.formvalue("channel2")
local txpwr2 = LuciHttp.formvalue("txpwr2")
if XQFunction.isStrNil(channel1) and XQFunction.isStrNil(channel2) and XQFunction.isStrNil(txpwr1) and XQFunction.isStrNil(txpwr2) then
code = 1502
else
XQWifiUtil.setWifiChannelTxpwr(channel1,txpwr1,channel2,txpwr2)
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
if code == 0 then
LuciHttp.close()
XQFunction.forkRestartWifi()
end
end
function setWifiTxpwr()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local XQFunction = require("xiaoqiang.common.XQFunction")
local result = {}
local code = 0
local txpwr = LuciHttp.formvalue("txpwr")
if XQFunction.isStrNil(txpwr) then
code = 1502
else
XQWifiUtil.setWifiTxpwr(txpwr)
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
if code == 0 then
LuciHttp.close()
XQFunction.forkRestartWifi()
end
end
function turnOnWifi()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local result = {}
local code = 0
local index = tonumber(LuciHttp.formvalue("wifiIndex"))
if index and index < 3 then
XQWifiUtil.turnWifiOn(index)
else
code = 1523
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
end
function shutDownWifi()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local result = {}
local code = 0
local index = tonumber(LuciHttp.formvalue("wifiIndex"))
if index and index < 3 then
XQWifiUtil.turnWifiOff(index)
else
code = 1523
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
end
function setWifi()
local XQLog = require("xiaoqiang.XQLog")
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local XQFunction = require("xiaoqiang.common.XQFunction")
local result = {}
local code = 0
local index = tonumber(LuciHttp.formvalue("wifiIndex"))
local ssid = LuciHttp.formvalue("ssid")
local password = LuciHttp.formvalue("pwd")
local encryption = LuciHttp.formvalue("encryption")
local channel = LuciHttp.formvalue("channel")
local bandwidth = LuciHttp.formvalue("bandwidth")
local txpwr = LuciHttp.formvalue("txpwr")
local hidden = LuciHttp.formvalue("hidden")
local on = LuciHttp.formvalue("on")
if on ~= nil then
on = tonumber(on)
end
if channel == "0" then
bandwidth = "0"
end
if index == 1 then
if channel then
XQLog.check(0, XQLog.KEY_FUNC_2G_CHANNEL, channel)
end
if txpwr then
XQLog.check(0, XQLog.KEY_FUNC_2G_SIGNAL, txpwr)
end
elseif index == 2 then
if channel then
XQLog.check(0, XQLog.KEY_FUNC_5G_CHANNEL, channel)
end
if txpwr then
XQLog.check(0, XQLog.KEY_FUNC_5G_SIGNAL, txpwr)
end
elseif index == 3 then
-- todo: Guest wifi
end
local wifirestart = true
code = XQWifiUtil.checkSSID(ssid,31)
if code == 0 then
if index == 1 or index == 2 then
local succeed = XQWifiUtil.setWifiBasicInfo(index, ssid, password, encryption, channel, txpwr, hidden, on, bandwidth)
if succeed == false then
code = XQWifiUtil.checkWifiPasswd(password,encryption)
end
elseif index == 3 then
local XQGuestWifi = require("xiaoqiang.module.XQGuestWifi")
local succeed = XQGuestWifi.setGuestWifi(1, ssid, encryption, password, 1, on)
if succeed == false then
code = 1615
else
wifirestart = false
end
end
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
if code == 0 then
LuciHttp.close()
if wifirestart then
XQFunction.forkRestartWifi()
end
end
end
function setAllWifi()
local XQSysUtil = require("xiaoqiang.util.XQSysUtil")
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local XQFunction = require("xiaoqiang.common.XQFunction")
local result = {}
local code = 0
local code1 = 0
local code2 = 0
local details = {}
local on1 = LuciHttp.formvalue("on1")
local ssid1 = LuciHttp.formvalue("ssid1")
local password1 = LuciHttp.formvalue("pwd1")
local encryption1 = LuciHttp.formvalue("encryption1")
local channel1 = LuciHttp.formvalue("channel1")
local txpwr1 = LuciHttp.formvalue("txpwr1")
local hidden1 = LuciHttp.formvalue("hidden1")
local bandwidth1 = LuciHttp.formvalue("bandwidth1")
local on2 = LuciHttp.formvalue("on2")
local ssid2 = LuciHttp.formvalue("ssid2")
local password2 = LuciHttp.formvalue("pwd2")
local encryption2 = LuciHttp.formvalue("encryption2")
local channel2 = LuciHttp.formvalue("channel2")
local txpwr2 = LuciHttp.formvalue("txpwr2")
local hidden2 = LuciHttp.formvalue("hidden2")
local bandwidth2 = LuciHttp.formvalue("bandwidth2")
local on3 = LuciHttp.formvalue("on3")
local ssid3 = LuciHttp.formvalue("ssid3")
local password3 = LuciHttp.formvalue("pwd3")
local encryption3 = LuciHttp.formvalue("encryption3")
if on1 ~= nil then
on1 = tonumber(on1)
end
if on2 ~= nil then
on2 = tonumber(on2)
end
if channel1 == "0" then
bandwidth1 = "0"
end
if channel2 == "0" then
bandwidth2 = "0"
end
local code1 = XQWifiUtil.checkSSID(ssid1,31)
local code2 = XQWifiUtil.checkSSID(ssid2,31)
if on1 ~= 0 and not XQFunction.isStrNil(ssid1) then
XQSysUtil.setRouterName(ssid1)
end
local succeed
if on1 == 0 then
succeed = XQWifiUtil.setWifiBasicInfo(1, nil, nil, nil, nil, nil, nil, on1, nil)
else
code1 = XQWifiUtil.checkSSID(ssid1,31)
if code1 == 0 then
succeed = XQWifiUtil.setWifiBasicInfo(1, ssid1, password1, encryption1, channel1, txpwr1, hidden1, on1, bandwidth1)
else
code = code1
end
end
if succeed == false then
local error1 = {}
code1 = XQWifiUtil.checkWifiPasswd(password1,encryption1)
error1["code"] = code1
error1["msg"] = XQErrorUtil.getErrorMessage(code1)
table.insert(details,error1)
end
if on2 == 0 then
succeed = XQWifiUtil.setWifiBasicInfo(2, nil, nil, nil, nil, nil, nil, on2, nil)
else
code2 = XQWifiUtil.checkSSID(ssid2,31)
if code2 == 0 then
succeed = XQWifiUtil.setWifiBasicInfo(2, ssid2, password2, encryption2, channel2, txpwr2, hidden2, on2, bandwidth2)
else
code = code2
end
end
if succeed == false then
local error2 = {}
code2 = XQWifiUtil.checkWifiPasswd(password2,encryption2)
error2["code"] = code2
error2["msg"] = XQErrorUtil.getErrorMessage(code2)
table.insert(details,error2)
end
if code1+code2 > 0 and code == 0 then
code = 1516
end
local wifirestart = true
if on3 then
local XQGuestWifi = require("xiaoqiang.module.XQGuestWifi")
if not XQGuestWifi.setGuestWifi(1, ssid3, encryption3, password3, 1, on3) then
code = 1615
else
wifirestart = false
end
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
result["errorDetails"] = details
end
result["code"] = code
LuciHttp.write_json(result)
if code == 0 then
LuciHttp.close()
if wifirestart then
XQFunction.forkRestartWifi()
end
end
end
function getLanInfo()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local lan = XQLanWanUtil.getLanWanInfo("lan")
local linkList = XQLanWanUtil.getLanLinkList()
local result = {}
result["code"] = 0
result["info"] = lan
result["linkList"] = linkList
LuciHttp.write_json(result)
end
function getWanInfo()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local wan = XQLanWanUtil.getLanWanInfo("wan")
local result = {}
result["code"] = 0
result["info"] = wan
LuciHttp.write_json(result)
end
function getWanStatistics()
local XQDeviceUtil = require("xiaoqiang.util.XQDeviceUtil")
local wan = XQDeviceUtil.getWanLanNetworkStatistics("wan")
local result = {}
result["code"] = 0
result["statistics"] = wan
LuciHttp.write_json(result)
end
function getDevsStatistics()
local XQDeviceUtil = require("xiaoqiang.util.XQDeviceUtil")
local dev = XQDeviceUtil.getDevNetStatisticsList()
local result = {}
result["code"] = 0
result["statistics"] = dev
LuciHttp.write_json(result)
end
function getDevStatistics()
local XQDeviceUtil = require("xiaoqiang.util.XQDeviceUtil")
local XQFunction = require("xiaoqiang.common.XQFunction")
local result = {}
local mac = LuciHttp.formvalue("mac")
local dict = XQDeviceUtil.getDevNetStatisticsDict()
local statistics = dict[XQFunction.macFormat(mac)]
result["code"] = 0
result["statistics"] = statistics
LuciHttp.write_json(result)
end
function getAutoWanType()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local XQPreference = require("xiaoqiang.XQPreference")
local XQConfigs = require("xiaoqiang.common.XQConfigs")
local result = {}
local code = 0
local wanType = XQLanWanUtil.getAutoWanType()
if wanType == false then
code = 1524
else
result["wanType"] = wanType
result["pppoeName"] = XQPreference.get(XQConfigs.PREF_PPPOE_NAME, "")
result["pppoePassword"] = XQPreference.get(XQConfigs.PREF_PPPOE_PASSWORD, "")
end
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
end
function getLanDhcp()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local result = {}
local lanDhcp = XQLanWanUtil.getLanDHCPService()
result["code"] = 0
result["info"] = lanDhcp
LuciHttp.write_json(result)
end
function getChannels()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local wifiIndex = tonumber(LuciHttp.formvalue("wifiIndex"))
local result = {}
result["code"] = 0
result["list"] = XQWifiUtil.getDefaultWifiChannels(wifiIndex)
LuciHttp.write_json(result)
end
function wanDown()
luci.sys.call("env -i /sbin/ifdown wan")
local result = {code=0}
LuciHttp.write_json(result)
end
function wanUp()
luci.sys.call("env -i /sbin/ifup wan")
local result = {code=0}
LuciHttp.write_json(result)
end
function setLanIp()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local XQFunction = require("xiaoqiang.common.XQFunction")
local LuciDatatypes = require("luci.cbi.datatypes")
local LuciIp = require("luci.ip")
local result = {}
local code = 0
local ip = LuciHttp.formvalue("ip")
local mask = "255.255.255.0"
local wanIp = XQLanWanUtil.getLanWanIp("wan")[1]
if not LuciDatatypes.ipaddr(ip) then
code = 1525
else
if wanIp then
local lanIpNl = LuciIp.iptonl(ip)
local lanMaskNl = LuciIp.iptonl(mask)
local wanIpNl = LuciIp.iptonl(wanIp.ip)
local wanMaskNl = LuciIp.iptonl(wanIp.mask)
if bit.band(lanIpNl,lanMaskNl) == bit.band(wanIpNl,lanMaskNl) or bit.band(lanIpNl,wanMaskNl) == bit.band(wanIpNl,wanMaskNl) then
code = 1526
else
code = XQLanWanUtil.checkLanIp(ip)
end
end
end
if code == 0 then
XQLanWanUtil.setLanIp(ip,mask)
else
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
if code == 0 then
LuciHttp.close()
XQFunction.forkReboot()
end
end
function setWan()
local XQLog = require("xiaoqiang.XQLog")
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local XQFunction = require("xiaoqiang.common.XQFunction")
local code = 0
local result = {}
local client = LuciHttp.formvalue("client")
local wanType = LuciHttp.formvalue("wanType")
local pppoeName = LuciHttp.formvalue("pppoeName")
local pppoePwd = LuciHttp.formvalue("pppoePwd")
local staticIp = LuciHttp.formvalue("staticIp")
local staticMask = LuciHttp.formvalue("staticMask")
local staticGateway = LuciHttp.formvalue("staticGateway")
local dns1 = LuciHttp.formvalue("dns1")
local dns2 = LuciHttp.formvalue("dns2")
local special = LuciHttp.formvalue("special")
local peerDns = LuciHttp.formvalue("peerDns")
local mtu = tonumber(LuciHttp.formvalue("mtu"))
local service = LuciHttp.formvalue("service")
if XQFunction.isStrNil(wanType)
and XQFunction.isStrNil(pppoeName)
and XQFunction.isStrNil(pppoePwd)
and XQFunction.isStrNil(staticIp)
and XQFunction.isStrNil(staticMask)
and XQFunction.isStrNil(staticGateway)
and XQFunction.isStrNil(dns1)
and XQFunction.isStrNil(dns2)
and XQFunction.isStrNil(special)
and XQFunction.isStrNil(peerDns) then
code = 1502
else
if wanType == "pppoe" then
if client == "web" then
XQLog.check(0, XQLog.KEY_VALUE_NETWORK_PPPOE, 1)
end
if XQFunction.isStrNil(pppoeName) or XQFunction.isStrNil(pppoePwd) then
code = 1528
else
if mtu and not XQLanWanUtil.checkMTU(mtu) then
code = 1590
else
if not XQLanWanUtil.setWanPPPoE(pppoeName, pppoePwd, dns1, dns2, peerDns, mtu, service) then
code = 1529
end
end
end
elseif wanType == "dhcp" then
if client == "web" then
XQLog.check(0, XQLog.KEY_VALUE_NETWORK_DHCP, 1)
end
if not XQLanWanUtil.setWanStaticOrDHCP(wanType, nil, nil, nil, dns1, dns2, peerDns, mtu) then
code = 1529
end
elseif wanType == "static" then
if client == "web" then
XQLog.check(0, XQLog.KEY_VALUE_NETWORK_STATIC, 1)
end
local LuciDatatypes = require("luci.cbi.datatypes")
local LuciIp = require("luci.ip")
if not LuciDatatypes.ipaddr(staticIp) then
code = 1530
elseif not XQFunction.checkMask(staticMask) then
code = 1531
elseif not LuciDatatypes.ipaddr(staticGateway) then
code = 1532
else
local lanIp = XQLanWanUtil.getLanWanIp("lan")[1]
local lanIpNl = LuciIp.iptonl(lanIp.ip)
local lanMaskNl = LuciIp.iptonl(lanIp.mask)
local wanIpNl = LuciIp.iptonl(staticIp)
local wanMaskNl = LuciIp.iptonl(staticMask)
if bit.band(lanIpNl,lanMaskNl) == bit.band(wanIpNl,lanMaskNl) or bit.band(lanIpNl,wanMaskNl) == bit.band(wanIpNl,wanMaskNl) then
code = 1526
else
code = XQLanWanUtil.checkWanIp(staticIp)
if code == 0 then
if not XQLanWanUtil.setWanStaticOrDHCP(wanType, staticIp, staticMask, staticGateway, dns1, dns2, peerDns, mtu) then
code = 1529
end
end
end
end
else
-- unknown type
end
end
result["code"] = code
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
LuciHttp.write_json(result)
end
function setLanDhcp()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local LuciDatatypes = require("luci.cbi.datatypes")
local XQFunction = require("xiaoqiang.common.XQFunction")
local code = 0
local result = {}
local startReq = tonumber(LuciHttp.formvalue("start"))
local endReq = tonumber(LuciHttp.formvalue("end"))
local leasetime = LuciHttp.formvalue("leasetime")
local ignore = LuciHttp.formvalue("ignore")
local num,unit = leasetime:match("^(%d+)(%S+)")
num = tonumber(num)
if ignore == "1" then
XQLanWanUtil.setLanDHCPService(nil,nil,nil,ignore)
else
if not LuciDatatypes.uinteger(startReq)
or not LuciDatatypes.integer(endReq)
or num == nil
or unit ~= "h" and unit ~= "m" then
code = 1537
else
if startReq > endReq then
code = 1534
elseif startReq <= 1 or endReq > 254 or endReq <= 1 or endReq >254 then
code = 1535
elseif (unit == "h" and (num < 1 or num > 48)) or (unit == "m" and (num < 2 or num > 2880)) then
code = 1536
else
XQLanWanUtil.setLanDHCPService(startReq,endReq,leasetime,ignore)
end
end
end
result["code"] = code
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
LuciHttp.write_json(result)
end
function setWanMac()
local XQLog = require("xiaoqiang.XQLog")
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local code = 0
local result = {}
local mac = LuciHttp.formvalue("mac")
local succeed = XQLanWanUtil.setWanMac(mac)
XQLog.check(0, XQLog.KEY_FUNC_MACCLONE, 1)
if not succeed then
code = 1537
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
result["code"] = code
LuciHttp.write_json(result)
end
function getWifiMacfilterInfo()
local LuciUtil = require("luci.util")
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local XQDeviceUtil = require("xiaoqiang.util.XQDeviceUtil")
local model = tonumber(LuciHttp.formvalue("model"))
local code = 0
local result = {}
local macfilterInfo = XQWifiUtil.getWiFiMacfilterInfo(model)
local wifiList = XQDeviceUtil.getConDevices(false)
result["enable"] = macfilterInfo.enable
result["model"] = macfilterInfo.model
if macfilterInfo.maclist then
for _, device in ipairs(wifiList) do
if LuciUtil.contains(macfilterInfo.maclist, device.mac) then
device.added = 1
else
device.added = 0
end
end
end
result["code"] = 0
result["list"] = wifiList
result["macfilter"] = macfilterInfo.maclist
LuciHttp.write_json(result)
end
function setWifiMacfilter()
local XQLog = require("xiaoqiang.XQLog")
local XQFunction = require("xiaoqiang.common.XQFunction")
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local enable = tonumber(LuciHttp.formvalue("enable")) == 1 and true or false
local model = tonumber(LuciHttp.formvalue("model"))
XQLog.check(0, XQLog.KEY_FUNC_WIRELESS_ACCESS, enable and 0 or 1)
if model and model == 0 then
XQLog.check(0, XQLog.KEY_FUNC_WIRELESS_BLACK, 1)
else
XQLog.check(0, XQLog.KEY_FUNC_WIRELESS_WHITE, 1)
end
XQWifiUtil.setWiFiMacfilterModel(enable, model)
local result = {["code"] = 0}
XQFunction.forkRestartWifi()
LuciHttp.write_json(result)
end
function editDevice()
local XQWifiUtil = require("xiaoqiang.util.XQWifiUtil")
local code = 0
local result = {}
local mac = LuciHttp.formvalue("mac")
local model = tonumber(LuciHttp.formvalue("model"))
local option = tonumber(LuciHttp.formvalue("option"))
local success = XQWifiUtil.editWiFiMacfilterList(model, mac, option)
if success and success == 1 then
code = 1591
end
result["code"] = code
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
LuciHttp.write_json(result)
end
function macBind()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local code = 0
local result = {}
local ip = LuciHttp.formvalue("ip")
local mac = LuciHttp.formvalue("mac")
local bind = XQLanWanUtil.addBind(mac, ip)
if bind == 1 then
code = 1593
elseif bind == 2 then
code = 1592
end
result["code"] = code
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
LuciHttp.write_json(result)
end
function macUnbind()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local code = 0
local result = {}
local mac = LuciHttp.formvalue("mac")
local unbind = XQLanWanUtil.removeBind(mac)
if not unbind then
code = 1594
end
result["code"] = code
if code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
LuciHttp.write_json(result)
end
function saveBind()
local XQFunction = require("xiaoqiang.common.XQFunction")
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local result = {
["code"] = 0
}
XQLanWanUtil.saveBindInfo()
XQFunction.forkRestartDnsmasq()
LuciHttp.write_json(result)
end
function unbindAll()
local XQFunction = require("xiaoqiang.common.XQFunction")
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local result = {
["code"] = 0
}
XQLanWanUtil.unbindAll()
XQFunction.forkRestartDnsmasq()
LuciHttp.write_json(result)
end
function getMacBindInfo()
local XQDeviceUtil = require("xiaoqiang.util.XQDeviceUtil")
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local result = {
["code"] = 0
}
local blist = {}
local bindInfo = XQLanWanUtil.macBindInfo()
local deviceList = XQDeviceUtil.getConDevices(true) or {}
for _, device in ipairs(deviceList) do
local bind = bindInfo[string.lower(device.mac)]
if bind then
device["tag"] = bind.tag
else
device["tag"] = 0
end
end
for _, host in pairs(bindInfo) do
table.insert(blist, {
["mac"] = string.upper(host.mac),
["ip"] = host.ip,
["tag"] = host.tag
})
end
result["list"] = blist
result["devicelist"] = deviceList
LuciHttp.write_json(result)
end
function pppoeStatus()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local code = 0
local result = {}
local status = XQLanWanUtil.getPPPoEStatus()
if status then
result = status
if result.errtype == 1 then
code = 1603
elseif result.errtype == 2 then
code = 1604
elseif result.errtype == 3 then
code = 1605
end
else
code = 1602
end
if code ~= 0 then
if code ~= 1602 then
result["msg"] = string.format("%s(%s)",XQErrorUtil.getErrorMessage(code), tostring(result.errcode))
else
result["msg"] = XQErrorUtil.getErrorMessage(code)
end
end
result["code"] = code
LuciHttp.write_json(result)
end
function pppoeStop()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local result = {
["code"] = 0
}
XQLanWanUtil.pppoeStop()
LuciHttp.write_json(result)
end
function pppoeStart()
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
local result = {
["code"] = 0
}
XQLanWanUtil.pppoeStart()
LuciHttp.write_json(result)
end
function getQosInfo()
local XQQoSUtil = require("xiaoqiang.util.XQQoSUtil")
local result = {
["code"] = 0
}
local status = XQQoSUtil.qosStatus()
result["status"] = status
if status.on == 1 then
result["band"] = XQQoSUtil.qosBand()
result["list"] = XQQoSUtil.qosList()
end
LuciHttp.write_json(result)
end
function qosSwitch()
local XQLog = require("xiaoqiang.XQLog")
local XQQoSUtil = require("xiaoqiang.util.XQQoSUtil")
local result = {
["code"] = 0
}
local on = tonumber(LuciHttp.formvalue("on")) == 1 and true or false
XQLog.check(0, XQLog.KEY_FUNC_QOS, on and 0 or 1)
local switch = XQQoSUtil.qosSwitch(on)
if not switch then
result.code = 1606
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function qosMode()
local XQQoSUtil = require("xiaoqiang.util.XQQoSUtil")
local result = {
["code"] = 0
}
local auto = tonumber(LuciHttp.formvalue("mode")) == 0 and true or false
local status = XQQoSUtil.qosStatus()
local switch
if status and status.on == 1 then
switch = XQQoSUtil.qosModeSwitch(auto)
else
result.code = 1607
end
if not switch and result.code == 0 then
result.code = 1606
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
-- level : 1/2/3 low/middle/high
-- upload : 1 ~ 100
-- download : 1 ~ 100
function qosLimit()
local XQQoSUtil = require("xiaoqiang.util.XQQoSUtil")
local result = {
["code"] = 0
}
local mac = LuciHttp.formvalue("mac")
local upload = tonumber(LuciHttp.formvalue("upload"))
local download = tonumber(LuciHttp.formvalue("download"))
local level = tonumber(LuciHttp.formvalue("level"))
local limit
local status = XQQoSUtil.qosStatus()
if status and status.on == 1 then
if mac and upload and download and level then
limit = XQQoSUtil.qosOnLimit(mac, upload/100, download/100, level, level)
else
result.code = 1523
end
else
result.code = 1607
end
if not limit and result.code == 0 then
result.code = 1606
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function qosOffLimit()
local XQQoSUtil = require("xiaoqiang.util.XQQoSUtil")
local result = {
["code"] = 0
}
local mac = LuciHttp.formvalue("mac")
local status = XQQoSUtil.qosStatus()
local offlimit
if status and status.on == 1 then
offlimit = XQQoSUtil.qosOffLimit(mac)
else
result.code = 1607
end
if not offlimit and result.code == 0 then
result.code = 1606
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
-- upload/download M bits/s
function setBand()
local XQQoSUtil = require("xiaoqiang.util.XQQoSUtil")
local result = {
["code"] = 0
}
local upload = tonumber(LuciHttp.formvalue("upload"))
local download = tonumber(LuciHttp.formvalue("download"))
local band
local status = XQQoSUtil.qosStatus()
if upload and download then
if status and status.on == 1 then
band = XQQoSUtil.setQosBand(upload, download)
else
result.code = 1607
end
else
result.code = 1523
end
if not band and result.code == 0 then
result.code = 1606
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function portForward()
local XQPortForward = require("xiaoqiang.module.XQPortForward")
local result = {
["code"] = 0
}
local ftype = tonumber(LuciHttp.formvalue("ftype")) or 0
result["status"] = XQPortForward.portForwardInfo().status
result["list"] = XQPortForward.portForwards(ftype)
LuciHttp.write_json(result)
end
function addRedirect()
local XQLog = require("xiaoqiang.XQLog")
local XQPortForward = require("xiaoqiang.module.XQPortForward")
local result = {
["code"] = 0
}
local ip = LuciHttp.formvalue("ip")
local name = LuciHttp.formvalue("name")
local proto = tonumber(LuciHttp.formvalue("proto"))
local sport = tonumber(LuciHttp.formvalue("sport"))
local dport = tonumber(LuciHttp.formvalue("dport"))
local add = XQPortForward.setPortForward(name, ip, sport, dport, proto)
XQLog.check(0, XQLog.KEY_FUNC_PORTFADD, 1)
if add == 1 then
result.code = 1537
elseif add == 2 then
result.code = 1608
elseif add == 3 then
result.code = 1609
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function addRangeRedirect()
local XQLog = require("xiaoqiang.XQLog")
local XQPortForward = require("xiaoqiang.module.XQPortForward")
local result = {
["code"] = 0
}
local ip = LuciHttp.formvalue("ip")
local name = LuciHttp.formvalue("name")
local proto = tonumber(LuciHttp.formvalue("proto"))
local fport = tonumber(LuciHttp.formvalue("fport"))
local tport = tonumber(LuciHttp.formvalue("tport"))
local add = XQPortForward.setRangePortForward(name, ip, fport, tport, proto)
XQLog.check(0, XQLog.KEY_FUNC_RANGEFADD, 1)
if add == 1 then
result.code = 1537
elseif add == 2 then
result.code = 1608
elseif add == 3 then
result.code = 1609
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function deleteRedirect()
local XQPortForward = require("xiaoqiang.module.XQPortForward")
local result = {
["code"] = 0
}
local port = tonumber(LuciHttp.formvalue("port")) or 0
if port == 0 then
XQPortForward.deleteAllPortForward()
else
XQPortForward.deletePortForward(port)
end
LuciHttp.write_json(result)
end
function redirectApply()
local XQLog = require("xiaoqiang.XQLog")
local XQPortForward = require("xiaoqiang.module.XQPortForward")
local result = {
["code"] = 0
}
XQLog.check(0, XQLog.KEY_FUNC_PORTENABLE, 1)
XQPortForward.restart()
LuciHttp.write_json(result)
end
function getDMZInfo()
local XQDMZModule = require("xiaoqiang.module.XQDMZModule")
local result = {
["code"] = 0
}
local info = XQDMZModule.getDMZInfo()
result["status"] = info.status
result["ip"] = info.ip
result["lanip"] = info.lanip
LuciHttp.write_json(result)
end
function setDMZ()
local XQLog = require("xiaoqiang.XQLog")
local XQDMZModule = require("xiaoqiang.module.XQDMZModule")
local result = {
["code"] = 0
}
local ip = LuciHttp.formvalue("ip")
local mac = LuciHttp.formvalue("mac")
local mode = tonumber(LuciHttp.formvalue("mode")) or 0
local set = XQDMZModule.setDMZ(mode, ip, mac)
if set == 1 then
result.code = 1593
elseif set == 2 then
result.code = 1592
elseif set == 3 then
result.code = 1611
elseif set == 4 then
result.code = 1610
end
XQLog.check(0, XQLog.KEY_FUNC_DMZ, 0)
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
else
XQDMZModule.dmzReload(mode)
end
LuciHttp.write_json(result)
end
function closeDMZ()
local XQLog = require("xiaoqiang.XQLog")
local XQDMZModule = require("xiaoqiang.module.XQDMZModule")
local result = {
["code"] = 0
}
local mode = tonumber(LuciHttp.formvalue("mode")) or 0
XQLog.check(0, XQLog.KEY_FUNC_DMZ, 1)
XQDMZModule.unsetDMZ(mode)
LuciHttp.write_json(result)
end
function reloadDMZ()
local XQDMZModule = require("xiaoqiang.module.XQDMZModule")
local result = {
["code"] = 0
}
local mode = tonumber(LuciHttp.formvalue("mode")) or 0
XQDMZModule.dmzReload(mode)
LuciHttp.write_json(result)
end
function ddnsStatus()
local XQDDNS = require("xiaoqiang.module.XQDDNS")
local result = {
["code"] = 0
}
local ddns = XQDDNS.ddnsInfo()
result["on"] = ddns.on
result["list"] = ddns.list
LuciHttp.write_json(result)
end
function ddnsSwitch()
local XQDDNS = require("xiaoqiang.module.XQDDNS")
local result = {
["code"] = 0
}
local on = tonumber(LuciHttp.formvalue("on")) == 1 and true or false
XQDDNS.ddnsSwitch(on)
LuciHttp.write_json(result)
end
function addServer()
local XQDDNS = require("xiaoqiang.module.XQDDNS")
local result = {
["code"] = 0
}
local id = tonumber(LuciHttp.formvalue("id"))
local enable = tonumber(LuciHttp.formvalue("enable")) == 1 and 1 or 0
local domain = LuciHttp.formvalue("domain") or ""
local username = LuciHttp.formvalue("username") or ""
local password = LuciHttp.formvalue("password") or ""
local checkinterval = tonumber(LuciHttp.formvalue("checkinterval"))
local forceinterval = tonumber(LuciHttp.formvalue("forceinterval"))
if not id or not checkinterval or not forceinterval then
result.code = 1612
elseif checkinterval <= 0 or forceinterval <= 0 then
result.code = 1523
else
local add = XQDDNS.setDdns(id, enable, username, password, checkinterval, forceinterval, domain)
if not add then
result.code = 1606
end
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function deleteServer()
local XQDDNS = require("xiaoqiang.module.XQDDNS")
local result = {
["code"] = 0
}
local id = tonumber(LuciHttp.formvalue("id"))
if not id then
result.code = 1612
else
local delete = XQDDNS.deleteDdns(id)
if not delete then
result.code = 1606
end
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function serverSwitch()
local XQDDNS = require("xiaoqiang.module.XQDDNS")
local result = {
["code"] = 0
}
local id = tonumber(LuciHttp.formvalue("id"))
local on = tonumber(LuciHttp.formvalue("on")) == 1 and true or false
if not id then
result.code = 1612
else
local switch = XQDDNS.ddnsServerSwitch(id, on)
if not switch then
result.code = 1606
end
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function ddnsReload()
local XQDDNS = require("xiaoqiang.module.XQDDNS")
local result = {
["code"] = 0
}
if not XQDDNS.reload() then
result.code = 1606
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function getServer()
local XQDDNS = require("xiaoqiang.module.XQDDNS")
local result = {}
local id = tonumber(LuciHttp.formvalue("id"))
local get = XQDDNS.getDdns(id)
if get then
result = get
result["code"] = 0
else
result["code"] = 1614
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end
function ddnsEdit()
local XQDDNS = require("xiaoqiang.module.XQDDNS")
local result = {
["code"] = 0
}
local id = tonumber(LuciHttp.formvalue("id"))
local enable = tonumber(LuciHttp.formvalue("enable")) == 1 and 1 or 0
local domain = LuciHttp.formvalue("domain")
local username = LuciHttp.formvalue("username")
local password = LuciHttp.formvalue("password")
local checkinterval = tonumber(LuciHttp.formvalue("checkinterval"))
local forceinterval = tonumber(LuciHttp.formvalue("forceinterval"))
local edit = XQDDNS.editDdns(id, enable, username, password, checkinterval, forceinterval, domain)
if not edit then
result.code = 1606
end
if result.code ~= 0 then
result["msg"] = XQErrorUtil.getErrorMessage(result.code)
end
LuciHttp.write_json(result)
end