Files
BFR/box/scripts/ctr.inotify

234 lines
7.7 KiB
Bash
Executable File

#!/system/bin/sh
# Validate settings.ini
if ! /system/bin/sh -n /data/adb/box/settings.ini 2>"/data/adb/box/run/settings_err.log"; then
echo "Err: settings.ini contains a syntax error" | tee -a "/data/adb/box/run/settings_err.log"
exit 1
fi
export PATH="/data/adb/magisk:/data/adb/ksu/bin:/data/adb/ap/bin:$PATH:/data/data/com.termux/files/usr/bin"
module_dir="/data/adb/modules/box_for_root"
base_dir="/data/adb/box"
variab_dir="${base_dir}/run/variab"
log_file="${base_dir}/run/netswitch.log"
log_file_path="/data/local/tmp/"
temp_log_file="${log_file_path}debug.log.tmp"
last_check_file="${variab_dir}/last_check_time"
last_wifi_state_file="${variab_dir}/last_wifi_state"
if [ ! -d "$variab_dir" ]; then
mkdir -p "$variab_dir"
fi
scripts=$(realpath "$0")
scripts_dir=$(dirname "${scripts}")
events=$1
if [ "$events" != "w" ]; then
return
fi
source "${base_dir}/settings.ini"
if [ "$enable_network_service_control" != "true" ]; then
exit 0
fi
source "${scripts_dir}/ctr.utils"
log_msg() {
if [ "$inotify_log_enabled" = "true" ]; then
if [ -z "$1" ]; then
echo "" >> "$log_file"
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$log_file"
fi
fi
}
clean_old_logs() {
# Only keep logs from the past 24 hours
local retention_seconds=86400 # 24 hours
local cutoff_time=$(( $(date +%s) - retention_seconds ))
local cutoff_str
cutoff_str=$(date -d "@${cutoff_time}" '+%Y-%m-%d %H:%M:%S')
if [ -f "$log_file" ]; then
busybox awk -v cutoff="$cutoff_str" '
!/^[0-9]{4}-[0-9]{2}-[0-9]{2}/ {print; next}
substr($0, 1, 19) >= cutoff {print}
' "$log_file" > "$temp_log_file" && mv "$temp_log_file" "$log_file"
fi
}
clean_old_logs
current_time=$(date +%s)
last_check_time=0
if [ -f "$last_check_file" ]; then
last_check_time=$(grep -oE '[0-9]+' "$last_check_file" | head -n 1)
last_check_time=${last_check_time:-0}
fi
time_diff=$(( current_time - last_check_time ))
stability_window=3
if [ "$time_diff" -lt "$stability_window" ]; then
log_msg "Skip check: (${time_diff}s), within stability window"
return 0
fi
echo -n "$current_time" > "$last_check_file"
wifi_status=$(is_wifi_connected)
ssid=$(get_current_ssid)
get_current_ip() {
ip addr show wlan0 | grep 'inet ' | busybox awk '{print $2}' | cut -d/ -f1
}
check_module_service() {
if [ "$enable_network_service_control" = "true" ]; then
if [ -f "$box_pid" ]; then
current_state="enabled"
else
current_state="disabled"
fi
last_ssid=""
last_ip=""
if [ -f "$last_wifi_state_file" ]; then
last_ssid=$(grep 'ssid:' "$last_wifi_state_file" | cut -d: -f2)
last_ip=$(grep 'ip:' "$last_wifi_state_file" | cut -d: -f2)
fi
if [ "$wifi_status" = "wifi" ] && [ -n "$ssid" ]; then
for i in {1..3}; do
current_ip=$(get_current_ip)
if [ -n "$current_ip" ]; then
break
fi
sleep 2
done
if [ -n "$current_ip" ]; then
echo "-- Notifikasi LOG --" > "$log_file"
log_msg "--- Network state change: WiFi connected ---"
log_msg "SSID: ${ssid}, IP: ${current_ip}"
echo "ssid:${ssid}" > "$last_wifi_state_file"
echo "ip:${current_ip}" >> "$last_wifi_state_file"
if [ "$use_module_on_wifi" = "false" ]; then
log_msg "Policy: Disable service when on WiFi"
if [ "$current_state" != "disabled" ]; then
"${scripts_dir}/box.iptables" disable
"${scripts_dir}/box.service" stop
log_msg "Action: Service stopped"
else
log_msg "State: Service already stopped, no action needed"
fi
else
if [ "$use_ssid_matching" = "true" ]; then
case "$use_wifi_list_mode" in
blacklist)
log_msg "Policy: WiFi blacklist mode, list: ${wifi_ssids_list[*]}"
if is_allowed_wifi "$ssid" "${ssid_list}"; then
log_msg "Result: ${ssid} is in blacklist"
if [ "$current_state" != "disabled" ]; then
"${scripts_dir}/box.iptables" disable
"${scripts_dir}/box.service" stop
log_msg "Action: Service stopped"
else
log_msg "State: Service already stopped, no action needed"
fi
else
log_msg "Result: ${ssid} not in blacklist"
if [ "$current_state" != "enabled" ]; then
"${scripts_dir}/box.service" start
"${scripts_dir}/box.iptables" enable
log_msg "Action: Service started"
else
log_msg "State: Service already running, no action needed"
fi
fi
;;
whitelist)
log_msg "Policy: WiFi whitelist mode, list: ${wifi_ssids_list[*]}"
if is_allowed_wifi "$ssid" "${ssid_list}"; then
log_msg "Result: ${ssid} is in whitelist"
if [ "$current_state" != "enabled" ]; then
"${scripts_dir}/box.service" start
"${scripts_dir}/box.iptables" enable
log_msg "Action: Service started"
else
log_msg "State: Service already running, no action needed"
fi
else
log_msg "Result: ${ssid} not in whitelist"
if [ "$current_state" != "disabled" ]; then
"${scripts_dir}/box.iptables" disable
"${scripts_dir}/box.service" stop
log_msg "Action: Service stopped"
else
log_msg "State: Service already stopped, no action needed"
fi
fi
;;
*)
log_msg "Warning: Unknown WiFi list mode, using default start logic"
if [ "$current_state" != "enabled" ]; then
"${scripts_dir}/box.service" start
"${scripts_dir}/box.iptables" enable
log_msg "Action: Service started"
else
log_msg "State: Service already running, no action needed"
fi
;;
esac
else
log_msg "Policy: Default behavior is to start service on WiFi"
if [ "$current_state" != "enabled" ]; then
"${scripts_dir}/box.service" start
"${scripts_dir}/box.iptables" enable
log_msg "Action: Service started"
else
log_msg "State: Service already running, no action needed"
fi
fi
fi
else
log_msg "--- Network state change: WiFi connecting ---"
log_msg "State: No valid IP address yet, skipping action"
fi
elif [ "$wifi_status" = "not_wifi" ]; then
log_msg "--- Network state change: WiFi disconnected ---"
if [ "$use_module_on_wifi_disconnect" = "true" ]; then
log_msg "Policy: Start service when WiFi disconnected"
if [ "$current_state" != "enabled" ]; then
"${scripts_dir}/box.service" start
"${scripts_dir}/box.iptables" enable
log_msg "Action: Service started"
else
log_msg "State: Service already running, no action needed"
fi
else
log_msg "Policy: Disable service when WiFi disconnected"
if [ "$current_state" != "disabled" ]; then
"${scripts_dir}/box.iptables" disable
"${scripts_dir}/box.service" stop
log_msg "Action: Service stopped"
else
log_msg "State: Service already stopped, no action needed"
fi
fi
fi
else
log_msg "Network control module service is disabled!"
return
fi
}
check_module_service