#!/bin/sh
/usr/bin/shlock /var/lock/cp_cron.sh

# Initialize library
MOD_CP_LIB=/opt/captive_portal/usr/libexec/functions
[ -f "$MOD_CP_LIB" ] || exit 2
. $MOD_CP_LIB

# Prepare environment
get_public_iface_info

# Captive portal is disabled/enabled
[ "$MOD_CP_ENABLED" = "1" ] || exit 0

DEBUG=0
NOW=`date +%s`

# Update volume
volume_update()
{
  DB_FILE=$MOD_CP_IP_DIR/$1
  DB_FILE_RESTRICTED=$MOD_CP_RESTRICTED_DIR/$1
  if [ -f "$DB_FILE" ]; then
    QUERY=`cat $DB_FILE`
    VOL_TOT=`query_value_get "$QUERY" $2`
    VOL_ADD=$3
    query_value_set "$QUERY" $2 $((VOL_TOT+VOL_ADD)) > $DB_FILE
  elif [ -f "$DB_FILE_RESTRICTED" ]; then
    QUERY=`cat $DB_FILE_RESTRICTED`
    VOL_TOT=`query_value_get "$QUERY" $2`
    VOL_ADD=$3
    query_value_set "$QUERY" $2 $((VOL_TOT+VOL_ADD)) > $DB_FILE_RESTRICTED
  fi
}

# Get data counters
if [ "$DEBUG" = "1" ]; then
  MWAN_VOL_TX=`ifconfig $WAN_IF | grep bytes | awk -F '[ :]' '{print $(NF-2)}'`
  MWAN_VOL_RX=`ifconfig $WAN_IF | grep bytes | awk -F '[ :]' '{print $(NF-8)}'`
fi
if [ -n "$PUBLIC_IF1_NAME" ]; then
  if [ "$DEBUG" = "1" ]; then
    # iface counters
    PUBLIC_IF1_VOL_TX=`ifconfig $PUBLIC_IF1_NAME | grep bytes | awk -F '[ :]' '{print $(NF-2)}'`
    PUBLIC_IF1_VOL_RX=`ifconfig $PUBLIC_IF1_NAME | grep bytes | awk -F '[ :]' '{print $(NF-8)}'`
  fi
  # iptables counters
  (iptables -vnxL -Z $MOD_CP_CHAIN_UT_TX1 | awk '/RETURN/ { print $2,$4,$8,$11 }') > $MOD_CP_TMP_DIR/util_tx1.tmp
  (iptables -vnxL -Z $MOD_CP_CHAIN_UT_RX1 | awk '/RETURN/ { print $2,$4,$8,$11 }') > $MOD_CP_TMP_DIR/util_rx1.tmp
fi
if [ -n "$PUBLIC_IF2_NAME" ]; then
  if [ "$DEBUG" = "1" ]; then
    # iface counters
    PUBLIC_IF2_VOL_TX=`ifconfig $PUBLIC_IF2_NAME | grep bytes | awk -F '[ :]' '{print $(NF-2)}'`
    PUBLIC_IF2_VOL_RX=`ifconfig $PUBLIC_IF2_NAME | grep bytes | awk -F '[ :]' '{print $(NF-8)}'`
  fi
   # iptables counters
   (iptables -vnxL -Z $MOD_CP_CHAIN_UT_TX2 | awk '/RETURN/ { print $2,$4,$8,$11 }') > $MOD_CP_TMP_DIR/util_tx2.tmp
   (iptables -vnxL -Z $MOD_CP_CHAIN_UT_RX2 | awk '/RETURN/ { print $2,$4,$8,$11 }') > $MOD_CP_TMP_DIR/util_rx2.tmp
fi
if [ -n "$PUBLIC_IF3_NAME" ]; then
  if [ "$DEBUG" = "1" ]; then
    # iface counters
    PUBLIC_IF3_VOL_TX=`ifconfig $PUBLIC_IF3_NAME | grep bytes | awk -F '[ :]' '{print $(NF-2)}'`
    PUBLIC_IF3_VOL_RX=`ifconfig $PUBLIC_IF3_NAME | grep bytes | awk -F '[ :]' '{print $(NF-8)}'`
  fi
  # iptables counters
  (iptables -vnxL -Z $MOD_CP_CHAIN_UT_TX3 | awk '/RETURN/ { print $2,$4,$8,$11 }') > $MOD_CP_TMP_DIR/util_tx3.tmp
  (iptables -vnxL -Z $MOD_CP_CHAIN_UT_RX3 | awk '/RETURN/ { print $2,$4,$8,$11 }') > $MOD_CP_TMP_DIR/util_rx3.tmp
