Newer
Older
ubFramework / Provisioning / docroot / getData.php
@Christopher W. Olsen Christopher W. Olsen on 10 Dec 2017 28 KB iSinc
<?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 $
 
 *****************************************************************************************/


if ($_SERVER['REMOTE_ADDR'] != "192.168.55.143")
  exit();
else
	Header("Location: /polycom/");


/* Main include info */
ini_set ( 'include_path', $_SERVER ['DOCUMENT_ROOT'] . "/include/" );
include ("config.php");

$reg409 = 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' => "60",
  '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' => "60",
  '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' => "",
  'server.2.register' => "",
  'server.2.port' => "5060",
  'server.2.transport' => "DNSnaptr" 
);

/* Firmware Matchup */
$polyMatrix = Array (
  'SPIP' => Array (
    // '301' => '3.1.8',
    // '320' => '3.3.5',
    // '330' => '3.3.5',
    '321' => Array (
      'firmware' => '4.0.9',
      'reg' => $reg409 
    ),
    '331' => Array (
      'firmware' => '4.0.9',
      'reg' => $reg409 
    ),
    '335' => Array (
      'firmware' => '4.0.9',
      'reg' => $reg409 
    ),
    // '430' => '3.2.7',
    '450' => Array (
      'firmware' => '4.0.9',
      'reg' => $reg409 
    ),
    // '501' => '3.1.8',
    '550' => Array (
      'firmware' => '4.0.9',
      'reg' => $reg409 
    ),
    '560' => Array (
      'firmware' => '4.0.9',
      'reg' => $reg409 
    ),
    // '600' => '3.1.8',
    // '601' => '3.1.8',
    '650' => Array (
      'firmware' => '4.0.9',
      'reg' => $reg409 
    ),
    '670' => Array (
      'firmware' => '4.0.9',
      'reg' => $reg409 
    ) 
  ) 
);

/* Main defines */
$data ['tpl']->define ( array (
  "conf_file" => "error.tpl" 
) );

$regEx = "/((?:[a-zA-Z][a-zA-Z]+)) ((?:[a-zA-Z][a-zA-Z]+))-((?:[a-zA-Z][a-zA-Z]+))_(\d+)-((?:[a-zA-Z][a-zA-Z]+))\/((?:[\w\.\-]+)+) ((?:[a-zA-Z][a-zA-Z]+))\/((?:[a-zA-Z][a-zA-Z]+))/";
$regEx2 = "/((?:[a-zA-Z][a-zA-Z]+)) ((?:[a-zA-Z][a-zA-Z]+))-((?:[a-zA-Z][a-zA-Z]+))_(\d+)-((?:[a-zA-Z][a-zA-Z]+))\/((?:[\w\.\-]+)+) \(((?:[a-zA-Z][a-zA-Z]+)):((?:[\w\.\-]+)+)\) ((?:[a-zA-Z][a-zA-Z]+))\/((?:[a-zA-Z][a-zA-Z]+))/";

$pM = preg_match ( $regEx, $_SERVER ['HTTP_USER_AGENT'], $dI );

if ($pM == 0)
  $pM = preg_match ( $regEx2, $_SERVER ['HTTP_USER_AGENT'], $dI );

system ( "echo 'PM: " . $pM . " - " . json_encode ( $dI ) . "' >> /tmp/AGENT.log" );

$devAgent = explode ( ' ', $_SERVER ['HTTP_USER_AGENT'] );

