summaryrefslogtreecommitdiff
path: root/FS/FS/part_export
diff options
context:
space:
mode:
Diffstat (limited to 'FS/FS/part_export')
-rw-r--r--FS/FS/part_export/freeswitch.pm84
-rw-r--r--FS/FS/part_export/shellcommands.pm6
2 files changed, 52 insertions, 38 deletions
diff --git a/FS/FS/part_export/freeswitch.pm b/FS/FS/part_export/freeswitch.pm
index 7447849..eb490fd 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',
},
@@ -38,9 +39,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.
<br><br>
-You will need to
+You will need to enable the svc_phone-domain configuration setting and
<a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">setup SSH for unattended operation</a>.
END
);
@@ -50,6 +51,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 +85,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(<domain name="$domain">\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(</domain>\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 +122,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 +134,8 @@ sub freeswitch_template_fillin {
DELIMITERS => [ '<%', '%>' ],
);
- my $domain = $self->option('domain')
- || $svc_phone->domain
- || '$${sip_profile}';
-
#false lazinessish w/phone_shellcommands::_export_command
my %hash = (
- 'domain' => $domain,
map { $_ => $svc_phone->getfield($_) } $svc_phone->fields
);
diff --git a/FS/FS/part_export/shellcommands.pm b/FS/FS/part_export/shellcommands.pm
index ca4e524..f964af3 100644
--- a/FS/FS/part_export/shellcommands.pm
+++ b/FS/FS/part_export/shellcommands.pm
@@ -490,7 +490,7 @@ sub ssh_cmd { #subroutine, not method
my ($output, $errput) = $ssh->capture2($ssh_opt, $opt->{'command'});
return if $opt->{'ignore_all_errors'};
- die "Error running SSH command: ". $ssh->error if $ssh->error;
+ #die "Error running SSH command: ". $ssh->error if $ssh->error;
if ( ($output || $errput)
&& $opt->{'ignored_errors'} && length($opt->{'ignored_errors'})
@@ -504,7 +504,9 @@ sub ssh_cmd { #subroutine, not method
$errput =~ s/[\s\n]//g;
}
- die "$errput\n" if $errput;
+ die (($errput || $ssh->error). "\n") if $errput || $ssh->error;
+ #die "$errput\n" if $errput;
+
die "$output\n" if $output and $opt->{'fail_on_output'};
'';
}