#!/bin/bash

set -e

if test $# != 2; then
    die "Error: Usage: $(basename $0) AP PASSWORD"
fi

(
    load-wireless-driver wifi enable
) || true

iface=`getprop wifi.interface`

cat > /data/misc/wifi/wpa_supplicant.conf <<EOF
ctrl_interface=$iface
update_config=1

network={
	ssid="$1"
	psk="$2"
	key_mgmt=WPA-PSK
	priority=1
}
EOF

stop wpa_supplicant

chown 1000.1010 /data/misc/wifi/wpa_supplicant.conf #see android_filesystem_config.h
chmod 666 /data/misc/wifi/wpa_supplicant.conf

start wpa_supplicant
netcfg $iface down
busybox ifconfig $iface 0.0.0.0

killall dhcpcd >/dev/null 2>&1 || true
setprop dhcp.$(getprop wifi.interface).ipaddress 0.0.0.0
(
    set +e
    for x in $(seq 1 10); do
	ssid=$(wpa_cli stat| grep "^ssid=" | sed -e 's/^ssid=//')
	if test "$ssid" = "$1"; then
	    log -t tcmd ssid ok;
	    break
	else
	    log -t tcmd ssid fail;
	    sleep 1
	fi
    done
    wpa_cli resume
    logwrapper rm /data/misc/dhcp/dhcpcd-$(getprop wifi.interface).lease # in case dhcpcd will try to rebind and got NAKed.
    logwrapper /system/bin/dhcpcd -ABKL -t 30 $(getprop wifi.interface)
) >/dev/null 2>&1 &


for x in $(seq 0 30); do
    ip=$(getprop dhcp.$(getprop wifi.interface).ipaddress);
    if test "$ip" = '0.0.0.0'; then
	log Can not get IP after $x seconds
	sleep 1
	continue
    fi
    echo "Connected to AP with IP address: $ip (after $x seconds)"
    exit 0
done

die "Can not get IP after $x seconds";
