summaryrefslogtreecommitdiff
path: root/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm
diff options
context:
space:
mode:
Diffstat (limited to 'xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm')
-rw-r--r--xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm94
1 files changed, 89 insertions, 5 deletions
diff --git a/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm b/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm
index 8845544..613566a 100644
--- a/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm
+++ b/xpp/perl_modules/Dahdi/Config/Gen/Chandahdi.pm
@@ -38,10 +38,83 @@ sub reset_chandahdi_values {
}
}
-sub gen_digital($$) {
+sub gen_openr2($$$) {
my $self = shift || die;
+ my $gconfig = shift || die;
+ my $span = shift || die;
+ my $num = $span->num() || die;
+ my $termtype = $span->termtype() || die "$0: Span #$num -- unkown termtype [NT/TE]\n";
+ my $type = $span->type;
+ # Fake type for signalling
+ my $faketype = ($termtype eq 'TE') ? 'FXO' : 'FXS';
+ my $group = $gconfig->{'group'}{"$type"};
+ die "$0: missing default group (termtype=$termtype)\n" unless defined($group);
+ my $context = $gconfig->{'context'}{"$faketype"};
+ die "$0: missing default context\n" unless $context;
+ my @to_reset = qw/context group/;
+ my $chans = Dahdi::Config::Gen::bchan_range($span);
+ $group .= "," . (10 + $num); # Invent unique group per span
+ my $country = $gconfig->{'loadzone'};
+ my @valid_countries = qw( ar br cn cz co ec itu mx ph ve );
+ die "Country '$country' is invalid for R2. Use one of: @valid_countries\n"
+ unless grep { $_ eq $country } @valid_countries;
+ printf "group=$group\n";
+ printf "context=$context\n";
+ printf "switchtype = %s\n", $span->switchtype;
+ printf "signalling = %s\n", 'mfcr2';
+ printf "caller = %s\n", ($termtype eq 'TE') ? 'no' : 'yes';
+ printf "mfcr2_logdir = span%d\n", $span->num;
+ print <<"EOF";
+mfcr2_variant=$country
+mfcr2_get_ani_first=no
+mfcr2_max_ani=10
+mfcr2_max_dnis=4
+mfcr2_category=national_subscriber
+mfcr2_call_files=yes
+mfcr2_logging=all
+mfcr2_mfback_timeout=-1
+mfcr2_metering_pulse_timeout=-1
+EOF
+ printf "channel => %s\n", $chans;
+
+ reset_chandahdi_values(@to_reset);
+}
+
+sub gen_cas($$$) {
+ my $self = shift || die;
+ my $gconfig = shift || die;
+ my $span = shift || die;
+ my $num = $span->num() || die;
+ my $termtype = $span->termtype() || die "$0: Span #$num -- unkown termtype [NT/TE]\n";
+ my $type = $span->type;
+ my $group = $gconfig->{'group'}{"$type"};
+ die "$0: missing default group (termtype=$termtype)\n" unless defined($group);
+ my $context = $gconfig->{'context'}{"$type"};
+ die "$0: missing default context\n" unless $context;
+ # Fake type for signalling
+ my $faketype = ($termtype eq 'TE') ? 'FXO' : 'FXS';
+ my $sig = $gconfig->{'chan_dahdi_signalling'}{$faketype};
+ my $em_signalling = $gconfig->{'em_signalling'};
+ if ($em_signalling ne 'none') {
+ $sig = $em_signalling;
+ # FIXME: but we don't handle E1 yet
+ $sig = 'em_e1' if $span->proto eq 'E1';
+ }
+ my @to_reset = qw/context group/;
+ my $chans = Dahdi::Config::Gen::chan_range($span->chans());
+ $group .= "," . (10 + $num); # Invent unique group per span
+ printf "group=$group\n";
+ printf "context=$context\n";
+ printf "switchtype = %s\n", $span->switchtype;
+ printf "signalling = %s\n", $sig;
+ printf "channel => %s\n", $chans;
+ reset_chandahdi_values(@to_reset);
+}
+
+sub gen_digital($$$) {
+ my $self = shift || die;
+ my $gconfig = shift || die;
my $span = shift || die;
- my $gconfig = $self->{GCONFIG};
my $num = $span->num() || die;
die "Span #$num is analog" unless $span->is_digital();
if($span->is_pri && $gconfig->{'pri_connection_type'} eq 'R2') {
@@ -66,7 +139,7 @@ sub gen_digital($$) {
print "overlapdial = yes\n";
push(@to_reset, qw/overlapdial/);
}
-
+
$group .= "," . (10 + $num); # Invent unique group per span
printf "group=$group\n";
printf "context=$context\n";
@@ -92,6 +165,7 @@ sub gen_channel($$) {
return if $type eq 'EMPTY';
die "missing default_chan_dahdi_signalling for chan #$num type $type" unless $sig;
+ die "missing context for chan #$num type $type" unless $context;
$callerid = ($type eq 'FXO')
? 'asreceived'
: sprintf "\"Channel %d\" <%04d>", $num, $exten;
@@ -153,8 +227,18 @@ sub generate($) {
HEAD
foreach my $span (@spans) {
printf "; Span %d: %s %s\n", $span->num, $span->name, $span->description;
- if($span->is_digital()) {
- $self->gen_digital($span);
+ if($span->is_digital) {
+ if($span->is_pri) {
+ if($gconfig->{'pri_connection_type'} eq 'R2') {
+ $self->gen_openr2($gconfig, $span);
+ } elsif($gconfig->{'pri_connection_type'} eq 'CAS') {
+ $self->gen_cas($gconfig, $span);
+ } else {
+ $self->gen_digital($gconfig, $span);
+ }
+ } elsif($span->is_bri) {
+ $self->gen_digital($gconfig, $span);
+ }
} else {
foreach my $chan ($span->chans()) {
if(is_true($genopts->{'freepbx'}) || is_true($gconfig->{'freepbx'})) {