diff options
Diffstat (limited to 'applications/luci-app-olsr-services')
3 files changed, 231 insertions, 0 deletions
diff --git a/applications/luci-app-olsr-services/Makefile b/applications/luci-app-olsr-services/Makefile new file mode 100644 index 0000000000..b1daf6daad --- /dev/null +++ b/applications/luci-app-olsr-services/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Show services announced with the nameservice plugin +LUCI_DEPENDS:=+luci-app-olsr +olsrd +olsrd-mod-nameservice + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/applications/luci-app-olsr-services/luasrc/controller/services.lua b/applications/luci-app-olsr-services/luasrc/controller/services.lua new file mode 100644 index 0000000000..a4636bfd57 --- /dev/null +++ b/applications/luci-app-olsr-services/luasrc/controller/services.lua @@ -0,0 +1,16 @@ +module "luci.controller.services" + +function index() + local uci = require "luci.model.uci".cursor() + + uci:foreach("olsrd", "LoadPlugin", function(s) + if s.library == "olsrd_nameservice.so.0.3" then + has_serv = true + end + end) + + if has_serv then + entry({"freifunk", "services"}, template("freifunk-services/services"), _("Services"), 60) + end +end + diff --git a/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm b/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm new file mode 100644 index 0000000000..fbb39de884 --- /dev/null +++ b/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm @@ -0,0 +1,201 @@ +<%# +LuCI - Lua Configuration Interface + +Copyright 2011 Manuel Munz <freifunk at somakoma dot de> + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +-%> + +<% +local fs = require "luci.fs" +local utl = require "luci.util" +local last_update +local i = 1 +local rawdata +local rawdata6 +local services_file_empty = true +local has_services = false +local uci = require "luci.model.uci".cursor() +local ip = require "luci.ip" + +uci:foreach("olsrd", "LoadPlugin", function(s) + if s.library == "olsrd_nameservice.so.0.3" then + local services_file=s.services_file + if services_file and fs.access(services_file) then + has_services = true + rawdata = fs.readfile(s.services_file) + else + services_file="/var/run/services_olsr" + if fs.access(services_file) then + has_services = true + rawdata = fs.readfile(services_file) + end + end + services_file=services_file..".ipv6" + if services_file and fs.access(services_file) then + has_services = true + rawdata6 = fs.readfile(services_file) + else + services_file="/var/run/services_olsr.ipv6" + if fs.access(services_file) then + has_services = true + rawdata6 = fs.readfile(services_file) + end + end + if rawdata and #rawdata ~= 0 then + services_file_empty = nil + end + if rawdata6 and #rawdata6 ~= 0 then + services_file_empty = nil + end + end +end) + + +if not has_services or services_file_empty then +%> + <%+header%> + <br /> + <%:No services can be shown, because olsrd is not running or the olsrd-nameservice Plugin is not loaded.%> + <%+footer%> +<% + return +end + +function fetch_services() + local tables = {} + if rawdata and #rawdata ~= 0 then + tables = utl.split(utl.trim(rawdata), "\n", nil, true) + -- remove first 3 lines + for i = 1,3 do + table.remove(tables,1) + end + end + local tables6 = {} + if rawdata6 and #rawdata6 ~= 0 then + tables6 = utl.split(utl.trim(rawdata6), "\n", nil, true) + -- remove first 3 lines + for i = 1,3 do + table.remove(tables6,1) + end + end + + -- store last line in last_update and remove it, then remove another empty line at the end + last_update=table.remove(tables) + table.remove(tables) + last_update=table.remove(tables6) + table.remove(tables6) + for k, v in ipairs(tables6) do + table.insert(tables, v) + end + return tables +end +local services = fetch_services() + +if luci.http.formvalue("status") == "1" then + local rv = {} + for k, line in ipairs(services) do + local field = utl.split(line, "[#|]", split, true) + local origin_lnk = ip.IPv6(pcdata(field[4])) or "" + local origin_link = "" + if #origin_lnk ~= 0 and origin_lnk:is6() then + origin_link = "["..origin_lnk:string().."]" + else + origin_link = pcdata(field[4]) + end + local url, proto, descr, origin = pcdata(field[1]), pcdata(field[2]), utl.trim(pcdata(field[3])), pcdata(field[4]) + rv[#rv+1] = { + url = url, + proto = proto, + origin = origin, + origin_link = origin_link, + descr = descr, + } + end + luci.http.prepare_content("application/json") + luci.http.write_json(rv) + return +end + +%> + +<%+header%> + +<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript">//<![CDATA[ + + XHR.poll(10 , '<%=REQUEST_URI%>', { status: 1 }, + function(x, info) + { + var tbody = document.getElementById('olsr_services'); + if (tbody) + { + var s = ''; + for (var idx = 0; idx < info.length; idx++) + { + var service = info[idx]; + s += String.format( + '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+'">' + + '<td class="cbi-section-table-titles"><a href="%s">%s</a></td>' + + '<td class="cbi-section-table-titles">%s</td>' + + '<td class="cbi-section-table-titles"><a href="http://%s/cgi-bin-status.html">%s</a></td>' + + '</tr>', + service.url, service.descr, service.proto, service.origin_link, service.origin || '?' + ); + } + tbody.innerHTML = s; + } + } + ); +//]]></script> + + + + + <h2><a id="content" name="content"><%:Services%></a></h2> + + <fieldset class="cbi-section"> + <legend><%:Internal services%></legend> + <table class="cbi-section-table"> + <thead> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell"><%:Url%></th> + <th class="cbi-section-table-cell"><%:Protocol%></th> + <th class="cbi-section-table-cell"><%:Source%></th> + </tr> + </thead> + + <tbody id="olsr_services"> + <% + for k, line in ipairs(services) do + local field = {} + -- split line at # and |, 1=url, 2=proto, 3=description, 4=source + local field = utl.split(line, "[#|]", split, true) + local origin_lnk = ip.IPv6(pcdata(field[4])) or "" + local origin_link + if #origin_lnk ~= 0 and origin_lnk:is6() then + origin_link = "["..origin_lnk:string().."]" + else + origin_link = pcdata(field[4]) + end + local url, proto, descr, origin = pcdata(field[1]), pcdata(field[2]), utl.trim(pcdata(field[3])), pcdata(field[4]) + %> + + <tr class="cbi-section-table-row cbi-rowstyle-<%=i%>"> + <td class="cbi-section-table-titles"><a href="<%=url%>"><%=descr%></a></td> + <td class="cbi-section-table-titles"><%=proto%></td> + <td class="cbi-section-table-titles"><a href="http://<%=origin_link%>/cgi-bin-status.html"><%=origin%></a></td> + </tr> + <% i = ((i % 2) + 1) + end %> + </tbody> + </table> + <br /> + <%=last_update%> + </fieldset> +<%+footer%> |