wok 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&amp;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>