fi
# get data volume counters for the IP
((iptables -vnxL -Z $MOD_CP_CHAIN_FWU; iptables -vnxL -Z $MOD_CP_CHAIN_FWD) | awk '/ACCEPT/ && $2 > 0 { print $2,$8,$9 }') > $MOD_CP_TMP_DIR/cust.tmp
while read VOL_INC SRC_IP DST_IP; do
  if [ "$SRC_IP" != "0.0.0.0/0" ]; then
    MAC=`ip2mac $SRC_IP`
    if [ "$MAC" != "<incomplete>" ] && [ "$MAC" != "00:00:00:00:00:00" ]; then
      volume_update $SRC_IP "upload" $VOL_INC
    fi
  elif [ "$DST_IP" != "0.0.0.0/0" ]; then
    MAC=`ip2mac $DST_IP`
    if [ "$MAC" != "<incomplete>" ] && [ "$MAC" != "00:00:00:00:00:00" ]; then
      volume_update $DST_IP "download" $VOL_INC
    fi
  fi
done < $MOD_CP_TMP_DIR/cust.tmp
rm -f $MOD_CP_TMP_DIR/cust.tmp

# If data volume exceeded then restrict the IP
if [ "$MOD_CP_QOS_UPDOWN_SPEED_ENABLED" = "1" ]; then
  for IP in `ls $MOD_CP_IP_DIR 2>/dev/null`; do
    QUERY=`cat $MOD_CP_IP_DIR/$IP`
    VOLUME_UL=`query_value_get "$QUERY" upload`
    VOLUME_DL=`query_value_get "$QUERY" download`
    if [ $VOLUME_UL -gt $MOD_CP_QOS_VOLUME_CUST_ULV -o $VOLUME_DL -gt $MOD_CP_QOS_VOLUME_CUST_DLV ]; then
      $MOD_CP_LIB_DIR/cust restrict $IP
    fi
  done
fi

# Clean ban directory
for IP in `ls $MOD_CP_BAN_DIR 2>/dev/null`; do
   QUERY=`cat $MOD_CP_BAN_DIR/$IP`
   BAN_EXPIRE=`query_value_get "$QUERY" since`
   BAN_TIME=$((BAN_EXPIRE-NOW))
   if [ $BAN_TIME -le 0 ]; then
     rm $MOD_CP_BAN_DIR/$IP
     $MOD_CP_LIB_DIR/firewall ban_logout $IP $WEB_PORT_BP
   fi
done

# Clean restricted directories
for IP in `ls $MOD_CP_RESTRICTED_DIR 2>/dev/null`; do
   QUERY=`cat $MOD_CP_RESTRICTED_DIR/$IP`
   RESTRICTED_EXPIRE=`query_value_get "$QUERY" since`
   RESTRICTED_TIME=$((RESTRICTED_EXPIRE-NOW))
   if [ $RESTRICTED_TIME -le 0 ]; then
     $MOD_CP_LIB_DIR/cust unrestrict $IP
   fi
done

