wok-current rev 20411
ppp/ppp.cgi: add gsm/bluetooth support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Wed Aug 01 09:50:52 2018 +0200 (2018-08-01) |
parents | be4846d01eb1 |
children | e09f8538625f |
files | ppp/stuff/ppp.cgi |
line diff
1.1 --- a/ppp/stuff/ppp.cgi Tue Jul 31 22:02:23 2018 +0200 1.2 +++ b/ppp/stuff/ppp.cgi Wed Aug 01 09:50:52 2018 +0200 1.3 @@ -10,6 +10,79 @@ 1.4 get_config 1.5 1.6 1.7 +set_secrets() 1.8 +{ 1.9 + grep -qs "^$1 " /etc/ppp/pap-secrets || 1.10 + echo "$1 * $2" >> /etc/ppp/pap-secrets 1.11 + grep -qs "^$1 " /etc/ppp/chap-secrets || 1.12 + echo "$1 * $2" >> /etc/ppp/chap-secrets 1.13 +} 1.14 + 1.15 + 1.16 +create_gsm_conf() 1.17 +{ 1.18 + local provider="${1:-myGSMprovider}" 1.19 + set_secrets "$provider" "$provider" 1.20 + [ -s /etc/ppp/scripts/gsm.chat ] || 1.21 + cat > /etc/ppp/scripts/gsm.chat <<EOT 1.22 +ABORT 'BUSY' 1.23 +ABORT 'NO CARRIER' 1.24 +ABORT 'VOICE' 1.25 +ABORT 'NO DIALTONE' 1.26 +ABORT 'NO DIAL TONE' 1.27 +ABORT 'NO ANSWER' 1.28 +ABORT 'DELAYED' 1.29 +REPORT CONNECT 1.30 +TIMEOUT 6 1.31 +'' 'ATQ0' 1.32 +'OK-AT-OK' 'ATZ' 1.33 +TIMEOUT 3 1.34 +'OK' 'ATI' 1.35 +'OK' 'ATZ' 1.36 +'OK' 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0' 1.37 +'OK' 'AT+CGDCONT=1,"IP","$provider"' 1.38 +'OK' 'ATDT*99#' 1.39 +TIMEOUT 30 1.40 +CONNECT '' 1.41 +EOT 1.42 + [ -s /etc/ppp/options-gsm ] || 1.43 + cat > /etc/ppp/options-gsm << EOT 1.44 +rfcomm0 1.45 +460800 1.46 +lock 1.47 +crtscts 1.48 +modem 1.49 +passive 1.50 +novj 1.51 +defaultroute 1.52 +noipdefault 1.53 +usepeerdns 1.54 +noauth 1.55 +hide-password 1.56 +persist 1.57 +holdoff 10 1.58 +maxfail 0 1.59 +debug 1.60 +EOT 1.61 + [ -s /etc/ppp/peers/gsm ] || 1.62 + cat > /etc/ppp/peers/gsm << EOT 1.63 +file /etc/ppp/options-gsm 1.64 +user "$provider" 1.65 +password "$provider" 1.66 +connect "/usr/sbin/chat -v -t15 -f /etc/ppp/scripts/gsm.chat" 1.67 +EOT 1.68 +} 1.69 + 1.70 + 1.71 +phone_names() 1.72 +{ 1.73 + rfcomm | awk '/connected/{print $2}' | while read mac; do 1.74 + grep -A2 $mac /etc/bluetooth/rfcomm.conf | \ 1.75 + sed '/comment/!d;s/.* "\(.*\) modem";/ \1/' 1.76 + done 1.77 +} 1.78 + 1.79 + 1.80 case "$1" in 1.81 menu) 1.82 TEXTDOMAIN_original=$TEXTDOMAIN 1.83 @@ -25,7 +98,7 @@ 1.84 <li><a data-icon="vpn" href="ppp.cgi#pppssh"$dialout>$(_ 'PPP/SSH')</a></li> 1.85 EOT 1.86 ;; 1.87 - *) 1.88 + *) 1.89 cat <<EOT 1.90 <li><a data-icon="modem" href="ppp.cgi"$dialout>$(_ 'PPP Modem')</a></li> 1.91 EOT 1.92 @@ -40,27 +113,56 @@ 1.93 # 1.94 1.95 case " $(GET) " in 1.96 -*\ setppppstn\ *) 1.97 - if [ "$(GET start_pstn)" -a "$(GET user)" ]; then 1.98 - grep -s "$(GET user)" /etc/ppp/pap-secrets || 1.99 - echo "$(GET user) * $(GET pass)" >> /etc/ppp/pap-secrets 1.100 - grep -s "$(GET user)" /etc/ppp/chap-secrets || 1.101 - echo "$(GET user) * $(GET pass)" >> /etc/ppp/chap-secrets 1.102 +*\ start_pstn\ *) 1.103 + if [ "$(GET user)" ]; then 1.104 + set_secrets "$(GET user)" "$(GET pass)" 1.105 sed -i 's/^name /d' /etc/ppp/options 1.106 echo "name $(GET user)" >> /etc/ppp/options 1.107 /etc/ppp/scripts/ppp-off 1.108 /etc/ppp/scripts/ppp-on & 1.109 - fi 1.110 - if [ "$(GET stop_pstn)" ]; then 1.111 - /etc/ppp/scripts/ppp-off 1.112 - fi 1.113 - ;; 1.114 -*\ setpppoe\ *) 1.115 - if [ "$(GET start_pppoe)" -a "$(GET user)" ]; then 1.116 - grep -s "$(GET user)" /etc/ppp/pap-secrets || 1.117 - echo "$(GET user) * $(GET pass)" >> /etc/ppp/pap-secrets 1.118 - grep -s "$(GET user)" /etc/ppp/chap-secrets || 1.119 - echo "$(GET user) * $(GET pass)" >> /etc/ppp/chap-secrets 1.120 + fi ;; 1.121 +*\ start_gsm\ *) 1.122 + if [ "$(GET gsmprovider)" ]; then 1.123 + [ -n "$(pidof dbus-daemon)" ] || /etc/init.d/dbus start 1.124 + [ -n "$(pidof bluetoothd)" ] || bluetoothd 1.125 + grep -qs btusb /proc/modules || modprobe btusb 1.126 + hcitool scan | grep : | while read dev name; do 1.127 + set -- $dev "$name" $(sdptool browse $dev | awk ' 1.128 +/Service Class ID List/ {n=0} 1.129 +/Dialup Networking/ {n=1} 1.130 +/RFCOMM/ {n++} 1.131 +/Channel/ {if (n==2) { print $2; exit } }') 1.132 + [ -n "$3" ] || continue 1.133 + grep -qs $1 /etc/bluetooth/rfcomm.conf || 1.134 + cat >> /etc/bluetooth/rfcomm.conf <<EOT 1.135 +rfcomm0 { 1.136 + bind yes; 1.137 + device $1; 1.138 + channel $3; 1.139 + comment "$2 modem"; 1.140 +} 1.141 +EOT 1.142 + rfcomm bind all || rfcomm bind 0 $1 $3 1.143 + break 1.144 + done 1.145 + create_gsm_conf "$(GET gsmprovider)" 1.146 + [ -n "$(GET gsmprovider)" ] && 1.147 + sed -i "s|\"IP\",\".*\"|\"IP\",\"$(GET gsmprovider)\"|" \ 1.148 + /etc/ppp/scripts/gsm.chat && 1.149 + sed -i "s|myGSMprovider|$(GET gsmprovider)|g" \ 1.150 + /etc/ppp/chap-secrets /etc/ppp/pap-secrets 1.151 + pppd call gsm 1.152 + host=$(hcitool dev | sed '/hci0/!d;s/.*hci0\t//') 1.153 + pin=$(GET gsmpin) 1.154 + hcitool scan | grep "$1" | while read adrs name ; do 1.155 + echo ${pin:-0000} | bluez-simple-agent $host $adrs 1.156 + done 1.157 + fi ;; 1.158 +*\ stop_pstn\ *|*\ stop_gsm\ *) 1.159 + /etc/ppp/scripts/ppp-off ;; 1.160 +*\ start_pppoe\ *) 1.161 + if [ "$(GET user)" ]; then 1.162 + set_secrets "$(GET user)" "$(GET pass)" 1.163 grep -qs pppoe /etc/ppp/options || cat > /etc/ppp/options <<EOT 1.164 plugin rp-pppoe.so 1.165 noipdefault 1.166 @@ -72,11 +174,9 @@ 1.167 sed -i 's/^name /d' /etc/ppp/options 1.168 echo "name $(GET user)" >> /etc/ppp/options 1.169 ( . /etc/network.conf ; pppd $INTERFACE & ) 1.170 - fi 1.171 - if [ "$(GET stop_pppoe)" ]; then 1.172 - killall pppd 1.173 - fi 1.174 - ;; 1.175 + fi ;; 1.176 +*\ stop_pppoe\ *) 1.177 + killall pppd ;; 1.178 *\ setpppssh\ *) 1.179 cat > /etc/ppp/pppssh <<EOT 1.180 PEER="$(GET peer)" 1.181 @@ -151,14 +251,22 @@ 1.182 <header> 1.183 $(_ 'Configuration') 1.184 </header> 1.185 +EOT 1.186 +[ "$(which sdptool 2>/dev/null)" ] && create_gsm_conf && cat <<EOT 1.187 + <a data-icon="conf" href="index.cgi?file=/etc/bluetooth/rfcomm.conf" target="_blank" rel="noopener">$(_ 'GSM device')</a><p> 1.188 + <a data-icon="conf" href="index.cgi?file=/etc/ppp/peers/gsm" target="_blank" rel="noopener">$(_ 'PPP GSM script')</a><p> 1.189 + <a data-icon="conf" href="index.cgi?file=/etc/ppp/scripts/gsm.chat" target="_blank" rel="noopener">$(_ 'PPP GSM chat')</a><p> 1.190 + <a data-icon="conf" href="index.cgi?file=/etc/ppp/options-gsm" target="_blank" rel="noopener">$(_ 'PPP GSM options')</a><p> 1.191 +EOT 1.192 +cat << EOT 1.193 <a data-icon="conf" href="index.cgi?file=/etc/ppp/scripts/ppp-on" target="_blank" rel="noopener">$(_ 'PPP PSTN script')</a><p> 1.194 - <a data-icon="conf" href="index.cgi?file=/etc/ppp/scripts/ppp-on-dialer" target="_blank" rel="noopener">$(_ 'PPP dialer chat')</a><p> 1.195 - <a data-icon="conf" href="index.cgi?file=/etc/ppp/options" target="_blank" rel="noopener">$(_ 'PPP options')</a><p> 1.196 + <a data-icon="conf" href="index.cgi?file=/etc/ppp/scripts/ppp-on-dialer" target="_blank" rel="noopener">$(_ 'PPP PSTN chat')</a><p> 1.197 + <a data-icon="conf" href="index.cgi?file=/etc/ppp/options" target="_blank" rel="noopener">$(_ 'PPP PSTN options')</a><p> 1.198 <a data-icon="conf" href="index.cgi?file=/etc/ppp/chap-secrets" target="_blank" rel="noopener">$(_ 'chap users')</a><p> 1.199 <a data-icon="conf" href="index.cgi?file=/etc/ppp/pap-secrets" target="_blank" rel="noopener">$(_ 'pap users')</a><p> 1.200 EOT 1.201 for i in /etc/ppp/peers/* ; do 1.202 - [ -s "$i" ] && cat << EOT 1.203 + [ -s "$i" ] && [ "$i" != "/etc/ppp/peers/gsm" ] && cat << EOT 1.204 <a data-icon="conf" href="index.cgi?file=$i" target="_blank" rel="noopener">$(basename $i)</a><p> 1.205 EOT 1.206 done 1.207 @@ -175,12 +283,65 @@ 1.208 else 1.209 stopoe_disabled='disabled' 1.210 fi 1.211 +if [ "$(busybox ps x | grep "pppd" | awk '/gsm/{print $1}')" ]; then 1.212 + startgsm_disabled='disabled' 1.213 +else 1.214 + stopgsm_disabled='disabled' 1.215 +fi 1.216 +head=" <footer> 1.217 + </footer> 1.218 +</section> 1.219 +<section> 1.220 + <header> 1.221 + $(_ 'Install extra') 1.222 + </header>" 1.223 +while read file pkg name ; do 1.224 + [ -z "$(which $file 2>/dev/null)" ] && echo $head && head="" && 1.225 + echo " <a href='pkgs.cgi?do=Install&pkg=$pkg'>$name</a>" 1.226 +done <<EOT 1.227 +sdptool bluez GSM / Bluetooth 1.228 +pppssh dropbear SSH / VPN 1.229 +EOT 1.230 +#pptp pptpclient PPTP client 1.231 +#pptpd poptop PPTP server 1.232 cat << EOT 1.233 <footer> 1.234 </footer> 1.235 </section> 1.236 </div> 1.237 1.238 +EOT 1.239 +if [ "$(which sdptool 2>/dev/null)" ]; then 1.240 + cat <<EOT 1.241 +<a name="pppgsm"></a> 1.242 +<section> 1.243 + <header> 1.244 + <span data-icon="modem">$(_ 'GSM modem') - 1.245 + $(_ 'Manage Bluetooth GSM Internet connections')</span> 1.246 + </header> 1.247 +<form method="get"> 1.248 + <input type="hidden" name="setpppgsm" /> 1.249 + <table> 1.250 + <tr> 1.251 + <td>$(_ 'GSM provider')</td> 1.252 + <td><input type="text" name="gsmprovider" size="40" value="$(sed \ 1.253 + '/AT+CGDCONT/!d;s|.*IP","\(.*\)".|\1|' \ 1.254 + /etc/ppp/scripts/gsm.chat 2> /dev/null)" /></td> 1.255 + </tr> 1.256 + <tr> 1.257 + <td>$(_ 'Bluetooth PIN')</td> 1.258 + <td><input type="text" name="gsmpin" size="40" value="0000" /></td> 1.259 + </tr> 1.260 + </table> 1.261 + <footer><!-- 1.262 + --><button type="submit" name="start_gsm" data-icon="start" $startgsm_disabled>$(_ 'Start' )</button><!-- 1.263 + --><button type="submit" name="stop_gsm" data-icon="stop" $stopgsm_disabled>$(_ 'Stop' )</button><!-- 1.264 + -->$(phone_names)</footer> 1.265 +</form> 1.266 +</section> 1.267 +EOT 1.268 +fi 1.269 +cat << EOT 1.270 <a name="ppppstn"></a> 1.271 <section> 1.272 <header>