attached
#!/bin/sh

IFACE=$1
ACTION=$2
SELF=$$

PENDING_FILE="/tmp/pending_disconnect.$IFACE.lock"

log () {
    echo "$(date '+%F %T')" "$@" >> "/tmp/wpa_action.$IFACE.log"
}
lock () {
    lockfile "/tmp/wpa_action.$IFACE.lock"
}
unlock () {
    rm -f "/tmp/wpa_action.$IFACE.lock"
}

# Note: wpa_cli runs us synchronously, so go into the background to wait

case "$ACTION" in
    CONNECTED)
        lockfile /tmp/wpa_action.lock
        if [ -e $PENDING_FILE ]; then
            log "CONNECTED, cancelling pending disconnect"
            rm $PENDING_FILE
        else
            log "CONNECTED, doing real connect"
            /sbin/wpa_action "$@"
        fi
        rm -f /tmp/wpa_action.lock
    ;;
    DISCONNECTED)
        log "DISCONNECTED, scheduling disconnect ($SELF)"
        echo $SELF > $PENDING_FILE
        (
            sleep 5
            lockfile /tmp/wpa_action.lock
            if [ -e $PENDING_FILE && "$SELF" = "$(cat $PENDING_FILE)" ]; then
                log "resuming $SELF, doing real disconnect"
                rm $PENDING_FILE
                /sbin/wpa_action "$@"
            else
                log "resuming $SELF, cancelled"
            fi
            rm -f /tmp/wpa_action.lock
        )&
    ;;
    *)
        log "whah?? $ACTION"
    ;;
esac

Reply via email to