# Logout customers whose exceeded volume limit
if [ "$MOD_CP_QOS_VOLUME_ENABLED" = "1" ]; then
  for IP in `ls $MOD_CP_IP_DIR 2>/dev/null`; do
     PUBLIC_IF_IP=`get_public_ip $IP`
     PUBLIC_IF_MAC=`get_public_mac $IP`
     QUERY=`cat $MOD_CP_IP_DIR/$IP`
     VOLUME_DL=`query_value_get "$QUERY" download`
     VOLUME_UL=`query_value_get "$QUERY" upload`
     if [ $VOLUME_DL -gt $MOD_CP_QOS_VOLUME_CUST_DL -o $VOLUME_UL -gt $MOD_CP_QOS_VOLUME_CUST_UL ]; then
       if [ "$MOD_CP_STATS_ENABLED" == "1" ]; then
         QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
         i=`query_value_get "$QUERY" CUST_IDX`
         CUST_DATA="timestamp=$NOW&connected=0&"
         if [ "$MOD_CP_STATS_FORMAT" = "extended" ]; then
           CUST_DATA="ap_mac=$PUBLIC_IF_MAC&ap_ip=$PUBLIC_IF_IP&"$CUST_DATA
         fi
         (echo -n $CUST_DATA;cat $MOD_CP_IP_DIR/$IP | awk '{ printf "%s", $0}') | sed -e "s/=/[$i]=/g" >> /var/captive_portal/stats/cust_list
         i=$((i+1))
         QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
         query_value_set "$QUERY" "CUST_IDX" $i > $MOD_CP_STATS_DIR/cust_idx
       fi
       mv -f $MOD_CP_IP_DIR/$IP $MOD_CP_BAN_DIR/$IP
       $MOD_CP_LIB_DIR/qos delete $IP
       $MOD_CP_LIB_DIR/cust logout $IP
     fi
  done
  for IP in `ls $MOD_CP_RESTRICTED_DIR 2>/dev/null`; do
     PUBLIC_IF_IP=`get_public_ip $IP`
     PUBLIC_IF_MAC=`get_public_mac $IP`
     QUERY=`cat $MOD_CP_RESTRICTED_DIR/$IP`
     VOLUME_DL=`query_value_get "$QUERY" download`
     VOLUME_UL=`query_value_get "$QUERY" upload`
     if [ $VOLUME_DL -gt $MOD_CP_QOS_VOLUME_CUST_DL -o $VOLUME_UL -gt $MOD_CP_QOS_VOLUME_CUST_UL ]; then
       if [ "$MOD_CP_STATS_ENABLED" == "1" ]; then
         QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
         i=`query_value_get "$QUERY" CUST_IDX`
         CUST_DATA="timestamp=$NOW&connected=0&"
         if [ "$MOD_CP_STATS_FORMAT" = "extended" ]; then
           CUST_DATA="ap_mac=$PUBLIC_IF_MAC&ap_ip=$PUBLIC_IF_IP&"$CUST_DATA
         fi
         (echo -n $CUST_DATA;cat $MOD_CP_RESTRICTED_DIR/$IP | awk '{ printf "%s", $0}') | sed -e "s/=/[$i]=/g" >> /var/captive_portal/stats/cust_list
         i=$((i+1))
         QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
         query_value_set "$QUERY" "CUST_IDX" $i > $MOD_CP_STATS_DIR/cust_idx
       fi
       mv -f $MOD_CP_RESTRICTED_DIR/$IP $MOD_CP_BAN_DIR/$IP
       $MOD_CP_LIB_DIR/qos delete $IP restricted
       $MOD_CP_LIB_DIR/cust logout $IP
     fi
  done
fi
# Logout inactive customers
for IP in `ls $MOD_CP_IP_DIR 2>/dev/null`; do
   PUBLIC_IF_IP=`get_public_ip $IP`
   PUBLIC_IF_MAC=`get_public_mac $IP`
   if [ $MOD_CP_DC_TYPE -eq 1 ]; then
     # disconnect on using
     LAST_ACTIVITY=`awk 'BEGIN { FS = "&" } { print substr( $5, 7 ) }' < $MOD_CP_IP_DIR/$IP`
   else
     # disconnect on inactivity
     LAST_ACTIVITY=`date +%s -r $MOD_CP_IP_DIR/$IP`
   fi
   INACTIVITY_TIME=$((NOW-LAST_ACTIVITY))
   if [ $INACTIVITY_TIME -ge $MOD_CP_DC_TIME ]; then
     QUERY=`cat $MOD_CP_IP_DIR/$IP`
     VOLUME_DL=`query_value_get "$QUERY" download`
     VOLUME_UL=`query_value_get "$QUERY" upload`
     if [ "$MOD_CP_STATS_ENABLED" == "1" ]; then
       QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
       i=`query_value_get "$QUERY" CUST_IDX`
       CUST_DATA="timestamp=$NOW&connected=0&"
       if [ "$MOD_CP_STATS_FORMAT" = "extended" ]; then
         CUST_DATA="ap_mac=$PUBLIC_IF_MAC&ap_ip=$PUBLIC_IF_IP&"$CUST_DATA
       fi
       (echo -n $CUST_DATA;cat $MOD_CP_IP_DIR/$IP | awk '{ printf "%s", $0}') | sed -e "s/=/[$i]=/g" >> /var/captive_portal/stats/cust_list
       i=$((i+1))
       QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
       query_value_set "$QUERY" "CUST_IDX" $i > $MOD_CP_STATS_DIR/cust_idx
     fi
     $MOD_CP_LIB_DIR/qos delete $IP
     $MOD_CP_LIB_DIR/cust logout $IP
   fi