switch ($devAgent [0]) {
  case 'FileTransport' :
    $eC = count ( $devAgent );
    system ( "echo 'Polycom Device: " . $eC . "' >> /tmp/AGENT.log" );
    
    $cDev = Array (
      'Status' => 'Cold' 
    );
    
    $regEx = "/((?:[a-zA-Z][a-zA-Z]+))-((?:[a-zA-Z][a-zA-Z]+))_(\d+)-((?:[a-zA-Z][a-zA-Z]+))\/((?:[\w\.\-]+)+)/";
    preg_match ( $regEx, $devAgent [1], $dI );
    
    $cDev ['family'] = $dI [1];
    $cDev ['model'] = $dI [2];
    $cDev ['model_no'] = $dI [3];
    $cDev [$dI [4]] = $dI [5];
    
    if ($eC == 4) {
      $cDev ['status'] = 'Warm';
      
      system ( "echo 'Device Information Contains SN' >> /tmp/AGENT.log" );
      $regEx = "/\(((?:[a-zA-Z][a-zA-Z]+)):((?:[\w\.\-]+)+)\)/";
      preg_match ( $regEx, $devAgent [2], $dI );
      $cDev [$dI [1]] = $dI [2];
      
      $regEx = "/((?:[a-zA-Z][a-zA-Z]+))\/((?:[a-zA-Z][a-zA-Z]+))/";
      preg_match ( $regEx, $devAgent [3], $dI );
      $cDev [$dI [1]] = $dI [2];
    }
    else if ($eC == 3) {
      
      if ($devAgent [2] [1] == 'S') {
        system ( "echo 'Device Information Contains SN With No Type' >> /tmp/AGENT.log" );
        $regEx = "/\(((?:[a-zA-Z][a-zA-Z]+)):((?:[\w\.\-]+)+)\)/";
        preg_match ( $regEx, $devAgent [2], $dI );
        $cDev [$dI [1]] = $dI [2];
      }
      else {
        $cDev ['status'] = 'Warm';
        system ( "echo 'Device Information Does Not Contain SN' >> /tmp/AGENT.log" );
        $regEx = "/((?:[a-zA-Z][a-zA-Z]+))\/((?:[a-zA-Z][a-zA-Z]+))/";
        preg_match ( $regEx, $devAgent [2], $dI );
        $cDev [$dI [1]] = $dI [2];
      }
    }
    else {
      $cDev ['status'] = 'Invalid';
      
      system ( "echo 'Invalid Device Information' >> /tmp/AGENT.log" );
      unset ( $cDev );
    }
    break;
  default :
    system ( "echo 'Unsupported Device' >> /tmp/AGENT.log" );
    break;
}

system ( "echo 'cDev: " . json_encode ( $cDev ) . "' >> /tmp/AGENT.log" );

