Add some more datatype checks, patch by Eugene C., #499
[project/luci.git] / applications / luci-qos / luasrc / model / cbi / qos / qosmini.lua
index db6fa9c..0c5766f 100644 (file)
@@ -12,59 +12,76 @@ You may obtain a copy of the License at
 
 $Id$
 ]]--
+
+local wa = require "luci.tools.webadmin"
+local fs = require "nixio.fs"
+
 m = Map("qos")
 
-s = m:section(NamedSection, "wan", "interface", translate("m_n_inet"))
+s = m:section(NamedSection, "wan", "interface", translate("Internet Connection"))
+
+s:option(Flag, "enabled", translate("Quality of Service"))
+
+dl = s:option(Value, "download", translate("Downlink"), "kbit/s")
+dl.datatype = "and(uinteger,min(1))"
 
-s:option(Flag, "enabled", translate("qos"))
-s:option(Value, "download", translate("qos_interface_download"), "kb/s")
-s:option(Value, "upload", translate("qos_interface_upload"), "kb/s")
+ul = s:option(Value, "upload", translate("Uplink"), "kbit/s")
+ul.datatype = "and(uinteger,min(1))"
 
 s = m:section(TypedSection, "classify")
+s.template = "cbi/tblsection"
 
 s.anonymous = true
 s.addremove = true
+s.sortable  = true
 
 t = s:option(ListValue, "target")
-t:value("Priority", translate("qos_priority"))
-t:value("Express", translate("qos_express"))
-t:value("Normal", translate("qos_normal"))
-t:value("Bulk", translate("qos_bulk"))
+t:value("Priority", translate("priority"))
+t:value("Express", translate("express"))
+t:value("Normal", translate("normal"))
+t:value("Bulk", translate("low"))
 t.default = "Normal"
 
-s:option(Value, "srchost").optional = true
-s:option(Value, "dsthost").optional = true
+srch = s:option(Value, "srchost")
+srch.rmempty = true
+srch:value("", translate("all"))
+wa.cbi_add_knownips(srch)
 
-l7 = s:option(ListValue, "layer7", translate("service"))
-l7.optional = true
-l7:value("")
-local pats = luci.fs.dir("/etc/l7-protocols")
+dsth = s:option(Value, "dsthost")
+dsth.rmempty = true
+dsth:value("", translate("all"))
+wa.cbi_add_knownips(dsth)
+
+l7 = s:option(ListValue, "layer7", translate("Service"))
+l7.rmempty = true
+l7:value("", translate("all"))
+
+local pats = io.popen("find /etc/l7-protocols/ -type f -name '*.pat'")
 if pats then
-       for i,f in ipairs(pats) do
-               if f:sub(-4) == ".pat" then
-                       l7:value(f:sub(1, #f-4))
+       local l
+       while true do
+               l = pats:read("*l")
+               if not l then break end
+
+               l = l:match("([^/]+)%.pat$")
+               if l then
+                       l7:value(l)
                end
        end
+       pats:close()
 end
 
-p2p = s:option(ListValue, "ipp2p", "P2P")
-p2p:value("")
-p2p:value("all", translate("all"))
-p2p:value("bit", "BitTorrent")
-p2p:value("dc", "DirectConnect")
-p2p:value("edk", "eDonkey")
-p2p:value("gnu", "Gnutella")
-p2p:value("kazaa", "Kazaa")
-p2p.optional = true
-
-p = s:option(ListValue, "proto", translate("protocol"))
-p:value("")
+p = s:option(ListValue, "proto", translate("Protocol"))
+p:value("", translate("all"))
 p:value("tcp", "TCP")
 p:value("udp", "UDP")
 p:value("icmp", "ICMP")
-p.optional = true
+p.rmempty = true
+
+ports = s:option(Value, "ports", translate("Ports"))
+ports.rmempty = true
+ports:value("", translate("allf", translate("all")))
 
-s:option(Value, "ports", translate("port")).optional = true
-s:option(Value, "portrange").optional = true
+bytes = s:option(Value, "connbytes", translate("qos_connbytes"))
 
-return m
\ No newline at end of file
+return m