summaryrefslogtreecommitdiff
path: root/xpp/perl_modules/Dahdi/Config/Gen.pm
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-11-04 17:52:29 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2009-11-04 17:52:29 +0000
commitef4399ff222f532ef427255e30ec9016b9e25c1e (patch)
treec607bf7c25e13ca4d312552f3bac3c980f205faa /xpp/perl_modules/Dahdi/Config/Gen.pm
parent1588ee041e01dc31a75046dcf442da2fdc68ed66 (diff)
CAS DAHD/Asterisk configuration generation support
Also support generating (open)R2 config in chan_dahdi.conf, while we're at it. Default configuration remains ISDN as before if no extra settings are given in genconf_parameters. Merged revisions 7016,7018-7019,7224,7257 via svnmerge from http://svn.digium.com/svn/dahdi/tools/trunk ........ r7016 | tzafrir | 2009-08-16 20:04:04 +0300 (Sun, 16 Aug 2009) | 6 lines dahdi-perl: chan_dahdi.conf generator can generate openr2 conf If configured to use R2 ("pri_connection_type R2" in genconf_parameters), the chandahdi generator of dahdi_genconf will now generate configuration for the openr2 support in chan_dahdi. ........ r7018 | tzafrir | 2009-08-16 20:19:26 +0300 (Sun, 16 Aug 2009) | 10 lines xpp: Dahdi::Config::Gen.pm: improvements in preperation for T1-CAS: - New channo_range() method which returns range strings for any list of channel numbers (handle sorting, validation, etc.) - Reimplement bchan_range() as a small wrapper around channo_range(). - Another small wrapper is chan_range() that works on channel objects. - Also a parse_chan_range() does the reverse (from range string to a list of channel numbers). This isn't used at the moment. xpp rev: 7306 ........ r7019 | tzafrir | 2009-08-16 20:27:28 +0300 (Sun, 16 Aug 2009) | 11 lines dahdi-perl: Add basic T1-CAS support for dahdi_genconf - Support added in generators of system.conf and of chan_dahdi.conf . - Some strange asumptions about being FXS/FXO depending on being timing provider/supplier. - New gen_cas() method for Chandahdi and System. - Now gen_digital() is a bit cleaner. - Call gen_cas(), gen_openr2(), gen_digital() according to the 'pri_connection_type' config (CAS, R2, PRI/BRI). xpp rev: 7307 ........ r7224 | tzafrir | 2009-09-27 17:01:20 +0200 (Sun, 27 Sep 2009) | 6 lines dahdi_perl: improved config generation for T1 CAS A few extra options for a CAS span signalling. xpp rev: 7343, 7346, 7369 ........ r7257 | tzafrir | 2009-09-29 21:28:58 +0200 (Tue, 29 Sep 2009) | 2 lines xpp: more T1-CAS config generation support ........ git-svn-id: http://svn.asterisk.org/svn/dahdi/tools/branches/2.2@7475 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'xpp/perl_modules/Dahdi/Config/Gen.pm')
-rw-r--r--xpp/perl_modules/Dahdi/Config/Gen.pm78
1 files changed, 68 insertions, 10 deletions
diff --git a/xpp/perl_modules/Dahdi/Config/Gen.pm b/xpp/perl_modules/Dahdi/Config/Gen.pm
index 709fad7..5cfeb9c 100644
--- a/xpp/perl_modules/Dahdi/Config/Gen.pm
+++ b/xpp/perl_modules/Dahdi/Config/Gen.pm
@@ -55,33 +55,89 @@ sub is_true($) {
return $val =~ /^(1|y|yes)$/i;
}
-# Generate channel range strings from span objects
+sub range_string($$) {
+ my ($start, $end) = @_;
+
+ if($start == $end) {
+ sprintf "%d", $start;
+ } else {
+ sprintf "%d-%d", $start, $end;
+ }
+}
+
+# Generate channel range strings from arrays of chan numbers
# E.g: "63-77,79-93"
-sub bchan_range($) {
- my $span = shift || die;
- my $first_chan = ($span->chans())[0];
- my $first_num = $first_chan->num();
+sub channo_range(@) {
+ my @channos = sort { $a <=> $b } @_;
+ my $first_num = $channos[0];
my $range_start = $first_num;
my @range;
my $prev = undef;
- die unless $span->is_digital();
- foreach my $c (@{$span->bchan_list()}) {
- my $curr = $c + $first_num;
+ foreach my $c (@channos) {
+ my $curr = $c;
if(!defined($prev)) {
+ # First iteration
$prev = $curr;
} elsif($curr != $prev + 1) {
- push(@range, sprintf("%d-%d", $range_start, $prev));
+ # New range
+ push(@range, range_string($range_start, $prev));
$range_start = $curr;
}
$prev = $curr;
}
if($prev >= $first_num) {
- push(@range, sprintf("%d-%d", $range_start, $prev));
+ # Last range
+ push(@range, range_string($range_start, $prev));
}
return join(',', @range);
}
+# Generate channel range strings from chan objects
+# E.g: "63-77,79-93"
+sub chan_range(@) {
+ my @chans = sort { $a->num <=> $b->num } @_;
+ my @channos = map { $_->num } @chans;
+ channo_range(@channos);
+}
+
+# Generate channel range strings from digital span objects
+# E.g: "63-77,79-93"
+sub bchan_range($) {
+ my $span = shift || die;
+ die unless $span->is_digital();
+ my $first_chan = ($span->chans())[0];
+ my $first_num = $first_chan->num();
+ my $bchan_ref = $span->bchan_list();
+ my @channos = map { $_ + $first_num } @{$bchan_ref};
+ channo_range(@channos);
+}
+
+# Returns a channel numbers array from a channel range string
+sub parse_chan_range($) {
+ my $rangestr = shift;
+ $rangestr =~ s/\s*//g; # Squeeze
+ die "Bad characters in '$rangestr'" if $rangestr =~ /[^\d\s,-]/;
+ my @ranges = split(/,/, $rangestr);
+ my @channos;
+ my $last_end;
+
+ foreach my $range (@ranges) {
+ my ($start, $end) = split(/-/, $range, 2);
+ $end = $start unless defined $end;
+ die "Bad characters in '$start'" if $start =~ /\D/;
+ die "Bad characters in '$end'" if $end =~ /\D/;
+ die "Reversed range $end < $start" if $end < $start;
+ die "Channel number < 1" if $start < 1;
+ die "New range begins below previous $start <= $last_end" if defined($last_end) && $last_end >= $start;
+ for(my $i = $start + 0; $i <= $end; $i++) {
+ push(@channos, $i);
+ }
+ $last_end = $end;
+ }
+ return sort { $a <=> $b } @channos;
+}
+
sub new($) {
my $pack = shift || die "$0: Missing package argument";
my $p = shift || die "$0: Missing parameters argument";
@@ -149,10 +205,12 @@ sub new($) {
bri_hardhdlc
bri_sig_style
r2_idle_bits
+ tdm_framing
echo_can
brint_overlap
pri_termtype
pri_connection_type
+ em_signalling
);
foreach my $k (@trivial) {
$gconfig->{$k} = $p->item($k);