<?php /* * ***************************************************************************************** * Copyright (c) 2013, 2014 Christopher W. Olsen <cwolsen@ubixtechnologies.com> * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions, the following disclaimer and the list of authors. Redistributions in binary * form must reproduce the above copyright notice, this list of conditions, the following * disclaimer and the list of authors in the documentation and/or other materials provided * with the distribution. Neither the name of the uBix Cube Project nor the names of its * contributors may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $Id: getData.php 1715 2014-07-16 04:58:08Z reddawg $ * * *************************************************************************************** */ /* Main include info */ ini_set ( 'include_path', $_SERVER ['DOCUMENT_ROOT'] . "/include/" ); include ("config.php"); /* Initialize Our Device Global */ $cDev = new VoIP_Device (); /* Main defines */ $data ['tpl']->define ( array ( "conf_file" => "error.tpl" ) ); if (strstr ( $_SERVER ['REMOTE_ADDR'], "207.38.206.18" )) { exit (); } /* Here we need to determine what type of device is querying the provisioning system */ $devAgent = explode ( ' ', $_SERVER ['HTTP_USER_AGENT'] ); switch ($devAgent [0]) { case 'FileTransport' : $eC = count ( $devAgent ); /* By Default Will Consider It A Cold Boot Unless We Determine Non Boot Loader Requested Information */ $cDev->bootStatus = 'Cold'; $cDev->bootStatus = 'Probe'; /* The Second Part Of The Agent Is Uniform Through All Polycom UC Firmware */ preg_match ( "/((?:[a-zA-Z][a-zA-Z]+))-((?:[a-zA-Z][a-zA-Z]+))_(\d+)-((?:[a-zA-Z][a-zA-Z]+))\/((?:[\w\.\-]+)+)/", $devAgent [1], $dI ); $cDev->deviceFamily = $dI [1]; $cDev->model = $dI [2]; $cDev->modelNo = $dI [3]; $cDev->userAgent = $dI [4]; $cDev->firmware = $dI [5]; shell_exec ( "cat <<EOF >> /tmp/Polycom.log\ncDev: " . json_encode ( $dI ) . "\nEOF\n" ); for($i = 2; $i <= $eC; $i ++) { if ($devAgent [$i] [0] == '(') { /* Get Devices Serial Number AKA MAC */ preg_match ( "/\(((?:[a-zA-Z][a-zA-Z]+)):((?:[\w\.\-]+)+)\)/", $devAgent [$i], $dI ); shell_exec ( "cat <<EOF >> /tmp/Polycom.log\ncHave SERIAL: " . json_encode ( $dI ) . "\nEOF\n" ); } else { /* Get Loader Type Boot/App */ preg_match ( "/((?:[a-zA-Z][a-zA-Z]+))\/((?:[a-zA-Z][a-zA-Z]+))/", $devAgent [$i], $dI ); shell_exec ( "cat <<EOF >> /tmp/Polycom.log\ncHave Application: " . json_encode ( $dI ) . "\nEOF\n" ); if ($dI [1] == 'Application') $cDev->bootStatus = 'Warm'; $cDev->appType = $dI [2]; } } break; default : system ( "echo 'Unsupported Device' >> /tmp/AGENT.log" ); exit (); } system ( "echo 'cDev[" . $data ['mode'] . "]: " . json_encode ( $cDev ) . "' >> /tmp/AGENT.log" ); /* Break The Request File Into Parts */ $cFile = explode ( "-", $data ['file'] ); switch ($data ['type']) { case 'xml' : switch ($cFile [1]) { case 'directory' : Polycom_Device::loadDirectory ( $data, $cFile [0] ); break; default : script404 (); } break; case 'ug' : if (($cDev->appType == "Application" && $cDev->firmware [0] == '3') || ($cDev->appType == "Updater" && $cDev->firmware [0] == '4')) { system ( "echo 'UG: " . $data ['mode'] . "-" . $cDev->firmware . "' >> /tmp/AGENT.log" ); if ($cFile [0] == "000000000000") { print ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<APPLICATION APP_FILE_PATH=\"firmware/Polycom/4.0.9/sip.ld\" CONFIG_FILES=\"\" MISC_FILES=\"\" LOG_FILE_DIRECTORY=\"http://prov.spherepbx.com/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ; exit (); } else script404 (); } else { print ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<APPLICATION APP_FILE_PATH=\"firmware/Polycom/4.0.9/sip.ld\" CONFIG_FILES=\"http://prov.spherepbx.com/ns/completed.cfg, http://prov.spherepbx.com/" . $cFile [0] . ".cfg\" MISC_FILES=\"\" LOG_FILE_DIRECTORY=\"http://prov.spherepbx.com/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ; exit (); } break; case 'dg' : if (($cDev->appType == "Application" && $cDev->firmware [0] == '4') || ($cDev->appType == "Updater" && $cDev->firmware [0] == '5')) { system ( "echo 'DG: " . $data ['mode'] . "-" . $cDev->firmware . "' >> /tmp/AGENT.log" ); if ($cFile [0] == "000000000000") { print ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<APPLICATION APP_FILE_PATH=\"sip.ld\" CONFIG_FILES=\"\" MISC_FILES=\"\" LOG_FILE_DIRECTORY=\"http://prov.spherepbx.com/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ; exit (); } else script404 (); } else { print ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<APPLICATION APP_FILE_PATH=\"sip.ld\" CONFIG_FILES=\"http://prov.spherepbx.com/ns/completed.cfg, http://prov.spherepbx.com/" . $cFile [0] . ".cfg\" MISC_FILES=\"\" LOG_FILE_DIRECTORY=\"http://prov.spherepbx.com/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ; exit (); } break; case 'cfg' : Polycom_Device::loadConfig ( $data, $cFile ); break; case 'cfg-old' : $cFile = explode ( "-", $data ['file'] ); if (count ( $cFile ) == 1) $cFile [1] = "mac"; if ($cFile [0] == "00000000000000") script404 (); $query = "UPDATE voip_devices SET last_config = " . time () . ", last_ip = '" . $_SERVER ['REMOTE_ADDR'] . "' WHERE mac = '" . $cFile [0] . "'"; $data ['ubix_db']->query ( $query ); $query = "SELECT * FROM voip_devices vd LEFT JOIN voip_device_types vdt ON vd.vdtid=vdt.vdtid WHERE mac = '" . $cFile [0] . "'"; $result = $data ['ubix_db']->query ( $query ); if ($result === false) script404 (); else $qData = $result->fetch_assoc (); // MrOlsen (2015-12-10) NOTICE: Temp $frm = $qData ['firmware']; $result->free (); /* Make Sure We're Running The Expected Firmware Before Continuing */ if (strstr ( $qData ['firmware'], "_4" )) { if (($cDev->appType == 'Updater' && $cDev->firmware [0] != '5') || ($cDev->appType == "Application" && $cDev->firmware [0] != '4') || ($cDev->appType == "Unknown" && $cDev->firmware [0] == '3')) { system ( "echo 'Test for UG: " . $qData ['firmware'] . "' >> /tmp/AGENT.log" ); print ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<APPLICATION APP_FILE_PATH=\"http://prov.spherepbx.com/firmware/Polycom/sip_333/sip.ld\" CONFIG_FILES=\"http://prov.spherepbx.com/ns/upgrade.cfg\" MISC_FILES=\"\" LOG_FILE_DIRECTORY=\"http://prov.spherepbx.com/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ; exit (); } } else if (strstr ( $qData ['firmware'], "_3" )) { if (($cDev->appType == 'Updater' && $cDev->firmware [0] != '4') || ($cDev->appType == "Application" && $cDev->firmware [0] != '3')) { system ( "echo 'Test for DG: " . $qData ['firmware'] . "' >> /tmp/AGENT.log" ); print ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<APPLICATION APP_FILE_PATH=\"http://prov.spherepbx.com/firmware/Polycom/4.0.9/sip.ld\" CONFIG_FILES=\"http://prov.spherepbx.com/ns/downgrade.cfg\" MISC_FILES=\"\" LOG_FILE_DIRECTORY=\"http://prov.spherepbx.com/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ; exit (); } } switch ($cFile [1]) { case 'reg' : case 'sip' : system ( "echo 'MrOlsen - Start' >> /tmp/AGENT.log" ); $data ['tpl']->define ( array ( "conf_file" => $qData ['firmware'] . "/000000000000-" . $cFile [1] . ".tpl" ) ); $query = "SELECT extensions, server_primary, server_port_primary, transport_primary, server_backup, server_port_backup, transport_backup, dialplan, dialplan_timeout FROM voip_devices WHERE mac = '" . $cFile [0] . "'"; system ( 'echo "TPL: ' . $qData ['firmware'] . ', Query:[' . $data ['ubix_db']->real_escape_string ( $query ) . '"] >> /tmp/AGENT.log' ); $result = $data ['ubix_db']->query ( $query ); $qData = $result->fetch_assoc (); $result->free (); $extensions = json_decode ( $qData ['extensions'], true ); $data ['tpl']->assign ( "SERVER_PRIMARY", $qData ['server_primary'] ); $data ['tpl']->assign ( "TRANSPORT_PRIMARY", $qData ['transport_primary'] ); $data ['tpl']->assign ( "SERVER_BACKUP", $qData ['server_backup'] ); $data ['tpl']->assign ( "TRANSPORT_BACKUP", $qData ['transport_backup'] ); $ext = ""; $i = 1; $reg = ""; $mwi = ""; foreach ( $extensions as $key => $val ) { // system('echo "Kev: ' . $key . ', Val: ' . $val . '" >> /tmp/AGENT.log'); if ($val ['extension'] != "") { // MrOlsen Temp 04-30-2015 if (isset ( $val ['primary_server'] )) $val ['server_primary'] = $val ['primary_server']; if (isset ( $val ['primary_port'] )) $val ['server_port_primary'] = $val ['primary_port']; if (isset ( $val ['primary_transport'] )) $val ['transport_primary'] = $val ['primary_transport']; if (isset ( $val ['backup_server'] )) $val ['server_backup'] = $val ['backup_server']; if (isset ( $val ['backup_port'] )) $val ['server_port_backup'] = $val ['backup_port']; if (isset ( $val ['backup_transport'] )) $val ['transport_backup'] = $val ['backup_transport']; if ($val ['extension'] != '9999') { if (strstr ( $_SERVER ['REMOTE_ADDR'], "10.0.0" )) $query = "UPDATE sippeers SET permit = '69.126.26.10', deny = '0.0.0.0' WHERE name = '" . $val ['extension'] . "'"; else { $query = "UPDATE sippeers SET permit = '" . $_SERVER ['REMOTE_ADDR'] . "', deny = '0.0.0.0' WHERE name = '" . $val ['extension'] . "'"; } $data ['voip_db']->query ( $query ); } $query = "SELECT name, secret, accountcode, callerid FROM sippeers WHERE name = '" . $val ['extension'] . "'"; $result = $data ['voip_db']->query ( $query ); if ($val ['line_keys'] == "") { $LKS = ""; $CPK = ""; } else if ($val ['line_keys'] == 1) { $LKS = 1; $CPK = 4; } else { $LKS = $val ['line_keys']; $CPK = 1; } if ($result->num_rows > 0) { $eRow = $result->fetch_row (); $ext = substr ( $eRow [0], strlen ( $eRow [2] ) ); $user = $eRow [0]; $pass = $eRow [1]; $callerid = explode ( "<", $eRow [3] ); $dN = $callerid [0]; if ($val ['label'] != '') $label = $val ['label']; else $label = strtoupper ( $eRow [2] ) . " " . substr ( $callerid [1], 0, - 1 ); $dN = $label; $result->free (); } else if (isset ( $val ['secret'] )) { $ext = $val ['extension']; $user = $val ['extension']; $pass = $val ['secret']; if ($val ['label'] != '') { $label = $val ['label']; $dN = $val ['label']; } else { $label = $val ['extension']; $dN = $val ['extension']; } } else { $ext = "9999"; $user = "9999"; $dN = "9999"; $label = "9999"; $pass = "1981"; } if (! isset ( $val ['server_port_primary'] )) $val ['server_port_primary'] = "5060"; if (! isset ( $val ['server_port_backup'] )) $val ['server_port_backup'] = "5060"; if (! isset ( $val ['primary_transport'] )) $val ['primary_transport'] = "UDPonly"; if (! isset ( $val ['backup_transport'] )) $val ['backup_transport'] = "UDPOnly"; $rG = "1"; } else { $ext = ""; $user = ""; $dN = ""; $label = ""; $pass = ""; $val ['server_port_primary'] = "5060"; $val ['server_port_backup'] = "5060"; $val ['transport_primary'] = "UDPOnly"; $val ['transport_backup'] = "UDPOnly"; $val ['server_primary'] = ""; $val ['server_backup'] = ""; $rG = ""; } if ($user != "" && $pass != "") { // MrOlsen(2015-12-20) NOTE: Forced Backup // $val['server_backup'] = "Failover.SpherePBX.com"; // if (isset ( $polyMatrix [$dI [3]] [$dI [4]] ['reg'] )) { system ( "echo 'FW: " . $frm . "' >> /tmp/AGENT.log" ); if ($frm == 'sip_409') { $rI = new Polycom_Firmware_409 (); // system ( "echo 'PWND: " . $cDev->model . " - " . $cDev->modelNo . "<" . json_encode($rI->regInfo) . ">' >> /tmp/AGENT.log" ); // $rI->regInfo = $polyMatrix [$dI [3]] [$dI [4]] ['reg']; $rI->regInfo ['displayName'] = $dN; $rI->regInfo ['address'] = $user; $rI->regInfo ['label'] = $label; $rI->regInfo ['auth.userId'] = $user; $rI->regInfo ['auth.password'] = $pass; $rI->regInfo ['lineKeys'] = $LKS; $rI->regInfo ['callsPerLineKey'] = $CPK; $rI->regInfo ['server.1.address'] = $val ['server_primary']; $rI->regInfo ['server.1.port'] = $val ['server_port_primary']; $rI->regInfo ['server.1.transport'] = $val ['primary_transport']; $rI->regInfo ['server.2.address'] = $val ['server_backup']; $rI->regInfo ['server.1.register'] = $rG; $rI->regInfo ['server.2.register'] = "1"; // MrOlsen (2015-12-10) TEMP $rG; $rI->regInfo ['server.2.port'] = $val ['server_port_backup']; $rI->regInfo ['server.2.transport'] = $val ['backup_transport']; foreach ( $rI->regInfo as $rKey => $rVal ) { $reg .= 'reg.' . $i . '.' . $rKey . '="' . $rVal . '" '; } system ( "echo 'PWND.2: " . $cDev->model . " - " . $cDev->modelNo . "<" . json_encode ( $rI->regInfo ) . ">" . $reg . "' >> /tmp/AGENT.log" ); } else { $reg .= "reg.$i.displayName=\"" . $dN . "\" reg.$i.address=\"" . $user . "\" reg.$i.label=\"" . $label . "\" reg.$i.auth.userId=\"" . $user . "\" reg.$i.auth.password=\"" . $pass . "\" reg.$i.lineKeys=\"$LKS\" reg.$i.callsPerLineKey=\"$CPK\" reg.$i.server.1.address=\"" . $val ['server_primary'] . "\" reg.$i.server.1.port=\"" . $val ['server_port_primary'] . "\" reg.$i.server.1.transport=\"" . $val ['transport_primary'] . "\" reg.$i.server.2.address=\"" . $val ['server_backup'] . "\" reg.$i.server.1.register=\"" . $rG . "\" reg.$i.server.1.expires=\"60\" reg.$i.server.2.register=\"$rG\" reg.$i.server.2.expires=\"60\" reg.$i.server.2.port=\"" . $val ['server_port_backup'] . "\" reg.$i.server.2.transport=\"" . $val ['transport_backup'] . "\" reg.$i.auth.domain=\"\" reg.$i.outboundProxy.address=\"\" "; } // $mwi .= "msg.mwi.$i.callBackMode=\"contact\" msg.mwi.$i.subscribe=\"" . $val ['server_primary'] . "\" msg.mwi.$i.callBack=\"*98\" "; $mwi .= "msg.mwi.$i.callBackMode=\"contact\" msg.mwi.$i.subscribe=\"" . $user . "\" msg.mwi.$i.callBack=\"*98\" "; } $i ++; } $data ['tpl']->assign ( "DIALPLAN", $qData ['dialplan'] ); $data ['tpl']->assign ( "DIALPLAN_TIMEOUT", $qData ['dialplan_timeout'] ); $data ['tpl']->assign ( "REG", $reg ); system ( "echo 'Reg: " . $data ['ubix_db']->real_escape_string ( $reg ) . "' >> /tmp/AGENT.log" ); $data ['tpl']->assign ( "MWI", $mwi ); system ( "echo 'MWI: " . $data ['ubix_db']->real_escape_string ( $mwi ) . "' >> /tmp/AGENT.log" ); system ( "echo 'MrOlsen - END' >> /tmp/AGENT.log" ); break; case 'mac' : $data ['tpl']->define ( array ( "conf_file" => "000000000000.tpl" ) ); system ( "echo 'PMM: " . $cDev->model . " - " . $cDev->modelNo . "' >> /tmp/AGENT.log" ); // if (isset ( $polyMatrix [$cDev->model] [$cDev->model_no] ['firmware'] ) && strstr ( $qData ['firmware'], "_4" )) { if (strstr ( $qData ['firmware'], "_409" )) { // $data ['tpl']->assign ( "FIRMWARE", "http://prov.spherepbx.com/firmware/" . $qData ['manufacturer'] . "/" . $polyMatrix [$dI [3]] [$dI [4]] ['firmware'] . "/sip.ld" ); $data ['tpl']->assign ( "FIRMWARE", "http://prov.spherepbx.com/firmware/" . $qData ['manufacturer'] . "/4.0.9/sip.ld" ); // $defDir = "http://prov.spherepbx.com/defaults/" . $qData ['manufacturer'] . "/" . $polyMatrix [$cDev ['model']] [$cDev ['model_no']] ['firmware']; $defDir = "http://prov.spherepbx.com/defaults/" . $qData ['manufacturer'] . "/4.0.9"; $data ['tpl']->assign ( "CONFIG_FILES", $defDir . "/applications.cfg, " . $defDir . "/device.cfg, " . $defDir . "/features.cfg, " . $defDir . "/sip.cfg, /" . $cFile [0] . "-reg.cfg" ); } else { $data ['tpl']->assign ( "FIRMWARE", "http://prov.spherepbx.com/firmware/" . $qData ['manufacturer'] . "/" . $qData ['firmware'] . "/sip.ld" ); $data ['tpl']->assign ( "CONFIG_FILES", "http://prov.spherepbx.com/defaults/" . $qData ['firmware'] . "/device-ubix.cfg, " . $cFile [0] . "-sip.cfg, http://prov.spherepbx.com/defaults/" . $qData ['firmware'] . "/features-ubix.cfg" ); } $data ['tpl']->assign ( "MISC_FILES", "" ); // "/firmware" . $qData['manufacturer'] . "/" . $qData['firmware'] . "/misc/"); break; case 'web' : $query = "SELECT cfg FROM voip_device_configs WHERE mac = '" . $cFile [0] . "' AND cfg_type = 'web'"; $res = $data ['ubix_db']->query ( $query ); $wD = $res->fetch_row (); if ($res->num_rows == 0) { script404 (); print ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<WEB_CONFIG>\n<OVERRIDES />\n</WEB_CONFIG>\n") ; } else { $res->free (); print ($wD [0]) ; } exit (); break; case 'phone' : $query = "SELECT cfg FROM voip_device_configs WHERE mac = '" . $cFile [0] . "' AND cfg_type = 'phone'"; $res = $data ['ubix_db']->query ( $query ); $wD = $res->fetch_row (); if ($res->num_rows == 0) { print ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<PHONE_CONFIG>\n<OVERRIDES />\n</PHONE_CONFIG>\n") ; script404 (); } else { $res->free (); print ($wD [0]) ; } exit (); break; case 'license' : $query = "SELECT cfg FROM voip_device_configs WHERE mac = '" . $cFile [0] . "' AND cfg_type = 'license'"; $res = $data ['ubix_db']->query ( $query ); $wD = $res->fetch_row (); if ($res->num_rows == 0) script404 (); else { $res->free (); print ($wD [0]) ; } exit (); break; default : script404 (); break; } /* * END * * * switch */ break; default : script404 (); } /* END switch */ exit (); /* * Parse * and * print */ $data ['tpl']->parse ( "CONF_FILE", array ( "conf_file" ) ); $data ['tpl']->FastPrint ( "CONF_FILE" ); system ( 'echo "TPL: ' . $qData ['firmware'] . ', Query:[' . $data ['ubix_db']->real_escape_string ( $data ['tpl']->fetch ( "CONF_FILE" ) ) . '"] >> /tmp/CONF_FILE.log' ); function script404($message = '404 Not Found') { header ( $_SERVER ["SERVER_PROTOCOL"] . " " . $message ); exit ( 0 ); } class Polycom_Device { /* Firmware Matchup */ public $polyMatrix = Array (); /* * 'SPIP' => Array ( * // '301' => '3.1.8', * // '320' => '3.3.5', * // '330' => '3.3.5', * '321' => Array ( * 'boot_major' => Array ( * '4' => '3.3.3', * '5' => '4.0.9' * ) * ), * '331' => Array ( * 'firmware' => '4.0.9', * 'reg' => '', * 'boot_major' => Array ( * '4' => '3.3.3', * '5' => '4.0.9' * ) * ), * '335' => Array ( * 'firmware' => '4.0.9', * 'reg' => '', * 'boot_major' => Array ( * '4' => '3.3.3', * '5' => '4.0.9' * ) * ), * // '430' => '3.2.7', * '450' => Array ( * 'firmware' => '4.0.9', * 'reg' => '', * 'boot_major' => Array ( * '4' => '3.3.3', * '5' => '4.0.9' * ) * ), * // '501' => '3.1.8', * '550' => Array ( * 'firmware' => '4.0.9', * 'reg' => '', * 'boot_major' => Array ( * '4' => '3.3.3', * '5' => '4.0.9' * ) * ), * '560' => Array ( * 'firmware' => '4.0.9', * 'reg' => '', * 'boot_major' => Array ( * '4' => '3.3.3', * '5' => '4.0.9' * ) * ), * // '600' => '3.1.8', * // '601' => '3.1.8', * '650' => Array ( * 'firmware' => '4.0.9', * 'reg' => '', * 'boot_major' => Array ( * '4' => '3.3.3', * '5' => '4.0.9' * ) * ), * '670' => Array ( * 'firmware' => '4.0.9', * 'reg' => '', * 'boot_major' => Array ( * '4' => '3.3.3', * '5' => '4.0.9' * ) * ) * ) * ); */ /* * public function __construct() { * * foreach ( Polycom_Firmware_409::devices as $key => $val ) { * foreach ( $val as $sval ) * $this->polyMatrix [$key] = $sval; * } * * } */ public function loadDirectory($data, $mac) { $query = "SELECT directory FROM voip_device_directories WHERE mac = '" . $mac . "'"; $query = "SELECT cfg FROM voip_device_configs WHERE mac = '" . $mac . "' AND cfg_type = 'directory'"; $res = $data ['ubix_db']->query ( $query ); if ($res->num_rows == 0) script404 (); else { $dD = $res->fetch_row (); print $dD [0]; $res->free (); } } public function loadConfig(&$data, $cFile) { global $dev; /* See What Type Of File We're Looking For */ if (count ( $cFile ) == 1) { $cFile [1] = "mac"; } /* Return 404 If Request Probe */ if ($cFile [0] == "00000000000000") { script404 (); } $query = "UPDATE voip_devices SET last_config = " . time () . ", last_ip = '" . $_SERVER ['REMOTE_ADDR'] . "' WHERE mac = '" . $cFile [0] . "'"; $data ['ubix_db']->query ( $query ); $query = "SELECT * FROM voip_devices vd LEFT JOIN voip_device_types vdt ON vd.vdtid=vdt.vdtid WHERE mac = '" . $cFile [0] . "'"; $result = $data ['ubix_db']->query ( $query ); if ($result === false) { script404 (); } else { $qData = $result->fetch_assoc (); } $result->free (); switch ($cFile [1]) { case 'reg' : case 'sip' : $data ['tpl']->define ( array ( "conf_file" => $qData ['firmware'] . "/000000000000-" . $cFile [1] . ".tpl" ) ); $query = "SELECT extensions, server_primary, server_port_primary, transport_primary, server_backup, server_port_backup, transport_backup, dialplan, dialplan_timeout FROM voip_devices WHERE mac = '" . $cFile [0] . "'"; $result = $data ['ubix_db']->query ( $query ); $qData = $result->fetch_assoc (); $result->free (); // This is temporary, we're not going to provide these in the future $data ['tpl']->assign ( "SERVER_PRIMARY", "SPBX-VS001.SpherePBX.com" ); $data ['tpl']->assign ( "TRANSPORT_PRIMARY", "UDPOnly" ); $data ['tpl']->assign ( "SERVER_BACKUP", "SPBX-VS002.SpherePBX.com" ); $data ['tpl']->assign ( "TRANSPORT_BACKUP", "UDPOnly" ); // Populate Extensions $extensions = json_decode ( $qData ['extensions'], true ); $ext = ""; $i = 1; $reg = ""; $mwi = ""; foreach ( $extensions as $key => $val ) { if ($val ['extension'] != "") { if (! isset ( $val ['server_host_primary'] )) $val ['server_host_primary'] = "SPBX-VS001.SpherePBX.com"; if (! isset ( $val ['server_port_primary'] )) $val ['server_port_primary'] = "5060"; if (isset ( $val ['server_transport_primary'] )) $val ['server_transport_primary'] = "UDPOnly"; if (! isset ( $val ['server_host_backup'] )) $val ['server_host_backup'] = "SPBX-VS002.SpherePBX.com"; if (! isset ( $val ['server_port_backup'] )) $val ['server_port_backup'] = "5060"; if (isset ( $val ['server_transport_backup'] )) $val ['server_transport_backup'] = "UDPOnly"; if ($val ['extension'] != '9999') { if (strstr ( $_SERVER ['REMOTE_ADDR'], "10.0.0" )) $query = "UPDATE sippeers SET permit = '69.126.26.10', deny = '0.0.0.0' WHERE name = '" . $val ['extension'] . "'"; else { $query = "UPDATE sippeers SET permit = '" . $_SERVER ['REMOTE_ADDR'] . "', deny = '0.0.0.0' WHERE name = '" . $val ['extension'] . "'"; } $data ['voip_db']->query ( $query ); } $query = "SELECT name, secret, accountcode, callerid FROM sippeers WHERE name = '" . $val ['extension'] . "'"; $result = $data ['voip_db']->query ( $query ); if ($val ['line_keys'] == "") { $LKS = 1; $CPK = 2; } else if ($val ['line_keys'] == 1) { $LKS = 1; $CPK = 4; } else { $LKS = $val ['line_keys']; $CPK = 1; } if ($result->num_rows > 0) { $eRow = $result->fetch_row (); $ext = substr ( $eRow [0], strlen ( $eRow [2] ) ); $user = $eRow [0]; $pass = $eRow [1]; $callerid = explode ( "<", $eRow [3] ); $dN = $callerid [0]; if ($val ['label'] != '') $label = $val ['label']; else $label = strtoupper ( $eRow [2] ) . " " . substr ( $callerid [1], 0, - 1 ); $dN = $label; $result->free (); } else if (isset ( $val ['secret'] )) { $ext = $val ['extension']; $user = $val ['extension']; $pass = $val ['secret']; if ($val ['label'] != '') { $label = $val ['label']; $dN = $val ['label']; } else { $label = $val ['extension']; $dN = $val ['extension']; } } else { $ext = "9999"; $user = "9999"; $dN = "9999"; $label = "9999"; $pass = "1981"; } $rG = "1"; } else { $ext = ""; $user = ""; $dN = ""; $label = ""; $pass = ""; $rG = ""; } if ($user != "" && $pass != "") { if ($frm == 'sip_409') { $rI = new Polycom_Firmware_409 (); // system ( "echo 'PWND: " . $cDev->model . " - " . $cDev->modelNo . "<" . json_encode($rI->regInfo) . ">' >> /tmp/AGENT.log" ); // $rI->regInfo = $polyMatrix [$dI [3]] [$dI [4]] ['reg']; $rI->regInfo ['displayName'] = $dN; $rI->regInfo ['address'] = $user; $rI->regInfo ['label'] = $label; $rI->regInfo ['auth.userId'] = $user; $rI->regInfo ['auth.password'] = $pass; $rI->regInfo ['lineKeys'] = $LKS; $rI->regInfo ['callsPerLineKey'] = $CPK; $rI->regInfo ['server.1.address'] = $val ['server_host_primary']; $rI->regInfo ['server.1.port'] = $val ['server_port_primary']; $rI->regInfo ['server.1.transport'] = $val ['server_transport_primary']; $rI->regInfo ['server.2.address'] = $val ['server_host_backup']; $rI->regInfo ['server.1.register'] = $rG; $rI->regInfo ['server.2.register'] = "1"; $rI->regInfo ['server.2.port'] = $val ['server_port_backup']; $rI->regInfo ['server.2.transport'] = $val ['server_transport_backup']; foreach ( $rI->regInfo as $rKey => $rVal ) { $reg .= 'reg.' . $i . '.' . $rKey . '="' . $rVal . '" '; } system ( "echo 'PWND.2: " . $cDev->model . " - " . $cDev->modelNo . "<" . json_encode ( $rI->regInfo ) . ">" . $reg . "' >> /tmp/AGENT.log" ); } else { $reg .= "reg.$i.displayName=\"" . $dN . "\" reg.$i.address=\"" . $user . "\" reg.$i.label=\"" . $label . "\" reg.$i.auth.userId=\"" . $user . "\" reg.$i.auth.password=\"" . $pass . "\" reg.$i.lineKeys=\"$LKS\" reg.$i.callsPerLineKey=\"$CPK\" reg.$i.server.1.address=\"" . $val ['server_host_primary'] . "\" reg.$i.server.1.port=\"" . $val ['server_port_primary'] . "\" reg.$i.server.1.transport=\"" . $val ['server_transport_primary'] . "\" reg.$i.server.2.address=\"" . $val ['server_host_backup'] . "\" reg.$i.server.1.register=\"" . $rG . "\" reg.$i.server.1.expires=\"60\" reg.$i.server.2.register=\"$rG\" reg.$i.server.2.expires=\"60\" reg.$i.server.2.port=\"" . $val ['server_port_backup'] . "\" reg.$i.server.2.transport=\"" . $val ['server_transport_backup'] . "\" reg.$i.auth.domain=\"\" reg.$i.outboundProxy.address=\"\" "; } // $mwi .= "msg.mwi.$i.callBackMode=\"contact\" msg.mwi.$i.subscribe=\"" . $val ['server_primary'] . "\" msg.mwi.$i.callBack=\"*98\" "; $mwi .= "msg.mwi.$i.callBackMode=\"contact\" msg.mwi.$i.subscribe=\"" . $user . "\" msg.mwi.$i.callBack=\"*98\" "; } $i ++; } $data ['tpl']->assign ( "DIALPLAN", $qData ['dialplan'] ); $data ['tpl']->assign ( "DIALPLAN_TIMEOUT", $qData ['dialplan_timeout'] ); $data ['tpl']->assign ( "REG", $reg ); system ( "echo 'Reg: " . $data ['ubix_db']->real_escape_string ( $reg ) . "' >> /tmp/AGENT.log" ); $data ['tpl']->assign ( "MWI", $mwi ); system ( "echo 'MWI: " . $data ['ubix_db']->real_escape_string ( $mwi ) . "' >> /tmp/AGENT.log" ); system ( "echo 'MrOlsen - END' >> /tmp/AGENT.log" ); } } } class Polycom_Firmware_409 { /* Default Regstation Info */ public $regInfo = array ( 'acd-agent-available' => "0", 'acd-login-logout' => "0", 'auth.domain' => "", 'auth.optimizedInFailover' => "0", 'auth.useLoginCredentials' => "0", 'bargeInEnabled' => "0", 'csta' => "0", 'fwd.busy.contact' => "", 'fwd.busy.status' => "0", 'fwd.noanswer.contact' => "", 'fwd.noanswer.ringCount' => "9", 'fwd.noanswer.status' => "0", 'lcs' => "0", 'musicOnHold.uri' => "", 'outboundProxy.failOver.failBack.timeout' => "3600", 'outboundProxy.failOver.failRegistrationOn' => "1", 'outboundProxy.failOver.onlySignalWithRegistered' => "1", 'outboundProxy.failOver.reRegisterOn' => "0", 'outboundProxy.port' => "0", 'outboundProxy.transport' => "DNSnaptr", 'outboundProxy.address' => "", 'protocol' => "", 'ringType' => "default", 'serverFeatureControl.activateCodeSequence.cf.always' => "", 'serverFeatureControl.activateCodeSequence.cf.busy' => "", 'serverFeatureControl.activateCodeSequence.cf.noanswer' => "", 'serverFeatureControl.activateCodeSequence.dnd' => "", 'serverFeatureControl.cf' => "0", 'serverFeatureControl.deActivateCodeSequence.cf.always' => "", 'serverFeatureControl.deActivateCodeSequence.cf.busy' => "", 'serverFeatureControl.deActivateCodeSequence.cf.noanswer' => "", 'serverFeatureControl.deActivateCodeSequence.dnd' => "", 'serverFeatureControl.dnd' => "0", 'serverFeatureControl.signalingMethod' => "subscribeAsFeatureEvent", 'serverFeatureControl.subscribeToUri' => "", 'telephony' => "1", 'teluri' => "0", 'thirdPartyName' => "", 'type' => "private", 'useCompleteUriForRetrieve' => "1", 'useLocalTargetUriForLegacyPickup' => "0", 'server.1.expires' => "300", 'server.1.expires.lineSeize' => "30", 'server.1.expires.overlap' => "60", 'server.1.lcs' => "0", 'server.1.retryMaxCount' => "3", 'server.1.retryTimeOut' => "0", 'server.1.specialInterop' => "standard", 'server.2.expires' => "300", 'server.2.expires.lineSeize' => "30", 'server.2.expires.overlap' => "60", 'server.2.lcs' => "0", 'server.2.retryMaxCount' => "3", 'server.2.retryTimeOut' => "0", 'server.2.specialInterop' => "standard", 'displayName' => "", 'address' => "", 'label' => "", 'auth.userId' => "", 'auth.password' => "", 'lineKeys' => "1", 'callsPerLineKey' => "1", 'server.1.address' => "", 'server.1.port' => "5060", 'server.1.transport' => "DNSnaptr", 'server.2.address' => "", 'server.1.register' => "0", 'server.2.register' => "0", 'server.2.port' => "5060", 'server.2.transport' => "DNSnaptr" ); public static $version = '4.0.9'; public static $boot_major = '5'; public static $devices = Array ( 'SPIP' => Array ( '321', '331', '335', '450', '550', '560', '650', '670' ) ); public function reg() { return ($this->regInfo); } } class VoIP_Device { public $deviceFamily; public $model; public $modelNo; public $firmware; public $bootStatus; public $userAgent; public $deviceSerial; public $appType; } ?>