summaryrefslogtreecommitdiffstats
path: root/usr/bin/autowifi
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2013-06-10 20:30:41 +0200
committermakefu <github@syntax-fehler.de>2013-06-10 20:30:41 +0200
commit20b1c6c2158fb12b6422c170d4a2a0f402864308 (patch)
treed31541c882bdb63624466877d3edc2db641c55a1 /usr/bin/autowifi
parent910446fb3b32314f9a1efbab5d948d76021a8c7c (diff)
finish refactoring new wpa_supplicant autowifi
Diffstat (limited to 'usr/bin/autowifi')
-rw-r--r--[-rwxr-xr-x]usr/bin/autowifi197
1 files changed, 143 insertions, 54 deletions
diff --git a/usr/bin/autowifi b/usr/bin/autowifi
index 55eaefcd..792c78b8 100755..100644
--- a/usr/bin/autowifi
+++ b/usr/bin/autowifi
@@ -1,65 +1,154 @@
#!/bin/sh -x
-# States (LED):
-# Blinking - running wifi plugins
-# Turned off - connected to wifi
-# Turned on - waiting for next scan round
-
-wifi=wlan0
-iface=@wifi-iface[0]
-radio=$(uci get wireless.${iface}.device)
-
-# for connect_wifi
-. /usr/lib/autowifi/lib/openwrt
-
-# for iwlist_scan
-. /usr/lib/autowifi/lib/iwlist
-
-# for check_internet and check_gateway
-. /usr/lib/autowifi/lib/network
-
-crack_wifi(){
- #SSID MAC CHANNEL ENCRYPTION WPA WPA2
- all_led timer
- if [ "$4" == off ];then
- encr=open
- elif [ "$6" -eq 1 ]; then
- encr=psk2
- elif [ "$5" -eq 1 ]; then
- encr=psk
- elif [ "$4" == on ]; then
- encr=wep
+cd $(dirname $(readlink -f $0))
+
+
+interface=${interface:-wlan0}
+root=${root:-../../}
+crackdir=$root/usr/lib/autowifi/plugins
+wifi_keys=$root/etc/autowifi/wifi_keys
+
+# exists() run_hooks()
+. $root/usr/lib/autowifi/lib/core
+
+
+. $root/usr/lib/autowifi/lib/network
+
+# start_wpa_supplicant()
+. $root/usr/lib/autowifi/lib/wpa_supplicant
+
+
+
+connect(){
+ #mac ssid encryption key
+
+ run_hooks interface pre
+ run_hooks profile pre
+
+ connect_wifi "$@"
+
+ ip_start dhcp
+
+ if check_gateway && check_internet; then
+ echo yay internet >&2
+
+ run_hooks interface post
+ run_hooks profile post
+
+ write_profile "$@"
+ return 0
fi
- for hack in $(find /usr/lib/autowifi/plugins -type f); do
- key=$($hack "$@");
- ret=$?
- if [ $ret -eq 0 ];then
- connect_wifi "$3" "$1" $encr "$key"
- sleep 20
- if check_gateway; then
- (cat /etc/autowifi/wifi_keys | grep -v "$1|$2|" ; echo "$1|$2|$key" ) | sort | uniq > /etc/autowifi/wifi_keys2
- mv /etc/autowifi/wifi_keys2 /etc/autowifi/wifi_keys
- echo "yay gateway"
- check_internet && all_led none && return 0
- fi
+ return 1
+}
+write_profile(){
+ bandw=$(check_bandwidth)
+ (cat $wifi_keys | grep -v "|$1|" ; echo "$2|$1|$bandw|$4" ) | sort | uniq > "${wifi_keys}2"
+ mv "${wifi_keys}2" "$wifi_keys"
+}
+
+
+find_count_of_ssid(){
+ c=0
+ for i in `seq 1 $WIFI_COUNT`; do
+ eval SSID=\${ESSID_${i}}
+ if [ "$SSID" = "$1" ]; then
+ c+=1
+ echo "$i"
fi
done
- return 1
+ if [ $c -eq 0 ];then
+ exit 1
+ fi
+ exit 0
+}
+
+
+connect_to_network_by_ssid(){
+ find_count_of_ssid "$1" | (while read i
+ do
+ loop_over_cracks $i
+ done;exit 1)
+ if [ $? -eq 0 ]; then
+ exit 0
+ fi
+ echo "no network found :("
+ exit 1
}
+
+connect_with_pw(){
+ find_count_of_ssid "$1" | (while read i
+ do
+ KEY="$2"
+ eval connect \"\${MAC_${i}}\" \"\${ESSID_${i}}\" \${ENCRYPTION_${i}} \"\${KEY}\"
+ if [ $? -eq 0 ]; then
+ exit 0
+ fi
+ done;exit 1)
+}
+
loop_over_networks(){
- . /tmp/${wifi}.scan
for i in `seq 1 $WIFI_COUNT`; do
- eval grep -q \${MAC_${i}} /etc/autowifi/blacklist && continue
- eval crack_wifi \"\${ESSID_${i}}\" \"\${MAC_${i}}\" \${CHANNEL_${i}} \${ENCRYPTION_${i}} \${WPA_${i}} \${WPA2_${i}} && break
+ loop_over_cracks $i
+ if [ $? -eq 0 ]; then
+ exit 0
+ fi
done
}
-iwlist_scan > /tmp/${wifi}.scan
-loop_over_networks
+loop_over_cracks(){
+ i=$1
+ KEY=''
+ for crack in $(find $crackdir -type f | sort -u); do
+ KEY="$(eval root=$root \$crack \"\${ESSID_${i}}\" \"\${MAC_${i}}\" \${FREQ_${i}} \${ENCRYPTION_${i}})"
+ if [ $? -eq 0 ]; then
+ eval connect \"\${MAC_${i}}\" \"\${ESSID_${i}}\" \${ENCRYPTION_${i}} \"\${KEY}\"
+ if [ $? -eq 0 ]; then
+ return 0
+ fi
+ fi
+ done
+ return 1
+}
-while sleep 60; do
- if ! check_internet; then
- all_led on
- iwlist_scan > /tmp/${wifi}.scan
- loop_over_networks
- fi
-done
+#scan_all(){
+# for i in `seq 1 $WIFI_COUNT`; do
+# loop_over_cracks $i
+# done
+#}
+#
+#scan_unscanned(){
+# find_unscanned_networks | (while read i
+# do
+# loop_over_cracks $i
+# done)
+#}
+
+#find_unscanned_networks(){
+# #TODO broken
+# for i in `seq 1 $WIFI_COUNT`; do
+# eval SSID=\${ESSID_${i}}
+# eval MAC=\${MAC_${i}}
+# cat $wifi_stats 2>/dev/null | (while IFS='|' read SSID MAC BANDW KEY; do
+# if [ "$1" = "$SSID" -a "$2" = "$MAC" ]; then
+# continue
+# fi
+# done; echo $i)
+# done
+# exit 0
+#}
+
+
+
+
+start_wpa_supplicant /tmp/autowifi.wpa_supplicant
+wifi_scan > /tmp/${interface}.scan
+. /tmp/${interface}.scan
+if [ -n "$2" ]; then
+ echo connecting to $1 with pw $2
+ connect_with_pw "$1" "$2"
+elif [ -n "$1" ]; then
+ echo connecting to $1
+ connect_to_network_by_ssid "$1"
+else
+ echo looping network now
+ loop_over_networks
+fi