Compare commits

...
5 Commits
Author SHA1 Message Date
github-actions[bot] d0f52bd3f5 🔥 Sync 2026-09-04 23:41:24
Merge-upstream / merge (push) Canceled after 0s
2026-09-04 23:41:24 +08:00
github-actions[bot] 25ff979f91 🦄 Sync 2026-09-04 16:01:59 2026-09-04 16:01:59 +08:00
kiddin9 f2af90562f Update upstream.yml 2026-09-04 15:59:54 +08:00
kiddin9 cac0bc6d4c Update upstream.yml 2026-09-04 15:51:26 +08:00
kiddin9 1f194cfbed Update upstream.yml 2026-09-04 15:47:00 +08:00
162 changed files with 1108 additions and 5347 deletions
+1 -3
View File
@@ -270,7 +270,7 @@ jobs:
git_clone https://github.com/gSpotx2f/luci-app-interfaces-statistics
git_clone https://github.com/gSpotx2f/luci-app-cpu-status-mini
git_clone https://github.com/gSpotx2f/luci-app-cpu-status
git_clone https://github.com/Carseason/openwrt-packages Carseason1 && mv -n Carseason1/*/* ./;mv services/* ./;rm -rf Carseason1 services
git_clone https://github.com/Carseason/openwrt-packages Carseason1 && mv -n Carseason1/*/* ./;rm -rf Carseason1
git_clone https://github.com/Carseason/openwrt-themedog && mv -n openwrt-themedog/luci/* ./;rm -rf openwrt-themedog
git_clone https://github.com/Carseason/openwrt-app-actions Carseason2 && mv -n Carseason2/applications/* ./;rm -rf Carseason2
git_clone https://github.com/Thaolga/openwrt-nekobox && mv openwrt-nekobox/luci-* ./;rm -rf openwrt-nekobox
@@ -378,8 +378,6 @@ jobs:
package/utils/mhz package/utils/pcat-manager
) &
(
npx --yes degit 'dibdot/luci/applications/luci-app-shunt#luci-app-shunt-pr' luci-app-shunt
npx --yes degit 'dibdot/packages/net/shunt#shunt-pr' shunt
git_sparse_clone master "https://github.com/x-wrt/com.x-wrt" luci-app-macvlan luci-app-xwan
# git_sparse_clone master "https://github.com/obsy/packages" oscam luci-proto-wwan 3ginfo
git_sparse_clone istoreos-24.10 "https://github.com/jjm2473/packages" utils/dockerd
-121
View File
@@ -1,121 +0,0 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=3ginfo
PKG_VERSION:=20260425
PKG_RELEASE:=3
include $(INCLUDE_DIR)/package.mk
define Package/3ginfo/Default
SECTION:=net
CATEGORY:=Network
TITLE:=Information about the status of the 3G/4G/5G modem
MAINTAINER:=Cezary Jackiewicz <cezary@eko.one.pl>
PKGARCH:=all
endef
define Package/3ginfo-old
$(call Package/3ginfo/Default)
DEPENDS:=+3ginfo-text-old +uhttpd
endef
define Package/3ginfo-lite
$(call Package/3ginfo/Default)
TITLE+= (lite version)
DEPENDS:=+comgt +@BUSYBOX_DEFAULT_AWK
endef
define Package/3ginfo-qmisignal
$(call Package/3ginfo/Default)
TITLE+= (qmi signal)
DEPENDS:=+uqmi +uhttpd
endef
define Package/3ginfo-text-old
$(call Package/3ginfo/Default)
TITLE+= (text version)
DEPENDS:=+comgt
endef
define Package/3ginfo-text-old/conffiles
/etc/config/3ginfo
endef
define Package/3ginfo
$(call Package/3ginfo/Default)
DEPENDS:=+3ginfo-text +uhttpd
endef
define Package/3ginfo-text
$(call Package/3ginfo/Default)
TITLE+= (text version)
DEPENDS:=+comgt +sms-tool +modemdata
endef
define Package/3ginfo-text/conffiles
/etc/config/3ginfo
endef
define Build/Compile
endef
define Package/3ginfo-old/install
$(CP) ./files-html-old/* $(1)
endef
define Package/3ginfo-lite/install
$(CP) ./files-lite/* $(1)
$(CP) ./files-text-old/usr/share/3ginfo/mccmnc.dat $(1)/usr/share/3ginfo-lite
$(CP) ./files-text-old/usr/share/3ginfo/scripts/probeport.gcom $(1)/usr/share/3ginfo-lite
endef
define Package/3ginfo-qmisignal/install
$(CP) ./files-qmisignal/* $(1)
$(FIND) $(1) -type f -name '*.js' | while read src; do \
uglifyjs "$$$$src" -o "$$$$src".1 && \
mv "$$$$src".1 "$$$$src" || true; \
done
endef
define Package/3ginfo-text-old/install
$(CP) ./files-text-old/* $(1)
endef
define Package/3ginfo-text-old/postinst
#!/bin/sh
[ -n "$${IPKG_INSTROOT}" ] || {
ln -sf /usr/share/3ginfo/cgi-bin/3ginfo.sh /usr/bin/3ginfo
}
exit 0
endef
define Package/3ginfo/install
$(CP) ./files-html/* $(1)
$(SED) 's/?v=1/?v='${PKG_VERSION}'/g' $(1)/usr/share/3ginfo/html/index.html
$(SED) 's/^\t*//g;s/^\s*//g;/^$$$$/d' $(1)/usr/share/3ginfo/html/index.html
$(FIND) $(1) -type f -name '*.js' | while read src; do \
uglifyjs "$$$$src" -o "$$$$src".1 && \
mv "$$$$src".1 "$$$$src" || true; \
done
$(FIND) $(1) -type f -name '*.css' | while read src; do \
cleancss "$$$$src" -o "$$$$src".1 && \
mv "$$$$src".1 "$$$$src" || true; \
done
endef
define Package/3ginfo-text/install
$(CP) ./files-text/* $(1)
endef
$(eval $(call BuildPackage,3ginfo-old))
$(eval $(call BuildPackage,3ginfo-lite))
$(eval $(call BuildPackage,3ginfo-qmisignal))
$(eval $(call BuildPackage,3ginfo-text-old))
$(eval $(call BuildPackage,3ginfo))
$(eval $(call BuildPackage,3ginfo-text))
-11
View File
@@ -1,11 +0,0 @@
#!/bin/sh /etc/rc.common
# (c) 2010-2019 Cezary Jackiewicz <cezary@eko.one.pl>
START=99
start () {
PORT=$(uci -q get 3ginfo.@3ginfo[0].http_port)
[ -z $PORT ] && { PORT=81; }
uhttpd -c /usr/share/3ginfo/uhttpd.conf -h /usr/share/3ginfo/ -p 0.0.0.0:$PORT > /dev/null 2>&1
}
@@ -1,19 +0,0 @@
#!/bin/sh
DEVICE=$(uci get 3ginfo.@3ginfo[0].device)
SCRIPT=$(uci get 3ginfo.@3ginfo[0].script)
echo -e "Content-type: text/html\n\n"
if [ -e scripts/$SCRIPT.sh ]; then
sh scripts/$SCRIPT.sh
elif [ -e scripts/$SCRIPT.gcom ]; then
if ! pidof gcom > /dev/null; then
O=$(gcom -d $DEVICE -s scripts/$SCRIPT.gcom)
echo "<div class=\"c\">$O</div>"
else
echo "<div class=\"c\">Brak możliwości sprawdzenia limitu. Spróbuj za chwilę.</div>"
fi
else
echo "<div class=\"c\"><font color=red>Brak skryptu $SCRIPT</font></div>"
fi
echo "<div class=\"c\"><input type=\"button\" class=\"button\" value=\"Wróć\" onclick=\"trzyginfo('cgi-bin/3ginfo.sh');\"></div>"
@@ -1,17 +0,0 @@
#!/bin/sh
SEC=$(uci -q get 3ginfo.@3ginfo[0].network)
[ -z "$SEC" ] && exit 0
ALLOW=$(uci -q get 3ginfo.@3ginfo[0].connect_button)
[ "x$ALLOW" = "x0" ] && exit 0
UP=$(ifstatus $SEC | grep "\"up\": true")
if [ -n "$UP" ]; then
ifdown $SEC > /dev/null 2>&1
else
ifup $SEC > /dev/null 2>&1
fi
sleep 3
exit 0
@@ -1,6 +0,0 @@
#!/bin/sh
D=$(uci -q get 3ginfo.@3ginfo[0].device)
echo -e "Content-type: text/html\n\n"
if [ -e $D ]; then
gcom -d $D sig | sed -e 's/ /,/g'
fi
@@ -1,96 +0,0 @@
#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "
<html>
<style type=\"text/css\">
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
#centered {
width: 800px;
margin: auto;
text-align: center;
}
.label {
text-align: left;
}
.text {
width: 100%;
}
pre {
text-align: left;
}
</style>
<head>
<title>SMS</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
</head>
<body>
"
if [ "$REQUEST_METHOD" = POST ]; then
read -t 3 QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
action=`uhttpd -d $action 2>/dev/null`
tel=`uhttpd -d $msisdn 2>/dev/null`
msg=`uhttpd -d $msg 2>/dev/null`
id=`uhttpd -d $id 2>/dev/null`
else
action="x"
fi
case "$action" in
send)
echo "[global]" > /tmp/gnokiirc
echo "model = AT" >> /tmp/gnokiirc
echo "port = "$(uci get 3ginfo.@3ginfo[0].device) >> /tmp/gnokiirc
echo "connection = serial" >> /tmp/gnokiirc
echo "$msg" | tr '+' ' ' | gnokii --config /tmp/gnokiirc --sendsms $tel 2>/dev/null
R=$?
if [ $R -eq 0 ]; then
echo "Wysłano wiadomość do $tel!<br />"
else
echo "<font color=red><strong>Wystąpił problem z wysłaniem wiadomości!</strong></font><br />"
fi
echo $tel": "$msg >> /tmp/sms.txt
rm /tmp/gnokiirc
;;
delete)
echo "[global]" > /tmp/gnokiirc
echo "model = AT" >> /tmp/gnokiirc
echo "port = "$(uci get 3ginfo.@3ginfo[0].device) >> /tmp/gnokiirc
echo "connection = serial" >> /tmp/gnokiirc
gnokii --config /tmp/gnokiirc --deletesms SM $id 2>/dev/null
rm /tmp/gnokiirc
;;
esac
echo "
<form method=\"post\">
<input type=\"hidden\" name=\"action\" id=\"action\" value=\"send\">
<div class=label>Numer telefonu:</div><input name=\"msisdn\" class=text><br />
<div class=label>Wiadomość:</div><textarea name=\"msg\" class=text></textarea><br /><br />
<input type=\"submit\" name=\"submit\" value=\"Wyślij\" text-align=center>
</form>
"
echo "[global]" > /tmp/gnokiirc
echo "model = AT" >> /tmp/gnokiirc
echo "port = "$(uci get 3ginfo.@3ginfo[0].device) >> /tmp/gnokiirc
echo "connection = serial" >> /tmp/gnokiirc
echo "<pre>"
gnokii --config /tmp/gnokiirc --getsms SM 0 end 2>/dev/null | \
sed -e ' \
s/ (unread)/<\/pre><font color=green><strong>Nowa wiadomość<\/strong><\/font><pre>/g; \
s/Msg Center.*//g; \
s/(read)//g; \
s/^Sender/Nadawca/g;s/Date\/time/Data\/czas/g; \
s/^Text:/Treść wiadomości:<\/pre><pre style="white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;">/g; \
s/\(^[0-9]*\)..Inbox Message/<\/pre><hr \/><form style="text-align: left;" method="post"><input type="hidden" name="action" id="action" value="delete"><input type="hidden" name="id" id="id" value="\1"><input type="submit" name="submit" value="Usuń"><\/form><pre>/g'
rm /tmp/gnokiirc
echo "</pre>
</div>
</body></html>"
@@ -1,55 +0,0 @@
#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "
<html>
<style type=\"text/css\">
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
}
#centered {
width: 800px;
margin: auto;
text-align: center;
}
.label {
text-align: left;
}
.text {
width: 100%;
}
pre {
text-align: left;
}
</style>
<head>
<title>USSD</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
</head>
<body>
"
if [ "$REQUEST_METHOD" = POST ]; then
read -t 3 QUERY_STRING
eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
action=`uhttpd -d $action`
ussd=`uhttpd -d $ussd`
else
action="x"
fi
case "$action" in
send)
A=$(ussd159 -p $(uci get 3ginfo.@3ginfo[0].device) -t 30 -u "$ussd")
echo "Odpowiedź: $A<br /><br />"
;;
esac
echo "
<form method=\"post\">
<input type=\"hidden\" name=\"action\" id=\"action\" value=\"send\">
<div class=label>USSD:</div><input name=\"ussd\" class=text><br />
<input type=\"submit\" name=\"submit\" value=\"Wyślij\" text-align=center>
</form>
</div>
</body></html>"
@@ -1,75 +0,0 @@
<html>
<style type="text/css">
body {font-family: Verdana, Arial, Helvetica, sans-serif;}
.button {width:150px;}
a:link {text-decoration:none;color:blue;}
a:visited {text-decoration:none;color:blue;}
a:active {text-decoration:none;color:blue;}
a:hover {text-decoration:underline;color:blue;}
.c {margin:auto;text-align:center;clear:both;}
.l {width:39%;clear:both;float:left;text-align:right;}
.r {width:59%;float:right; text-align:left;}
</style>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>3G/4G</title>
<script language="javascript" type="text/javascript">
function detailson() {
document.getElementById('details').style.display = "inline";
document.getElementById('details_on').style.display = "none";
document.getElementById('details_off').style.display = "inline";
}
function detailsoff() {
document.getElementById('details').style.display = "none";
document.getElementById('details_on').style.display = "inline";
document.getElementById('details_off').style.display = "none";
}
function trzyginfo(zrodlo, reload) {
var a;
try {a = new XMLHttpRequest();} catch (e) {
try {a = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {
try {a = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {
alert("Coś stara ta przelądarka...");
return false;
}
}
}
document.getElementById('loader').style.display = "block";
document.getElementById('zawartosc').innerHTML = "";
a.open("GET", zrodlo);
a.onreadystatechange = function() {
if (a.readyState == 4) {
document.getElementById('loader').style.display = "none";
document.getElementById('zawartosc').innerHTML = a.responseText;
if (reload == 1) {
location.reload(true);
}
}
}
a.send(null);
}
</script>
</head>
<body onload="trzyginfo('cgi-bin/3ginfo.sh',0);">
<table style='width:100%;height:100%;'>
<tr><td colspan=3 style='height:100px;'>&nbsp;</td></tr>
<tr>
<td>&nbsp;</td>
<td style='width:600px; height:200px;'>
<div id='zawartosc'></div>
<div id='loader' style="text-align:center;display:block;"><img src="loader.gif"></div>
</td>
<td>&nbsp;</td>
</tr>
<tr><td colspan=3>&nbsp;</td></tr>
</table>
</body></html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

@@ -1,9 +0,0 @@
#!/bin/sh
O=$(wget -q -c http://www.cyfrowypolsat.pl/internet/biezace-zuzycie/ -O -)
O1=$(echo "$O" | sed -n '/Okres rozliczeniowy/,/_idJsp27/p' | tr -d '\n' | sed -e 's/\t//g;s/ */ /g;s/.*\(<span class="bolder">Okres.*\)\(<br><br><span\).*/\1/' | tr '\277\363\263\346\352\266\261\274\361' zolcesazn | tr '\241\306\312\243\321\323\246\257\254' ACELNOSZZ)
if [ -z "$O1" ]; then
echo "<div class=\"c\">Brak możliwości sprawdzenia limitu.</div>"
else
echo "$O1"
fi
@@ -1,31 +0,0 @@
pdu2txt() {
# pobrany z https://forum.openwrt.org/viewtopic.php?pid=158891#p158891
data1=$(echo $1 | sed -e 's/.\{2\}/&\ /g')
ret=''
shift=0
carry=0
for byte in $data1; do
if [ $shift -eq 7 ]; then
ret=$ret$(echo $carry | awk '{printf("%c",$0)}')
carry=0
shift=0
fi
byte=$((0x$byte))
: $(( a = (0xFF >> ($shift + 1)) & 0xFF ))
: $(( b = $a ^ 0xFF ))
: $(( digit = $carry | (($byte & $a) << $shift) & 0xFF ))
: $(( carry = ($byte & $b) >> (7 - $shift) ))
ret=$ret$(echo $digit | awk '{printf("%c",$0)}')
: $(( shift++ ))
done
echo $ret
}
@@ -1,18 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CUSD=1,\"AAD8EC3602\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
get 1 "^m" $s
print $s
exit 0
:noresponse
print ""
exit 0
@@ -1,10 +0,0 @@
#!/bin/sh
. /usr/share/3ginfo/scripts/functions.sh
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/lycamobile_pdu.gcom | cut -f2 -d\")
if [ ! -z "$O" ]; then
pdu2txt "$O" | tr '\n' ' ' | sed -e 's/1 Opis 9 Powrot 0 Wyjscie//g'
else
echo "Problem operatora - brak możliwości sprawdzenia"
fi
@@ -1,71 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CNMI=0,1,0,0,0^m"
waitfor 5 "OK"
if % = -1 goto error
send "AT+CMGF=1^m"
waitfor 5 "OK"
if % = -1 goto error
send "AT+CMGL=\"ALL\"^m"
waitfor 10 "OK"
if % = -1 goto error
send "AT+CUSD=1,\"*121#\",15^m"
waitfor 5 "+CUSD:"
if % = -1 goto error
let $c="AT+CMGL=\"REC UNREAD\"^m"
let $r="+CMGL"
gosub readatcmd
let $c="AT+CMGL=\"REC UNREAD\"^m"
let $r="+CMGL"
gosub readatcmd
:error
print "Problem operatora - brak możliwości sprawdzenia..."
exit 0
:readatcmd
let i=20
send $c
:loop
get 1 "^m" $s
let l=len($r)
if len($s) < l goto loop1
if $mid($s,1,l) <> $r goto loop1
let $j="x"
if $mid($s,9,1) <> "," goto del2
let $j=$mid($s,8,1)
goto del3
:del2
if $mid($s,10,1) <> "," goto del3
let $j=$mid($s,8,2)
:del3
get 1 "^m" $s
print $s
if $j = "x" goto del4
send "AT+CMGD="
send $j
send "^m"
waitfor 5 "OK"
:del4
exit 0
:loop1
if len($s) < 2 goto loop2
if $mid($s,1,2) = "ER" return
:loop2
if i = 0 return
let i=i-1
sleep 0.5
goto loop
@@ -1,71 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CNMI=0,1,0,0,0^m"
waitfor 5 "OK"
if % = -1 goto error
send "AT+CMGF=1^m"
waitfor 5 "OK"
if % = -1 goto error
send "AT+CMGL=\"ALL\"^m"
waitfor 10 "OK"
if % = -1 goto error
send "AT+CUSD=1,\"AA982C3602\",15^m"
waitfor 5 "+CUSD:"
if % = -1 goto error
let $c="AT+CMGL=\"REC UNREAD\"^m"
let $r="+CMGL"
gosub readatcmd
let $c="AT+CMGL=\"REC UNREAD\"^m"
let $r="+CMGL"
gosub readatcmd
:error
print "Problem operatora - brak możliwości sprawdzenia..."
exit 0
:readatcmd
let i=20
send $c
:loop
get 1 "^m" $s
let l=len($r)
if len($s) < l goto loop1
if $mid($s,1,l) <> $r goto loop1
let $j="x"
if $mid($s,9,1) <> "," goto del2
let $j=$mid($s,8,1)
goto del3
:del2
if $mid($s,10,1) <> "," goto del3
let $j=$mid($s,8,2)
:del3
get 1 "^m" $s
print $s
if $j = "x" goto del4
send "AT+CMGD="
send $j
send "^m"
waitfor 5 "OK"
:del4
exit 0
:loop1
if len($s) < 2 goto loop2
if $mid($s,1,2) = "ER" return
:loop2
if i = 0 return
let i=i-1
sleep 0.5
goto loop
@@ -1,27 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "at+cmgf=0^m"
waitfor 5 "OK"
if % = -1 goto error
send "at+cscs=\"IRA\"^m"
waitfor 5 "OK"
if % = -1 goto error
send "AT+CUSD=1,\"AA182CA682C546\",15^m"
waitfor 5 "+CUSD:"
if % = -1 goto error
get 1 "^m" $s
print $s
exit 0
:error
print ""
exit 0
@@ -1,10 +0,0 @@
#!/bin/sh
. /usr/share/3ginfo/scripts/functions.sh
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/ofnk.gcom | cut -f2 -d\")
if [ ! -z "$O" ]; then
pdu2txt "$O"
else
echo "Problem operatora - brak możliwości sprawdzenia"
fi
@@ -1,19 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CUSD=1,\"*101*01#\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
get 1 "^m" $s
print $s
exit 0
:noresponse
print ""
exit 0
@@ -1,9 +0,0 @@
#!/bin/sh
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/ofnk2.gcom | cut -f2 -d\")
if [ ! -z "$O" ]; then
A=$(echo $O | awk '{for(i=1;;i=i+4)if(substr($1,i,4)!=""){printf "%c",(index("0123456789ABCDEF",substr($1,i+2,1))-1)*16+(index("0123456789ABCDEF",substr($1,i+3,1))-1)}else exit;}')
echo $A | sed -e 's/1 Opis.*9 Powrot.*0 Wyjscie//g'
else
echo "Problem operatora - brak możliwości sprawdzenia"
fi
@@ -1,37 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CUSD=1,\"*111#\",15^m"
waitfor 10 "0 Wyjscie"
if % = -1 goto noresponse
send "AT+CUSD=1,\"1\",15^m"
waitfor 10 "0 Wyjscie"
if % = -1 goto noresponse
let c=20
send "AT+CUSD=1,\"3\",15^m"
:loop
get 1 "^m" $s
if c=0 goto exit
if len($s) < 6 goto toshort
if $mid($s,1,5) = "+CUSD" goto ok
:toshort
let c=c-1
sleep 1
goto loop
:ok
let $s=$right($s,len($s)-10)
print $s,"\"\n"
:exit
send "AT+CUSD=1,\"0\",15^m"
waitfor 10 "Dziekujemy"
exit 0
:noresponse
print "Problem operatora - brak możliwości sprawdzenia..."
exit 0
@@ -1,28 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CUSD=1,\"*111#\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
send "AT+CUSD=1,\"1\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
send "AT+CUSD=1,\"3\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
get 1 "^m" $s
print $s
send "AT+CUSD=1,\"0\",15^m"
waitfor 10 "+CUSD: "
exit 0
:noresponse
print ""
exit 0
@@ -1,9 +0,0 @@
#!/bin/sh
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/play_fresh2.gcom | cut -f2 -d\")
if [ ! -z "$O" ]; then
A=$(echo $O | awk '{for(i=1;;i=i+4)if(substr($1,i,4)!=""){printf "%c",(index("0123456789ABCDEF",substr($1,i+2,1))-1)*16+(index("0123456789ABCDEF",substr($1,i+3,1))-1)}else exit;}')
echo $A | sed -e 's/1 Opis.*9 Powrot.*0 Wyjscie//g'
else
echo "Problem operatora - brak możliwości sprawdzenia"
fi
@@ -1,28 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CUSD=1,\"AA582C3602\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
send "AT+CUSD=1,\"31\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
send "AT+CUSD=1,\"33\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
get 1 "^m" $s
print $s
send "AT+CUSD=1,\"30\",15^m"
waitfor 10 "+CUSD: "
exit 0
:noresponse
print ""
exit 0
@@ -1,10 +0,0 @@
#!/bin/sh
. /usr/share/3ginfo/scripts/functions.sh
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/play_fresh_pdu.gcom | cut -f2 -d\")
if [ ! -z "$O" ]; then
pdu2txt "$O" | tr '\n' ' ' | sed -e 's/1 Opis.*9 Powrot.*0 Wyjscie//g'
else
echo "Problem operatora - brak możliwości sprawdzenia"
fi
@@ -1,20 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CUSD=1,\"AA182C3602\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
get 1 "^m" $s
print $s
send "AT+CUSD=1,\"30\",15^m"
waitfor 10 "+CUSD: "
exit 0
:noresponse
print ""
exit 0
@@ -1,10 +0,0 @@
#!/bin/sh
. /usr/share/3ginfo/scripts/functions.sh
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/tmobile.gcom | cut -f2 -d\")
if [ ! -z "$O" ]; then
pdu2txt "$O" | tr '\n' ' ' | sed -e 's/1 Opis 9 Powrot 0 Wyjscie//g'
else
echo "Problem operatora - brak możliwości sprawdzenia"
fi
@@ -1,19 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT+CUSD=1,\"*108#\",15^m"
waitfor 10 "+CUSD: "
if % = -1 goto noresponse
get 1 "^m" $s
print $s
exit 0
:noresponse
print ""
exit 0
@@ -1,27 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "at+cmgf=0^m"
waitfor 5 "OK"
if % = -1 goto error
send "at+cscs=\"IRA\"^m"
waitfor 5 "OK"
if % = -1 goto error
send "AT+CUSD=1,\"AA180C3702\",15^m"
waitfor 5 "+CUSD:"
if % = -1 goto error
get 1 "^m" $s
print $s
exit 0
:error
print ""
exit 0
@@ -1,10 +0,0 @@
#!/bin/sh
. /usr/share/3ginfo/scripts/functions.sh
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
O=$(gcom -d $DEVICE -s /usr/share/3ginfo/scripts/virginmobile_pdu.gcom | cut -f2 -d\")
if [ ! -z "$O" ]; then
pdu2txt "$O"
else
echo "Problem operatora - brak możliwości sprawdzenia"
fi
@@ -1,86 +0,0 @@
<html>
<style type="text/css">
body {font-family: Verdana, Arial, Helvetica, sans-serif;}
.c {margin:auto;text-align:center;clear:both;}
.l {width:49%;clear:both;float:left;text-align:right;}
.r {width:49%;float:right;text-align:left;}
</style>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Siła sygnału</title>
<script language="javascript" type="text/javascript">
<!--
var secs=0;
var delay = 1000;
startTimer();
function startTimer()
{
if (secs==0)
{
secs=3;
refreshData();
}
else
{
self.status = secs;
secs = secs - 1;
}
self.setTimeout("startTimer()", delay);
}
function refreshData()
{
var req;
try {req = new XMLHttpRequest();} catch (e) {
try {req = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {
try {req = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {
alert("Coś stara ta przelądarka...");
return false;
}
}
}
req.open("GET", "/cgi-bin/signal.sh");
req.onreadystatechange = function() {
if (req.readyState == 4) {
var line=req.responseText;
var arr=(line.split(/,/));
if(arr.length>3)
{
var p = (arr[2]*100/31).toFixed();
document.getElementById('csq').innerHTML=p+'%';
document.getElementById('precent').style.width=p+"%";
var color = "red";
if (p > 29) {color="orange"; }
if (p > 45) {color="yellow"; }
if (p > 61) {color="green"; }
document.getElementById('precent').style.backgroundColor=color;
}
}
}
req.send(null);
}
//-->
</script>
</head>
<body>
<table style='width:100%;height:100%;'>
<tr><td colspan=3 style='height:100px;'>&nbsp;</td></tr>
<tr>
<td>&nbsp;</td>
<td style='width:600px; height:200px;'>
<span class="l">Siła sygnału:</span><span id="csq" class="r"></span>
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
<div id="precent" style="float:left; background-color:black; border-right:1px solid #000000; height:100%; width:0%">&nbsp;</div>
</div>
</td>
<td>&nbsp;</td>
</tr>
<tr><td colspan=3>&nbsp;</td></tr>
</table>
</body>
</html>
@@ -1,35 +0,0 @@
<span class="l" style="display:{STATUS_SHOW}">Status:</span><span class="r" style="display:{STATUS_SHOW}">{STATUS}</span>
<span class="l" style="display:{STATUS_SHOW}"><small>Connection time:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{CONN_TIME}</small></span>
<span class="l" style="display:{STATUS_SHOW}"><small>Received:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{RX}</small></span>
<span class="l" style="display:{STATUS_SHOW}"><small>Transmitted:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{TX}</small></span>
<span class="l">Operator:</span><span class="r">{COPS}</span>
<span class="l">Operating mode:</span><span class="r">{MODE}</span>
<span class="l">Signal strength:</span><span class="r"><strong>{CSQ_PER}%</strong></span>
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
<div style="float:left; background-color:{CSQ_COL}; border-right:1px solid #000000; height:100%; width:{CSQ_PER}%">&nbsp;</div>
</div>
<div class="c" style="display:{SMS_SHOW};"><input type="button" class="button" value="SMS" onClick="window.location.href='cgi-bin/sms.sh'"></div>
<div class="c" style="display:{USSD_SHOW};"><input type="button" class="button" value="USSD" onClick="window.location.href='cgi-bin/ussd.sh'"></div>
<div class="c" style="display:{LIMIT_SHOW};"><input type="button" class="button" value="Pozostały limit" onClick="return trzyginfo('cgi-bin/limit.sh',0);"></div>
<div class="c"><input type="button" class="button" value="Refresh" onClick="return trzyginfo('cgi-bin/3ginfo.sh',0);"></div>
<div class="c" style="display:{STATUS_SHOW_BUTTON}"><input type="button" class="button" value="{STATUS_TRE}" onClick="trzyginfo('cgi-bin/onoff.sh',1);"></div>
<br />
<a href="#" id='details_on' onclick="detailson();" style="float:left;display:inline;"><small>Show details</small></a>
<a href="#" id='details_off' onclick="detailsoff();" style="float:left;display:none;"><small>Hide details</small></a>
<br />
<div id='details' style="display:none;">
<span class="l">CSQ:</span><span class="r">{CSQ}</span>
<span class="l">RSSI:</span><span class="r">{CSQ_RSSI} dBm</span>
<span class="l" style="display:{QOS_SHOW}">UMTS QoS Profile:</span><span class="r" style="display:{QOS_SHOW}">{DOWN} kbps DOWN | {UP} kbps UP</span>
<span class="l">MCC MNC:</span><span class="r">{COPS_MCC} {COPS_MNC}</span>
<span class="l">LAC:</span><span class="r">{LAC} ({LAC_NUM})</span>
<span class="l">CID:</span><span class="r">{CID} ({CID_NUM})</span>
<span class="l">TAC:</span><span class="r">{TAC} ({TAC_NUM})</span>
<span class="l">RSCP:</span><span class="r">{RSCP} dBm</span>
<span class="l">Ec/IO:</span><span class="r">{ECIO} dB</span>
<span class="l">RSRP:</span><span class="r">{RSRP} dBm</span>
<span class="l">SINR:</span><span class="r">{SINR} dB</span>
<span class="l">RSRQ:</span><span class="r">{RSRQ} dB</span>
<span class="l">&nbsp;</span><small><span class="r">{BTSINFO}</small>
<span class="l">Device:</span><span class="r">{DEVICE}</span>
</div>
@@ -1,35 +0,0 @@
<span class="l" style="display:{STATUS_SHOW}">Staatus:</span><span class="r" style="display:{STATUS_SHOW}">{STATUS}</span>
<span class="l" style="display:{STATUS_SHOW}"><small>Ühendusaeg:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{CONN_TIME}</small></span>
<span class="l" style="display:{STATUS_SHOW}"><small>Vastvõetud:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{RX}</small></span>
<span class="l" style="display:{STATUS_SHOW}"><small>Saadetud:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{TX}</small></span>
<span class="l">Operaator:</span><span class="r">{COPS}</span>
<span class="l">Töörežiim:</span><span class="r">{MODE}</span>
<span class="l">Signaali tugevus:</span><span class="r"><strong>{CSQ_PER}%</strong></span>
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
<div style="float:left; background-color:{CSQ_COL}; border-right:1px solid #000000; height:100%; width:{CSQ_PER}%">&nbsp;</div>
</div>
<div class="c" style="display:{SMS_SHOW};"><input type="button" class="button" value="SMS" onClick="window.location.href='cgi-bin/sms.sh'"></div>
<div class="c" style="display:{USSD_SHOW};"><input type="button" class="button" value="USSD" onClick="window.location.href='cgi-bin/ussd.sh'"></div>
<div class="c" style="display:{LIMIT_SHOW};"><input type="button" class="button" value="Pozostały limit" onClick="return trzyginfo('cgi-bin/limit.sh',0);"></div>
<div class="c"><input type="button" class="button" value="Uuenda" onClick="return trzyginfo('cgi-bin/3ginfo.sh',0);"></div>
<div class="c" style="display:{STATUS_SHOW_BUTTON}"><input type="button" class="button" value="{STATUS_TRE}" onClick="trzyginfo('cgi-bin/onoff.sh',1);"></div>
<br />
<a href="#" id='details_on' onclick="detailson();" style="float:left;display:inline;"><small>Näita detaile</small></a>
<a href="#" id='details_off' onclick="detailsoff();" style="float:left;display:none;"><small>Peida detailid</small></a>
<br />
<div id='details' style="display:none;">
<span class="l">CSQ:</span><span class="r">{CSQ}</span>
<span class="l">RSSI:</span><span class="r">{CSQ_RSSI} dBm</span>
<span class="l" style="display:{QOS_SHOW}">UMTS QoS Profile:</span><span class="r" style="display:{QOS_SHOW}">{DOWN} kbps DOWN | {UP} kbps UP</span>
<span class="l">MCC MNC:</span><span class="r">{COPS_MCC} {COPS_MNC}</span>
<span class="l">LAC:</span><span class="r">{LAC} ({LAC_NUM})</span>
<span class="l">CID:</span><span class="r">{CID} ({CID_NUM})</span>
<span class="l">TAC:</span><span class="r">{TAC} ({TAC_NUM})</span>
<span class="l">RSCP:</span><span class="r">{RSCP} dBm</span>
<span class="l">Ec/IO:</span><span class="r">{ECIO} dB</span>
<span class="l">RSRP:</span><span class="r">{RSRP} dBm</span>
<span class="l">SINR:</span><span class="r">{SINR} dB</span>
<span class="l">RSRQ:</span><span class="r">{RSRQ} dB</span>
<span class="l">&nbsp;</span><small><span class="r">{BTSINFO}</small>
<span class="l">Seade:</span><span class="r">{DEVICE}</span>
</div>
@@ -1,35 +0,0 @@
<span class="l" style="display:{STATUS_SHOW}">Stato:</span><span class="r" style="display:{STATUS_SHOW}">{STATUS}</span>
<span class="l" style="display:{STATUS_SHOW}"><small>Tempo di connessione:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{CONN_TIME}</small></span>
<span class="l" style="display:{STATUS_SHOW}"><small>Ricevuti:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{RX}</small></span>
<span class="l" style="display:{STATUS_SHOW}"><small>Trasmessi:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{TX}</small></span>
<span class="l">Operatore:</span><span class="r">{COPS}</span>
<span class="l">Tipo di connessione:</span><span class="r">{MODE}</span>
<span class="l">Forza segnale:</span><span class="r"><strong>{CSQ_PER}%</strong></span>
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
<div style="float:left; background-color:{CSQ_COL}; border-right:1px solid #000000; height:100%; width:{CSQ_PER}%">&nbsp;</div>
</div>
<div class="c" style="display:{SMS_SHOW};"><input type="button" class="button" value="SMS" onClick="window.location.href='cgi-bin/sms.sh'"></div>
<div class="c" style="display:{USSD_SHOW};"><input type="button" class="button" value="USSD" onClick="window.location.href='cgi-bin/ussd.sh'"></div>
<div class="c" style="display:{LIMIT_SHOW};"><input type="button" class="button" value="Limite" onClick="return trzyginfo('cgi-bin/limit.sh',0);"></div>
<div class="c"><input type="button" class="button" value="Aggiorna" onClick="return trzyginfo('cgi-bin/3ginfo.sh',0);"></div>
<div class="c" style="display:{STATUS_SHOW_BUTTON}"><input type="button" class="button" value="{STATUS_TRE}" onClick="trzyginfo('cgi-bin/onoff.sh',1);"></div>
<br />
<a href="#" id='details_on' onclick="detailson();" style="float:left;display:inline;"><small>Mostra dettagli</small></a>
<a href="#" id='details_off' onclick="detailsoff();" style="float:left;display:none;"><small>Nascondi dettagli</small></a>
<br />
<div id='details' style="display:none;">
<span class="l">CSQ:</span><span class="r">{CSQ}</span>
<span class="l">RSSI:</span><span class="r">{CSQ_RSSI} dBm</span>
<span class="l" style="display:{QOS_SHOW}">Profilo UMTS QoS:</span><span class="r" style="display:{QOS_SHOW}">{DOWN} kbps DOWN | {UP} kbps UP</span>
<span class="l">MCC MNC:</span><span class="r">{COPS_MCC} {COPS_MNC}</span>
<span class="l">LAC:</span><span class="r">{LAC} ({LAC_NUM})</span>
<span class="l">CID:</span><span class="r">{CID} ({CID_NUM})</span>
<span class="l">TAC:</span><span class="r">{TAC} ({TAC_NUM})</span>
<span class="l">RSCP:</span><span class="r">{RSCP} dBm</span>
<span class="l">Ec/IO:</span><span class="r">{ECIO} dB</span>
<span class="l">RSRP:</span><span class="r">{RSRP} dBm</span>
<span class="l">SINR:</span><span class="r">{SINR} dB</span>
<span class="l">RSRQ:</span><span class="r">{RSRQ} dB</span>
<span class="l">&nbsp;</span><small><span class="r">{BTSINFO}</small>
<span class="l">Dispositivo:</span><span class="r">{DEVICE}</span>
</div>
@@ -1,35 +0,0 @@
<span class="l" style="display:{STATUS_SHOW}">Status:</span><span class="r" style="display:{STATUS_SHOW}">{STATUS}</span>
<span class="l" style="display:{STATUS_SHOW}"><small>Czas połączenia:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{CONN_TIME}</small></span>
<span class="l" style="display:{STATUS_SHOW}"><small>Pobrano:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{RX}</small></span>
<span class="l" style="display:{STATUS_SHOW}"><small>Wysłano:</small></span><span class="r" style="display:{STATUS_SHOW}"><small>{TX}</small></span>
<span class="l">Operator:</span><span class="r">{COPS}</span>
<span class="l">Tryb pracy:</span><span class="r">{MODE}</span>
<span class="l">Siła sygnału:</span><span class="r"><strong>{CSQ_PER}%</strong></span>
<div style="float:left; margin:1%; width:98%; height:20px; border:1px solid #000000; background-color:transparent;">
<div style="float:left; background-color:{CSQ_COL}; border-right:1px solid #000000; height:100%; width:{CSQ_PER}%">&nbsp;</div>
</div>
<div class="c" style="display:{SMS_SHOW};"><input type="button" class="button" value="SMS" onClick="window.location.href='cgi-bin/sms.sh'"></div>
<div class="c" style="display:{USSD_SHOW};"><input type="button" class="button" value="USSD" onClick="window.location.href='cgi-bin/ussd.sh'"></div>
<div class="c" style="display:{LIMIT_SHOW};"><input type="button" class="button" value="Pozostały limit" onClick="return trzyginfo('cgi-bin/limit.sh',0);"></div>
<div class="c"><input type="button" class="button" value="Odśwież" onClick="return trzyginfo('cgi-bin/3ginfo.sh',0);"></div>
<div class="c" style="display:{STATUS_SHOW_BUTTON}"><input type="button" class="button" value="{STATUS_TRE}" onClick="trzyginfo('cgi-bin/onoff.sh',1);"></div>
<br />
<a href="#" id='details_on' onclick="detailson();" style="float:left;display:inline;"><small>Pokaż informacje dodatkowe</small></a>
<a href="#" id='details_off' onclick="detailsoff();" style="float:left;display:none;"><small>Ukryj informacje dodatkowe</small></a>
<br />
<div id='details' style="display:none;">
<span class="l">CSQ:</span><span class="r">{CSQ}</span>
<span class="l">RSSI:</span><span class="r">{CSQ_RSSI} dBm</span>
<span class="l" style="display:{QOS_SHOW}">Profil UMTS QoS:</span><span class="r" style="display:{QOS_SHOW}">{DOWN} kbps DOWN | {UP} kbps UP</span>
<span class="l">MCC MNC:</span><span class="r">{COPS_MCC} {COPS_MNC}</span>
<span class="l">LAC:</span><span class="r">{LAC} ({LAC_NUM})</span>
<span class="l">CID:</span><span class="r">{CID} ({CID_NUM})</span>
<span class="l">TAC:</span><span class="r">{TAC} ({TAC_NUM})</span>
<span class="l">RSCP:</span><span class="r">{RSCP} dBm</span>
<span class="l">Ec/IO:</span><span class="r">{ECIO} dB</span>
<span class="l">RSRP:</span><span class="r">{RSRP} dBm</span>
<span class="l">SINR:</span><span class="r">{SINR} dB</span>
<span class="l">RSRQ:</span><span class="r">{RSRQ} dB</span>
<span class="l">&nbsp;</span><small><span class="r">{BTSINFO}</small>
<span class="l">Urządzenie:</span><span class="r">{DEVICE}</span>
</div>
@@ -1 +0,0 @@
E404:/index.html
-13
View File
@@ -1,13 +0,0 @@
#!/bin/sh /etc/rc.common
#
# (c) 2010-2024 Cezary Jackiewicz <cezary@eko.one.pl>
#
START=99
start() {
PORT=$(uci -q get 3ginfo.@3ginfo[0].http_port)
[ -z "$PORT" ] && PORT=81
uhttpd -E /index.html -x /cgi-bin -h /usr/share/3ginfo/html -p 0.0.0.0:$PORT -i .sh=/bin/sh > /dev/null 2>&1
}
@@ -1,192 +0,0 @@
label {
font-weight: 400;
text-align: right;
}
.modal {
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgb(0,0,0);
background-color: rgba(0,0,0,0.4);
}
.modal-content {
background-color: #fefefe;
margin: 15% auto;
padding: 20px;
border: 1px solid #888;
width: 80%;
border-radius: 5px;
}
.section {
border-bottom: 1px dashed #8c8b8b;
}
h3 {
margin-bottom: 20px;
}
#container {
transition: margin-left .5s;
padding: 20px;
}
.click,
.click:hover,
.click:visited,
.click:link {
text-decoration: none;
color: #31708f;
cursor: pointer;
}
.margintop {
margin-top: 10px;
}
@media (max-width: 768px) {
.margintop {
margin-top: -90px;
}
.center-xd {
text-align: center;
}
}
.sizing-box {
height: 110px;
width: 150px;
}
.signal-bars {
display: inline-block;
}
.signal-bars .bar {
width: 14%;
margin-left: 1%;
min-height: 20%;
display: inline-block;
}
.signal-bars .bar.first-bar { height: 20%; }
.signal-bars .bar.second-bar { height: 40%; }
.signal-bars .bar.third-bar { height: 60%; }
.signal-bars .bar.fourth-bar { height: 80%; }
.signal-bars .bar.fifth-bar { height: 99%; }
.lzero .bar {
background-color: #fafafa;
border: thin solid #ccc;
}
.lone .bar {
background-color: #ff0000;
border: thin solid #800000;
}
.ltwo .bar {
background-color: #ff6a00;
border: thin solid #803500;
}
.lthree .bar {
background-color: #ffd800;
border: thin solid #806a00;
}
.lfour .bar {
background-color: #b6ff00;
border: thin solid #558000;
}
.lfive .bar {
background-color: #4cff00;
border: thin solid #2a8000;
}
.four-bars .bar.fifth-bar,
.three-bars .bar.fifth-bar,
.three-bars .bar.fourth-bar,
.one-bar .bar:not(.first-bar),
.two-bars .bar:not(.first-bar):not(.second-bar) {
background-color: #fafafa;
border: thin solid #ccc;
}
.oneline {
clear: both;
}
@media (max-width: 527px) {
.hidden-vxs {
display: none;
}
}
@media (min-width: 578px) and (max-width: 821px) {
.modalmargintop {
margin-top: 5px;
}
}
.error {
color: red;
}
@media (max-width: 768px) {
.col-xs-12-text-left {
text-align: left;
}
}
.tab {
overflow: hidden;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
.tab button {
background-color: inherit;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 14px 16px;
transition: 0.3s;
font-size: 17px;
}
.tab button:hover {
background-color: #ddd;
}
.tab button.active {
background-color: #ccc;
}
.tabcontent {
display: none;
padding: 6px 12px;
b1order: 1px solid #ccc;
b1order-top: none;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.flex-content {
text-align: center;
}
@@ -1,803 +0,0 @@
function readdata(source, callback) {
var xmlhttp;
try {xmlhttp = new XMLHttpRequest();} catch (e) {
try {xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {
try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {
alert("Old browser?");
return false;
}
}
}
xmlhttp.open("GET", "/cgi-bin/" + source);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
callback(JSON.parse(xmlhttp.responseText));
}
}
}
xmlhttp.send(null);
}
function translate() {
var lang = navigator.languages ? navigator.languages[0] : navigator.language;
this._lang = lang.substr(0, 2);
// this._lang = 'en';
fetch(`/i18n/${this._lang}.json`)
.then((response) => {
if (response.ok) {
return response.json();
}
throw new Error('Something went wrong');
})
.then((translation) => {
this._translation = translation;
this._elements = document.querySelectorAll("[data-i18n]");
this._elements.forEach((element) => {
var keys = element.dataset.i18n.split(".");
var text = keys.reduce((obj, i) => obj[i], translation);
if (text) {
element.innerHTML = text;
}
});
})
.catch((error) => {
console.log(`Could not load ${this._lang}, en will be used`);
});
}
function _t(text, defaulttext) {
if (this._translation) {
var key = text.replaceAll(' ', '').toLowerCase();
if (key in this._translation) {
return this._translation[key];
}
}
return defaulttext ? defaulttext : text;
}
function info_onload() {
translate();
showmodeminfo();
}
function formatDateTime(s) {
if (s.length == 14) {
return s.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3 $4:$5:$6");
} else if (s.length == 12) {
return s.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3 $4:$5");
} else if (s.length == 8) {
return s.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3");
} else if (s.length == 6) {
return s.replace(/(\d{4})(\d{2})/, "$1-$2");
}
return s;
}
function lz(n) {
return (n < 10 ? '0' : '' ) + n;
}
function formatDateTimeForUptime(uptime) {
var d = new Date(new Date().getTime() - uptime * 1000);
return '' +
d.getFullYear() + '-' +
lz(d.getMonth() + 1) + '-' +
lz(d.getDate()) + ' ' +
lz(d.getHours()) + ':' +
lz(d.getMinutes()) + ':' +
lz(d.getSeconds());
}
function createRowForModal(key, value) {
return '<div class="row"><div class="col-xs-5 col-sm-6 text-right">' + key + '</div><div class="col-xs-7 col-sm-6 text-left"><p>' + value + '</p></div></div>';
}
function createRow9ColForModal(arr) {
return '<div class="row">' +
'<div class="col-xs-1 text-right"><p>' + arr[0] + '</p></div>' +
'<div class="col-xs-3 text-left"><p>' + arr[1] + '</p></div>' +
'<div class="col-xs-2 text-left"><p>' + arr[2] + '</p></div>' +
'<div class="col-xs-1 text-left"><p>' + arr[3] + '</p></div>' +
'<div class="col-xs-1 text-left"><p>' + arr[4] + '</p></div>' +
'<div class="col-xs-1 text-left"><p>' + arr[5] + '</p></div>' +
'<div class="col-xs-1 text-left"><p>' + arr[6] + '</p></div>' +
'<div class="col-xs-1 text-left"><p>' + arr[7] + '</p></div>' +
'<div class="col-xs-1 text-left"><p>' + arr[8] + '</p></div>' +
'</div>';
}
/*****************************************************************************/
var modal;
function setValue(element, value) {
var e = document.getElementById(element);
if (e.tagName == "SELECT") {
for (var i = 0; i < e.options.length; i++) {
if (e.options[i].value == value) {
e.selectedIndex = i;
break;
}
}
} else if (e.tagName == "P") {
e.innerHTML = value;
} else if (e.tagName == "H3") {
e.innerHTML = value;
} else if (e.tagName == "SPAN") {
e.innerHTML = value;
} else if (e.tagName == "DIV") {
e.innerHTML = value;
} else if (e.type === 'checkbox') {
e.checked = value;
} else if (e.type === 'radio') {
e.checked = value;
} else {
e.value = value;
}
}
function setDisplay(element, show) {
document.getElementById(element).style.display = (show ? 'block' : 'none');
}
function addClasses(element, classes) {
for (var i = 0; i < classes.length; i++) {
if (!element.className.match(new RegExp('(?:^|\\s)' + classes[i] + '(?!\\S)', 'g')))
element.className += " " + classes[i];
}
}
function removeClasses(element, classes) {
for (var i = 0; i < classes.length; i++) {
element.className = element.className.replace(new RegExp('(?:^|\\s)' + classes[i] + '(?!\\S)', 'g'), '');
}
}
function showMsg(msg, error) {
closeMsg();
if (!msg || 0 === msg.length) { msg = _t('Please wait') + '...'; }
var e = document.getElementById('msgtxt');
e.innerHTML = msg;
if (error) {
e.style.color = 'red';
addClasses(e, ['has-error']);
} else {
e.style.color = null;
removeClasses(e, ['has-error']);
}
modal = document.getElementById('div_msg');
modal.style.display = 'block';
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = 'none';
}
}
}
function closeMsg() {
if (modal) { modal.style.display = 'none'; }
}
function sortJSON(data, key, way) {
return data.sort(function(a, b) {
var x = a[key]; var y = b[key];
if (way === 'asc' ) { return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }
if (way === 'desc') { return ((x > y) ? -1 : ((x < y) ? 1 : 0)); }
});
}
function formatDuration(s, showsec) {
if (s === '-') {return '-';}
if (s === '') {return '-';}
var d = Math.floor(s/86400),
h = Math.floor(s/3600) % 24,
m = Math.floor(s/60)%60,
s = s % 60;
var time = d > 0 ? d + 'd ' : '';
if (time != '') {time += h + _t('h') + ' '} else {time = h > 0 ? h + _t('h') + ' ' : ''}
if (time != '') {time += m + 'm '} else {time = m > 0 ? m + 'm ' : ''}
if (showsec) {
time += s + 's';
} else {
if (time == '') { time += m + 'm'; }
}
return time;
}
/*****************************************************************************/
function modem(evt, modem) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(modem).style.display = "block";
evt.currentTarget.className += " active";
}
function showmodeminfo() {
readdata('infoproducts.sh', function(data1) {
var html = '';
if (data1.res.length > 1) {
var htmltab = '<div class="tab">';
(data1.res).forEach(function callback(value, idx) {
var id = (idx == 0 ? 'id="defaultOpen"' : '');
htmltab += '<button class="tablinks" onclick="modem(event, \'modem' + idx + '\')"' + id + '><span id="tabtitle' + idx + '"></span></button>';
html += ('<div id="modem' + idx + '" class="tabcontent">' + document.getElementById('div_template').innerHTML + '</div>').replaceAll('_idx', idx);
});
htmltab += '</div>';
setValue('div_modems', '');
document.getElementById('div_modems').insertAdjacentHTML('beforeend', htmltab + html);
document.getElementById("defaultOpen").click();
} else {
setValue('div_modems', '');
html += ('<div id="modem0">' + document.getElementById('div_template').innerHTML + '</div>').replaceAll('_idx', 0);
document.getElementById('div_modems').insertAdjacentHTML('beforeend', html);
}
(data1.res).forEach(function callback(data, idx) {
setValue('vendor' + idx, data.vendor == '' ? '-' : data.vendor);
setValue('product' + idx, data.product == '' ? '-' : data.product);
if (data1.res.length > 1) {
setValue('tabtitle' + idx, data.product == '' ? 'modem #' + (idx + 1) : data.product);
}
setValue('revision' + idx, data.revision == '' ? '-' : data.revision);
setValue('imei' + idx, data.imei == '' ? '-' : data.imei);
setValue('iccid' + idx, data.iccid == '' ? '-' : data.iccid);
setValue('imsi' + idx, data.imsi == '' ? '-' : data.imsi);
});
showmodemparams();
setInterval(showmodemparams, 10000);
});
}
var arrmodemaddon = [];
function showmodemparams() {
readdata('info.sh', function(data1) {
(data1.res).forEach(function callback(data2, idx) {
var data = data2[0];
setValue('rx' + idx, data.rx == '' ? '-' : data.rx);
setValue('tx' + idx, data.tx == '' ? '-' : data.tx);
setValue('uptime' + idx, formatDuration(data.conn_time_sec, false));
setValue('uptime_since' + idx, ' (' + _t('since') + ' ' + formatDateTimeForUptime(data.conn_time_sec) + ')');
var data = data2[1];
if (data.error)
return;
arrmodemaddon[idx] = [];
switch(data.registration) {
case "0":
setValue('registration' + idx, _t('registered0', 'Not registered'));
break;
case "1":
setValue('registration' + idx, _t('registered1', 'Registered, home network'));
break;
case "2":
setValue('registration' + idx, _t('registered2', 'Not registered, searching'));
break;
case "3":
setValue('registration' + idx, _t('registered3', 'Registration denied'));
break;
case "5":
setValue('registration' + idx, _t('registered5', 'Registered, roaming'));
break;
case "6":
setValue('registration' + idx, _t('registered6', 'Registered for SMS only, home network'));
break;
case "7":
setValue('registration' + idx, _t('registered7', 'Registered for SMS only, roaming'));
break;
default:
setValue('registration' + idx, data.registration == '' ? '-' : data.registration);
}
if (data.registration == '1' || data.registration == '5' || data.registration == '6' || data.registration == '7') {
setValue('signal' + idx, data.signal == '' ? '-' : data.signal + '%');
if (data.signal) {
var e = document.getElementById('signal_bars' + idx);
removeClasses(e, ['lzero', 'lone', 'ltwo', 'lthree', 'lfour', 'lfive', 'one-bar', 'two-bars', 'three-bars', 'four-bars', 'five-bars']);
if (data.signal >= 80) {
addClasses(e, ['lfive', 'five-bars']);
}
if (data.signal < 80 && data.signal >= 60) {
addClasses(e, ['lfour', 'four-bars']);
}
if (data.signal < 60 && data.signal >= 40) {
addClasses(e, ['lthree', 'three-bars']);
}
if (data.signal < 40 && data.signal >= 20) {
addClasses(e, ['ltwo', 'two-bars']);
}
if (data.signal < 20 && data.signal > 0) {
addClasses(e, ['lone', 'one-bar']);
}
if (data.signal == 0) {
addClasses(e, ['lzero', 'one-bar']);
}
}
setValue('operator' + idx, data.operator_name == '' ? '-' : data.operator_name);
var mode = (data.mode == '' ? '-' : data.mode);
if (mode.toLowerCase().includes('lte') || mode.toLowerCase().includes('5g')) {
if (mode.toLowerCase().includes('lte')) {
mode = (data.mode).split(' ')[0];
}
if (mode.toLowerCase().includes('5g')) {
mode = (data.mode).split(' ')[0] + ' ' + (data.mode).split(' ')[1];
}
var count = ((data.mode).match(/\//g) || []).length;
if (count > 0) {
mode += ' (' + (count + 1) + 'CA)';
}
}
setValue('mode' + idx, mode);
arrmodemaddon[idx].push({'idx':1, 'key':'Mode', 'value':data.mode});
if (data.country) {
arrmodemaddon[idx].push({'idx':19, 'key':'Country', 'value':data.country});
}
if (data.operator_mcc && data.operator_mcc != '' && data.operator_mnc && data.operator_mnc != '') {
arrmodemaddon[idx].push({'idx':20, 'key':'MCC MNC', 'value':data.operator_mcc + ' ' + data.operator_mnc});
}
if (data.lac_dec && data.lac_dec > 0) {
arrmodemaddon[idx].push({'idx':22, 'key':'LAC', 'value':data.lac_dec + ' (' + data.lac_hex + ')'});
}
if (data.cid_dec && data.cid_dec > 0) {
arrmodemaddon[idx].push({'idx':21, 'key':'Cell ID', 'value':data.cid_dec + ' (' + data.cid_hex + ')'});
}
if (data.cid_dec && data.cid_dec > 0 && data.operator_mcc == 260) {
switch (data.operator_mnc) {
case '01':
case '02':
case '03':
case '06':
document.getElementById('btsearch' + idx).setAttribute('href', 'https://btsearch.pl/stations?mnc=260' + data.operator_mnc + '&q=' + data.cid_dec);
break;
default:
document.getElementById('btsearch' + idx).setAttribute('href', 'https://btsearch.pl/stations?q=' + data.cid_dec);
}
setDisplay('div_btsearch' + idx, true);
} else {
setDisplay('div_btsearch' + idx, false);
}
} else {
setValue('signal' + idx, '-');
var e = document.getElementById('signal_bars' + idx);
removeClasses(e, ['lzero', 'lone', 'ltwo', 'lthree', 'lfour', 'lfive', 'one-bar', 'two-bars', 'three-bars', 'four-bars', 'five-bars']);
addClasses(e, ['lzero', 'one-bar']);
setValue('operator' + idx, '-');
setValue('mode' + idx, '-');
setDisplay('div_btsearch' + idx, false);
}
if (data.addon) {
arrmodemaddon[idx] = arrmodemaddon[idx].concat(data.addon);
}
setDisplay('div_addon' + idx, (arrmodemaddon[idx]).length > 0);
});
});
}
function paramdesc(param, value) {
var pvalue = parseInt(value.split(' ')[0]);
var description = '';
var color = '';
var title = '';
switch(param) {
case 'rssi':
if (pvalue > -65) { color = '#2bdf5a'; description += _t('excellent'); }
if (pvalue > -75 && pvalue <= -65 ) { color = '#efff12'; description += _t('good'); }
if (pvalue > -85 && pvalue <= -75 ) { color = '#f8c200'; description += _t('fair'); }
if (pvalue > -95 && pvalue <= -85 ) { color = '#fa0000'; description += _t('poor'); }
if (pvalue <= -95) { color = '#fa0000'; description += _t('very poor'); }
title += '> -65 dBm ' + _t('excellent') + '\n';
title += '> -75 dBm i <= -65 dBm ' + _t('good') + '\n';
title += '> -85 dBm i <= -75 dBm ' + _t('fair') + '\n';
title += '> -95 dBm i <= -85 dBm ' + _t('poor') + '\n';
title += '<= -95 dBm ' + _t('very poor');
break;
case 'rsrp':
if (pvalue >= -80) { color = '#2bdf5a'; description += _t('excellent'); }
if (pvalue >= -90 && pvalue < -80 ) { color = '#efff12'; description += _t('good'); }
if (pvalue >= -100 && pvalue < -90 ) { color = '#f8c200'; description += _t('fair'); }
if (pvalue < -100) { color = '#fa0000'; description += _t('poor'); }
title += '> -80 dBm ' + _t('excellent') + '\n';
title += '>= -90 dBm i < -80 dBm ' + _t('good') + '\n';
title += '>= -100 dBm i < -90 dBm ' + _t('fair') + '\n';
title += '< -100 dBm ' + _t('poor');
break;
case 'rsrq':
if (pvalue >= -10) { color = '#2bdf5a'; description += _t('excellent'); }
if (pvalue >= -15 && pvalue < -10 ) { color = '#efff12'; description += _t('good'); }
if (pvalue >= -20 && pvalue < -15 ) { color = '#f8c200'; description += _t('fair'); }
if (pvalue < -20) { color = '#fa0000'; description += _t('poor'); }
title += '>= -10 dB ' + _t('excellent') + '\n';
title += '>= -15 dB i < -10 dB ' + _t('good') + '\n';
title += '>= -20 dB i < -15 dB ' + _t('fair') + '\n';
title += '< -20 dB ' + _t('poor');
break;
}
return ', <span style="color:' + color + '" title="' + title + '">' + description + '</span>';
}
function modemaddon(idx) {
var htmlco = '';
var htmlxs = '';
var html = '';
var pcc = [];
var scc1 = [];
var scc2 = [];
var scc3 = [];
var scc4 = [];
var ulscc = [];
var sorted = sortJSON(arrmodemaddon[idx], 'idx', 'asc');
sorted.forEach(function(e) {
var description = '';
switch (e.idx) {
// MODE
case 1:
if ((e.value).search(/^LTE B/) > -1 || (e.value).search(/^LTE-A B/) > -1) {
pcc[1] = (e.value).replace(/^LTE /, '').replace(/^LTE-A /, '');
}
if ((e.value).search(/^5G/) > -1) {
pcc[1] = (e.value).replace(/^5G NSA /, '').replace(/^5G SA /, '');
}
break;
// PCC
case 30:
if ((e.value).includes(' @')) {
pcc[1] = (e.value).split(' @')[0];
pcc[2] = (e.value).split(' @')[1];
} else {
pcc[1] = e.value;
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 31:
pcc[2] = e.value;
htmlxs += createRowForModal(e.key, e.value);
break;
case 32:
if (typeof pcc[2] === 'undefined') {
pcc[2] = e.value;
} else {
pcc[2] = e.value + ' DL<br>' + pcc[2] + ' UL'
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 33:
pcc[3] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 34:
if ((e.key).toLowerCase().includes('earfcn ul')) {
if (typeof pcc[4] === 'undefined') {
pcc[4] = e.value + ' UL';
} else {
pcc[4] = pcc[4] + ' DL<br>' + e.value + ' UL';
}
} else {
if (typeof pcc[4] === 'undefined') {
pcc[4] = e.value;
} else {
pcc[4] = e.value + ' DL<br>' + pcc[4];
}
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 35:
description = paramdesc('rssi', e.value);
pcc[5] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 36:
description = paramdesc('rsrp', e.value);
pcc[6] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 37:
description = paramdesc('rsrq', e.value);
pcc[7] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 38:
if ((e.key).toLowerCase().includes('sinr')) {
pcc[8] = e.value;
} else {
html += createRowForModal(_t(e.key), e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
// SCC1
case 50:
if ((e.value).includes(' @')) {
scc1[1] = (e.value).split(' @')[0];
scc1[2] = (e.value).split(' @')[1];
} else {
scc1[1] = e.value;
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 52:
scc1[2] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 53:
scc1[3] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 54:
if (!(e.key).toLowerCase().includes('earfcn ul')) {
scc1[4] = e.value;
} else {
html += createRowForModal(_t(e.key), e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 55:
description = paramdesc('rssi', e.value);
scc1[5] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 56:
description = paramdesc('rsrp', e.value);
scc1[6] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 57:
description = paramdesc('rsrq', e.value);
scc1[7] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 58:
if ((e.key).toLowerCase().includes('sinr')) {
scc1[8] = e.value;
} else {
html += createRowForModal(e.key, e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
// SCC2
case 60:
if ((e.value).includes(' @')) {
scc2[1] = (e.value).split(' @')[0];
scc2[2] = (e.value).split(' @')[1];
} else {
scc2[1] = e.value;
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 62:
scc2[2] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 63:
scc2[3] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 64:
if (!(e.key).toLowerCase().includes('earfcn ul')) {
scc2[4] = e.value;
} else {
html += createRowForModal(_t(e.key), e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 65:
description = paramdesc('rssi', e.value);
scc2[5] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 66:
description = paramdesc('rsrp', e.value);
scc2[6] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 67:
description = paramdesc('rsrq', e.value);
scc2[7] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 68:
if ((e.key).toLowerCase().includes('sinr')) {
scc2[8] = e.value;
} else {
html += createRowForModal(_t(e.key), e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
// SCC3
case 70:
if ((e.value).includes(' @')) {
scc3[1] = (e.value).split(' @')[0];
scc3[2] = (e.value).split(' @')[1];
} else {
scc3[1] = e.value;
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 72:
scc3[2] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 73:
scc3[3] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 74:
if (!(e.key).toLowerCase().includes('earfcn ul')) {
scc3[4] = e.value;
} else {
html += createRowForModal(e.key, e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 75:
description = paramdesc('rssi', e.value);
scc3[5] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 76:
description = paramdesc('rsrp', e.value);
scc3[6] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 77:
description = paramdesc('rsrq', e.value);
scc3[7] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 78:
if ((e.key).toLowerCase().includes('sinr')) {
scc3[8] = e.value;
} else {
html += createRowForModal(_t(e.key), e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
// SCC4
case 80:
if ((e.value).includes(' @')) {
scc4[1] = (e.value).split(' @')[0];
scc4[2] = (e.value).split(' @')[1];
} else {
scc4[1] = e.value;
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 82:
scc4[2] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 83:
scc4[3] = e.value;
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 84:
if (!(e.key).toLowerCase().includes('earfcn ul')) {
scc4[4] = e.value;
} else {
html += createRowForModal(_t(e.key), e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 85:
description = paramdesc('rssi', e.value);
scc4[5] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 86:
description = paramdesc('rsrp', e.value);
scc4[6] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 87:
description = paramdesc('rsrq', e.value);
scc4[7] = e.value + description.replace(', ', '<br>');
htmlxs += createRowForModal(_t(e.key), e.value + description);
break;
case 88:
if ((e.key).toLowerCase().includes('sinr')) {
scc4[8] = e.value;
} else {
html += createRowForModal(_t(e.key), e.value);
}
htmlxs += createRowForModal(_t(e.key), e.value);
break;
case 150:
ulscc[1] = e.value;
htmlxs += createRowForModal(e.key, e.value);
break;
case 152:
ulscc[2] = e.value;
htmlxs += createRowForModal(e.key, e.value);
break;
case 153:
ulscc[3] = e.value;
htmlxs += createRowForModal(e.key, e.value);
break;
case 154:
ulscc[4] = e.value;
htmlxs += createRowForModal(e.key, e.value);
break;
default:
if (e.idx < 30) {
htmlco += createRowForModal(_t(e.key), e.value);
} else {
html += createRowForModal(_t(e.key), e.value);
htmlxs += createRowForModal(_t(e.key), e.value);
}
}
});
htmlco += '<div class="visible-xs-block visible-sm-block">' + htmlxs + '</div>';
if (pcc.length + scc1.length + scc2.length + scc3.length + scc4.length > 0) {
htmlco += '<div class="margintop hidden-xs hidden-sm">' + html;
if (pcc.length > 0) {
pcc[0] = 'PCC';
for (var idx = 0; idx <= 9; idx++) {
if (typeof pcc[idx] === 'undefined') { pcc[idx] = '-'; }
}
htmlco += createRow9ColForModal(['', _t('Band'), _t('Bandwidth'), 'PCI', 'EARFCN', 'RSSI', 'RSRP', 'RSRQ', 'SINR']);
htmlco += createRow9ColForModal(pcc);
}
if (scc1.length > 0) {
scc1[0] = 'SCC1';
for (var idx = 0; idx <= 9; idx++) {
if (typeof scc1[idx] === 'undefined') { scc1[idx] = '-'; }
}
htmlco += createRow9ColForModal(scc1);
}
if (scc2.length > 0) {
scc2[0] = 'SCC2';
for (var idx = 0; idx <= 9; idx++) {
if (typeof scc2[idx] === 'undefined') { scc2[idx] = '-'; }
}
htmlco += createRow9ColForModal(scc2);
}
if (scc3.length > 0) {
scc3[0] = 'SCC3';
for (var idx = 0; idx <= 9; idx++) {
if (typeof scc3[idx] === 'undefined') { scc3[idx] = '-'; }
}
htmlco += createRow9ColForModal(scc3);
}
if (scc4.length > 0) {
scc4[0] = 'SCC4';
for (var idx = 0; idx <= 9; idx++) {
if (typeof scc4[idx] === 'undefined') { scc4[idx] = '-'; }
}
htmlco += createRow9ColForModal(scc4);
}
if (ulscc.length > 0) {
ulscc[0] = 'UL SCC';
for (var idx = 0; idx <= 9; idx++) {
if (typeof ulscc[idx] === 'undefined') { ulscc[idx] = '-'; }
}
htmlco += createRow9ColForModal(ulscc);
}
htmlco += '</div>';
}
showMsg(htmlco);
}
/*****************************************************************************/
window.onload = info_onload;
File diff suppressed because one or more lines are too long
@@ -1,53 +0,0 @@
#!/bin/sh
#
# (c) 2024-2025 Cezary Jackiewicz <cezary@eko.one.pl>
#
. /lib/functions.sh
RES="/usr/share/modemdata"
ECM=""
SEPARATOR=""
parse_section() {
[ -n "$SEPARATOR" ] && echo "$SEPARATOR"
local section="$1"
config_get device "$section" device ""
config_get network "$section" network ""
config_get force_plmn "$section" force_plmn "0"
if echo "x$device" | grep -q "192.168."; then
ECM="$RES/addon/ecm/huawei.sh $device"
else
ECM=""
if [ ! -e /var/state/3ginfo-detected ]; then
[ -z "$device" ] && device=$(/usr/share/3ginfo/detectdevice.sh)
[ -z "$network" ] && network=$(/usr/share/3ginfo/detectsection.sh "$section")
fi
config_get pincode "$section" pincode ""
if [ -n "$pincode" ] && [ ! -e /var/state/3ginfo-pincode ]; then
[ -n "$device" ] && sms_tool -d "$device" at "at+cpin=\"$pincode\""
fi
fi
echo "["
$RES/network.sh "$network" | tr -d '\n'
echo ","
if [ -n "$ECM" ]; then
$ECM params
else
$RES/params.sh "$device" "$force_plmn" | tr -d '\n'
fi
echo "]"
SEPARATOR=","
}
config_load 3ginfo
echo -e "Content-type: application/json\n\n"
echo '{"res":['
config_foreach parse_section 3ginfo
echo ']}'
touch /var/state/3ginfo-detected
touch /var/state/3ginfo-pincode
exit 0
@@ -1,42 +0,0 @@
#!/bin/sh
#
# (c) 2024-2025 Cezary Jackiewicz <cezary@eko.one.pl>
#
. /lib/functions.sh
RES="/usr/share/modemdata"
SEPARATOR=""
parse_section() {
[ -n "$SEPARATOR" ] && echo "$SEPARATOR"
local section="$1"
local device
local network
config_get device "$section" device ""
if echo "x$device" | grep -q "192.168."; then
$RES/addon/ecm/huawei.sh $device product
else
if [ ! -e /var/state/3ginfo-detected ]; then
[ -z "$device" ] && device=$(/usr/share/3ginfo/detectdevice.sh)
fi
config_get pincode "$section" pincode ""
if [ -n "$pincode" ] && [ ! -e /var/state/3ginfo-pincode ]; then
[ -n "$device" ] && sms_tool -d "$device" at "at+cpin=\"$pincode\""
fi
$RES/product.sh "$device" | tr -d '\n'
fi
SEPARATOR=","
}
config_load 3ginfo
echo -e "Content-type: application/json\n\n"
echo '{"res":['
config_foreach parse_section 3ginfo
echo ']}'
touch /var/state/3ginfo-detected
touch /var/state/3ginfo-pincode
exit 0
@@ -1,4 +0,0 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
@@ -1,39 +0,0 @@
{
"device": "Urządzenie",
"vendor": "Producent",
"product": "Model",
"revision": "Wersja",
"imei": "Identyfikator modemu (IMEI)",
"iccid": "Numer karty SIM (ICCID)",
"imsi": "Identyfikator abonenta (IMSI)",
"parameters": "Parametry",
"signal": "Sygnał",
"mode": "Technologia",
"simstatus": "Status karty SIM",
"more": "więcej parametrów",
"btslocation": "lokalizacja stacji bazowej",
"connection": "Połączenie z internetem",
"connectiontime": "Czas połączenia",
"tx": "Wysłano",
"rx": "Pobrano",
"registered0": "Brak sieci",
"registered1": "Zalogowana do sieci macierzystej",
"registered2": "Wyszukiwanie operatora",
"registered3": "Odmowa dostępu",
"registered5": "Zalogowana do sieci w roamingu",
"registered6": "Zalogowana do sieci macierzystej, tylko SMS",
"registered7": "Zalogowana do sieci w roamingu, tylko SMS",
"since": "od",
"h": "g",
"temperature": "Temperatura",
"band": "Pasmo",
"primaryband": "Pasmo podstawowe",
"bandwidth": "Szerokość",
"excellent": "doskonały",
"good": "dobry",
"fair": "słaby",
"poor": "zły",
"verypoor": "bardzo zły",
"pleasewait": "Proszę czekać",
"country": "Kraj"
}
@@ -1,145 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="cezary@eko.one.pl">
<title>3G/4G/5G</title>
<link href="/bootstrap.min.css?v=1" rel="stylesheet">
<!--[if lt IE 9]>
<script src="/html5shiv.min.js?v=1"></script>
<script src="/respond.min.js?v=1"></script>
<![endif]-->
<link href="/3ginfo.css?v=1" rel="stylesheet">
<script src="/3ginfo.js?v=1"></script>
</head>
<body>
<div class="container">
<div id="div_content">
<div id="div_template" style="display:none">
<h3 class="section" data-i18n="device">Device</h3>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="vendor">Vendor</div>
<div class="col-xs-6">
<p id="vendor_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="product">Product</div>
<div class="col-xs-6">
<p id="product_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="revision">Revision</div>
<div class="col-xs-6">
<p id="revision_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="imei">International Mobile Equipment Identity (IMEI)</div>
<div class="col-xs-6">
<p id="imei_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="iccid">SIM number (ICCID)</div>
<div class="col-xs-6">
<p id="iccid_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="imsi">International Mobile Subscriber Identity (IMSI)</div>
<div class="col-xs-6">
<p id="imsi_idx">-</p>
</div>
</div>
<h3 class="section" data-i18n="parameters">Parameters</h3>
<div class="row">
<div class="col-sm-8">
<div class="row">
<div class="col-xs-6 text-right" data-i18n="operator">Operator</div>
<div class="col-xs-6">
<p id="operator_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="signal">Signal</div>
<div class="col-xs-6">
<p id="signal_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="mode">Mode</div>
<div class="col-xs-6">
<p id="mode_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="simstatus">SIM status</div>
<div class="col-xs-6">
<p id="registration_idx">-</p>
</div>
</div>
<div class="row" id="div_addon_idx" style="display:none;">
<div class="col-xs-6 col-xs-offset-6">
<p><a href="#" class="click" onclick="modemaddon(_idx);" data-i18n="more">more parameters</a></p>
</div>
</div>
<div class="row" id="div_btsearch_idx" style="display:none;">
<div class="col-xs-6 col-xs-offset-6">
<p><a href="#" id="btsearch_idx" class="click" target="_blank" data-i18n="btslocation">BTS location</a>&nbsp;&rarr;</p>
</div>
</div>
</div>
<div class="col-sm-4 center-xd">
<div class="signal-bars sizing-box lzero one-bar" id="signal_bars_idx">
<div class="first-bar bar"></div>
<div class="second-bar bar"></div>
<div class="third-bar bar"></div>
<div class="fourth-bar bar"></div>
<div class="fifth-bar bar"></div>
</div>
</div>
</div>
<h3 class="section" data-i18n="connection">Connection</h3>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="connectiontime">Connection time</div>
<div class="col-xs-6">
<p><span id="uptime_idx">-</span><span class="visible-xs oneline"></span><span id="uptime_since_idx"></span></p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="tx">Uploaded</div>
<div class="col-xs-6">
<p id="tx_idx">-</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 text-right" data-i18n="rx">Downloaded</div>
<div class="col-xs-6">
<p id="rx_idx">-</p>
</div>
</div>
</div>
<div id="div_modems">
<div class="flex-center position-ref full-height">
<div class="flex-content">
<div data-i18n="pleasewait">Please wait</div>
</div>
</div>
</div>
</div>
<div id="div_msg" class="modal">
<div id="msgtxt" class="modal-content text-center" data-i18n="pleasewait">Please wait</div>
</div>
<div class="text-center">&nbsp;</div>
</body>
</html>
@@ -1,5 +0,0 @@
/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
* */
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
@@ -1,51 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.01
waitquiet 0.01 0.01
let $c="AT+CSQ^m"
let $r="+CSQ"
gosub readatcmd
let $c="AT+COPS=3,0;+COPS?^m"
let $r="+COPS"
gosub readatcmd
let $c="AT+COPS=3,2;+COPS?^m"
let $r="+COPS"
gosub readatcmd
let $c="AT+CREG=2;+CREG?^m"
let $r="+CREG"
gosub readatcmd
let $c="AT+CPIN?^m"
let $r="+CPIN"
gosub readatcmd
exit 0
:readatcmd
let i=15
send $c
:loop
get 0.1 "^m" $s
let l=len($r)
if len($s) < l goto loop1
if $mid($s,1,l) <> $r goto loop1
print $s
return
:loop1
if len($s) < 2 goto loop2
if $mid($s,1,2) = "ER" return
if $mid($s,1,2) = "CO" return
if len($s) < 10 goto loop2
if $mid($s,1,10) != "+CME ERROR" goto loop2
print $s
return
:loop2
if i = 0 exit 0
let i=i-1
goto loop
@@ -1,118 +0,0 @@
#!/bin/sh
#
# (c) 2010-2019 Cezary Jackiewicz <cezary@eko.one.pl>
#
RES="/usr/share/3ginfo-lite"
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
if [ "x$DEVICE" = "x" ]; then
touch /tmp/modem
DEVICE=$(cat /tmp/modem)
else
echo "$DEVICE" > /tmp/modem
fi
if [ "x$DEVICE" = "x" ]; then
devices=$(ls /dev/ttyUSB* /dev/cdc-wdm* /dev/ttyACM* /dev/ttyHS* 2>/dev/null | sort -r)
for d in $devices; do
DEVICE=$d gcom -s $RES/probeport.gcom > /dev/null 2>&1
if [ $? = 0 ]; then
echo "$d" > /tmp/modem
break
fi
done
DEVICE=$(cat /tmp/modem)
fi
if [ "x$DEVICE" = "x" ]; then
echo '{"error":"Device not found"}'
exit 0
fi
O=$(gcom -d $DEVICE -s $RES/3ginfo.gcom 2>/dev/null)
# CSQ
CSQ=$(echo "$O" | awk -F[,\ ] '/^\+CSQ/ {print $2}')
[ "x$CSQ" = "x" ] && CSQ=-1
if [ $CSQ -ge 0 -a $CSQ -le 31 ]; then
CSQ_PER=$(($CSQ * 100/31))
else
CSQ="-"
CSQ_PER="0"
fi
# COPS numeric
COPS_NUM=$(echo "$O" | awk -F[\"] '/^\+COPS: .,2/ {print $2}' | head -1)
if [ "x$COPS_NUM" = "x" ]; then
COPS_NUM="-"
COPS_MCC="-"
COPS_MNC="-"
else
COPS_MCC=${COPS_NUM:0:3}
COPS_MNC=${COPS_NUM:3:3}
COPS=$(awk -F[\;] '/'$COPS_NUM'/ {print $2}' $RES/mccmnc.dat)
fi
[ "x$COPS" = "x" ] && COPS=$COPS_NUM
if [ -z "$FORCE_PLMN" ]; then
# COPS alphanumeric
T=$(echo "$O" | awk -F[\"] '/^\+COPS: .,0/ {print $2}')
[ "x$T" != "x" ] && COPS="$T"
fi
# CREG
eval $(echo "$O" | busybox awk -F[,] '/^\+CREG/ {gsub(/[[:space:]"]+/,"");printf "T=\"%d\";LAC_HEX=\"%X\";CID_HEX=\"%X\";LAC_DEC=\"%d\";CID_DEC=\"%d\";MODE1=\"%d\"", $2, "0x"$3, "0x"$4, "0x"$3, "0x"$4, $5}')
case "$T" in
0*) REG="0";;
1*) REG="1";;
2*) REG="2";;
3*) REG="3";;
5*) REG="5";;
*) REG="-";;
esac
# MODE
[ -z "$MODE1" -o "x$MODE1" = "x0" ] && MODE1=$(echo "$O" | awk -F[,] '/^\+COPS/ {print $4;exit}')
case "$MODE1" in
2*) MODE="UMTS";;
3*) MODE="EDGE";;
4*) MODE="HSDPA";;
5*) MODE="HSUPA";;
6*) MODE="HSPA";;
7*) MODE="LTE";;
*) MODE="-";;
esac
T=$(echo "$O" | awk -F[,\ ] '/^\+CME ERROR:/ {print $0;exit}')
if [ -n "$T" ]; then
case "$T" in
"+CME ERROR: 10"*) REG="SIM not inserted";;
"+CME ERROR: 11"*) REG="SIM PIN required";;
"+CME ERROR: 12"*) REG="SIM PUK required";;
"+CME ERROR: 13"*) REG="SIM failure";;
"+CME ERROR: 14"*) REG="SIM busy";;
"+CME ERROR: 15"*) REG="SIM wrong";;
"+CME ERROR: 17"*) REG="SIM PIN2 required";;
"+CME ERROR: 18"*) REG="SIM PUK2 required";;
*) REG=$(echo "$T" | cut -f2 -d: | xargs);;
esac
fi
cat <<EOF
{
"csq":"$CSQ",
"signal":"$CSQ_PER",
"operator_name":"$COPS",
"operator_mcc":"$COPS_MCC",
"operator_mnc":"$COPS_MNC",
"mode":"$MODE",
"registration":"$REG",
"lac_dec":"$LAC_DEC",
"lac_hex":"$LAC_HEX",
"cid_dec":"$CID_DEC",
"cid_hex":"$CID_HEX"
}
EOF
exit 0
@@ -1,9 +0,0 @@
#!/bin/sh
echo "Content-type: application/json"
echo ""
if [ -e /dev/cdc-wdm0 ]; then
uqmi -s -d /dev/cdc-wdm0 --get-signal-info | sed 's/"type":"hdr".*,"type"/"type"/g'
else
echo "{}"
fi
exit 0
-42
View File
@@ -1,42 +0,0 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Status" />
<meta name="author" content="Cezary Jackiewicz">
<title>QMI</title>
<link rel="icon" href="/favicon.ico">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container">
<p> </p>
<table class='table table-condensed table-striped'>
<colgroup><col class='col-xs-4'><col class='col-xs-2'><col class='col-xs-2'><col class='col-xs-2'><col class='col-xs-2'></colgroup>
<thead><tr><th>Parametr</th><th>Wartość</th><th>Min</th><th>Max</th><th>Jednostka</th></tr></thead>
<tbody>
<tr><td><span id='key1'>&nbsp;</span></td><td><span id='val1'></span></td><td><span id='min1'></span></td><td><span id='max1'></span></td><td><span id='unit1'></span></td></tr>
<tr><td><span id='key2'>&nbsp;</span></td><td><span id='val2'></span></td><td><span id='min2'></span></td><td><span id='max2'></span></td><td><span id='unit2'></span></td></tr>
<tr><td><span id='key3'>&nbsp;</span></td><td><span id='val3'></span></td><td><span id='min3'></span></td><td><span id='max3'></span></td><td><span id='unit3'></span></td></tr>
<tr><td><span id='key4'>&nbsp;</span></td><td><span id='val4'></span></td><td><span id='min4'></span></td><td><span id='max4'></span></td><td><span id='unit4'></span></td></tr>
<tr><td><span id='key5'>&nbsp;</span></td><td><span id='val5'></span></td><td><span id='min5'></span></td><td><span id='max5'></span></td><td><span id='unit5'></span></td></tr>
</tbody>
</table>
<div id="div_g" style="width:100%; height:300px;"><p class="text-center">Trwa zbieranie danych...</p></div>
<p><i>Interwał 3s, okno 15 minut.</i></p>
</div>
<script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dygraph/1.1.1/dygraph-combined.js"></script>
<script src="/qmisignal.js"></script>
</body>
</html>
-102
View File
@@ -1,102 +0,0 @@
var data = [];
var g;
var min = [], max = [];
var colors = [];
colors['signal'] = '#333';
colors['rssi'] = '#333';
colors['rsrp'] = '#333';
colors['ecio'] = '#333';
colors['rsrq'] = '#333';
colors['snr'] = '#333';
window.intervalId = setInterval(function() {
$.getJSON( "/cgi-bin/qmisignal.sh", function(data1) {
var idx=0
$.each(data1, function(i, val) {
idx++;
unit='';
if (!min[i]) {min[i]=999;max[i]=-999;}
switch(i) {
case "type":
val=(val).toUpperCase();
break;
case "signal":
case "rssi":
case "rsrp":
if (val < min[i]) {min[i] = val;}
if (val > max[i]) {max[i] = val;}
unit='dBm'
break;
case "ecio":
case "rsrq":
case "snr":
if (val < min[i]) {min[i] = val;}
if (val > max[i]) {max[i] = val;}
unit='dB'
break;
}
$("#key"+idx).text(''+i);
$("#val"+idx).text(''+val);
$('#val'+idx).css('color', colors[i]);
$("#unit"+idx).text(''+unit);
$('#unit'+idx).css('color', colors[i]);
if (i != 'type')
{
$("#min"+idx).text(''+min[i]);
$('#min'+idx).css('color', colors[i]);
$("#max"+idx).text(''+max[i]);
$('#max'+idx).css('color', colors[i]);
}
});
data.push([new Date(),
data1["signal"],
data1["rssi"],
data1["rsrp"],
data1["ecio"],
data1["rsrq"],
data1["snr"]
]);
if (data.length > 300) {data.shift();}
if (g==null) {
g = new Dygraph(document.getElementById("div_g"), data, {
drawPoints: false,
showRoller: false,
labels: ['', 'Signal', 'RSSI', 'RSRP', 'ECIO', 'RSRQ', 'SNR'],
labelsSeparateLines: true,
ylabel: 'RSSI, RSRP [dBm]',
y2label: 'ECIO, RSRQ, SNR [dB]',
series : {
'ECIO': {axis: 'y2'},
'RSRQ': {axis: 'y2'},
'SNR': {axis: 'y2'}
},
axes: {
y: {independentTicks: true},
y2: {
independentTicks: true,
ticker: Dygraph.numericLinearTicks,
drawGrid: true,
gridLineColor: "#ff0000",
gridLinePattern: [4,4]
}
}
});
var tcolors = g.getColors();
colors['signal'] = tcolors[0];
colors['rssi'] = tcolors[1];
colors['rsrp'] = tcolors[2];
colors['ecio'] = tcolors[3];
colors['rsrq'] = tcolors[4];
colors['snr'] = tcolors[5];
} else {
g.updateOptions({'file':data});
}
});
}, 3000);
-7
View File
@@ -1,7 +0,0 @@
config 3ginfo
option device ''
option http_port '81'
option language 'pl'
option network 'wan'
option pincode ''
@@ -1,4 +0,0 @@
case "$ACTION" in
remove)
[ -f /tmp/pincode_was_given ] && rm -f /tmp/pincode_was_given;;
esac
@@ -1,4 +0,0 @@
#!/bin/sh
ln -s /usr/share/3ginfo/cgi-bin/3ginfo.sh /usr/bin/3ginfo
exit 0
@@ -1,593 +0,0 @@
#!/bin/sh
#
# (c) 2010-2026 Cezary Jackiewicz <cezary@eko.one.pl>
#
# Output format
# 0 - html
# 1 - txt
# 2 - json
FORMAT=1
RES="/usr/share/3ginfo"
LANG=$(uci -q get 3ginfo.@3ginfo[0].language)
[ "x$LANG" = "x" ] && LANG="en"
getpath() {
devname="$(basename "$1")"
case "$devname" in
'tty'*)
devpath="$(readlink -f /sys/class/tty/$devname/device)"
P=${devpath%/*/*}
;;
*)
devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)"
P=${devpath%/*}
;;
esac
}
showjsonerror() {
echo "{\"error\": \"$1\"}"
}
if [ "x$1" = "xjson" ]; then
FORMAT=2
else
if [ "`basename $0`" = "3ginfo" ]; then
FORMAT=1
else
FORMAT=0
echo -e "Content-type: text/html\n\n"
fi
if [ ! -e $RES/msg.dat.$LANG ]; then
echo "File missing: $RES/msg.dat.$LANG"
exit 0
fi
. $RES/msg.dat.$LANG
fi
# odpytanie urzadzenia
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
if echo "x$DEVICE" | grep -q "192.168."; then
if grep -q "Vendor=1bbb" /sys/kernel/debug/usb/devices; then
O=$($RES/scripts/alcatel_hilink.sh $DEVICE)
fi
if grep -q "Vendor=12d1" /sys/kernel/debug/usb/devices; then
O=$($RES/scripts/huawei_hilink.sh $DEVICE)
fi
if grep -q "Vendor=19d2" /sys/kernel/debug/usb/devices; then
O=$($RES/scripts/zte.sh $DEVICE)
fi
SEC=$(uci -q get 3ginfo.@3ginfo[0].network)
SEC=${SEC:-wan}
else
if [ "x$DEVICE" = "x" ]; then
devices=$(ls /dev/ttyUSB* /dev/cdc-wdm* /dev/ttyACM* /dev/ttyHS* 2>/dev/null | sort -r);
for d in $devices; do
DEVICE=$d gcom -s $RES/scripts/probeport.gcom > /dev/null 2>&1
if [ $? = 0 ]; then
uci set 3ginfo.@3ginfo[0].device="$d"
uci commit 3ginfo
break
fi
done
DEVICE=$(uci -q get 3ginfo.@3ginfo[0].device)
fi
if [ "x$DEVICE" = "x" ]; then
[ $FORMAT -eq 0 ] && echo "<h3 style='color:red;' class=\"c\">$NOTDETECTED</h3>"
[ $FORMAT -eq 1 ] && echo $NOTDETECTED
[ $FORMAT -eq 2 ] && showjsonerror "NOTDETECTED"
exit 0
fi
if [ ! -e $DEVICE ]; then
[ $FORMAT -eq 0 ] && echo "<h3 style='color:red;' class=\"c\">$NODEVICE $DEVICE!</h3>"
[ $FORMAT -eq 1 ] && echo "$NODEVICE $DEVICE."
[ $FORMAT -eq 2 ] && showjsonerror "NODEVICE $DEVICE"
exit 0
fi
# znajdz odpowiednia sekcje w konfiguracji
SEC=$(uci -q get 3ginfo.@3ginfo[0].network)
if [ -z "$SEC" ]; then
getpath $DEVICE
PORIG=$P
for DEV in /sys/class/tty/* /sys/class/usbmisc/*; do
getpath "/dev/"${DEV##/*/}
if [ "x$PORIG" = "x$P" ]; then
SEC=$(uci show network | grep "/dev/"${DEV##/*/} | cut -f2 -d.)
[ -n "$SEC" ] && break
fi
done
fi
# [ "${DEVICE%%[0-9]}" = "/dev/ttyUSB" ] && stty -F $DEVICE -iexten -opost -icrnl
# daj pin jak jest taka potrzeba
if [ ! -f /tmp/pincode_was_given ]; then
# tylko za pierwszym razem
if [ ! -z $SEC ]; then
PINCODE=$(uci -q get network.$SEC.pincode)
fi
if [ -z "$PINCODE" ]; then
PINCODE=$(uci -q get 3ginfo.@3ginfo[0].pincode)
fi
if [ ! -z $PINCODE ]; then
PINCODE="$PINCODE" gcom -d "$DEVICE" -s /etc/gcom/setpin.gcom > /dev/null || {
[ $FORMAT -eq 0 ] && echo "<h3 style='color:red;' class=\"c\">$PINERROR</h3>"
[ $FORMAT -eq 1 ] && echo "$PINERROR"
[ $FORMAT -eq 2 ] && showjsonerror "PINERROR"
exit 0
}
fi
touch /tmp/pincode_was_given
fi
O=$(gcom -d $DEVICE -s $RES/scripts/3ginfo.gcom 2>/dev/null)
fi
if [ "x$1" = "xtest" ]; then
echo "$O"
echo "---------------------------------------------------------------"
ls /dev/tty*
echo "---------------------------------------------------------------"
cat /sys/kernel/debug/usb/devices
echo "---------------------------------------------------------------"
uci show 3ginfo
exit 0
fi
# CSQ
CSQ=$(echo "$O" | awk -F[,\ ] '/^\+CSQ/ {print $2}')
[ "x$CSQ" = "x" ] && CSQ=-1
if [ $CSQ -ge 0 -a $CSQ -le 31 ]; then
# for Gargoyle
[ -e /tmp/strength.txt ] && echo "+CSQ: $CSQ,99" > /tmp/strength.txt
CSQ_PER=$(($CSQ * 100/31))
CSQ_COL="red"
[ $CSQ -ge 10 ] && CSQ_COL="orange"
[ $CSQ -ge 15 ] && CSQ_COL="yellow"
[ $CSQ -ge 20 ] && CSQ_COL="green"
CSQ_RSSI=$((2 * CSQ - 113))
else
CSQ="-"
CSQ_PER="0"
CSQ_COL="black"
CSQ_RSSI="-"
fi
# COPS
COPS_NUM=$(echo "$O" | awk -F[\"] '/^\+COPS: .,2/ {print $2}')
if [ "x$COPS_NUM" = "x" ]; then
COPS_NUM="-"
COPS_MCC="-"
COPS_MNC="-"
else
COPS_MCC=${COPS_NUM:0:3}
COPS_MNC=${COPS_NUM:3:3}
COPS=$(awk -F[\;] '/'$COPS_NUM'/ {print $2}' $RES/mccmnc.dat)
[ "x$COPS" = "x" ] && COPS="-"
fi
# dla modemow Option i ZTE
if [ "$COPS_NUM" = "-" ]; then
COPS=$(echo "$O" | awk -F[\"] '/^\+COPS: .,0/ {print $2}')
[ "x$COPS" = "x" ] && COPS="---"
COPS_TMP=$(awk -F[\;] 'BEGIN {IGNORECASE = 1} /'"$COPS"'/ {print $2}' $RES/mccmnc.dat)
if [ "x$COPS_TMP" = "x" ]; then
COPS_NUM="-"
COPS_MCC="-"
COPS_MNC="-"
else
COPS="$COPS_TMP"
COPS_NUM=$(awk -F[\;] 'BEGIN {IGNORECASE = 1} /'"$COPS"'/ {print $1}' $RES/mccmnc.dat)
COPS_MCC=${COPS_NUM:0:3}
COPS_MNC=${COPS_NUM:3:3}
fi
fi
# Technologia
MODE="-"
# Nowe Huawei
TECH=$(echo "$O" | awk -F[,] '/^\^SYSINFOEX/ {print $9}' | sed 's/"//g')
if [ "x$TECH" != "x" ]; then
MODE=$(echo "$TECH" | sed 's/-//g')
fi
# Starsze modele Huawei i inne pozostale
if [ "x$MODE" = "x-" ]; then
TECH=$(echo "$O" | awk -F[,] '/^\^SYSINFO/ {print $7}')
case $TECH in
17*) MODE="HSPA+ (64QAM)";;
18*) MODE="HSPA+ (MIMO)";;
1*) MODE="GSM";;
2*) MODE="GPRS";;
3*) MODE="EDGE";;
4*) MODE="UMTS";;
5*) MODE="HSDPA";;
6*) MODE="HSUPA";;
7*) MODE="HSPA";;
9*) MODE="HSPA+";;
*) MODE="-";;
esac
fi
# ZTE
if [ "x$MODE" = "x-" ]; then
TECH=$(echo "$O" | awk -F[,\ ] '/^\+ZPAS/ {print $2}' | sed 's/"//g')
if [ "x$TECH" != "x" -a "x$TECH" != "xNo" ]; then
MODE="$TECH"
fi
fi
# OPTION
if [ "x$MODE" = "x-" ]; then
TECH=$(echo "$O" | awk -F, '/^\+COPS: 0/ {print $4}')
MODE="-"
if [ "$TECH" = 0 ]; then
TECH1=$(echo "$O" | awk '/^_OCTI/ {print $2}' | cut -f1 -d,)
case $TECH1 in
1*) MODE="GSM";;
2*) MODE="GPRS";;
3*) MODE="EDGE";;
*) MODE="-";;
esac
elif [ "$TECH" = 2 ]; then
TECH1=$(echo "$O" | awk '/^_OWCTI/ {print $2}')
case $TECH1 in
1*) MODE="UMTS";;
2*) MODE="HSDPA";;
3*) MODE="HSUPA";;
4*) MODE="HSPA";;
*) MODE="-";;
esac
fi
fi
# Sierra
if [ "x$MODE" = "x-" ]; then
TECH=$(echo "$O" | awk -F[,\ ] '/^\*CNTI/ {print $3}' | sed 's|/|,|g')
if [ "x$TECH" != "x" ]; then
MODE="$TECH"
fi
fi
# Novatel
if [ "x$MODE" = "x-" ]; then
TECH=$(echo "$O" | awk -F[,\ ] '/^\$CNTI/ {print $4}' | sed 's|/|,|g')
if [ "x$TECH" != "x" ]; then
MODE="$TECH"
fi
fi
# Vodafone - icera
if [ "x$MODE" = "x-" ]; then
TECH=$(echo "$O" | awk -F[,\ ] '/^\%NWSTATE/ {print $4}' | sed 's|/|,|g')
if [ "x$TECH" != "x" ]; then
MODE="$TECH"
fi
fi
# SIMCOM
if [ "x$MODE" = "x-" ]; then
TECH=$(echo "$O" | awk -F[,\ ] '/^\+CNSMOD/ {print $3}')
case "$TECH" in
1*) MODE="GSM";;
2*) MODE="GPRS";;
3*) MODE="EDGE";;
4*) MODE="UMTS";;
5*) MODE="HSDPA";;
6*) MODE="HSUPA";;
7*) MODE="HSPA";;
*) MODE="-";;
esac
fi
# generic 3GPP TS 27.007 V10.4.0
if [ "x$MODE" = "x-" ]; then
TECH=$(echo "$O" | awk -F[,] '/^\+COPS/ {print $4}')
case "$TECH" in
2*) MODE="UMTS";;
3*) MODE="EDGE";;
4*) MODE="HSDPA";;
5*) MODE="HSUPA";;
6*) MODE="HSPA";;
7*) MODE="LTE";;
*) MODE="-";;
esac
fi
# CREG
CREG="+CGREG"
LAC=$(echo "$O" | awk -F[,] '/\'$CREG'/ {printf "%s", toupper($3)}' | sed 's/[^A-F0-9]//g')
if [ "x$LAC" = "x" ]; then
CREG="+CREG"
LAC=$(echo "$O" | awk -F[,] '/\'$CREG'/ {printf "%s", toupper($3)}' | sed 's/[^A-F0-9]//g')
fi
if [ "x$LAC" != "x" ]; then
LAC_NUM=$(printf %d 0x$LAC)
else
LAC="-"
LAC_NUM="-"
fi
# TAC
TAC=$(echo "$O" | awk -F[,] '/^\+CEREG/ {printf "%s", toupper($3)}' | sed 's/[^A-F0-9]//g')
if [ "x$TAC" != "x" ]; then
TAC_NUM=$(printf %d 0x$TAC)
else
TAC="-"
TAC_NUM="-"
fi
# ECIO / RSCP
ECIO="-"
RSCP="-"
ECIx=$(echo "$O" | awk -F[,\ ] '/^\+ZRSSI:/ {print $3}')
if [ "x$ECIx" != "x" ]; then
ECIO=`expr $ECIx / 2`
ECIO="-"$ECIO
fi
RSCx=$(echo "$O" | awk -F[,\ ] '/^\+ZRSSI:/ {print $4}')
if [ "x$RSCx" != "x" ]; then
RSCP=`expr $RSCx / 2`
RSCP="-"$RSCP
fi
RSCx=$(echo "$O" | awk -F[,\ ] '/^\^CSNR:/ {print $2}')
if [ "x$RSCx" != "x" ]; then
RSCP=$RSCx
fi
ECIx=$(echo "$O" | awk -F[,\ ] '/^\^CSNR:/ {print $3}')
if [ "x$ECIx" != "x" ]; then
ECIO=$ECIx
fi
# RSRP / RSRQ
RSRP="-"
RSRQ="-"
SINR="-"
RSRx=$(echo "$O" | awk -F[,:] '/^\^LTERSRP:/ {print $2}')
if [ "x$RSRx" != "x" ]; then
RSRP=$RSRx
RSRQ=$(echo "$O" | awk -F[,:] '/^\^LTERSRP:/ {print $3}')
fi
TECH=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $2}' | sed 's/[" ]//g')
if [ "x$TECH" != "x" ]; then
PARAM2=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $4}')
PARAM3=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $5}')
PARAM4=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $6}')
case "$TECH" in
WCDMA*)
RSCP=$(awk 'BEGIN {print -121 + '$PARAM2'}')
ECIO=$(awk 'BEGIN {print -32.5 + '$PARAM3'/2}')
;;
LTE*)
RSRP=$(awk 'BEGIN {print -141 + '$PARAM2'}')
SINR=$(awk 'BEGIN {print -20.2 + '$PARAM3'/5}')
RSRQ=$(awk 'BEGIN {print -20 + '$PARAM4'/2}')
;;
esac
fi
if [ -n "$SEC" ]; then
if [ "x$(uci -q get network.$SEC.proto)" = "xqmi" ]; then
. /usr/share/libubox/jshn.sh
json_init
json_load "$(uqmi -d "$(uci -q get network.$SEC.device)" --get-signal-info)" >/dev/null 2>&1
json_get_var T type
if [ "x$T" = "xlte" ]; then
json_get_var RSRP rsrp
json_get_var RSRQ rsrq
fi
if [ "x$T" = "xwcdma" ]; then
json_get_var ECIO ecio
json_get_var RSSI rssi
json_get_var RSCP rscp
if [ -z "$RSCP" ]; then
RSCP=$((RSSI+ECIO))
fi
fi
fi
fi
BTSINFO=""
CID=$(echo "$O" | awk -F[,] '/\'$CREG'/ {printf "%s", toupper($4)}' | sed 's/[^A-F0-9]//g')
if [ "x$CID" != "x" ]; then
CID_NUM=$(printf %d 0x$CID)
if [ ${#CID} -gt 4 ]; then
T=$(echo "$CID" | awk '{print substr($1,length(substr($1,1,length($1)-4))+1)}')
else
T=$CID
fi
CLF=$(uci -q get 3ginfo.@3ginfo[0].clf)
if [ -e "$CLF" ]; then
PAT="xxx"
[ "x$T" != "x-" -a "x$LAC_NUM" != "x-" ] && PAT="^$COPS_NUM;0x"$(printf %04X 0x$T)";0x"$(printf %04X $LAC_NUM)";"
is_gz=$(dd if="$CLF" bs=1 count=2 2>/dev/null | hexdump -v -e '1/1 "%02x"')
if [ "x$is_gz" = "x1f8b" ] ; then
BTSINFO="<a href=\"https://maps.google.pl/?t=k\&z=17\&q="$(zcat "$CLF" | awk -F";" '/'$PAT'/ {printf $5","$6}')"\">"$(zcat "$CLF" | awk -F";" '/'$PAT'/ {gsub(/\!/,"\\!");print $8}')"</a>"
else
BTSINFO="<a href=\"https://maps.google.pl/?t=k\&z=17\&q="$(awk -F";" '/'$PAT'/ {printf $5","$6}' "$CLF")"\">"$(awk -F";" '/'$PAT'/ {gsub(/\!/,"\\!");print $8}' "$CLF")"</a>"
fi
if [ $FORMAT -eq 2 ]; then
BTSINFO=$(echo "$BTSINFO" | sed 's!<a.*>\(.*\)</a>!\1!g')
fi
fi
if [ $FORMAT -eq 0 ]; then
case $COPS_NUM in
260*) CID="<a href=\"https://btsearch.pl/stations?q="$CID_NUM"\">$CID</a>";;
esac
fi
else
CID="-"
CID_NUM="-"
fi
# CGEQNEG
QOS_SHOW="none"
DOWN="-"
UP="-"
DOWx=$(echo "$O" | awk -F[,] '/\+CGEQNEG/ {printf "%s", $4}')
if [ "x$DOWx" != "x" ]; then
DOWN=$DOWx
UP=$(echo "$O" | awk -F[,] '/\+CGEQNEG/ {printf "%s", $3}')
QOS_SHOW="block"
fi
# SMS
if [ -e /usr/bin/gnokii ]; then
SMS_SHOW="block"
else
SMS_SHOW="none"
fi
# USSD
which ussd159 >/dev/null 2>&1
if [ $? -eq 0 ]; then
USSD_SHOW="block"
else
USSD_SHOW="none"
fi
# Stan limitu
LIMIT_SHOW="none"
LIMIT=$(uci -q get 3ginfo.@3ginfo[0].script)
if [ "x$LIMIT" != "x" ]; then
LIMIT_SHOW="block"
fi
# Status polaczenia
CONN_TIME="-"
RX="-"
TX="-"
if [ -z "$SEC" ]; then
STATUS=$NOINFO
[ $FORMAT -eq 2 ] && STATUS="NOINFO"
STATUS_TRE="-"
STATUS_SHOW="none"
STATUS_SHOW_BUTTON="none"
else
NETUP=$(ifstatus $SEC | grep "\"up\": true")
if [ -n "$NETUP" ]; then
[ $FORMAT -eq 0 ] && STATUS="<font color=green>$CONNECTED</font>"
[ $FORMAT -eq 1 ] && STATUS=$CONNECTED
[ $FORMAT -eq 2 ] && STATUS="CONNECTED"
STATUS_TRE=$DISCONNECT
CT=$(uci -q -P /var/state/ get network.$SEC.connect_time)
if [ -z $CT ]; then
CT=$(ifstatus $SEC | awk -F[:,] '/uptime/ {print $2}' | xargs)
else
UPTIME=$(cut -d. -f1 /proc/uptime)
CT=$((UPTIME-CT))
fi
if [ ! -z $CT ]; then
D=$(expr $CT / 60 / 60 / 24)
H=$(expr $CT / 60 / 60 % 24)
M=$(expr $CT / 60 % 60)
S=$(expr $CT % 60)
CONN_TIME=$(printf "%dd, %02d:%02d:%02d" $D $H $M $S)
fi
IFACE=$(ifstatus $SEC | awk -F\" '/l3_device/ {print $4}')
if [ -n "$IFACE" ]; then
RX=$(ifconfig $IFACE | awk -F[\(\)] '/bytes/ {printf "%s",$2}')
TX=$(ifconfig $IFACE | awk -F[\(\)] '/bytes/ {printf "%s",$4}')
fi
else
[ $FORMAT -eq 0 ] && STATUS="<font color=red>$DISCONNECTED</font>"
[ $FORMAT -eq 1 ] && STATUS=$DISCONNECTED
[ $FORMAT -eq 2 ] && STATUS="DISCONNECTED"
STATUS_TRE=$CONNECT
fi
STATUS_SHOW="block"
STATUS_SHOW_BUTTON="block"
fi
if [ "x"$(uci -q get 3ginfo.@3ginfo[0].connect_button) = "x0" ]; then
STATUS_SHOW_BUTTON="none"
fi
# Informacja o urzadzeniu
DEVICE=$(echo "$O" | awk -F[:] '/DEVICE/ { print $2}')
if [ "x$DEVICE" = "x" ]; then
DEVICE="-"
fi
# podmiana w szablonie
if [ $FORMAT -eq 2 ]; then
TEMPLATE="$RES/status.json"
else
[ $FORMAT -eq 0 ] && EXT="html"
[ $FORMAT -eq 1 ] && EXT="txt"
TEMPLATE="$RES/status.$EXT.$LANG"
fi
if [ -e $TEMPLATE ]; then
sed -e "s!{CSQ}!$CSQ!g; \
s!{CSQ_PER}!$CSQ_PER!g; \
s!{CSQ_RSSI}!$CSQ_RSSI!g; \
s!{CSQ_COL}!$CSQ_COL!g; \
s!{COPS}!$COPS!g; \
s!{COPS_NUM}!$COPS_NUM!g; \
s!{COPS_MCC}!$COPS_MCC!g; \
s!{COPS_MNC}!$COPS_MNC!g; \
s!{LAC}!$LAC!g; \
s!{LAC_NUM}!$LAC_NUM!g; \
s!{CID}!$CID!g; \
s!{CID_NUM}!$CID_NUM!g; \
s!{TAC}!$TAC!g; \
s!{TAC_NUM}!$TAC_NUM!g; \
s!{BTSINFO}!$BTSINFO!g; \
s!{DOWN}!$DOWN!g; \
s!{UP}!$UP!g; \
s!{QOS_SHOW}!$QOS_SHOW!g; \
s!{SMS_SHOW}!$SMS_SHOW!g; \
s!{USSD_SHOW}!$USSD_SHOW!g; \
s!{LIMIT_SHOW}!$LIMIT_SHOW!g; \
s!{STATUS}!$STATUS!g; \
s!{CONN_TIME}!$CONN_TIME!g; \
s!{CONN_TIME_SEC}!$CT!g; \
s!{RX}!$RX!g; \
s!{TX}!$TX!g; \
s!{STATUS_TRE}!$STATUS_TRE!g; \
s!{STATUS_SHOW}!$STATUS_SHOW!g; \
s!{STATUS_SHOW_BUTTON}!$STATUS_SHOW_BUTTON!g; \
s!{DEVICE}!$DEVICE!g; \
s!{ECIO}!$ECIO!g; \
s!{RSCP}!$RSCP!g; \
s!{RSRP}!$RSRP!g; \
s!{RSRQ}!$RSRQ!g; \
s!{SINR}!$SINR!g; \
s!{MODE}!$MODE!g" $TEMPLATE
else
echo "Template $TEMPLATE missing!"
fi
exit 0
@@ -1,39 +0,0 @@
22234;BT Italia SpA
22202;Elsacom
22299;H3G
22233;H3G
22277;IPSE 2000
22235;Lycamobile Srl
22207;Noverca Italia Srl
22230;RFI Rete Ferroviaria Italiana SpA
22243;Telecom Italia Mobile SpA
22201;TIM
22248;Telecom Italia Mobile SpA
22210;Vodafone
22206;Vodafone
22244;WIND
22288;WIND
26001;Plus
26002;T-Mobile;T-Mobile.pl
26003;Orange;PTK Centertel;Orange PL
26006;Play;Play Fakt Mobile
26016;Mobyland LTE;Cyfrowy Polsat
26017;Aero2
26034;NetWorks
24801;Telia
24802;Elisa
24803;Tele2
51001;Indosat Ooredoo
51003;StarOne
51007;TelkomFlexi
51008;AXIS
51009;Smartfren
51010;Telkomsel
51011;XL 4G
51020;TELKOMMobile
51021;IM3
51027;Ceria
51028;Fren/Hepi
51088;BOLT! Super 4G
51089;3
51099;Esia
@@ -1,8 +0,0 @@
NOTDETECTED="Not detected any device"
NODEVICE="No device"
PINERROR="PIN code error"
CONNECTED="Connected"
CONNECT="Connect"
DISCONNECTED="Disconnected"
DISCONNECT="Disconnect"
NOINFO="No information"
@@ -1,8 +0,0 @@
NOTDETECTED="Ei tuvastatud ühtegi seadet"
NODEVICE="Seade puudub"
PINERROR="PIN-koodi viga"
CONNECTED="Ühendatud"
CONNECT="Ühenda"
DISCONNECTED="Lahti ühendatud"
DISCONNECT="Ühenda lahti"
NOINFO="Pole informatsiooni"
@@ -1,8 +0,0 @@
NOTDETECTED="Nessun dispositivo trovato"
NODEVICE="Nessun dispositivo"
PINERROR="Errore codice PIN"
CONNECTED="Connesso"
CONNECT="Connetti"
DISCONNECTED="Disconnesso"
DISCONNECT="Disconnetti"
NOINFO="Nessuna Informazione"
@@ -1,8 +0,0 @@
NOTDETECTED="Nie wykryto żadnego urządzenia!"
NODEVICE="Brak urządzenia"
PINERROR="Błąd kodu PIN"
CONNECTED="Połączony"
CONNECT="Połącz"
DISCONNECTED="Rozłączony"
DISCONNECT="Rozłącz"
NOINFO="Brak informacji"
@@ -1,176 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.02
waitquiet 0.2 0.2
send "AT\^CURC=0^m"
waitfor 5 "OK","ERROR"
let $c="AT+CSQ^m"
let $r="+CSQ"
gosub readatcmd
let $c="ATE1; +CGMI^m"
gosub readatcmdnr
let $v=$s
if $toupper($mid($v,0,3)) = "HUA" goto huawei
if $toupper($mid($v,0,3)) = "NOK" goto vodafone
if $toupper($mid($v,0,3)) = "NOV" goto novatel
if $toupper($mid($v,0,3)) = "OPT" goto option
if $toupper($mid($v,0,3)) = "QUA" goto qualcomm
if $toupper($mid($v,0,3)) = "SIM" goto simcom
if $toupper($mid($v,0,3)) = "SIE" goto sierra
if $toupper($mid($v,0,3)) = "VOD" goto vodafone
if $toupper($mid($v,0,3)) = "ZTE" goto zte
goto generic
:simcom
let $c="AT+CNSMOD?^m"
let $r="+CNSMOD"
gosub readatcmd
goto next
:vodafone
let $c="AT%NWSTATE=1^m"
let $r="%NWSTATE"
gosub readatcmd
goto next
:novatel
let $c="AT$CNTI=0^m"
let $r="$CNTI"
gosub readatcmd
goto next
:sierra
let $c="AT*CNTI=0^m"
let $r="*CNTI"
gosub readatcmd
goto next
:option
let $c="AT_OCTI?^m"
let $r="_OCTI"
gosub readatcmd
let $c="AT_OWCTI?^m"
let $r="_OWCTI"
gosub readatcmd
goto next
:qualcomm
let $c="AT+COPS?^m"
let $r="+COPS"
gosub readatcmd
goto next1
:zte
let $c="AT+COPS?^m"
let $r="+COPS"
gosub readatcmd
let $c="AT+ZRSSI^m"
let $r="+ZRSSI"
gosub readatcmd
let $c="AT+ZPAS?^m"
let $r="+ZPAS"
gosub readatcmd
goto next1
:huawei
let $c="AT\^SYSINFOEX^m"
let $r="\^SYSINFOEX"
gosub readatcmd
let $c="AT\^CSNR?^m"
let $r="\^CSNR"
gosub readatcmd
let $c="AT\^LTERSRP?^m"
let $r="\^LTERSRP"
gosub readatcmd
let $c="AT\^HCSQ?^m"
let $r="\^HCSQ"
gosub readatcmd
:generic
let $c="AT\^SYSINFO^m"
let $r="\^SYSINFO"
gosub readatcmd
:next
let $c="AT+COPS=3,2;+COPS?^m"
let $r="+COPS"
gosub readatcmd
:next1
let $c="AT+CREG=2;+CREG?^m"
let $r="+CREG"
gosub readatcmd
let $c="AT+CGREG=2;+CGREG?^m"
let $r="+CGREG"
gosub readatcmd
let $c="AT+CEREG=2;+CEREG?^m"
let $r="+CEREG"
gosub readatcmd
let $c="AT+CGEQNEG=1^m"
let $r="+CGEQNEG"
gosub readatcmd
let $c="ATE1; +CGMM^m"
gosub readatcmdnr
print "\nDEVICE:",$v," ",$s,"\n"
exit 0
:readatcmd
let i=15
send $c
:loop
get 0.1 "^m" $s
let l=len($r)
if len($s) < l goto loop1
if $mid($s,1,l) <> $r goto loop1
print $s
return
:loop1
if len($s) < 2 goto loop2
if $mid($s,1,2) = "ER" return
if $mid($s,1,2) = "CO" return
:loop2
if i = 0 return
let i=i-1
goto loop
:readatcmdnr
let i=15
send $c
:loop3
get 0.1 "^m" $s
if len($s) < 2 goto loop5
if $mid($s,1,2) = "ER" goto loop4
if $mid($s,1,2) = "OK" goto loop5
if $mid($s,1,2) = "AT" goto loop5
if $mid($s,1,2) = "TE" goto loop5
if $mid($s,1,1) = "+" goto loop5
if $mid($s,1,1) = "\^" goto loop5
let l=len($s)
let $s=$mid($s,1,l)
return
:loop4
let $s=""
return
:loop5
if i = 0 return
let i=i-1
goto loop3
@@ -1,60 +0,0 @@
#!/bin/sh
IP=$1
[ -z "$IP" ] && exit 0
[ -e /usr/bin/wget ] || exit 0
getvaluen() {
echo $(sed 's!.*"'$2'":\([^,]*\).*!\1!g' /tmp/$1)
}
getvalue() {
echo $(sed 's!.*"'$2'":"\([^"]*\).*!\1!g' /tmp/$1)
}
rand=`awk 'BEGIN{srand();print int(rand()*(99000-1000))+1000 }'`
files="getWanInfo getImgInfo getSysteminfo"
for f in $files; do
wget -t 3 -O /tmp/$f "http://$IP/goform/$f?rand=$rand" >/dev/null 2>&1
done
MODEN=$(getvaluen getWanInfo "network_type")
case $MODEN in
1) MODE="GPRS";;
2) MODE="EDGE";;
3) MODE="HSDPA";;
4) MODE="HSUPA";;
5) MODE="UMTS";;
9) MODE="GSM";;
11) MODE="LTE";;
12) MODE="HSPA+";;
13) MODE="DC HSPA+";;
*) MODE="-";;
esac
echo "^SYSINFOEX:x,x,x,x,,x,\"$MODE\",$MODEN,\"$MODE\""
OPER=$(getvalue getWanInfo "network_name")
echo "+COPS: 0,0,\"$OPER\",x"
SIGNAL=$(getvaluen getImgInfo "signal")
case $SIGNAL in
1) CSQ="6";;
2) CSQ="12";;
3) CSQ="18";;
4) CSQ="24";;
5) CSQ="31";;
*) CSQ="0";;
esac
echo "+CSQ: $CSQ,99"
MODEL=$(getvalue getSysteminfo "dev_name")
echo "DEVICE:Alcatel $MODEL"
if [ "x$2" != "xdebug" ]; then
for f in $files; do
rm /tmp/$f
done
fi
exit 0
@@ -1,172 +0,0 @@
#!/bin/sh
IP=$1
[ -z "$IP" ] && exit 0
[ -e /usr/bin/wget ] || exit 0
getvaluen() {
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1 | sed 's/[^0-9]//g')
}
getvaluens() {
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1 | sed 's/[^0-9-]//g')
}
getvalue() {
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1)
}
cookie=$(mktemp)
/usr/bin/wget -t 25 -O /tmp/webserver-token "http://$IP/api/webserver/token" >/dev/null 2>&1
token=$(getvaluen webserver-token token)
if [ -z "$token" ]; then
/usr/bin/wget -t 25 -O /tmp/webserver-token "http://$IP/api/webserver/SesTokInfo" >/dev/null 2>&1
sesinfo=$(getvalue webserver-token SesInfo)
fi
if [ -z "$sesinfo" ]; then
/usr/bin/wget -q -O /dev/null --keep-session-cookies --save-cookies $cookie "http://$IP/html/home.html"
fi
/usr/bin/wget -t 25 -O /tmp/user-state-login "http://$IP/api/user/state-login"
T1=$(getvalue user-state-login State)
if [ "x$T1" != "x0" ]; then
USER="admin"
PASS="admin"
PASS=$(echo -n "$PASS" | base64)
DATA="<request><Username>$USER</Username><Password>$PASS</Password></request>"
/usr/bin/wget -t 25 -O /dev/null "http://$IP/api/user/login" --post-data $DATA --header "__RequestVerificationToken: $token"
fi
files="device/signal monitoring/status net/current-plmn net/signal-para device/information device/basic_information"
for f in $files; do
nf=$(echo $f | sed 's!/!-!g')
if [ -n "$token" ]; then
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --header "__RequestVerificationToken: $token" >/dev/null 2>&1
elif [ -n "$sesinfo" ]; then
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --header "Cookie: $sesinfo" >/dev/null 2>&1
else
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --load-cookies=$cookie >/dev/null 2>&1
fi
done
rssi=$(getvaluen device-signal rssi)
if [ -n "$rssi" ]; then
CSQ=$(((-1*rssi + 113)/2))
echo "+CSQ: $CSQ,99"
else
per=$(getvaluen monitoring-status SignalStrength)
if [ -n "$per" ]; then
CSQ=$((($per*31)/100))
echo "+CSQ: $CSQ,99"
fi
fi
MODEN=$(getvaluen monitoring-status CurrentNetworkType)
case $MODEN in
1) MODE="GSM";;
2) MODE="GPRS";;
3) MODE="EDGE";;
4) MODE="WCDMA";;
5) MODE="HSDPA";;
6) MODE="HSUPA";;
7) MODE="HSPA";;
8) MODE="TDSCDMA";;
9) MODE="HSPA+";;
10) MODE="EVDO rev. 0";;
11) MODE="EVDO rev. A";;
12) MODE="EVDO rev. B";;
13) MODE="1xRTT";;
14) MODE="UMB";;
15) MODE="1xEVDV";;
16) MODE="3xRTT";;
17) MODE="HSPA+64QAM";;
18) MODE="HSPA+MIMO";;
19) MODE="LTE";;
21) MODE="IS95A";;
22) MODE="IS95B";;
23) MODE="CDMA1x";;
24) MODE="EVDO rev. 0";;
25) MODE="EVDO rev. A";;
26) MODE="EVDO rev. B";;
27) MODE="Hybrydowa CDMA1x";;
28) MODE="Hybrydowa EVDO rev. 0";;
29) MODE="Hybrydowa EVDO rev. A";;
30) MODE="Hybrydowa EVDO rev. B";;
31) MODE="EHRPD rev. 0";;
32) MODE="EHRPD rev. A";;
33) MODE="EHRPD rev. B";;
34) MODE="Hybrydowa EHRPD rev. 0";;
35) MODE="Hybrydowa EHRPD rev. A";;
36) MODE="Hybrydowa EHRPD rev. B";;
41) MODE="WCDMA (UMTS)";;
42) MODE="HSDPA";;
43) MODE="HSUPA";;
44) MODE="HSPA";;
45) MODE="HSPA+";;
46) MODE="DC-HSPA+";;
61) MODE="TD SCDMA";;
62) MODE="TD HSDPA";;
63) MODE="TD HSUPA";;
64) MODE="TD HSPA";;
65) MODE="TD HSPA+";;
81) MODE="802.16E";;
101) MODE="LTE";;
*) MODE="-";;
esac
echo "^SYSINFOEX:x,x,x,x,,x,\"$MODE\",$MODEN,\"$MODE\""
numeric=$(getvaluen net-current-plmn Numeric)
echo "+COPS: 0,2,\"$numeric\",x"
lac=$(getvalue net-signal-para Lac)
if [ -z "$lac" ]; then
/usr/bin/wget -t 3 -O /tmp/add-param "http://$IP/config/deviceinformation/add_param.xml" > /dev/null 2>&1
lac=$(getvalue add-param lac)
rm /tmp/add-param
fi
cid=$(getvalue net-signal-para CellID)
if [ -z "$cid" ]; then
cell_id=$(getvalue device-signal cell_id)
cid=""
[ -n "$cell_id" ] && cid=$(printf %0X $cell_id)
fi
echo "+CREG: 2,1,\"$lac\",\"$cid\""
if [ "x$MODE" = "xLTE" ]; then
rsrp=$(getvaluens device-signal rsrp)
sinr=$(getvaluens device-signal sinr)
rsrq=$(getvaluens device-signal rsrq)
rsrp=$(awk 'BEGIN {print '$rsrp' + 141}')
sinr=$(awk 'BEGIN {print ('$sinr'+20.2)*5}')
rsrq=$(awk 'BEGIN {print ('$rsrq'+20)*2}')
echo "^HCSQ: \"$MODE\",$rssi,$rsrp,$sinr,$rsrq"
else
rscp=$(getvaluens device-signal rscp)
[ -z "$rscp" ] && rscp=$(getvaluens net-signal-para Rscp)
ecio=$(getvaluens net-signal-para ecio)
[ -z "$ecio" ] && ecio=$(getvaluens net-signal-para Ecio)
echo "^CSNR: $rscp,$ecio"
fi
device=$(getvalue device-information DeviceName)
if [ -n "$device" ]; then
class=$(getvalue device-information Classify)
echo "DEVICE:Huawei $device $class"
else
device=$(getvalue device-basic_information devicename)
class=$(getvalue device-basic_information classify)
[ -n "$device" ] && echo "DEVICE:Huawei $device $class"
fi
DATA="<request><Logout>1</Logout></request>"
/usr/bin/wget -t 25 -O /tmp/ccc "http://$IP/api/user/logout" --post-data $DATA --header "__RequestVerificationToken: $token"
if [ "x$2" != "xdebug" ]; then
for f in $files webserver/token; do
nf=$(echo $f | sed 's!/!-!g')
rm /tmp/$nf
done
fi
rm $cookie
exit 0
@@ -1,159 +0,0 @@
#!/bin/sh
IP=$1
[ -z "$IP" ] && exit 0
[ -e /usr/bin/wget ] || exit 0
getvaluen() {
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1 | sed 's/[^0-9]//g')
}
getvaluens() {
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1 | sed 's/[^0-9-]//g')
}
getvalue() {
echo $(awk -F[\<\>] '/<'$2'>/ {print $3}' /tmp/$1)
}
cookie=$(mktemp)
/usr/bin/wget -t 25 -O /tmp/webserver-token "http://$IP/api/webserver/token" >/dev/null 2>&1
token=$(getvaluen webserver-token token)
if [ -z "$token" ]; then
/usr/bin/wget -t 25 -O /tmp/webserver-token "http://$IP/api/webserver/SesTokInfo" >/dev/null 2>&1
sesinfo=$(getvalue webserver-token SesInfo)
fi
if [ -z "$sesinfo" ]; then
/usr/bin/wget -q -O /dev/null --keep-session-cookies --save-cookies $cookie "http://$IP/html/home.html"
fi
files="device/signal monitoring/status net/current-plmn net/signal-para device/information device/basic_information"
for f in $files; do
nf=$(echo $f | sed 's!/!-!g')
if [ -n "$token" ]; then
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --header "__RequestVerificationToken: $token" >/dev/null 2>&1
elif [ -n "$sesinfo" ]; then
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --header "Cookie: $sesinfo" >/dev/null 2>&1
else
/usr/bin/wget -t 3 -O /tmp/$nf "http://$IP/api/$f" --load-cookies=$cookie >/dev/null 2>&1
fi
done
rssi=$(getvaluen device-signal rssi)
if [ -n "$rssi" ]; then
CSQ=$(((-1*rssi + 113)/2))
echo "+CSQ: $CSQ,99"
else
per=$(getvaluen monitoring-status SignalStrength)
if [ -n "$per" ]; then
CSQ=$((($per*31)/100))
echo "+CSQ: $CSQ,99"
fi
fi
MODEN=$(getvaluen monitoring-status CurrentNetworkType)
case $MODEN in
1) MODE="GSM";;
2) MODE="GPRS";;
3) MODE="EDGE";;
4) MODE="WCDMA";;
5) MODE="HSDPA";;
6) MODE="HSUPA";;
7) MODE="HSPA";;
8) MODE="TDSCDMA";;
9) MODE="HSPA+";;
10) MODE="EVDO rev. 0";;
11) MODE="EVDO rev. A";;
12) MODE="EVDO rev. B";;
13) MODE="1xRTT";;
14) MODE="UMB";;
15) MODE="1xEVDV";;
16) MODE="3xRTT";;
17) MODE="HSPA+64QAM";;
18) MODE="HSPA+MIMO";;
19) MODE="LTE";;
21) MODE="IS95A";;
22) MODE="IS95B";;
23) MODE="CDMA1x";;
24) MODE="EVDO rev. 0";;
25) MODE="EVDO rev. A";;
26) MODE="EVDO rev. B";;
27) MODE="Hybrydowa CDMA1x";;
28) MODE="Hybrydowa EVDO rev. 0";;
29) MODE="Hybrydowa EVDO rev. A";;
30) MODE="Hybrydowa EVDO rev. B";;
31) MODE="EHRPD rev. 0";;
32) MODE="EHRPD rev. A";;
33) MODE="EHRPD rev. B";;
34) MODE="Hybrydowa EHRPD rev. 0";;
35) MODE="Hybrydowa EHRPD rev. A";;
36) MODE="Hybrydowa EHRPD rev. B";;
41) MODE="WCDMA (UMTS)";;
42) MODE="HSDPA";;
43) MODE="HSUPA";;
44) MODE="HSPA";;
45) MODE="HSPA+";;
46) MODE="DC-HSPA+";;
61) MODE="TD SCDMA";;
62) MODE="TD HSDPA";;
63) MODE="TD HSUPA";;
64) MODE="TD HSPA";;
65) MODE="TD HSPA+";;
81) MODE="802.16E";;
101) MODE="LTE";;
*) MODE="-";;
esac
echo "^SYSINFOEX:x,x,x,x,,x,\"$MODE\",$MODEN,\"$MODE\""
numeric=$(getvaluen net-current-plmn Numeric)
echo "+COPS: 0,2,\"$numeric\",x"
lac=$(getvalue net-signal-para Lac)
if [ -z "$lac" ]; then
/usr/bin/wget -t 3 -O /tmp/add-param "http://$IP/config/deviceinformation/add_param.xml" > /dev/null 2>&1
lac=$(getvalue add-param lac)
rm /tmp/add-param
fi
cid=$(getvalue net-signal-para CellID)
if [ -z "$cid" ]; then
cell_id=$(getvalue device-signal cell_id)
cid=""
[ -n "$cell_id" ] && cid=$(printf %0X $cell_id)
fi
echo "+CREG: 2,1,\"$lac\",\"$cid\""
if [ "x$MODE" = "xLTE" ]; then
rsrp=$(getvaluens device-signal rsrp)
sinr=$(getvaluens device-signal sinr)
rsrq=$(getvaluens device-signal rsrq)
rsrp=$(awk 'BEGIN {print '$rsrp' + 141}')
sinr=$(awk 'BEGIN {print ('$sinr'+20.2)*5}')
rsrq=$(awk 'BEGIN {print ('$rsrq'+20)*2}')
echo "^HCSQ: \"$MODE\",$rssi,$rsrp,$sinr,$rsrq"
else
rscp=$(getvaluens device-signal rscp)
[ -z "$rscp" ] && rscp=$(getvaluens net-signal-para Rscp)
ecio=$(getvaluens net-signal-para ecio)
[ -z "$ecio" ] && ecio=$(getvaluens net-signal-para Ecio)
echo "^CSNR: $rscp,$ecio"
fi
device=$(getvalue device-information DeviceName)
if [ -n "$device" ]; then
class=$(getvalue device-information Classify)
echo "DEVICE:Huawei $device $class"
else
device=$(getvalue device-basic_information devicename)
class=$(getvalue device-basic_information classify)
[ -n "$device" ] && echo "DEVICE:Huawei $device $class"
fi
if [ "x$2" != "xdebug" ]; then
for f in $files webserver/token; do
nf=$(echo $f | sed 's!/!-!g')
rm /tmp/$nf
done
fi
rm $cookie
exit 0
@@ -1,14 +0,0 @@
let $d = $env("DEVICE")
if $d = "" goto timeout
open com $d
set com 115200n81
set senddelay 0.05
waitquiet 2 0.5
send "AT^m"
waitfor 2 "OK" "+CME ERROR"
if % = -1 goto timeout
exit 0
:timeout
exit 1
@@ -1,50 +0,0 @@
#!/bin/sh
IP=$1
[ -z "$IP" ] && exit 0
T=$(mktemp)
wget -q -O $T "http://$IP/goform/goform_get_cmd_process?multi_data=1&cmd=manufacturer_name,model_name,network_provider,network_type,lte_rsrp,lte_rsrq,lte_rssi,lte_snr,cell_id,lac_code,hmcc,hmnc,rmcc,rmnc,rssi,rscp,ecio"
. /usr/share/libubox/jshn.sh
json_load "$(cat $T)"
json_get_vars manufacturer_name model_name network_provider network_type lte_rsrp lte_rsrq lte_rssi lte_snr cell_id lac_code hmcc hmnc rmcc rmnc rssi rscp ecio
if [ -n "$lte_rssi" ]; then
rssi=$lte_rssi
fi
if [ -n "$rssi" ]; then
CSQ=$(((rssi+113)/2))
else
CSQ=0
fi
echo "+CSQ: $CSQ,99"
echo "DEVICE:$manufacturer_name $model_name"
echo "^SYSINFOEX:x,x,x,x,,x,\"$network_type\",x,\"$network_type\""
if [ -n "$hmcc" ]; then
mcc=$(printf "%03d" $hmcc)
else
[ -n "$rmcc" ] && mcc=$(printf "%03d" $rmcc)
fi
if [ -n "$hmnc" ]; then
mnc=$(printf "%02d" $hmnc)
else
[ -n "$rmnc" ] && mnc=$(printf "%02d" $rmnc)
fi
echo "+COPS: 0,2,\"$mcc$mnc\",x"
if [ "x$network_type" = "xLTE" ]; then
echo "^LTERSRP: $lte_rsrp,$lte_rsrq"
else
echo "^CSNR: $rscp,$ecio"
fi
echo "+CREG: 2,1,\"$lac_code\",\"$cell_id\""
rm $T
exit 0
@@ -1,31 +0,0 @@
{
"error": "",
"csq": "{CSQ}",
"signal": "{CSQ_PER}",
"rssi": "{CSQ_RSSI}",
"mode": "{MODE}",
"device": "{DEVICE}",
"operator_name": "{COPS}",
"operator": "{COPS_NUM}",
"operator_mcc": "{COPS_MCC}",
"operator_mnc": "{COPS_MNC}",
"lac_hex": "{LAC}",
"lac_dec": "{LAC_NUM}",
"cid_hex": "{CID}",
"cid_dec": "{CID_NUM}",
"tac_hex": "{TAC}",
"tac_dec": "{TAC_NUM}",
"bts_info": "{BTSINFO}",
"bts_qos_down": "{DOWN}",
"bts_qos_up": "{UP}",
"status": "{STATUS}",
"conn_time": "{CONN_TIME}",
"conn_time_sec": "{CONN_TIME_SEC}",
"iface_rx": "{RX}",
"iface_tx": "{TX}",
"rscp": "{RSCP}",
"ecio": "{ECIO}",
"rsrp": "{RSRP}",
"sinr": "{SINR}",
"rsrq": "{RSRQ}"
}
@@ -1,18 +0,0 @@
Status: {STATUS}
Connection time: {CONN_TIME}
Received / Transmitted data: {RX} / {TX}
Operator: {COPS}
Operating mode: {MODE}
Signal strength: {CSQ_PER}%
Device: {DEVICE}
MCC MNC: {COPS_MCC} {COPS_MNC}
LAC: {LAC} ({LAC_NUM})
CID: {CID} ({CID_NUM})
TAC: {TAC} ({TAC_NUM})
CSQ: {CSQ}
RSSI: {CSQ_RSSI} dBm
RSCP: {RSCP} dBm
Ec/IO: {ECIO} dB
RSRP: {RSRP} dBm
SINR: {SINR} dB
RSRQ: {RSRQ} dB
@@ -1,18 +0,0 @@
Staatus: {STATUS}
Ühendusaeg: {CONN_TIME}
Vastuvõetud/saadetud andmed: {RX} / {TX}
Operaator: {COPS}
Töörežiim: {MODE}
Signaali tugevus: {CSQ_PER}%
Seade: {DEVICE}
MCC MNC: {COPS_MCC} {COPS_MNC}
LAC: {LAC} ({LAC_NUM})
CID: {CID} ({CID_NUM})
TAC: {TAC} ({TAC_NUM})
CSQ: {CSQ}
RSSI: {CSQ_RSSI} dBm
RSCP: {RSCP} dBm
Ec/IO: {ECIO} dB
RSRP: {RSRP} dBm
SINR: {SINR} dB
RSRQ: {RSRQ} dB
@@ -1,18 +0,0 @@
Stato: {STATUS}
Tempo di connessione: {CONN_TIME}
Dati ricevuti / Trasmessi: {RX} / {TX}
Operatore: {COPS}
Tipo di connessione: {MODE}
Forza segnale: {CSQ_PER}%
Dispositivo: {DEVICE}
MCC MNC: {COPS_MCC} {COPS_MNC}
LAC: {LAC} ({LAC_NUM})
CID: {CID} ({CID_NUM})
TAC: {TAC} ({TAC_NUM})
CSQ: {CSQ}
RSSI: {CSQ_RSSI} dBm
RSCP: {RSCP} dBm
Ec/IO: {ECIO} dB
RSRP: {RSRP} dBm
SINR: {SINR} dB
RSRQ: {RSRQ} dB
@@ -1,18 +0,0 @@
Status: {STATUS}
Czas polaczenia: {CONN_TIME}
Przeslano danych: {RX} / {TX}
Operator: {COPS}
Tryb pracy: {MODE}
Sila sygnalu: {CSQ_PER}%
Urzadzenie: {DEVICE}
MCC MNC: {COPS_MCC} {COPS_MNC}
LAC: {LAC} ({LAC_NUM})
CID: {CID} ({CID_NUM})
TAC: {TAC} ({TAC_NUM})
CSQ: {CSQ}
RSSI: {CSQ_RSSI} dBm
RSCP: {RSCP} dBm
Ec/IO: {ECIO} dB
RSRP: {RSRP} dBm
SINR: {SINR} dB
RSRQ: {RSRQ} dB
-6
View File
@@ -1,6 +0,0 @@
config 3ginfo
option device ''
option http_port '81'
option network 'wan'
option pincode ''
-138
View File
@@ -1,138 +0,0 @@
#!/bin/sh
#
# (c) 2024-2025 Cezary Jackiewicz <cezary@eko.one.pl>
#
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
FORMAT=1
[ "x$1" = "xjson" ] && FORMAT=2
ECM=""
RES="/usr/share/modemdata"
format_conn_time() {
CT=$1
D=$(expr $CT / 60 / 60 / 24)
H=$(expr $CT / 60 / 60 % 24)
M=$(expr $CT / 60 % 60)
S=$(expr $CT % 60)
printf "%dd, %02d:%02d:%02d" $D $H $M $S
}
SEPARATOR=""
parse_section() {
[ -n "$SEPARATOR" ] && echo "$SEPARATOR"
local section="$1"
config_get device "$section" device ""
config_get network "$section" network ""
config_get force_plmn "$section" force_plmn "0"
if echo "x$device" | grep -q "192.168."; then
ECM="$RES/addon/ecm/huawei.sh $device"
else
ECM=""
if [ ! -e /var/state/3ginfo-detected ]; then
[ -z "$device" ] && device=$(/usr/share/3ginfo/detectdevice.sh)
[ -z "$network" ] && network=$(/usr/share/3ginfo/detectsection.sh "$section")
fi
config_get pincode "$section" pincode ""
if [ -n "$pincode" ] && [ ! -e /var/state/3ginfo-pincode ]; then
[ -n "$device" ] && sms_tool -d "$device" at "at+cpin=\"$pincode\""
fi
fi
if [ "$FORMAT" = "1" ]; then
SEPARATOR="---"
json_init
if [ -n "$ECM" ]; then
json_load "$($ECM product)"
else
json_load "$($RES/product.sh "$device")"
fi
json_get_vars vendor product revision imei iccid imsi
echo "Device: ${vendor} ${product}"
echo "Revision: ${revision}"
echo "IMEI: ${imei}"
echo "ICCID: ${iccid}"
echo "IMSI: ${imsi}"
echo ""
json_init
json_load "$($RES/network.sh "$network")"
json_get_vars conn_time_sec rx tx
echo "Connected time: "$(format_conn_time ${conn_time_sec})
echo "TX: ${tx}"
echo "RX: ${rx}"
echo ""
json_init
if [ -n "$ECM" ]; then
json_load "$($ECM params)"
else
json_load "$($RES/params.sh "$device" "$force_plmn")"
fi
json_get_vars signal operator_name operator_mcc operator_mnc country mode registration lac_dec lac_hex cid_dec cid_hex
echo "Signal: ${signal} %"
echo "Mode: ${mode}"
echo "Operator: ${operator_name} (${operator_mcc} ${operator_mnc})"
[ -n "$country" ] && echo "Country: ${country}"
case $registration in
0) REG="not registered";;
1) REG="registered, home network";;
2) REG="not registered, searching";;
3) REG="registration denied";;
5) REG="registered, roaming";;
6) REG="registered for SMS only, home network";;
7) REG="registered for SMS only, roaming";;
*) REG="$registration";;
esac
echo "Registration: ${REG}"
echo ""
T="21;CellID: ${cid_dec} (${cid_hex})"
T="${T}\n22;LAC: ${lac_dec} (${lac_hex})"
if json_is_a addon array; then
json_get_keys addon addon
json_select addon
for i in $addon; do
json_select "$i"
json_get_vars idx key value
json_select ..
if [ "$idx" = "10" ]; then
T="${T}\n${idx};${key}: ${value/&deg;/°}"
else
T="${T}\n${idx};${key}: ${value}"
fi
done
fi
echo -e "$T" | sort | awk -F[\;] '{print $2}'
else
SEPARATOR=","
echo "["
if [ -n "$ECM" ]; then
$ECM product
echo ","
$RES/network.sh "$network"
echo ","
$ECM params
else
$RES/product.sh "$device"
echo ","
$RES/network.sh "$network"
echo ","
$RES/params.sh "$device" "$force_plmn"
fi
echo "]"
fi
}
config_load 3ginfo
[ "$FORMAT" = "2" ] && echo '{"res":['
config_foreach parse_section 3ginfo
[ "$FORMAT" = "2" ] && echo ']}'
touch /var/state/3ginfo-detected
touch /var/state/3ginfo-pincode
exit 0
@@ -1,13 +0,0 @@
opengt
set com 115200n81
set comecho off
set senddelay 0.01
waitquiet 0.01 0.01
send "AT+CPIN?^m"
waitfor 2 "OK" "+CME ERROR"
if % = -1 goto timeout
exit 0
:timeout
exit 1
@@ -1,20 +0,0 @@
#!/bin/sh
#
# (c) 2023-2024 Cezary Jackiewicz <cezary@eko.one.pl>
#
# find any device
DEVICES=$(find /dev -name "ttyUSB*" -o -name "ttyACM*" -o -name "wwan*at*" | sort -r)
for DEVICE in $DEVICES; do
gcom -d $DEVICE -s /usr/share/3ginfo/check.gcom >/dev/null 2>&1
if [ $? = 0 ]; then
uci set 3ginfo.@3ginfo[0].device="$DEVICE"
uci commit 3ginfo
echo "$DEVICE"
exit 0
fi
done
echo ""
exit 0
@@ -1,60 +0,0 @@
#!/bin/sh
#
# (c) 2024 Cezary Jackiewicz <cezary@eko.one.pl>
#
getdevicepath() {
devname="$(basename $1)"
case "$devname" in
'wwan'*'at'*)
devpath="$(readlink -f /sys/class/wwan/$devname/device)"
echo ${devpath%/*/*/*}
;;
'ttyACM'*)
devpath="$(readlink -f /sys/class/tty/$devname/device)"
echo ${devpath%/*}
;;
'tty'*)
devpath="$(readlink -f /sys/class/tty/$devname/device)"
echo ${devpath%/*/*}
;;
*)
devpath="$(readlink -f /sys/class/usbmisc/$devname/device)"
echo ${devpath%/*}
;;
esac
}
CONFIGSEC=$1
if [ -n "$CONFIGSEC" ]; then
SEC=$(uci -q get 3ginfo.${CONFIGSEC}.network)
if [ -n "$SEC" ]; then
echo "$SEC"
exit 0
fi
fi
DEVICE=$(uci -q get 3ginfo.${CONFIGSEC}.device)
if [ -z "$DEVICE" ]; then
echo ""
exit 0
fi
DEVPATH=$(getdevicepath "$DEVICE")
DEVICES=$(uci show network | awk '/network\..*\.device/')
for T in $DEVICES; do
T1=$(echo "$T" | cut -f2 -d= | xargs)
if [ -e "$T1" ]; then
if [ "$DEVPATH" = "$(getdevicepath "$T1")" ]; then
T2=$(echo "$T" | cut -f2 -d.)
uci set 3ginfo.${CONFIGSEC}.network="$T2"
uci commit 3ginfo
echo "$T2"
exit 0
fi
fi
done
echo ""
exit 0
+2 -2
View File
@@ -6,11 +6,11 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=cloudreve
PKG_VERSION:=4.18.0
PKG_RELEASE:=15
PKG_RELEASE:=16
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/cloudreve/Cloudreve.git
PKG_SOURCE_VERSION:=20c95ad73f3a8bcb72887fea91ff31ab24fa1011
PKG_SOURCE_VERSION:=1c3fe4da3c4073e73a11ed93518b545bb8b8d5ce
PKG_MIRROR_HASH:=skip
PKG_LICENSE:=GPL-3.0-only
+2 -2
View File
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ddns-go
PKG_VERSION:=6.17.6
PKG_RELEASE:=23
PKG_VERSION:=6.17.7
PKG_RELEASE:=24
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/jeessy2/ddns-go/tar.gz/v$(PKG_VERSION)?
+2 -2
View File
@@ -5,8 +5,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=dnsproxy
PKG_VERSION:=0.84.1
PKG_RELEASE:=17
PKG_VERSION:=0.84.2
PKG_RELEASE:=18
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/AdguardTeam/dnsproxy/tar.gz/v$(PKG_VERSION)?
+39
View File
@@ -0,0 +1,39 @@
#
# Copyright (C) 2015-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v3.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=geo2txt
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/sbwml/geo2txt/tar.gz/$(PKG_VERSION)?
PKG_HASH:=skip
PKG_LICENSE:=GPL-3.0
PKG_LICENSE_FILE:=LICENSE
PKG_MAINTAINER:=sbwml <admin@cooluc.com>
include $(INCLUDE_DIR)/package.mk
define Package/geo2txt
SECTION:=utils
CATEGORY:=Utilities
TITLE:=V2ray geosite & geoip unpacking CLI tool
URL:=https://github.com/sbwml/geo2txt
endef
define Package/quickfile/description
A lightweight pure C utility to unpack v2ray geosite.dat and geoip.dat.
endef
define Package/geo2txt/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/geo2txt $(1)/usr/bin/geo2txt
endef
$(eval $(call BuildPackage,geo2txt))
+2 -2
View File
@@ -6,8 +6,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=gowebdav
PKG_VERSION:=5.15.0
PKG_RELEASE:=20
PKG_VERSION:=5.15.1
PKG_RELEASE:=21
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/hacdias/webdav/tar.gz/v$(PKG_VERSION)?
+2 -2
View File
@@ -12,7 +12,7 @@ PKG_ARCH_LINKEASE:=$(ARCH)
PKG_NAME:=linkease-common-bin
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
PKG_SOURCE_DATE:=1.7.5
PKG_RELEASE:=22
PKG_RELEASE:=24
ARCH_HEXCODE:=
ifeq ($(ARCH),x86_64)
@@ -28,7 +28,7 @@ else ifeq ($(ARCH),mipsel)
ARCH_HEXCODE=1b0c
endif
PKG_SOURCE_VERSION:=f5227a7df2160100b478dba7880891aed1663eb4
PKG_SOURCE_VERSION:=469e9a582af646e9d3df7aec4b31fcfda9e4a325
PKG_SOURCE:=linkease-common-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkease-runtime-v$(PKG_SOURCE_DATE)/
PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-common-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE)
+2 -2
View File
@@ -12,7 +12,7 @@ PKG_ARCH_LINKEASE:=$(ARCH)
PKG_NAME:=linkease
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
PKG_SOURCE_DATE:=1.7.5
PKG_RELEASE:=25
PKG_RELEASE:=27
ARCH_HEXCODE:=
ifeq ($(ARCH),x86_64)
@@ -28,7 +28,7 @@ else ifeq ($(ARCH),mipsel)
ARCH_HEXCODE=1b0c
endif
PKG_SOURCE_VERSION:=f5227a7df2160100b478dba7880891aed1663eb4
PKG_SOURCE_VERSION:=469e9a582af646e9d3df7aec4b31fcfda9e4a325
PKG_SOURCE:=linkease-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkease-runtime-v$(PKG_SOURCE_DATE)/
PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-bin-$(PKG_SOURCE_DATE)-linux-$(PKG_ARCH_LINKEASE)
+2 -2
View File
@@ -11,7 +11,7 @@ PKG_ARCH_LINKEASE:=$(ARCH)
PKG_NAME:=linkeasefull
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
PKG_SOURCE_DATE:=3.0.17
PKG_RELEASE:=24
PKG_RELEASE:=26
ARCH_HEXCODE:=
ifeq ($(ARCH),x86_64)
@@ -24,7 +24,7 @@ LINKEASE_RUNTIME_ARCH:=arm64
PKG_HASH:=skip
endif
PKG_SOURCE_VERSION:=f5227a7df2160100b478dba7880891aed1663eb4
PKG_SOURCE_VERSION:=469e9a582af646e9d3df7aec4b31fcfda9e4a325
PKG_SOURCE:=linkease-runtime-$(PKG_SOURCE_DATE)-linux-$(LINKEASE_RUNTIME_ARCH).tar.gz
PKG_SOURCE_URL:=https://github.com/istoreos/istoreos-app-hub/releases/download/linkeasefull-runtime-v$(PKG_SOURCE_DATE)/
PKG_BUILD_DIR:=$(BUILD_DIR)/linkease-runtime-$(PKG_SOURCE_DATE)-linux-$(LINKEASE_RUNTIME_ARCH)
+1 -1
View File
@@ -12,7 +12,7 @@ LUCI_DEPENDS:=+luci-base +logd +jsonfilter
LUCI_PKGARCH:=all
PKG_VERSION:=0.1.37
PKG_RELEASE:=5
PKG_RELEASE:=7
# Reproducible build: honor SOURCE_DATE_EPOCH from the build environment (set by docker-sdk.sh / CI).
ifdef SOURCE_DATE_EPOCH
File diff suppressed because one or more lines are too long
@@ -717,6 +717,10 @@
margin-left: 8px;
vertical-align: middle;
}
.fwlive-backend.fwlive-backend-warn {
color: var(--warn-color-high);
font-weight: 600;
}
.fwlive-filter-panel { margin-bottom: 12px; }
.fwlive-map[data-view="simple"] .fwlive-grid-core {
display: grid;
@@ -47,7 +47,8 @@ const callFwliveLoggingStatus = rpc.declare({
nf_log_ipv4: false,
nf_log_ipv6: false,
ready: false,
blockers: []
blockers: [],
warnings: []
} }
});
@@ -521,6 +522,7 @@ return view.extend({
const label = document.getElementById('fwlive-backend');
if (label) {
let text = this.backendDisplayLabel();
let degraded = false;
if (this.lastRulesError) {
let err = '';
if (this.lastRulesError === 'rules_truncated')
@@ -530,13 +532,16 @@ return view.extend({
else
err = _('Rule labels unavailable');
text = text ? text + ' \u00b7 ' + err : err;
degraded = true;
}
const warnings = (this.loggingStatus && this.loggingStatus.warnings) || [];
if (warnings.indexOf('timeout_missing') >= 0) {
const warn = _('Limited diagnostics — timeout command missing');
text = text ? text + ' \u00b7 ' + warn : warn;
degraded = true;
}
label.textContent = text;
label.classList.toggle('fwlive-backend-warn', degraded);
}
this.updateEmptyStateUi();
@@ -1296,17 +1301,11 @@ return view.extend({
const scroll = document.getElementById('fwlive-scroll');
const wrapBtn = document.getElementById('fwlive-msg-wrap');
const onelineBtn = document.getElementById('fwlive-msg-oneline');
if (scroll) {
/* add/remove — classList.toggle(name, force) is unsupported on some 21.02-era browsers */
if (this.messageLayout === 'oneline') {
scroll.classList.add('fwlive-msg-oneline');
scroll.classList.remove('fwlive-msg-wrap');
} else {
scroll.classList.add('fwlive-msg-wrap');
scroll.classList.remove('fwlive-msg-oneline');
}
}
const oneline = this.messageLayout === 'oneline';
if (scroll) {
scroll.classList.toggle('fwlive-msg-oneline', oneline);
scroll.classList.toggle('fwlive-msg-wrap', !oneline);
}
if (wrapBtn)
wrapBtn.setAttribute('aria-pressed', oneline ? 'false' : 'true');
if (onelineBtn)
+165 -165
View File
@@ -1,652 +1,652 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:926
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:926
msgid "%d matching · %d/%d stored"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:929
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:929
msgid "0 matching · %d/%d stored"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:251
msgid "Accessible (teal/orange)"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:32
msgid "Action"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:618
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:618
msgid "Administrator access is required to disable logging."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:586
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:586
msgid "Administrator access is required to enable logging."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1092
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1092
msgid "Also seen"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:571
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:607
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:571
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:607
msgid "Another change is staged for the firewall; apply or revert it first."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1658
msgid "Any action"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1085
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1085
msgid "Any protocol"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:113
msgid "Before you enable logging"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:569
msgid "Cannot enable logging until kernel log modules are installed."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:116
msgid "Changes:"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:250
msgid "Classic (green/red)"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1642
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1642
msgid "Classic uses green/red; Accessible uses teal/orange"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:116
msgid "Clear all"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1698
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1698
msgid ""
"Click a cell to filter · ≠ on a chip to exclude · Ctrl+click a rule for "
"firewall settings · in Simple view, click a row for the full message"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1719
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1719
msgid ""
"Click a row (Time or other non-link cells) to see the full log line (Simple "
"view)."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:113
msgid "Click a row for the full message"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1720
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1720
msgid ""
"Click an IP, action, or protocol to filter; use the Protocol menu (or ≠ on a "
"chip) to exclude."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1086
msgid "Common"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:944
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:944
msgid "Connection lost — retrying…"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:609
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:609
msgid "Could not disable logging."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573
msgid "Could not enable logging."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1680
msgid "Custom protocol (prefix ! to exclude). Overrides the menu when set."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:42
msgid "DPort"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:40
msgid "Destination"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1691
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1691
msgid "Destination IP contains (! to exclude)"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1692
msgid "Destination port (! to exclude)"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1583
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1583
msgid "Detail"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:37
msgid "Dir"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:85
msgid "Disabling…"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1616
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1616
msgid "Display options"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1716
msgid "Display options on the bar set Limit, row tint, palette, and hostnames."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:121
msgid "Does not change:"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:138
msgid "Dont show this again"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enable WAN drop/reject logging"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:104
msgid "Enable WAN zone drop/reject logging (same as Network → Firewall)."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
msgid "Enable logging"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1715
msgid ""
"Enable logging turns on WAN zone drop/reject logging only (same as Network → "
"Firewall). It does not add rules or log normal LAN browsing."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:107
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:150
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:230
msgid "Enabling…"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1099
msgid "Exclude"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Exclude instead"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:53
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:71
msgid "Filter by %s"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:136
msgid "Filter by interface"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:112
msgid "Filter logs by rule (hint: %s). Ctrl+click to open firewall settings."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1540
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1540
#: openwrt-feed/luci-app-fwlive/root/usr/share/luci/menu.d/luci-app-fwlive.json:3
msgid "Firewall Live View"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:43
msgid "Flags"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:45
msgid "Flow"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3
#: openwrt-feed/luci-app-fwlive/root/usr/share/rpcd/acl.d/luci-app-fwlive.json:3
msgid "Grant access to firewall live log view"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1712
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1712
msgid "Help"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:895
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:895
msgid ""
"High event rate — table refresh is throttled to protect the browser. The "
"buffer still updates; refresh will resume automatically."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1090
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1090
msgid "ICMPv6"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:35
msgid "IN"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1723
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1723
msgid ""
"If Row tint looks missing, the active LuCI theme may omit success/error or "
"info/warn CSS variables; fwlive falls back to local colors (air-gapped, no "
"data leaves the device)."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:205
msgid ""
"If the WAN is quiet, wait for probes or use the optional ping check in "
"Help / the enabling-logs guide."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:80
msgid "Include instead"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:34
msgid "Interface"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1688
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1688
msgid "Interface (prefix ! to exclude)"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:165
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:232
msgid "Ill configure this under Network → Firewall"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:194
msgid "Kernel log modules missing"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:195
msgid ""
"Kernel netfilter log modules are missing. Install kmod-nf-log-ipv4 and kmod-"
"nf-log-ipv6 (or kmod-nf-log / kmod-nf-log6), then reload the firewall."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:44
msgid "Len"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1619
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1619
msgid "Limit"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:536
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:536
msgid "Limited diagnostics — timeout command missing"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:210
msgid "Logging is off on this router"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:252
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:256
msgid "Manual test (System → Terminal):"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1590
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1595
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:46
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:221
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1590
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1595
msgid "Message"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1686
msgid "More filters"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js:37
msgid "Network → Firewall"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:187
msgid ""
"No WAN firewall zone found in /etc/config/firewall. Configure zones under"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:185
msgid "No WAN zone found"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:163
msgid "Not now"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:220
msgid "Nothing changes until you click Enable."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:36
msgid "OUT"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1610
msgid "One line"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:206
msgid "Open firewall zone settings"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:211
msgid ""
"OpenWrt does not write firewall events to the log until you turn logging on. "
"Live View only shows what the firewall already logs — it does not add allow/"
"deny rules."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1638
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1638
msgid "Palette"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1560
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1560
msgid "Pause"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
msgid "Paused"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:38
msgid "Proto"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1674
msgid "Protocol — common values"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1656
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1656
msgid "Quick search"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:91
msgid "Remove filter"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:995
msgid "Resume"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1631
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1631
msgid "Row tint"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1721
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1721
msgid ""
"Row tint shows pass/deny row backgrounds when checked. Choose Classic (green/"
"red, default) or Accessible (teal/orange). Action text stays colored either "
"way."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1550
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1550
msgid ""
"Row tint used a local color fallback because the active LuCI theme did not "
"apply pass/deny backgrounds."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:33
msgid "Rule"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:527
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:527
msgid "Rule labels incomplete — map truncated"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:531
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:531
msgid "Rule labels unavailable"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:529
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:529
msgid "Rule labels unavailable — temp file failed"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:41
msgid "SPort"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1650
msgid "Show hostnames"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1629
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1629
msgid "Show pass/deny row background colors"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1576
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1576
msgid "Simple"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:39
msgid "Source"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1689
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1689
msgid "Source IP contains (! to exclude)"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1690
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1690
msgid "Source port (! to exclude)"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1717
msgid ""
"The rate shown for WAN logging is the firewall zone log_limit. OpenWrt "
"defaults to 10/minute when no explicit limit is configured; fwlive does not "
"impose this cap."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1714
msgid ""
"The table updates automatically when your firewall logs traffic. Use Pause "
"if it moves too fast."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1551
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1551
msgid "Theme tint fallback"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/table.js:31
msgid "Time"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:219
msgid ""
"Turns on WAN zone drop/reject logging (same as Network → Firewall → wan → "
"Log). Rate-limited by the zone log_limit (OpenWrt default 10/minute). Normal "
"LAN browsing is not logged."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:126
msgid "Undo:"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1722
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1722
msgid "Use Detail for all columns (flags, length, raw message)."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1564
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1568
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1564
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1568
msgid "View"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:615
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:615
msgid "WAN drop/reject logging is off."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:204
msgid ""
"WAN drop/reject logging is on. Blocked inbound WAN traffic will show up "
"here. Normal LAN browsing will not."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:579
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:579
msgid ""
"WAN drop/reject logging is on. Blocked inbound traffic should appear here as "
"it happens — not normal LAN browsing."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:581
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:581
msgid "WAN logging is already enabled."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:88
msgid "WAN logging on"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:94
msgid "WAN logging on (%s). Click to disable."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:77
msgid "WAN logging unavailable: missing kernel log modules"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:70
msgid "WAN logging unavailable: no WAN zone"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:203
msgid "Waiting for firewall events"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:993
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1545
msgid "Watching"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1603
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1603
msgid "Wrap"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:123
msgid "allow/deny rules, LAN logging, or anything else."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:828
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:828
msgid "buffer full"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:81
msgid "default 10/minute"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:28
msgid "is"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:823
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:823
msgid "loading buffer"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:923
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:923
msgid "loading…"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:37
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/chips.js:44
msgid "not"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1107
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1107
msgid "not AH"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1106
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1106
msgid "not ESP"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1105
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1105
msgid "not GRE"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1102
msgid "not ICMP"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1103
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1103
msgid "not ICMPv6"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1104
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1104
msgid "not IGMP"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1108
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1108
msgid "not SCTP"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1100
msgid "not TCP"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1101
msgid "not UDP"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1666
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1666
msgid "not block"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1665
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1665
msgid "not drop"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1664
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1664
msgid "not pass"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1667
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1667
msgid "not reject"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1668
msgid "not unknown"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1679
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:1679
msgid "or type…"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:830
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:830
msgid "render paused (high rate)"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:832
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:832
msgid "scroll frozen — scroll to top to follow live"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:118
msgid "sets log on the WAN firewall zone and reloads the firewall."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:254
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:258
msgid "then ping the router."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:128
msgid "turn it back off with the WAN logging on control on the watch strip."
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:512
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:512
msgid "using fw4"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:510
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:510
msgid "using iptables"
msgstr ""
#: /home/lalbers/gitroot/fwlive/openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89
#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js:89
msgid "· %s"
msgstr ""
@@ -143,17 +143,27 @@ wan_zone_log_value() {
uci -q get "firewall.${zone}.log" 2>/dev/null
}
# Resolve a firewall section id to its canonical cfgXXXX form (issue B-1 /
# multi-model audit). `uci -X show` disables @type[N] aliases so @zone[0] and
# cfgXXXX for the same anonymous section compare equal. Empty on failure.
uci_canonical_firewall_section() {
_sid="$1"
[ -n "$_sid" ] || return 1
uci -q -X show "firewall.${_sid}" 2>/dev/null \
| sed -n '1s/^firewall\.\([^=.]*\)=.*/\1/p'
}
# True when two firewall section ids refer to the same WAN zone (issue #239).
# Compare canonical cfg ids — do NOT treat every name=wan zone as identical
# (duplicate wan sections would under-match foreign .log deltas as ours).
wan_firewall_zone_same() {
_a="$1"
_b="$2"
[ -n "$_a" ] && [ -n "$_b" ] || return 1
[ "$_a" = "$_b" ] && return 0
_na=$(uci -q get "firewall.${_a}.name" 2>/dev/null) || return 1
_nb=$(uci -q get "firewall.${_b}.name" 2>/dev/null) || return 1
_ta=$(uci -q get "firewall.${_a}" 2>/dev/null) || return 1
_tb=$(uci -q get "firewall.${_b}" 2>/dev/null) || return 1
[ "$_na" = "wan" ] && [ "$_nb" = "wan" ] && [ "$_ta" = "zone" ] && [ "$_tb" = "zone" ]
_ca=$(uci_canonical_firewall_section "$_a") || return 1
_cb=$(uci_canonical_firewall_section "$_b") || return 1
[ -n "$_ca" ] && [ -n "$_cb" ] && [ "$_ca" = "$_cb" ]
}
wan_log_staged_line_section() {
+24
View File
@@ -0,0 +1,24 @@
#
# 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:=iStoreRouter
PKG_VERSION:=0.6.7
PKG_RELEASE:=1
LUCI_DEPENDS:=+luci-app-quickstart +luci-app-store +luci-lib-taskd
LUCI_EXTRA_DEPENDS:=luci-lib-taskd (>=1.0.15)
LUCI_MINIFY_CSS:=0
LUCI_MINIFY_JS:=0
define Package/luci-app-istorerouter/conffiles
/etc/config/istorerouter
/www/luci-static/istorerouter/image/bg.gif
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
@@ -0,0 +1,6 @@
var p=(y,d,a)=>new Promise((i,n)=>{var s=o=>{try{c(a.next(o))}catch(e){n(e)}},f=o=>{try{c(a.throw(o))}catch(e){n(e)}},c=o=>o.done?i(o.value):Promise.resolve(o.value).then(s,f);c((a=a.apply(y,d)).next())});import{_ as w,d as x,r as b,x as E,P as F,o as _,c as m,f as r,h as g,F as k,e as L,t as h,g as B,w as D,Q as G,s as T,i as v,T as S}from"./index.js";const I=r("div",{class:"label-name"},[r("span",null,"\u9009\u62E9\u8F6F\u4EF6\u6E90 ")],-1),C={class:"label-value"},V={class:"label-flex"},N=["value"],M={class:"label-btns"},P=["disabled"],j={key:0,class:"label-msg"},q=x({__name:"index",setup(y){return p(this,null,function*(){let d,a;const i=b(!1),n=b(""),s=E({softsourceListIfo:[],softSource:{},currSoftSource:{}}),f=()=>p(this,null,function*(){var o,e,u;try{const t=yield v.Guide.SoftSourceList.GET();if((o=t==null?void 0:t.data)!=null&&o.result){const l=(e=t==null?void 0:t.data)==null?void 0:e.result;s.softsourceListIfo=l.softSourceList||[]}}catch(t){console.log(t)}try{const t=yield v.Guide.GetSoftSource.GET();if((u=t==null?void 0:t.data)!=null&&u.result){const l=t.data.result;s.softSource=l.softSource,s.currSoftSource=l.softSource}}catch(t){console.log(t)}});[d,a]=F(()=>f()),yield d,a();const c=()=>p(this,null,function*(){const o=S.Loading("\u6B63\u5728\u5207\u6362\u4E2D...");i.value=!0;try{const e=yield v.Guide.SoftSource.POST({softSourceIdentity:s.softSource.identity});if(e!=null&&e.data){const{result:u,error:t,success:l}=e.data;t&&S.Warning(t),(e.data.success||0)==0&&(S.Success("\u5207\u6362\u6210\u529F"),yield f())}}catch(e){S.Error(`${e}`)}finally{i.value=!1,o.Close()}});return(o,e)=>(_(),m("form",{class:"form-container",onSubmit:B(c,["prevent"])},[I,r("div",C,[g(` <select v-model="opkg.softSource.identity">
<option value="">\u8BF7\u9009\u62E9\u8F6F\u4EF6\u6E90</option>
<option v-for="item in opkg.softsourceListIfo" :value="item.identity">
{{ item.name }}
</option>
</select> `),(_(!0),m(k,null,L(s.softsourceListIfo,u=>(_(),m("label",V,[D(r("input",{type:"radio",value:u.identity,"onUpdate:modelValue":e[0]||(e[0]=t=>s.softSource.identity=t)},null,8,N),[[G,s.softSource.identity,void 0,{trim:!0}]]),T(" "+h(u.name),1)]))),256))]),r("div",M,[r("button",{class:"sumbit",disabled:i.value},"\u4FDD\u5B58",8,P)]),n.value?(_(),m("div",j,[r("span",null,h(n.value),1)])):g("v-if",!0)],32))})}});var Q=w(q,[]);export{Q as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
var p=(D,c,d)=>new Promise((l,e)=>{var u=o=>{try{r(d.next(o))}catch(a){e(a)}},i=o=>{try{r(d.throw(o))}catch(a){e(a)}},r=o=>o.done?l(o.value):Promise.resolve(o.value).then(u,i);r((d=d.apply(D,c)).next())});import{_ as x,d as y,r as h,x as F,P,o as m,c as _,f as n,w as v,y as k,F as N,j as g,h as I,t as S,g as B,i as w,T as E}from"./index.js";const C=n("div",{class:"label-name"},[n("span",null,"DNS\u9009\u9879")],-1),A={class:"label-value"},T=n("option",{value:"auto"},"\u4F7F\u7528\u8FD0\u8425\u5546\u63D0\u4F9B\u7684DNS",-1),V=n("option",{value:"manual"},"\u81EA\u5B9A\u4E49DNS",-1),G=[T,V],M=n("div",{class:"label-name"},[n("span",null,"DNS\u670D\u52A1\u5668\u5730\u5740")],-1),U={class:"label-value"},j=n("div",{class:"label-name"}," \u5907\u7528DNS\u670D\u52A1\u5668\u5730\u5740 ",-1),q={class:"label-value"},L={class:"label-btns"},O=["disabled"],z={key:1,class:"label-msg"},H=y({__name:"index",setup(D){return p(this,null,function*(){let c,d;const l=h(""),e=F({interfaceName:"",dnsProto:"auto",manualDnsIp:[]}),u=F({dns1:"",dns2:""}),i=h(!1),r=()=>p(this,null,function*(){i.value=!0;try{const a=yield w.Guide.DnsConfig.GET();if(a!=null&&a.data){const{result:t}=a.data;if(t){e.dnsProto=t.dnsProto,e.manualDnsIp=t.manualDnsIp||[];for(let s=0;s<e.manualDnsIp.length;s++){s==0?u.dns1=e.manualDnsIp[s]:s==1&&(u.dns2=e.manualDnsIp[s]);break}}}}catch(a){l.value=a}i.value=!1});[c,d]=P(()=>r()),yield c,d();const o=()=>p(this,null,function*(){let a={};switch(e.dnsProto){case"auto":break;case"manual":a.manualDnsIp=[],e.manualDnsIp!=null&&e.manualDnsIp.length>0?a.manualDnsIp=e.manualDnsIp:(a.manualDnsIp.push(u.dns1),u.dns2&&a.manualDnsIp.push(u.dns2));break}a.dnsProto=e.dnsProto,a.interfaceName=e.interfaceName;const t=E.Loading("\u914D\u7F6E\u4E2D...");try{const s=yield w.Guide.DnsConfig.POST(a);if(s!=null&&s.data){const{success:f,error:b}=s==null?void 0:s.data;b&&(l.value=b),(f==null||f==0)&&(l.value="\u914D\u7F6E\u6210\u529F")}}catch(s){l.value=s}t.Close()});return(a,t)=>(m(),_("form",{class:"form-container",onSubmit:B(o,["prevent"])},[C,n("div",A,[v(n("select",{"onUpdate:modelValue":t[0]||(t[0]=s=>e.dnsProto=s)},[...G],512),[[k,e.dnsProto]])]),e.dnsProto=="manual"?(m(),_(N,{key:0},[M,n("div",U,[v(n("input",{type:"text",placeholder:"\u8BF7\u8F93\u5165 dns \u5730\u5740","onUpdate:modelValue":t[1]||(t[1]=s=>u.dns1=s),required:""},null,512),[[g,u.dns1,void 0,{trim:!0}]])]),j,n("div",q,[v(n("input",{type:"text",placeholder:"\u8BF7\u8F93\u5165\u5907\u7528 dns \u5730\u5740","onUpdate:modelValue":t[2]||(t[2]=s=>u.dns2=s)},null,512),[[g,u.dns2,void 0,{trim:!0}]])])],64)):I("v-if",!0),n("div",L,[n("button",{class:"sumbit",disabled:i.value},"\u4FDD\u5B58",8,O)]),l.value?(m(),_("div",z,[n("span",null,S(l.value),1)])):I("v-if",!0)],32))})}});var Q=x(H,[]);export{Q as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as o,d as r,E as e,o as u,A as i,B as c,Y as t,G as l}from"./index.js";const p=r({__name:"index",setup(_){const a=[{name:"disk",title:"\u6211\u7684\u78C1\u76D8",path:"/router/disk"},{name:"disk-raid",title:"\u78C1\u76D8\u9635\u5217",fn:()=>{t({full:!1,title:"\u78C1\u76D8\u9635\u5217",src:"/cgi-bin/luci/admin/nas/raid"})}},{name:"disk-smart",title:"S.M.A.R.T",fn:()=>{t({full:!1,title:"S.M.A.R.T",src:"/cgi-bin/luci/admin/nas/smart"})}}];return(d,m)=>{const s=e("router-loading"),n=e("layout-page");return u(),i(n,{menus:a},{default:c(()=>[l(s)]),_:1})}}});var k=o(p,[]);export{k as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
var m=(r,v,l)=>new Promise((i,_)=>{var F=a=>{try{c(l.next(a))}catch(u){_(u)}},h=a=>{try{c(l.throw(a))}catch(u){_(u)}},c=a=>a.done?i(a.value):Promise.resolve(a.value).then(F,h);c((l=l.apply(r,v)).next())});import{_ as C,d as y,x as k,P as E,a as x,o as n,c as o,f as e,t as d,F as A,a4 as S,a5 as B,p as b,q as w,i as N}from"./index.js";const D=r=>(b("data-v-647a938c"),r=r(),w(),r),$={id:"page",class:"page-container"},I=D(()=>e("div",{class:"notice_info"},[e("li",null," \u52A8\u6001 DNS \uFF08DDNS\uFF09\u8BA9\u60A8\u5373\u4F7F\u5728\u6CA1\u6709\u9759\u6001 IP \u5730\u5740\u7684\u60C5\u51B5\u4E0B\uFF0C\u4ECD\u53EF\u5C06\u670D\u52A1\u5668\u8FDE\u540C\u7ED1\u5B9A\u7684\u57DF\u540D\u6620\u5C04\u81F3\u516C\u7F51\u4E0A\u3002 "),e("li",null," \u5982\u679C\u60A8\u6CA1\u6709\u516C\u7F51 IP \u8BF7\u4F7F\u7528 DDNSTO \uFF0C\u521D\u6B21\u4F7F\u7528 DDNSTO \u9700\u8981\u521D\u59CB\u5316\u914D\u7F6E ")],-1)),P={class:"text-container"},T={class:"text-container_item"},O=D(()=>e("div",{class:"text-container_item_title"},[e("span",null,"DDNSTO\uFF1A")],-1)),q={class:"text-container_item_flex"},G={class:"text-container_item_block"},j=["href"],V={key:0,class:"domain"},z={key:1,class:"domain"},H={class:"text-container_item"},J=D(()=>e("div",{class:"text-container_item_title"},[e("span",null,"myddns_ipv4\uFF1A")],-1)),K={class:"text-container_item_flex"},L={class:"text-container_item_block"},M=["href"],Q={key:1,class:"domain"},R={class:"text-container_item"},U=D(()=>e("div",{class:"text-container_item_title"},[e("span",null,"myddns_ipv6\uFF1A")],-1)),W={class:"text-container_item_flex"},X={class:"text-container_item_block"},Y=["href"],Z={key:1,class:"domain"},tt=y({__name:"index",setup(r){return m(this,null,function*(){let v,l;k({ipv4:"",ipv6:""});const i=k({ddnstoDomain:"",ipv4Domain:"",ipv6Domain:""}),_=k({install:!0,error:null}),F=()=>m(this,null,function*(){yield Promise.all([h()])}),h=()=>m(this,null,function*(){try{const t=yield N.Guide.Ddns.GET(),{result:s,error:p}=t.data;if(p)throw p;s&&(i.ddnstoDomain=s.ddnstoDomain,i.ipv4Domain=s.ipv4Domain,i.ipv6Domain=s.ipv6Domain)}catch(t){console.log(t)}});[v,l]=E(()=>F()),yield v,l();const c=x(()=>i.ddnstoDomain),a=x(()=>{const t=i.ipv4Domain;return t!=null&&t!=""&&t!="Stopped"?{url:`http://${t}`,title:t,ok:!0}:{url:`http://${t}`,title:"\u672A\u914D\u7F6E",ok:!1}}),u=x(()=>{const t=i.ipv6Domain;return t!=null&&t!=""&&t!="Stopped"?{url:`http://${t}`,title:t,ok:!0}:{url:`http://${t}`,title:"\u672A\u914D\u7F6E",ok:!1}}),g=()=>{S({domain:c.value,callback:t=>{}})},f=t=>{B({setup:t,callback:s=>{switch(t){case"ipv4":i.ipv4Domain=s.domain;break;case"ipv6":i.ipv6Domain=s.domain;break}}})};return(t,s)=>(n(),o("div",$,[I,e("div",P,[e("div",T,[O,e("div",q,[e("div",G,[_.install?(n(),o("a",{key:0,href:c.value,target:"_blank",class:"domain"},d(c.value),9,j)):(n(),o(A,{key:1},[_.error?(n(),o("a",V,d(_.error),1)):(n(),o("a",z,"\u672A\u5B89\u88C5"))],64)),e("a",{class:"setting",onClick:s[0]||(s[0]=p=>g())},"\u5FEB\u901F\u914D\u7F6E")])])]),e("div",H,[J,e("div",K,[e("div",L,[a.value.ok?(n(),o("a",{key:0,href:a.value.url,target:"_blank",class:"domain"},d(a.value.title),9,M)):(n(),o("a",Q,d(a.value.title),1)),e("a",{class:"setting",onClick:s[1]||(s[1]=p=>f("ipv4"))},"\u5FEB\u901F\u914D\u7F6E")])])]),e("div",R,[U,e("div",W,[e("div",X,[u.value.ok?(n(),o("a",{key:0,href:u.value.url,target:"_blank",class:"domain"},d(u.value.title),9,Y)):(n(),o("a",Z,d(u.value.title),1)),e("a",{class:"setting",onClick:s[2]||(s[2]=p=>f("ipv6"))},"\u5FEB\u901F\u914D\u7F6E")])])])])]))})}});var at=C(tt,[["__scopeId","data-v-647a938c"]]);export{at as default};

Some files were not shown because too many files have changed in this diff Show More