diff options
author | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2009-11-04 17:52:29 +0000 |
---|---|---|
committer | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2009-11-04 17:52:29 +0000 |
commit | ef4399ff222f532ef427255e30ec9016b9e25c1e (patch) | |
tree | c607bf7c25e13ca4d312552f3bac3c980f205faa /xpp/perl_modules/Dahdi/Config/Gen.pm | |
parent | 1588ee041e01dc31a75046dcf442da2fdc68ed66 (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.pm | 78 |
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); |