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