switch ($data ['type']) {
  case 'conf' :
    $cFile = explode ( "-", $data ['file'] );
    
    if (count ( $cFile ) == 1)
      $cFile [1] = "mac";
    
    if (strlen ( $cFile [0] ) == 12) {
      if (isset ( $cDev ) && $data ['mode'] == 'dg' && (($cDev ['UA'] [0] == '4' && $cDev ['Type'] == 'Application') || $cDev ['UA'] [0] == '5')) {
        system ( "echo 'DG: " . $data ['mode'] . "' >> /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=\"/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ;
          exit ();
        }
        else
          script404 ();
      }
      else if (isset ( $cDev ) && $data ['mode'] == 'ug' && (($cDev ['UA'] [0] == '3' && $cDev ['Type'] == 'Application') || $cDev ['UA'] [0] == '4')) {
        system ( "echo 'UG: " . $data ['mode'] . "-" . $cDev ['UA'] . "' >> /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=\"/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ;
          exit ();
        }
        else
          script404 ();
      }
      else {
        $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 ();
      }
      
      if (isset ( $cDev ) && $cDev ['status'] == 'Cold') {
        if (strstr ( $qData ['firmware'], "_4" ) && $cDev ['UA'] [0] == '4') {
          system ( "echo 'CUG: " . $data ['mode'] . "-" . $cDev ['UA'] . "' >> /tmp/AGENT.log" );
          if ($cFile [0] == "000000000000") {
            print ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<APPLICATION APP_FILE_PATH=\"\" CONFIG_FILES=\"/ns/ug.cfg\" MISC_FILES=\"\" LOG_FILE_DIRECTORY=\"/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICENSE_DIRECTORY=\"\" />") ;
            exit ();
          }
        }
        else if (strstr ( $qData ['firmware'], "_3" ) && $cDev ['UA'] [0] == '5') {
          system ( "echo 'CDG: " . $data ['mode'] . "-" . $cDev ['UA'] . "' >> /tmp/AGENT.log" );
          if ($cFile [0] == "000000000000") {
            print ("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<APPLICATION APP_FILE_PATH=\"\" CONFIG_FILES=\"/ns/ug.cfg\" MISC_FILES=\"\" LOG_FILE_DIRECTORY=\"/logs/\" OVERRIDES_DIRECTORY=\"\" CONTACTS_DIRECTORY=\"\" LICEN
SE_DIRECTORY=\"\" />") ;
            exit ();
          }
        }
      }
      
      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 ();
          
          $extensions = json_decode ( $qData ['extensions'], true );
          
          /*
           * OLD!
           *
           *
           * $mwi = "";
           * $i = 1;
           *
           * foreach ( $extensions as $key => $val ) {
           * for($x = 0; $x < $val ['line_keys']; $x ++) {
           * // MrOlsen - This is Temp 04-30-2015
           * if (isset ( $val ['server_primary'] ))
           * $val ['server_primary'] = $val ['server_primary'];
           *
           * $mwi .= "msg.mwi.$i.callBackMode=\"Contact\" msg.mwi.$i.subscribe=\"" . $val ['server_primary'] . "\" msg.mwi.$i.callBack=\"*98\" ";
           * $i ++;
           * }
           * $i ++;
           * }
           *
           *
           * $data ['tpl']->assign ( "MWI", $mwi );
           */
          
          $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 = "";
          
          foreach ( $extensions as $key => $val ) {
            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'];
              
              $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 = "";
            }
            
            $dI [3] = 'SPIP';
            $dI [4] = '331';
            
            if ($user != "" && $pass != "") {
              if (isset ( $polyMatrix [$dI [3]] [$dI [4]] ['reg'] )) {
                $rI = $polyMatrix [$dI [3]] [$dI [4]] ['reg'];
                $rI ['displayName'] = $dN;
                $rI ['address'] = $user;
                $rI ['label'] = $label;
                $rI ['auth.userId'] = $user;
                $rI ['auth.password'] = $pass;
                $rI ['lineKeys'] = $LKS;
                $rI ['callsPerLineKey'] = $CPK;
                $rI ['server.1.address'] = $val ['server_primary'];
                $rI ['server.1.port'] = $val ['server_port_primary'];
                $rI ['server.1.transport'] = $val ['primary_transport'];
                $rI ['server.2.address'] = $val ['server_backup'];
                $rI ['server.1.register'] = $rG;
                $rI ['server.2.register'] = $rG;
                $rI ['server.2.port'] = $val ['server_port_backup'];
                $rI ['server.2.transport'] = $val ['backup_transport'];
                
                foreach ( $rI as $rKey => $rVal ) {
                  $reg .= 'reg.' . $i . '.' . $rKey . '="' . $rVal . '" ';
                }
              }
              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 ['primary_transport'] . "\" 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 ['backup_transport'] . "\" 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\" ";
            }
            
            $i ++;
          }
          
          $data ['tpl']->assign ( "DIALPLAN", $qData ['dialplan'] );
          $data ['tpl']->assign ( "DIALPLAN_TIMEOUT", $qData ['dialplan_timeout'] );
          
          $data ['tpl']->assign ( "REG", $reg );
          $data ['tpl']->assign ( "MWI", $mwi );
          
          break;
        case 'phone-old' :
          $data ['tpl']->define ( array (
            "conf_file" => $qData ['firmware'] . "/000000000000-phone.tpl" 
          ) );
          
          $extensions = json_decode ( $qData ['extensions'], true );
          
          $ext = "";
          $i = 1;
          $reg = "";
          
          foreach ( $extensions as $key => $val ) {
            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'];
              
              $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 != "")
              $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 ['primary_transport'] . "\" 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 ['backup_transport'] . "\" reg.$i.auth.domain=\"\" reg.$i.outboundProxy.address=\"\" ";
            
            $i ++;
          }
          
          $data ['tpl']->assign ( "DIALPLAN", $qData ['dialplan'] );
          $data ['tpl']->assign ( "DIALPLAN_TIMEOUT", $qData ['dialplan_timeout'] );
          
          $data ['tpl']->assign ( "REG", $reg );
          break;
        case 'directory' :
          $query = "SELECT directory FROM voip_device_directories WHERE mac = '" . $cFile [0] . "'";
          $query = "SELECT cfg FROM voip_device_configs WHERE mac = '" . $cFile [0] . "' 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 ();
          }
          exit ();
          break;
        case 'mac' :
          $data ['tpl']->define ( array (
            "conf_file" => "000000000000.tpl" 
          ) );
          
          if (isset ( $polyMatrix [$dI [3]] [$dI [4]] ['firmware'] )) {
            $data ['tpl']->assign ( "FIRMWARE", "/firmware/" . $qData ['manufacturer'] . "/" . $polyMatrix [$dI [3]] [$dI [4]] ['firmware'] . "/sip.ld" );
            $defDir = "/defaults/" . $qData ['manufacturer'] . "/" . $polyMatrix [$dI [3]] [$dI [4]] ['firmware'];
            $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", "/firmware/" . $qData ['manufacturer'] . "/" . $qData ['firmware'] . "/sip.ld" );
            $data ['tpl']->assign ( "CONFIG_FILES", "/defaults/" . $qData ['firmware'] . "/device-ubix.cfg, " . $cFile [0] . "-sip.cfg, /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)
            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") ;
          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 */ /*
                    * Parse
                    * and * print
                    */
$data ['tpl']->parse ( "CONF_FILE", array (
  "conf_file" 
) );
$data ['tpl']->FastPrint ( "CONF_FILE" );
function script404($message = '404 Not Found') {
  header ( $_SERVER ["SERVER_PROTOCOL"] . " " . $message );
  exit ( 0 );
}
?>