X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Ffreeswitch.pm;h=291130fdeed743728163cb7b73e9e73c3f763ac0;hb=368ed08e24400e9d1faf401a1e4e23ea54d2c969;hp=7447849c81b03f41fb9c03c0e3ba506172b120ed;hpb=97d5dd9cb66d37a692c0eac78091019befd02a17;p=freeside.git
diff --git a/FS/FS/part_export/freeswitch.pm b/FS/FS/part_export/freeswitch.pm
index 7447849c8..291130fde 100644
--- a/FS/FS/part_export/freeswitch.pm
+++ b/FS/FS/part_export/freeswitch.pm
@@ -5,7 +5,8 @@ use vars qw( %info ); # $DEBUG );
#use Data::Dumper;
use Tie::IxHash;
use Text::Template;
-#use FS::Record qw( qsearch qsearchs );
+use FS::Record qw( qsearch ); #qsearchs );
+use FS::svc_phone;
#use FS::Schema qw( dbdef );
#$DEBUG = 1;
@@ -15,7 +16,7 @@ tie my %options, 'Tie::IxHash',
'directory' => { label => 'Directory to store FreeSWITCH account XML files',
default => '/usr/local/freeswitch/conf/directory/',
},
- 'domain' => { label => 'Optional fixed SIP domain to use, overrides svc_phone domain', },
+ #'domain' => { label => 'Optional fixed SIP domain to use, overrides svc_phone domain', },
'reload' => { label => 'Reload command',
default => '/usr/local/freeswitch/bin/fs_cli -x reloadxml',
},
@@ -26,6 +27,8 @@ tie my %options, 'Tie::IxHash',
+
+
@@ -38,9 +41,9 @@ END
'desc' => 'Provision phone services to FreeSWITCH XML configuration files',
'options' => \%options,
'notes' => <<'END',
-Export XML account configuration files to FreeSWITCH, one per phone services.
+Export XML account configuration files to FreeSWITCH, one per domain.
-You will need to
+You will need to enable the svc_phone-domain configuration setting and
setup SSH for unattended operation.
END
);
@@ -50,6 +53,33 @@ sub rebless { shift; }
sub _export_insert {
my( $self, $svc_phone ) = ( shift, shift );
+ $self->_export_rebuild_domain($svc_phone);
+
+}
+
+sub _export_replace {
+ my( $self, $new, $old ) = ( shift, shift, shift );
+
+ my $error = $self->_export_rebuild_domain($new);
+ return $error if $error;
+
+ if ( $new->domsvc ne $old->domsvc && $old->domsvc ) {
+ $error = $self->_export_rebuild_domain($old);
+ return $error if $error;
+ }
+
+ '';
+}
+
+sub _export_delete {
+ my( $self, $svc_phone ) = ( shift, shift );
+
+ $self->_export_rebuild_domain($svc_phone);
+}
+
+sub _export_rebuild_domain {
+ my($self, $svc_phone) = ( shift, shift );
+
eval "use Net::SCP;";
die $@ if $@;
@@ -57,24 +87,34 @@ sub _export_insert {
my $tempdir = '%%%FREESIDE_CONF%%%/cache.'. $FS::UID::datasrc;
- my $svcnum = $svc_phone->svcnum;
+ my $domain = $svc_phone->domain or return "domain required";
my $fh = new File::Temp(
- TEMPLATE => "$tempdir/freeswitch.$svcnum.XXXXXXXX",
+ TEMPLATE => "$tempdir/freeswitch.$domain.XXXXXXXX",
DIR => $dir,
#UNLINK => 0,
);
- print $fh $self->freeswitch_template_fillin( $svc_phone, 'user' )
- or die "print to freeswitch template failed: $!";
- close $fh;
+ print $fh qq(\n);
+
+ my @dom_svc_phone = qsearch( 'svc_phone', { 'domsvc'=>$svc_phone->domsvc } );
+
+ foreach my $dom_svc_phone (@dom_svc_phone) {
+
+ print $fh $self->freeswitch_template_fillin( $dom_svc_phone, 'user' )
+ or die "print to freeswitch template failed: $!";
+
+ }
+
+ print $fh qq(\n);
+ $fh->flush;
my $scp = new Net::SCP;
my $user = $self->option('user')||'root';
my $host = $self->machine;
my $dir = $self->option('directory');
- $scp->scp( $fh->filename, "$user\@$host:$dir/$svcnum.xml" )
+ $scp->scp( $fh->filename, "$user\@$host:$dir/$domain.xml" )
or return $scp->{errstr};
#signal freeswitch to reload config
@@ -84,27 +124,6 @@ sub _export_insert {
}
-sub _export_replace {
- my( $self, $new, $old ) = ( shift, shift, shift );
-
- $self->_export_insert($new, @_);
-}
-
-sub _export_delete {
- my( $self, $svc_phone ) = ( shift, shift );
-
- my $dir = $self->option('directory');
- my $svcnum = $svc_phone->svcnum;
-
- #delete file
- $self->freeswitch_ssh( command => "rm $dir/$svcnum.xml" );
-
- #signal freeswitch to reload config
- $self->freeswitch_ssh( command => $self->option('reload') );
-
- '';
-}
-
sub freeswitch_template_fillin {
my( $self, $svc_phone, $template ) = (shift, shift, shift);
@@ -117,13 +136,13 @@ sub freeswitch_template_fillin {
DELIMITERS => [ '<%', '%>' ],
);
- my $domain = $self->option('domain')
- || $svc_phone->domain
- || '$${sip_profile}';
+ my $cust_pkg = $svc_phone->cust_svc->cust_pkg;
+ my $nibble_rate = $cust_pkg ? $cust_pkg->part_pkg->option('nibble_rate')
+ : '';
#false lazinessish w/phone_shellcommands::_export_command
my %hash = (
- 'domain' => $domain,
+ 'nibble_rate' => $nibble_rate,
map { $_ => $svc_phone->getfield($_) } $svc_phone->fields
);