#!/usr/bin/php-cgi
<?php
header('Access-Control-Allow-Origin: *');
/***************************************************************************************************************
SATCOM AUTO DNS
===============
WRITTEN BY JOEY REYES IN MY HOME OFFICE

HISTORY: 

9/7/2016  - COMPLETED, THE SADDEST PERIOD OF MY LIFE!!! KICK THAT DRIVER'S ASS!!
2/27/2017 - UPDATED API WITH DNS2 SUPPORT AND USING UCI INTERFACE
9/26/2017 - REDPORT VERSION
2/08/2018 - CHANGED FROM READING AND WRITTING TO /etc/init.d/chilli TO /etc/chilli/config
			WRITING OF DNS1 to /etc/smsg/dns TO BE READ BY DNS FILTER AND LUIS SCRIPT
2/12/2018 - CHANGED THE WRITING AND READING TO /etc/smsg/dns.  THE /etc/chilli/config CANNOT BE WRITTEN
2/28/2018 - FIX ON WHICH_DNS CONDITION
1/27/2020 - RENAMED FROM AUTODNS.REDPORT TO AUTODNS


INSTRUCTION:

1. TO GET OLD DNS VALUE FROM CONFIGURATION FILE

	FOR DNS 1
	http://192.168.32.1/cgi-bin/autodns?GET_DNS1
	
	FOR DNS 2
	http://192.168.32.1/cgi-bin/autodns?GET_DNS2
		
	
	
2. TO AUTOMATICALLY	SAVE THE SATCOM GATEWAY/DNS ADDRESS TO THE CONFIGURATION FILE

	ONLY DNS 1 CAN BE SET TO AUTO
	
	http://192.168.32.1/cgi-bin/autodns?SET_DNS1=AUTO

	RETURN VALUES
	
		WILL RETURN THE IP ADDRESS OF THE SATCOM DNS IF SUCCESSFUL
		
		-1 		NO SATCOM ADDRESS FOUND
		-10     CONFIG SAVING FAILED
		

3. TO SET DIFFERENT IP ADDRESS IN CASE NO SATCOM ADDRESS OR CUSTOM ADDRESS IS DESIRED

	SET DNS1
	http://192.168.32.1/cgi-bin/autodns?SET_DNS1=192.168.254.1
	
	SET DNS2
	http://192.168.32.1/cgi-bin/autodns?SET_DNS2=192.168.254.2
	
	
	RETURN VALUES
	
	
		WILL RETURN THE IP ADDRESS OF THE SATCOM DNS IF SUCCESSFUL
		
		-10     CONFIG SAVING FAILED
			

******************************************************************************************************************/
define("CFGFILE", "/etc/smsg/dns");
define("DNSFILE", "/etc/smsg/dns");

	echo "<pre>";
	
	
	if (isset($_REQUEST["GET_DNS1"]) == true)
	{
		$dns = get_old_dns_value("DNS1");
		echo $dns;
		exit;
	}
	
	if (isset($_REQUEST["GET_DNS2"]) == true)
	{
		echo get_old_dns_value("DNS2");
		exit;
	}
	
	if (isset($_REQUEST['SET_DNS1']) == true)
	{
		$newdns = $_REQUEST['SET_DNS1'];
		if (strlen($newdns) > 0){ 
			$dns = replace_dns_value($newdns, "DNS1");
			echo $dns;
		}	
		
		exit;	
	}
	
	if (isset($_REQUEST['SET_DNS2']) == true)
	{
		$newdns = $_REQUEST['SET_DNS2'];
		if (strlen($newdns) > 0) 
			echo replace_dns_value($newdns, "DNS2");
		
		exit;	
	}
	
	



function replace_dns_value($newdns, $which_dns)
{
$dns1 = "";

	if ($newdns == "AUTO"){
	 	 //get gateway which is the satcom dns
		$satdns = get_gateway();
       	if ($satdns == NULL) return "-1"; //no satcom dns found
       	$newdns = $satdns;
		$which_dns == "DNS1";
	}
	
	$key = $which_dns;
	
	$fstr = file_get_contents(CFGFILE);
	
	$v = explode("\n", $fstr);
	$newcfg = "";


	for ($i = 0; $i < count($v); $i++)
	{
		if (($pos = strpos($v[$i], $key)) !== false)
			$newcfg .= "$key=$newdns\n";
		else
			$newcfg .= $v[$i] . "\n";
	}
	
	//echo ">>$newcfg";
	$newcfg = trim($newcfg);
	$r = file_put_contents(CFGFILE, $newcfg);
	
	return ($r === FALSE) ? "-10" : $newdns;
	
}




function get_old_dns_value($dns)
{

	$fstr = file_get_contents(CFGFILE);
	$v = explode("\n", $fstr);
	
	$key = $dns;
	
	$dns = "";
	//print_r($v);
	for ($i = 0; $i < count($v); $i++)
	{
		if (($pos = strpos($v[$i], $key)) !== false)
		{
			//echo "orig:" . $v[$i] . "\n";
			$tok = explode("=", $v[$i]);
			//print_r($tok);
			
			for ($ii = 0; $ii < count($tok); $ii++)
			{
				if (strcmp($tok[$ii], $key) == 0){
				 	$dns = $tok[$ii+1];
					
					break; 
				}	
			}
			
		}
	}
	
	return trim($dns, '"');
}



function get_gateway()
{
	
        exec("netstat -nr", $tokens);
        //print_r($tokens);

        for ($i = 0; $i < count($tokens); $i++)
        {
                if (strpos($tokens[$i], "UG") !== false)
                {
                        $v = explode(" ", $tokens[$i]);
                        return $v[9];
                        //print_r($v);
                }
        }
	return NULL;
}

?>

 
 
 
