2004-04-28 13:58:19 +00:00
#!/usr/bin/perl -Tw
# Author: Peter Nixon <codemonkey@peternixon.net>
# Date: April 2004
# Copy Policy: GNU Public Licence Version 2 or later
# URL: http://www.peternixon.net/code/
# Supported: PostgreSQL, Oracle, MySQL
2021-10-30 21:04:41 -04:00
# Copyright: 2004 Peter Nixon <codemonkey@peternixon.net>
2004-04-28 13:58:19 +00:00
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# $Id$
#
# Use these commands to create the appropriate SQL tables
# If flags is 1 then the record is not included in the output extensions file
2017-12-22 09:23:22 -05:00
#
2004-04-28 13:58:19 +00:00
#CREATE TABLE extensions (
# context VARCHAR(20) DEFAULT 'default' NOT NULL,
# extension VARCHAR(20) NOT NULL,
# priority INTEGER DEFAULT '1' NOT NULL,
# application VARCHAR(20) NOT NULL,
# args VARCHAR(50),
# descr TEXT,
# flags BOOLEAN DEFAULT '0' NOT NULL,
# PRIMARY KEY(context, extension, priority)
#);
#CREATE TABLE globals (
# variable VARCHAR(20) NOT NULL,
# value VARCHAR(50) NOT NULL,
# PRIMARY KEY(variable, value)
#);
use strict ; # Make sure we write decent perl code
require DBI ; # We need database drivers for this thing to work
################### BEGIN OF CONFIGURATION ####################
my $ table_name = "extensions" ; # name of the extensions table
my $ global_table_name = "globals" ; # name of the globals table
my $ extensions_conf = "/etc/asterisk/extensions.conf" ; # path to extensions.conf
# WARNING: this file will be substituted by the output of this program
my $ dbbrand = "Pg" ; # Hint: "mysql" or any other Perl DBI driver.
my $ hostname = "localhost" ; # The SQL server's hostname or IP
my $ database = "peter" ; # the name of the database our tables are kept
my $ username = "peter" ; # username to connect to the database
my $ password = "" ; # password to connect to the database
my $ verbose = 1 ; # Verbosity Level (0 - 2)
################### END OF CONFIGURATION #######################
# You should not need to edit anything below here
my $ dbh ;
sub db_connect {
if ( $ verbose > 1 ) { print "DEBUG: Connecting to Database Host: $hostname\n" }
if ( $ hostname eq 'localhost' ) {
if ( $ verbose > 1 ) { print "DEBUG: SQL server is on localhost so using UNIX socket instead of network socket.\n" }
$ dbh = DBI - > connect ( "DBI:$dbbrand:dbname=$database" , "$username" , "$password" )
or die "Couldn't connect to database: " . DBI - > errstr ;
}
else {
$ dbh = DBI - > connect ( "DBI:$dbbrand:dbname=$database;host=$hostname" , "$username" , "$password" )
or die "Couldn't connect to database: " . DBI - > errstr ;
}
}
sub db_disconnect {
if ( $ verbose > 1 ) { print "DEBUG: Disconnecting from Database Host: $hostname\n" }
$ dbh - > disconnect
or warn "Disconnection failed: $DBI::errstr\n" ;
}
sub get_globals {
if ( $ verbose > 0 ) { print "Checking Database for [global] variables\n" ; }
my $ sth = $ dbh - > prepare ( "SELECT variable, value FROM $global_table_name ORDER BY variable" )
or die "Couldn't prepare statement: " . $ dbh - > errstr ;
$ sth - > execute ( ) # Execute the query
or die "Couldn't execute SELECT statement: " . $ sth - > errstr ;
if ( $ sth - > rows > 0 ) {
print EXTEN "[globals]\n" ;
while ( my @ global = $ sth - > fetchrow_array ( ) ) {
print EXTEN "$global[0] = $global[1]\n" ;
}
print EXTEN "\n" ;
} else {
print "WARNING: You have no global variables set\n" ;
}
$ sth - > finish ;
}
sub get_contexts {
if ( $ verbose > 0 ) { print "Checking Database for contexts\n" ; }
my $ sth = $ dbh - > prepare ( "SELECT context FROM $table_name GROUP BY context" )
or die "Couldn't prepare statement: " . $ dbh - > errstr ;
$ sth - > execute ( ) # Execute the query
or die "Couldn't execute SELECT statement: " . $ sth - > errstr ;
if ( $ sth - > rows > 0 ) {
while ( my @ context = $ sth - > fetchrow_array ( ) ) {
print EXTEN "[$context[0]]\n" ;
& get_extensions ( $ context [ 0 ] ) ;
print EXTEN "\n" ;
}
print EXTEN "\n" ;
} else {
print "WARNING: You have no contexts defined in the $table_name table\n" ;
}
$ sth - > finish ;
}
sub get_extensions {
my $ context = $ _ [ 0 ] ; my @ extension ;
if ( $ verbose > 0 ) { print " Checking Database for [$context] extensions\n" ; }
my $ sth = $ dbh - > prepare ( "SELECT extension, priority, application, args, descr FROM $table_name WHERE context='$context' AND flags = '0' ORDER BY extension, priority" )
or die "Couldn't prepare statement: " . $ dbh - > errstr ;
$ sth - > execute ( ) # Execute the query
or die "Couldn't execute SELECT statement: " . $ sth - > errstr ;
if ( $ sth - > rows > 0 ) {
while ( @ extension = $ sth - > fetchrow_array ( ) ) {
print EXTEN "exten => $extension[0],$extension[1],$extension[2]" ;
print EXTEN "($extension[3])" if defined $ extension [ 3 ] ;
print EXTEN " ; $extension[4]" if defined $ extension [ 4 ] ;
print EXTEN "\n" ;
}
} else {
print "WARNING: You have no extensions for [$context]\n" ;
}
$ sth - > finish ;
}
sub main {
open EXTEN , ">$extensions_conf" || die "Cannot create/overwrite extensions file: $extensions_conf\n" ;
& db_connect ;
& get_globals ;
& get_contexts ;
& db_disconnect ;
close EXTEN ; # Close the file handle
if ( $ verbose > 0 ) { print "New $extensions_conf successfully written.\n" ; }
return 1 ;
}
exit & main ( ) ;