#!/bin/sh

alterator_api_version=1
. alterator-sh-functions
. alterator-net-functions

on_message()
{
  case "$in_action" in
    list)
      set_locale
      case "$in__objects" in
        ifaces)
          list_iface |
          while read ifname; do
            local ifinfo="$(netdev_read_info "$ifname")"
              local ip="$(ip addr show dev "$ifname" |\
                sed -n -e 's/^[[:space:]]*inet[[:space:]]\+\([0-9\.]\+\).*/\1/p')"
              write_enum_item "$ifname" "$ifname${ifinfo:+ ($ifinfo)}${ip:+ $ip}"
            done
        ;;
        services) iptables_helper list | cut -f1,3 | write_enum ;;
        modes)    write_enum_item "router"  "`_ "router"`"
                  write_enum_item "gateway" "`_ "gateway (NAT)"`"
      esac
    ;;
    read)
      unset external_ifaces opened_services opened_tcp_ports opened_udp_ports mode
      eval $(iptables_helper show)
      write_string_param "external_ifaces"  "$external_ifaces"
      write_string_param "opened_services"  "$opened_services"
      write_string_param "opened_tcp_ports" "$opened_tcp_ports"
      write_string_param "opened_udp_ports" "$opened_udp_ports"
      write_string_param "mode"             "$mode"
      write_string_param "commit_mode"      "$commit_mode"
    ;;
    write)
      set_locale
      local ans="$(iptables_helper write \
        -m "${in_mode:-router}"\
        -e "$in_external_ifaces"\
        -s "$in_opened_services"\
        -t "$in_opened_tcp_ports"\
        -u "$in_opened_udp_ports" 2>&1)"
      [ -z "$ans" ] || write_error "${ans#iptables_helper*:}"
    ;;
    firsttime)
      set_locale
      local ans="$(iptables_helper write \
        -e "$in_external_ifaces" 2>&1)"
      [ -z "$ans" ] || write_error "${ans#iptables_helper*:}"
    ;;
  esac
}

message_loop