done
for IP in `ls $MOD_CP_RESTRICTED_DIR 2>/dev/null`; do
   PUBLIC_IF_IP=`get_public_ip $IP`
   PUBLIC_IF_MAC=`get_public_mac $IP`
   if [ "$MOD_CP_DC_TYPE" = "1" ]; then
     # disconnect on using
     LAST_ACTIVITY=`awk 'BEGIN { FS = "&" } { print substr( $5, 7 ) }' < $MOD_CP_RESTRICTED_DIR/$IP`
   else
     # disconnect on inactivity
     LAST_ACTIVITY=`date +%s -r $MOD_CP_RESTRICTED_DIR/$IP`
   fi
   INACTIVITY_TIME=$((NOW-LAST_ACTIVITY))
   if [ $INACTIVITY_TIME -ge $MOD_CP_DC_TIME ]; then
     QUERY=`cat $MOD_CP_RESTRICTED_DIR/$IP`
     VOLUME_DL=`query_value_get "$QUERY" download`
     VOLUME_UL=`query_value_get "$QUERY" upload`
     if [ "$MOD_CP_STATS_ENABLED" == "1" ]; then
       QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
       i=`query_value_get "$QUERY" CUST_IDX`
       CUST_DATA="timestamp=$NOW&connected=0&"
       if [ "$MOD_CP_STATS_FORMAT" = "extended" ]; then
         CUST_DATA="ap_mac=$PUBLIC_IF_MAC&ap_ip=$PUBLIC_IF_IP&"$CUST_DATA
       fi
       (echo -n $CUST_DATA;cat $MOD_CP_IP_DIR/$IP | awk '{ printf "%s", $0}') | sed -e "s/=/[$i]=/g" >> /var/captive_portal/stats/cust_list
       i=$((i+1))
       QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
       query_value_set "$QUERY" "CUST_IDX" $i > $MOD_CP_STATS_DIR/cust_idx
     fi
     $MOD_CP_LIB_DIR/qos delete $IP restricted
     $MOD_CP_LIB_DIR/cust logout $IP
   fi
done

