summaryrefslogtreecommitdiff
path: root/FS/FS
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2012-09-27 20:24:42 -0700
committerIvan Kohler <ivan@freeside.biz>2012-09-27 20:24:42 -0700
commit10370b0320f56af88c90e572644e91332815100f (patch)
treefc196408b8e1adadc7c720a1b7baa8f0c5e4f2e5 /FS/FS
parenteb9148f0ab9aac5e4f89824b7fab6bb9d648e688 (diff)
freeswitch provisioning: one file per domain, RT#18087
Diffstat (limited to 'FS/FS')
-rw-r--r--FS/FS/part_export/freeswitch.pm84
1 files changed, 48 insertions, 36 deletions
diff --git a/FS/FS/part_export/freeswitch.pm b/FS/FS/part_export/freeswitch.pm
index 7447849c8..eb490fd85 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
);