The PHP program source codes are shown below, with the blocked line highlighted in bold:
===============================================================
Code: Select all
<?php
//-----------------------------------------User Defined Functions-------------------------------------------------------------------
function SwapNibbleForUnitNo($UnitNum)
{
$Swapped_H_UnitNum = "";
$H_UnitNum = dechex($UnitNum);
while (strlen($H_UnitNum)>1)
{
$NibbleVal = substr($H_UnitNum,-2);
$Swapped_H_UnitNum = $Swapped_H_UnitNum . $NibbleVal;
$H_UnitNum = substr($H_UnitNum,0,-2);
}
if (strlen($H_UnitNum)==1)
$Swapped_H_UnitNum = $Swapped_H_UnitNum."0".$H_UnitNum;
$Swapped_H_UnitNum = str_pad($Swapped_H_UnitNum, 8, "0", STR_PAD_RIGHT);
return $Swapped_H_UnitNum;
}
function getCheckSum($str)
{
$chkSum=0;
while (strlen($str)>0)
{
$OneByteVal = substr($str,0,2);
$chkSum = $chkSum + hexdec($OneByteVal);
$str = substr($str,2);
}
//echo "<br>chkval:".$chkSum % 256;
$ff = dechex($chkSum % 256);
//echo "<br>hexvalchk:".$ff;
return $ff;
}
function convertHex(&$str)
{
$temp = dechex(round($str * (3.14285714285714 * 100000000 / 180)));
if (!((strlen($temp))%2) == 0)
$temp = "0".$temp;
$str = "";
for ($i=strlen($temp);$i>=0;$i=$i-2)
$str = $str.substr($temp,$i, 2);
//echo "<BR>STR :".$str;
}
function convertIdToBytes($id,&$idc1,&$idc2,&$idc3,&$idc4)
{
switch (strlen($id)) {
Case 8:
$idc1 = substr($id, 6, 2);
$idc2 = substr($id, 4, 2);
$idc3 = substr($id, 2, 2);
$idc4 = substr($id, 0, 2);
break;
Case 7:
$idc1 = substr($id, 5, 2);
$idc2 = substr($id, 3, 2);
$idc3 = substr($id, 1, 2);
$idc4 = "0".substr($id, 0, 1);
break;
Case 6:
$idc1 = substr($id, 4, 2);
$idc2 = substr($id, 2, 2);
$idc3 = substr($id, 0, 2);
$idc4 = "00";
break;
Case 5:
$idc1 = substr($id, 3, 2);
$idc2 = substr($id, 1, 2);
$idc3 = "0".substr($id, 0, 1);
$idc4 = "00";
break;
Case 4:
$idc1 = substr($id, 2, 2);
$idc2 = substr($id, 0, 2);
$idc3 = "00";
$idc4 = "00";
break;
Case 3:
$idc1 = substr($id, 1, 2);
$idc2 = "0".substr($id, 0, 1);
$idc3 = "00";
$idc4 = "00";
break;
Case 2:
$idc1 = substr($id, 0, 2);
$idc2 = "00";
$idc3 = "00";
$idc4 = "00";
break;
Case 1:
$idc1 = "0".substr($id, 0, 1);
$idc2 = "00";
$idc3 = "00";
$idc4 = "00";
break;
}
}
function addIntoLogTable($UnitNo,$Command,$logDesc,$username)
{
echo "<br>inside addIntoLogTable function";
$filename = "../database/DataBaseType.txt";
$fp = fopen($filename,"r");
$contents = fread ($fp, filesize ($filename));
fclose($fp);
sscanf($contents,"%s %s %s %s %s",$dbtype,$serverName,$un,$pwd,$cat);
//echo $dbtype;
$con = mssql_connect($serverName,$un,$pwd);
mssql_select_db($cat,$con);
$vano = "";
$logDateTime = date("Y-m-d h:i:s a");
if ($con <> 0)
{
$rs = mssql_query("select VANo from vehicle_unit_history where unit_no = '$UnitNo' and END_DATE is null");
if ($rs)
{
do {
while ($row = mssql_fetch_row($rs)) {
$vano = $row[0];
}
} while (mssql_next_result($rs));
mssql_free_result($rs);
}
if ($vano != "")
{
echo "<br>Inside query";
$rs = mssql_query("insert into LOG_STATUS(USER_ID,LOG_DATETIME,LOG_TYPE,VANO,LOG_DESCRIPTION) values('$username','$logDateTime','$Command','$vano','$logDesc')");
if ($rs)
echo "<BR>inserted into LOG_STATUS";
}
else
$rs = mssql_query("insert into LOG_STATUS(USER_ID,LOG_DATETIME,LOG_TYPE,LOG_DESCRIPTION) values('$username','$logDateTime','$Command','$logDesc')");
mssql_close();
}
}
//--------------------M A I N P R G---------------------------------------------------------------------------------------------------------------
// receive form data
$SIMNo = $_GET["SIMNo"];
$USERNAME = $_GET["UID"];
$UnitNo = $_GET["UnitNo"];
$CmdCode = $_GET["CmdCode"];
$CmdData = $_GET["CmdData"];
$CmdID = $_GET["CmdID"];
$CmdName = $_GET["CmdName"];
$PrgMode = $_GET["Prg"];
$EncodedUnitNo = SwapNibbleForUnitNo($UnitNo);
$generic_prog="00";
$secCmdData="0000";
$Msg = "";
$Msg1 = "";
echo "<BR>SIM NO ".$SIMNo;
echo "<BR>UnitNo ".$UnitNo;
echo "<BR>CmdCode ".$CmdCode;
echo "<BR>CmdData ".$CmdData;
echo "<BR>CmdID ".$CmdID;
echo "<BR>CmdName ".$CmdName;
echo "<BR>PRG MODE ".$PrgMode;
if ($CmdName == "KeyFobCode")
{
$fpd = fopen("DEBUG2.log","a");
fwrite($fpd,"Key Fob Module\n");
fwrite($fpd, $SIMNo);
fwrite($fpd, $UnitNo);
fclose($fpd);
}
if ($PrgMode == "1")
{
$generic_prog="01";
if ($CmdName == "ColdStartLatitude")
{
convertHex($CmdData);
$Msg = "01000F000000000000000000000000".substr($CmdData,0,2).substr($CmdData,2,2).substr($CmdData,4,2).substr($CmdData,6,2);
//echo "<BR>MSF inside".$Msg;
//exit(0);
}
if ($CmdName== "ColdStartLangitude")
{
convertHex($CmdData);
$Msg = "01000F0000000000000000".substr($CmdData,0,2).substr($CmdData,2,2).substr($CmdData,4,2).substr($CmdData,6,2)."00000000";
//echo "<BR>MSF inside".$Msg;
//exit(0);
}
if ($CmdName == "TransmissionInterval")
{
$CmdData = $CmdData/5;
echo "<BR>Comamnd Data after divideed by 5=".$CmdData;
$CmdData=dechex($CmdData);
if (strlen($CmdData)==1)
$CmdData="0".$CmdData;
$Msg = "020002000000000000000000".$CmdData."000000000000";
echo "<br>Inside TransmissionInterval";
echo "<BR>MSG :".$Msg;
//exit();
}
if ($CmdName == "TransmissionDelayTime")
{
$CmdData=dechex($CmdData);
if (strlen($CmdData)==1)
$CmdData="0".$CmdData;
$Msg = "02000400000000000000000000".$CmdData."0000000000";
echo "<br>Inside TransmissionDelayTime";
echo "<BR>MSG :".$Msg;
//exit();
}
//AlwaysArmed
if ($CmdName == "AlwaysArmed")
{
//$CmdData=dechex($CmdData);
if (strlen($CmdData)==1)
$CmdData="0".$CmdData;
$Msg = "02800000000000000000".$CmdData."0000000000000000";
echo "<br>Inside AlwaysArmed";
echo "<BR>MSG :".$Msg;
}
if ($CmdName == "PulsesperDistance") //yet to check
{
$CmdData=dechex($CmdData);
$FirstData = "";
$SecondData = "";
$ThirdData = "";
$FourthData = "";
echo "<br>Hex VAlue of PUlse:".$CmdData;
convertIdToBytes($CmdData,$FirstData,$SecondData,$ThirdData,$FourthData);
echo "First:".$FirstData."Second:".$SecondData;
$Msg = "040300".$FirstData.$SecondData."0000000000000000000000000000";
}
if ($CmdName == "ServiceCenterAddress")
{
$Msg = "0400F80000000000000000000000";
$Msg1 = "050F00";
$actAdd = "";
$actAdd1 = "";
$currentPos = 30;
$currentPos1 = 17;
for($i=0;$i<strlen($CmdData);$i++)
{
if ((ord(substr($CmdData,$i,1)) >= 48) && (ord(substr($CmdData,$i,1)) <= 57))
$actAdd = $actAdd.substr($CmdData,$i,1);
}
for($i=6;$i<strlen($actAdd)-1;$i = $i + 2) //Second PArt.
{
if ((strlen($actAdd)) == $i)
$Msg1 = $Msg1."F".substr($actAdd,$i,1);
else
$Msg1 = $Msg1.substr($actAdd,$i+1,1).substr($actAdd,$i,1);
$currentPos1++;
}
if ($currentPos1-1 < 20)
for ($i=$currentPos1;$i<21;$i++)
$Msg1 = $Msg1."FF";
$Msg1 = $Msg1."000000000000000000000000";
//$Msg = $Msg.((strlen($actAdd))/2 + 1); //store the length of the actual adress length
if(strlen(dechex((strlen($actAdd))/2 + 1))==1)
$Msg = $Msg."0".dechex(((strlen($actAdd))/2 + 1));
else
$Msg = $Msg.dechex(((strlen($actAdd))/2 + 1)); //store the length of the actual adress length
if (substr($CmdData,0,1) == "+")
$Msg = $Msg."91"; //Local Form/International Form
else
$Msg = $Msg."81";
for($i=0;$i<6;$i = $i + 2)
$Msg = $Msg.substr($actAdd,$i+1,1).substr($actAdd,$i,1);
}
if ($CmdName == "DestinationAddress")
{
$Msg = "05F01F00000000";
$actAdd = "";
$currentPos = 23;
for($i=0;$i<strlen($CmdData);$i++)
{
if ((ord(substr($CmdData,$i,1)) >= 48) && (ord(substr($CmdData,$i,1)) <= 57))
$actAdd = $actAdd.substr($CmdData,$i,1);
}
//echo "<br>Actual Addr:".$actAdd;
//echo "<BR>Actual Addr Length ".strlen($actAdd);
if(strlen(dechex(strlen($actAdd)))==1)
$Msg = $Msg."0".dechex(strlen($actAdd));
else
$Msg = $Msg.dechex(strlen($actAdd)); //store the length of the actual adress length
if (substr($CmdData,0,1) == "+")
$Msg = $Msg."91"; //Local Form/International Form
else
$Msg = $Msg."81";
for($i=0;$i<strlen($actAdd);$i=$i+2){
if ((strlen($actAdd)-1) == $i)
$Msg = $Msg."F".substr($actAdd,$i,1);
else
$Msg = $Msg.substr($actAdd,$i+1,1).substr($actAdd,$i,1);
$currentPos++;
}
//if values thats Zeros r missing, please check here
echo "<br>CurrentPos ".$currentPos;
if ($currentPos-1 < 29)
for ($i=$currentPos;$i<30;$i++)
$Msg = $Msg."FF";
$Msg = $Msg."000000";
}
if ($CmdName == "OdometerReading")
{
$CmdData=dechex($CmdData);
$FirstData = "";
$SecondData = "";
$ThirdData = "";
$FourthData = "";
echo "<br>Hex VAlue of Odometer:".$CmdData;
convertIdToBytes($CmdData,$FirstData,$SecondData,$ThirdData,$FourthData);
//echo "<BR>First:".$FirstData." Second:".$SecondData." Third:".$ThirdData;
$Msg = "041C000000".$FirstData.$SecondData.$ThirdData."0000000000000000000000";
}
if ($CmdName == "OdometerTransmissionDistance")
{
$CmdData=decHex($CmdData);
$FirstData = "";
$SecondData = "";
$ThirdData = "";
$FourthData = "";
convertIdToBytes($CmdData,$FirstData,$SecondData,$ThirdData,$FourthData);
$Msg = "0460000000000000".$FirstData.$SecondData."000000000000000000";
}
if ($CmdName == "MainPowerNormalThreshold")
{
$Msg = "05002000000000000000000000000000".$CmdData."0000";
}
if ($CmdName == "MainPowerLowThreshold")
{
$Msg = "0500400000000000000000000000000000".$CmdData."00";
}
if ($CmdName == "KeyFobCode")
{
//4D434753014A070000AABBCCDD08FFFFFAAFFAAF10CA3CA86A49270126CFDB2F80
//AAFFAAF10CA3CA86A49270126CFDB2F80
$keywords = preg_split ("/[\s,]+/", $CmdData);
$Msg = "08FFFF";
// echo count($keywords);
for ($i=0;$i<count($keywords);$i++)
{
if(strlen($keywords[$i])==1)
$Msg.="0".$keywords[$i];
else
$Msg.=$keywords[$i];
}
echo "<br>Inside KeyFobe";
echo "<BR>MSG :".$Msg;
//exit();
}
$chkSumMsg = $generic_prog.$EncodedUnitNo."AABBCCDD".$Msg;
}
else
{
$chkSumMsg = $generic_prog.$EncodedUnitNo."AABBCCDD".$CmdCode.$CmdCode.$CmdData.$CmdData.$secCmdData."000000".$CmdID;
}
echo "<BR>CheckSum :".$chkSumMsg;
if (strlen(getCheckSum($chkSumMsg)) == 1)
$BinMsg = "4D434753".$chkSumMsg."0".getCheckSum($chkSumMsg);
else
$BinMsg = "4D434753".$chkSumMsg.getCheckSum($chkSumMsg);
$LenBinMsg = strlen($BinMsg)/2;
/*
This condition is used to chk whether modem version or smsc version
done by Selvam on 25-jan-2003
*/
include "../database/constant.php";
$filename = "../database/ServerType.txt";
$fp = fopen($filename,"r");
$contents = fread ($fp, filesize ($filename));
fclose($fp);
sscanf($contents,"%s",$ServerType);
if (strtoupper($ServerType)=="MODEM")
{
$MSGdata = "TYPE=B|MSISDN=+65".$SIMNo."|Message="."\"".$BinMsg."\"|";
// Create a TCP/IP socket.
[b]$socket = socket_create(AF_INET,SOCK_STREAM,0);[/b]
if ($socket < 0)
{
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
exit(-1);
}
include "../database/constant.php";
$result = socket_connect($socket,$ModemServerIp,$ModemServerPort);
if ($result < 0)
{
socket_close($socket);
echo "socket_connect() failed.\nReason: ($result) ".socket_strerror($result) . "\n";
exit(-1);
}
socket_write($socket,$MSGdata,strlen($MSGdata));
echo "<br>socket_Write to";
//this is for SMSC address process, because we need to send 2 SMS to Unit
if ($Msg1 != "")
{
//this is for second SMS (SMSC)
$chkSumMsg1 = $generic_prog.$EncodedUnitNo."AABBCCDD".$Msg1;
if (strlen(getCheckSum($chkSumMsg1)) == 1)
$BinMsg1 = "4D434753".$chkSumMsg1."0".getCheckSum($chkSumMsg1);
else
$BinMsg1 = "4D434753".$chkSumMsg1.getCheckSum($chkSumMsg1);
$MSGdata = "TYPE=B|MSISDN=".$SIMNo."|Message="."\"".$BinMsg1."\"|";
socket_write($socket,$MSGdata,strlen($MSGdata));
}
//Close connection
socket_close($socket);
echo "socket close";
addIntoLogTable($UnitNo,"Modem-Command",$CmdName,$USERNAME);
}
else
{
$MSGdata = "Subject=Testing\r\n[MSISDN]\r\nList=".$SIMNo."\r\n[MESSAGE]\r\nBinary=".$BinMsg."\r\nLength=".$LenBinMsg."\r\n[SETUP]\r\nClass=3 DCS=8b MobileNotification=NO AckType=Message AckReplyAddress=http://128.185.120.230/cr/netxcell/ack.php ValidityPeriod=10m DestinationPort=3434 OriginatorPort=2323"; //Create Message Body
$CNXlogin = "Mobileway";
$CNXpassword = "MW";
$CNXserverip = "128.185.120.237";
$CNXaccess ="/examples/servlet/Service1";
$address = "128.185.120.237";
$service_port = "80";
if (!(strlen($MSGdata)>0))
{
echo "Error - No data receive\n";
exit(-1);
}
// Create a TCP/IP socket.
$socket = socket_create(AF_INET,SOCK_STREAM,0);
if ($socket < 0)
{
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
exit(-1);
}
echo "<BR>Service Port : ".$service_port;
$result = socket_connect($socket,$address,$service_port);
if ($result < 0)
{
socket_close($socket);
echo "socket_connect() failed.\nReason: ($result) ".socket_strerror($result) . "\n";
exit(-1);
}
// Make HTTP Request Header
$in = "POST ".$CNXaccess." HTTP/1.1\r\n";
$in .= "#HOST: ".$CNXserverip."\r\n";
$in .= "#Authorization: Basic ".base64_encode($CNXlogin.":".$CNXpassword)."\r\n";
$in .= "#content-length: ".strlen($MSGdata)."\r\n";
$in .= "#Version=23\r\n";
$in .= $MSGdata;
echo "MSGDATA:".$in;
//this is for second SMS (SMSC)
$in1 = "POST ".$CNXaccess." HTTP/1.1\r\n";
$in1 .= "HOST: ".$CNXserverip."\r\n";
$in1 .= "Authorization: Basic ".base64_encode($CNXlogin.":".$CNXpassword)."\r\n";
$chkSumMsg1 = $generic_prog.$EncodedUnitNo."AABBCCDD".$Msg1;
if (strlen(getCheckSum($chkSumMsg1)) == 1)
$BinMsg1 = "4D434753".$chkSumMsg1."0".getCheckSum($chkSumMsg1);
else
$BinMsg1 = "4D434753".$chkSumMsg1.getCheckSum($chkSumMsg1);
$LenBinMsg1 = strlen($BinMsg1)/2;
$MSGdata1 = "Subject=Testing\r\n[MSISDN]\r\nList=".$SIMNo."\r\n[MESSAGE]\r\nBinary=".$BinMsg1."\r\nLength=".$LenBinMsg1."\r\n[SETUP]\r\nClass=3 DCS=8b MobileNotification=NO AckType=Message AckReplyAddress=http://128.185.120.230/cr/netxcell/ack.php ValidityPeriod=10m DestinationPort=3434 OriginatorPort=2323";
$in1 .= "content-length: ".strlen($MSGdata1)."\r\n\r\n";
$in1 .= "#Version=23\r\n";
$in1 .= $MSGdata1;
$out = "";
// Send Http Request
socket_write($socket,$in,strlen($in));
//this is for SMSC address process, because we need to send 2 SMS to Unit
if ($Msg1 != "")
{
echo "<BR>MSG Data1 ".$MSGdata1;
//sleep(2);
if ($socket < 0) {
echo "<br>Socket Closed";
socket_connect($socket,$address,$service_port);
}
else
echo "<br>Socket Opened";
socket_write($socket,$in1,strlen($in1));
}
addIntoLogTable($UnitNo,"Command",$CmdName,$USERNAME);
//Close connection
socket_close($socket);
}
exit();
?>