<?php /* * ***************************************************************************************** * * Copyright (c) 2016 Christopher W. Olsen <cwolsen@uBixStudios.com> * All rights reserved. * * * $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"); include ("voip_device.php"); /* Main defines */ $data['tpl']->define(array( "conf_file" => "error.tpl" )); /* Make Sure It's A Polycom */ if (!strstr($_SERVER['HTTP_USER_AGENT'], "Polycom")) { // script404(); } if ($data['file'] == "00000000000000") { shell_exec("echo 'DEFAULTS!' >> /tmp/Prov.log"); setPolycomDefaults(); } /* Initialize Our Device Global */ try { $cDev = new VoIP_Device($_SERVER['HTTP_USER_AGENT']); } catch (Exception $e) { script404(); } /* 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]); exit(); break; default: script404(); } break; case 'ug': if (($cDev->appType == "Application" && $cDev->userAgent[0] == '3') || ($cDev->appType == "Updater" && $cDev->userAgent[0] == '4')) { system("echo 'UG: " . $data['mode'] . "-" . $cDev->userAgent . "' >> /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->userAgent[0] == '4') || ($cDev->appType == "Updater" && $cDev->userAgent[0] == '5')) { system("echo 'DG: " . $data['mode'] . "-" . $cDev->userAgent . "' >> /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': processConfig(); break; default: script404(); } /* END switch */ /* * 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); } function setPolycomDefaults () { global $data; $data['tpl']->define(array( "conf_file" => "000000000000.tpl" )); $data['tpl']->assign("FIRMWARE", "sip.ld"); $data['tpl']->assign("CONFIG_FILES", "/polycom/defaults/000/device-333.cfg"); $data['tpl']->assign("MISC_FILES", ""); $data['tpl']->parse("CONF_FILE", array( "conf_file" )); $data['tpl']->FastPrint("CONF_FILE"); exit(); } function processConfig () { global $cFile; //Sloppy global $data; //Sloppy /* If The Request Is A Straight MAC Then It's The Default Request */ if (count($cFile) == 1) { $cFile[1] = "mac"; } /* Get Device Data From Database */ $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(); // Since We Know It's Our Device Set ACL And Last Config $query = "UPDATE voip_devices SET last_config = " . time() . ", last_ip = '" . $_SERVER['REMOTE_ADDR'] . "' WHERE mac = '" . $cFile[0] . "'"; $data['ubix_db']->query($query); // MrOlsen (2015-12-10) NOTICE: Temp $frm = $qData['firmware']; /* Make Sure We're Running The Expected Firmware Before Continuing */ if (strstr($qData['firmware'], "_4")) { if (($cDev->appType == 'Updater' && $cDev->userAgent[0] != '5') || ($cDev->appType == "Application" && $cDev->userAgent[0] != '4') || ($cDev->appType == "Unknown" && $cDev->userAgent[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/polycom/firmware/Polycom/sip_333/sip.ld\" CONFIG_FILES=\"http://prov.spherepbx.com/polycom/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->userAgent[0] != '4') || ($cDev->appType == "Application" && $cDev->userAgent[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/polycom/firmware/Polycom/4.0.9/sip.ld\" CONFIG_FILES=\"http://prov.spherepbx.com/polycom/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); /* Just Provide This In The REG NOW */ // $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']); $data['tpl']->assign("SERVER_PRIMARY", ""); ; $data['tpl']->assign("TRANSPORT_PRIMARY", ""); $data['tpl']->assign("SERVER_BACKUP", ""); $data['tpl']->assign("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.50.")) $query = "UPDATE sippeers SET permit = '67.84.244.213/255.255.255.255', deny = '0.0.0.0/0.0.0.0' WHERE name = '" . $val['extension'] . "'"; else { $query = "UPDATE sippeers SET permit = '" . $_SERVER['REMOTE_ADDR'] . "/255.255.255.255', deny = '0.0.0.0/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 { // Temp Stuff if (!isset($val['server_port_primary'])) $val['server_port_primary'] = "5060"; if (!isset($val['transport_primary'])) $val['transport_primary'] = "UDPOnly"; if (!isset($val['server_port_backup'])) $val['server_port_backup'] = "5060"; if (!isset($val['transport_backup'])) $val['transport_backup'] = "UDPOnly"; $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 (strstr($qData['firmware'], "_409")) { $data['tpl']->assign("FIRMWARE", "http://prov.spherepbx.com/polycom/firmware/4.0.9/sip.ld"); $defDir = "http://prov.spherepbx.com/polycom/defaults/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/polycom/firmware/" . $qData['firmware'] . "/sip.ld"); $data['tpl']->assign("CONFIG_FILES", "http://prov.spherepbx.com/polycom/defaults/" . $qData['firmware'] . "/device-ubix.cfg, " . $cFile[0] . "-sip.cfg, http://prov.spherepbx.com/polycom/defaults/" . $qData['firmware'] . "/features-ubix.cfg"); } $data['tpl']->assign("MISC_FILES", ""); break; case 'web': $query = "SELECT cfg FROM voip_device_configs WHERE mac = '" . $cFile[0] . "' AND cfg_type = 'web'"; $res = $data['ubix_db']->query($query); 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 { $wD = $res->fetch_row(); $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); 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 { $wD = $res->fetch_row(); $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; } } 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(); } } } 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); } } ?>