mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 20:32:51 +08:00
🌴 Sync 2026-03-05 23:51:42
This commit is contained in:
1 parent
97c049ed0a
commit
0acff03804
14253 files changed
+3893239
No files matched your search
+121
@@ -0,0 +1,121 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=3ginfo
|
||||
PKG_VERSION:=20251114
|
||||
PKG_RELEASE:=1
|
||||
|
||||
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))
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/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
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
#!/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>"
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/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
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
#!/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>"
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
#!/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>"
|
||||
@@ -0,0 +1,75 @@
|
||||
<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;'> </td></tr>
|
||||
<tr>
|
||||
<td> </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> </td>
|
||||
</tr>
|
||||
<tr><td colspan=3> </td></tr>
|
||||
</table>
|
||||
|
||||
</body></html>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
@@ -0,0 +1,9 @@
|
||||
#!/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
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
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
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,71 @@
|
||||
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
|
||||
@@ -0,0 +1,71 @@
|
||||
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
|
||||
@@ -0,0 +1,27 @@
|
||||
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
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,19 @@
|
||||
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
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,37 @@
|
||||
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
|
||||
@@ -0,0 +1,28 @@
|
||||
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
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,28 @@
|
||||
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
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,20 @@
|
||||
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
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,19 @@
|
||||
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
|
||||
@@ -0,0 +1,27 @@
|
||||
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
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,86 @@
|
||||
<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;'> </td></tr>
|
||||
<tr>
|
||||
<td> </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%"> </div>
|
||||
</div>
|
||||
</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr><td colspan=3> </td></tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,35 @@
|
||||
<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}%"> </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"> </span><small><span class="r">{BTSINFO}</small>
|
||||
<span class="l">Device:</span><span class="r">{DEVICE}</span>
|
||||
</div>
|
||||
@@ -0,0 +1,35 @@
|
||||
<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}%"> </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"> </span><small><span class="r">{BTSINFO}</small>
|
||||
<span class="l">Seade:</span><span class="r">{DEVICE}</span>
|
||||
</div>
|
||||
@@ -0,0 +1,35 @@
|
||||
<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}%"> </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"> </span><small><span class="r">{BTSINFO}</small>
|
||||
<span class="l">Dispositivo:</span><span class="r">{DEVICE}</span>
|
||||
</div>
|
||||
@@ -0,0 +1,35 @@
|
||||
<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}%"> </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"> </span><small><span class="r">{BTSINFO}</small>
|
||||
<span class="l">Urządzenie:</span><span class="r">{DEVICE}</span>
|
||||
</div>
|
||||
@@ -0,0 +1 @@
|
||||
E404:/index.html
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/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
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
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;
|
||||
}
|
||||
@@ -0,0 +1,794 @@
|
||||
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) {
|
||||
document.getElementById('btsearch' + idx).setAttribute("href", "http://www.btsearch.pl/szukaj.php?search=" + data.cid_dec + "&siec=-1&mode=std");
|
||||
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;
|
||||
@@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* Generated using the Bootstrap Customizer (https://getbootstrap.com/docs/3.4/customize/)
|
||||
*//*!
|
||||
* Bootstrap v3.4.1 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2019 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{color:#000 !important;text-shadow:none !important;background:transparent !important;-webkit-box-shadow:none !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.Line truncated
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,42 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,4 @@
|
||||
/**
|
||||
* @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);
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
<!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> →</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"> </div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
/*! 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='­<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);
|
||||
@@ -0,0 +1,51 @@
|
||||
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
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
#!/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
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,42 @@
|
||||
<!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'> </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'> </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'> </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'> </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'> </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>
|
||||
@@ -0,0 +1,102 @@
|
||||
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);
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
config 3ginfo
|
||||
option device ''
|
||||
option http_port '81'
|
||||
option language 'pl'
|
||||
option network 'wan'
|
||||
option pincode ''
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
case "$ACTION" in
|
||||
remove)
|
||||
[ -f /tmp/pincode_was_given ] && rm -f /tmp/pincode_was_given;;
|
||||
esac
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
ln -s /usr/share/3ginfo/cgi-bin/3ginfo.sh /usr/bin/3ginfo
|
||||
exit 0
|
||||
+598
@@ -0,0 +1,598 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# (c) 2010-2019 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=\"http://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=\"http://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
|
||||
26001*) CID="<a href=\"http://btsearch.pl/szukaj.php?search="$CID"h\&siec=3\&mode=adv\">$CID</a>";;
|
||||
26002*) CID="<a href=\"http://btsearch.pl/szukaj.php?search="$CID"h\&siec=-1\&mode=adv\">$CID</a>";;
|
||||
26003*) CID="<a href=\"http://btsearch.pl/szukaj.php?search="$CID"h\&siec=-1\&mode=adv\">$CID</a>";;
|
||||
26006*) CID="<a href=\"http://btsearch.pl/szukaj.php?search="$CID"h\&siec=4\&mode=adv\">$CID</a>";;
|
||||
26016*) CID="<a href=\"http://btsearch.pl/szukaj.php?search="$CID"h\&siec=7\&mode=adv\">$CID</a>";;
|
||||
26017*) CID="<a href=\"http://btsearch.pl/szukaj.php?search="$CID"h\&siec=8\&mode=adv\">$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
|
||||
@@ -0,0 +1,39 @@
|
||||
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
|
||||
@@ -0,0 +1,8 @@
|
||||
NOTDETECTED="Not detected any device"
|
||||
NODEVICE="No device"
|
||||
PINERROR="PIN code error"
|
||||
CONNECTED="Connected"
|
||||
CONNECT="Connect"
|
||||
DISCONNECTED="Disconnected"
|
||||
DISCONNECT="Disconnect"
|
||||
NOINFO="No information"
|
||||
@@ -0,0 +1,8 @@
|
||||
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"
|
||||
@@ -0,0 +1,8 @@
|
||||
NOTDETECTED="Nessun dispositivo trovato"
|
||||
NODEVICE="Nessun dispositivo"
|
||||
PINERROR="Errore codice PIN"
|
||||
CONNECTED="Connesso"
|
||||
CONNECT="Connetti"
|
||||
DISCONNECTED="Disconnesso"
|
||||
DISCONNECT="Disconnetti"
|
||||
NOINFO="Nessuna Informazione"
|
||||
@@ -0,0 +1,8 @@
|
||||
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"
|
||||
@@ -0,0 +1,176 @@
|
||||
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
|
||||
@@ -0,0 +1,60 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,172 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,159 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,14 @@
|
||||
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
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
#!/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
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"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}"
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
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
|
||||
@@ -0,0 +1,18 @@
|
||||
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
|
||||
@@ -0,0 +1,18 @@
|
||||
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
|
||||
@@ -0,0 +1,18 @@
|
||||
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
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
config 3ginfo
|
||||
option device ''
|
||||
option http_port '81'
|
||||
option network 'wan'
|
||||
option pincode ''
|
||||
Executable
+138
@@ -0,0 +1,138 @@
|
||||
#!/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/°/°}"
|
||||
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
|
||||
@@ -0,0 +1,13 @@
|
||||
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
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
#!/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
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
#!/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
|
||||
+140
@@ -0,0 +1,140 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# Copyright (C) 2025 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=3proxy
|
||||
PKG_VERSION:=0.9.5
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/3proxy/3proxy/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=skip
|
||||
|
||||
PKG_CPE_ID:=cpe:/a:3proxy:3proxy
|
||||
PKG_LICENSE:=3proxy Apache-2.0 GPL-2.0-or-later LGPL-2.1-or-later
|
||||
PKG_LICENSE_FILES:=copying
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/3proxy/Default
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
TITLE:=tiny free proxy server
|
||||
URL:=https://3proxy.ru/
|
||||
endef
|
||||
|
||||
define Package/3proxy
|
||||
$(call Package/3proxy/Default)
|
||||
endef
|
||||
|
||||
define Package/3proxy/description
|
||||
3Proxy tiny free proxy server is really tiny cross-platform (Win32/Win64&Unix)
|
||||
freeware proxy servers set. It includes HTTP proxy with HTTPS and FTP support,
|
||||
SOCKSv4/SOCKSv4.5/SOCKSv5 proxy (socks/socks.exe), POP3 proxy, SMTP proxy,
|
||||
AIM/ICQ proxy (icqpr/icqpr.exe), MSN messenger / Live messenger proxy
|
||||
(msnpr/msnpr.exe), FTP proxy, caching DNS proxy, TCP and UDP portmappers.
|
||||
|
||||
You can use every proxy as a standalone program (socks, proxy, tcppm, udppm,
|
||||
pop3p) or use combined program (3proxy). Combined proxy additionally supports
|
||||
features like access control, bandwidth limiting, limiting daily/weekly/monthly
|
||||
traffic amount, proxy chaining, log rotation, syslog and ODBC logging, etc.
|
||||
|
||||
It's created to be small, simple and yet very functional.
|
||||
endef
|
||||
|
||||
define Package/3proxy/conffiles
|
||||
/etc/3proxy/
|
||||
/etc/config/3proxy
|
||||
endef
|
||||
|
||||
define Package/3proxy/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/3proxy $(1)/usr/bin/3proxy
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_CONF) $(CURDIR)/files/3proxy.config $(1)/etc/config/3proxy
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) $(CURDIR)/files/3proxy.init $(1)/etc/init.d/3proxy
|
||||
endef
|
||||
|
||||
# 1: library name
|
||||
# 2: library path
|
||||
# 3: library dependencies
|
||||
# 4: library description
|
||||
define 3proxyLibrary
|
||||
3proxyLibs+= $(1)
|
||||
PKG_CONFIG_DEPENDS+= CONFIG_PACKAGE_3proxy-lib-$(1)
|
||||
|
||||
define Package/3proxy-lib-$(1)
|
||||
$(call Package/3proxy/Default)
|
||||
TITLE+= - $(1) library
|
||||
DEPENDS+= 3proxy $(3)
|
||||
endef
|
||||
|
||||
define Package/3proxy-lib-$(1)/description
|
||||
3Proxy shared library - $(1).
|
||||
$(4)
|
||||
endef
|
||||
|
||||
define Package/3proxy-lib-$(1)/install
|
||||
$(INSTALL_DIR) $$(1)/usr/libexec/3proxy
|
||||
$(CP) $(PKG_BUILD_DIR)/bin/$(2).ld.so $$(1)/usr/libexec/3proxy/
|
||||
endef
|
||||
endef
|
||||
$(eval $(call 3proxyLibrary,pam,pamauth,+libpam,))
|
||||
$(eval $(call 3proxyLibrary,pcre,PCREPlugin,,This filtering plugin can be used to create matching and replace rules with regular expressions for client's request, client and servers header and client and server data.))
|
||||
$(eval $(call 3proxyLibrary,ssl,SSLPlugin,+libopenssl,This plugin can be used to decrypt and manupulate SSL/TLS traffic.))
|
||||
$(eval $(call 3proxyLibrary,strings,StringsPlugin,,Allows to change replies of HTTP proxy server.))
|
||||
$(eval $(call 3proxyLibrary,traffic,TrafficPlugin,,This plugin attempts to correct 3proxy computations to approximate network or link level traffic by using either fixed coefficients by port number or attempting to predict number and sizes of network packets.))
|
||||
$(eval $(call 3proxyLibrary,transparent,TransparentPlugin,,This plugin can be used to implement 3proxy transparently for client for any TCP-based protocols.))
|
||||
|
||||
# 1: module name
|
||||
# 2: module dependencies
|
||||
define 3proxyModule
|
||||
3proxyMods+= $(1)
|
||||
PKG_CONFIG_DEPENDS+= CONFIG_PACKAGE_3proxy-mod-$(1)
|
||||
|
||||
define Package/3proxy-mod-$(1)
|
||||
$(call Package/3proxy/Default)
|
||||
TITLE+= - $(1) standalone module
|
||||
DEPENDS+= $(2)
|
||||
endef
|
||||
|
||||
define Package/3proxy-mod-$(1)/description
|
||||
3Proxy standalone module - $(1).
|
||||
This module can be used as a standalone program.
|
||||
endef
|
||||
|
||||
define Package/3proxy-mod-$(1)/install
|
||||
$(INSTALL_DIR) $$(1)/usr/libexec/3proxy
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/$(1) $$(1)/usr/libexec/3proxy/
|
||||
endef
|
||||
endef
|
||||
$(eval $(call 3proxyModule,ftppr,))
|
||||
$(eval $(call 3proxyModule,mycrypt,))
|
||||
$(eval $(call 3proxyModule,pop3p,))
|
||||
$(eval $(call 3proxyModule,proxy,))
|
||||
$(eval $(call 3proxyModule,smtpp,))
|
||||
$(eval $(call 3proxyModule,socks,))
|
||||
$(eval $(call 3proxyModule,tcppm,))
|
||||
$(eval $(call 3proxyModule,tlspr,))
|
||||
$(eval $(call 3proxyModule,udppm,))
|
||||
|
||||
MAKE_FLAGS += \
|
||||
PLUGINS="$(strip \
|
||||
$(if $(CONFIG_PACKAGE_3proxy-lib-pam),PamAuth) \
|
||||
$(if $(CONFIG_PACKAGE_3proxy-lib-pcre),PCREPlugin) \
|
||||
$(if $(CONFIG_PACKAGE_3proxy-lib-ssl),SSLPlugin) \
|
||||
$(if $(CONFIG_PACKAGE_3proxy-lib-strings),StringsPlugin) \
|
||||
$(if $(CONFIG_PACKAGE_3proxy-lib-traffic),TrafficPlugin) \
|
||||
$(if $(CONFIG_PACKAGE_3proxy-lib-transparent),TransparentPlugin))" \
|
||||
-f Makefile.Linux
|
||||
|
||||
$(foreach lib,$(3proxyLibs),$(eval $(call BuildPackage,3proxy-lib-$(lib))))
|
||||
$(foreach mod,$(3proxyMods),$(eval $(call BuildPackage,3proxy-mod-$(mod))))
|
||||
$(eval $(call BuildPackage,3proxy))
|
||||
@@ -0,0 +1,5 @@
|
||||
|
||||
config 3proxy 'config'
|
||||
option enabled '0'
|
||||
option conffile '/etc/3proxy/3proxy.cfg'
|
||||
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
USE_PROCD=1
|
||||
|
||||
CONF="3proxy"
|
||||
PROG="/usr/bin/3proxy"
|
||||
|
||||
start_service() {
|
||||
config_load "$CONF"
|
||||
|
||||
local enabled conffile
|
||||
|
||||
config_get_bool enabled "config" "enabled" "0"
|
||||
[ "$enabled" -eq "1" ] || return 0
|
||||
|
||||
config_get conffile "config" "conffile" "/etc/3proxy/3proxy.cfg"
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command "$PROG" "$conffile"
|
||||
|
||||
procd_set_param stdout "1"
|
||||
procd_set_param stderr "1"
|
||||
procd_set_param limits core="unlimited"
|
||||
procd_set_param limits nofile="1000000 1000000"
|
||||
procd_set_param respawn
|
||||
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "$CONF"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
From 67315da11c88d7007090c23f68e0b66e6d9b8e37 Mon Sep 17 00:00:00 2001
|
||||
From: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
|
||||
Date: Mon, 28 Feb 2022 14:26:57 +0300
|
||||
Subject: [PATCH] Fix underlinkage of SSLPlugin
|
||||
|
||||
+ /usr/share/spec-helper/check_elf_files
|
||||
<...>
|
||||
Warning: undefined symbols in /usr/lib64/3proxy/SSLPlugin.ld.so: TLS_client_method SSL_get_error BIO_new_fp TLS_server_method SSL_write SSL_free X509_delete_ext SSL_set_fd EVP_sha1 X509_get_subject_name EVP_PKEY_free X509_set_issuer_name SSL_read X509_get_ext_by_NID SSL_new SSL_shutdown SSL_set_read_ahead PEM_write_bio_X509 SSL_accept SSL_CTX_new SSL_get_peer_certificate BIO_ctrl BIO_free OPENSSL_init_ssl SSL_ctrl ERR_error_string SSL_pending X509_free X509_set_pubkey X509_digest SSL_connect SSL_CTX_free X509_sign ERR_get_error SSL_CTX_use_PrivateKey X509_EXTENSION_free X509_dup PEM_read_bio_PrivateKey PEM_read_bio_X509 SSL_CTX_use_certificate EVP_sha256 BIO_new_file
|
||||
|
||||
Fixes: https://github.com/3proxy/3proxy/issues/749
|
||||
---
|
||||
src/plugins/SSLPlugin/Makefile.inc | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/src/plugins/SSLPlugin/Makefile.inc
|
||||
+++ b/src/plugins/SSLPlugin/Makefile.inc
|
||||
@@ -10,5 +10,5 @@ my_ssl$(OBJSUFFICS): my_ssl.c
|
||||
|
||||
|
||||
$(BUILDDIR)SSLPlugin$(DLSUFFICS): ssl_plugin$(OBJSUFFICS) my_ssl$(OBJSUFFICS)
|
||||
- $(LN) $(LNOUT)../../$(BUILDDIR)SSLPlugin$(DLSUFFICS) $(LDFLAGS) $(DLFLAGS) ssl_plugin$(OBJSUFFICS) my_ssl$(OBJSUFFICS) $(LIBS)
|
||||
-
|
||||
\ No newline at end of file
|
||||
+ $(LN) $(LNOUT)../../$(BUILDDIR)SSLPlugin$(DLSUFFICS) $(LDFLAGS) $(DLFLAGS) ssl_plugin$(OBJSUFFICS) my_ssl$(OBJSUFFICS) $(LIBS) -lcrypto -lssl
|
||||
+
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=7z
|
||||
PKG_VERSION:=25.01
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)$(subst .,,$(PKG_VERSION))-src.tar.xz
|
||||
PKG_SOURCE_URL:=https://7-zip.org/a/
|
||||
PKG_HASH:=skip
|
||||
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
PKG_LICENSE:=LGPL-2.1-or-later BSD-3-Clause unRAR
|
||||
PKG_LICENSE_FILES:=DOC/License.txt DOC/copying.txt DOC/unRarLicense.txt
|
||||
PKG_CPE_ID:=cpe:/a:7-zip:7-zip
|
||||
|
||||
HOST_BUILD_PARALLEL:=1
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
|
||||
|
||||
define Package/7z
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
SUBMENU:=Compression
|
||||
TITLE:=File archiver with a high compression ratio
|
||||
URL:=https://7-zip.org/
|
||||
DEPENDS:=+libstdcpp
|
||||
endef
|
||||
|
||||
HOST_MAKE_PATH:=CPP/7zip/Bundles/Alone2
|
||||
HOST_MAKE_FLAGS+= \
|
||||
-f ../../cmpl_gcc.mak \
|
||||
CC="$(HOSTCC) $(HOST_CFLAGS)" \
|
||||
CXX="$(HOSTCXX) $(HOST_CXXFLAGS)"
|
||||
|
||||
MAKE_PATH:=CPP/7zip/Bundles/Alone2
|
||||
MAKE_FLAGS+= \
|
||||
-f ../../cmpl_gcc.mak \
|
||||
CC="$(TARGET_CC) $(TARGET_CFLAGS)" \
|
||||
CXX="$(TARGET_CXX) $(TARGET_CXXFLAGS)"
|
||||
|
||||
define Host/Clean
|
||||
$(RM) $(STAGING_DIR_HOSTPKG)/bin/7z $(STAGING_DIR_HOSTPKG)/bin/7zz
|
||||
endef
|
||||
|
||||
define Host/Install
|
||||
$(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin
|
||||
$(INSTALL_BIN) $(HOST_BUILD_DIR)/$(MAKE_PATH)/b/g/7zz $(STAGING_DIR_HOSTPKG)/bin/
|
||||
$(LN) 7zz $(STAGING_DIR_HOSTPKG)/bin/7z
|
||||
endef
|
||||
|
||||
define Package/7z/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/b/g/7zz $(1)/usr/bin/
|
||||
$(LN) 7zz $(1)/usr/bin/7z
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
$(eval $(call BuildPackage,7z))
|
||||
@@ -0,0 +1,44 @@
|
||||
--- a/CPP/7zip/7zip_gcc.mak
|
||||
+++ b/CPP/7zip/7zip_gcc.mak
|
||||
@@ -24,7 +24,7 @@ PROGPATH_STATIC = $(O)/$(PROG)s
|
||||
|
||||
|
||||
ifneq ($(CC), xlc)
|
||||
-CFLAGS_WARN_WALL = -Werror -Wall -Wextra
|
||||
+CFLAGS_WARN_WALL = -Wall -Wextra
|
||||
endif
|
||||
|
||||
# for object file
|
||||
@@ -45,12 +45,12 @@ CFLAGS_DEBUG = -g
|
||||
else
|
||||
CFLAGS_DEBUG = -DNDEBUG
|
||||
ifneq ($(CC), $(CROSS_COMPILE)clang)
|
||||
-LFLAGS_STRIP = -s
|
||||
+LFLAGS_STRIP =
|
||||
endif
|
||||
endif
|
||||
|
||||
# CFLAGS_BASE_LIST = -S
|
||||
-CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
|
||||
+CFLAGS_BASE = $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
|
||||
$(CFLAGS_DEBUG) -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
|
||||
-fPIC
|
||||
|
||||
@@ -169,7 +169,7 @@ endif
|
||||
|
||||
|
||||
|
||||
-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(FLAGS_FLTO) $(CC_SHARED) -o $@
|
||||
+CFLAGS += $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(FLAGS_FLTO) $(CC_SHARED) -o $@
|
||||
|
||||
|
||||
ifdef IS_MINGW
|
||||
@@ -1361,7 +1361,7 @@ predef_cc:
|
||||
$(CC) $(CFLAGS) -E $(SHOW_PREDEF) ../../../../C/CpuArch.c > predef_cc_log
|
||||
# $(CC) $(CFLAGS) -E -dM - < /dev/null
|
||||
predef_cxx:
|
||||
- $(CXX) $(CFLAGS) -E $(SHOW_PREDEF) ../../../Common/CrcReg.cpp > predef_cxx_log
|
||||
+ $(CXX) $(CXXFLAGS) -E $(SHOW_PREDEF) ../../../Common/CrcReg.cpp > predef_cxx_log
|
||||
|
||||
predef: predef_cc predef_cxx
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
--- a/C/Threads.c
|
||||
+++ b/C/Threads.c
|
||||
@@ -472,7 +472,7 @@ WRes Thread_Create_With_CpuSet(CThread *
|
||||
*/
|
||||
|
||||
// ret2 =
|
||||
- pthread_attr_setaffinity_np(&attr, sizeof(*cpuSet), cpuSet);
|
||||
+ //pthread_attr_setaffinity_np(&attr, sizeof(*cpuSet), cpuSet);
|
||||
// if (ret2) ret = ret2;
|
||||
#endif
|
||||
}
|
||||
@@ -482,14 +482,12 @@ WRes Thread_Create_With_CpuSet(CThread *
|
||||
if (!ret)
|
||||
{
|
||||
p->_created = 1;
|
||||
- /*
|
||||
if (cpuSet)
|
||||
{
|
||||
// ret2 =
|
||||
pthread_setaffinity_np(p->_tid, sizeof(*cpuSet), cpuSet);
|
||||
// if (ret2) ret = ret2;
|
||||
}
|
||||
- */
|
||||
}
|
||||
}
|
||||
// ret2 =
|
||||
--- a/C/Threads.h
|
||||
+++ b/C/Threads.h
|
||||
@@ -29,6 +29,7 @@ Z7_DIAGNOSTIC_IGNORE_END_RESERVED_MACRO_
|
||||
#endif
|
||||
|
||||
#include <pthread.h>
|
||||
+#include <sched.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
7zz | grep "$PKG_VERSION"
|
||||
@@ -0,0 +1,55 @@
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=7zip
|
||||
PKG_VERSION:=25.01
|
||||
PKG_REV:=$(subst .,,$(PKG_VERSION))
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=7z$(PKG_REV)-src.tar.xz
|
||||
PKG_SOURCE_URL:=https://7-zip.org/a/
|
||||
PKG_HASH:=skip
|
||||
PKG_MAINTAINER:=jjm2473 <jjm2473@gmail.com>
|
||||
|
||||
PKG_LICENSE:=LGPL-2.0-only
|
||||
PKG_LICENSE_FILES:=DOC/License.txt DOC/copying.txt
|
||||
PKG_CPE_ID:=cpe:/a:7-zip:7-zip
|
||||
|
||||
PKG_CHECK_FORMAT_SECURITY:=0
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/7zip
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
DEPENDS:=+libstdcpp
|
||||
TITLE:=7zip
|
||||
URL:=https://7-zip.org/
|
||||
SUBMENU:=Compression
|
||||
endef
|
||||
|
||||
define Package/7zip/description
|
||||
File archiver with a high compression ratio
|
||||
endef
|
||||
|
||||
TAR_OPTIONS := -C $(PKG_BUILD_DIR) $(TAR_OPTIONS)
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(MAKE) -C $(PKG_BUILD_DIR)/CPP/7zip/Bundles/Alone2 -f ../../cmpl_gcc.mak \
|
||||
CC="$(TARGET_CC) $(TARGET_CFLAGS) -D_GNU_SOURCE -O" \
|
||||
CXX="$(TARGET_CXX) $(TARGET_CXXFLAGS) -D_GNU_SOURCE -O" \
|
||||
DISABLE_RAR=1
|
||||
endef
|
||||
|
||||
define Package/7zip/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin/
|
||||
$(INSTALL_BIN) \
|
||||
$(PKG_BUILD_DIR)/CPP/7zip/Bundles/Alone2/b/g/7zz \
|
||||
$(1)/usr/bin/
|
||||
$(LN) 7zz $(1)/usr/bin/7z
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,7zip))
|
||||
@@ -0,0 +1,44 @@
|
||||
--- a/CPP/7zip/7zip_gcc.mak
|
||||
+++ b/CPP/7zip/7zip_gcc.mak
|
||||
@@ -24,7 +24,7 @@ PROGPATH_STATIC = $(O)/$(PROG)s
|
||||
|
||||
|
||||
ifneq ($(CC), xlc)
|
||||
-CFLAGS_WARN_WALL = -Werror -Wall -Wextra
|
||||
+CFLAGS_WARN_WALL = -Wall -Wextra
|
||||
endif
|
||||
|
||||
# for object file
|
||||
@@ -45,12 +45,12 @@ CFLAGS_DEBUG = -g
|
||||
else
|
||||
CFLAGS_DEBUG = -DNDEBUG
|
||||
ifneq ($(CC), $(CROSS_COMPILE)clang)
|
||||
-LFLAGS_STRIP = -s
|
||||
+LFLAGS_STRIP =
|
||||
endif
|
||||
endif
|
||||
|
||||
# CFLAGS_BASE_LIST = -S
|
||||
-CFLAGS_BASE = -O2 $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
|
||||
+CFLAGS_BASE = $(CFLAGS_BASE_LIST) $(CFLAGS_WARN_WALL) $(CFLAGS_WARN) \
|
||||
$(CFLAGS_DEBUG) -D_REENTRANT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
|
||||
-fPIC
|
||||
|
||||
@@ -169,7 +169,7 @@ endif
|
||||
|
||||
|
||||
|
||||
-CFLAGS = $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(FLAGS_FLTO) $(CC_SHARED) -o $@
|
||||
+CFLAGS += $(MY_ARCH_2) $(LOCAL_FLAGS) $(CFLAGS_BASE2) $(CFLAGS_BASE) $(FLAGS_FLTO) $(CC_SHARED) -o $@
|
||||
|
||||
|
||||
ifdef IS_MINGW
|
||||
@@ -1361,7 +1361,7 @@ predef_cc:
|
||||
$(CC) $(CFLAGS) -E $(SHOW_PREDEF) ../../../../C/CpuArch.c > predef_cc_log
|
||||
# $(CC) $(CFLAGS) -E -dM - < /dev/null
|
||||
predef_cxx:
|
||||
- $(CXX) $(CFLAGS) -E $(SHOW_PREDEF) ../../../Common/CrcReg.cpp > predef_cxx_log
|
||||
+ $(CXX) $(CXXFLAGS) -E $(SHOW_PREDEF) ../../../Common/CrcReg.cpp > predef_cxx_log
|
||||
|
||||
predef: predef_cc predef_cxx
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
--- a/C/Threads.c
|
||||
+++ b/C/Threads.c
|
||||
@@ -472,7 +472,7 @@ WRes Thread_Create_With_CpuSet(CThread *
|
||||
*/
|
||||
|
||||
// ret2 =
|
||||
- pthread_attr_setaffinity_np(&attr, sizeof(*cpuSet), cpuSet);
|
||||
+ //pthread_attr_setaffinity_np(&attr, sizeof(*cpuSet), cpuSet);
|
||||
// if (ret2) ret = ret2;
|
||||
#endif
|
||||
}
|
||||
@@ -482,14 +482,12 @@ WRes Thread_Create_With_CpuSet(CThread *
|
||||
if (!ret)
|
||||
{
|
||||
p->_created = 1;
|
||||
- /*
|
||||
if (cpuSet)
|
||||
{
|
||||
// ret2 =
|
||||
pthread_setaffinity_np(p->_tid, sizeof(*cpuSet), cpuSet);
|
||||
// if (ret2) ret = ret2;
|
||||
}
|
||||
- */
|
||||
}
|
||||
}
|
||||
// ret2 =
|
||||
--- a/C/Threads.h
|
||||
+++ b/C/Threads.h
|
||||
@@ -29,6 +29,7 @@ Z7_DIAGNOSTIC_IGNORE_END_RESERVED_MACRO_
|
||||
#endif
|
||||
|
||||
#include <pthread.h>
|
||||
+#include <sched.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
## 适用于openwrt 23.05 及以上的分支.
|
||||
## 所有插件都为网上收集的开源插件,感谢作者们的付出.
|
||||
|
||||
## 本仓库所有插件已编译IPK下载
|
||||
### 使用软件源请删除 opkg配置(/etc/opkg.conf) 中的 option check_signature
|
||||
|
||||
|
||||
| CPU架构 | 下载地址 | 适用设备 | 软件源 | 更新频率 |
|
||||
|----------------|-----------------------------------------------------|--------------------------------------|-----------|-----------|
|
||||
| X86_64 | [📥](https://dl.openwrt.ai/latest/packages/x86_64/kiddin9/) | 64位PC软路由 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/x86_64/kiddin9 | 日更 |
|
||||
| i386_pentium4 | [📥](https://dl.openwrt.ai/latest/packages/i386_pentium4/kiddin9/) | 32位PC软路由 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/i386_pentium4/kiddin9 | 日更 |
|
||||
| aarch64_generic | [📥](https://dl.openwrt.ai/latest/packages/aarch64_generic/kiddin9/) | R2S/R4S等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_generic/kiddin9 | 日更 |
|
||||
| aarch64_cortex-a72 | [📥](https://dl.openwrt.ai/latest/packages/aarch64_cortex-a72/kiddin9/) | 树莓派4B等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_cortex-a72/kiddin9 | 日更 |
|
||||
| arm_arm1176jzf-s_vfp | [📥](https://dl.openwrt.ai/latest/packages/arm_arm1176jzf-s_vfp/kiddin9/) | 树莓派1等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_arm1176jzf-s_vfp/kiddin9 | 日更 |
|
||||
| mipsel_24kc | [📥](https://dl.openwrt.ai/latest/packages/mipsel_24kc/kiddin9/) | k2p,ac2100等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/mipsel_24kc/kiddin9 | 日更 |
|
||||
| mips_24kc | [📥](https://dl.openwrt.ai/latest/packages/mips_24kc/kiddin9/) | GL-AR300M,NETGEAR WNDR4300等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/mips_24kc/kiddin9 | 日更 |
|
||||
| aarch64_cortex-a53 | [📥](https://dl.openwrt.ai/latest/packages/aarch64_cortex-a53/kiddin9/) | N1,红米AX6,小米AX6S等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_cortex-a53/kiddin9 | 日更 |
|
||||
| arm_cortex-a9 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a9/kiddin9/) | 斐讯K3,华硕RT-AC68U,RT-AC88U等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a9/kiddin9 | 日更 |
|
||||
| arm_cortex-a7_neon-vfpv4 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a7_neon-vfpv4/kiddin9/) | 华硕RT-ACRH17,RT-AC58U等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a7_neon-vfpv4/kiddin9 | 日更 |
|
||||
| arm_cortex-a9_vfpv3-d16 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a9_vfpv3-d16/kiddin9/) | Linksys WRT1900ACS等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a9_vfpv3-d16/kiddin9 | 日更 |
|
||||
| arm_cortex-a5_vfpv4 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a5_vfpv4/kiddin9/) | 玩客云等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a5_vfpv4/kiddin9 | 日更 |
|
||||
| arm_cortex-a15_neon-vfpv4 | [📥](https://dl.openwrt.ai/latest/packages/arm_cortex-a15_neon-vfpv4/kiddin9/) | NETGEAR R7800等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/arm_cortex-a15_neon-vfpv4/kiddin9 | 日更 |
|
||||
| aarch64_cortex-a76 | [📥](https://dl.openwrt.ai/latest/packages/aarch64_cortex-a76/kiddin9/) | 树莓派5等 | src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_cortex-a76/kiddin9 | 日更 |
|
||||
@@ -0,0 +1,55 @@
|
||||
#
|
||||
# Copyright (C) 2015 OpenWrt-dist
|
||||
# Copyright (C) 2015 Jian Chang <aa65535@live.com>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ShadowVPN
|
||||
PKG_VERSION:=0.2.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/aa65535/openwrt-shadowvpn/releases/download/v$(PKG_VERSION)
|
||||
PKG_HASH:=skip
|
||||
|
||||
PKG_LICENSE:=GPL-3.0
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
PKG_MAINTAINER:=clowwindy <clowwindy42@gmail.com>
|
||||
|
||||
PKG_FIXUP:=autoreconf
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/ShadowVPN
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=A fast, safe VPN based on libsodium
|
||||
URL:=https://github.com/clowwindy/ShadowVPN
|
||||
DEPENDS:=+kmod-tun +ip
|
||||
endef
|
||||
|
||||
define Package/ShadowVPN/conffiles
|
||||
/etc/config/shadowvpn
|
||||
endef
|
||||
|
||||
define Package/ShadowVPN/install
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/shadowvpn.config $(1)/etc/config/shadowvpn
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/shadowvpn.init $(1)/etc/init.d/shadowvpn
|
||||
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
||||
$(INSTALL_DATA) ./files/shadowvpn.hotplug $(1)/etc/hotplug.d/iface/30-shadowvpn
|
||||
$(INSTALL_DIR) $(1)/etc/shadowvpn
|
||||
$(INSTALL_DATA) ./files/client_up.sh $(1)/etc/shadowvpn/client_up.sh
|
||||
$(INSTALL_DATA) ./files/client_down.sh $(1)/etc/shadowvpn/client_down.sh
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/shadowvpn $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ShadowVPN))
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2015 OpenWrt-dist
|
||||
# Copyright (C) 2015 Jian Chang <aa65535@live.com>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
# This script will be executed when client is down.
|
||||
# All key value pairs in ShadowVPN config file will be passed to this script
|
||||
# as environment variables, except password.
|
||||
|
||||
PID=$(cat $pidfile 2>/dev/null)
|
||||
loger() {
|
||||
echo "$(date '+%c') down.$1 ShadowVPN[$PID] $2"
|
||||
}
|
||||
|
||||
# Get uci setting
|
||||
route_mode=$(uci get shadowvpn.@shadowvpn[-1].route_mode_save 2>/dev/null)
|
||||
|
||||
# Turn off NAT over VPN
|
||||
iptables -t nat -D POSTROUTING -o $intf -j MASQUERADE
|
||||
iptables -D FORWARD -i $intf -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||||
iptables -D FORWARD -o $intf -j ACCEPT
|
||||
loger notice "Turn off NAT over $intf"
|
||||
|
||||
# Change routing table
|
||||
ip route del $server
|
||||
if [ "$route_mode" != 2 ]; then
|
||||
ip route del 0.0.0.0/1
|
||||
ip route del 128.0.0.0/1
|
||||
loger notice "Default route changed to original route"
|
||||
fi
|
||||
|
||||
# Remove route rules
|
||||
if [ -f /tmp/shadowvpn_routes ]; then
|
||||
sed -e "s/^/route del /" /tmp/shadowvpn_routes | ip -batch -
|
||||
loger notice "Route rules have been removed"
|
||||
fi
|
||||
|
||||
rm -rf /tmp/shadowvpn_routes
|
||||
|
||||
loger info "Script $0 completed"
|
||||
Executable
+59
@@ -0,0 +1,59 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2015 OpenWrt-dist
|
||||
# Copyright (C) 2015 Jian Chang <aa65535@live.com>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
# This script will be executed when client is up.
|
||||
# All key value pairs in ShadowVPN config file will be passed to this script
|
||||
# as environment variables, except password.
|
||||
|
||||
PID=$(cat $pidfile 2>/dev/null)
|
||||
loger() {
|
||||
echo "$(date '+%c') up.$1 ShadowVPN[$PID] $2"
|
||||
}
|
||||
|
||||
# Configure IP address and MTU of VPN interface
|
||||
ip addr add $net dev $intf
|
||||
ip link set $intf mtu $mtu
|
||||
ip link set $intf up
|
||||
|
||||
# Get original gateway
|
||||
gateway=$(ip route show 0/0 | sed -e 's/.* via \([^ ]*\).*/\1/')
|
||||
loger info "The default gateway: via $gateway"
|
||||
|
||||
# Get uci setting
|
||||
route_mode=$(uci get shadowvpn.@shadowvpn[-1].route_mode 2>/dev/null)
|
||||
route_file=$(uci get shadowvpn.@shadowvpn[-1].route_file 2>/dev/null)
|
||||
|
||||
# Save uci setting
|
||||
uci set shadowvpn.@shadowvpn[-1].route_mode_save=$route_mode
|
||||
uci commit shadowvpn
|
||||
|
||||
# Turn on NAT over VPN
|
||||
iptables -t nat -A POSTROUTING -o $intf -j MASQUERADE
|
||||
iptables -I FORWARD 1 -i $intf -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||||
iptables -I FORWARD 1 -o $intf -j ACCEPT
|
||||
loger notice "Turn on NAT over $intf"
|
||||
|
||||
# Change routing table
|
||||
suf="dev $intf"
|
||||
ip route add $server via $gateway
|
||||
if [ "$route_mode" != 2 ]; then
|
||||
ip route add 0.0.0.0/1 dev $intf
|
||||
ip route add 128.0.0.0/1 dev $intf
|
||||
loger notice "Default route changed to VPN tun"
|
||||
suf="via $gateway"
|
||||
fi
|
||||
|
||||
# Load route rules
|
||||
if [ "$route_mode" != 0 -a -f "$route_file" ]; then
|
||||
grep -E "^([0-9]{1,3}\.){3}[0-9]{1,3}" $route_file >/tmp/shadowvpn_routes
|
||||
sed -e "s/^/route add /" -e "s/$/ $suf/" /tmp/shadowvpn_routes | ip -batch -
|
||||
loger notice "Route rules have been loaded"
|
||||
fi
|
||||
|
||||
loger info "Script $0 completed"
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
|
||||
config shadowvpn
|
||||
option enable '0'
|
||||
option server '127.0.0.1'
|
||||
option port '1123'
|
||||
option password 'my_password'
|
||||
option concurrency '1'
|
||||
option net '10.7.0.2/24'
|
||||
option mtu '1432'
|
||||
option intf 'tun0'
|
||||
option route_mode '1'
|
||||
option route_file '/etc/chinadns_chnroute.txt'
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ "$ACTION" = ifup ] || exit 0
|
||||
|
||||
device=$(ip route show 0/0 | sed -e 's/.* dev \([^ ]*\).*/\1/')
|
||||
|
||||
[ -z "$device" -o "$DEVICE" = "$device" ] || exit 0
|
||||
|
||||
/etc/init.d/shadowvpn restart
|
||||
logger -t ShadowVPN "Restart ShadowVPN due to ifup of $INTERFACE ($DEVICE)"
|
||||
Executable
+71
@@ -0,0 +1,71 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
#
|
||||
# Copyright (C) 2015 OpenWrt-dist
|
||||
# Copyright (C) 2015 Jian Chang <aa65535@live.com>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
START=90
|
||||
STOP=15
|
||||
|
||||
CONFIG=/var/etc/shadowvpn.conf
|
||||
|
||||
start_vpn() {
|
||||
local enable server port password concurrency mtu intf
|
||||
config_get_bool enable $1 enable
|
||||
[ "$enable" = 1 ] || return 0
|
||||
config_get server $1 server
|
||||
config_get port $1 port
|
||||
config_get user_token $1 user_token
|
||||
config_get password $1 password
|
||||
config_get concurrency $1 concurrency
|
||||
config_get net $1 net
|
||||
config_get mtu $1 mtu
|
||||
config_get intf $1 intf
|
||||
: ${server:?}
|
||||
: ${port:?}
|
||||
: ${password:?}
|
||||
: ${user_token:=0000000000000000}
|
||||
mkdir -p $(dirname $CONFIG)
|
||||
cat <<-EOF >$CONFIG
|
||||
server=$server
|
||||
port=$port
|
||||
password=$password
|
||||
mode=client
|
||||
concurrency=1
|
||||
net=${net:-10.7.0.2/24}
|
||||
mtu=${mtu:-1432}
|
||||
intf=${intf:-tun0}
|
||||
up=/etc/shadowvpn/client_up.sh
|
||||
down=/etc/shadowvpn/client_down.sh
|
||||
pidfile=/var/run/shadowvpn.pid
|
||||
logfile=/var/log/shadowvpn.log
|
||||
EOF
|
||||
if [ "$user_token" != "0000000000000000" ]; then
|
||||
echo "user_token=$user_token" >>$CONFIG
|
||||
fi
|
||||
/usr/bin/shadowvpn -c $CONFIG -s start
|
||||
}
|
||||
|
||||
start() {
|
||||
config_load shadowvpn
|
||||
config_foreach start_vpn shadowvpn
|
||||
}
|
||||
|
||||
stop() {
|
||||
/usr/bin/shadowvpn -c $CONFIG -s stop
|
||||
}
|
||||
|
||||
boot() {
|
||||
if [ ! -c "/dev/net/tun" ]; then
|
||||
mkdir -p /dev/net
|
||||
mknod /dev/net/tun c 10 200
|
||||
chmod 0666 /dev/net/tun
|
||||
fi
|
||||
until ip route show 0/0 | grep -q "^default"; do
|
||||
sleep 1
|
||||
done
|
||||
start
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index d8461de..9b3fcbd 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -1,6 +1,3 @@
|
||||
-EXTRA_DIST = \
|
||||
- autogen.sh \
|
||||
- README.md \
|
||||
- COPYING
|
||||
+EXTRA_DIST = autogen.sh
|
||||
|
||||
-SUBDIRS = src samples
|
||||
+SUBDIRS = src
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index dc562d4..f54171c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -79,6 +79,6 @@ AC_ARG_ENABLE([analyze],
|
||||
|
||||
AM_CONDITIONAL(STATIC, test x"$static" = x"true")
|
||||
|
||||
-AC_CONFIG_FILES([Makefile src/Makefile samples/Makefile])
|
||||
+AC_CONFIG_FILES([Makefile src/Makefile])
|
||||
AC_CONFIG_SUBDIRS([libsodium])
|
||||
AC_OUTPUT
|
||||
diff --git a/libsodium/Makefile.am b/libsodium/Makefile.am
|
||||
index ee794b0..5a73134 100644
|
||||
--- a/libsodium/Makefile.am
|
||||
+++ b/libsodium/Makefile.am
|
||||
@@ -1,19 +1,8 @@
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
-EXTRA_DIST = \
|
||||
- autogen.sh \
|
||||
- libsodium.sln \
|
||||
- libsodium.vcxproj \
|
||||
- libsodium.vcxproj.filters \
|
||||
- LICENSE \
|
||||
- README.markdown \
|
||||
- THANKS
|
||||
+EXTRA_DIST = autogen.sh
|
||||
|
||||
-SUBDIRS = \
|
||||
- dist-build \
|
||||
- msvc-scripts \
|
||||
- src \
|
||||
- test
|
||||
+SUBDIRS = src
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = @PACKAGE_NAME@.pc
|
||||
diff --git a/libsodium/configure.ac b/libsodium/configure.ac
|
||||
index 21b8f10..281e3ff 100644
|
||||
--- a/libsodium/configure.ac
|
||||
+++ b/libsodium/configure.ac
|
||||
@@ -442,15 +442,10 @@ AH_VERBATIM([NDEBUG], [/* Always evaluate assert() calls */
|
||||
#endif])
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
- dist-build/Makefile
|
||||
libsodium.pc
|
||||
- libsodium-uninstalled.pc
|
||||
- msvc-scripts/Makefile
|
||||
src/Makefile
|
||||
src/libsodium/Makefile
|
||||
src/libsodium/include/Makefile
|
||||
src/libsodium/include/sodium/version.h
|
||||
- test/default/Makefile
|
||||
- test/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
@@ -0,0 +1,110 @@
|
||||
--- a/libsodium/src/libsodium/Makefile.am
|
||||
+++ b/libsodium/src/libsodium/Makefile.am
|
||||
@@ -31,6 +31,9 @@ libsodium_la_SOURCES = \
|
||||
crypto_core/salsa20/ref/core_salsa20.c \
|
||||
crypto_core/salsa20/core_salsa20_api.c \
|
||||
crypto_core/salsa20/ref/api.h \
|
||||
+ crypto_core/salsa208/ref/core_salsa208.c \
|
||||
+ crypto_core/salsa208/core_salsa208_api.c \
|
||||
+ crypto_core/salsa208/ref/api.h \
|
||||
crypto_generichash/crypto_generichash.c \
|
||||
crypto_generichash/blake2/generichash_blake2_api.c \
|
||||
crypto_generichash/blake2/ref/api.h \
|
||||
@@ -136,6 +139,10 @@ libsodium_la_SOURCES = \
|
||||
crypto_stream/chacha20/ref/api.h \
|
||||
crypto_stream/chacha20/ref/stream_chacha20_ref.c \
|
||||
crypto_stream/salsa20/stream_salsa20_api.c \
|
||||
+ crypto_stream/salsa208/stream_salsa208_api.c \
|
||||
+ crypto_stream/salsa208/ref/api.h \
|
||||
+ crypto_stream/salsa208/ref/stream_salsa208.c \
|
||||
+ crypto_stream/salsa208/ref/xor_salsa208.c \
|
||||
crypto_stream/xsalsa20/stream_xsalsa20_api.c \
|
||||
crypto_stream/xsalsa20/ref/api.h \
|
||||
crypto_stream/xsalsa20/ref/stream_xsalsa20.c \
|
||||
@@ -204,9 +211,6 @@ libsodium_la_SOURCES += \
|
||||
crypto_core/salsa2012/ref/core_salsa2012.c \
|
||||
crypto_core/salsa2012/core_salsa2012_api.c \
|
||||
crypto_core/salsa2012/ref/api.h \
|
||||
- crypto_core/salsa208/ref/core_salsa208.c \
|
||||
- crypto_core/salsa208/core_salsa208_api.c \
|
||||
- crypto_core/salsa208/ref/api.h \
|
||||
crypto_sign/edwards25519sha512batch/sign_edwards25519sha512batch_api.c \
|
||||
crypto_sign/edwards25519sha512batch/ref/api.h \
|
||||
crypto_sign/edwards25519sha512batch/ref/fe25519.h \
|
||||
@@ -232,11 +236,7 @@ libsodium_la_SOURCES += \
|
||||
crypto_stream/salsa2012/stream_salsa2012_api.c \
|
||||
crypto_stream/salsa2012/ref/api.h \
|
||||
crypto_stream/salsa2012/ref/stream_salsa2012.c \
|
||||
- crypto_stream/salsa2012/ref/xor_salsa2012.c \
|
||||
- crypto_stream/salsa208/stream_salsa208_api.c \
|
||||
- crypto_stream/salsa208/ref/api.h \
|
||||
- crypto_stream/salsa208/ref/stream_salsa208.c \
|
||||
- crypto_stream/salsa208/ref/xor_salsa208.c
|
||||
+ crypto_stream/salsa2012/ref/xor_salsa2012.c
|
||||
endif
|
||||
|
||||
libsodium_la_LDFLAGS = \
|
||||
--- a/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2.h
|
||||
+++ b/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2.h
|
||||
@@ -98,7 +98,7 @@ extern "C" {
|
||||
uint8_t personal[BLAKE2B_PERSONALBYTES]; // 64
|
||||
} blake2b_param;
|
||||
|
||||
-#ifndef DEFINE_BLAKE2B_STATE
|
||||
+#if 1
|
||||
typedef crypto_generichash_blake2b_state blake2b_state;
|
||||
#else
|
||||
ALIGN( 64 ) typedef struct blake2b_state_
|
||||
@@ -110,7 +110,6 @@ typedef crypto_generichash_blake2b_state blake2b_state;
|
||||
size_t buflen;
|
||||
uint8_t last_node;
|
||||
} blake2b_state;
|
||||
-#endif
|
||||
|
||||
typedef struct blake2sp_state_
|
||||
{
|
||||
@@ -127,6 +126,8 @@ typedef crypto_generichash_blake2b_state blake2b_state;
|
||||
uint8_t buf[4 * BLAKE2B_BLOCKBYTES];
|
||||
size_t buflen;
|
||||
} blake2bp_state;
|
||||
+#endif
|
||||
+
|
||||
#pragma pack(pop)
|
||||
|
||||
// Streaming API
|
||||
@@ -146,6 +147,7 @@ typedef crypto_generichash_blake2b_state blake2b_state;
|
||||
int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen );
|
||||
int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen );
|
||||
|
||||
+#if 0
|
||||
int blake2sp_init( blake2sp_state *S, const uint8_t outlen );
|
||||
int blake2sp_init_key( blake2sp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );
|
||||
int blake2sp_update( blake2sp_state *S, const uint8_t *in, uint64_t inlen );
|
||||
@@ -155,6 +157,7 @@ typedef crypto_generichash_blake2b_state blake2b_state;
|
||||
int blake2bp_init_key( blake2bp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );
|
||||
int blake2bp_update( blake2bp_state *S, const uint8_t *in, uint64_t inlen );
|
||||
int blake2bp_final( blake2bp_state *S, uint8_t *out, uint8_t outlen );
|
||||
+#endif
|
||||
|
||||
// Simple API
|
||||
int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );
|
||||
--- a/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-ref.c
|
||||
+++ b/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-ref.c
|
||||
@@ -415,7 +415,7 @@ int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen )
|
||||
/* inlen, at least, should be uint64_t. Others can be size_t. */
|
||||
int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )
|
||||
{
|
||||
- blake2b_state S[1];
|
||||
+ blake2b_state *S;
|
||||
|
||||
/* Verify parameters */
|
||||
if ( NULL == in ) return -1;
|
||||
@@ -441,7 +441,7 @@ int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen
|
||||
int blake2b_salt_personal( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen,
|
||||
const void *salt, const void *personal )
|
||||
{
|
||||
- blake2b_state S[1];
|
||||
+ blake2b_state *S;
|
||||
|
||||
/* Verify parameters */
|
||||
if ( NULL == in ) return -1;
|
||||
@@ -0,0 +1,83 @@
|
||||
# SPDX-Identifier-License: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2021 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=UnblockNeteaseMusic-Go
|
||||
PKG_VERSION:=0.2.13
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/cnsilvan/UnblockNeteaseMusic/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=skip
|
||||
|
||||
PKG_LICENSE:=GPL-3.0
|
||||
PKG_LICENSE_FILE:=LICENSE
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
CONFIG_UNBLOCKNETEASEMUSIC_GO_COMPRESS_GOPROXY \
|
||||
CONFIG_UNBLOCKNETEASEMUSIC_GO_COMPRESS_UPX
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(firstword $(subst -, ,$(PKG_NAME)))-$(PKG_VERSION)
|
||||
PKG_BUILD_DEPENDS:=golang/host upx/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
GO_PKG:=github.com/cnsilvan/UnblockNeteaseMusic
|
||||
GO_PKG_BUILD_PKG:=$$(GO_PKG)
|
||||
GO_PKG_LDFLAGS:=-s -w
|
||||
COMPILE_TIME:= $(shell TZ=UTC-8 date '+%Y-%m-%d %H:%M:%S')
|
||||
GO_PKG_LDFLAGS+= \
|
||||
-X '$(GO_PKG)/version.Version=$(PKG_VERSION)' \
|
||||
-X '$(GO_PKG)/version.BuildTime=$(COMPILE_TIME)' \
|
||||
-X '$(GO_PKG)/version.ExGoVersionInfo=$(GO_ARM) $(GO_MIPS)$(GO_MIPS64)'
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||
|
||||
define Package/UnblockNeteaseMusic-Go/config
|
||||
config UNBLOCKNETEASEMUSIC_GO_COMPRESS_GOPROXY
|
||||
bool "Compiling with GOPROXY proxy"
|
||||
default n
|
||||
|
||||
config UNBLOCKNETEASEMUSIC_GO_COMPRESS_UPX
|
||||
bool "Compress executable files with UPX"
|
||||
depends on !mips64
|
||||
default n
|
||||
endef
|
||||
|
||||
ifeq ($(CONFIG_UNBLOCKNETEASEMUSIC_GO_COMPRESS_GOPROXY),y)
|
||||
export GO111MODULE=on
|
||||
export GOPROXY=https://goproxy.io
|
||||
endif
|
||||
|
||||
define Package/UnblockNeteaseMusic-Go
|
||||
SECTION:=multimedia
|
||||
CATEGORY:=Multimedia
|
||||
TITLE:=Revive Netease Cloud Music (Golang)
|
||||
URL:=https://github.com/cnsilvan/UnblockNeteaseMusic
|
||||
DEPENDS:=$(GO_ARCH_DEPENDS)
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(call GoPackage/Build/Compile)
|
||||
ifeq ($(CONFIG_UNBLOCKNETEASEMUSIC_GO_COMPRESS_UPX),y)
|
||||
$(STAGING_DIR_HOST)/bin/upx --lzma --best $(GO_PKG_BUILD_BIN_DIR)/UnblockNeteaseMusic
|
||||
endif
|
||||
endef
|
||||
|
||||
define Package/UnblockNeteaseMusic-Go/install
|
||||
$(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR))
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/UnblockNeteaseMusic $(1)/usr/bin/UnblockNeteaseMusic
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/share/UnblockNeteaseMusicGo
|
||||
$(CP) ./files/* $(1)/usr/share/UnblockNeteaseMusicGo/
|
||||
|
||||
endef
|
||||
|
||||
$(eval $(call GoBinPackage,UnblockNeteaseMusic-Go))
|
||||
$(eval $(call BuildPackage,UnblockNeteaseMusic-Go))
|
||||
@@ -0,0 +1,14 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICIjCCAaigAwIBAgIUTc9HQDej5hLCQ74u436a5yE4MDcwCgYIKoZIzj0EAwMw
|
||||
SDELMAkGA1UEBhMCQ04xJDAiBgNVBAMMG1VuYmxvY2tOZXRlYXNlTXVzaWMgUm9v
|
||||
dCBDQTETMBEGA1UECgwKMTcxNTE3MzMyOTAeFw0yMTA0MzAwNzIzMDJaFw0yNjA0
|
||||
MjkwNzIzMDJaMEgxCzAJBgNVBAYTAkNOMSQwIgYDVQQDDBtVbmJsb2NrTmV0ZWFz
|
||||
ZU11c2ljIFJvb3QgQ0ExEzARBgNVBAoMCjE3MTUxNzMzMjkwdjAQBgcqhkjOPQIB
|
||||
BgUrgQQAIgNiAASIyI7lYgGlq49qWtY1O2/XNDeowYf7W/Z+l7C14bphxAJ9jSDo
|
||||
tLwbFPWy5VPENc0rB0/yeHA2z7LU67POL2gGgp+17y7scLkkBk3Q7wRMETrtP44Z
|
||||
ITBstZ0wzVyyQEKjUzBRMB0GA1UdDgQWBBQ2F7+t8cPHJaWuCD8RHTSdLugKYzAf
|
||||
BgNVHSMEGDAWgBQ2F7+t8cPHJaWuCD8RHTSdLugKYzAPBgNVHRMBAf8EBTADAQH/
|
||||
MAoGCCqGSM49BAMDA2gAMGUCMQDqaRX2e01e0U+f0As/KUKDhmG5ElkK5CjYK9jk
|
||||
kXLNGFXJLGta6CDvjtMLBPc20qkCMBvDs+JnJKVBEJNZVsRBBs+v2YxNU/u2aYJa
|
||||
dMwXuFveSDWOS7mBeRztX/geEggiSw==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,15 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICRDCCAcqgAwIBAgIUeVqRrT2mHG5Mc8JD+ErphiAmlgkwCgYIKoZIzj0EAwMw
|
||||
SDELMAkGA1UEBhMCQ04xJDAiBgNVBAMMG1VuYmxvY2tOZXRlYXNlTXVzaWMgUm9v
|
||||
dCBDQTETMBEGA1UECgwKMTcxNTE3MzMyOTAeFw0yMTA0MzAwNzIzMDJaFw0yMjA0
|
||||
MzAwNzIzMDJaMHsxCzAJBgNVBAYTAkNOMREwDwYDVQQHDAhIYW5nemhvdTEsMCoG
|
||||
A1UECgwjTmV0RWFzZSAoSGFuZ3pob3UpIE5ldHdvcmsgQ28uLCBMdGQxETAPBgNV
|
||||
BAsMCElUIERlcHQuMRgwFgYDVQQDDA8qLm11c2ljLjE2My5jb20wdjAQBgcqhkjO
|
||||
PQIBBgUrgQQAIgNiAAQTPyU9RQ1pAFMLmozi+c4pEC1rrxAlPGwO9Em+qV+a5qLW
|
||||
gQjjsJeabMqJ/UQ7hDtdKVxWuXiAjMiDcXwL63I71MZKPTAEKXdCmNQwb4kXvRUn
|
||||
oOR4r7BMxEpGlf0CULWjQjBAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMCkGA1UdEQQi
|
||||
MCCCDW11c2ljLjE2My5jb22CDyoubXVzaWMuMTYzLmNvbTAKBggqhkjOPQQDAwNo
|
||||
ADBlAjEAs5bdgnNP/DiK919RiWscC0kyuY0ugG1C8m8F2Yod4MI3oTyrkVcag21o
|
||||
NSzm802uAjBoPuKEbjjFP4ics0BQdICiVd6WCVAsE69FnlmqRteAJqxvdKGpVLi+
|
||||
Qi3arfomrrc=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,9 @@
|
||||
-----BEGIN EC PARAMETERS-----
|
||||
BgUrgQQAIg==
|
||||
-----END EC PARAMETERS-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MIGkAgEBBDBfW3twxGaQmMzP9p0/UU5EvHFVCbBw4piVFJ+pm/uFY6CKZkC5LGMa
|
||||
Uc9vn/KiewGgBwYFK4EEACKhZANiAAQTPyU9RQ1pAFMLmozi+c4pEC1rrxAlPGwO
|
||||
9Em+qV+a5qLWgQjjsJeabMqJ/UQ7hDtdKVxWuXiAjMiDcXwL63I71MZKPTAEKXdC
|
||||
mNQwb4kXvRUnoOR4r7BMxEpGlf0CULU=
|
||||
-----END EC PRIVATE KEY-----
|
||||
@@ -0,0 +1,144 @@
|
||||
From f4f5d11b578a1ab2c3d089bbe5453052b43892bb Mon Sep 17 00:00:00 2001
|
||||
From: tofuliang <tofuliang@gmail.com>
|
||||
Date: Mon, 24 Jan 2022 18:53:11 +0800
|
||||
Subject: [PATCH] fix block ad,add web traffic logs
|
||||
|
||||
---
|
||||
app.go | 1 +
|
||||
config/config.go | 1 +
|
||||
processor/processor.go | 55 +++++++++++++++++++++++++++++++++---------
|
||||
3 files changed, 45 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/app.go b/app.go
|
||||
index 73a6070..1018d75 100644
|
||||
--- a/app.go
|
||||
+++ b/app.go
|
||||
@@ -45,6 +45,7 @@ func main() {
|
||||
log.Println("EnableLocalVip=", *config.EnableLocalVip)
|
||||
log.Println("UnlockSoundEffects=", *config.UnlockSoundEffects)
|
||||
log.Println("QQCookieFile=", *config.QQCookieFile)
|
||||
+ log.Println("LogWebTraffic=", *config.LogWebTraffic)
|
||||
if host.InitHosts() == nil {
|
||||
//go func() {
|
||||
// // // terminal: $ go tool pprof -http=:8081 http://localhost:6060/debug/pprof/heap
|
||||
diff --git a/config/config.go b/config/config.go
|
||||
index 6c07873..a653cdf 100644
|
||||
--- a/config/config.go
|
||||
+++ b/config/config.go
|
||||
@@ -31,6 +31,7 @@ var (
|
||||
EnableLocalVip = flag.Bool("lv", false, "enable local vip")
|
||||
UnlockSoundEffects = flag.Bool("sef", false, "unlock SoundEffects")
|
||||
QQCookieFile = flag.String("qc", "./qq.cookie", "specify cookies file ,such as : \"qq.cookie\"")
|
||||
+ LogWebTraffic = flag.Bool("wl", false, "log request url and response")
|
||||
)
|
||||
|
||||
func ValidParams() bool {
|
||||
diff --git a/processor/processor.go b/processor/processor.go
|
||||
index 8d09dbf..d07b9d3 100644
|
||||
--- a/processor/processor.go
|
||||
+++ b/processor/processor.go
|
||||
@@ -6,14 +6,6 @@ import (
|
||||
"crypto/md5"
|
||||
"encoding/hex"
|
||||
"encoding/json"
|
||||
- "github.com/cnsilvan/UnblockNeteaseMusic/cache"
|
||||
- "github.com/cnsilvan/UnblockNeteaseMusic/common"
|
||||
- "github.com/cnsilvan/UnblockNeteaseMusic/config"
|
||||
- "github.com/cnsilvan/UnblockNeteaseMusic/network"
|
||||
- "github.com/cnsilvan/UnblockNeteaseMusic/processor/crypto"
|
||||
- "github.com/cnsilvan/UnblockNeteaseMusic/provider"
|
||||
- "github.com/cnsilvan/UnblockNeteaseMusic/utils"
|
||||
- "golang.org/x/text/width"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
@@ -22,6 +14,15 @@ import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
+
|
||||
+ "github.com/cnsilvan/UnblockNeteaseMusic/cache"
|
||||
+ "github.com/cnsilvan/UnblockNeteaseMusic/common"
|
||||
+ "github.com/cnsilvan/UnblockNeteaseMusic/config"
|
||||
+ "github.com/cnsilvan/UnblockNeteaseMusic/network"
|
||||
+ "github.com/cnsilvan/UnblockNeteaseMusic/processor/crypto"
|
||||
+ "github.com/cnsilvan/UnblockNeteaseMusic/provider"
|
||||
+ "github.com/cnsilvan/UnblockNeteaseMusic/utils"
|
||||
+ "golang.org/x/text/width"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -188,6 +189,9 @@ func RequestAfter(request *http.Request, response *http.Response, netease *Netea
|
||||
if ok {
|
||||
code = codeN.String()
|
||||
}
|
||||
+
|
||||
+ logResponse(netease)
|
||||
+
|
||||
if strings.EqualFold(netease.Path, "/api/osx/version") {
|
||||
modified = disableUpdate(netease)
|
||||
} else if strings.Contains(netease.Path, "/usertool/sound/") {
|
||||
@@ -197,9 +201,24 @@ func RequestAfter(request *http.Request, response *http.Response, netease *Netea
|
||||
for key, resp := range netease.JsonBody {
|
||||
if strings.Contains(key, "/usertool/sound/") {
|
||||
modified = unblockSoundEffects(resp.(map[string]interface{}))
|
||||
- } else if *config.BlockAds && strings.Contains(netease.Path, "api/ad/") {
|
||||
+ } else if *config.BlockAds && strings.Contains(key, "api/ad/") {
|
||||
+ log.Println("block Ad has been triggered(" + key + ").")
|
||||
resp = &common.MapType{}
|
||||
modified = true
|
||||
+ } else if *config.BlockAds && strings.EqualFold(key, "/api/v2/banner/get") {
|
||||
+ newInfo := make(common.SliceType, 0)
|
||||
+ info := netease.JsonBody[key]
|
||||
+ for _, data := range info.(common.MapType)["banners"].(common.SliceType) {
|
||||
+ if banner, ok := data.(common.MapType); ok {
|
||||
+ if banner["adid"] == nil {
|
||||
+ newInfo = append(newInfo, banner)
|
||||
+ } else {
|
||||
+ log.Println("block banner Ad has been triggered.")
|
||||
+ modified = true
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ info.(common.MapType)["banners"] = newInfo
|
||||
}
|
||||
}
|
||||
} else if !netease.Web && (code == "401" || code == "512") && strings.Contains(netease.Path, "manipulate") {
|
||||
@@ -220,7 +239,9 @@ func RequestAfter(request *http.Request, response *http.Response, netease *Netea
|
||||
// log.Println("NeedRepackage")
|
||||
modifiedJson, _ := json.Marshal(netease.JsonBody)
|
||||
// log.Println(netease)
|
||||
- // log.Println(string(modifiedJson))
|
||||
+ if *config.LogWebTraffic {
|
||||
+ log.Println("modified =>\n" + string(modifiedJson))
|
||||
+ }
|
||||
if netease.Encrypted {
|
||||
modifiedJson = crypto.AesEncryptECB(modifiedJson, []byte(aeskey))
|
||||
}
|
||||
@@ -258,14 +279,24 @@ func disableUpdate(netease *Netease) bool {
|
||||
if len(value.(common.SliceType)) > 0 {
|
||||
modified = true
|
||||
jsonBody["updateFiles"] = make(common.SliceType, 0)
|
||||
+ log.Println("disable update has been triggered.")
|
||||
}
|
||||
default:
|
||||
}
|
||||
}
|
||||
- // modifiedJson, _ := json.Marshal(jsonBody)
|
||||
- // log.Println(string(modifiedJson))
|
||||
return modified
|
||||
}
|
||||
+
|
||||
+func logResponse(netease *Netease) {
|
||||
+ if *config.LogWebTraffic {
|
||||
+ reqUrl := netease.Path
|
||||
+ jsonBody := netease.JsonBody
|
||||
+ modifiedJson, _ := json.Marshal(jsonBody)
|
||||
+ sep := "===================================\n"
|
||||
+ log.Println(sep + reqUrl + " => \n" + string(modifiedJson) + "\n")
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
func localVIP(netease *Netease) bool {
|
||||
if !*config.EnableLocalVip {
|
||||
return false
|
||||
Loaded 100 of 14253 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user