session_start();
set_time_limit(5);
$API_HOST='127.0.0.1';
$API_USER='admin';
$API_PASS='amp111';
$API_PORT=5038;
echo '
SIP.PH.STAT. '."\n";
echo ''."\n";
api_login();
api_sip_peers();
api_sip_channels();
print_sip();
api_logoff();
echo ''."\n";
echo ''."\n";
?>
function api_login()
{
global $fp;
global $API_HOST;
global $API_PORT;
global $API_USER;
global $API_PASS;
global $PARKEDOK;
global $stp;
$fp=fsockopen($API_HOST,$API_PORT,$errno,$errstr,20);
if($errno>0)
{
echo "SocketOpen error no: ".$errno." , SocketOpen error str: " .$errstr."
";
echo $API_HOST.":".$API_PORT."
";
$fp=false;
return;
}
fputs($fp,"Action: login\r\n");
fputs($fp,"Username: ".$API_USER."\r\n");
fputs($fp,"Secret: ".$API_PASS."\r\n");
fputs($fp,"Events: off\r\n");
fputs($fp,"\r\n");
}
function api_sip_peers()
{
global $fp;
global $API_HOST;
global $API_PORT;
global $API_USER;
global $API_PASS;
global $SIP_PEERS;
global $SIP_PEERS_COUNT;
fputs($fp,"Action: command\r\n");
fputs($fp,"command: sip show peers\r\n");
fputs($fp,"\r\n");
$SIP_PEERS_COUNT=0;
if(!$fp)
{
return;
}
$started=false;
while(!feof($fp))
{
// 0-26 (1-27) name/username
//27-42 (28-43) IP
//43-45 (44-46) DYN
//47-49 (48-50) NAT
//41-44 SYN
//
$line=fgets($fp,4096);
//$line=str_replace(" ", " ",$line);
//echo $line."";
//if (strpos($line,'--END COMMAND--') !== false)
if (strpos($line,"sip peers") !== false)
{
$started=false;
break;
}
else
{
if($started)
{
$pieces=explode('/',$line);
$pieces=explode(' ',$pieces[0]);
$SIP_PEERS[$SIP_PEERS_COUNT][0]=trim($pieces[0]);
$SIP_PEERS[$SIP_PEERS_COUNT][1]="free";
$SIP_PEERS[$SIP_PEERS_COUNT][2]=" ";
$SIP_PEERS_COUNT++;
//echo $pieces[0]."\n";
}
}
if (strpos($line,'Name/username') !== false)
{ $started=true; }
}
}
function api_sip_channels()
{
global $fp;
global $API_HOST;
global $API_PORT;
global $API_USER;
global $API_PASS;
global $SIP_PEERS;
global $SIP_PEERS_COUNT;
fputs($fp,"Action: command\r\n");
fputs($fp,"command: sip show channels\r\n");
fputs($fp,"\r\n");
if(!$fp)
{
return;
}
$started=false;
while(!feof($fp))
{
$line=fgets($fp,4096);
//echo $line."";
if (strpos($line,'--END COMMAND--') !== false)
{
$started=false;
break;
}
else
{
if($started)
{
$ip = trim(substr($line,0,16));
$name = trim(substr($line,17,12));
$enc = trim(substr($line,56,6));
$position=get_position(trim($name));
if($position==-1)
{//hmmmm strange, it is not suppose to happen
}
else
{
$SIP_PEERS[$position][1]=$ip; //this is the client IP (can be local LAN, before NAT)
$SIP_PEERS[$position][2]=$enc; //this is the codec
}
//echo $pieces[0]."\n";
}
}
if (strpos($line,'Response: Follows') !== false)
{ $started=true; }
}
}
function print_sip()
{
global $SIP_PEERS;
global $SIP_PEERS_COUNT;
echo ''."\n";
for($i=1;$i<$SIP_PEERS_COUNT;$i++)
{
echo "";
echo $SIP_PEERS[$i][0];
echo " | ";
echo $SIP_PEERS[$i][1];
echo " | ";
echo $SIP_PEERS[$i][2];
echo " |
\n";
}
echo "
\n";
}
function get_position($text)
{
global $SIP_PEERS;
global $SIP_PEERS_COUNT;
for($i=1;$i<$SIP_PEERS_COUNT;$i++)
{
if(strcmp($SIP_PEERS[$i][0],$text)==0)
{
return $i;
}
}
return -1;
}
function api_logoff()
{
global $fp;
global $API_HOST;
global $API_PORT;
global $API_USER;
global $API_PASS;
global $PARKEDOK;
global $stp;
if(!$fp)
{
return;
}
fputs($fp,"Action: logoff\r\n");
fputs($fp,"\r\n");
fclose($fp);
}
function show_queue($queue_name)
{
global $fp;
global $API_HOST;
global $API_PORT;
global $API_USER;
global $API_PASS;
global $PARKEDOK;
global $stp;
global $queue_parameters;
global $queue_callers;
global $queue_members;
global $queue_members_count;
global $queue_callers_count;
if(!$fp)
{
return;
}
fputs($fp,"Action: command\r\n");
fputs($fp,"Command: show queue ".$queue_name." \r\n");
fputs($fp,"\r\n");
$exten='';
$timeout=0;
$queue_members_count=0;
$queue_callers_count=0;
$members_started=false;
$callers_started=false;
$started=false;
while (!feof($fp))
{
$line=fgets($fp, 4096);
//echo $line."
";
$line=str_replace("\n","",$line);
$line=str_replace("\r","",$line);
$line=trim($line);
if (strpos($line,"--END COMMAND--") !== false)
{
//the command output has ended
$started=false;
break;
}
if ($started and $line!="")
{
//echo "".$line."
\n";
if(strpos($line,", C:") !== false && strpos($line,", A:") !== false && strpos($line,", SL:") !== false)
{//this is the line containing queue data
$new_line=substr($line,strpos($line,", C:")+4);
$queue_parameters[0]=substr($new_line,0,strpos($new_line,","));
$new_line=substr($line,strpos($line,", A:")+4);
$queue_parameters[1]=substr($new_line,0,strpos($new_line,","));
$new_line=substr($line,strpos($line,", SL:")+5);
$queue_parameters[2]=substr($new_line,0,strpos($new_line," "));
}
if($members_started)
{
$queue_members[$queue_members_count][0]=substr($line,0,strpos($line," "));
if(strpos($line,"(dynamic)") !== false)
{
$queue_members[$queue_members_count][1]=1;
}
else
{
$queue_members[$queue_members_count][1]=0;
}
if(strpos($line,"has taken no calls yet") !== false)
{
$queue_members[$queue_members_count][2]=0;
}
else
{
$new_line=substr($line,strpos($line,"has taken ")+10);
$queue_members[$queue_members_count][2]=substr($new_line,0,strpos($new_line," "));
}
if(strpos($line,"(last was") !== false)
{
$new_line=substr($line,strpos($line,"(last was ")+10);
$queue_members[$queue_members_count][3]=substr($new_line,0,strpos($new_line," "));
}
else
{
$queue_members[$queue_members_count][3]=-1;
}
$queue_members_count++;
}
if($callers_started)
{
$new_line=trim(substr($line,strpos($line," ")));
$queue_callers[$queue_callers_count][0]=trim(substr($new_line,0,strpos($new_line,"(wait: ")));
$new_line=trim(substr($new_line,strpos($new_line,"(wait: ")+7));
$queue_callers[$queue_callers_count][1]=substr($new_line,0,strpos($new_line,","));
$new_line=trim(substr($new_line,strpos($new_line,", prio: ")+8));
$queue_callers[$queue_callers_count][2]=substr($new_line,0,strpos($new_line,")"));
$queue_callers_count++;
}
if(strpos($line,"No Callers") !== false)
{
$members_started=false;
$callers_started=false;
}
if(strpos($line,"Callers:") !== false)
{
$members_started=false;
$callers_started=true;
}
if(strpos($line,"Members:") !== false)
{
$members_started=true;
$callers_started=false;
}
}
if (strpos($line,"Response: Follows") !== false)
{
//the records/answer follows
$started=true;
}
}
}
function display_queue($q)
{
global $queue_parameters;
global $queue_callers;
global $queue_members;
global $queue_members_count;
global $queue_callers_count;
global $TABLE_SIP;
if($_SESSION['admin'])
echo '';
}
function duration($duration) {
$jours = (($duration/86400));
$duration = $duration % 86400;
$heures = (($duration/3600));
$duration = $duration % 3600;
$minutes = (($duration/60));
$duration = $duration % 60;
printf('%dD %02dH %02dM %02dS',$jours,$heures,$minutes,$duration);
}
function wait_for($string)
{
global $fp;
while(!feof($fp))
{
$line=fgets($fp,4096);
$line=str_replace("\n","",$line);
$line=str_replace("\r","",$line);
$line=trim($line);
if (strpos($line,$string) !== false)
{
break;
}
}
}
function format_phone($text)
{
$return='0000000000';
for($i=0;$i='0' && $text{$i}<='9')
{
$return.=$text{$i};
}
}
return substr($return,-10);
}
?>