fix typos in some xpp utils
[dahdi/tools.git] / xpp / dahdi_genconf
1 #! /usr/bin/perl -w
2 #
3 # Written by Oron Peled <oron@actcom.co.il>
4 # Copyright (C) 2007, Xorcom
5 # This program is free software; you can redistribute and/or
6 # modify it under the same terms as Perl itself.
7 #
8 # $Id$
9 #
10 use strict;
11 use File::Basename;
12 BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/perl_modules"); }
13
14 use Getopt::Std;
15 use Dahdi;
16 use Dahdi::Xpp;
17 use Dahdi::Config::Gen;
18 use Dahdi::Config::Params;
19
20 my $version = '1';      # Functionality version (integer)
21 my $revision = '$Revision$';
22
23 my %opts;
24
25 sub set_defaults {
26         my $default_file = $ENV{GENCONF_PARAMETERS} || "/etc/dahdi/genconf_parameters";
27         my $params = Dahdi::Config::Params->new($default_file);
28         #$params->dump;
29         if($opts{v}) {
30                 print "Default parameters from ", $params->{GENCONF_FILE}, "\n";
31         }
32         my $gconfig = Dahdi::Config::Gen->new($params);
33         #$gconfig->dump;
34         return $gconfig;
35 }
36
37 sub spans_prep($@) {
38         my $gconfig = shift || die;
39         my @spans = @_;
40         foreach my $span (@spans) {
41                 if($span->is_pri || $span->is_bri) {
42                         $span->pri_set_fromconfig($gconfig);
43                 }
44         }
45 }
46
47 sub generator_list($) {
48         my $gconfig = shift || die;
49         my @genlist;
50
51         if (@ARGV) {
52                 for my $gen (@ARGV) {
53                         push @genlist, $gen;
54                 }
55         } else {
56                 # No files given. Use the defaults.
57                 @genlist = ('system', 'chandahdi');
58                 if($gconfig->{'pri_connection_type'} eq 'R2') {
59                         push @genlist, 'unicall';
60                 }
61         }
62         return @genlist;
63 }
64
65 sub parse_genopts($) {
66         my $optstr = shift;
67         my %genopts;
68
69         $optstr = '' unless defined $optstr;
70         foreach my $o (split(/,/, $optstr)) {
71                 my ($k, $v) = split(/=/, $o, 2);
72                 $v = 1 unless defined $v and $v;
73                 $genopts{$k} = $v;
74         }
75         return %genopts;
76 }
77
78 sub generate_files($@) {
79         my $gconfig = shift || die;
80         my @spans = @_;
81         my @generators = generator_list($gconfig);
82
83         for my $gen (@generators) {
84                 my ($name, $optstr) = split(/=/, $gen, 2);
85                 die "Illegal name '$name'\n" unless $name =~ /^\w+$/;
86                 $name =~ s/(.)(.*)/\u$1\L$2/;
87                 my %genopts = parse_genopts($optstr);
88                 $genopts{'freepbx'} = 'yes' if $opts{'F'};
89                 if(defined $opts{'v'}) {
90                         $genopts{'verbose'} = $opts{v};
91                 }
92                 $gconfig->run_generator($name, \%genopts, @spans);
93         }
94 }
95
96 getopts('vVF', \%opts) || die "$0: Bad option\n";
97 if($opts{'V'}) {
98         my $revstr = $revision;
99         $revstr =~ s/[^$]*\$[^:]+:\s*//;
100         $revstr =~ s/\s*\$.*//;
101         print "$0: version=$version revision=$revstr\n";
102         exit 0;
103 }
104
105 my $gconfig = set_defaults;
106 my @spans = Dahdi::spans();
107 spans_prep($gconfig, @spans);
108 generate_files($gconfig, @spans);
109
110 __END__
111
112 =head1 NAME
113
114 dahdi_genconf - Generate configuration for Dahdi channels.
115
116 =head1 SYNOPSIS
117
118 dahdi_genconf [options] [generator...]
119
120 =head1 DESCRIPTION
121
122 This script generate configuration files for Dahdi hardware.
123 It uses two information sources:
124
125 =over 4
126
127 =item Hardware
128
129  The actual Dahdi hardware is automatically detected on the host.
130
131 =item /etc/dahdi/genconf_parameters
132
133 A configuration file that supplements the hardware information.
134 Its location may be overridden via the C<GENCONF_PARAMETERS> environment
135 variable.
136
137 =back
138
139 The dahdi_genconf script can generate various kinds of configuration files
140 as specified by the generator arguments.  Each generator is a perl class
141 in Dahdi::Config::Gen namespace.  The generator names on the command line
142 are the class names in lowercase.
143
144 The following generators are currently implemented: system, chandahdi, unicall, users.
145 For further documentation on each, please user perldoc on the relevant
146 class. E.g: C<perldoc Dahdi::Config::Gen::Chandahdi>
147
148 Each generator on the command line may be passed custom options by assigning
149 a comma separated list of options to the generator name. E.g:
150
151  dahdi_genconf system chandahdi=verbose unicall
152
153 =head2 Global options:
154
155 =over 4
156
157 =item -V
158
159 Version -- print version string and exit.
160
161 =item -v
162
163 Verbose -- sets the C<'verbose'> option for all generators.
164
165 =item -F
166
167 Freepbx -- sets the C<'freepbx'> option for all generators.
168 Currently, chandahdi is affected.
169
170
171 =back
172
173 =head2 Implementation notes:
174
175 =over 4
176
177 =item *
178
179 F<genconf_parameters> parsing is done via C<Dahdi::Config::Params>.
180 An object representing the parsed data is instantiated by:
181 C<Dahdi::Config::Params-E<gt>new()>.
182 The C<item()> method of this object contains all the hard coded
183 defaults of the configuration directives.
184
185 =item *
186
187 A configuration object is instantiated by C<Dahdi::Config::Gen-E<gt>new($params)>.
188 The mapping of configuration directives into semantic configuration is
189 done in the constructor.
190
191 =item *
192
193 A single generator is run via the the C<run_generator()> method of the
194 configuration object.
195
196 =back