# statistics
if [ "$MOD_CP_STATS_ENABLED" = "1" ]; then
  # time sync
  T_HOUR=`date +%H`
  T_MIN=`date +%M`
  if [ "$T_HOUR" = "23" ] && [ "$T_MIN" = "00" ]; then
    /etc/init.d/ntp restart
  fi
  # cust_list update
  QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
  i=`query_value_get "$QUERY" CUST_IDX`
  for IP in `ls $MOD_CP_IP_DIR 2>/dev/null`; do
     if [ -f /var/captive_portal/stats/"new$IP" ]; then
       rm /var/captive_portal/stats/"new$IP"
       CUST_DATA="timestamp=$NOW&connected=2&"
     else
       CUST_DATA="timestamp=$NOW&connected=1&"
     fi
     if [ "$MOD_CP_STATS_FORMAT" = "extended" ]; then
       PUBLIC_IF_IP=`get_public_ip $IP`
       PUBLIC_IF_MAC=`get_public_mac $IP`
       CUST_DATA="ap_mac=$PUBLIC_IF_MAC&ap_ip=$PUBLIC_IF_IP&"$CUST_DATA
     fi
     (echo -n $CUST_DATA;cat $MOD_CP_IP_DIR/$IP | awk '{ printf "%s", $0}') | sed -e "s/=/[$i]=/g" >> /var/captive_portal/stats/cust_list
     i=$((i+1))
  done
  QUERY=`cat $MOD_CP_STATS_DIR/cust_idx`
  query_value_set "$QUERY" "CUST_IDX" $i > $MOD_CP_STATS_DIR/cust_idx
  if [ ! -f /var/captive_portal/stats/cust_list ]; then
   touch /var/captive_portal/stats/cust_list
  fi
  # domain list update
  QUERY=`cat $MOD_CP_STATS_DIR/domain_idx`
  i=`query_value_get "$QUERY" DOMAIN_IDX`
  awk '/query/ {print $1,$2,$3,$6,$8}' < /var/tmp/dns.log > /var/tmp/dns.tmp
  YEAR=`date | awk '{print $6}'`
  while read MONTH DAY TIME URL IP; do
    if [ -z "$URL" ]; then
      continue
    fi
    DOMAIN=`echo $URL | awk '/[a-zA-Z0-9]\.[a-zA-Z]/' \
                      | awk -F '[.]' '{
                           if (($(NF-1) == "uk") || ($(NF-1) == "au"))
                              print $(NF-2)"."$(NF-1)"."$(NF);
                           else
                               print $(NF-1)"."$(NF);
                           }'`
    if [ "$DEBUG" = "1" ]; then
      /usr/bin/logger -t "captive portal" -p cron.debug "DNS query: $DOMAIN ($URL) $IP"
    fi
    if [ -z "$DOMAIN" ]; then
      continue
    fi
    DOMAIN_DATA="year[$i]=$YEAR&month[$i]=$MONTH&day[$i]=$DAY&time[$i]=$TIME&domain[$i]=$DOMAIN&ip[$i]=$IP&"
    if [ "$MOD_CP_STATS_FORMAT" = "extended" ]; then
      PUBLIC_IF_IP=`get_public_ip $SRC_IP`
      PUBLIC_IF_MAC=`get_public_mac $SRC_IP`
      DOMAIN_DATA="ap_mac[$i]=$PUBLIC_IF_MAC&ap_ip[$i]=$PUBLIC_IF_IP&"$DOMAIN_DATA
    fi
    echo -n $DOMAIN_DATA >> /var/captive_portal/stats/domain_list
    i=$((i+1))
  done < /var/tmp/dns.tmp
  YEARTURNING=`awk '/Dec/ && /Jan/ {print 1}' < /var/captive_portal/stats/domain_list`
  if [ "$YEARTURNING" = "1" ]; then
    rm -rf /var/captive_portal/stats/domain_list
    touch /var/captive_portal/stats/domain_list
  fi
  QUERY=`cat $MOD_CP_STATS_DIR/domain_idx`
  query_value_set "$QUERY" "DOMAIN_IDX" $i > $MOD_CP_STATS_DIR/domain_idx
  rm -rf /var/tmp/dns.tmp
  /etc/init.d/dns stop
  rm -rf /var/tmp/dns.log
  /etc/init.d/dns start

  if [ ! -f /var/captive_portal/stats/domain_list ]; then
    touch /var/captive_portal/stats/domain_list
  fi
