#!/bin/sh

# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Script that turns on useful logging for wpa_supplicant


WPA_LEVEL_LIST="excessive msgdump debug info warning error"

usage() {
  echo "
Usage: wpa_debug [level]|[--reset]|[--help][--list_valid_levels]

  wpa_debug sets the debug level of wpa_supplicant.
  Current debug level is displayed if no parameters are provided

  level: The level is the level we want to set the debugging level to. The valid
         levels can be viewed by using the --list_valid_levels flag

         eg: wpa_debug msgdump
           Sets the wpa_supplicant logging level to msgdump

  --reset : Resets the level to 'info'

  --help : Displays this output

  --list_valid_levels: Displays the valid levels wpa_supplicant can be set to
"
}

CMD_FLAG="<<cmd>>"

WPA_CMD="dbus-send --system --dest=fi.w1.wpa_supplicant1 --print-reply /fi/w1/wpa_supplicant1 org.freedesktop.DBus.Properties.${CMD_FLAG} string:fi.w1.wpa_supplicant1 string:DebugLevel"

# Returns whether or not $2 exists in $1 where $1 is a space
# separated list of tags
is_valid_tag() {
  expr " $1 " : ".* $2 .*"> /dev/null
}

get_wpa_logging() {
  set_cmd="$(echo "${WPA_CMD}" | sed "s/${CMD_FLAG}/Get/")"
  ${set_cmd} | sed -e '/string/!d; s/[[:space:]]\+/ /g' | cut -d "\"" -f 2
}

set_wpa_logging() {
  if ! is_valid_tag "${WPA_LEVEL_LIST}" "$1"; then
    return 1
  fi

  if [ "$1" = "$(get_wpa_logging)" ]; then
    return 1
  fi

  set_cmd="$(echo "${WPA_CMD}" | sed "s/${CMD_FLAG}/Set/") variant:string:$1"
  ${set_cmd}
}


if [ $# -gt 0 ]; then
  for param in "$@"; do
    case $param in
    --reset)
      set_wpa_logging "info"
      ;;
    --list*)
      echo "Valid levels are: $(echo "${WPA_LEVEL_LIST}" | sed 's/ /, /g')"
      exit 0
      ;;
    --help|--*)
      usage
      exit 0
      ;;
    *)
      old_level="$(get_wpa_logging)"
      set_wpa_logging "$param"
      echo "Old wpa level: ${old_level}"
      ;;
    esac
  done
fi

echo "Current wpa level: $(get_wpa_logging)"