# Collect utilization data
  NOW=`date +%s`
  QUERY=`cat $MOD_CP_STATS_DIR/util_idx`
  i=`query_value_get "$QUERY" UTIL_IDX`
  for IDX in 1 2 3; do
   # tx data counters
    TX_DATA=0
    eval TX_TMP='$'MOD_CP_TMP_DIR/util_tx${IDX}.tmp
    if [ ! -f  $TX_TMP ]; then continue; fi
    while read BYTES PROTO SRC_IP PORT; do
      if [ $BYTES -gt 0 ]; then
        TX_DATA=$((TX_DATA+BYTES))
        eval TMP='$'PUBLIC_IF${IDX}_NETWORK
        UTIL_DATA="timestamp[$i]=$NOW&netpool[$i]=$TMP&"
        if [ "$PORT" = "dpt:80" ] || [ "$PORT" = "dpt:443" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=2&rxbytes[$i]=0&txbytes[$i]=$BYTES&"
        elif [ "$PORT" = "dpt:20" ] || [ "$PORT" = "dpt:21" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=3&rxbytes[$i]=0&txbytes[$i]=$BYTES&"
        elif [ "$PORT" = "dpt:25" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=4&rxbytes[$i]=0&txbytes[$i]=$BYTES&"
        elif [ "$PORT" = "dpt:110" ] || [ "$PORT" = "dpt:143" ] || [ "$PORT" = "dpt:993" ] || [ "$PORT" = "dpt:995" ] || [ "$PORT" = "dpt:220" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=5&rxbytes[$i]=0&txbytes[$i]=$BYTES&"
        elif [ "$PROTO" = "all" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=1&rxbytes[$i]=0&txbytes[$i]=$BYTES&"
        else
          logger -t "captive portal" -p cron.debug "Unknown TX traffic!"
        fi
        if [ "$MOD_CP_STATS_FORMAT" = "extended" ]; then
          eval TMP_MAC='$'PUBLIC_IF${IDX}_MAC
          eval TMP_IP='$'PUBLIC_IF${IDX}_IP
          UTIL_DATA="ap_mac[$i]=$TMP_MAC&ap_ip[$i]=$TMP_IP&"$UTIL_DATA
        fi
        echo -n $UTIL_DATA >> /var/captive_portal/stats/utilization_list
        /usr/bin/logger -t "captive portal" -p cron.debug "util tx data $UTIL_DATA"
        i=$((i+1))
      fi
    done < $TX_TMP
    if [ "$DEBUG" = "1" ]; then
      eval TX_TMP='$'MOD_CP_TMP_DIR/util_vol_tx${IDX}
      if [ ! -f $TX_TMP ]; then
        echo "0" > $TX_TMP
      fi
      VOL_TX=`cat $TX_TMP`
      VOL_TX=$((VOL_TX+TX_DATA))
      echo "$VOL_TX" > $TX_TMP
    fi
   # rx data counters
    RX_DATA=0
    eval RX_TMP='$'MOD_CP_TMP_DIR/util_rx${IDX}.tmp
    if [ ! -f $RX_TMP ]; then continue; fi
    while read BYTES PROTO SRC_IP PORT; do
      if [ $BYTES -gt 0 ]; then
        RX_DATA=$((RX_DATA+BYTES))
        eval TMP='$'PUBLIC_IF${IDX}_NETWORK
        UTIL_DATA="timestamp[$i]=$NOW&netpool[$i]=$TMP&"
        if [ "$PORT" = "spt:80" ] || [ "$PORT" = "spt:443" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=2&rxbytes[$i]=$BYTES&txbytes[$i]=0&"
        elif [ "$PORT" = "spt:20" ] || [ "$PORT" = "spt:21" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=3&rxbytes[$i]=$BYTES&txbytes[$i]=0&"
        elif [ "$PORT" = "spt:25" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=4&rxbytes[$i]=$BYTES&txbytes[$i]=0&"
        elif [ "$PORT" = "spt:110" ] || [ "$PORT" = "spt:143" ] || [ "$PORT" = "spt:993" ] || [ "$PORT" = "spt:995" ] || [ "$PORT" = "spt:220" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=5&rxbytes[$i]=$BYTES&txbytes[$i]=0&"
        elif [ "$PROTO" = "all" ]; then
          UTIL_DATA=$UTIL_DATA"category[$i]=1&rxbytes[$i]=$BYTES&txbytes[$i]=0&"
        else
          logger -t "captive portal" -p cron.debug "Unknown RX traffic!"
        fi
        if [ "$MOD_CP_STATS_FORMAT" = "extended" ]; then
          eval TMP_MAC='$'PUBLIC_IF${IDX}_MAC
          eval TMP_IP='$'PUBLIC_IF${IDX}_IP
          UTIL_DATA="ap_mac[$i]=$TMP_MAC&ap_ip[$i]=$TMP_IP&"$UTIL_DATA
        fi
        echo -n $UTIL_DATA >> /var/captive_portal/stats/utilization_list
        /usr/bin/logger -t "captive portal" -p cron.debug "util rx data $UTIL_DATA"
        i=$((i+1))
      fi
    done < $RX_TMP
    if [ "$DEBUG" = "1" ]; then
      eval RX_TMP='$'MOD_CP_TMP_DIR/util_vol_rx${IDX}
      if [ ! -f $RX_TMP ]; then
        echo "0" > $RX_TMP
      fi
      VOL_RX=`cat $RX_TMP`
      VOL_RX=$((VOL_RX+RX_DATA))
      echo "$VOL_RX" > $RX_TMP
    fi
  done
  QUERY=`cat $MOD_CP_STATS_DIR/util_idx`
  query_value_set "$QUERY" "UTIL_IDX" $i > $MOD_CP_STATS_DIR/util_idx
  rm -f $MOD_CP_TMP_DIR/util_rx.tmp
  rm -f $MOD_CP_TMP_DIR/util_tx.tmp
  if [ ! -f /var/captive_portal/stats/utilization_list ]; then
    touch /var/captive_portal/stats/utilization_list
  fi
  if [ "$DEBUG" = "1" ]; then
    DEV_RX=$(((MWAN_VOL_RX-VOL_RX)*100/MWAN_VOL_RX))
    DEV_TX=$(((MWAN_VOL_TX-VOL_TX)*100/MWAN_VOL_TX))
    /usr/bin/logger -t "captive portal" -p cron.debug "$WAN_IF:   RX: $DEV_RX%   TX: $DEV_TX%"
    /usr/bin/logger -t "captive portal" -p cron.debug "$WAN_IF:   RX bytes:$MWAN_VOL_RX  TX bytes:$MWAN_VOL_TX"
    if [ -n "$PUBLIC_IF1_NAME" ]; then
      VOL_RX1=`cat $MOD_CP_TMP_DIR/util_vol_rx1`
      VOL_TX1=`cat $MOD_CP_TMP_DIR/util_vol_tx1`
      /usr/bin/logger -t "captive portal" -p cron.debug "$PUBLIC_IF1_NAME :  TX bytes:$VOL_TX1  RX bytes:$VOL_RX1 "
    fi
    if [ -n "$PUBLIC_IF2_NAME" ]; then
      VOL_RX2=`cat $MOD_CP_TMP_DIR/util_vol_rx2`
      VOL_TX2=`cat $MOD_CP_TMP_DIR/util_vol_tx2`
      /usr/bin/logger -t "captive portal" -p cron.debug "$PUBLIC_IF2_NAME :  TX bytes:$VOL_TX2  RX bytes:$VOL_RX2 "
    fi
    if [ -n "$PUBLIC_IF3_NAME" ]; then
      VOL_RX3=`cat $MOD_CP_TMP_DIR/util_vol_rx3`
      VOL_TX3=`cat $MOD_CP_TMP_DIR/util_vol_tx3`
      /usr/bin/logger -t "captive portal" -p cron.debug "$PUBLIC_IF3_NAME :  TX bytes:$VOL_TX3  RX bytes:$VOL_RX3 "
    fi
    VOL_RX=$((VOL_RX1+VOL_RX2+VOL_RX3))
    VOL_TX=$((VOL_TX1+VOL_TX2+VOL_TX3))
    /usr/bin/logger -t "captive portal" -p cron.debug "Total public ifaces data:   RX bytes:$VOL_RX  TX bytes:$VOL_TX"
  fi
# https post stats
  QUERY=`cat $MOD_CP_STATS_DIR/last_post`
  LAST_POST=`query_value_get "$QUERY" LAST_POST`
  if [ "$DEBUG" = "1" ]; then
    /usr/bin/logger -t "captive portal" -p cron.debug "last post $((NOW-LAST_POST))s ago. (Period $(($MOD_CP_STATS_PERIOD*60))s)"
  fi
  if [ $((NOW-LAST_POST)) -ge $(($MOD_CP_STATS_PERIOD*60-2)) ]; then
    LAST_POST=$NOW
    QUERY=`cat $MOD_CP_STATS_DIR/last_post`
    query_value_set "$QUERY" "LAST_POST" $LAST_POST > $MOD_CP_STATS_DIR/last_post
    if [ -s /var/captive_portal/stats/cust_list ]; then
      /opt/captive_portal/bin/ssl_post $MOD_CP_SERVER_IP r-webdog/cust-list /var/captive_portal/stats/cust_list
      RETVAL=$?
      if [ $RETVAL -eq 1 ]; then
        # customer data succesfully uploaded to server database
        echo "CUST_IDX=0" > $MOD_CP_STATS_DIR/cust_idx
        rm -rf /var/captive_portal/stats/cust_list
      fi
    fi
    #sleep 2;
    if [ -s /var/captive_portal/stats/domain_list ]; then
      /opt/captive_portal/bin/ssl_post $MOD_CP_SERVER_IP r-webdog/domain-list /var/captive_portal/stats/domain_list
       RETVAL=$?
       if [ $RETVAL -eq 1 ]; then
          # domain data succesfully uploaded to server database
         echo "DOMAIN_IDX=0" > $MOD_CP_STATS_DIR/domain_idx
         rm -rf /var/captive_portal/stats/domain_list
       fi
    fi
    #sleep 2;
    if [ -s /var/captive_portal/stats/utilization_list ]; then
       /opt/captive_portal/bin/ssl_post $MOD_CP_SERVER_IP r-webdog/utilization-list /var/captive_portal/stats/utilization_list
       RETVAL=$?
       if [ $RETVAL -eq 1 ]; then
         # utilization data succesfully uploaded to server database
         echo "UTIL_IDX=0" > $MOD_CP_STATS_DIR/util_idx
         rm -rf /var/captive_portal/stats/utilization_list
       fi
    fi
  fi
fi

